module Codec.Binary.UTF8.Width ( wcwidth
, wcswidth
)
where
import Foreign.C.Types
import Foreign.C.String
import Foreign.Storable
import Foreign.Ptr
import System.IO.Unsafe
wcwidth :: Char -> Int
wcwidth c = unsafePerformIO (withCWString [c] $ \ws -> do
wc <- peek ws
w <- wcwidth' wc >>= return . fromIntegral
return w
)
foreign import ccall unsafe "mk_wcwidth" wcwidth' :: CWchar -> IO CInt
wcswidth :: String -> Int
wcswidth str = unsafePerformIO (withCWString str $ \ws -> do
w <- wcswidth' ws >>= return . fromIntegral
return w
)
foreign import ccall unsafe "mk_wcswidth" wcswidth' :: Ptr CWchar -> IO CInt