git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #2042 from lierdakil/issue1866

LaTeX Reader: check for block-level newcommand aliases in blockCommand

commit9a79538ac9d924f159836f0681655f06b493b57e authorJohn MacFarlane <jgm@berkeley.edu> dateTue 31 Mar 2015, 09:44 (12 years ago) parent2b2f7fef1eb1ab
3 files changed+50−4
src/Text/Pandoc/Readers/LaTeX.hs+13−3 tests/latex-reader.latex+27 tests/latex-reader.native+10−1
src/Text/Pandoc/Readers/LaTeX.hs+13−3
@@ -239,17 +239,28 @@ block = (mempty <$ comment)
239239blocks :: LP Blocks
240240blocks = mconcat <$> many block
241241
242+getRawCommand :: String -> LP String
243+getRawCommand name' = do
244+ rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced)
245+ return $ '\\' : name' ++ snd rawargs
246+
242247blockCommand :: LP Blocks
243248blockCommand = try $ do
244249 name <- anyControlSeq
245250 guard $ name /= "begin" && name /= "end"
246251 star <- option "" (string "*" <* optional sp)
247252 let name' = name ++ star
253+ let raw = do
254+ rawcommand <- getRawCommand name'
255+ transformed <- applyMacros' rawcommand
256+ guard $ transformed /= rawcommand
257+ notFollowedBy $ parseFromString inlines transformed
258+ parseFromString blocks transformed
248259 case M.lookup name' blockCommands of
249260 Just p -> p
250261 Nothing -> case M.lookup name blockCommands of
251262 Just p -> p
252− Nothing -> mzero
263+ Nothing -> raw
253264
254265inBrackets :: Inlines -> Inlines
255266inBrackets x = (str "[") <> x <> (str "]")
@@ -385,8 +396,7 @@ inlineCommand = try $ do
385396 star <- option "" (string "*")
386397 let name' = name ++ star
387398 let raw = do
388− rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced)
389− let rawcommand = '\\' : name ++ star ++ snd rawargs
399+ rawcommand <- getRawCommand name'
390400 transformed <- applyMacros' rawcommand
391401 if transformed /= rawcommand
392402 then parseFromString inlines transformed
tests/latex-reader.latex+27
@@ -845,4 +845,31 @@ indented.
845845
846846\$ \% \& \# \_ \{ \}
847847
848+\section{Block newcommands}
849+
850+See e.g. issues #1866, #1835
851+
852+\newcommand{\FIG}[3]{
853+ \begin{figure}[h!]
854+ \centering
855+ \includegraphics[width=#2\columnwidth,angle=0]{#1}
856+ \caption{#3}
857+ \label{fig:#1}
858+ \end{figure}
859+}
860+
861+\newcommand{\separator}{\vspace{4em}}
862+
863+\separator
864+
865+\FIG{lalune.jpg}{0.5}{Test caption}
866+
867+\newcommand{\wbal}{The Wikibook about \LaTeX}
868+
869+\wbal is a good resource for learning \LaTeX.
870+
871+\separator with trailing inlines
872+
873+\FIG{lalune.jpg}{0.5}{Test caption} with trailing inlines
874+
848875\end{document}
tests/latex-reader.native+10−1
@@ -372,4 +372,13 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
372372 [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]]
373373,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
374374,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"]
375−,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]]
375+,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]
376+,Header 1 ("block-newcommands",[],[]) [Str "Block",Space,Str "newcommands"]
377+,Para [Str "See",Space,Str "e.g.",Space,Str "issues",Space,Str "#1866,",Space,Str "#1835"]
378+,RawBlock (Format "latex") "\\vspace{4em}"
379+,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
380+,Para [Span ("",[],[]) [Str "The",Space,Str "Wikibook",Space,Str "about",Space,Str "LaTeX"],Str "is",Space,Str "a",Space,Str "good",Space,Str "resource",Space,Str "for",Space,Str "learning",Space,Str "LaTeX."]
381+,RawBlock (Format "latex") "\\vspace{4em}"
382+,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]
383+,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
384+,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]]