libxml-enumerator 0.3 → 0.4
raw patch · 2 files changed
+25/−33 lines, 2 filesdep ~xml-typesPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: xml-types
API changes (from Hackage documentation)
- Text.XML.LibXML.Enumerator: EventBeginDocument :: Event
- Text.XML.LibXML.Enumerator: EventBeginElement :: Name -> [Attribute] -> Event
- Text.XML.LibXML.Enumerator: EventCharacters :: Text -> Event
- Text.XML.LibXML.Enumerator: EventComment :: Text -> Event
- Text.XML.LibXML.Enumerator: EventEndDocument :: Event
- Text.XML.LibXML.Enumerator: EventEndElement :: Name -> Event
- Text.XML.LibXML.Enumerator: EventInstruction :: Instruction -> Event
- Text.XML.LibXML.Enumerator: data Event
- Text.XML.LibXML.Enumerator: instance Eq Event
- Text.XML.LibXML.Enumerator: instance Show Event
Files
- Text/XML/LibXML/Enumerator.hs +23/−31
- libxml-enumerator.cabal +2/−2
Text/XML/LibXML/Enumerator.hs view
@@ -9,8 +9,7 @@ -- ----------------------------------------------------------------------------- module Text.XML.LibXML.Enumerator- ( Event (..)- , parseBytesIO+ ( parseBytesIO , parseTextIO , parseBytesST , parseTextST@@ -19,6 +18,7 @@ import qualified Data.Enumerator as E import Data.Enumerator ((>>==)) import qualified Data.Text as T+import qualified Data.Text.Lazy as TL import qualified Data.XML.Types as X import qualified Text.XML.LibXML.SAX as SAX @@ -29,17 +29,7 @@ import qualified Data.STRef as ST import qualified Data.IORef as IO -data Event- = EventBeginDocument- | EventEndDocument- | EventBeginElement X.Name [X.Attribute]- | EventEndElement X.Name- | EventCharacters T.Text- | EventComment T.Text- | EventInstruction X.Instruction- deriving (Show, Eq)--newParserIO :: Maybe T.Text -> IO (SAX.Parser IO, IO.IORef [Event], IO.IORef (Maybe T.Text))+newParserIO :: Maybe T.Text -> IO (SAX.Parser IO, IO.IORef [X.Event], IO.IORef (Maybe T.Text)) newParserIO name = do errRef <- IO.newIORef Nothing p <- SAX.newParserIO (\msg -> IO.writeIORef errRef (Just msg)) name@@ -48,7 +38,7 @@ setCallbacks p addEvent return (p, eventRef, errRef) -newParserST :: Maybe T.Text -> ST s (SAX.Parser (ST s), ST.STRef s [Event], ST.STRef s (Maybe T.Text))+newParserST :: Maybe T.Text -> ST s (SAX.Parser (ST s), ST.STRef s [X.Event], ST.STRef s (Maybe T.Text)) newParserST name = do errRef <- ST.newSTRef Nothing p <- SAX.newParserST (\msg -> ST.writeSTRef errRef (Just msg)) name@@ -57,28 +47,30 @@ setCallbacks p addEvent return (p, eventRef, errRef) -setCallbacks :: Monad m => SAX.Parser m -> (Event -> m Bool) -> m ()+setCallbacks :: Monad m => SAX.Parser m -> (X.Event -> m Bool) -> m () setCallbacks p addEvent = do let set cb st = SAX.setCallback p cb st - set SAX.parsedBeginDocument (addEvent EventBeginDocument)- set SAX.parsedEndDocument (addEvent EventEndDocument)- set SAX.parsedBeginElement ((addEvent .) . EventBeginElement)- set SAX.parsedEndElement (addEvent . EventEndElement)- set SAX.parsedCharacters (addEvent . EventCharacters)- set SAX.parsedComment (addEvent . EventComment)- set SAX.parsedInstruction (addEvent . EventInstruction)+ let fromStrict txt = TL.fromChunks [txt]+ + set SAX.parsedBeginDocument (addEvent X.EventBeginDocument)+ set SAX.parsedEndDocument (addEvent X.EventEndDocument)+ set SAX.parsedBeginElement ((addEvent .) . X.EventBeginElement)+ set SAX.parsedEndElement (addEvent . X.EventEndElement)+ set SAX.parsedCharacters (addEvent . X.EventContent . X.ContentText . fromStrict)+ set SAX.parsedComment (addEvent . X.EventComment . fromStrict)+ set SAX.parsedInstruction (addEvent . X.EventInstruction) -parseBytesIO :: MonadIO m => Maybe T.Text -> E.Enumeratee B.ByteString Event m b+parseBytesIO :: MonadIO m => Maybe T.Text -> E.Enumeratee B.ByteString X.Event m b parseBytesIO = parseIO SAX.parseBytes -parseTextIO :: MonadIO m => Maybe T.Text -> E.Enumeratee T.Text Event m b+parseTextIO :: MonadIO m => Maybe T.Text -> E.Enumeratee T.Text X.Event m b parseTextIO = parseIO SAX.parseText parseIO :: MonadIO m => (SAX.Parser IO -> a -> IO ()) -> Maybe T.Text- -> E.Enumeratee a Event m b+ -> E.Enumeratee a X.Event m b parseIO parseFn name s = E.Iteratee $ do (p, eventRef, errRef) <- liftIO $ newParserIO name @@ -94,15 +86,15 @@ let complete = withEvents (SAX.parseComplete p) E.runIteratee $ eneeParser parseChunk complete s -parseBytesST :: Maybe T.Text -> E.Enumeratee B.ByteString Event (ST s) b+parseBytesST :: Maybe T.Text -> E.Enumeratee B.ByteString X.Event (ST s) b parseBytesST = parseST SAX.parseBytes -parseTextST :: Maybe T.Text -> E.Enumeratee T.Text Event (ST s) b+parseTextST :: Maybe T.Text -> E.Enumeratee T.Text X.Event (ST s) b parseTextST = parseST SAX.parseText parseST :: (SAX.Parser (ST s) -> a -> ST s ()) -> Maybe T.Text- -> E.Enumeratee a Event (ST s) b+ -> E.Enumeratee a X.Event (ST s) b parseST parseFn name s = E.Iteratee $ do (p, eventRef, errRef) <- newParserST name @@ -119,9 +111,9 @@ E.runIteratee $ eneeParser parseChunk complete s eneeParser :: Monad m- => (a -> m ([Event], Maybe T.Text))- -> m ([Event], Maybe T.Text)- -> E.Enumeratee a Event m b+ => (a -> m ([X.Event], Maybe T.Text))+ -> m ([X.Event], Maybe T.Text)+ -> E.Enumeratee a X.Event m b eneeParser parseChunk parseComplete = E.checkDone (E.continue . step) where step k E.EOF = checkEvents k parseComplete (\k' -> E.yield (E.Continue k') E.EOF) step k (E.Chunks xs) = parseLoop k xs
libxml-enumerator.cabal view
@@ -1,5 +1,5 @@ name: libxml-enumerator-version: 0.3+version: 0.4 synopsis: Enumerator-based API for libXML's SAX interface license: MIT license-file: license.txt@@ -23,7 +23,7 @@ , enumerator >= 0.4 && < 0.5 , transformers >= 0.2 && < 0.3 , libxml-sax >= 0.6 && < 0.7- , xml-types >= 0.1 && < 0.2+ , xml-types >= 0.1.1 && < 0.2 exposed-modules: Text.XML.LibXML.Enumerator