module Text.PrettyPrint.NCol (asColumns, asColumnsWithBuff)
where
import Text.PrettyPrint
import Data.List
asColumns :: [[Doc]] -> Doc
asColumns = flip asColumnsWithBuff $ 1
asColumnsWithBuff :: [[Doc]] -> Int -> Doc
asColumnsWithBuff lls q = normalize
where normalize = vcat $ map hsep
$ map (\x -> pad (length x) longColumnLen empty x)
$ pad' longEntryLen q
$ transpose lls
longColumnLen = maximum (map length lls)
longEntryLen = maximum $ map docLen (concat lls)
docLen d = length $ render d
pad :: Int -> Int -> a -> [a] -> [a]
pad lx max b ls = ls ++ replicate (max lx) b
pad' _ _ [] = []
pad' mx q (ls:xs) = map buf ls : pad' mx q xs
where buf x = x <> (hcat $ replicate q space) <> (hcat $ replicate (mx (docLen x)) space)
test = map (map text) $ [["One", "Two","Three"],["1","2","3"],["a","b"]]