summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2009-03-03 10:41:36 +0000
committeraarne <aarne@cs.chalmers.se>2009-03-03 10:41:36 +0000
commit3b881e20b213ec51ce8b5376e412bc6c6441acd0 (patch)
treeaeb50502ed4b93966a229bfc8fa61ff9703d387d /src
parentd841f69f6535da32fcf44a9e8bb5cf5c26980351 (diff)
newlines and indentation in XML printing
Diffstat (limited to 'src')
-rw-r--r--src/GF/Data/XML.hs20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/GF/Data/XML.hs b/src/GF/Data/XML.hs
index 4b3a9b509..bdc6f98a1 100644
--- a/src/GF/Data/XML.hs
+++ b/src/GF/Data/XML.hs
@@ -25,14 +25,18 @@ showsXMLDoc xml = encodeUTF8 . showString header . showsXML xml
where header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
showsXML :: XML -> ShowS
-showsXML (Data s) = showString s
-showsXML (CData s) = showString "<![CDATA[" . showString s .showString "]]>"
-showsXML (ETag t as) = showChar '<' . showString t . showsAttrs as . showString "/>"
-showsXML (Tag t as cs) =
- showChar '<' . showString t . showsAttrs as . showChar '>'
- . concatS (map showsXML cs) . showString "</" . showString t . showChar '>'
-showsXML (Comment c) = showString "<!-- " . showString c . showString " -->"
-showsXML (Empty) = id
+showsXML = showsX 0 where
+ showsX i x = ind i . case x of
+ (Data s) -> showString s
+ (CData s) -> showString "<![CDATA[" . showString s .showString "]]>"
+ (ETag t as) -> showChar '<' . showString t . showsAttrs as . showString "/>"
+ (Tag t as cs) ->
+ showChar '<' . showString t . showsAttrs as . showChar '>' .
+ concatS (map (showsX (i+1)) cs) . ind i .
+ showString "</" . showString t . showChar '>'
+ (Comment c) -> showString "<!-- " . showString c . showString " -->"
+ (Empty) -> id
+ ind i = showString ("\n" ++ replicate (2*i) ' ')
showsAttrs :: [Attr] -> ShowS
showsAttrs = concatS . map (showChar ' ' .) . map showsAttr