on master help sign in
Better support for GHC < 7.8
9c92874Leon P Smith
Data/Text/Encoding.hs−9
@@ -55,13 +55,9 @@ module Data.Text.Encoding
55 , encodeUtf32LE
55 , encodeUtf32LE
56 , encodeUtf32BE
56 , encodeUtf32BE
57
57
58−#if MIN_VERSION_bytestring(0,10,4)
59 -- * Encoding Text using ByteString Builders
58 -- * Encoding Text using ByteString Builders
60− -- | /Note/ that these functions are only available if built against
61− -- @bytestring >= 0.10.4.0@.
62 , encodeUtf8Builder
59 , encodeUtf8Builder
63 , encodeUtf8BuilderEscaped
60 , encodeUtf8BuilderEscaped
64−#endif
65 ) where
61 ) where
66
62
67#if __GLASGOW_HASKELL__ >= 702
63#if __GLASGOW_HASKELL__ >= 702
@@ -70,7 +66,6 @@ import Control.Monad.ST.Unsafe (unsafeIOToST, unsafeSTToIO)
70import Control.Monad.ST (unsafeIOToST, unsafeSTToIO)
66import Control.Monad.ST (unsafeIOToST, unsafeSTToIO)
71#endif
67#endif
72
68
73−#if MIN_VERSION_bytestring(0,10,4)
74import Data.Bits ((.&.))
69import Data.Bits ((.&.))
75import Data.Text.Internal.Unsafe.Char (ord)
70import Data.Text.Internal.Unsafe.Char (ord)
76import qualified Data.ByteString.Builder as B
71import qualified Data.ByteString.Builder as B
@@ -79,7 +74,6 @@ import qualified Data.ByteString.Builder.Internal as B hiding (empty)
79import qualified Data.ByteString.Builder.Prim as BP
74import qualified Data.ByteString.Builder.Prim as BP
80import qualified Data.ByteString.Builder.Prim.Internal as BP
75import qualified Data.ByteString.Builder.Prim.Internal as BP
81import qualified Data.Text.Internal.Encoding.Utf16 as U16
76import qualified Data.Text.Internal.Encoding.Utf16 as U16
82−#endif
83
77
84import Control.Exception (evaluate, try)
78import Control.Exception (evaluate, try)
85import Control.Monad.ST (runST)
79import Control.Monad.ST (runST)
@@ -307,8 +301,6 @@ decodeUtf8' :: ByteString -> Either UnicodeException Text
307decodeUtf8' = unsafeDupablePerformIO . try . evaluate . decodeUtf8With strictDecode
301decodeUtf8' = unsafeDupablePerformIO . try . evaluate . decodeUtf8With strictDecode
308{-# INLINE decodeUtf8' #-}
302{-# INLINE decodeUtf8' #-}
309
303
310−#if MIN_VERSION_bytestring(0,10,4)
311−
312-- | Encode text to a ByteString 'B.Builder' using UTF-8 encoding.
304-- | Encode text to a ByteString 'B.Builder' using UTF-8 encoding.
313encodeUtf8Builder :: Text -> B.Builder
305encodeUtf8Builder :: Text -> B.Builder
314encodeUtf8Builder = encodeUtf8BuilderEscaped (BP.liftFixedToBounded BP.word8)
306encodeUtf8Builder = encodeUtf8BuilderEscaped (BP.liftFixedToBounded BP.word8)
@@ -369,7 +361,6 @@ encodeUtf8BuilderEscaped be =
369 outerLoop i (B.BufferRange op ope)
361 outerLoop i (B.BufferRange op ope)
370 where
362 where
371 poke8 j v = poke (op `plusPtr` j) (fromIntegral v :: Word8)
363 poke8 j v = poke (op `plusPtr` j) (fromIntegral v :: Word8)
372−#endif
373
364
374-- | Encode text using UTF-8 encoding.
365-- | Encode text using UTF-8 encoding.
375encodeUtf8 :: Text -> ByteString
366encodeUtf8 :: Text -> ByteString
Data/Text/Lazy/Encoding.hs+2−10
@@ -46,11 +46,9 @@ module Data.Text.Lazy.Encoding
46 , encodeUtf32LE
46 , encodeUtf32LE
47 , encodeUtf32BE
47 , encodeUtf32BE
48
48
49−#if MIN_VERSION_bytestring(0,10,4)
50 -- * Encoding Text using ByteString Builders
49 -- * Encoding Text using ByteString Builders
51 , encodeUtf8Builder
50 , encodeUtf8Builder
52 , encodeUtf8BuilderEscaped
51 , encodeUtf8BuilderEscaped
53−#endif
54 ) where
52 ) where
55
53
56import Control.Exception (evaluate, try)
54import Control.Exception (evaluate, try)
@@ -60,14 +58,14 @@ import qualified Data.ByteString as S
60import qualified Data.ByteString.Lazy as B
58import qualified Data.ByteString.Lazy as B
61import qualified Data.ByteString.Lazy.Internal as B
59import qualified Data.ByteString.Lazy.Internal as B
62import qualified Data.ByteString.Unsafe as B
60import qualified Data.ByteString.Unsafe as B
63−#if MIN_VERSION_bytestring(0,10,4)
61+
64import Data.Word (Word8)
62import Data.Word (Word8)
65import Data.Monoid (mempty, (<>))
63import Data.Monoid (mempty, (<>))
66import qualified Data.ByteString.Builder as B
64import qualified Data.ByteString.Builder as B
67import qualified Data.ByteString.Builder.Extra as B (safeStrategy, toLazyByteStringWith)
65import qualified Data.ByteString.Builder.Extra as B (safeStrategy, toLazyByteStringWith)
68import qualified Data.ByteString.Builder.Prim as BP
66import qualified Data.ByteString.Builder.Prim as BP
69import qualified Data.Text as T
67import qualified Data.Text as T
70−#endif
68+
71import qualified Data.Text.Encoding as TE
69import qualified Data.Text.Encoding as TE
72import qualified Data.Text.Lazy as L
70import qualified Data.Text.Lazy as L
73import qualified Data.Text.Internal.Lazy.Encoding.Fusion as E
71import qualified Data.Text.Internal.Lazy.Encoding.Fusion as E
@@ -149,7 +147,6 @@ decodeUtf8' bs = unsafeDupablePerformIO $ do
149{-# INLINE decodeUtf8' #-}
147{-# INLINE decodeUtf8' #-}
150
148
151encodeUtf8 :: Text -> B.ByteString
149encodeUtf8 :: Text -> B.ByteString
152−#if MIN_VERSION_bytestring(0,10,4)
153encodeUtf8 Empty = B.empty
150encodeUtf8 Empty = B.empty
154encodeUtf8 lt@(Chunk t _) =
151encodeUtf8 lt@(Chunk t _) =
155 B.toLazyByteStringWith strategy B.empty $ encodeUtf8Builder lt
152 B.toLazyByteStringWith strategy B.empty $ encodeUtf8Builder lt
@@ -170,11 +167,6 @@ encodeUtf8BuilderEscaped :: BP.BoundedPrim Word8 -> Text -> B.Builder
170encodeUtf8BuilderEscaped prim =
167encodeUtf8BuilderEscaped prim =
171 foldrChunks (\c b -> TE.encodeUtf8BuilderEscaped prim c <> b) mempty
168 foldrChunks (\c b -> TE.encodeUtf8BuilderEscaped prim c <> b) mempty
172
169
173−#else
174−encodeUtf8 (Chunk c cs) = B.Chunk (TE.encodeUtf8 c) (encodeUtf8 cs)
175−encodeUtf8 Empty = B.Empty
176−#endif
177−
178-- | Decode text from little endian UTF-16 encoding.
170-- | Decode text from little endian UTF-16 encoding.
179decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
171decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
180decodeUtf16LEWith onErr bs = F.unstream (E.streamUtf16LE onErr bs)
172decodeUtf16LEWith onErr bs = F.unstream (E.streamUtf16LE onErr bs)
text.cabal+7−5
@@ -1,5 +1,5 @@
1name: text
1name: text
2−version: 1.1.0.0
2+version: 1.1.1.0
3homepage: https://github.com/bos/text
3homepage: https://github.com/bos/text
4bug-reports: https://github.com/bos/text/issues
4bug-reports: https://github.com/bos/text/issues
5synopsis: An efficient packed Unicode text type.
5synopsis: An efficient packed Unicode text type.
@@ -121,13 +121,12 @@ library
121 build-depends:
121 build-depends:
122 array >= 0.3,
122 array >= 0.3,
123 base >= 4.2 && < 5,
123 base >= 4.2 && < 5,
124+ bytestring >= 0.9,
124 deepseq >= 1.1.0.0,
125 deepseq >= 1.1.0.0,
125 ghc-prim >= 0.2
126 ghc-prim >= 0.2
126
127
127− if impl(ghc >= 7.7)
128+ if impl(ghc < 7.8)
128− build-depends: bytestring >= 0.10.4.0
129+ build-depends: bytestring-builder
129− else
130− build-depends: bytestring >= 0.9
131
130
132 cpp-options: -DHAVE_DEEPSEQ
131 cpp-options: -DHAVE_DEEPSEQ
133 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
132 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
@@ -170,6 +169,9 @@ test-suite tests
170 test-framework-hunit >= 0.2,
169 test-framework-hunit >= 0.2,
171 test-framework-quickcheck2 >= 0.2
170 test-framework-quickcheck2 >= 0.2
172
171
172+ if impl(ghc < 7.8)
173+ build-depends: bytestring-builder
174+
173 if flag(integer-simple)
175 if flag(integer-simple)
174 cpp-options: -DINTEGER_SIMPLE
176 cpp-options: -DINTEGER_SIMPLE
175 build-depends: integer-simple >= 0.1 && < 0.5
177 build-depends: integer-simple >= 0.1 && < 0.5