module Text.Layout.Table.Pandoc where
import Data.List
import Text.Layout.Table.Primitives.ColumnModifier
import Text.Layout.Table.Primitives.Header
import Text.Layout.Table.Spec.ColSpec
import Text.Layout.Table.Spec.HeaderSpec
import Text.Layout.Table.Spec.Position
import Text.Layout.Table.Spec.Util
pandocPipeTableLines
:: [ColSpec]
-> HeaderSpec
-> [Row String]
-> [String]
pandocPipeTableLines specs h tab =
fmap (intercalate "|" . ("" :) . (++ [""])) $ consHeaderRow . (vSeparators :) $ zipWith ($) cmfs <$> tab
where
cmfs = zipWith (\spec cmi -> columnModifier (position spec) (cutMark spec) cmi) specs cmis
cmis = zipWith (ensureWidthCMI 2) posSpecs $ fitHeaderIntoCMIs $ deriveColModInfos' specs tab
posSpecs = fmap position specs
(fitHeaderIntoCMIs, consHeaderRow) = case h of
NoneHS -> (id, id)
HeaderHS headerSpecs titles ->
( fitTitlesCMI titles posSpecs
, (zipWith4 headerCellModifier headerSpecs (cutMark <$> specs) cmis titles :)
)
vSeparators = zipWith (\pos cmi -> applyPandocPositionMarker pos $ replicate (widthCMI cmi) '-') posSpecs cmis
applyPandocPositionMarker :: Position H -> String -> String
applyPandocPositionMarker p = case p of
Start -> markLeft
Center -> markRight . markLeft
End -> markRight
where
markLeft = (':' :) . drop 1
markRight = reverse . (':' :) . drop 1 . reverse