aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-02-14 17:39:06 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-02-14 17:39:06 +0000
commit1266b189a1d3dd771621eea0fb4917367e6cd04d (patch)
treee31838659664c8492fec0b4729ef80e029308b49
parent5a9b7c229dfa3c5b7801dff31a8d2d534b4ab170 (diff)
downloadpandoc-1266b189a1d3dd771621eea0fb4917367e6cd04d.tar.gz
Changed Entities.hs to use Data.Map rather than
an association list, for a slight performance boost. git-svn-id: https://pandoc.googlecode.com/svn/trunk@532 788f1e2b-df1e-0410-8736-df70ead52e1b
-rw-r--r--src/Text/Pandoc/Entities.hs16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Entities.hs b/src/Text/Pandoc/Entities.hs
index 703d4d230..8e184432b 100644
--- a/src/Text/Pandoc/Entities.hs
+++ b/src/Text/Pandoc/Entities.hs
@@ -39,15 +39,15 @@ module Text.Pandoc.Entities (
import Data.Char ( chr, ord )
import Text.ParserCombinators.Parsec
import Data.Maybe ( fromMaybe )
+import qualified Data.Map as Map
-- | Returns a string containing an entity reference for the character.
charToEntity :: Char -> String
charToEntity char =
- let matches = filter (\(entity, character) -> (character == char))
- entityTable in
- if (length matches) == 0
+ let matches = Map.filter (== char) entityTable in
+ if Map.null matches
then charToNumericalEntity char
- else fst (head matches)
+ else head $ Map.keys matches
-- | Returns a string containing a numerical entity reference for the char.
charToNumericalEntity :: Char -> String
@@ -64,9 +64,7 @@ namedEntity = try $ do
body <- many1 alphaNum
end <- char ';'
let entity = "&" ++ body ++ ";"
- return $ case (lookup entity entityTable) of
- Just ch -> ch
- Nothing -> '?'
+ return $ Map.findWithDefault '?' entity entityTable
-- | Parse SGML hexadecimal entity.
hexEntity :: GenParser Char st Char
@@ -114,8 +112,8 @@ decodeEntities str =
Left err -> error $ "\nError: " ++ show err
Right result -> result
-entityTable :: [(String, Char)]
-entityTable = [
+entityTable :: Map.Map String Char
+entityTable = Map.fromList [
("&quot;", chr 34),
("&amp;", chr 38),
("&lt;", chr 60),