@@ -4,15 +4,29 @@
44module Graphics.Text.Width
55 ( wcwidth
66 , wcswidth
7+ , wctwidth
8+ , wctlwidth
79 , safeWcwidth
810 , safeWcswidth
11+ , safeWctwidth
12+ , safeWctlwidth
913 )
1014where
1115
16+import Data.List (foldl')
17+import qualified Data.Text as T
18+import qualified Data.Text.Lazy as TL
19+
1220foreign import ccall unsafe "vty_mk_wcwidth" wcwidth :: Char -> Int
1321
1422wcswidth :: String -> Int
15−wcswidth = sum . map wcwidth
23+wcswidth = foldl' (\l c -> wcwidth c + l) 0
24+
25+wctwidth :: T.Text -> Int
26+wctwidth = T.foldl' (\l c -> wcwidth c + l) 0
27+
28+wctlwidth :: TL.Text -> Int
29+wctlwidth = TL.foldl' (\l c -> wcwidth c + l) 0
1630
1731-- XXX: Characters with unknown widths occupy 1 column?
1832--
@@ -30,4 +44,14 @@ safeWcwidth = max 0 . wcwidth
3044-- | Returns the display width of a string. Assumes all characters with
3145-- unknown widths are 0 width.
3246safeWcswidth :: String -> Int
33−safeWcswidth = sum . map safeWcwidth
47+safeWcswidth = foldl' (\l c -> safeWcwidth c + l) 0
48+
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
53+
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