packages feed

xml-enumerator 0.4.0 → 0.4.1

raw patch · 3 files changed

+29/−10 lines, 3 files

Files

Text/XML/Stream/Render.hs view
@@ -9,6 +9,7 @@     , RenderSettings     , def     , rsPretty+    , prettify     ) where  import Data.XML.Types (Event (..), Content (..), Name (..))@@ -33,7 +34,7 @@ -- changes the meaning of some documents, by inserting/modifying whitespace. prettyBuilder :: Monad m => E.Enumeratee Event Builder m b prettyBuilder step0 =-    E.joinI $ prettify 0 [] $$ loop [] step0+    E.joinI $ prettify $$ loop [] step0   where     loop stack = E.checkDone $ step stack     step stack k = do@@ -192,8 +193,13 @@         | x `elem` xs = findUnused (x `T.snoc` '_') xs         | otherwise = x -prettify :: Monad m => Int -> [Name] -> E.Enumeratee Event Event m a-prettify level names (Continue k) = do+-- | Convert a stream of 'Event's into a prettified one, adding extra+-- whitespace. Note that this can change the meaning of your XML.+prettify :: Monad m => E.Enumeratee Event Event m a+prettify = prettify' 0 []++prettify' :: Monad m => Int -> [Name] -> E.Enumeratee Event Event m a+prettify' level names (Continue k) = do     mx <- eventHead     case mx of         Nothing -> return $ Continue k@@ -216,22 +222,18 @@                         let newLevel = level - 1                         return ([before newLevel, EventEndElement $ head names, after], newLevel, tail names)                     (Right EventBeginDocument, _) -> do-                        _ <- takeContents id                         return ([EventBeginDocument], level, names)                     (Right EventEndDocument, _) -> do-                        _ <- takeContents id                         return ([EventEndDocument, after], level, names)                     (Right (EventComment t), _) -> do-                        _ <- takeContents id                         return ([before level, EventComment $ T.map normalSpace t, after], level, names)                     (Right e, _) -> do-                        _ <- takeContents id                         return ([before level, e, after], level, names)-            k (E.Chunks chunks) >>== prettify level' names'+            k (E.Chunks chunks) >>== prettify' level' names'   where     before l = EventContent $ ContentText $ T.replicate l "    "     after = EventContent $ ContentText "\n"-prettify _ _ step = return step+prettify' _ _ step = return step  eventHead :: Monad m => Iteratee Event m (Maybe (Either [Content] Event)) eventHead = do
test/main.hs view
@@ -29,6 +29,7 @@         , it "has working choose function" testChoose         , it "has working many function" testMany         , it "has working orE" testOrE+        , it "is idempotent to parse and pretty render a document" documentParsePrettyRender         ]     , describe "XML Cursors"         [ it "has correct parent" cursorParent@@ -84,6 +85,22 @@             "<foo><?instr this is a processing instruction?></foo>"         , D.parseLBS_ def             "<foo><!-- this is a comment --></foo>"+        ]++documentParsePrettyRender :: IO ()+documentParsePrettyRender =+    L.unpack (D.renderLBS def { D.rsPretty = True } (D.parseLBS_ def $ doc True)) @?= L.unpack (doc False)+  where+    doc x = L.unlines+        [ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+        , "<foo>"+        , "    <?bar bar?>"+        , if x+            then "    text"+            else "    text     "+        , "    <?bin bin?>"+        , "</foo>"+        , ""         ]  combinators :: Assertion
xml-enumerator.cabal view
@@ -1,5 +1,5 @@ name:            xml-enumerator-version:         0.4.0+version:         0.4.1 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michaels@suite-sol.com>, Aristid Breitkreuz <aristidb@googlemail.com>