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 :: forall rh ch a.
(rh -> String)
-> (ch -> String) -> (a -> String) -> Table rh ch a -> String
render = forall rh ch a.
[String]
-> (rh -> String)
-> (ch -> String)
-> (a -> String)
-> Table rh ch a
-> String
renderUsing (forall a. a -> [a]
repeat String
"r")
renderUsing :: [String]
-> (rh -> String)
-> (ch -> String)
-> (a -> String) -> Table rh ch a -> String
renderUsing :: forall rh ch a.
[String]
-> (rh -> String)
-> (ch -> String)
-> (a -> String)
-> Table rh ch a
-> String
renderUsing [String]
cols rh -> String
fr ch -> String
fc a -> String
f (Table Header rh
rh Header ch
ch [[a]]
cells) =
[String] -> String
unlines forall a b. (a -> b) -> a -> b
$ ( String
"\\begin{tabular}{" forall a. [a] -> [a] -> [a]
++ String
hspec forall a. [a] -> [a] -> [a]
++ String
"}")
forall a. a -> [a] -> [a]
: [ String -> String
addTableNl String
header
, String
hline
, (forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Properties -> String
vAttr String -> String
addTableNl) forall a b. (a -> b) -> a -> b
$
forall h. Header h -> [Either Properties h]
flattenHeader forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([a], String) -> String
row forall a b. (a -> b) -> a -> b
$ forall h a. h -> [h] -> Header a -> Header (h, a)
zipHeader [] [[a]]
cells forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap rh -> String
fr Header rh
rh)
, String
"\\end{tabular}" ]
where
ch2 :: Header String
ch2 = forall h. Properties -> [Header h] -> Header h
Group Properties
DoubleLine [(forall h. h -> Header h
Header String
""),forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ch -> String
fc Header ch
ch]
hspec :: String
hspec = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Properties -> String
hAttr forall a b. (a, b) -> a
fst) forall a b. (a -> b) -> a -> b
$ forall h. Header h -> [Either Properties h]
flattenHeader
forall a b. (a -> b) -> a -> b
$ forall h a. h -> [h] -> Header a -> Header (h, a)
zipHeader String
"" [String]
cols Header String
ch2
header :: String
header = [String] -> String
texCols forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map String -> String
label forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall h. Header h -> [h]
headerContents forall a b. (a -> b) -> a -> b
$ Header String
ch2
row :: ([a], String) -> String
row ([a]
cs,String
h) = [String] -> String
texCols forall a b. (a -> b) -> a -> b
$ String -> String
label String
h forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map a -> String
f [a]
cs
texCols :: [String] -> String
texCols = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> [a] -> [a]
intersperse String
" & "
texRows :: [String] -> [String]
texRows = forall a b. (a -> b) -> [a] -> [b]
map String -> String
addTableNl
rhStrings :: [rh]
rhStrings = forall h. Header h -> [h]
headerContents Header rh
rh
hline :: String
hline :: String
hline = String
"\\hline"
addTableNl :: String -> String
addTableNl :: String -> String
addTableNl = (forall a. [a] -> [a] -> [a]
++ String
"\\\\\n")
label :: String -> String
label :: String -> String
label String
s = String
"\\textbf{" forall a. [a] -> [a] -> [a]
++ String
s forall a. [a] -> [a] -> [a]
++ String
"}"
hAttr :: Properties -> String
hAttr :: Properties -> String
hAttr Properties
NoLine = String
""
hAttr Properties
SingleLine = String
"|"
hAttr Properties
DoubleLine = String
"||"
vAttr :: Properties -> String
vAttr :: Properties -> String
vAttr Properties
NoLine = String
""
vAttr Properties
SingleLine = String
hline
vAttr Properties
DoubleLine = String
hline forall a. [a] -> [a] -> [a]
++ String
hline