build-type: Simple cabal-version: >= 1.8 name: xml-pipe version: 0.0.0.1 stability: Experimental author: Yoshikuni Jujo maintainer: Yoshikuni Jujo homepage: https://github.com/YoshikuniJujo/xml-pipe/wiki license: BSD3 license-file: LICENSE category: XML synopsis: XML parser which uses simple-pipe description: This package process subset of XML and is still far from perfect, now. . Example programs . examples/indians.hs . extensions . * OverloadedStrings . * PackageImports . > 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 = "" `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` > "" > > infiniteIndians :: [BSC.ByteString] > infiniteIndians = map littleIndians [1, 4 .. ] > > xml :: [BSC.ByteString] > xml = "" : 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 . extra-source-files: examples/indians.hs examples/starttls.hs source-repository head type: git location: git://github.com/YoshikuniJujo/xml-pipe.git source-repository this type: git location: git://github.com/YoshikuniJujo/xml-pipe.git tag: xml-pipe-0.0.0.1 library hs-source-dirs: src exposed-modules: Text.XML.Pipe other-modules: Text.XML.XmlEvent, Text.XML.Lexer, Text.XML.Papillon, Text.XML.XmlCreate build-depends: base == 4.*, bytestring == 0.10.*, simple-pipe == 0.0.0.6, papillon == 0.0.88 ghc-options: -Wall extensions: DoAndIfThenElse, PatternGuards