-- 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
    { leftMark  :: String
    , rightMark :: String
    }

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

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

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

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