From ea54ebc01fc0a448ed523530a3a52271191337f1 Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 18 Aug 2003 11:48:46 +0000 Subject: [haddock @ 2003-08-18 11:48:46 by simonmar] Fixes to the new lexer. --- src/HaddockLex.x | 12 ++++++++---- src/HaddockParse.y | 10 +++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) (limited to 'src') 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 \_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~] { $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 = -- cgit v1.2.3