git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: Fix pandoc title blocks with lines ending in 2 spaces.
4b49f92John MacFarlane
src/Text/Pandoc/Readers/Markdown.hs+23−19
@@ -122,9 +122,6 @@ inList = do
122 ctx <- stateParserContext <$> getState
122 ctx <- stateParserContext <$> getState
123 guard (ctx == ListItemState)
123 guard (ctx == ListItemState)
124
124
125−isNull :: F Inlines -> Bool
126−isNull ils = B.isNull $ runF ils def
127−
128spnl :: Parser [Char] st ()
125spnl :: Parser [Char] st ()
129spnl = try $ do
126spnl = try $ do
130 skipSpaces
127 skipSpaces
@@ -188,31 +185,38 @@ charsInBalancedBrackets openBrackets =
188-- document structure
185-- document structure
189--
186--
190
187
191−titleLine :: MarkdownParser (F Inlines)
188+rawTitleBlockLine :: MarkdownParser String
192−titleLine = try $ do
189+rawTitleBlockLine = do
193 char '%'
190 char '%'
194 skipSpaces
191 skipSpaces
195− res <- many $ (notFollowedBy newline >> inline)
192+ first <- anyLine
196− <|> try (endline >> whitespace)
193+ rest <- many $ try $ do spaceChar
197− newline
194+ notFollowedBy blankline
195+ skipSpaces
196+ anyLine
197+ return $ trim $ unlines (first:rest)
198+
199+titleLine :: MarkdownParser (F Inlines)
200+titleLine = try $ do
201+ raw <- rawTitleBlockLine
202+ res <- parseFromString (many inline) raw
198 return $ trimInlinesF $ mconcat res
203 return $ trimInlinesF $ mconcat res
199
204
200authorsLine :: MarkdownParser (F [Inlines])
205authorsLine :: MarkdownParser (F [Inlines])
201authorsLine = try $ do
206authorsLine = try $ do
202− char '%'
207+ raw <- rawTitleBlockLine
203− skipSpaces
208+ let sep = (char ';' <* spaces) <|> newline
204− authors <- sepEndBy (many (notFollowedBy (satisfy $ \c ->
209+ let pAuthors = sepEndBy
205− c == ';' || c == '\n') >> inline))
210+ (trimInlinesF . mconcat <$> many
206− (char ';' <|>
207− try (newline >> notFollowedBy blankline >> spaceChar))
211+ (try $ notFollowedBy sep >> inline))
208− newline
212+ sep
209− return $ sequence $ filter (not . isNull) $ map (trimInlinesF . mconcat) authors
213+ sequence <$> parseFromString pAuthors raw
210
214
211dateLine :: MarkdownParser (F Inlines)
215dateLine :: MarkdownParser (F Inlines)
212dateLine = try $ do
216dateLine = try $ do
213− char '%'
217+ raw <- rawTitleBlockLine
214− skipSpaces
218+ res <- parseFromString (many inline) raw
215− trimInlinesF . mconcat <$> manyTill inline newline
219+ return $ trimInlinesF $ mconcat res
216
220
217titleBlock :: MarkdownParser ()
221titleBlock :: MarkdownParser ()
218titleBlock = pandocTitleBlock <|> mmdTitleBlock
222titleBlock = pandocTitleBlock <|> mmdTitleBlock
tests/Tests/Old.hs+1−1
@@ -57,7 +57,7 @@ tests = [ testGroup "markdown"
57 "tables.txt" "tables.native"
57 "tables.txt" "tables.native"
58 , test "pipe tables" ["-r", "markdown", "-w", "native", "--columns=80"]
58 , test "pipe tables" ["-r", "markdown", "-w", "native", "--columns=80"]
59 "pipe-tables.txt" "pipe-tables.native"
59 "pipe-tables.txt" "pipe-tables.native"
60− , test "more" ["-r", "markdown", "-w", "native", "-S"]
60+ , test "more" ["-r", "markdown", "-w", "native", "-s", "-S"]
61 "markdown-reader-more.txt" "markdown-reader-more.native"
61 "markdown-reader-more.txt" "markdown-reader-more.native"
62 , lhsReaderTest "markdown+lhs"
62 , lhsReaderTest "markdown+lhs"
63 ]
63 ]
tests/markdown-reader-more.native+2−2
@@ -1,5 +1,5 @@
1−[Para [Str "spanning",Space,Str "multiple",Space,Str "lines",SoftBreak,Str "%",Space,Str "Author",Space,Str "One",SoftBreak,Str "Author",Space,Str "Two;",Space,Str "Author",Space,Str "Three;",SoftBreak,Str "Author",Space,Str "Four"]
1+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "Author",Space,Str "One"],MetaInlines [Str "Author",Space,Str "Two"],MetaInlines [Str "Author",Space,Str "Three"],MetaInlines [Str "Author",Space,Str "Four"]]),("title",MetaInlines [Str "Title",SoftBreak,Str "spanning",Space,Str "multiple",Space,Str "lines"])]})
2−,Header 1 ("additional-markdown-reader-tests",[],[]) [Str "Additional",Space,Str "markdown",Space,Str "reader",Space,Str "tests"]
2+[Header 1 ("additional-markdown-reader-tests",[],[]) [Str "Additional",Space,Str "markdown",Space,Str "reader",Space,Str "tests"]
3,Header 2 ("blank-line-before-url-in-link-reference",[],[]) [Str "Blank",Space,Str "line",Space,Str "before",Space,Str "URL",Space,Str "in",Space,Str "link",Space,Str "reference"]
3,Header 2 ("blank-line-before-url-in-link-reference",[],[]) [Str "Blank",Space,Str "line",Space,Str "before",Space,Str "URL",Space,Str "in",Space,Str "link",Space,Str "reference"]
4,Para [Link ("",[],[]) [Str "foo"] ("/url",""),Space,Str "and",Space,Link ("",[],[]) [Str "bar"] ("/url","title")]
4,Para [Link ("",[],[]) [Str "foo"] ("/url",""),Space,Str "and",Space,Link ("",[],[]) [Str "bar"] ("/url","title")]
5,Header 2 ("raw-context-environments",[],[]) [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]
5,Header 2 ("raw-context-environments",[],[]) [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]