diff options
-rw-r--r-- | src/HaddockLex.x | 12 | ||||
-rw-r--r-- | src/HaddockParse.y | 10 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/HaddockLex.x b/src/HaddockLex.x index d888aeff..0c606bdf 100644 --- a/src/HaddockLex.x +++ b/src/HaddockLex.x @@ -19,7 +19,7 @@ import Debug.Trace $ws = $white # \n $digit = [0-9] -$special = [\"\@\/\#] +$special = [\"\@\/] $alphanum = [A-Za-z0-9] $ident = [$alphanum \_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~] @@ -47,10 +47,13 @@ $ident = [$alphanum \_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~] <string> { $special { strtoken $ \s -> TokSpecial (head s) } \<.*\> { strtoken $ \s -> TokURL (init (tail s)) } + \#.*\# { strtoken $ \s -> TokAName (init (tail s)) } [\'\`] $ident+ [\'\`] { ident } \\ . { strtoken (TokString . tail) } - [^ $special \< \n \'\` \\]* \n { strtoken TokString `andBegin` line } - [^ $special \< \n \'\` \\]+ { strtoken TokString } + -- allow single-quotes to be literal if they don't surround identifiers + [\'\`] { strtoken TokString } + [^ $special \< \# \n \'\` \\]* \n { strtoken TokString `andBegin` line } + [^ $special \< \# \n \'\` \\]+ { strtoken TokString } } { @@ -62,6 +65,7 @@ data Token | TokIdent [HsQName] | TokString String | TokURL String + | TokAName String | TokBirdTrack String deriving Show @@ -79,7 +83,7 @@ alexGetChar (_, c:cs) = Just (c, (c,cs)) alexInputPrevChar (c,_) = c tokenise :: String -> [Token] -tokenise str = let toks = go ('\n',str) para in trace (show toks) toks +tokenise str = let toks = go ('\n',str) para in {- trace (show toks) -} toks where go inp@(_,str) sc = case alexScan inp sc of AlexEOF -> [] diff --git a/src/HaddockParse.y b/src/HaddockParse.y index db712c42..e1a1cb8c 100644 --- a/src/HaddockParse.y +++ b/src/HaddockParse.y @@ -10,8 +10,8 @@ import HsSyn %token '/' { TokSpecial '/' } '@' { TokSpecial '@' } DQUO { TokSpecial '\"' } - '#' { TokSpecial '#' } URL { TokURL $$ } + ANAME { TokAName $$ } '*' { TokBullet } '(n)' { TokNumber } '>..' { TokBirdTrack $$ } @@ -65,12 +65,16 @@ seq1 :: { Doc } elem1 :: { Doc } : STRING { DocString $1 } - | '/' STRING '/' { DocEmphasis (DocString $2) } - | '#' STRING '#' { DocAName $2 } + | '/' strings '/' { DocEmphasis $2 } | URL { DocURL $1 } + | ANAME { DocAName $1 } | IDENT { DocIdentifier $1 } | DQUO STRING DQUO { DocModule $2 } +strings :: { Doc } + : STRING { DocString $1 } + | STRING strings { docAppend (DocString $1) $2 } + { happyError :: [Token] -> Either String a happyError toks = |