vty-5.15: src/Graphics/Text/Width.hs
-- Copyright 2009 Corey O'Connor
{-# OPTIONS_GHC -D_XOPEN_SOURCE #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module Graphics.Text.Width
( wcwidth
, wcswidth
, safeWcwidth
, safeWcswidth
)
where
foreign import ccall unsafe "vty_mk_wcwidth" wcwidth :: Char -> Int
wcswidth :: String -> Int
wcswidth = sum . map wcwidth
-- XXX: Characters with unknown widths occupy 1 column?
--
-- Not sure if this is actually correct. I presume there is a
-- replacement character that is output by the terminal instead of the
-- character and this replacement character is 1 column wide. If this is
-- not true for all terminals then a per-terminal replacement character
-- width needs to be implemented.
-- | Returns the display width of a character. Assumes all characters
-- with unknown widths are 0 width.
safeWcwidth :: Char -> Int
safeWcwidth = max 0 . wcwidth
-- | Returns the display width of a string. Assumes all characters with
-- unknown widths are 0 width.
safeWcswidth :: String -> Int
safeWcswidth = sum . map safeWcwidth