gvti-0.2.0.0: Formatting.hs
{-# OPtIONS_HADDOCK show-extensions #-}
{-# LANGUAGE BangPatterns #-}
{-|
Module : Formatting
Description : GraphViz Tabular Interface formatting functionality to be used with the @gvti -g@.
Copyright : (c) OleksandrZhabenko, 2017-2022
License : MIT
Maintainer : olexandr543@yahoo.com
Stability : Experimental
-}
module Formatting where
import Data.List
import Text.Read (readMaybe)
import Data.Maybe (fromMaybe)
import Data.Char (isDigit)
formatBStr :: Int -> Char -> String -> String
formatBStr n x xs
| n > 0 = (iterate (x:) xs) !! n
| otherwise = xs
formatEStr :: Int -> Char -> String -> String
formatEStr m x xs
| m > 0 = xs `mappend` replicate m x
| otherwise = xs
formatBothStr :: Int -> Int -> Char -> String -> String
formatBothStr m n x = formatBStr m x . formatEStr n x
{-# INLINE formatBothStr #-}
formatLines :: Char -> [String] -> [String]
formatLines x xss = map (\(xs,n,m) -> formatBothStr n m x $ xs) . zip3 ws j2s $ ms
where (!js,!rs) = unzip . map (span isDigit) $ xss
ws = map (dropWhile (== ',')) rs
ll1s = map (length . filter (== x)) $ xss
!j2s = map (\wws -> fromMaybe 0 (readMaybe wws::Maybe Int)) js
lls = zipWith (+) ll1s j2s
!mx = maximum lls
!ms = zipWith (\x k -> mx - x - k) ll1s j2s
{-# INLINE formatLines #-}