@@ -4,15 +4,29 @@
4module Graphics.Text.Width
4module Graphics.Text.Width
7 , safeWcwidth
9 , safeWcwidth
8 , safeWcswidth
10 , safeWcswidth
16+import Data.List (foldl')
17+import qualified Data.Text as T
18+import qualified Data.Text.Lazy as TL
12foreign import ccall unsafe "vty_mk_wcwidth" wcwidth :: Char -> Int
20foreign import ccall unsafe "vty_mk_wcwidth" wcwidth :: Char -> Int
14wcswidth :: String -> Int
22wcswidth :: String -> Int
15−wcswidth = sum . map wcwidth
23+wcswidth = foldl' (\l c -> wcwidth c + l) 0
25+wctwidth :: T.Text -> Int
26+wctwidth = T.foldl' (\l c -> wcwidth c + l) 0
28+wctlwidth :: TL.Text -> Int
29+wctlwidth = TL.foldl' (\l c -> wcwidth c + l) 0
17-- XXX: Characters with unknown widths occupy 1 column?
31-- XXX: Characters with unknown widths occupy 1 column?
@@ -30,4 +44,14 @@ safeWcwidth = max 0 . wcwidth
30-- | Returns the display width of a string. Assumes all characters with
44-- | Returns the display width of a string. Assumes all characters with
31-- unknown widths are 0 width.
45-- unknown widths are 0 width.
32safeWcswidth :: String -> Int
46safeWcswidth :: String -> Int
33−safeWcswidth = sum . map safeWcwidth
47+safeWcswidth = foldl' (\l c -> safeWcwidth c + l) 0
49+-- | Returns the display width of a text. Assumes all characters with
50+-- unknown widths are 0 width.
51+safeWctwidth :: T.Text -> Int
52+safeWctwidth = T.foldl' (\l c -> safeWcwidth c + l) 0
54+-- | Returns the display width of a lazy text. Assumes all characters
55+-- with unknown widths are 0 width.
56+safeWctlwidth :: TL.Text -> Int
57+safeWctlwidth = TL.foldl' (\l c -> safeWcwidth c + l) 0