@@ -43,11 +43,7 @@ import qualified Data.Map as Map
44-- | Returns a string containing an entity reference for the character.
44-- | Returns a string containing an entity reference for the character.
45charToEntity :: Char -> String
45charToEntity :: Char -> String
47− let matches = Map.filter (== char) entityTable in
49− then charToNumericalEntity char
46+charToEntity char = Map.findWithDefault (charToNumericalEntity char) char reverseEntityTable
50− else head $ Map.keys matches
52-- | Returns a string containing a numerical entity reference for the char.
48-- | Returns a string containing a numerical entity reference for the char.
53charToNumericalEntity :: Char -> String
49charToNumericalEntity :: Char -> String
@@ -113,7 +109,13 @@ decodeEntities str =
113 Right result -> result
109 Right result -> result
115entityTable :: Map.Map String Char
111entityTable :: Map.Map String Char
116−entityTable = Map.fromList [
112+entityTable = Map.fromList entityTableList
114+reverseEntityTable :: Map.Map Char String
115+reverseEntityTable = Map.fromList $ map (\(a,b) -> (b,a)) entityTableList
117+entityTableList :: [(String, Char)]
117 (""", chr 34),
119 (""", chr 34),
118 ("&", chr 38),
120 ("&", chr 38),
119 ("<", chr 60),
121 ("<", chr 60),