git.iko.soy/typeable/xml-conduit-writer
on master help sign in
4 files changed+59−9
since splitsnapshots
unifiedsplit
.gitignore+1 src/Text/XML/Writer.hs+47−6 stack.yaml+7 xml-conduit-writer.cabal+4−3
.gitignore+1
@@ -1,3 +1,4 @@
1+.stack-work/*
12cabal-dev/*
23dist/*
34
src/Text/XML/Writer.hs+47−6
@@ -1,4 +1,5 @@
1−{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances #-}
1+{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances, CPP #-}
2+{-# OPTIONS_GHC -fno-warn-orphans #-} -- IsString for XML
23
34-- | Overcome XML insanity, node by node.
45--
@@ -16,7 +17,11 @@
1617module Text.XML.Writer
1718 (
1819 -- * Documents
19− document, soap
20+ document
21+ , documentA
22+ , documentD
23+ , documentAD
24+ , soap
2025 , pprint
2126 -- * Elements
2227 , XML
@@ -36,15 +41,19 @@ module Text.XML.Writer
3641
3742import Text.XML
3843import Control.Monad.Writer.Strict
44+import Data.Default ()
3945import qualified Data.DList as DL
4046import qualified Data.Map as M
4147
42−import Data.Default ()
4348import Data.Text (Text)
4449import qualified Data.Text as T
4550import qualified Data.Text.Lazy.IO as TL
4651import Data.String (IsString(..))
4752
53+#if MIN_VERSION_mtl(2,3,0)
54+import Control.Monad
55+#endif
56+
4857-- | Node container to be rendered as children nodes.
4958type XML = Writer (DL.DList Node) ()
5059
@@ -57,6 +66,38 @@ document name children = Document { documentPrologue = Prologue def def def
5766 , documentEpilogue = def
5867 }
5968
69+
70+-- | Create a simple Document starting with a root element with attributes.
71+documentA :: Name -- ^ Root node name
72+ -> [(Name, Text)] -- ^ Attributes
73+ -> XML -- ^ Contents
74+ -> Document
75+documentA name attrs children = Document { documentPrologue = Prologue def def def
76+ , documentRoot = Element name (M.fromList attrs) (render children)
77+ , documentEpilogue = def
78+ }
79+
80+-- | Create a simple Document starting with a root element with a doctype.
81+documentD :: Name -- ^ Root node name
82+ -> Maybe Doctype -- ^ DOCTYPE
83+ -> XML -- ^ Contents
84+ -> Document
85+documentD name dt children = Document { documentPrologue = Prologue def dt def
86+ , documentRoot = Element name def (render children)
87+ , documentEpilogue = def
88+ }
89+
90+-- | Create a simple Document starting with a root element with attributes and doctype.
91+documentAD :: Name -- ^ Root node name
92+ -> [(Name, Text)] -- ^ Attributes
93+ -> Maybe Doctype -- ^ DOCTYPE
94+ -> XML -- ^ Contents
95+ -> Document
96+documentAD name attrs dt children = Document { documentPrologue = Prologue def dt def
97+ , documentRoot = Element name (M.fromList attrs) (render children)
98+ , documentEpilogue = def
99+ }
100+
60101-- | Render document using xml-conduit's pretty-printer.
61102pprint :: Document -> IO ()
62103pprint = TL.putStrLn . renderText def { rsPretty = True }
@@ -98,11 +139,11 @@ content :: Text -> XML
98139content = node . NodeContent
99140
100141-- | Mass-convert to nodes.
101−--
142+--
102143-- > let array = element "container" $ many "wrapper" [1..3]
103−--
144+--
104145-- Which gives:
105−--
146+--
106147-- > <container>
107148-- > <wrapper>1</wrapper>
108149-- > <wrapper>2</wrapper>
stack.yamlnew file+7
@@ -0,0 +1,7 @@
1+resolver: lts-22.4
2+
3+packages:
4+- .
5+
6+nix:
7+ packages: [zlib]
xml-conduit-writer.cabal+4−3
@@ -1,5 +1,6 @@
1+cabal-version: 3.0
12name: xml-conduit-writer
2−version: 0.1.1.0
3+version: 0.1.1.3
34synopsis: Warm and fuzzy creation of XML documents.
45description:
56 “It can scarcely be denied that the supreme goal of
@@ -18,14 +19,13 @@ author: Alexander Bondarenko
1819maintainer: aenor.realm@gmail.com
1920category: Text
2021build-type: Simple
21−cabal-version: >=1.8
2222
2323source-repository head
2424 type: git
2525 location: https://bitbucket.org/dpwiz/xml-conduit-writer
2626
2727library
28− ghc-options: -Wall -O2
28+ default-language: Haskell2010
2929 hs-source-dirs: src
3030 exposed-modules:
3131 Text.XML.Writer
@@ -38,6 +38,7 @@ library
3838 data-default
3939
4040test-suite tests
41+ default-language: Haskell2010
4142 type: exitcode-stdio-1.0
4243 main-is: Main.hs
4344 hs-source-dirs: test/