-- TODO rename cut marks (they are too long)
module Text.Layout.Table.Spec.CutMark
    ( CutMark
    , doubleCutMark
    , singleCutMark
    , noCutMark
    , leftMark
    , rightMark
    ) where

import Data.Default.Class

-- | Specifies how the place looks where a 'String' has been cut. Note that the
-- cut mark may be cut itself to fit into a column.
data CutMark
    = CutMark
    { CutMark -> String
leftMark  :: String
    , CutMark -> String
rightMark :: String
    }

-- | A single ellipsis unicode character is used to show cut marks.
instance Default CutMark where
    def :: CutMark
def = String -> CutMark
singleCutMark String
"…"

-- | Specify two different cut marks, one for cuts on the left and one for cuts
-- on the right.
doubleCutMark :: String -> String -> CutMark
doubleCutMark :: String -> String -> CutMark
doubleCutMark = String -> String -> CutMark
CutMark

-- | Use the cut mark on both sides by reversing it on the other.
singleCutMark :: String -> CutMark
singleCutMark :: String -> CutMark
singleCutMark String
l = String -> String -> CutMark
doubleCutMark String
l (String -> String
forall a. [a] -> [a]
reverse String
l)

-- | Don't show any cut mark when text is cut.
noCutMark :: CutMark
noCutMark :: CutMark
noCutMark = String -> CutMark
singleCutMark String
""