xml-basic-0.1.3.3: src/Text/XML/Basic/String.hs
module Text.XML.Basic.String where
import qualified Text.XML.Basic.Character as XMLChar
import qualified Text.XML.Basic.Entity as XMLEnt
import qualified Data.Map as Map
import qualified Data.Char as Char
-- | should be [Word8]
type Encoded = String
{- |
Decode encoded characters and XML references.
Invalid references are silently skipped.
-}
decode ::
(Encoded -> String) ->
[XMLChar.T] ->
String
decode =
decodeGen XMLEnt.mapNameToChar
decodeGen ::
Map.Map XMLEnt.Name Char ->
(Encoded -> String) ->
[XMLChar.T] ->
String
decodeGen mapNameToChar decoder =
foldr ($) [] .
XMLChar.switchUnicodeRuns
((++) . decoder)
(\n ->
if XMLChar.validCharRef n
then (Char.chr n :)
else id)
(\n ->
maybe id (:) $
Map.lookup n mapNameToChar)
{-
type Reference = Either Int String
data T = Cons String Reference R
data R = R Reference R | S T
-}