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 '\"' }
25 '/../' { TokEmphasis $$ }
28 '>..' { TokBirdTrack $$ }
31 STRING { TokString $$ }
33 %monad { Either String }
35 %name parseHaddockParagraphs doc
36 %name parseHaddockString seq
40 doc :: { HsDoc RdrName }
41 : apara PARA doc { docAppend $1 $3 }
44 | {- empty -} { DocEmpty }
46 apara :: { HsDoc RdrName }
47 : ulpara { DocUnorderedList [$1] }
48 | olpara { DocOrderedList [$1] }
49 | defpara { DocDefList [$1] }
52 ulpara :: { HsDoc RdrName }
55 olpara :: { HsDoc RdrName }
58 defpara :: { (HsDoc RdrName, HsDoc RdrName) }
59 : '[' seq ']' seq { ($2, $4) }
61 para :: { HsDoc RdrName }
62 : seq { docParagraph $1 }
63 | codepara { DocCodeBlock $1 }
65 codepara :: { HsDoc RdrName }
66 : '>..' codepara { docAppend (DocString $1) $2 }
67 | '>..' { DocString $1 }
69 seq :: { HsDoc RdrName }
70 : elem seq { docAppend $1 $2 }
73 elem :: { HsDoc RdrName }
75 | '@' seq1 '@' { DocMonospaced $2 }
77 seq1 :: { HsDoc RdrName }
78 : PARA seq1 { docAppend (DocString "\n") $2 }
79 | elem1 seq1 { docAppend $1 $2 }
82 elem1 :: { HsDoc RdrName }
83 : STRING { DocString $1 }
84 | '/../' { DocEmphasis (DocString $1) }
86 | ANAME { DocAName $1 }
87 | IDENT { DocIdentifier $1 }
88 | DQUO strings DQUO { DocModule $2 }
92 | STRING strings { $1 ++ $2 }
95 happyError :: [Token] -> Either String a
97 -- Left ("parse error in doc string: " ++ show (take 3 toks))
98 Left ("parse error in doc string")
100 -- Either monad (we can't use MonadError because GHC < 5.00 has
101 -- an older incompatible version).
102 instance Monad (Either String) where
104 Left l >>= _ = Left l