module Text.Tabular.Latex where
import Data.List (intersperse)
import Text.Tabular
render :: (rh -> String)
-> (ch -> String)
-> (a -> String)
-> Table rh ch a -> String
render = renderUsing (repeat "r")
renderUsing :: [String]
-> (rh -> String)
-> (ch -> String)
-> (a -> String) -> Table rh ch a -> String
renderUsing cols fr fc f (Table rh ch cells) =
unlines $ ( "\\begin{tabular}{" ++ hspec ++ "}")
: [ addTableNl header
, hline
, (concatMap (either vAttr addTableNl) $
flattenHeader $ fmap row $ zipHeader [] cells $ fmap fr rh)
, "\\end{tabular}" ]
where
ch2 = Group DoubleLine [(Header ""),fmap fc ch]
hspec = concatMap (either hAttr fst) $ flattenHeader
$ zipHeader "" cols ch2
header = texCols . map label . headerContents $ ch2
row (cs,h) = texCols $ label h : map f cs
texCols = concat . intersperse " & "
texRows = map addTableNl
rhStrings = headerContents rh
hline :: String
hline = "\\hline"
addTableNl :: String -> String
addTableNl = (++ "\\\\\n")
label :: String -> String
label s = "\\textbf{" ++ s ++ "}"
hAttr :: Properties -> String
hAttr NoLine = ""
hAttr SingleLine = "|"
hAttr DoubleLine = "||"
vAttr :: Properties -> String
vAttr NoLine = ""
vAttr SingleLine = hline
vAttr DoubleLine = hline ++ hline