From 181c56d4003aa83abed23b95a452c4890aa3797c Mon Sep 17 00:00:00 2001
From: Marc Schreiber <marc.schreiber@fh-aachen.de>
Date: Thu, 1 Jun 2017 09:09:27 +0200
Subject: [PATCH] Add \colorbox support

---
 src/Text/Pandoc/Readers/LaTeX.hs |  22 +++---
 test/command/latex-color.md      | 127 +++++++++++++++++++++++++++++++
 test/command/textcolor.md        |  60 ---------------
 3 files changed, 139 insertions(+), 70 deletions(-)
 create mode 100644 test/command/latex-color.md
 delete mode 100644 test/command/textcolor.md

diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 6b44df468..1d13f7107 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -393,8 +393,9 @@ blockCommands = M.fromList $
   , ("graphicspath", graphicsPath)
   -- hyperlink
   , ("hypertarget", braced >> grouped block)
-  -- textcolor
-  , ("textcolor", blockTextcolor)
+  -- 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
@@ -416,11 +417,11 @@ blockCommands = M.fromList $
   , "pagebreak"
   ]
 
-blockTextcolor :: PandocMonad m => LP m Blocks
-blockTextcolor = do
+coloredBlock :: PandocMonad m => String -> LP m Blocks
+coloredBlock stylename = do
   skipopts 
   color <- braced
-  let constructor = divWith ("",[],[("style","color: " ++ color)])
+  let constructor = divWith ("",[],[("style",stylename ++ ": " ++ color)])
   inlineContents <|> constructor <$> blockContents
   where inlineContents = do 
                             ils <- grouped inline
@@ -694,8 +695,9 @@ inlineCommands = M.fromList $
   , ("nohyphens", tok)
   , ("textnhtt", ttfamily)
   , ("nhttfamily", ttfamily)
-  -- textcolor
-  , ("textcolor", inlineTextcolor)
+  -- LaTeX colors
+  , ("textcolor", coloredInline "color")
+  , ("colorbox", coloredInline "background-color")
   ] ++ map ignoreInlines
   -- these commands will be ignored unless --parse-raw is specified,
   -- in which case they will appear as raw latex blocks:
@@ -707,11 +709,11 @@ inlineCommands = M.fromList $
   , "pagebreak"
   ]
 
-inlineTextcolor :: PandocMonad m => LP m Inlines
-inlineTextcolor = do
+coloredInline :: PandocMonad m => String -> LP m Inlines
+coloredInline stylename = do
     skipopts 
     color <- braced
-    spanWith ("",[],[("style","color: " ++ color)]) <$> tok
+    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"]]
+```
diff --git a/test/command/textcolor.md b/test/command/textcolor.md
deleted file mode 100644
index 51d05b9f1..000000000
--- a/test/command/textcolor.md
+++ /dev/null
@@ -1,60 +0,0 @@
-```
-% 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"]]
-```
-