0 | module Language.XML
 1 |
 2 | import Data.String
 3 | import Data.String.Extra
 4 | import Data.String.Parser
 5 | import Data.List
 6 |
 7 | import public Language.XML.Element
 8 | import public Language.XML.Misc
 9 | import public Language.XML.Prolog
10 |
11 | public export
12 | record XMLDocument where
13 |     constructor MkXMLDocument
14 |     prolog : XMLProlog
15 |     root : Element
16 |     misc : List Misc
17 |
18 | %name XMLDocument doc
19 |
20 | public export
21 | mapContent : (Element -> Element) -> XMLDocument -> XMLDocument
22 | mapContent f (MkXMLDocument prolog root misc) = MkXMLDocument prolog (f root) misc
23 |
24 | export
25 | Show XMLDocument where
26 |     show doc = join "\n" $ filter (/= "") $
27 |         show doc.prolog :: show doc.root :: map show doc.misc
28 |
29 | export
30 | xmlDocument : Parser XMLDocument
31 | xmlDocument = (do
32 |     pure $ MkXMLDocument
33 |         !xmlProlog
34 |         !(spaces *> element)
35 |         !(many $ spaces *> misc)
36 |   ) <?> "XML document"
37 |