packages feed

blaze-builder 0.4.0.2 → 0.4.1.0

raw patch · 6 files changed

+126/−8 lines, 6 filesdep +semigroupsdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: semigroups

Dependency ranges changed: base

API changes (from Hackage documentation)

+ Blaze.ByteString.Builder.Html.Word: fromHtmlEscapedByteString :: ByteString -> Builder
+ Blaze.ByteString.Builder.Html.Word: fromHtmlEscapedLazyByteString :: ByteString -> Builder
+ Blaze.ByteString.Builder.Html.Word: fromHtmlEscapedWord :: Word8 -> Builder
+ Blaze.ByteString.Builder.Html.Word: fromHtmlEscapedWordList :: [Word8] -> Builder
+ Blaze.ByteString.Builder.Html.Word: wordHtmlEscaped :: BoundedPrim Word8
+ Blaze.ByteString.Builder.Html.Word: writeHtmlEscapedWord :: Word8 -> Write
+ Blaze.ByteString.Builder.Internal.Write: instance GHC.Base.Semigroup Blaze.ByteString.Builder.Internal.Write.Poke
+ Blaze.ByteString.Builder.Internal.Write: instance GHC.Base.Semigroup Blaze.ByteString.Builder.Internal.Write.Write
- Blaze.ByteString.Builder: data Builder :: *
+ Blaze.ByteString.Builder: data Builder
- Blaze.ByteString.Builder: fromWriteSingleton :: (a -> Write) -> (a -> Builder)
+ Blaze.ByteString.Builder: fromWriteSingleton :: (a -> Write) -> a -> Builder
- Blaze.ByteString.Builder.Internal.Write: fromWriteSingleton :: (a -> Write) -> (a -> Builder)
+ Blaze.ByteString.Builder.Internal.Write: fromWriteSingleton :: (a -> Write) -> a -> Builder
- Blaze.ByteString.Builder.Internal.Write: writeEq :: Eq a => a -> (a -> Write) -> (a -> Write) -> (a -> Write)
+ Blaze.ByteString.Builder.Internal.Write: writeEq :: Eq a => a -> (a -> Write) -> (a -> Write) -> a -> Write
- Blaze.ByteString.Builder.Internal.Write: writeIf :: (a -> Bool) -> (a -> Write) -> (a -> Write) -> (a -> Write)
+ Blaze.ByteString.Builder.Internal.Write: writeIf :: (a -> Bool) -> (a -> Write) -> (a -> Write) -> a -> Write
- Blaze.ByteString.Builder.Internal.Write: writeOrd :: Ord a => a -> (a -> Write) -> (a -> Write) -> (a -> Write) -> (a -> Write)
+ Blaze.ByteString.Builder.Internal.Write: writeOrd :: Ord a => a -> (a -> Write) -> (a -> Write) -> (a -> Write) -> a -> Write
- Blaze.ByteString.Builder.Internal.Write: writeOrdering :: (a -> Ordering) -> (a -> Write) -> (a -> Write) -> (a -> Write) -> (a -> Write)
+ Blaze.ByteString.Builder.Internal.Write: writeOrdering :: (a -> Ordering) -> (a -> Write) -> (a -> Write) -> (a -> Write) -> a -> Write

Files

Blaze/ByteString/Builder/Html/Utf8.hs view
@@ -39,7 +39,9 @@ import Data.ByteString.Char8 ()  -- for the 'IsString' instance of bytesrings  import qualified Data.Text      as TS+import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Encoding as TLE  import Blaze.ByteString.Builder.Compat.Write ( Write, writePrimBounded ) import qualified Data.ByteString.Builder       as B@@ -47,6 +49,7 @@ import qualified Data.ByteString.Builder.Prim  as P  import Blaze.ByteString.Builder.Char.Utf8+import Blaze.ByteString.Builder.Html.Word  -- | Write a HTML escaped and UTF-8 encoded Unicode character to a bufffer. --@@ -101,9 +104,17 @@ -- UTF-8 encoding. -- fromHtmlEscapedText :: TS.Text -> B.Builder+#if MIN_VERSION_text(1,1,2) && MIN_VERSION_bytestring(0,10,4)+fromHtmlEscapedText = TE.encodeUtf8BuilderEscaped wordHtmlEscaped+#else fromHtmlEscapedText = fromHtmlEscapedString . TS.unpack+#endif  -- | /O(n)/. Serialize a HTML escaped Unicode 'TL.Text' using the UTF-8 encoding. -- fromHtmlEscapedLazyText :: TL.Text -> B.Builder+#if MIN_VERSION_text(1,1,2) && MIN_VERSION_bytestring(0,10,4)+fromHtmlEscapedLazyText = TLE.encodeUtf8BuilderEscaped wordHtmlEscaped+#else fromHtmlEscapedLazyText = fromHtmlEscapedString . TL.unpack+#endif
+ Blaze/ByteString/Builder/Html/Word.hs view
@@ -0,0 +1,79 @@+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ >= 704+{-# OPTIONS_GHC -fsimpl-tick-factor=40000 #-}+#endif++------------------------------------------------------------------------------+-- |+-- Module:      Blaze.ByteString.Builder.Html.Word+-- Copyright:   (c) 2016 Dylan Simon+-- License:     BSD3+-- Maintainer:  Leon P Smith <leon@melding-monads.com>+-- Stability:   experimental+--+-- 'W.Write's and 'B.Builder's for serializing HTML escaped 'Word8' characters+-- and 'BS.ByteString's that have already been appropriately encoded into HTML by+-- escaping basic ASCII character references but leaving other bytes untouched.+--+------------------------------------------------------------------------------++module Blaze.ByteString.Builder.Html.Word+  ( wordHtmlEscaped+    -- * Writing HTML escaped bytes to a buffer+  , writeHtmlEscapedWord+    -- * Creating Builders from HTML escaped bytes+  , fromHtmlEscapedWord+  , fromHtmlEscapedWordList+  , fromHtmlEscapedByteString+  , fromHtmlEscapedLazyByteString+  ) where++import qualified Blaze.ByteString.Builder.Compat.Write as W+import qualified Data.ByteString as BS+import qualified Data.ByteString.Builder as B+import qualified Data.ByteString.Builder.Prim as P+import           Data.ByteString.Internal (c2w)+import qualified Data.ByteString.Lazy as BSL+import           Data.Word (Word8)++{-# INLINE wordHtmlEscaped #-}+wordHtmlEscaped :: P.BoundedPrim Word8+wordHtmlEscaped =+  P.condB (>  c2w '>' ) (P.condB (== c2w '\DEL') P.emptyB $ P.liftFixedToBounded P.word8) $+  P.condB (== c2w '<' ) (fixed4 ('&',('l',('t',';')))) $        -- &lt;+  P.condB (== c2w '>' ) (fixed4 ('&',('g',('t',';')))) $        -- &gt;+  P.condB (== c2w '&' ) (fixed5 ('&',('a',('m',('p',';'))))) $  -- &amp;+  P.condB (== c2w '"' ) (fixed6 ('&',('q',('u',('o',('t',';')))))) $  -- &quot;+  P.condB (== c2w '\'') (fixed5 ('&',('#',('3',('9',';'))))) $  -- &#39;+  P.condB (\c -> c >= c2w ' ' || c == c2w '\t' || c == c2w '\n' || c == c2w '\r')+        (P.liftFixedToBounded P.word8) P.emptyB+  where+  {-# INLINE fixed4 #-}+  fixed4 x = P.liftFixedToBounded $ const x P.>$<+    P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8+  {-# INLINE fixed5 #-}+  fixed5 x = P.liftFixedToBounded $ const x P.>$<+    P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8+  {-# INLINE fixed6 #-}+  fixed6 x = P.liftFixedToBounded $ const x P.>$<+    P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8 P.>*< P.char8++-- | Write a HTML escaped byte to a bufffer.+writeHtmlEscapedWord :: Word8 -> W.Write+writeHtmlEscapedWord = W.writePrimBounded wordHtmlEscaped++-- | /O(1)./ Serialize a HTML escaped byte.+fromHtmlEscapedWord :: Word8 -> B.Builder+fromHtmlEscapedWord = P.primBounded wordHtmlEscaped++-- | /O(n)/. Serialize a HTML escaped list of bytes.+fromHtmlEscapedWordList :: [Word8] -> B.Builder+fromHtmlEscapedWordList = P.primMapListBounded wordHtmlEscaped++-- | /O(n)/. Serialize a HTML escaped 'BS.ByteString'.+fromHtmlEscapedByteString :: BS.ByteString -> B.Builder+fromHtmlEscapedByteString = P.primMapByteStringBounded wordHtmlEscaped++-- | /O(n)/. Serialize a HTML escaped lazy 'BSL.ByteString'.+fromHtmlEscapedLazyByteString :: BSL.ByteString -> B.Builder+fromHtmlEscapedLazyByteString = P.primMapLazyByteStringBounded wordHtmlEscaped
Blaze/ByteString/Builder/Internal/Write.hs view
@@ -49,13 +49,13 @@  import Foreign +import qualified Data.Foldable as F import Control.Monad  import Data.ByteString.Builder.Internal -#if !MIN_VERSION_base(4,8,0)-import Data.Monoid-#endif+import Data.Monoid (Monoid(..))+import Data.Semigroup (Semigroup(..))  ------------------------------------------------------------------------------ -- Poking a buffer and writing to a buffer@@ -119,27 +119,45 @@     getBound $ write $ error $     "getBound' called from " ++ msg ++ ": write bound is not data-independent." +instance Semigroup Poke where+  {-# INLINE (<>) #-}+  (Poke po1) <> (Poke po2) = Poke $ po1 >=> po2++  {-# INLINE sconcat #-}+  sconcat = F.foldr (<>) mempty+ instance Monoid Poke where   {-# INLINE mempty #-}   mempty = Poke $ return +#if !(MIN_VERSION_base(4,11,0))   {-# INLINE mappend #-}   (Poke po1) `mappend` (Poke po2) = Poke $ po1 >=> po2    {-# INLINE mconcat #-}-  mconcat = foldr mappend mempty+  mconcat = F.foldr mappend mempty+#endif +instance Semigroup Write where+  {-# INLINE (<>) #-}+  (Write bound1 w1) <> (Write bound2 w2) =+    Write (bound1 + bound2) (w1 <> w2)++  {-# INLINE sconcat #-}+  sconcat = F.foldr (<>) mempty+ instance Monoid Write where   {-# INLINE mempty #-}   mempty = Write 0 mempty +#if !(MIN_VERSION_base(4,11,0))   {-# INLINE mappend #-}   (Write bound1 w1) `mappend` (Write bound2 w2) =     Write (bound1 + bound2) (w1 `mappend` w2)    {-# INLINE mconcat #-}-  mconcat = foldr mappend mempty-+  mconcat = F.foldr mappend mempty+#endif  -- | @pokeN size io@ creates a write that denotes the writing of @size@ bytes -- to a buffer using the IO action @io@. Note that @io@ MUST write EXACTLY @size@
CHANGES view
@@ -1,3 +1,8 @@+* 0.4.1.0+  - Gain compatibility with the Semigroup/Monoid proposal+  - Add Word8 HTML escaping builders+  - Speed up `fromHtmlEscapedText` and `fromHtmlEscapedLazyText`+ * 0.4.0.2   - Fixed warnings on GHC 7.10,  courtesy of Mikhail Glushenkov. 
benchmarks/StringAndText.hs view
@@ -25,7 +25,8 @@ import qualified Data.Text.Lazy.Encoding as TL  import qualified Blaze.ByteString.Builder           as Blaze-import qualified Blaze.ByteString.Builder.Internal  as Blaze+import qualified Data.ByteString.Builder.Internal   as Blaze+import qualified Blaze.ByteString.Builder.Char.Utf8 as Blaze import qualified Blaze.ByteString.Builder.Html.Utf8 as Blaze  main :: IO ()
blaze-builder.cabal view
@@ -1,5 +1,5 @@ Name:                blaze-builder-Version:             0.4.0.2+Version:             0.4.1.0 Synopsis:            Efficient buffered output.  Description:@@ -63,6 +63,7 @@                      Blaze.ByteString.Builder.Char.Utf8                      Blaze.ByteString.Builder.Char8                      Blaze.ByteString.Builder.Html.Utf8+                     Blaze.ByteString.Builder.Html.Word                      Blaze.ByteString.Builder.HTTP                      Blaze.ByteString.Builder.Compat.Write @@ -77,6 +78,9 @@                      bytestring-builder   else      build-depends:  bytestring >= 0.10.4 && < 1.0++  if impl(ghc < 8.0)+     build-depends: semigroups >= 0.16 && < 0.19  test-suite test   type:           exitcode-stdio-1.0