text 0.11.1.2 → 0.11.1.3
raw patch · 2 files changed
+17/−15 lines, 2 files
Files
- Data/Text/Encoding.hs +16/−14
- text.cabal +1/−1
Data/Text/Encoding.hs view
@@ -144,7 +144,7 @@ -- | Encode text using UTF-8 encoding. encodeUtf8 :: Text -> ByteString encodeUtf8 (Text arr off len) = unsafePerformIO $ do- let size0 = min len 4+ let size0 = max len 4 mallocByteString size0 >>= start size0 off 0 where start size n0 m0 fp = withForeignPtr fp $ loop n0 m0@@ -152,36 +152,38 @@ loop n1 m1 ptr = go n1 m1 where go !n !m- | n-off == len = return $! PS fp 0 m- | size-m < 4 = {-# SCC "encodeUtf8/resize" #-} do- let newSize = size `shiftL` 1- fp' <- mallocByteString newSize- withForeignPtr fp' $ \ptr' -> memcpy ptr' ptr (fromIntegral m)- start newSize n m fp'+ | n-off == len = return (PS fp 0 m) | otherwise = do let poke8 k v = poke (ptr `plusPtr` k) (fromIntegral v :: Word8)- w = A.unsafeIndex arr n- case undefined of- _| w <= 0x7F -> do+ ensure k act+ | size-m >= k = act+ | otherwise = {-# SCC "resizeUtf8/ensure" #-} do+ let newSize = size `shiftL` 1+ fp' <- mallocByteString newSize+ withForeignPtr fp' $ \ptr' ->+ memcpy ptr' ptr (fromIntegral m)+ start newSize n m fp'+ {-# INLINE ensure #-}+ case A.unsafeIndex arr n of+ w| w <= 0x7F -> ensure 1 $ do poke8 m w go (n+1) (m+1)- | w <= 0x7FF -> do+ | w <= 0x7FF -> ensure 2 $ do poke8 m $ (w `shiftR` 6) + 0xC0 poke8 (m+1) $ (w .&. 0x3f) + 0x80 go (n+1) (m+2)- | 0xD800 <= w && w <= 0xDBFF -> do+ | 0xD800 <= w && w <= 0xDBFF -> ensure 4 $ do let c = ord $ U16.chr2 w (A.unsafeIndex arr (n+1)) poke8 m $ (c `shiftR` 18) + 0xF0 poke8 (m+1) $ ((c `shiftR` 12) .&. 0x3F) + 0x80 poke8 (m+2) $ ((c `shiftR` 6) .&. 0x3F) + 0x80 poke8 (m+3) $ (c .&. 0x3F) + 0x80 go (n+2) (m+4)- | otherwise -> do+ | otherwise -> ensure 3 $ do poke8 m $ (w `shiftR` 12) + 0xE0 poke8 (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80 poke8 (m+2) $ (w .&. 0x3F) + 0x80 go (n+1) (m+3)-{- INLINE encodeUtf8 #-} -- | Decode text from little endian UTF-16 encoding. decodeUtf16LEWith :: OnDecodeError -> ByteString -> Text
text.cabal view
@@ -1,5 +1,5 @@ name: text-version: 0.11.1.2+version: 0.11.1.3 homepage: https://bitbucket.org/bos/text bug-reports: https://bitbucket.org/bos/text/issues synopsis: An efficient packed Unicode text type.