3 -- The above warning supression flag is a temporary kludge.
4 -- While working on this module you are encouraged to remove it and fix
5 -- any warnings in the module. See
6 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
9 module HaddockParse (parseHaddockParagraphs, parseHaddockString) where
11 import {-# SOURCE #-} HaddockLex
18 %token '/' { TokSpecial '/' }
19 '@' { TokSpecial '@' }
22 DQUO { TokSpecial '\"' }
27 '>..' { TokBirdTrack $$ }
30 STRING { TokString $$ }
32 %monad { Either String }
34 %name parseHaddockParagraphs doc
35 %name parseHaddockString seq
39 doc :: { HsDoc RdrName }
40 : apara PARA doc { docAppend $1 $3 }
43 | {- empty -} { DocEmpty }
45 apara :: { HsDoc RdrName }
46 : ulpara { DocUnorderedList [$1] }
47 | olpara { DocOrderedList [$1] }
48 | defpara { DocDefList [$1] }
51 ulpara :: { HsDoc RdrName }
54 olpara :: { HsDoc RdrName }
57 defpara :: { (HsDoc RdrName, HsDoc RdrName) }
58 : '[' seq ']' seq { ($2, $4) }
60 para :: { HsDoc RdrName }
61 : seq { docParagraph $1 }
62 | codepara { DocCodeBlock $1 }
64 codepara :: { HsDoc RdrName }
65 : '>..' codepara { docAppend (DocString $1) $2 }
66 | '>..' { DocString $1 }
68 seq :: { HsDoc RdrName }
69 : elem seq { docAppend $1 $2 }
72 elem :: { HsDoc RdrName }
74 | '@' seq1 '@' { DocMonospaced $2 }
76 seq1 :: { HsDoc RdrName }
77 : elem1 seq1 { docAppend $1 $2 }
80 elem1 :: { HsDoc RdrName }
81 : STRING { DocString $1 }
82 | '/' strings '/' { DocEmphasis (DocString $2) }
84 | ANAME { DocAName $1 }
85 | IDENT { DocIdentifier $1 }
86 | DQUO strings DQUO { DocModule $2 }
90 | STRING strings { $1 ++ $2 }
93 happyError :: [Token] -> Either String a
95 -- Left ("parse error in doc string: " ++ show (take 3 toks))
96 Left ("parse error in doc string")
98 -- Either monad (we can't use MonadError because GHC < 5.00 has
99 -- an older incompatible version).
100 instance Monad (Either String) where
102 Left l >>= _ = Left l