[project @ 2000-08-07 23:37:19 by qrczak]
[ghc-hetmet.git] / ghc / compiler / utils / UnicodeUtil.lhs
1 Various Unicode-related utilities.
2
3 \begin{code}
4 module UnicodeUtil(
5     stringToUtf8
6   ) where
7
8 #include "HsVersions.h"
9
10 import Panic (panic)
11 import Char  (chr, ord)
12 \end{code}
13
14 \begin{code}
15 stringToUtf8 :: [Int] -> String
16 stringToUtf8 []       = ""
17 stringToUtf8 (c:s)
18     | c >= 1 && c <= 0x7F = chr c : stringToUtf8 s
19     | c < 0           = panic ("charToUtf8 ("++show c++")")
20     | c <= 0x7FF      = chr (0xC0 + c `div`       0x40           ) :
21                         chr (0x80 + c                  `mod` 0x40) :
22                         stringToUtf8 s
23     | c <= 0xFFFF     = chr (0xE0 + c `div`     0x1000           ) :
24                         chr (0x80 + c `div`       0x40 `mod` 0x40) :
25                         chr (0x80 + c                  `mod` 0x40) :
26                         stringToUtf8 s
27     | c <= 0x1FFFFF   = chr (0xF0 + c `div`    0x40000           ) :
28                         chr (0x80 + c `div`     0x1000 `mod` 0x40) :
29                         chr (0x80 + c `div`       0x40 `mod` 0x40) :
30                         chr (0x80 + c                  `mod` 0x40) :
31                         stringToUtf8 s
32     | c <= 0x3FFFFFF  = chr (0xF8 + c `div`  0x1000000           ) :
33                         chr (0x80 + c `div`    0x40000 `mod` 0x40) :
34                         chr (0x80 + c `div`     0x1000 `mod` 0x40) :
35                         chr (0x80 + c `div`       0x40 `mod` 0x40) :
36                         chr (0x80 + c                  `mod` 0x40) :
37                         stringToUtf8 s
38     | c <= 0x7FFFFFFF = chr (0xFC + c `div` 0x40000000           ) :
39                         chr (0x80 + c `div`  0x1000000 `mod` 0x40) :
40                         chr (0x80 + c `div`    0x40000 `mod` 0x40) :
41                         chr (0x80 + c `div`     0x1000 `mod` 0x40) :
42                         chr (0x80 + c `div`       0x40 `mod` 0x40) :
43                         chr (0x80 + c                  `mod` 0x40) :
44                         stringToUtf8 s
45     | otherwise       = panic ("charToUtf8 "++show c)
46 \end{code}