-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | XML parser which uses simple-pipe -- -- This package process subset of XML and is still far from perfect, now. -- -- Example programs -- -- examples/indians.hs -- -- extensions -- --
-- import Control.Monad -- import "monads-tf" Control.Monad.Trans -- import Data.Maybe -- import Data.Pipe -- import Data.Pipe.List -- import Text.XML.Pipe -- -- import qualified Data.ByteString.Char8 as BSC -- -- littleIndians :: Int -> BSC.ByteString -- littleIndians n = "<indians>" `BSC.append` -- BSC.pack (show n) `BSC.append` " little, " `BSC.append` -- BSC.pack (show $ n + 1) `BSC.append` " little, " `BSC.append` -- BSC.pack (show $ n + 2) `BSC.append` " little Indians" `BSC.append` -- "</indians>" -- -- infiniteIndians :: [BSC.ByteString] -- infiniteIndians = map littleIndians [1, 4 .. ] -- -- xml :: [BSC.ByteString] -- xml = "<?xml version='1.0'?><song>" : infiniteIndians -- -- main :: IO () -- main = void . runPipe $ fromList xml -- =$= xmlEvent -- =$= convert fromJust -- =$= (xmlBegin >>= xmlNode) -- =$= takeP 8 -- =$= printP -- -- takeP :: Monad m => Int -> Pipe a a m () -- takeP 0 = return () -- takeP n = do -- mx <- await -- maybe (return ()) (\x -> yield x >> takeP (n - 1)) mx -- -- convert :: Monad m => (a -> b) -> Pipe a b m () -- convert f = do -- mx <- await -- maybe (return ()) (\x -> yield (f x) >> convert f) mx -- -- printP :: Show a => Pipe a () IO () -- printP = do -- mx <- await -- maybe (return ()) (\x -> lift (print x) >> printP) mx ---- -- examples/starttls.hs -- -- It process STARTTLS of XMPP as client. The fllowings are only main -- part. -- --
-- main :: IO () -- main = do -- h <- connectTo "localhost" (PortNumber 5222) -- BS.hPut h $ xmlString begin -- BS.hPut h $ xmlString startTls -- void . runPipe $ handleP h -- =$= xmlEvent -- =$= convert fromJust -- =$= (xmlBegin >>= xmlNodeUntil isProceed) -- =$= printP -- ca <- readCertificateStore ["cacert.sample_pem"] -- g <- cprgCreate <$> createEntropyPool :: IO SystemRNG -- (`run` g) $ do -- p <- open' h "localhost" ["TLS_RSA_WITH_AES_128_CBC_SHA"] [] ca -- hlPut p $ xmlString begin -- void . runPipe $ handleP p -- =$= xmlEvent -- =$= convert fromJust -- =$= (xmlBegin >>= xmlNode) -- =$= printP --@package xml-pipe @version 0.0.0.10 module Text.XML.Pipe xmlEvent :: Monad m => Pipe ByteString (Maybe XmlEvent) m () xmlBegin :: Monad m => Pipe XmlEvent XmlNode m [Xmlns] xmlNode :: Monad m => [Xmlns] -> Pipe XmlEvent XmlNode m Bool xmlReborn :: Monad m => Pipe XmlEvent XmlNode m () xmlNodeUntil :: Monad m => (XmlNode -> Bool) -> [Xmlns] -> Pipe XmlEvent XmlNode m () xmlString :: [XmlNode] -> ByteString data XmlEvent XEXmlDecl :: (Int, Int) -> XmlEvent XESTag :: XEQName -> [Xmlns] -> [(XEQName, ByteString)] -> XmlEvent XEETag :: XEQName -> XmlEvent XEEmptyElemTag :: XEQName -> [Xmlns] -> [(XEQName, ByteString)] -> XmlEvent XECharData :: ByteString -> XmlEvent data XmlNode XmlDecl :: (Int, Int) -> XmlNode XmlStart :: QName -> [Xmlns] -> [(QName, ByteString)] -> XmlNode XmlCharData :: ByteString -> XmlNode XmlNode :: QName -> [Xmlns] -> [(QName, ByteString)] -> [XmlNode] -> XmlNode XmlEnd :: QName -> XmlNode type XEQName = (ByteString, ByteString) type Xmlns = (ByteString, ByteString) type QName = ((ByteString, Maybe ByteString), ByteString) nullQ :: ByteString -> QName