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 '\"' }
26 '/../' { TokEmphasis $$ }
29 '>..' { TokBirdTrack $$ }
32 STRING { TokString $$ }
34 %monad { Either String }
36 %name parseHaddockParagraphs doc
37 %name parseHaddockString seq
41 doc :: { HsDoc RdrName }
42 : apara PARA doc { docAppend $1 $3 }
45 | {- empty -} { DocEmpty }
47 apara :: { HsDoc RdrName }
48 : ulpara { DocUnorderedList [$1] }
49 | olpara { DocOrderedList [$1] }
50 | defpara { DocDefList [$1] }
53 ulpara :: { HsDoc RdrName }
56 olpara :: { HsDoc RdrName }
59 defpara :: { (HsDoc RdrName, HsDoc RdrName) }
60 : '[' seq ']' seq { ($2, $4) }
62 para :: { HsDoc RdrName }
63 : seq { docParagraph $1 }
64 | codepara { DocCodeBlock $1 }
66 codepara :: { HsDoc RdrName }
67 : '>..' codepara { docAppend (DocString $1) $2 }
68 | '>..' { DocString $1 }
70 seq :: { HsDoc RdrName }
71 : elem seq { docAppend $1 $2 }
74 elem :: { HsDoc RdrName }
76 | '@' seq1 '@' { DocMonospaced $2 }
78 seq1 :: { HsDoc RdrName }
79 : PARA seq1 { docAppend (DocString "\n") $2 }
80 | elem1 seq1 { docAppend $1 $2 }
83 elem1 :: { HsDoc RdrName }
84 : STRING { DocString $1 }
85 | '/../' { DocEmphasis (DocString $1) }
88 | ANAME { DocAName $1 }
89 | IDENT { DocIdentifier $1 }
90 | DQUO strings DQUO { DocModule $2 }
94 | STRING strings { $1 ++ $2 }
97 happyError :: [Token] -> Either String a
99 -- Left ("parse error in doc string: " ++ show (take 3 toks))
100 Left ("parse error in doc string")
102 -- Either monad (we can't use MonadError because GHC < 5.00 has
103 -- an older incompatible version).
104 instance Monad (Either String) where
106 Left l >>= _ = Left l