\begin{code}

-- todo: support uneven column lengths

module RBR.TextFormat where

import Data.List

columns :: String -> [[String]] -> [String]
columns delim = map (concat . intersperse delim) . transpose . extend

extend :: [[String]] -> [[String]]
extend cs = zipWith pad (sizes cs) cs

-- mkrow rsizes = concat . intersperse "^" . zipWith pad rsizes

pad :: Int -> [String] -> [String]
pad n = map (pad1 n)
    where pad1 o text = text ++ take (o - length text) (repeat ' ')

sizes :: [[String]] -> [Int]
sizes = map (maximum . map length)

\end{code}