diff options
Diffstat (limited to 'src/Text/Pandoc/Parsing.hs')
-rw-r--r-- | src/Text/Pandoc/Parsing.hs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs index bb0ac18cf..08769a4f4 100644 --- a/src/Text/Pandoc/Parsing.hs +++ b/src/Text/Pandoc/Parsing.hs @@ -51,6 +51,7 @@ module Text.Pandoc.Parsing ( (>>~), failIfStrict, failUnlessLHS, escaped, + characterReference, anyOrderedListMarker, orderedListMarker, charRef, @@ -78,7 +79,6 @@ import Text.Pandoc.Definition import Text.Pandoc.Generic import qualified Text.Pandoc.UTF8 as UTF8 (putStrLn) import Text.ParserCombinators.Parsec -import Text.Pandoc.CharacterReferences ( characterReference ) import Data.Char ( toLower, toUpper, ord, isAscii, isAlphaNum, isDigit, isPunctuation ) import Data.List ( intercalate, transpose ) import Network.URI ( parseURI, URI (..), isAllowedInURI ) @@ -86,6 +86,7 @@ import Control.Monad ( join, liftM, guard ) import Text.Pandoc.Shared import qualified Data.Map as M import Text.TeXMath.Macros (applyMacros, Macro, parseMacroDefinitions) +import Text.HTML.TagSoup.Entity ( lookupEntity ) -- | Like >>, but returns the operation on the left. -- (Suggested by Tillmann Rendel on Haskell-cafe list.) @@ -337,6 +338,15 @@ escaped :: GenParser Char st Char -- ^ Parser for character to escape -> GenParser Char st Char escaped parser = try $ char '\\' >> parser +-- | Parse character entity. +characterReference :: GenParser Char st Char +characterReference = try $ do + char '&' + ent <- manyTill nonspaceChar (char ';') + case lookupEntity ent of + Just c -> return c + Nothing -> return '?' + -- | Parses an uppercase roman numeral and returns (UpperRoman, number). upperRoman :: GenParser Char st (ListNumberStyle, Int) upperRoman = do |