hxt-unicode 9.0.0 → 9.0.1
raw patch · 2 files changed
+102/−2 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.String.EncodingNames: iso8859_1 :: String
- Data.String.EncodingNames: iso8859_10 :: String
- Data.String.EncodingNames: iso8859_11 :: String
- Data.String.EncodingNames: iso8859_13 :: String
- Data.String.EncodingNames: iso8859_14 :: String
- Data.String.EncodingNames: iso8859_15 :: String
- Data.String.EncodingNames: iso8859_16 :: String
- Data.String.EncodingNames: iso8859_2 :: String
- Data.String.EncodingNames: iso8859_3 :: String
- Data.String.EncodingNames: iso8859_4 :: String
- Data.String.EncodingNames: iso8859_5 :: String
- Data.String.EncodingNames: iso8859_6 :: String
- Data.String.EncodingNames: iso8859_7 :: String
- Data.String.EncodingNames: iso8859_8 :: String
- Data.String.EncodingNames: iso8859_9 :: String
- Data.String.EncodingNames: isoLatin1 :: String
- Data.String.EncodingNames: ucs2 :: String
- Data.String.EncodingNames: unicodeString :: String
- Data.String.EncodingNames: usAscii :: String
- Data.String.EncodingNames: utf16 :: String
- Data.String.EncodingNames: utf16be :: String
- Data.String.EncodingNames: utf16le :: String
- Data.String.EncodingNames: utf8 :: String
+ Data.String.EncodingNames: isoLatin1, unicodeString, utf16le, utf16be, utf16, utf8, ucs2, usAscii, iso8859_16, iso8859_15, iso8859_14, iso8859_13, iso8859_11, iso8859_10, iso8859_9, iso8859_8, iso8859_7, iso8859_6, iso8859_5, iso8859_4, iso8859_3, iso8859_2, iso8859_1 :: String
+ Data.String.Unicode: getOutputEncodingFct' :: String -> Maybe (Char -> StringFct)
+ Data.String.Unicode: unicodeCharToLatin1' :: Char -> StringFct
+ Data.String.Unicode: unicodeCharToUtf8' :: Char -> StringFct
+ Data.String.Unicode: unicodeCharToXmlEntity' :: Char -> StringFct
Files
- hxt-unicode.cabal +2/−1
- src/Data/String/Unicode.hs +100/−1
hxt-unicode.cabal view
@@ -1,5 +1,5 @@ Name: hxt-unicode-Version: 9.0.0+Version: 9.0.1 Synopsis: Unicode en-/decoding functions for utf8, iso-latin-* and other encodings Description: Unicode encoding and decoding functions for utf8, iso-latin-* and somes other encodings, used in the Haskell XML Toolbox.@@ -31,3 +31,4 @@ hs-source-dirs: src ghc-options: -Wall+ ghc-prof-options: -auto-all -caf-all
src/Data/String/Unicode.hs view
@@ -53,6 +53,11 @@ , normalizeNL , guessEncoding++ , getOutputEncodingFct'+ , unicodeCharToUtf8'+ , unicodeCharToXmlEntity'+ , unicodeCharToLatin1' ) where @@ -313,6 +318,7 @@ -- substitute selected characters -- The @check@ function returns 'True' whenever a character needs to substitution -- The function @esc@ computes a substitute.+ escape :: (Unicode -> Bool) -> (Unicode -> String) -> UString -> String escape check esc = concatMap (\uc -> if check uc then [uc] else esc uc)@@ -495,7 +501,6 @@ = [ (utf8, unicodeToUtf8 ) , (isoLatin1, unicodeToLatin1 ) , (usAscii, unicodeToXmlEntity )- , (ucs2, ucs2ToUnicode ) , (unicodeString, id ) , ("", unicodeToUtf8 ) -- default ]@@ -547,4 +552,98 @@ {-# INLINE partitionEither #-} -- ------------------------------------------------------------++-- output encoding for bytestrings++-- |+-- the table of supported output encoding schemes and the associated+-- conversion functions from Unicode++type StringFct = String -> String++outputEncodingTable' :: [(String, (Char -> StringFct))]+outputEncodingTable'+ = [ (utf8, unicodeCharToUtf8' )+ , (isoLatin1, unicodeCharToLatin1' )+ , (usAscii, unicodeCharToXmlEntity' )+ , ("", unicodeCharToUtf8' ) -- default+ ]++-- |+-- the lookup function for selecting the encoding function++getOutputEncodingFct' :: String -> Maybe (Char -> StringFct)+getOutputEncodingFct' enc+ = lookup (map toUpper enc) outputEncodingTable'+++-- ------------------------------------------------------------++-- |+-- conversion from Unicode (Char) to a UTF8 encoded string.++unicodeCharToUtf8' :: Char -> StringFct+unicodeCharToUtf8' c+ | i >= 0 && i <= 0x0000007F -- 1 byte UTF8 (7 bits)+ = (c :)++ | i >= 0x00000080 && i <= 0x000007FF -- 2 byte UTF8 (5 + 6 bits)+ = ((toEnum (0xC0 + i `div` 0x40) ) :) .+ ((toEnum (0x80 + i `mod` 0x40)) :)++ | i >= 0x00000800 && i <= 0x0000FFFF -- 3 byte UTF8 (4 + 6 + 6 bits)+ = ((toEnum (0xE0 + i `div` 0x1000) ) :) .+ ((toEnum (0x80 + (i `div` 0x40) `mod` 0x40)) :) .+ ((toEnum (0x80 + i `mod` 0x40)) :)++ | i >= 0x00010000 && i <= 0x001FFFFF -- 4 byte UTF8 (3 + 6 + 6 + 6 bits) -- extension to encode 21 bit values+ = ((toEnum (0xF0 + i `div` 0x40000) ) :) .+ ((toEnum (0x80 + (i `div` 0x1000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x40) `mod` 0x40)) :) .+ ((toEnum (0x80 + i `mod` 0x40)) :)++ | i >= 0x00200000 && i <= 0x03FFFFFF -- 5 byte UTF8 (2 + 6 + 6 + 6 + 6 bits) -- extension to encode 26 bit values+ = ((toEnum (0xF8 + i `div` 0x1000000) ) :) .+ ((toEnum (0x80 + (i `div` 0x40000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x1000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x40) `mod` 0x40)) :) .+ ((toEnum (0x80 + i `mod` 0x40)) :)++ | i >= 0x04000000 && i <= 0x7FFFFFFF -- 6 byte UTF8 (1 + 6 + 6 + 6 + 6 + 6 bits) -- extension to encode 31 bit values+ = ((toEnum (0xFC + i `div` 0x40000000) ) :) .+ ((toEnum (0x80 + (i `div` 0x1000000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x40000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x1000) `mod` 0x40)) :) .+ ((toEnum (0x80 + (i `div` 0x40) `mod` 0x40)) :) .+ ((toEnum (0x80 + i `mod` 0x40)) :)++ | otherwise -- other values not supported+ = error ("unicodeCharToUtf8: illegal integer argument " ++ show i)+ where+ i = fromEnum c++-- ------------------------------------------------------------++-- |+-- substitute all Unicode characters, that are not legal 1-byte+-- UTF-8 XML characters by a character reference.++unicodeCharToXmlEntity' :: Char -> StringFct+unicodeCharToXmlEntity' c+ | isXml1ByteChar c = (c :)+ | otherwise = ((intToCharRef . fromEnum $ c) ++)++-- ------------------------------------------------------------++-- |+-- substitute all Unicode characters, that are not legal latin1+-- UTF-8 XML characters by a character reference.++unicodeCharToLatin1' :: Char -> StringFct+unicodeCharToLatin1' c+ | isXmlLatin1Char c = (c :)+ | otherwise = ((intToCharRef . fromEnum $ c) ++)++-- ------------------------------------------------------------+