git.iko.soy/typeable/pandoc
on master help sign in
Textile reader: fixed list parsing bug. Closes #1500.
7b47042John MacFarlane
src/Text/Pandoc/Readers/Textile.hs+16−5
@@ -265,8 +265,20 @@ definitionList :: Parser [Char] ParserState Blocks
265definitionList = try $ B.definitionList <$> many1 definitionListItem
265definitionList = try $ B.definitionList <$> many1 definitionListItem
266
266
267-- | List start character.
267-- | List start character.
268−listStart :: Parser [Char] st Char
268+listStart :: Parser [Char] ParserState ()
269−listStart = oneOf "*#-"
269+listStart = genericListStart '*'
270+ <|> () <$ genericListStart '#'
271+ <|> () <$ definitionListStart
272+
273+genericListStart :: Char -> Parser [Char] st ()
274+genericListStart c = () <$ try (many1 (char c) >> whitespace)
275+
276+definitionListStart :: Parser [Char] ParserState Inlines
277+definitionListStart = try $ do
278+ char '-'
279+ whitespace
280+ trimInlines . mconcat <$>
281+ many1Till inline (try (string ":=")) <* optional whitespace
270
282
271listInline :: Parser [Char] ParserState Inlines
283listInline :: Parser [Char] ParserState Inlines
272listInline = try (notFollowedBy newline >> inline)
284listInline = try (notFollowedBy newline >> inline)
@@ -278,8 +290,7 @@ listInline = try (notFollowedBy newline >> inline)
278-- break.
290-- break.
279definitionListItem :: Parser [Char] ParserState (Inlines, [Blocks])
291definitionListItem :: Parser [Char] ParserState (Inlines, [Blocks])
280definitionListItem = try $ do
292definitionListItem = try $ do
281− string "- "
293+ term <- definitionListStart
282− term <- mconcat <$> many1Till inline (try (whitespace >> string ":="))
283 def' <- multilineDef <|> inlineDef
294 def' <- multilineDef <|> inlineDef
284 return (term, def')
295 return (term, def')
285 where inlineDef :: Parser [Char] ParserState [Blocks]
296 where inlineDef :: Parser [Char] ParserState [Blocks]
@@ -488,7 +499,7 @@ str = do
488 return $ B.str fullStr
499 return $ B.str fullStr
489
500
490-- | Some number of space chars
501-- | Some number of space chars
491−whitespace :: Parser [Char] ParserState Inlines
502+whitespace :: Parser [Char] st Inlines
492whitespace = many1 spaceChar >> return B.space <?> "whitespace"
503whitespace = many1 spaceChar >> return B.space <?> "whitespace"
493
504
494-- | In Textile, an isolated endline character is a line break
505-- | In Textile, an isolated endline character is a line break
tests/textile-reader.native+4
@@ -63,6 +63,10 @@ Pandoc (Meta {unMeta = fromList []})
63 ,BulletList
63 ,BulletList
64 [[Plain [Str "ui",Space,Str "2.1.1"]]
64 [[Plain [Str "ui",Space,Str "2.1.1"]]
65 ,[Plain [Str "ui",Space,Str "2.1.2"]]]]]]]
65 ,[Plain [Str "ui",Space,Str "2.1.2"]]]]]]]
66+,Header 2 ("issue-1500",[],[]) [Str "Issue",Space,Str "#1500"]
67+,BulletList
68+ [[Plain [Str "one"]]
69+ ,[Plain [Str "two",LineBreak,Str "->",Space,Str "and",Space,Str "more"]]]
66,Header 2 ("definition-list",[],[]) [Str "Definition",Space,Str "List"]
70,Header 2 ("definition-list",[],[]) [Str "Definition",Space,Str "List"]
67,DefinitionList
71,DefinitionList
68 [([Str "coffee"],
72 [([Str "coffee"],
tests/textile-reader.textile+6
@@ -117,6 +117,12 @@ h2. Nested
117*** ui 2.1.1
117*** ui 2.1.1
118*** ui 2.1.2
118*** ui 2.1.2
119
119
120+h2. Issue #1500
121+
122+* one
123+* two
124+-> and more
125+
120h2. Definition List
126h2. Definition List
121
127
122- coffee := Hot and black
128- coffee := Hot and black