diff options
| -rw-r--r-- | src/HaddockLex.hs | 14 | ||||
| -rw-r--r-- | src/HaddockParse.y | 4 | 
2 files changed, 15 insertions, 3 deletions
diff --git a/src/HaddockLex.hs b/src/HaddockLex.hs index f766222d..f1646453 100644 --- a/src/HaddockLex.hs +++ b/src/HaddockLex.hs @@ -11,7 +11,7 @@ module HaddockLex (  import Char -special = '`' : '\'' : '\"' : '@' : '/' : [] +special = '`' : '\'' : '\"' : '@' : []  data Token    = TokPara @@ -19,6 +19,7 @@ data Token    | TokBullet    | TokSpecial Char    | TokString String +  | TokEmph String    | TokURL String    | TokBirdTrack    deriving Show @@ -33,6 +34,7 @@ tokenise "" = []  tokenise str = case str of    '<':cs  -> tokenise_url cs    '\n':cs -> tokenise_newline tokenise cs +  '/':cs  -> tokenise_emph tokenise cs    c:cs | c `elem` special -> TokSpecial c : tokenise cs    _other  -> tokenise_string "" str @@ -42,6 +44,12 @@ tokenise_newline next cs =     '>':cs  -> TokBirdTrack : next cs -- bird track     _other  -> tokenise_string "" cs +tokenise_emph next cs =  + case break newlineSlash cs of +   (bef, aft@('\n':cs)) -> TokString ('/':bef) : next aft -- paragraph break +   (bef, '/':cs)        -> TokEmph bef : next cs +   _other               -> tokenise_string "" cs +  tokenise_para cs =    case dropWhile nonNewlineSpace cs of     	-- bullet:  '*' @@ -60,6 +68,8 @@ tokenise_para cs =  nonNewlineSpace c = isSpace c && c /= '\n' +newlineSlash c = c == '\n' || c == '/' +  -- ----------------------------------------------------------------------------  -- Within a paragraph, we don't throw away any whitespace (except before a  -- birdtrack, and before a paragraph break). @@ -69,6 +79,7 @@ tokenise1 "" = []  tokenise1 str = case str of    '<':cs  -> tokenise_url cs    '\n':cs -> tokenise_newline1 cs +  '/':cs  -> tokenise_emph tokenise1 cs    c:cs | c `elem` special -> TokSpecial c : tokenise1 cs    _other  -> tokenise_string "" str @@ -93,6 +104,7 @@ tokenise_string str cs =      '\\':c:cs -> tokenise_string (c:str) cs      '\n':cs   -> tokenise_string_newline str cs      '<':cs    -> TokString (reverse str) : tokenise_url cs +    '/':cs    -> TokString (reverse str) : tokenise_emph (tokenise_string "") cs      c:cs | c `elem` special -> TokString (reverse str) : tokenise1 (c:cs)           | otherwise 	    -> tokenise_string (c:str) cs diff --git a/src/HaddockParse.y b/src/HaddockParse.y index f74d2b69..17fbf2f4 100644 --- a/src/HaddockParse.y +++ b/src/HaddockParse.y @@ -12,13 +12,13 @@ import HsParseMonad  %token 	SQUO	{ TokSpecial '\'' }  	BQUO	{ TokSpecial '`' }  	DQUO 	{ TokSpecial '\"' } -	'/'	{ TokSpecial '/' }  	'@'	{ TokSpecial '@' }  	URL	{ TokURL $$ }  	'*'	{ TokBullet }  	'(n)'	{ TokNumber }  	'>'	{ TokBirdTrack }  	PARA    { TokPara } +        EMPH    { TokEmph $$ }  	STRING	{ TokString $$ }  %monad { Either String } @@ -67,7 +67,7 @@ seq1	:: { Doc }  elem1	:: { Doc }  	: STRING		{ DocString $1 } -	| '/' STRING '/'	{ DocEmphasis (DocString $2) } +	| EMPH           	{ DocEmphasis (DocString $1) }  	| URL			{ DocURL $1 }  	| squo STRING squo	{ strToHsQNames $2 }  	| DQUO STRING DQUO	{ DocModule $2 }  | 
