diff options
| author | aarne <aarne@cs.chalmers.se> | 2009-03-03 10:41:36 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2009-03-03 10:41:36 +0000 |
| commit | 3b881e20b213ec51ce8b5376e412bc6c6441acd0 (patch) | |
| tree | aeb50502ed4b93966a229bfc8fa61ff9703d387d /src | |
| parent | d841f69f6535da32fcf44a9e8bb5cf5c26980351 (diff) | |
newlines and indentation in XML printing
Diffstat (limited to 'src')
| -rw-r--r-- | src/GF/Data/XML.hs | 20 |
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 |
