diff options
author | John MacFarlane <jgm@berkeley.edu> | 2015-03-31 09:44:15 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2015-03-31 09:44:15 -0700 |
commit | 9a79538ac9d924f159836f0681655f06b493b57e (patch) | |
tree | e5229a5ef66c6b8a4b558aa6b296ac24063d94d1 | |
parent | 2b2f7fe15e2632fe123934ec105c8cc72cd593fd (diff) | |
parent | f1eb1ab9cf6678cabbdb5b312bbd757ed32d8a76 (diff) |
Merge pull request #2042 from lierdakil/issue1866
LaTeX Reader: check for block-level newcommand aliases in blockCommand
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 16 | ||||
-rw-r--r-- | tests/latex-reader.latex | 27 | ||||
-rw-r--r-- | tests/latex-reader.native | 11 |
3 files changed, 50 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index a517f9566..2886e2f29 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -239,17 +239,28 @@ block = (mempty <$ comment) blocks :: LP Blocks blocks = mconcat <$> many block +getRawCommand :: String -> LP String +getRawCommand name' = do + rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced) + return $ '\\' : name' ++ snd rawargs + blockCommand :: LP Blocks blockCommand = try $ do name <- anyControlSeq guard $ name /= "begin" && name /= "end" star <- option "" (string "*" <* optional sp) let name' = name ++ star + let raw = do + rawcommand <- getRawCommand name' + transformed <- applyMacros' rawcommand + guard $ transformed /= rawcommand + notFollowedBy $ parseFromString inlines transformed + parseFromString blocks transformed case M.lookup name' blockCommands of Just p -> p Nothing -> case M.lookup name blockCommands of Just p -> p - Nothing -> mzero + Nothing -> raw inBrackets :: Inlines -> Inlines inBrackets x = (str "[") <> x <> (str "]") @@ -385,8 +396,7 @@ inlineCommand = try $ do star <- option "" (string "*") let name' = name ++ star let raw = do - rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced) - let rawcommand = '\\' : name ++ star ++ snd rawargs + rawcommand <- getRawCommand name' transformed <- applyMacros' rawcommand if transformed /= rawcommand then parseFromString inlines transformed diff --git a/tests/latex-reader.latex b/tests/latex-reader.latex index 2ebdfed99..4324dbfbe 100644 --- a/tests/latex-reader.latex +++ b/tests/latex-reader.latex @@ -845,4 +845,31 @@ indented. \$ \% \& \# \_ \{ \} +\section{Block newcommands} + +See e.g. issues #1866, #1835 + +\newcommand{\FIG}[3]{ + \begin{figure}[h!] + \centering + \includegraphics[width=#2\columnwidth,angle=0]{#1} + \caption{#3} + \label{fig:#1} + \end{figure} +} + +\newcommand{\separator}{\vspace{4em}} + +\separator + +\FIG{lalune.jpg}{0.5}{Test caption} + +\newcommand{\wbal}{The Wikibook about \LaTeX} + +\wbal is a good resource for learning \LaTeX. + +\separator with trailing inlines + +\FIG{lalune.jpg}{0.5}{Test caption} with trailing inlines + \end{document} diff --git a/tests/latex-reader.native b/tests/latex-reader.native index abc4b05a7..fbc191125 100644 --- a/tests/latex-reader.native +++ b/tests/latex-reader.native @@ -372,4 +372,13 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]] ,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."] ,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"] -,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]] +,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"] +,Header 1 ("block-newcommands",[],[]) [Str "Block",Space,Str "newcommands"] +,Para [Str "See",Space,Str "e.g.",Space,Str "issues",Space,Str "#1866,",Space,Str "#1835"] +,RawBlock (Format "latex") "\\vspace{4em}" +,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")] +,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."] +,RawBlock (Format "latex") "\\vspace{4em}" +,Para [Str "with",Space,Str "trailing",Space,Str "inlines"] +,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")] +,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]] |