Hello community, here is the log from the commit of package ghc-xml-conduit for openSUSE:Factory checked in at 2015-12-29 12:59:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-xml-conduit (Old) and /work/SRC/openSUSE:Factory/.ghc-xml-conduit.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-xml-conduit" Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-xml-conduit/ghc-xml-conduit.changes 2015-10-06 13:27:33.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-xml-conduit.new/ghc-xml-conduit.changes 2015-12-29 12:59:53.000000000 +0100 @@ -1,0 +2,7 @@ +Tue Dec 22 09:14:52 UTC 2015 - [email protected] + +- update to 1.3.3 +* New render setting to control when to use CDATA +* Escaping CDATA closing tag in CDATA + +------------------------------------------------------------------- Old: ---- xml-conduit-1.3.2.tar.gz New: ---- xml-conduit-1.3.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-xml-conduit.spec ++++++ --- /var/tmp/diff_new_pack.V93fQU/_old 2015-12-29 12:59:54.000000000 +0100 +++ /var/tmp/diff_new_pack.V93fQU/_new 2015-12-29 12:59:54.000000000 +0100 @@ -21,7 +21,7 @@ %bcond_with tests Name: ghc-xml-conduit -Version: 1.3.2 +Version: 1.3.3 Release: 0 Summary: Pure-Haskell utilities for dealing with XML with the conduit package License: BSD-2-Clause ++++++ xml-conduit-1.3.2.tar.gz -> xml-conduit-1.3.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/ChangeLog.md new/xml-conduit-1.3.3/ChangeLog.md --- old/xml-conduit-1.3.2/ChangeLog.md 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/ChangeLog.md 2015-12-21 12:33:46.000000000 +0100 @@ -1,3 +1,8 @@ +## 1.3.3 + +* New render setting to control when to use CDATA [#68](https://github.com/snoyberg/xml/pull/68) +* Escaping CDATA closing tag in CDATA [#69](https://github.com/snoyberg/xml/pull/69) + ## 1.3.2 * Support for iso-8859-1 [#63](https://github.com/snoyberg/xml/issues/63) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/Text/XML/Stream/Render.hs new/xml-conduit-1.3.3/Text/XML/Stream/Render.hs --- old/xml-conduit-1.3.2/Text/XML/Stream/Render.hs 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/Text/XML/Stream/Render.hs 2015-12-21 12:33:46.000000000 +0100 @@ -15,6 +15,7 @@ , rsPretty , rsNamespaces , rsAttrOrder + , rsUseCDATA , orderAttrs -- * Event rendering , tag @@ -72,6 +73,13 @@ , rsAttrOrder :: Name -> Map.Map Name Text -> [(Name, Text)] -- ^ Specify how to turn the unordered attributes used by the "Text.XML" -- module into an ordered list. + , rsUseCDATA :: Content -> Bool + -- ^ Determines if for a given text content the renderer should use a + -- CDATA node. + -- + -- Default: @False@ + -- + -- @since 1.3.3 } instance Default RenderSettings where @@ -79,6 +87,7 @@ { rsPretty = False , rsNamespaces = [] , rsAttrOrder = const Map.toList + , rsUseCDATA = const False } -- | Convenience function to create an ordering function suitable for @@ -106,11 +115,11 @@ -- the blaze-builder package, and allow the create of optimally sized -- 'ByteString's with minimal buffer copying. renderBuilder :: Monad m => RenderSettings -> Conduit Event m Builder -renderBuilder RenderSettings { rsPretty = True, rsNamespaces = n } = prettify =$= renderBuilder' n True -renderBuilder RenderSettings { rsPretty = False, rsNamespaces = n } = renderBuilder' n False +renderBuilder RenderSettings { rsPretty = True, rsNamespaces = n, rsUseCDATA = useCDATA } = prettify =$= renderBuilder' n True useCDATA +renderBuilder RenderSettings { rsPretty = False, rsNamespaces = n, rsUseCDATA = useCDATA } = renderBuilder' n False useCDATA -renderBuilder' :: Monad m => [(Text, Text)] -> Bool -> Conduit Event m Builder -renderBuilder' namespaces0 isPretty = do +renderBuilder' :: Monad m => [(Text, Text)] -> Bool -> (Content -> Bool) -> Conduit Event m Builder +renderBuilder' namespaces0 isPretty useCDATA = do loop [] where loop nslevels = await >>= maybe (return ()) (go nslevels) @@ -129,29 +138,34 @@ yield token loop nslevels' _ -> do - let (token, nslevels') = eventToToken nslevels e + let (token, nslevels') = eventToToken nslevels useCDATA e yield token loop nslevels' -eventToToken :: Stack -> Event -> (Builder, [NSLevel]) -eventToToken s EventBeginDocument = +eventToToken :: Stack -> (Content -> Bool) -> Event -> (Builder, [NSLevel]) +eventToToken s _ EventBeginDocument = (tokenToBuilder $ TokenBeginDocument [ ("version", [ContentText "1.0"]) , ("encoding", [ContentText "UTF-8"]) ] , s) -eventToToken s EventEndDocument = (mempty, s) -eventToToken s (EventInstruction i) = (tokenToBuilder $ TokenInstruction i, s) -eventToToken s (EventBeginDoctype n meid) = (tokenToBuilder $ TokenDoctype n meid [], s) -eventToToken s EventEndDoctype = (mempty, s) -eventToToken s (EventCDATA t) = (tokenToBuilder $ TokenCDATA t, s) -eventToToken s (EventEndElement name) = +eventToToken s _ EventEndDocument = (mempty, s) +eventToToken s _ (EventInstruction i) = (tokenToBuilder $ TokenInstruction i, s) +eventToToken s _ (EventBeginDoctype n meid) = (tokenToBuilder $ TokenDoctype n meid [], s) +eventToToken s _ EventEndDoctype = (mempty, s) +eventToToken s _ (EventCDATA t) = (tokenToBuilder $ TokenCDATA t, s) +eventToToken s _ (EventEndElement name) = (tokenToBuilder $ TokenEndElement $ nameToTName sl name, s') where (sl:s') = s -eventToToken s (EventContent c) = (tokenToBuilder $ TokenContent c, s) -eventToToken s (EventComment t) = (tokenToBuilder $ TokenComment t, s) -eventToToken _ EventBeginElement{} = error "eventToToken on EventBeginElement" -- mkBeginToken False s name attrs +eventToToken s useCDATA (EventContent c) + | useCDATA c = + case c of + ContentText txt -> (tokenToBuilder $ TokenCDATA txt, s) + ContentEntity txt -> (tokenToBuilder $ TokenCDATA txt, s) + | otherwise = (tokenToBuilder $ TokenContent c, s) +eventToToken s _ (EventComment t) = (tokenToBuilder $ TokenComment t, s) +eventToToken _ _ EventBeginElement{} = error "eventToToken on EventBeginElement" -- mkBeginToken False s name attrs type Stack = [NSLevel] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/Text/XML/Stream/Token.hs new/xml-conduit-1.3.3/Text/XML/Stream/Token.hs --- old/xml-conduit-1.3.2/Text/XML/Stream/Token.hs 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/Text/XML/Stream/Token.hs 2015-12-21 12:33:46.000000000 +0100 @@ -68,9 +68,9 @@ , fromByteString ">" ] tokenToBuilder (TokenContent c) = contentToText c -tokenToBuilder (TokenCDATA t) = +tokenToBuilder (TokenCDATA t) = copyByteString "<![CDATA[" - `mappend` fromText t + `mappend` escCDATA t `mappend` copyByteString "]]>" tokenToBuilder (TokenComment t) = mconcat [fromByteString "<!--", fromText t, fromByteString "-->"] tokenToBuilder (TokenDoctype name eid _) = mconcat @@ -171,3 +171,6 @@ | otherwise = TName (Just a) $ T.drop 1 b where (a, b) = T.break (== ':') t + +escCDATA :: Text -> Builder +escCDATA s = fromText (T.replace "]]>" "]]]]><![CDATA[>" s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/Text/XML.hs new/xml-conduit-1.3.3/Text/XML.hs --- old/xml-conduit-1.3.2/Text/XML.hs 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/Text/XML.hs 2015-12-21 12:33:46.000000000 +0100 @@ -62,6 +62,7 @@ , R.rsPretty , R.rsNamespaces , R.rsAttrOrder + , R.rsUseCDATA , R.orderAttrs -- * Conversion , toXMLDocument diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/test/main.hs new/xml-conduit-1.3.3/test/main.hs --- old/xml-conduit-1.3.2/test/main.hs 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/test/main.hs 2015-12-21 12:33:46.000000000 +0100 @@ -94,6 +94,8 @@ it "parsing CDATA" caseParseCdata it "retains namespaces when asked" caseRetainNamespaces it "handles iso-8859-1" caseIso8859_1 + it "renders CDATA when asked" caseRenderCDATA + it "escapes CDATA closing tag in CDATA" caseEscapesCDATA documentParseRender :: IO () documentParseRender = @@ -618,3 +620,25 @@ Map.empty [Res.NodeContent "\232"]) [] + +caseRenderCDATA :: Assertion +caseRenderCDATA = do + let doc = Res.Document (Res.Prologue [] Nothing []) + (Res.Element "a" Map.empty + [ Res.NodeContent "www.google.com" + ]) + [] + withoutCDATA = Res.renderLBS def doc + withCDATA = Res.renderLBS (def { Res.rsUseCDATA = const True }) doc + withCDATA `shouldBe` "<?xml version=\"1.0\" encoding=\"UTF-8\"?><a><![CDATA[www.google.com]]></a>" + withoutCDATA `shouldBe` "<?xml version=\"1.0\" encoding=\"UTF-8\"?><a>www.google.com</a>" + +caseEscapesCDATA :: Assertion +caseEscapesCDATA = do + let doc = Res.Document (Res.Prologue [] Nothing []) + (Res.Element "a" Map.empty + [ Res.NodeContent "]]>" + ]) + [] + result = Res.renderLBS (def { Res.rsUseCDATA = const True }) doc + result `shouldBe` "<?xml version=\"1.0\" encoding=\"UTF-8\"?><a><![CDATA[]]]]><![CDATA[>]]></a>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xml-conduit-1.3.2/xml-conduit.cabal new/xml-conduit-1.3.3/xml-conduit.cabal --- old/xml-conduit-1.3.2/xml-conduit.cabal 2015-10-02 08:55:36.000000000 +0200 +++ new/xml-conduit-1.3.3/xml-conduit.cabal 2015-12-21 12:33:46.000000000 +0100 @@ -1,5 +1,5 @@ name: xml-conduit -version: 1.3.2 +version: 1.3.3 license: MIT license-file: LICENSE author: Michael Snoyman <[email protected]>, Aristid Breitkreuz <[email protected]>
