module Text.HMarkup.Entities where

import Data.Map (Map)
import qualified Data.Map as Map

getEntity :: Monad m => String -> m String
getEntity n = case Map.lookup n entities of
                Nothing -> fail $ "Unknown entity: " ++ n
                Just x  -> return x

-- this list was generated with: 
-- runghc tools/markup-entities.hs tools/xhtml-dtd/xhtml-*.ent
entities :: Map String String
entities = Map.fromList [
  ("nbsp", "\160"),
  ("iexcl", "\161"),
  ("cent", "\162"),
  ("pound", "\163"),
  ("curren", "\164"),
  ("yen", "\165"),
  ("brvbar", "\166"),
  ("sect", "\167"),
  ("uml", "\168"),
  ("copy", "\169"),
  ("ordf", "\170"),
  ("laquo", "\171"),
  ("not", "\172"),
  ("shy", "\173"),
  ("reg", "\174"),
  ("macr", "\175"),
  ("deg", "\176"),
  ("plusmn", "\177"),
  ("sup2", "\178"),
  ("sup3", "\179"),
  ("acute", "\180"),
  ("micro", "\181"),
  ("para", "\182"),
  ("middot", "\183"),
  ("cedil", "\184"),
  ("sup1", "\185"),
  ("ordm", "\186"),
  ("raquo", "\187"),
  ("frac14", "\188"),
  ("frac12", "\189"),
  ("frac34", "\190"),
  ("iquest", "\191"),
  ("Agrave", "\192"),
  ("Aacute", "\193"),
  ("Acirc", "\194"),
  ("Atilde", "\195"),
  ("Auml", "\196"),
  ("Aring", "\197"),
  ("AElig", "\198"),
  ("Ccedil", "\199"),
  ("Egrave", "\200"),
  ("Eacute", "\201"),
  ("Ecirc", "\202"),
  ("Euml", "\203"),
  ("Igrave", "\204"),
  ("Iacute", "\205"),
  ("Icirc", "\206"),
  ("Iuml", "\207"),
  ("ETH", "\208"),
  ("Ntilde", "\209"),
  ("Ograve", "\210"),
  ("Oacute", "\211"),
  ("Ocirc", "\212"),
  ("Otilde", "\213"),
  ("Ouml", "\214"),
  ("times", "\215"),
  ("Oslash", "\216"),
  ("Ugrave", "\217"),
  ("Uacute", "\218"),
  ("Ucirc", "\219"),
  ("Uuml", "\220"),
  ("Yacute", "\221"),
  ("THORN", "\222"),
  ("szlig", "\223"),
  ("agrave", "\224"),
  ("aacute", "\225"),
  ("acirc", "\226"),
  ("atilde", "\227"),
  ("auml", "\228"),
  ("aring", "\229"),
  ("aelig", "\230"),
  ("ccedil", "\231"),
  ("egrave", "\232"),
  ("eacute", "\233"),
  ("ecirc", "\234"),
  ("euml", "\235"),
  ("igrave", "\236"),
  ("iacute", "\237"),
  ("icirc", "\238"),
  ("iuml", "\239"),
  ("eth", "\240"),
  ("ntilde", "\241"),
  ("ograve", "\242"),
  ("oacute", "\243"),
  ("ocirc", "\244"),
  ("otilde", "\245"),
  ("ouml", "\246"),
  ("divide", "\247"),
  ("oslash", "\248"),
  ("ugrave", "\249"),
  ("uacute", "\250"),
  ("ucirc", "\251"),
  ("uuml", "\252"),
  ("yacute", "\253"),
  ("thorn", "\254"),
  ("yuml", "\255"),
  ("quot", "\34"),
  ("amp", "\38"),
  ("lt", "\60"),
  ("gt", "\62"),
  ("apos", "\39"),
  ("OElig", "\338"),
  ("oelig", "\339"),
  ("Scaron", "\352"),
  ("scaron", "\353"),
  ("Yuml", "\376"),
  ("circ", "\710"),
  ("tilde", "\732"),
  ("ensp", "\8194"),
  ("emsp", "\8195"),
  ("thinsp", "\8201"),
  ("zwnj", "\8204"),
  ("zwj", "\8205"),
  ("lrm", "\8206"),
  ("rlm", "\8207"),
  ("ndash", "\8211"),
  ("mdash", "\8212"),
  ("lsquo", "\8216"),
  ("rsquo", "\8217"),
  ("sbquo", "\8218"),
  ("ldquo", "\8220"),
  ("rdquo", "\8221"),
  ("bdquo", "\8222"),
  ("dagger", "\8224"),
  ("Dagger", "\8225"),
  ("permil", "\8240"),
  ("lsaquo", "\8249"),
  ("rsaquo", "\8250"),
  ("euro", "\8364"),
  ("fnof", "\402"),
  ("Alpha", "\913"),
  ("Beta", "\914"),
  ("Gamma", "\915"),
  ("Delta", "\916"),
  ("Epsilon", "\917"),
  ("Zeta", "\918"),
  ("Eta", "\919"),
  ("Theta", "\920"),
  ("Iota", "\921"),
  ("Kappa", "\922"),
  ("Lambda", "\923"),
  ("Mu", "\924"),
  ("Nu", "\925"),
  ("Xi", "\926"),
  ("Omicron", "\927"),
  ("Pi", "\928"),
  ("Rho", "\929"),
  ("Sigma", "\931"),
  ("Tau", "\932"),
  ("Upsilon", "\933"),
  ("Phi", "\934"),
  ("Chi", "\935"),
  ("Psi", "\936"),
  ("Omega", "\937"),
  ("alpha", "\945"),
  ("beta", "\946"),
  ("gamma", "\947"),
  ("delta", "\948"),
  ("epsilon", "\949"),
  ("zeta", "\950"),
  ("eta", "\951"),
  ("theta", "\952"),
  ("iota", "\953"),
  ("kappa", "\954"),
  ("lambda", "\955"),
  ("mu", "\956"),
  ("nu", "\957"),
  ("xi", "\958"),
  ("omicron", "\959"),
  ("pi", "\960"),
  ("rho", "\961"),
  ("sigmaf", "\962"),
  ("sigma", "\963"),
  ("tau", "\964"),
  ("upsilon", "\965"),
  ("phi", "\966"),
  ("chi", "\967"),
  ("psi", "\968"),
  ("omega", "\969"),
  ("thetasym", "\977"),
  ("upsih", "\978"),
  ("piv", "\982"),
  ("bull", "\8226"),
  ("hellip", "\8230"),
  ("prime", "\8242"),
  ("Prime", "\8243"),
  ("oline", "\8254"),
  ("frasl", "\8260"),
  ("weierp", "\8472"),
  ("image", "\8465"),
  ("real", "\8476"),
  ("trade", "\8482"),
  ("alefsym", "\8501"),
  ("larr", "\8592"),
  ("uarr", "\8593"),
  ("rarr", "\8594"),
  ("darr", "\8595"),
  ("harr", "\8596"),
  ("crarr", "\8629"),
  ("lArr", "\8656"),
  ("uArr", "\8657"),
  ("rArr", "\8658"),
  ("dArr", "\8659"),
  ("hArr", "\8660"),
  ("forall", "\8704"),
  ("part", "\8706"),
  ("exist", "\8707"),
  ("empty", "\8709"),
  ("nabla", "\8711"),
  ("isin", "\8712"),
  ("notin", "\8713"),
  ("ni", "\8715"),
  ("prod", "\8719"),
  ("sum", "\8721"),
  ("minus", "\8722"),
  ("lowast", "\8727"),
  ("radic", "\8730"),
  ("prop", "\8733"),
  ("infin", "\8734"),
  ("ang", "\8736"),
  ("and", "\8743"),
  ("or", "\8744"),
  ("cap", "\8745"),
  ("cup", "\8746"),
  ("int", "\8747"),
  ("there4", "\8756"),
  ("sim", "\8764"),
  ("cong", "\8773"),
  ("asymp", "\8776"),
  ("ne", "\8800"),
  ("equiv", "\8801"),
  ("le", "\8804"),
  ("ge", "\8805"),
  ("sub", "\8834"),
  ("sup", "\8835"),
  ("nsub", "\8836"),
  ("sube", "\8838"),
  ("supe", "\8839"),
  ("oplus", "\8853"),
  ("otimes", "\8855"),
  ("perp", "\8869"),
  ("sdot", "\8901"),
  ("lceil", "\8968"),
  ("rceil", "\8969"),
  ("lfloor", "\8970"),
  ("rfloor", "\8971"),
  ("lang", "\9001"),
  ("rang", "\9002"),
  ("loz", "\9674"),
  ("spades", "\9824"),
  ("clubs", "\9827"),
  ("hearts", "\9829"),
  ("diams", "\9830")
 ]