git.iko.soy/typeable/pandoc
on master help sign in
TikiWiki reader: improve list parsing (#4723)

- remove trailing Space from list items - parse lists that have no space after marker (fixes #4722)

commit0459d1be260ba9e9f51e181471368477a65409a9 authorMauro Bieg <mb21@users.noreply.github.com> dateThu 28 Jun 2018, 13:35 (8 years ago) parent7027525
3 files changed+67−32
src/Text/Pandoc/Readers/TikiWiki.hs+4−3 test/command/4722.md+34 test/tikiwiki-reader.native+29−29
src/Text/Pandoc/Readers/TikiWiki.hs+4−3
@@ -22,6 +22,7 @@ import Prelude
2222import Control.Monad
2323import Control.Monad.Except (throwError)
2424import qualified Data.Foldable as F
25+import Data.List (dropWhileEnd)
2526import Data.Maybe (fromMaybe)
2627import Data.Text (Text)
2728import qualified Data.Text as T
@@ -319,7 +320,7 @@ listItem = choice [
319320bulletItem :: PandocMonad m => TikiWikiParser m (ListNesting, B.Blocks)
320321bulletItem = try $ do
321322 prefix <- many1 $ char '*'
322− many1 $ char ' '
323+ many $ char ' '
323324 content <- listItemLine (length prefix)
324325 return (LN Bullet (length prefix), B.plain content)
325326
@@ -331,7 +332,7 @@ bulletItem = try $ do
331332numberedItem :: PandocMonad m => TikiWikiParser m (ListNesting, B.Blocks)
332333numberedItem = try $ do
333334 prefix <- many1 $ char '#'
334− many1 $ char ' '
335+ many $ char ' '
335336 content <- listItemLine (length prefix)
336337 return (LN Numbered (length prefix), B.plain content)
337338
@@ -346,7 +347,7 @@ listItemLine nest = lineContent >>= parseContent
346347 listContinuation = string (replicate nest '+') >> lineContent
347348 parseContent x = do
348349 parsed <- parseFromString (many1 inline) x
349− return $ mconcat parsed
350+ return $ mconcat $ dropWhileEnd (== B.space) parsed
350351
351352-- Turn the CODE macro attributes into Pandoc code block attributes.
352353mungeAttrs :: [(String, String)] -> (String, [String], [(String, String)])
test/command/4722.mdnew file+34
@@ -0,0 +1,34 @@
1+```
2+% pandoc -f tikiwiki -t native
3+*Level 1
4+*Level 1
5+**Level 2
6+***Level 3
7+*Level 1
8+^D
9+[BulletList
10+ [[Plain [Str "Level",Space,Str "1"]]
11+ ,[Plain [Str "Level",Space,Str "1"]
12+ ,BulletList
13+ [[Plain [Str "Level",Space,Str "2"]
14+ ,BulletList
15+ [[Plain [Str "Level",Space,Str "3"]]]]]]
16+ ,[Plain [Str "Level",Space,Str "1"]]]]
17+```
18+```
19+% pandoc -f tikiwiki -t native
20+#Level 1
21+#Level 1
22+##Level 2
23+###Level 3
24+#Level 1
25+^D
26+[OrderedList (1,DefaultStyle,DefaultDelim)
27+ [[Plain [Str "Level",Space,Str "1"]]
28+ ,[Plain [Str "Level",Space,Str "1"]
29+ ,OrderedList (1,DefaultStyle,DefaultDelim)
30+ [[Plain [Str "Level",Space,Str "2"]
31+ ,OrderedList (1,DefaultStyle,DefaultDelim)
32+ [[Plain [Str "Level",Space,Str "3"]]]]]]
33+ ,[Plain [Str "Level",Space,Str "1"]]]]
34+```
test/tikiwiki-reader.native+29−29
@@ -43,52 +43,52 @@ Pandoc (Meta {unMeta = fromList []})
4343,Para [Str "info@example.org"]
4444,Header 1 ("lists",[],[]) [Str "lists"]
4545,BulletList
46− [[Plain [Str "Start",Space,Str "each",Space,Str "line",Space]]
47− ,[Plain [Str "with",Space,Str "an",Space,Str "asterisk",Space,Str "(*).",Space]
46+ [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
47+ ,[Plain [Str "with",Space,Str "an",Space,Str "asterisk",Space,Str "(*)."]
4848 ,BulletList
49− [[Plain [Str "More",Space,Str "asterisks",Space,Str "gives",Space,Str "deeper",Space]
49+ [[Plain [Str "More",Space,Str "asterisks",Space,Str "gives",Space,Str "deeper"]
5050 ,BulletList
51− [[Plain [Str "and",Space,Str "deeper",Space,Str "levels.",Space]]]]]]
52− ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels.",Space]]
53− ,[Plain [Str "Continuations",Space,Str "are",Space,Str "also",Space,Str "possible",Space]
51+ [[Plain [Str "and",Space,Str "deeper",Space,Str "levels."]]]]]]
52+ ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels."]]
53+ ,[Plain [Str "Continuations",Space,Str "are",Space,Str "also",Space,Str "possible"]
5454 ,BulletList
55− [[Plain [Str "and",Space,Str "do",Space,Str "not",Space,Str "break",Space,Str "the",Space,Str "list",Space,Str "flow",Space]]]]
56− ,[Plain [Str "Level",Space,Str "one",Space]]]
55+ [[Plain [Str "and",Space,Str "do",Space,Str "not",Space,Str "break",Space,Str "the",Space,Str "list",Space,Str "flow"]]]]
56+ ,[Plain [Str "Level",Space,Str "one"]]]
5757,Para [Str "Any",Space,Str "other",Space,Str "start",Space,Str "ends",Space,Str "the",Space,Str "list."]
5858,OrderedList (1,DefaultStyle,DefaultDelim)
59− [[Plain [Str "Start",Space,Str "each",Space,Str "line",Space]]
60− ,[Plain [Str "with",Space,Str "a",Space,Str "number",Space,Str "(1.).",Space]
59+ [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
60+ ,[Plain [Str "with",Space,Str "a",Space,Str "number",Space,Str "(1.)."]
6161 ,OrderedList (1,DefaultStyle,DefaultDelim)
62− [[Plain [Str "More",Space,Str "number",Space,Str "signs",Space,Str "gives",Space,Str "deeper",Space]
62+ [[Plain [Str "More",Space,Str "number",Space,Str "signs",Space,Str "gives",Space,Str "deeper"]
6363 ,OrderedList (1,DefaultStyle,DefaultDelim)
64− [[Plain [Str "and",Space,Str "deeper",Space]]
65− ,[Plain [Str "levels.",Space]]]]]]
66− ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels.",Space]]
67− ,[Plain [Str "Blank",Space,Str "lines",Space]]]
64+ [[Plain [Str "and",Space,Str "deeper"]]
65+ ,[Plain [Str "levels."]]]]]]
66+ ,[Plain [Str "Line",Space,Str "breaks",LineBreak,Str "don't",Space,Str "break",Space,Str "levels."]]
67+ ,[Plain [Str "Blank",Space,Str "lines"]]]
6868,OrderedList (1,DefaultStyle,DefaultDelim)
69− [[Plain [Str "end",Space,Str "the",Space,Str "list",Space,Str "and",Space,Str "start",Space,Str "another.",Space]]]
69+ [[Plain [Str "end",Space,Str "the",Space,Str "list",Space,Str "and",Space,Str "start",Space,Str "another."]]]
7070,Para [Str "Any",Space,Str "other",Space,Str "start",Space,Str "also",Space,Str "ends",Space,Str "the",Space,Str "list."]
7171,DefinitionList
7272 [([Str "item",Space,Str "1"],
73− [[Plain [Str "definition",Space,Str "1",Space]]])
73+ [[Plain [Str "definition",Space,Str "1"]]])
7474 ,([Str "item",Space,Str "2"],
75− [[Plain [Str "definition",Space,Str "2-1",Space,Str "definition",Space,Str "2-2",Space]]])
75+ [[Plain [Str "definition",Space,Str "2-1",Space,Str "definition",Space,Str "2-2"]]])
7676 ,([Str "item",Space,Emph [Str "3"]],
77− [[Plain [Str "definition",Space,Emph [Str "3"],Space]]])]
77+ [[Plain [Str "definition",Space,Emph [Str "3"]]]])]
7878,OrderedList (1,DefaultStyle,DefaultDelim)
79− [[Plain [Str "one",Space]]
80− ,[Plain [Str "two",Space]
79+ [[Plain [Str "one"]]
80+ ,[Plain [Str "two"]
8181 ,BulletList
82− [[Plain [Str "two",Space,Str "point",Space,Str "one",Space]]
83− ,[Plain [Str "two",Space,Str "point",Space,Str "two",Space]]]]
84− ,[Plain [Str "three",Space]]
85− ,[Plain [Str "four",Space]]
86− ,[Plain [Str "five",Space]
82+ [[Plain [Str "two",Space,Str "point",Space,Str "one"]]
83+ ,[Plain [Str "two",Space,Str "point",Space,Str "two"]]]]
84+ ,[Plain [Str "three"]]
85+ ,[Plain [Str "four"]]
86+ ,[Plain [Str "five"]
8787 ,OrderedList (1,DefaultStyle,DefaultDelim)
88− [[Plain [Str "five",Space,Str "sub",Space,Str "1",Space]
88+ [[Plain [Str "five",Space,Str "sub",Space,Str "1"]
8989 ,OrderedList (1,DefaultStyle,DefaultDelim)
90− [[Plain [Str "five",Space,Str "sub",Space,Str "1",Space,Str "sub",Space,Str "1",Space]]]]
91− ,[Plain [Str "five",Space,Str "sub",Space,Str "2",Space]]]]]
90+ [[Plain [Str "five",Space,Str "sub",Space,Str "1",Space,Str "sub",Space,Str "1"]]]]
91+ ,[Plain [Str "five",Space,Str "sub",Space,Str "2"]]]]]
9292,Header 1 ("tables",[],[]) [Str "tables"]
9393,Table [] [AlignDefault,AlignDefault] [0.0,0.0]
9494 [[Plain [Str ""]]