diff options
Diffstat (limited to 'utils/mkUserGuidePart/Table.hs')
-rw-r--r-- | utils/mkUserGuidePart/Table.hs | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/utils/mkUserGuidePart/Table.hs b/utils/mkUserGuidePart/Table.hs deleted file mode 100644 index eeff8205cb..0000000000 --- a/utils/mkUserGuidePart/Table.hs +++ /dev/null @@ -1,75 +0,0 @@ -module Table where - -import Data.Char -import Data.List -import Data.Maybe (isJust, fromMaybe) -import qualified DList - -type Row = [String] - -type ColWidth = Int - -type WrappedString = [String] - --- | Wrap a string to lines of at most the given length on whitespace --- if possible. -wrapAt :: Int -> String -> WrappedString -wrapAt width = wrapLine - where - wrapLine :: String -> WrappedString - wrapLine s = - go width mempty (take width s : wrapLine (drop width s)) s - - go :: Int -- ^ remaining width - -> DList.DList Char -- ^ accumulator - -> WrappedString -- ^ last good wrapping - -> String -- ^ remaining string - -> WrappedString - go 0 _ back _ = back - go n accum _ (c:rest) - | breakable c = go (n-1) accum' - (DList.toList accum' : wrapLine rest) rest - where accum' = accum `DList.snoc` c - go n accum back (c:rest) = go (n-1) (accum `DList.snoc` c) back rest - go _ accum _ [] = [DList.toList accum] - - breakable = isSpace - -transpose' :: [[a]] -> [[Maybe a]] -transpose' = goRow - where - peel :: [a] -> (Maybe a, [a]) - peel (x:xs) = (Just x, xs) - peel [] = (Nothing, []) - - goRow xs = - case unzip $ map peel xs of - (xs', ys) - | any isJust xs' -> xs' : goRow ys - | otherwise -> [] - -table :: [ColWidth] -> Row -> [Row] -> String -table widths hdr rows = unlines $ - [rule '-'] ++ - [formatRow hdr] ++ - [rule '='] ++ - intersperse (rule '-') (map formatRow rows) ++ - [rule '-'] - where - formatRow :: Row -> String - formatRow cols = - intercalate "\n" - $ map (rawRow . map (fromMaybe "")) - $ transpose' - $ zipWith wrapAt (map (subtract 4) widths) cols - - rawRow :: Row -> String - rawRow cols = "| " ++ intercalate " | " (zipWith padTo widths cols) ++ " |" - padTo width content = take width $ content ++ repeat ' ' - - rule :: Char -> String - rule lineChar = - ['+',lineChar] - ++intercalate [lineChar,'+',lineChar] - (map (\n -> replicate n lineChar) widths) - ++[lineChar,'+'] |