git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: don't coalesce adjacent raw LaTeX blocks...

if they are separated by a blank line. See lierdakil/pandoc-crossref#160 for motivation.

commitca8cd38bdca72d1db4ba740481c48e3705b6ee63 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 17 Jan 2018, 09:22 (9 years ago) parentfcbec16
3 files changed+20−4
src/Text/Pandoc/Readers/Markdown.hs+9−3 test/command/adjacent_latex_blocks.md+9 test/markdown-reader-more.native+2−1
src/Text/Pandoc/Readers/Markdown.hs+9−3
@@ -122,6 +122,13 @@ spnl = try $ do
122122 skipSpaces
123123 notFollowedBy (char '\n')
124124
125+spnl' :: PandocMonad m => ParserT [Char] st m String
126+spnl' = try $ do
127+ xs <- many spaceChar
128+ ys <- option "" $ try $ (:) <$> newline
129+ <*> (many spaceChar <* notFollowedBy (char '\n'))
130+ return (xs ++ ys)
131+
125132indentSpaces :: PandocMonad m => MarkdownParser m String
126133indentSpaces = try $ do
127134 tabStop <- getOption readerTabStop
@@ -1125,10 +1132,9 @@ rawTeXBlock = do
11251132 lookAhead $ try $ char '\\' >> letter
11261133 result <- (B.rawBlock "context" . trim . concat <$>
11271134 many1 ((++) <$> (rawConTeXtEnvironment <|> conTeXtCommand)
1128− <*> (blanklines <|> many spaceChar)))
1135+ <*> spnl'))
11291136 <|> (B.rawBlock "latex" . trim . concat <$>
1130− many1 ((++) <$> rawLaTeXBlock
1131− <*> (blanklines <|> many spaceChar)))
1137+ many1 ((++) <$> rawLaTeXBlock <*> spnl'))
11321138 return $ case B.toList result of
11331139 [RawBlock _ cs]
11341140 | all (`elem` [' ','\t','\n']) cs -> return mempty
test/command/adjacent_latex_blocks.mdnew file+9
@@ -0,0 +1,9 @@
1+```
2+% pandoc -f markdown -t native
3+\listoffigures
4+
5+\listoftables
6+^D
7+[RawBlock (Format "latex") "\\listoffigures"
8+,RawBlock (Format "latex") "\\listoftables"]
9+```
test/markdown-reader-more.native+2−1
@@ -3,7 +3,8 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "Author",S
33,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"]
44,Para [Link ("",[],[]) [Str "foo"] ("/url",""),Space,Str "and",Space,Link ("",[],[]) [Str "bar"] ("/url","title")]
55,Header 2 ("raw-context-environments",[],[]) [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]
6−,RawBlock (Format "context") "\\placeformula \\startformula\n L_{1} = L_{2}\n \\stopformula\n\n\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]"
6+,RawBlock (Format "context") "\\placeformula \\startformula\n L_{1} = L_{2}\n \\stopformula"
7+,RawBlock (Format "context") "\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]"
78,Header 2 ("raw-latex-environments",[],[]) [Str "Raw",Space,Str "LaTeX",Space,Str "environments"]
89,RawBlock (Format "latex") "\\begin{center}\n\\begin{tikzpicture}[baseline={([yshift=+-.5ex]current bounding box.center)}, level distance=24pt]\n\\Tree [.{S} [.NP John\\index{i} ] [.VP [.V likes ] [.NP himself\\index{i,*j} ]]]\n\\end{tikzpicture}\n\\end{center}"
910,Header 2 ("urls-with-spaces-and-punctuation",[],[]) [Str "URLs",Space,Str "with",Space,Str "spaces",Space,Str "and",Space,Str "punctuation"]