From 3c1e97d363bb244bb70d24d69998125d12e45731 Mon Sep 17 00:00:00 2001 From: bringert Date: Fri, 3 Mar 2006 10:38:49 +0000 Subject: [PATCH] XML module: added CData support. Escape stuff that needs to be escaped in XML. --- src/GF/Data/XML.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/GF/Data/XML.hs b/src/GF/Data/XML.hs index 816f6ec18..03965fba7 100644 --- a/src/GF/Data/XML.hs +++ b/src/GF/Data/XML.hs @@ -12,8 +12,8 @@ module GF.Data.XML (XML(..), Attr, comments, showsXMLDoc, showsXML) where import GF.Data.Utilities -data XML = Data String | Tag String [Attr] [XML] | Comment String - deriving (Eq,Show) +data XML = Data String | CData String | Tag String [Attr] [XML] | Comment String + deriving (Ord,Eq,Show) type Attr = (String,String) @@ -26,6 +26,7 @@ showsXMLDoc xml = showString header . showsXML xml showsXML :: XML -> ShowS showsXML (Data s) = showString s +showsXML (CData s) = showString "" showsXML (Tag t as []) = showChar '<' . showString t . showsAttrs as . showString "/>" showsXML (Tag t as cs) = showChar '<' . showString t . showsAttrs as . showChar '>' @@ -38,9 +39,11 @@ showsAttrs = concatS . map (showChar ' ' .) . map showsAttr showsAttr :: Attr -> ShowS showsAttr (n,v) = showString n . showString "=\"" . showString (escape v) . showString "\"" --- FIXME: escape strange charachters with &#xxx; escape :: String -> String escape = concatMap escChar where - escChar c | c `elem` ['"','\\'] = '\\':[c] - | otherwise = [c] + escChar '<' = "<" + escChar '>' = ">" + escChar '&' = "&" + escChar '"' = """ + escChar c = [c]