7 import Rakka.Wiki.Parser
9 import Text.ParserCombinators.Parsec
12 parseWiki :: String -> Either String WikiPage
13 parseWiki src = case parse wikiPage "" src of
14 Left err -> Left (show err)
15 Right page -> Right page
19 testData = [ (parseWiki ""
27 , (parseWiki "=heading="
29 (Right [ Heading 1 "heading" ]))
31 , (parseWiki "== heading == \n"
33 (Right [ Heading 2 "heading" ]))
35 , (parseWiki "===== hello world =====\n"
37 (Right [ Heading 5 "hello world" ]))
39 , (parseWiki "a =not a heading="
41 (Right [ Paragraph [ Text "a =not a heading=" ]
44 , (parseWiki "=h=\n\n=h="
46 (Right [ Heading 1 "h"
49 , (parseWiki "foo\nbar"
51 (Right [ Paragraph [ Text "foo"
56 , (parseWiki "foo\nbar\n\nbaz\n"
58 (Right [ Paragraph [ Text "foo"
62 , Paragraph [ Text "baz"
66 , (parseWiki "foo\n\n\nbar"
68 (Right [ Paragraph [ Text "foo" ]
69 , Paragraph [ Text "bar" ]
72 , (parseWiki "foo\n=h="
74 (Right [ Paragraph [ Text "foo" ]
78 , (parseWiki "<!-- comment -->"
82 , (parseWiki "<!-- comment -->foo"
84 (Right [ Paragraph [ Text "foo" ]
87 , (parseWiki "bar<!-- comment -->"
89 (Right [ Paragraph [ Text "bar" ]
92 , (parseWiki "foo<!-- comment -->bar"
94 (Right [ Paragraph [ Text "foo"
99 , (parseWiki "<!-- comment -->=h="
101 (Right [ Heading 1 "h" ]))
103 , (parseWiki "=h= <!---->"
105 (Right [ Heading 1 "h" ]))
107 , (parseWiki "<!-- <!-- nested --> comment -->"
111 , (parseWiki "[[Page]]"
113 (Right [ Paragraph [ PageLink (Just "Page") Nothing Nothing ]
116 , (parseWiki "[[Page|Link to \"Page\"]]"
118 (Right [ Paragraph [ PageLink (Just "Page") Nothing (Just "Link to \"Page\"") ]
121 , (parseWiki "[[Page#foo]]"
123 (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") Nothing ]
126 , (parseWiki "[[#foo]]"
128 (Right [ Paragraph [ PageLink Nothing (Just "foo") Nothing ]
131 , (parseWiki "[[Page#foo|Link to \"Page#foo\"]]"
133 (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") (Just "Link to \"Page#foo\"") ]
136 , (parseWiki "foo [[Bar]] baz"
138 (Right [ Paragraph [ Text "foo "
139 , PageLink (Just "Bar") Nothing Nothing
144 , (parseWiki "[[Foo]]\n[[Bar]]"
146 (Right [ Paragraph [ PageLink (Just "Foo") Nothing Nothing
148 , PageLink (Just "Bar") Nothing Nothing
154 (Right [ Preformatted [ Text "foo" ] ]))
156 , (parseWiki " foo\n bar\n"
158 (Right [ Preformatted [ Text "foo"
164 , (parseWiki "foo\n bar\nbaz"
166 (Right [ Paragraph [ Text "foo" ]
167 , Preformatted [ Text "bar" ]
168 , Paragraph [ Text "baz" ]
173 (Right [ HorizontalLine ]))
175 , (parseWiki "\nfoo\nbar\n----\n"
177 (Right [ Paragraph [ Text "foo"
184 , (parseWiki "a----b"
186 (Right [ Paragraph [ Text "a----b" ] ]))
190 (Right [ List (ListElement Bullet [[Right (Text "a")]]) ]))
194 (Right [ List (ListElement Bullet [[Right (Text "a*")]]) ]))
196 , (parseWiki "* a\n* b\n"
198 (Right [ List (ListElement Bullet [ [Right (Text "a")]
203 , (parseWiki "*a\n*#b\n*#c\n"
205 (Right [ List (ListElement Bullet [ [ Right (Text "a")
206 , Left (ListElement Numbered [ [Right (Text "b")]
213 , (parseWiki "*a\n#b"
215 (Right [ List (ListElement Bullet [ [Right (Text "a")] ])
216 , List (ListElement Numbered [ [Right (Text "b")] ])
219 , (parseWiki "foo:bar"
221 (Right [ Paragraph [ Text "foo"
226 , (parseWiki "; foo: bar"
228 (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
230 , (parseWiki "; foo: bar\n"
232 (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
234 , (parseWiki "; foo\n: bar\n; bar\n: baz\n: baz"
236 (Right [ DefinitionList [ Definition [Text "foo"] [ Text "bar" ]
237 , Definition [Text "bar"] [ Text "baz"
243 , (parseWiki "<![CDATA[foo [[bar]] baz]]>"
245 (Right [ Paragraph [ Text "foo [[bar]] baz" ] ]))
247 , (parseWiki "<![PDATA[foo [[bar]] baz]]>"
249 (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
251 , (parseWiki "<![PDATA[\nfoo [[bar]] baz\n]]>"
253 (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
255 , (parseWiki "foo' bar"
257 (Right [ Paragraph [ Text "foo"
262 , (parseWiki "''foo''"
264 (Right [ Paragraph [ Italic [Text "foo"] ] ]))
266 , (parseWiki "'''foo'''"
268 (Right [ Paragraph [ Bold [Text "foo"] ] ]))
270 , (parseWiki "foo''''"
272 (Right [ Paragraph [ Text "foo"
277 , (parseWiki "'''''foo'''''"
279 (Right [ Paragraph [ Italic [Bold [Text "foo"]] ] ]))