-- 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 c = case wcwidth c of i | i < 0 -> 0 | otherwise -> i -- | Returns the display width of a string. Assumes all characters with unknown widths are 0 width safeWcswidth :: String -> Int safeWcswidth str = case wcswidth str of i | i < 0 -> 0 | otherwise -> i