diff options
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 24 | ||||
-rw-r--r-- | test/command/latex-color.md | 127 |
2 files changed, 151 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 1ac872933..17fb48548 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -392,6 +392,9 @@ blockCommands = M.fromList $ , ("graphicspath", graphicsPath) -- hyperlink , ("hypertarget", braced >> grouped block) + -- LaTeX colors + , ("textcolor", coloredBlock "color") + , ("colorbox", coloredBlock "background-color") ] ++ map ignoreBlocks -- these commands will be ignored unless --parse-raw is specified, -- in which case they will appear as raw latex blocks @@ -413,6 +416,18 @@ blockCommands = M.fromList $ , "pagebreak" ] +coloredBlock :: PandocMonad m => String -> LP m Blocks +coloredBlock stylename = do + skipopts + color <- braced + let constructor = divWith ("",[],[("style",stylename ++ ": " ++ color)]) + inlineContents <|> constructor <$> blockContents + where inlineContents = do + ils <- grouped inline + rest <- inlines + return (para (ils <> rest)) + blockContents = grouped block + graphicsPath :: PandocMonad m => LP m Blocks graphicsPath = do ps <- bgroup *> (manyTill braced egroup) @@ -682,6 +697,9 @@ inlineCommands = M.fromList $ , ("nohyphens", tok) , ("textnhtt", ttfamily) , ("nhttfamily", ttfamily) + -- LaTeX colors + , ("textcolor", coloredInline "color") + , ("colorbox", coloredInline "background-color") -- fontawesome , ("faCheck", lit "\10003") , ("faClose", lit "\10007") @@ -696,6 +714,12 @@ inlineCommands = M.fromList $ , "pagebreak" ] +coloredInline :: PandocMonad m => String -> LP m Inlines +coloredInline stylename = do + skipopts + color <- braced + spanWith ("",[],[("style",stylename ++ ": " ++ color)]) <$> tok + ttfamily :: PandocMonad m => LP m Inlines ttfamily = (code . stringify . toList) <$> tok diff --git a/test/command/latex-color.md b/test/command/latex-color.md new file mode 100644 index 000000000..9fd2585a3 --- /dev/null +++ b/test/command/latex-color.md @@ -0,0 +1,127 @@ +# `\textcolor{}{}` + +``` +% pandoc -f latex -t native +Hello \textcolor{red}{World} +^D +[Para [Str "Hello",Space,Span ("",[],[("style","color: red")]) [Str "World"]]] +``` + +``` +% pandoc -f latex -t native +\textcolor{red}{Hello} World +^D +[Para [Span ("",[],[("style","color: red")]) [Str "Hello"],Space,Str "World"]] +``` + +``` +% pandoc -f latex -t native +Hello \textcolor{blue}{\textbf{World}} +^D +[Para [Str "Hello",Space,Span ("",[],[("style","color: blue")]) [Strong [Str "World"]]]] +``` + + +``` +% pandoc -f latex -t native +Hello \textcolor{blue}{\textbf{World}}. +^D +[Para [Str "Hello",Space,Span ("",[],[("style","color: blue")]) [Strong [Str "World"]],Str "."]] +``` + +``` +% pandoc -f latex -t native +\textcolor{orange}{ +\begin{itemize} + \item Item 1 + \item Item 2 +\end{itemize} +} +^D +[Div ("",[],[("style","color: orange")]) + [BulletList + [[Para [Str "Item",Space,Str "1"]] + ,[Para [Str "Item",Space,Str "2"]]]]] +``` + +``` +% pandoc -f latex -t native +\textcolor{blue}{ +\begin{itemize} + \item Item 1 + \item Item 2 +\end{itemize} +} some more text +^D +[Div ("",[],[("style","color: blue")]) + [BulletList + [[Para [Str "Item",Space,Str "1"]] + ,[Para [Str "Item",Space,Str "2"]]]] +,Para [Str "some",Space,Str "more",Space,Str "text"]] +``` + +# `\colorbox{}{}` + + +``` +% pandoc -f latex -t native +Hello \colorbox{red}{World} +^D +[Para [Str "Hello",Space,Span ("",[],[("style","background-color: red")]) [Str "World"]]] +``` + +``` +% pandoc -f latex -t native +\colorbox{red}{Hello} World +^D +[Para [Span ("",[],[("style","background-color: red")]) [Str "Hello"],Space,Str "World"]] +``` + +``` +% pandoc -f latex -t native +Hello \colorbox{blue}{\textbf{World}} +^D +[Para [Str "Hello",Space,Span ("",[],[("style","background-color: blue")]) [Strong [Str "World"]]]] +``` + +``` +% pandoc -f latex -t native +Hello \colorbox{blue}{\textbf{World}}. +^D +[Para [Str "Hello",Space,Span ("",[],[("style","background-color: blue")]) [Strong [Str "World"]],Str "."]] +``` + +``` +% pandoc -f latex -t native +\colorbox{orange}{ +\begin{minipage}{\textwidth} +\begin{itemize} + \item Item 1 + \item Item 2 +\end{itemize} +\end{minipage} +} +^D +[Div ("",[],[("style","background-color: orange")]) + [BulletList + [[Para [Str "Item",Space,Str "1"]] + ,[Para [Str "Item",Space,Str "2"]]]]] +``` + +``` +% pandoc -f latex -t native +\colorbox{blue}{ +\begin{minipage}{\textwidth} +\begin{itemize} + \item Item 1 + \item Item 2 +\end{itemize} +\end{minipage} +} some more text +^D +[Div ("",[],[("style","background-color: blue")]) + [BulletList + [[Para [Str "Item",Space,Str "1"]] + ,[Para [Str "Item",Space,Str "2"]]]] +,Para [Str "some",Space,Str "more",Space,Str "text"]] +``` |