Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Main where
- import System.Console.ANSI
- import System.IO
- import System.Environment (getArgs)
- import Data.List
- import Data.Traversable
- import qualified Graphics.Text.Width as VTY (wcwidth)
- import Data.Char
- import Data.Foldable
- import Text.Printf
- import qualified Data.Char.WCWidth as System (wcwidth)
- isAssigned c =
- case generalCategory c of
- NotAssigned -> False
- Surrogate -> False
- Control -> False
- _ -> True
- main :: IO ()
- main = do
- args <- getArgs
- withFile (args !! 0) WriteMode $ \h ->
- do hSetBuffering stdout NoBuffering
- for_ ['\0'..'\x2FA1F'] $ \i -> do
- width <- if isAssigned i then show <$> charWidth i else return "-"
- --let width = if isAssigned i then show $ System.wcwidth i else "-"
- --let width = if isAssigned i then show $ VTY.wcwidth i else "-"
- hPrintf h "%06x\t%s\n" (ord i) width
- charWidth :: Char -> IO Int
- charWidth c =
- do printf "\r%06x: " (ord c)
- putChar c
- Just (_row, col) <- getCursorPosition0
- return (col - 8)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement