tagsoup 0.12.8 → 0.13
raw patch · 8 files changed
+2224/−352 lines, 8 files
Files
- LICENSE +1/−1
- Main.hs +1/−1
- TagSoup/Test.hs +8/−7
- Text/HTML/TagSoup/Entity.hs +2208/−332
- Text/HTML/TagSoup/Implementation.hs +1/−2
- Text/HTML/TagSoup/Options.hs +1/−1
- Text/HTML/TagSoup/Render.hs +2/−6
- tagsoup.cabal +2/−2
LICENSE view
@@ -1,4 +1,4 @@-Copyright Neil Mitchell 2006-2009.+Copyright Neil Mitchell 2006-2013. All rights reserved. Redistribution and use in source and binary forms, with or without
Main.hs view
@@ -10,7 +10,7 @@ helpMsg :: IO () helpMsg = putStr $ unlines $- ["TagSoup, (C) Neil Mitchell 2006-2012"+ ["TagSoup, (C) Neil Mitchell 2006-2009" ,"" ," tagsoup arguments" ,""
TagSoup/Test.hs view
@@ -126,6 +126,7 @@ parseTags "hey & are you" === [TagText "hey & are you"] -- real cases reported by users+ parseTags "↖x≧̸" === [TagText ['\x2196','x','\x2267','\x0338']] parseTags "test � test" === [TagText "test ? test"] parseTags "<a href=\"series.php?view=single&ID=72710\">" === [TagOpen "a" [("href","series.php?view=single&ID=72710")]]@@ -198,17 +199,17 @@ entityTests :: Test () entityTests = do- lookupNumericEntity "65" === Just 'A'- lookupNumericEntity "x41" === Just 'A'- lookupNumericEntity "x4E" === Just 'N'- lookupNumericEntity "x4e" === Just 'N'+ lookupNumericEntity "65" === Just "A"+ lookupNumericEntity "x41" === Just "A"+ lookupNumericEntity "x4E" === Just "N"+ lookupNumericEntity "x4e" === Just "N" lookupNumericEntity "Haskell" === Nothing lookupNumericEntity "" === Nothing lookupNumericEntity "89439085908539082" === Nothing- lookupNamedEntity "amp" === Just '&'+ lookupNamedEntity "amp" === Just "&" lookupNamedEntity "haskell" === Nothing- escapeXMLChar 'a' === Nothing- escapeXMLChar '&' === Just "amp"+ escapeXML "hello world" === "hello world"+ escapeXML "hello & world" === "hello & world" combiTests :: Test ()
Text/HTML/TagSoup/Entity.hs view
@@ -2,336 +2,2212 @@ -- the characters they represent. module Text.HTML.TagSoup.Entity( lookupEntity, lookupNamedEntity, lookupNumericEntity,- escapeXMLChar,- xmlEntities, htmlEntities- ) where--import Data.Char-import Data.Ix-import Numeric----- | Lookup an entity, using 'lookupNumericEntity' if it starts with--- @#@ and 'lookupNamedEntity' otherwise-lookupEntity :: String -> Maybe Char-lookupEntity ('#':xs) = lookupNumericEntity xs-lookupEntity xs = lookupNamedEntity xs---- | Lookup a numeric entity, the leading @\'#\'@ must have already been removed.------ > lookupNumericEntity "65" == Just 'A'--- > lookupNumericEntity "x41" == Just 'A'--- > lookupNumericEntity "x4E" === Just 'N'--- > lookupNumericEntity "x4e" === Just 'N'--- > lookupNumericEntity "Haskell" == Nothing--- > lookupNumericEntity "" == Nothing--- > lookupNumericEntity "89439085908539082" == Nothing-lookupNumericEntity :: String -> Maybe Char-lookupNumericEntity = f- -- entity = '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'- where- f ('x':xs) = g [('0','9'),('a','f'),('A','F')] readHex xs- f xs = g [('0','9')] reads xs-- g :: [(Char,Char)] -> ReadS Integer -> String -> Maybe Char- g valid reader xs = do- let test b = if b then Just () else Nothing- test $ isValid valid xs- test $ not $ null xs- case reader xs of- [(a,"")] -> do- test $ inRange (toInteger $ ord minBound, toInteger $ ord maxBound) a- return $ chr $ fromInteger a- _ -> Nothing-- isValid :: [(Char,Char)] -> String -> Bool- isValid valid xs = all (\x -> any (`inRange` x) valid) xs----- | Lookup a named entity, using 'htmlEntities'------ > lookupNamedEntity "amp" == Just '&'--- > lookupNamedEntity "haskell" == Nothing-lookupNamedEntity :: String -> Maybe Char-lookupNamedEntity x = fmap chr $ lookup x htmlEntities----- | Escape a character before writing it out to XML.------ > escapeXMLChar 'a' == Nothing--- > escapeXMLChar '&' == Just "amp"-escapeXMLChar :: Char -> Maybe String-escapeXMLChar x = case [a | (a,b) <- xmlEntities, b == ord x] of- (y:_) -> Just y- _ -> Nothing----- | A table mapping XML entity names to code points.--- Does /not/ include @apos@ as Internet Explorer does not know about it.-xmlEntities :: [(String, Int)]-xmlEntities = let a*b = (a,ord b) in- ["quot" * '"'- ,"amp" * '&'- -- ,"apos" * '\'' -- Internet Explorer does not know that- ,"lt" * '<'- ,"gt" * '>'- ]---- | A table mapping HTML entity names to code points-htmlEntities :: [(String, Int)]-htmlEntities = let (*) = (,) in- xmlEntities ++- ["apos" * ord '\'' -- quirky IE!!!-- ,"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-- ,"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+ escapeXML,+ xmlEntities, htmlEntities+ ) where++import Data.Char+import qualified Data.IntMap as IntMap+import Data.Ix+import qualified Data.Map as Map+import Numeric+++-- | Lookup an entity, using 'lookupNumericEntity' if it starts with+-- @#@ and 'lookupNamedEntity' otherwise+lookupEntity :: String -> Maybe String+lookupEntity ('#':xs) = lookupNumericEntity xs+lookupEntity xs = lookupNamedEntity xs+++-- | Lookup a numeric entity, the leading @\'#\'@ must have already been removed.+--+-- > lookupNumericEntity "65" == Just "A"+-- > lookupNumericEntity "x41" == Just "A"+-- > lookupNumericEntity "x4E" === Just "N"+-- > lookupNumericEntity "x4e" === Just "N"+-- > lookupNumericEntity "Haskell" == Nothing+-- > lookupNumericEntity "" == Nothing+-- > lookupNumericEntity "89439085908539082" == Nothing+lookupNumericEntity :: String -> Maybe String+lookupNumericEntity = f+ -- entity = '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'+ where+ f ('x':xs) = g [('0','9'),('a','f'),('A','F')] readHex xs+ f xs = g [('0','9')] reads xs++ g :: [(Char,Char)] -> ReadS Integer -> String -> Maybe String+ g valid reader xs = do+ let test b = if b then Just () else Nothing+ test $ isValid valid xs+ test $ not $ null xs+ case reader xs of+ [(a,"")] -> do+ test $ inRange (toInteger $ ord minBound, toInteger $ ord maxBound) a+ return [chr $ fromInteger a]+ _ -> Nothing++ isValid :: [(Char,Char)] -> String -> Bool+ isValid valid xs = all (\x -> any (`inRange` x) valid) xs+++-- | Lookup a named entity, using 'htmlEntities'+--+-- > lookupNamedEntity "amp" == Just "&"+-- > lookupNamedEntity "haskell" == Nothing+lookupNamedEntity :: String -> Maybe String+lookupNamedEntity = \x -> Map.lookup x mp+ where mp = Map.fromList htmlEntities+++-- | Escape an XML string.+--+-- > escapeXML "hello world" == "hello world"+-- > escapeXML "hello & world" == "hello & world"+escapeXML :: String -> String+escapeXML = concatMap $ \x -> IntMap.findWithDefault [x] (ord x) mp+ where mp = IntMap.fromList [(ord b, "&"++a++";") | (a,[b]) <- xmlEntities]+++-- | A table mapping XML entity names to resolved strings. All strings are a single character long.+-- Does /not/ include @apos@ as Internet Explorer does not know about it.+xmlEntities :: [(String, String)]+xmlEntities = let a*b = (a,[b]) in+ ["quot" * '"'+ ,"amp" * '&'+ -- ,"apos" * '\'' -- Internet Explorer does not know that+ ,"lt" * '<'+ ,"gt" * '>'+ ]++-- | A table mapping HTML entity names to resolved strings. Most resolved strings are a single character long,+-- but some (e.g. @"ngeqq"@) are two characters long. The list is taken from+-- <http://www.w3.org/TR/html5/syntax.html#named-character-references>.+htmlEntities :: [(String, String)]+htmlEntities = let (*) = (,) in+ ["Aacute" * "\x00C1"+ ,"aacute" * "\x00E1"+ ,"Abreve" * "\x0102"+ ,"abreve" * "\x0103"+ ,"ac" * "\x223E"+ ,"acd" * "\x223F"+ ,"acE" * "\x223E\x0333"+ ,"Acirc" * "\x00C2"+ ,"acirc" * "\x00E2"+ ,"acute" * "\x00B4"+ ,"Acy" * "\x0410"+ ,"acy" * "\x0430"+ ,"AElig" * "\x00C6"+ ,"aelig" * "\x00E6"+ ,"af" * "\x2061"+ ,"Afr" * "\xD835\xDD04"+ ,"afr" * "\xD835\xDD1E"+ ,"Agrave" * "\x00C0"+ ,"agrave" * "\x00E0"+ ,"alefsym" * "\x2135"+ ,"aleph" * "\x2135"+ ,"Alpha" * "\x0391"+ ,"alpha" * "\x03B1"+ ,"Amacr" * "\x0100"+ ,"amacr" * "\x0101"+ ,"amalg" * "\x2A3F"+ ,"AMP" * "\x0026"+ ,"amp" * "\x0026"+ ,"and" * "\x2227"+ ,"And" * "\x2A53"+ ,"andand" * "\x2A55"+ ,"andd" * "\x2A5C"+ ,"andslope" * "\x2A58"+ ,"andv" * "\x2A5A"+ ,"ang" * "\x2220"+ ,"ange" * "\x29A4"+ ,"angle" * "\x2220"+ ,"angmsd" * "\x2221"+ ,"angmsdaa" * "\x29A8"+ ,"angmsdab" * "\x29A9"+ ,"angmsdac" * "\x29AA"+ ,"angmsdad" * "\x29AB"+ ,"angmsdae" * "\x29AC"+ ,"angmsdaf" * "\x29AD"+ ,"angmsdag" * "\x29AE"+ ,"angmsdah" * "\x29AF"+ ,"angrt" * "\x221F"+ ,"angrtvb" * "\x22BE"+ ,"angrtvbd" * "\x299D"+ ,"angsph" * "\x2222"+ ,"angst" * "\x00C5"+ ,"angzarr" * "\x237C"+ ,"Aogon" * "\x0104"+ ,"aogon" * "\x0105"+ ,"Aopf" * "\xD835\xDD38"+ ,"aopf" * "\xD835\xDD52"+ ,"ap" * "\x2248"+ ,"apacir" * "\x2A6F"+ ,"ape" * "\x224A"+ ,"apE" * "\x2A70"+ ,"apid" * "\x224B"+ ,"apos" * "\x0027"+ ,"ApplyFunction" * "\x2061"+ ,"approx" * "\x2248"+ ,"approxeq" * "\x224A"+ ,"Aring" * "\x00C5"+ ,"aring" * "\x00E5"+ ,"Ascr" * "\xD835\xDC9C"+ ,"ascr" * "\xD835\xDCB6"+ ,"Assign" * "\x2254"+ ,"ast" * "\x002A"+ ,"asymp" * "\x2248"+ ,"asympeq" * "\x224D"+ ,"Atilde" * "\x00C3"+ ,"atilde" * "\x00E3"+ ,"Auml" * "\x00C4"+ ,"auml" * "\x00E4"+ ,"awconint" * "\x2233"+ ,"awint" * "\x2A11"+ ,"backcong" * "\x224C"+ ,"backepsilon" * "\x03F6"+ ,"backprime" * "\x2035"+ ,"backsim" * "\x223D"+ ,"backsimeq" * "\x22CD"+ ,"Backslash" * "\x2216"+ ,"Barv" * "\x2AE7"+ ,"barvee" * "\x22BD"+ ,"barwed" * "\x2305"+ ,"Barwed" * "\x2306"+ ,"barwedge" * "\x2305"+ ,"bbrk" * "\x23B5"+ ,"bbrktbrk" * "\x23B6"+ ,"bcong" * "\x224C"+ ,"Bcy" * "\x0411"+ ,"bcy" * "\x0431"+ ,"bdquo" * "\x201E"+ ,"becaus" * "\x2235"+ ,"Because" * "\x2235"+ ,"because" * "\x2235"+ ,"bemptyv" * "\x29B0"+ ,"bepsi" * "\x03F6"+ ,"bernou" * "\x212C"+ ,"Bernoullis" * "\x212C"+ ,"Beta" * "\x0392"+ ,"beta" * "\x03B2"+ ,"beth" * "\x2136"+ ,"between" * "\x226C"+ ,"Bfr" * "\xD835\xDD05"+ ,"bfr" * "\xD835\xDD1F"+ ,"bigcap" * "\x22C2"+ ,"bigcirc" * "\x25EF"+ ,"bigcup" * "\x22C3"+ ,"bigodot" * "\x2A00"+ ,"bigoplus" * "\x2A01"+ ,"bigotimes" * "\x2A02"+ ,"bigsqcup" * "\x2A06"+ ,"bigstar" * "\x2605"+ ,"bigtriangledown" * "\x25BD"+ ,"bigtriangleup" * "\x25B3"+ ,"biguplus" * "\x2A04"+ ,"bigvee" * "\x22C1"+ ,"bigwedge" * "\x22C0"+ ,"bkarow" * "\x290D"+ ,"blacklozenge" * "\x29EB"+ ,"blacksquare" * "\x25AA"+ ,"blacktriangle" * "\x25B4"+ ,"blacktriangledown" * "\x25BE"+ ,"blacktriangleleft" * "\x25C2"+ ,"blacktriangleright" * "\x25B8"+ ,"blank" * "\x2423"+ ,"blk12" * "\x2592"+ ,"blk14" * "\x2591"+ ,"blk34" * "\x2593"+ ,"block" * "\x2588"+ ,"bne" * "\x003D\x20E5"+ ,"bnequiv" * "\x2261\x20E5"+ ,"bnot" * "\x2310"+ ,"bNot" * "\x2AED"+ ,"Bopf" * "\xD835\xDD39"+ ,"bopf" * "\xD835\xDD53"+ ,"bot" * "\x22A5"+ ,"bottom" * "\x22A5"+ ,"bowtie" * "\x22C8"+ ,"boxbox" * "\x29C9"+ ,"boxdl" * "\x2510"+ ,"boxdL" * "\x2555"+ ,"boxDl" * "\x2556"+ ,"boxDL" * "\x2557"+ ,"boxdr" * "\x250C"+ ,"boxdR" * "\x2552"+ ,"boxDr" * "\x2553"+ ,"boxDR" * "\x2554"+ ,"boxh" * "\x2500"+ ,"boxH" * "\x2550"+ ,"boxhd" * "\x252C"+ ,"boxHd" * "\x2564"+ ,"boxhD" * "\x2565"+ ,"boxHD" * "\x2566"+ ,"boxhu" * "\x2534"+ ,"boxHu" * "\x2567"+ ,"boxhU" * "\x2568"+ ,"boxHU" * "\x2569"+ ,"boxminus" * "\x229F"+ ,"boxplus" * "\x229E"+ ,"boxtimes" * "\x22A0"+ ,"boxul" * "\x2518"+ ,"boxuL" * "\x255B"+ ,"boxUl" * "\x255C"+ ,"boxUL" * "\x255D"+ ,"boxur" * "\x2514"+ ,"boxuR" * "\x2558"+ ,"boxUr" * "\x2559"+ ,"boxUR" * "\x255A"+ ,"boxv" * "\x2502"+ ,"boxV" * "\x2551"+ ,"boxvh" * "\x253C"+ ,"boxvH" * "\x256A"+ ,"boxVh" * "\x256B"+ ,"boxVH" * "\x256C"+ ,"boxvl" * "\x2524"+ ,"boxvL" * "\x2561"+ ,"boxVl" * "\x2562"+ ,"boxVL" * "\x2563"+ ,"boxvr" * "\x251C"+ ,"boxvR" * "\x255E"+ ,"boxVr" * "\x255F"+ ,"boxVR" * "\x2560"+ ,"bprime" * "\x2035"+ ,"Breve" * "\x02D8"+ ,"breve" * "\x02D8"+ ,"brvbar" * "\x00A6"+ ,"Bscr" * "\x212C"+ ,"bscr" * "\xD835\xDCB7"+ ,"bsemi" * "\x204F"+ ,"bsim" * "\x223D"+ ,"bsime" * "\x22CD"+ ,"bsol" * "\x005C"+ ,"bsolb" * "\x29C5"+ ,"bsolhsub" * "\x27C8"+ ,"bull" * "\x2022"+ ,"bullet" * "\x2022"+ ,"bump" * "\x224E"+ ,"bumpe" * "\x224F"+ ,"bumpE" * "\x2AAE"+ ,"Bumpeq" * "\x224E"+ ,"bumpeq" * "\x224F"+ ,"Cacute" * "\x0106"+ ,"cacute" * "\x0107"+ ,"cap" * "\x2229"+ ,"Cap" * "\x22D2"+ ,"capand" * "\x2A44"+ ,"capbrcup" * "\x2A49"+ ,"capcap" * "\x2A4B"+ ,"capcup" * "\x2A47"+ ,"capdot" * "\x2A40"+ ,"CapitalDifferentialD" * "\x2145"+ ,"caps" * "\x2229\xFE00"+ ,"caret" * "\x2041"+ ,"caron" * "\x02C7"+ ,"Cayleys" * "\x212D"+ ,"ccaps" * "\x2A4D"+ ,"Ccaron" * "\x010C"+ ,"ccaron" * "\x010D"+ ,"Ccedil" * "\x00C7"+ ,"ccedil" * "\x00E7"+ ,"Ccirc" * "\x0108"+ ,"ccirc" * "\x0109"+ ,"Cconint" * "\x2230"+ ,"ccups" * "\x2A4C"+ ,"ccupssm" * "\x2A50"+ ,"Cdot" * "\x010A"+ ,"cdot" * "\x010B"+ ,"cedil" * "\x00B8"+ ,"Cedilla" * "\x00B8"+ ,"cemptyv" * "\x29B2"+ ,"cent" * "\x00A2"+ ,"CenterDot" * "\x00B7"+ ,"centerdot" * "\x00B7"+ ,"Cfr" * "\x212D"+ ,"cfr" * "\xD835\xDD20"+ ,"CHcy" * "\x0427"+ ,"chcy" * "\x0447"+ ,"check" * "\x2713"+ ,"checkmark" * "\x2713"+ ,"Chi" * "\x03A7"+ ,"chi" * "\x03C7"+ ,"cir" * "\x25CB"+ ,"circ" * "\x02C6"+ ,"circeq" * "\x2257"+ ,"circlearrowleft" * "\x21BA"+ ,"circlearrowright" * "\x21BB"+ ,"circledast" * "\x229B"+ ,"circledcirc" * "\x229A"+ ,"circleddash" * "\x229D"+ ,"CircleDot" * "\x2299"+ ,"circledR" * "\x00AE"+ ,"circledS" * "\x24C8"+ ,"CircleMinus" * "\x2296"+ ,"CirclePlus" * "\x2295"+ ,"CircleTimes" * "\x2297"+ ,"cire" * "\x2257"+ ,"cirE" * "\x29C3"+ ,"cirfnint" * "\x2A10"+ ,"cirmid" * "\x2AEF"+ ,"cirscir" * "\x29C2"+ ,"ClockwiseContourIntegral" * "\x2232"+ ,"CloseCurlyDoubleQuote" * "\x201D"+ ,"CloseCurlyQuote" * "\x2019"+ ,"clubs" * "\x2663"+ ,"clubsuit" * "\x2663"+ ,"colon" * "\x003A"+ ,"Colon" * "\x2237"+ ,"colone" * "\x2254"+ ,"Colone" * "\x2A74"+ ,"coloneq" * "\x2254"+ ,"comma" * "\x002C"+ ,"commat" * "\x0040"+ ,"comp" * "\x2201"+ ,"compfn" * "\x2218"+ ,"complement" * "\x2201"+ ,"complexes" * "\x2102"+ ,"cong" * "\x2245"+ ,"congdot" * "\x2A6D"+ ,"Congruent" * "\x2261"+ ,"conint" * "\x222E"+ ,"Conint" * "\x222F"+ ,"ContourIntegral" * "\x222E"+ ,"Copf" * "\x2102"+ ,"copf" * "\xD835\xDD54"+ ,"coprod" * "\x2210"+ ,"Coproduct" * "\x2210"+ ,"COPY" * "\x00A9"+ ,"copy" * "\x00A9"+ ,"copysr" * "\x2117"+ ,"CounterClockwiseContourIntegral" * "\x2233"+ ,"crarr" * "\x21B5"+ ,"cross" * "\x2717"+ ,"Cross" * "\x2A2F"+ ,"Cscr" * "\xD835\xDC9E"+ ,"cscr" * "\xD835\xDCB8"+ ,"csub" * "\x2ACF"+ ,"csube" * "\x2AD1"+ ,"csup" * "\x2AD0"+ ,"csupe" * "\x2AD2"+ ,"ctdot" * "\x22EF"+ ,"cudarrl" * "\x2938"+ ,"cudarrr" * "\x2935"+ ,"cuepr" * "\x22DE"+ ,"cuesc" * "\x22DF"+ ,"cularr" * "\x21B6"+ ,"cularrp" * "\x293D"+ ,"cup" * "\x222A"+ ,"Cup" * "\x22D3"+ ,"cupbrcap" * "\x2A48"+ ,"CupCap" * "\x224D"+ ,"cupcap" * "\x2A46"+ ,"cupcup" * "\x2A4A"+ ,"cupdot" * "\x228D"+ ,"cupor" * "\x2A45"+ ,"cups" * "\x222A\xFE00"+ ,"curarr" * "\x21B7"+ ,"curarrm" * "\x293C"+ ,"curlyeqprec" * "\x22DE"+ ,"curlyeqsucc" * "\x22DF"+ ,"curlyvee" * "\x22CE"+ ,"curlywedge" * "\x22CF"+ ,"curren" * "\x00A4"+ ,"curvearrowleft" * "\x21B6"+ ,"curvearrowright" * "\x21B7"+ ,"cuvee" * "\x22CE"+ ,"cuwed" * "\x22CF"+ ,"cwconint" * "\x2232"+ ,"cwint" * "\x2231"+ ,"cylcty" * "\x232D"+ ,"dagger" * "\x2020"+ ,"Dagger" * "\x2021"+ ,"daleth" * "\x2138"+ ,"darr" * "\x2193"+ ,"Darr" * "\x21A1"+ ,"dArr" * "\x21D3"+ ,"dash" * "\x2010"+ ,"dashv" * "\x22A3"+ ,"Dashv" * "\x2AE4"+ ,"dbkarow" * "\x290F"+ ,"dblac" * "\x02DD"+ ,"Dcaron" * "\x010E"+ ,"dcaron" * "\x010F"+ ,"Dcy" * "\x0414"+ ,"dcy" * "\x0434"+ ,"DD" * "\x2145"+ ,"dd" * "\x2146"+ ,"ddagger" * "\x2021"+ ,"ddarr" * "\x21CA"+ ,"DDotrahd" * "\x2911"+ ,"ddotseq" * "\x2A77"+ ,"deg" * "\x00B0"+ ,"Del" * "\x2207"+ ,"Delta" * "\x0394"+ ,"delta" * "\x03B4"+ ,"demptyv" * "\x29B1"+ ,"dfisht" * "\x297F"+ ,"Dfr" * "\xD835\xDD07"+ ,"dfr" * "\xD835\xDD21"+ ,"dHar" * "\x2965"+ ,"dharl" * "\x21C3"+ ,"dharr" * "\x21C2"+ ,"DiacriticalAcute" * "\x00B4"+ ,"DiacriticalDot" * "\x02D9"+ ,"DiacriticalDoubleAcute" * "\x02DD"+ ,"DiacriticalGrave" * "\x0060"+ ,"DiacriticalTilde" * "\x02DC"+ ,"diam" * "\x22C4"+ ,"Diamond" * "\x22C4"+ ,"diamond" * "\x22C4"+ ,"diamondsuit" * "\x2666"+ ,"diams" * "\x2666"+ ,"die" * "\x00A8"+ ,"DifferentialD" * "\x2146"+ ,"digamma" * "\x03DD"+ ,"disin" * "\x22F2"+ ,"div" * "\x00F7"+ ,"divide" * "\x00F7"+ ,"divideontimes" * "\x22C7"+ ,"divonx" * "\x22C7"+ ,"DJcy" * "\x0402"+ ,"djcy" * "\x0452"+ ,"dlcorn" * "\x231E"+ ,"dlcrop" * "\x230D"+ ,"dollar" * "\x0024"+ ,"Dopf" * "\xD835\xDD3B"+ ,"dopf" * "\xD835\xDD55"+ ,"Dot" * "\x00A8"+ ,"dot" * "\x02D9"+ ,"DotDot" * "\x20DC"+ ,"doteq" * "\x2250"+ ,"doteqdot" * "\x2251"+ ,"DotEqual" * "\x2250"+ ,"dotminus" * "\x2238"+ ,"dotplus" * "\x2214"+ ,"dotsquare" * "\x22A1"+ ,"doublebarwedge" * "\x2306"+ ,"DoubleContourIntegral" * "\x222F"+ ,"DoubleDot" * "\x00A8"+ ,"DoubleDownArrow" * "\x21D3"+ ,"DoubleLeftArrow" * "\x21D0"+ ,"DoubleLeftRightArrow" * "\x21D4"+ ,"DoubleLeftTee" * "\x2AE4"+ ,"DoubleLongLeftArrow" * "\x27F8"+ ,"DoubleLongLeftRightArrow" * "\x27FA"+ ,"DoubleLongRightArrow" * "\x27F9"+ ,"DoubleRightArrow" * "\x21D2"+ ,"DoubleRightTee" * "\x22A8"+ ,"DoubleUpArrow" * "\x21D1"+ ,"DoubleUpDownArrow" * "\x21D5"+ ,"DoubleVerticalBar" * "\x2225"+ ,"DownArrow" * "\x2193"+ ,"downarrow" * "\x2193"+ ,"Downarrow" * "\x21D3"+ ,"DownArrowBar" * "\x2913"+ ,"DownArrowUpArrow" * "\x21F5"+ ,"DownBreve" * "\x0311"+ ,"downdownarrows" * "\x21CA"+ ,"downharpoonleft" * "\x21C3"+ ,"downharpoonright" * "\x21C2"+ ,"DownLeftRightVector" * "\x2950"+ ,"DownLeftTeeVector" * "\x295E"+ ,"DownLeftVector" * "\x21BD"+ ,"DownLeftVectorBar" * "\x2956"+ ,"DownRightTeeVector" * "\x295F"+ ,"DownRightVector" * "\x21C1"+ ,"DownRightVectorBar" * "\x2957"+ ,"DownTee" * "\x22A4"+ ,"DownTeeArrow" * "\x21A7"+ ,"drbkarow" * "\x2910"+ ,"drcorn" * "\x231F"+ ,"drcrop" * "\x230C"+ ,"Dscr" * "\xD835\xDC9F"+ ,"dscr" * "\xD835\xDCB9"+ ,"DScy" * "\x0405"+ ,"dscy" * "\x0455"+ ,"dsol" * "\x29F6"+ ,"Dstrok" * "\x0110"+ ,"dstrok" * "\x0111"+ ,"dtdot" * "\x22F1"+ ,"dtri" * "\x25BF"+ ,"dtrif" * "\x25BE"+ ,"duarr" * "\x21F5"+ ,"duhar" * "\x296F"+ ,"dwangle" * "\x29A6"+ ,"DZcy" * "\x040F"+ ,"dzcy" * "\x045F"+ ,"dzigrarr" * "\x27FF"+ ,"Eacute" * "\x00C9"+ ,"eacute" * "\x00E9"+ ,"easter" * "\x2A6E"+ ,"Ecaron" * "\x011A"+ ,"ecaron" * "\x011B"+ ,"ecir" * "\x2256"+ ,"Ecirc" * "\x00CA"+ ,"ecirc" * "\x00EA"+ ,"ecolon" * "\x2255"+ ,"Ecy" * "\x042D"+ ,"ecy" * "\x044D"+ ,"eDDot" * "\x2A77"+ ,"Edot" * "\x0116"+ ,"edot" * "\x0117"+ ,"eDot" * "\x2251"+ ,"ee" * "\x2147"+ ,"efDot" * "\x2252"+ ,"Efr" * "\xD835\xDD08"+ ,"efr" * "\xD835\xDD22"+ ,"eg" * "\x2A9A"+ ,"Egrave" * "\x00C8"+ ,"egrave" * "\x00E8"+ ,"egs" * "\x2A96"+ ,"egsdot" * "\x2A98"+ ,"el" * "\x2A99"+ ,"Element" * "\x2208"+ ,"elinters" * "\x23E7"+ ,"ell" * "\x2113"+ ,"els" * "\x2A95"+ ,"elsdot" * "\x2A97"+ ,"Emacr" * "\x0112"+ ,"emacr" * "\x0113"+ ,"empty" * "\x2205"+ ,"emptyset" * "\x2205"+ ,"EmptySmallSquare" * "\x25FB"+ ,"emptyv" * "\x2205"+ ,"EmptyVerySmallSquare" * "\x25AB"+ ,"emsp" * "\x2003"+ ,"emsp13" * "\x2004"+ ,"emsp14" * "\x2005"+ ,"ENG" * "\x014A"+ ,"eng" * "\x014B"+ ,"ensp" * "\x2002"+ ,"Eogon" * "\x0118"+ ,"eogon" * "\x0119"+ ,"Eopf" * "\xD835\xDD3C"+ ,"eopf" * "\xD835\xDD56"+ ,"epar" * "\x22D5"+ ,"eparsl" * "\x29E3"+ ,"eplus" * "\x2A71"+ ,"epsi" * "\x03B5"+ ,"Epsilon" * "\x0395"+ ,"epsilon" * "\x03B5"+ ,"epsiv" * "\x03F5"+ ,"eqcirc" * "\x2256"+ ,"eqcolon" * "\x2255"+ ,"eqsim" * "\x2242"+ ,"eqslantgtr" * "\x2A96"+ ,"eqslantless" * "\x2A95"+ ,"Equal" * "\x2A75"+ ,"equals" * "\x003D"+ ,"EqualTilde" * "\x2242"+ ,"equest" * "\x225F"+ ,"Equilibrium" * "\x21CC"+ ,"equiv" * "\x2261"+ ,"equivDD" * "\x2A78"+ ,"eqvparsl" * "\x29E5"+ ,"erarr" * "\x2971"+ ,"erDot" * "\x2253"+ ,"escr" * "\x212F"+ ,"Escr" * "\x2130"+ ,"esdot" * "\x2250"+ ,"esim" * "\x2242"+ ,"Esim" * "\x2A73"+ ,"Eta" * "\x0397"+ ,"eta" * "\x03B7"+ ,"ETH" * "\x00D0"+ ,"eth" * "\x00F0"+ ,"Euml" * "\x00CB"+ ,"euml" * "\x00EB"+ ,"euro" * "\x20AC"+ ,"excl" * "\x0021"+ ,"exist" * "\x2203"+ ,"Exists" * "\x2203"+ ,"expectation" * "\x2130"+ ,"ExponentialE" * "\x2147"+ ,"exponentiale" * "\x2147"+ ,"fallingdotseq" * "\x2252"+ ,"Fcy" * "\x0424"+ ,"fcy" * "\x0444"+ ,"female" * "\x2640"+ ,"ffilig" * "\xFB03"+ ,"fflig" * "\xFB00"+ ,"ffllig" * "\xFB04"+ ,"Ffr" * "\xD835\xDD09"+ ,"ffr" * "\xD835\xDD23"+ ,"filig" * "\xFB01"+ ,"FilledSmallSquare" * "\x25FC"+ ,"FilledVerySmallSquare" * "\x25AA"+ ,"fjlig" * "\x0066\x006A"+ ,"flat" * "\x266D"+ ,"fllig" * "\xFB02"+ ,"fltns" * "\x25B1"+ ,"fnof" * "\x0192"+ ,"Fopf" * "\xD835\xDD3D"+ ,"fopf" * "\xD835\xDD57"+ ,"ForAll" * "\x2200"+ ,"forall" * "\x2200"+ ,"fork" * "\x22D4"+ ,"forkv" * "\x2AD9"+ ,"Fouriertrf" * "\x2131"+ ,"fpartint" * "\x2A0D"+ ,"frac12" * "\x00BD"+ ,"frac13" * "\x2153"+ ,"frac14" * "\x00BC"+ ,"frac15" * "\x2155"+ ,"frac16" * "\x2159"+ ,"frac18" * "\x215B"+ ,"frac23" * "\x2154"+ ,"frac25" * "\x2156"+ ,"frac34" * "\x00BE"+ ,"frac35" * "\x2157"+ ,"frac38" * "\x215C"+ ,"frac45" * "\x2158"+ ,"frac56" * "\x215A"+ ,"frac58" * "\x215D"+ ,"frac78" * "\x215E"+ ,"frasl" * "\x2044"+ ,"frown" * "\x2322"+ ,"Fscr" * "\x2131"+ ,"fscr" * "\xD835\xDCBB"+ ,"gacute" * "\x01F5"+ ,"Gamma" * "\x0393"+ ,"gamma" * "\x03B3"+ ,"Gammad" * "\x03DC"+ ,"gammad" * "\x03DD"+ ,"gap" * "\x2A86"+ ,"Gbreve" * "\x011E"+ ,"gbreve" * "\x011F"+ ,"Gcedil" * "\x0122"+ ,"Gcirc" * "\x011C"+ ,"gcirc" * "\x011D"+ ,"Gcy" * "\x0413"+ ,"gcy" * "\x0433"+ ,"Gdot" * "\x0120"+ ,"gdot" * "\x0121"+ ,"ge" * "\x2265"+ ,"gE" * "\x2267"+ ,"gel" * "\x22DB"+ ,"gEl" * "\x2A8C"+ ,"geq" * "\x2265"+ ,"geqq" * "\x2267"+ ,"geqslant" * "\x2A7E"+ ,"ges" * "\x2A7E"+ ,"gescc" * "\x2AA9"+ ,"gesdot" * "\x2A80"+ ,"gesdoto" * "\x2A82"+ ,"gesdotol" * "\x2A84"+ ,"gesl" * "\x22DB\xFE00"+ ,"gesles" * "\x2A94"+ ,"Gfr" * "\xD835\xDD0A"+ ,"gfr" * "\xD835\xDD24"+ ,"gg" * "\x226B"+ ,"Gg" * "\x22D9"+ ,"ggg" * "\x22D9"+ ,"gimel" * "\x2137"+ ,"GJcy" * "\x0403"+ ,"gjcy" * "\x0453"+ ,"gl" * "\x2277"+ ,"gla" * "\x2AA5"+ ,"glE" * "\x2A92"+ ,"glj" * "\x2AA4"+ ,"gnap" * "\x2A8A"+ ,"gnapprox" * "\x2A8A"+ ,"gnE" * "\x2269"+ ,"gne" * "\x2A88"+ ,"gneq" * "\x2A88"+ ,"gneqq" * "\x2269"+ ,"gnsim" * "\x22E7"+ ,"Gopf" * "\xD835\xDD3E"+ ,"gopf" * "\xD835\xDD58"+ ,"grave" * "\x0060"+ ,"GreaterEqual" * "\x2265"+ ,"GreaterEqualLess" * "\x22DB"+ ,"GreaterFullEqual" * "\x2267"+ ,"GreaterGreater" * "\x2AA2"+ ,"GreaterLess" * "\x2277"+ ,"GreaterSlantEqual" * "\x2A7E"+ ,"GreaterTilde" * "\x2273"+ ,"gscr" * "\x210A"+ ,"Gscr" * "\xD835\xDCA2"+ ,"gsim" * "\x2273"+ ,"gsime" * "\x2A8E"+ ,"gsiml" * "\x2A90"+ ,"GT" * "\x003E"+ ,"gt" * "\x003E"+ ,"Gt" * "\x226B"+ ,"gtcc" * "\x2AA7"+ ,"gtcir" * "\x2A7A"+ ,"gtdot" * "\x22D7"+ ,"gtlPar" * "\x2995"+ ,"gtquest" * "\x2A7C"+ ,"gtrapprox" * "\x2A86"+ ,"gtrarr" * "\x2978"+ ,"gtrdot" * "\x22D7"+ ,"gtreqless" * "\x22DB"+ ,"gtreqqless" * "\x2A8C"+ ,"gtrless" * "\x2277"+ ,"gtrsim" * "\x2273"+ ,"gvertneqq" * "\x2269\xFE00"+ ,"gvnE" * "\x2269\xFE00"+ ,"Hacek" * "\x02C7"+ ,"hairsp" * "\x200A"+ ,"half" * "\x00BD"+ ,"hamilt" * "\x210B"+ ,"HARDcy" * "\x042A"+ ,"hardcy" * "\x044A"+ ,"harr" * "\x2194"+ ,"hArr" * "\x21D4"+ ,"harrcir" * "\x2948"+ ,"harrw" * "\x21AD"+ ,"Hat" * "\x005E"+ ,"hbar" * "\x210F"+ ,"Hcirc" * "\x0124"+ ,"hcirc" * "\x0125"+ ,"hearts" * "\x2665"+ ,"heartsuit" * "\x2665"+ ,"hellip" * "\x2026"+ ,"hercon" * "\x22B9"+ ,"Hfr" * "\x210C"+ ,"hfr" * "\xD835\xDD25"+ ,"HilbertSpace" * "\x210B"+ ,"hksearow" * "\x2925"+ ,"hkswarow" * "\x2926"+ ,"hoarr" * "\x21FF"+ ,"homtht" * "\x223B"+ ,"hookleftarrow" * "\x21A9"+ ,"hookrightarrow" * "\x21AA"+ ,"Hopf" * "\x210D"+ ,"hopf" * "\xD835\xDD59"+ ,"horbar" * "\x2015"+ ,"HorizontalLine" * "\x2500"+ ,"Hscr" * "\x210B"+ ,"hscr" * "\xD835\xDCBD"+ ,"hslash" * "\x210F"+ ,"Hstrok" * "\x0126"+ ,"hstrok" * "\x0127"+ ,"HumpDownHump" * "\x224E"+ ,"HumpEqual" * "\x224F"+ ,"hybull" * "\x2043"+ ,"hyphen" * "\x2010"+ ,"Iacute" * "\x00CD"+ ,"iacute" * "\x00ED"+ ,"ic" * "\x2063"+ ,"Icirc" * "\x00CE"+ ,"icirc" * "\x00EE"+ ,"Icy" * "\x0418"+ ,"icy" * "\x0438"+ ,"Idot" * "\x0130"+ ,"IEcy" * "\x0415"+ ,"iecy" * "\x0435"+ ,"iexcl" * "\x00A1"+ ,"iff" * "\x21D4"+ ,"Ifr" * "\x2111"+ ,"ifr" * "\xD835\xDD26"+ ,"Igrave" * "\x00CC"+ ,"igrave" * "\x00EC"+ ,"ii" * "\x2148"+ ,"iiiint" * "\x2A0C"+ ,"iiint" * "\x222D"+ ,"iinfin" * "\x29DC"+ ,"iiota" * "\x2129"+ ,"IJlig" * "\x0132"+ ,"ijlig" * "\x0133"+ ,"Im" * "\x2111"+ ,"Imacr" * "\x012A"+ ,"imacr" * "\x012B"+ ,"image" * "\x2111"+ ,"ImaginaryI" * "\x2148"+ ,"imagline" * "\x2110"+ ,"imagpart" * "\x2111"+ ,"imath" * "\x0131"+ ,"imof" * "\x22B7"+ ,"imped" * "\x01B5"+ ,"Implies" * "\x21D2"+ ,"in" * "\x2208"+ ,"incare" * "\x2105"+ ,"infin" * "\x221E"+ ,"infintie" * "\x29DD"+ ,"inodot" * "\x0131"+ ,"int" * "\x222B"+ ,"Int" * "\x222C"+ ,"intcal" * "\x22BA"+ ,"integers" * "\x2124"+ ,"Integral" * "\x222B"+ ,"intercal" * "\x22BA"+ ,"Intersection" * "\x22C2"+ ,"intlarhk" * "\x2A17"+ ,"intprod" * "\x2A3C"+ ,"InvisibleComma" * "\x2063"+ ,"InvisibleTimes" * "\x2062"+ ,"IOcy" * "\x0401"+ ,"iocy" * "\x0451"+ ,"Iogon" * "\x012E"+ ,"iogon" * "\x012F"+ ,"Iopf" * "\xD835\xDD40"+ ,"iopf" * "\xD835\xDD5A"+ ,"Iota" * "\x0399"+ ,"iota" * "\x03B9"+ ,"iprod" * "\x2A3C"+ ,"iquest" * "\x00BF"+ ,"Iscr" * "\x2110"+ ,"iscr" * "\xD835\xDCBE"+ ,"isin" * "\x2208"+ ,"isindot" * "\x22F5"+ ,"isinE" * "\x22F9"+ ,"isins" * "\x22F4"+ ,"isinsv" * "\x22F3"+ ,"isinv" * "\x2208"+ ,"it" * "\x2062"+ ,"Itilde" * "\x0128"+ ,"itilde" * "\x0129"+ ,"Iukcy" * "\x0406"+ ,"iukcy" * "\x0456"+ ,"Iuml" * "\x00CF"+ ,"iuml" * "\x00EF"+ ,"Jcirc" * "\x0134"+ ,"jcirc" * "\x0135"+ ,"Jcy" * "\x0419"+ ,"jcy" * "\x0439"+ ,"Jfr" * "\xD835\xDD0D"+ ,"jfr" * "\xD835\xDD27"+ ,"jmath" * "\x0237"+ ,"Jopf" * "\xD835\xDD41"+ ,"jopf" * "\xD835\xDD5B"+ ,"Jscr" * "\xD835\xDCA5"+ ,"jscr" * "\xD835\xDCBF"+ ,"Jsercy" * "\x0408"+ ,"jsercy" * "\x0458"+ ,"Jukcy" * "\x0404"+ ,"jukcy" * "\x0454"+ ,"Kappa" * "\x039A"+ ,"kappa" * "\x03BA"+ ,"kappav" * "\x03F0"+ ,"Kcedil" * "\x0136"+ ,"kcedil" * "\x0137"+ ,"Kcy" * "\x041A"+ ,"kcy" * "\x043A"+ ,"Kfr" * "\xD835\xDD0E"+ ,"kfr" * "\xD835\xDD28"+ ,"kgreen" * "\x0138"+ ,"KHcy" * "\x0425"+ ,"khcy" * "\x0445"+ ,"KJcy" * "\x040C"+ ,"kjcy" * "\x045C"+ ,"Kopf" * "\xD835\xDD42"+ ,"kopf" * "\xD835\xDD5C"+ ,"Kscr" * "\xD835\xDCA6"+ ,"kscr" * "\xD835\xDCC0"+ ,"lAarr" * "\x21DA"+ ,"Lacute" * "\x0139"+ ,"lacute" * "\x013A"+ ,"laemptyv" * "\x29B4"+ ,"lagran" * "\x2112"+ ,"Lambda" * "\x039B"+ ,"lambda" * "\x03BB"+ ,"lang" * "\x27E8"+ ,"Lang" * "\x27EA"+ ,"langd" * "\x2991"+ ,"langle" * "\x27E8"+ ,"lap" * "\x2A85"+ ,"Laplacetrf" * "\x2112"+ ,"laquo" * "\x00AB"+ ,"larr" * "\x2190"+ ,"Larr" * "\x219E"+ ,"lArr" * "\x21D0"+ ,"larrb" * "\x21E4"+ ,"larrbfs" * "\x291F"+ ,"larrfs" * "\x291D"+ ,"larrhk" * "\x21A9"+ ,"larrlp" * "\x21AB"+ ,"larrpl" * "\x2939"+ ,"larrsim" * "\x2973"+ ,"larrtl" * "\x21A2"+ ,"lat" * "\x2AAB"+ ,"latail" * "\x2919"+ ,"lAtail" * "\x291B"+ ,"late" * "\x2AAD"+ ,"lates" * "\x2AAD\xFE00"+ ,"lbarr" * "\x290C"+ ,"lBarr" * "\x290E"+ ,"lbbrk" * "\x2772"+ ,"lbrace" * "\x007B"+ ,"lbrack" * "\x005B"+ ,"lbrke" * "\x298B"+ ,"lbrksld" * "\x298F"+ ,"lbrkslu" * "\x298D"+ ,"Lcaron" * "\x013D"+ ,"lcaron" * "\x013E"+ ,"Lcedil" * "\x013B"+ ,"lcedil" * "\x013C"+ ,"lceil" * "\x2308"+ ,"lcub" * "\x007B"+ ,"Lcy" * "\x041B"+ ,"lcy" * "\x043B"+ ,"ldca" * "\x2936"+ ,"ldquo" * "\x201C"+ ,"ldquor" * "\x201E"+ ,"ldrdhar" * "\x2967"+ ,"ldrushar" * "\x294B"+ ,"ldsh" * "\x21B2"+ ,"le" * "\x2264"+ ,"lE" * "\x2266"+ ,"LeftAngleBracket" * "\x27E8"+ ,"LeftArrow" * "\x2190"+ ,"leftarrow" * "\x2190"+ ,"Leftarrow" * "\x21D0"+ ,"LeftArrowBar" * "\x21E4"+ ,"LeftArrowRightArrow" * "\x21C6"+ ,"leftarrowtail" * "\x21A2"+ ,"LeftCeiling" * "\x2308"+ ,"LeftDoubleBracket" * "\x27E6"+ ,"LeftDownTeeVector" * "\x2961"+ ,"LeftDownVector" * "\x21C3"+ ,"LeftDownVectorBar" * "\x2959"+ ,"LeftFloor" * "\x230A"+ ,"leftharpoondown" * "\x21BD"+ ,"leftharpoonup" * "\x21BC"+ ,"leftleftarrows" * "\x21C7"+ ,"LeftRightArrow" * "\x2194"+ ,"leftrightarrow" * "\x2194"+ ,"Leftrightarrow" * "\x21D4"+ ,"leftrightarrows" * "\x21C6"+ ,"leftrightharpoons" * "\x21CB"+ ,"leftrightsquigarrow" * "\x21AD"+ ,"LeftRightVector" * "\x294E"+ ,"LeftTee" * "\x22A3"+ ,"LeftTeeArrow" * "\x21A4"+ ,"LeftTeeVector" * "\x295A"+ ,"leftthreetimes" * "\x22CB"+ ,"LeftTriangle" * "\x22B2"+ ,"LeftTriangleBar" * "\x29CF"+ ,"LeftTriangleEqual" * "\x22B4"+ ,"LeftUpDownVector" * "\x2951"+ ,"LeftUpTeeVector" * "\x2960"+ ,"LeftUpVector" * "\x21BF"+ ,"LeftUpVectorBar" * "\x2958"+ ,"LeftVector" * "\x21BC"+ ,"LeftVectorBar" * "\x2952"+ ,"leg" * "\x22DA"+ ,"lEg" * "\x2A8B"+ ,"leq" * "\x2264"+ ,"leqq" * "\x2266"+ ,"leqslant" * "\x2A7D"+ ,"les" * "\x2A7D"+ ,"lescc" * "\x2AA8"+ ,"lesdot" * "\x2A7F"+ ,"lesdoto" * "\x2A81"+ ,"lesdotor" * "\x2A83"+ ,"lesg" * "\x22DA\xFE00"+ ,"lesges" * "\x2A93"+ ,"lessapprox" * "\x2A85"+ ,"lessdot" * "\x22D6"+ ,"lesseqgtr" * "\x22DA"+ ,"lesseqqgtr" * "\x2A8B"+ ,"LessEqualGreater" * "\x22DA"+ ,"LessFullEqual" * "\x2266"+ ,"LessGreater" * "\x2276"+ ,"lessgtr" * "\x2276"+ ,"LessLess" * "\x2AA1"+ ,"lesssim" * "\x2272"+ ,"LessSlantEqual" * "\x2A7D"+ ,"LessTilde" * "\x2272"+ ,"lfisht" * "\x297C"+ ,"lfloor" * "\x230A"+ ,"Lfr" * "\xD835\xDD0F"+ ,"lfr" * "\xD835\xDD29"+ ,"lg" * "\x2276"+ ,"lgE" * "\x2A91"+ ,"lHar" * "\x2962"+ ,"lhard" * "\x21BD"+ ,"lharu" * "\x21BC"+ ,"lharul" * "\x296A"+ ,"lhblk" * "\x2584"+ ,"LJcy" * "\x0409"+ ,"ljcy" * "\x0459"+ ,"ll" * "\x226A"+ ,"Ll" * "\x22D8"+ ,"llarr" * "\x21C7"+ ,"llcorner" * "\x231E"+ ,"Lleftarrow" * "\x21DA"+ ,"llhard" * "\x296B"+ ,"lltri" * "\x25FA"+ ,"Lmidot" * "\x013F"+ ,"lmidot" * "\x0140"+ ,"lmoust" * "\x23B0"+ ,"lmoustache" * "\x23B0"+ ,"lnap" * "\x2A89"+ ,"lnapprox" * "\x2A89"+ ,"lnE" * "\x2268"+ ,"lne" * "\x2A87"+ ,"lneq" * "\x2A87"+ ,"lneqq" * "\x2268"+ ,"lnsim" * "\x22E6"+ ,"loang" * "\x27EC"+ ,"loarr" * "\x21FD"+ ,"lobrk" * "\x27E6"+ ,"LongLeftArrow" * "\x27F5"+ ,"longleftarrow" * "\x27F5"+ ,"Longleftarrow" * "\x27F8"+ ,"LongLeftRightArrow" * "\x27F7"+ ,"longleftrightarrow" * "\x27F7"+ ,"Longleftrightarrow" * "\x27FA"+ ,"longmapsto" * "\x27FC"+ ,"LongRightArrow" * "\x27F6"+ ,"longrightarrow" * "\x27F6"+ ,"Longrightarrow" * "\x27F9"+ ,"looparrowleft" * "\x21AB"+ ,"looparrowright" * "\x21AC"+ ,"lopar" * "\x2985"+ ,"Lopf" * "\xD835\xDD43"+ ,"lopf" * "\xD835\xDD5D"+ ,"loplus" * "\x2A2D"+ ,"lotimes" * "\x2A34"+ ,"lowast" * "\x2217"+ ,"lowbar" * "\x005F"+ ,"LowerLeftArrow" * "\x2199"+ ,"LowerRightArrow" * "\x2198"+ ,"loz" * "\x25CA"+ ,"lozenge" * "\x25CA"+ ,"lozf" * "\x29EB"+ ,"lpar" * "\x0028"+ ,"lparlt" * "\x2993"+ ,"lrarr" * "\x21C6"+ ,"lrcorner" * "\x231F"+ ,"lrhar" * "\x21CB"+ ,"lrhard" * "\x296D"+ ,"lrm" * "\x200E"+ ,"lrtri" * "\x22BF"+ ,"lsaquo" * "\x2039"+ ,"Lscr" * "\x2112"+ ,"lscr" * "\xD835\xDCC1"+ ,"Lsh" * "\x21B0"+ ,"lsh" * "\x21B0"+ ,"lsim" * "\x2272"+ ,"lsime" * "\x2A8D"+ ,"lsimg" * "\x2A8F"+ ,"lsqb" * "\x005B"+ ,"lsquo" * "\x2018"+ ,"lsquor" * "\x201A"+ ,"Lstrok" * "\x0141"+ ,"lstrok" * "\x0142"+ ,"LT" * "\x003C"+ ,"lt" * "\x003C"+ ,"Lt" * "\x226A"+ ,"ltcc" * "\x2AA6"+ ,"ltcir" * "\x2A79"+ ,"ltdot" * "\x22D6"+ ,"lthree" * "\x22CB"+ ,"ltimes" * "\x22C9"+ ,"ltlarr" * "\x2976"+ ,"ltquest" * "\x2A7B"+ ,"ltri" * "\x25C3"+ ,"ltrie" * "\x22B4"+ ,"ltrif" * "\x25C2"+ ,"ltrPar" * "\x2996"+ ,"lurdshar" * "\x294A"+ ,"luruhar" * "\x2966"+ ,"lvertneqq" * "\x2268\xFE00"+ ,"lvnE" * "\x2268\xFE00"+ ,"macr" * "\x00AF"+ ,"male" * "\x2642"+ ,"malt" * "\x2720"+ ,"maltese" * "\x2720"+ ,"map" * "\x21A6"+ ,"Map" * "\x2905"+ ,"mapsto" * "\x21A6"+ ,"mapstodown" * "\x21A7"+ ,"mapstoleft" * "\x21A4"+ ,"mapstoup" * "\x21A5"+ ,"marker" * "\x25AE"+ ,"mcomma" * "\x2A29"+ ,"Mcy" * "\x041C"+ ,"mcy" * "\x043C"+ ,"mdash" * "\x2014"+ ,"mDDot" * "\x223A"+ ,"measuredangle" * "\x2221"+ ,"MediumSpace" * "\x205F"+ ,"Mellintrf" * "\x2133"+ ,"Mfr" * "\xD835\xDD10"+ ,"mfr" * "\xD835\xDD2A"+ ,"mho" * "\x2127"+ ,"micro" * "\x00B5"+ ,"mid" * "\x2223"+ ,"midast" * "\x002A"+ ,"midcir" * "\x2AF0"+ ,"middot" * "\x00B7"+ ,"minus" * "\x2212"+ ,"minusb" * "\x229F"+ ,"minusd" * "\x2238"+ ,"minusdu" * "\x2A2A"+ ,"MinusPlus" * "\x2213"+ ,"mlcp" * "\x2ADB"+ ,"mldr" * "\x2026"+ ,"mnplus" * "\x2213"+ ,"models" * "\x22A7"+ ,"Mopf" * "\xD835\xDD44"+ ,"mopf" * "\xD835\xDD5E"+ ,"mp" * "\x2213"+ ,"Mscr" * "\x2133"+ ,"mscr" * "\xD835\xDCC2"+ ,"mstpos" * "\x223E"+ ,"Mu" * "\x039C"+ ,"mu" * "\x03BC"+ ,"multimap" * "\x22B8"+ ,"mumap" * "\x22B8"+ ,"nabla" * "\x2207"+ ,"Nacute" * "\x0143"+ ,"nacute" * "\x0144"+ ,"nang" * "\x2220\x20D2"+ ,"nap" * "\x2249"+ ,"napE" * "\x2A70\x0338"+ ,"napid" * "\x224B\x0338"+ ,"napos" * "\x0149"+ ,"napprox" * "\x2249"+ ,"natur" * "\x266E"+ ,"natural" * "\x266E"+ ,"naturals" * "\x2115"+ ,"nbsp" * "\x00A0"+ ,"nbump" * "\x224E\x0338"+ ,"nbumpe" * "\x224F\x0338"+ ,"ncap" * "\x2A43"+ ,"Ncaron" * "\x0147"+ ,"ncaron" * "\x0148"+ ,"Ncedil" * "\x0145"+ ,"ncedil" * "\x0146"+ ,"ncong" * "\x2247"+ ,"ncongdot" * "\x2A6D\x0338"+ ,"ncup" * "\x2A42"+ ,"Ncy" * "\x041D"+ ,"ncy" * "\x043D"+ ,"ndash" * "\x2013"+ ,"ne" * "\x2260"+ ,"nearhk" * "\x2924"+ ,"nearr" * "\x2197"+ ,"neArr" * "\x21D7"+ ,"nearrow" * "\x2197"+ ,"nedot" * "\x2250\x0338"+ ,"NegativeMediumSpace" * "\x200B"+ ,"NegativeThickSpace" * "\x200B"+ ,"NegativeThinSpace" * "\x200B"+ ,"NegativeVeryThinSpace" * "\x200B"+ ,"nequiv" * "\x2262"+ ,"nesear" * "\x2928"+ ,"nesim" * "\x2242\x0338"+ ,"NestedGreaterGreater" * "\x226B"+ ,"NestedLessLess" * "\x226A"+ ,"NewLine" * "\x000A"+ ,"nexist" * "\x2204"+ ,"nexists" * "\x2204"+ ,"Nfr" * "\xD835\xDD11"+ ,"nfr" * "\xD835\xDD2B"+ ,"ngE" * "\x2267\x0338"+ ,"nge" * "\x2271"+ ,"ngeq" * "\x2271"+ ,"ngeqq" * "\x2267\x0338"+ ,"ngeqslant" * "\x2A7E\x0338"+ ,"nges" * "\x2A7E\x0338"+ ,"nGg" * "\x22D9\x0338"+ ,"ngsim" * "\x2275"+ ,"nGt" * "\x226B\x20D2"+ ,"ngt" * "\x226F"+ ,"ngtr" * "\x226F"+ ,"nGtv" * "\x226B\x0338"+ ,"nharr" * "\x21AE"+ ,"nhArr" * "\x21CE"+ ,"nhpar" * "\x2AF2"+ ,"ni" * "\x220B"+ ,"nis" * "\x22FC"+ ,"nisd" * "\x22FA"+ ,"niv" * "\x220B"+ ,"NJcy" * "\x040A"+ ,"njcy" * "\x045A"+ ,"nlarr" * "\x219A"+ ,"nlArr" * "\x21CD"+ ,"nldr" * "\x2025"+ ,"nlE" * "\x2266\x0338"+ ,"nle" * "\x2270"+ ,"nleftarrow" * "\x219A"+ ,"nLeftarrow" * "\x21CD"+ ,"nleftrightarrow" * "\x21AE"+ ,"nLeftrightarrow" * "\x21CE"+ ,"nleq" * "\x2270"+ ,"nleqq" * "\x2266\x0338"+ ,"nleqslant" * "\x2A7D\x0338"+ ,"nles" * "\x2A7D\x0338"+ ,"nless" * "\x226E"+ ,"nLl" * "\x22D8\x0338"+ ,"nlsim" * "\x2274"+ ,"nLt" * "\x226A\x20D2"+ ,"nlt" * "\x226E"+ ,"nltri" * "\x22EA"+ ,"nltrie" * "\x22EC"+ ,"nLtv" * "\x226A\x0338"+ ,"nmid" * "\x2224"+ ,"NoBreak" * "\x2060"+ ,"NonBreakingSpace" * "\x00A0"+ ,"Nopf" * "\x2115"+ ,"nopf" * "\xD835\xDD5F"+ ,"not" * "\x00AC"+ ,"Not" * "\x2AEC"+ ,"NotCongruent" * "\x2262"+ ,"NotCupCap" * "\x226D"+ ,"NotDoubleVerticalBar" * "\x2226"+ ,"NotElement" * "\x2209"+ ,"NotEqual" * "\x2260"+ ,"NotEqualTilde" * "\x2242\x0338"+ ,"NotExists" * "\x2204"+ ,"NotGreater" * "\x226F"+ ,"NotGreaterEqual" * "\x2271"+ ,"NotGreaterFullEqual" * "\x2267\x0338"+ ,"NotGreaterGreater" * "\x226B\x0338"+ ,"NotGreaterLess" * "\x2279"+ ,"NotGreaterSlantEqual" * "\x2A7E\x0338"+ ,"NotGreaterTilde" * "\x2275"+ ,"NotHumpDownHump" * "\x224E\x0338"+ ,"NotHumpEqual" * "\x224F\x0338"+ ,"notin" * "\x2209"+ ,"notindot" * "\x22F5\x0338"+ ,"notinE" * "\x22F9\x0338"+ ,"notinva" * "\x2209"+ ,"notinvb" * "\x22F7"+ ,"notinvc" * "\x22F6"+ ,"NotLeftTriangle" * "\x22EA"+ ,"NotLeftTriangleBar" * "\x29CF\x0338"+ ,"NotLeftTriangleEqual" * "\x22EC"+ ,"NotLess" * "\x226E"+ ,"NotLessEqual" * "\x2270"+ ,"NotLessGreater" * "\x2278"+ ,"NotLessLess" * "\x226A\x0338"+ ,"NotLessSlantEqual" * "\x2A7D\x0338"+ ,"NotLessTilde" * "\x2274"+ ,"NotNestedGreaterGreater" * "\x2AA2\x0338"+ ,"NotNestedLessLess" * "\x2AA1\x0338"+ ,"notni" * "\x220C"+ ,"notniva" * "\x220C"+ ,"notnivb" * "\x22FE"+ ,"notnivc" * "\x22FD"+ ,"NotPrecedes" * "\x2280"+ ,"NotPrecedesEqual" * "\x2AAF\x0338"+ ,"NotPrecedesSlantEqual" * "\x22E0"+ ,"NotReverseElement" * "\x220C"+ ,"NotRightTriangle" * "\x22EB"+ ,"NotRightTriangleBar" * "\x29D0\x0338"+ ,"NotRightTriangleEqual" * "\x22ED"+ ,"NotSquareSubset" * "\x228F\x0338"+ ,"NotSquareSubsetEqual" * "\x22E2"+ ,"NotSquareSuperset" * "\x2290\x0338"+ ,"NotSquareSupersetEqual" * "\x22E3"+ ,"NotSubset" * "\x2282\x20D2"+ ,"NotSubsetEqual" * "\x2288"+ ,"NotSucceeds" * "\x2281"+ ,"NotSucceedsEqual" * "\x2AB0\x0338"+ ,"NotSucceedsSlantEqual" * "\x22E1"+ ,"NotSucceedsTilde" * "\x227F\x0338"+ ,"NotSuperset" * "\x2283\x20D2"+ ,"NotSupersetEqual" * "\x2289"+ ,"NotTilde" * "\x2241"+ ,"NotTildeEqual" * "\x2244"+ ,"NotTildeFullEqual" * "\x2247"+ ,"NotTildeTilde" * "\x2249"+ ,"NotVerticalBar" * "\x2224"+ ,"npar" * "\x2226"+ ,"nparallel" * "\x2226"+ ,"nparsl" * "\x2AFD\x20E5"+ ,"npart" * "\x2202\x0338"+ ,"npolint" * "\x2A14"+ ,"npr" * "\x2280"+ ,"nprcue" * "\x22E0"+ ,"npre" * "\x2AAF\x0338"+ ,"nprec" * "\x2280"+ ,"npreceq" * "\x2AAF\x0338"+ ,"nrarr" * "\x219B"+ ,"nrArr" * "\x21CF"+ ,"nrarrc" * "\x2933\x0338"+ ,"nrarrw" * "\x219D\x0338"+ ,"nrightarrow" * "\x219B"+ ,"nRightarrow" * "\x21CF"+ ,"nrtri" * "\x22EB"+ ,"nrtrie" * "\x22ED"+ ,"nsc" * "\x2281"+ ,"nsccue" * "\x22E1"+ ,"nsce" * "\x2AB0\x0338"+ ,"Nscr" * "\xD835\xDCA9"+ ,"nscr" * "\xD835\xDCC3"+ ,"nshortmid" * "\x2224"+ ,"nshortparallel" * "\x2226"+ ,"nsim" * "\x2241"+ ,"nsime" * "\x2244"+ ,"nsimeq" * "\x2244"+ ,"nsmid" * "\x2224"+ ,"nspar" * "\x2226"+ ,"nsqsube" * "\x22E2"+ ,"nsqsupe" * "\x22E3"+ ,"nsub" * "\x2284"+ ,"nsube" * "\x2288"+ ,"nsubE" * "\x2AC5\x0338"+ ,"nsubset" * "\x2282\x20D2"+ ,"nsubseteq" * "\x2288"+ ,"nsubseteqq" * "\x2AC5\x0338"+ ,"nsucc" * "\x2281"+ ,"nsucceq" * "\x2AB0\x0338"+ ,"nsup" * "\x2285"+ ,"nsupe" * "\x2289"+ ,"nsupE" * "\x2AC6\x0338"+ ,"nsupset" * "\x2283\x20D2"+ ,"nsupseteq" * "\x2289"+ ,"nsupseteqq" * "\x2AC6\x0338"+ ,"ntgl" * "\x2279"+ ,"Ntilde" * "\x00D1"+ ,"ntilde" * "\x00F1"+ ,"ntlg" * "\x2278"+ ,"ntriangleleft" * "\x22EA"+ ,"ntrianglelefteq" * "\x22EC"+ ,"ntriangleright" * "\x22EB"+ ,"ntrianglerighteq" * "\x22ED"+ ,"Nu" * "\x039D"+ ,"nu" * "\x03BD"+ ,"num" * "\x0023"+ ,"numero" * "\x2116"+ ,"numsp" * "\x2007"+ ,"nvap" * "\x224D\x20D2"+ ,"nvdash" * "\x22AC"+ ,"nvDash" * "\x22AD"+ ,"nVdash" * "\x22AE"+ ,"nVDash" * "\x22AF"+ ,"nvge" * "\x2265\x20D2"+ ,"nvgt" * "\x003E\x20D2"+ ,"nvHarr" * "\x2904"+ ,"nvinfin" * "\x29DE"+ ,"nvlArr" * "\x2902"+ ,"nvle" * "\x2264\x20D2"+ ,"nvlt" * "\x003C\x20D2"+ ,"nvltrie" * "\x22B4\x20D2"+ ,"nvrArr" * "\x2903"+ ,"nvrtrie" * "\x22B5\x20D2"+ ,"nvsim" * "\x223C\x20D2"+ ,"nwarhk" * "\x2923"+ ,"nwarr" * "\x2196"+ ,"nwArr" * "\x21D6"+ ,"nwarrow" * "\x2196"+ ,"nwnear" * "\x2927"+ ,"Oacute" * "\x00D3"+ ,"oacute" * "\x00F3"+ ,"oast" * "\x229B"+ ,"ocir" * "\x229A"+ ,"Ocirc" * "\x00D4"+ ,"ocirc" * "\x00F4"+ ,"Ocy" * "\x041E"+ ,"ocy" * "\x043E"+ ,"odash" * "\x229D"+ ,"Odblac" * "\x0150"+ ,"odblac" * "\x0151"+ ,"odiv" * "\x2A38"+ ,"odot" * "\x2299"+ ,"odsold" * "\x29BC"+ ,"OElig" * "\x0152"+ ,"oelig" * "\x0153"+ ,"ofcir" * "\x29BF"+ ,"Ofr" * "\xD835\xDD12"+ ,"ofr" * "\xD835\xDD2C"+ ,"ogon" * "\x02DB"+ ,"Ograve" * "\x00D2"+ ,"ograve" * "\x00F2"+ ,"ogt" * "\x29C1"+ ,"ohbar" * "\x29B5"+ ,"ohm" * "\x03A9"+ ,"oint" * "\x222E"+ ,"olarr" * "\x21BA"+ ,"olcir" * "\x29BE"+ ,"olcross" * "\x29BB"+ ,"oline" * "\x203E"+ ,"olt" * "\x29C0"+ ,"Omacr" * "\x014C"+ ,"omacr" * "\x014D"+ ,"Omega" * "\x03A9"+ ,"omega" * "\x03C9"+ ,"Omicron" * "\x039F"+ ,"omicron" * "\x03BF"+ ,"omid" * "\x29B6"+ ,"ominus" * "\x2296"+ ,"Oopf" * "\xD835\xDD46"+ ,"oopf" * "\xD835\xDD60"+ ,"opar" * "\x29B7"+ ,"OpenCurlyDoubleQuote" * "\x201C"+ ,"OpenCurlyQuote" * "\x2018"+ ,"operp" * "\x29B9"+ ,"oplus" * "\x2295"+ ,"or" * "\x2228"+ ,"Or" * "\x2A54"+ ,"orarr" * "\x21BB"+ ,"ord" * "\x2A5D"+ ,"order" * "\x2134"+ ,"orderof" * "\x2134"+ ,"ordf" * "\x00AA"+ ,"ordm" * "\x00BA"+ ,"origof" * "\x22B6"+ ,"oror" * "\x2A56"+ ,"orslope" * "\x2A57"+ ,"orv" * "\x2A5B"+ ,"oS" * "\x24C8"+ ,"oscr" * "\x2134"+ ,"Oscr" * "\xD835\xDCAA"+ ,"Oslash" * "\x00D8"+ ,"oslash" * "\x00F8"+ ,"osol" * "\x2298"+ ,"Otilde" * "\x00D5"+ ,"otilde" * "\x00F5"+ ,"otimes" * "\x2297"+ ,"Otimes" * "\x2A37"+ ,"otimesas" * "\x2A36"+ ,"Ouml" * "\x00D6"+ ,"ouml" * "\x00F6"+ ,"ovbar" * "\x233D"+ ,"OverBar" * "\x203E"+ ,"OverBrace" * "\x23DE"+ ,"OverBracket" * "\x23B4"+ ,"OverParenthesis" * "\x23DC"+ ,"par" * "\x2225"+ ,"para" * "\x00B6"+ ,"parallel" * "\x2225"+ ,"parsim" * "\x2AF3"+ ,"parsl" * "\x2AFD"+ ,"part" * "\x2202"+ ,"PartialD" * "\x2202"+ ,"Pcy" * "\x041F"+ ,"pcy" * "\x043F"+ ,"percnt" * "\x0025"+ ,"period" * "\x002E"+ ,"permil" * "\x2030"+ ,"perp" * "\x22A5"+ ,"pertenk" * "\x2031"+ ,"Pfr" * "\xD835\xDD13"+ ,"pfr" * "\xD835\xDD2D"+ ,"Phi" * "\x03A6"+ ,"phi" * "\x03C6"+ ,"phiv" * "\x03D5"+ ,"phmmat" * "\x2133"+ ,"phone" * "\x260E"+ ,"Pi" * "\x03A0"+ ,"pi" * "\x03C0"+ ,"pitchfork" * "\x22D4"+ ,"piv" * "\x03D6"+ ,"planck" * "\x210F"+ ,"planckh" * "\x210E"+ ,"plankv" * "\x210F"+ ,"plus" * "\x002B"+ ,"plusacir" * "\x2A23"+ ,"plusb" * "\x229E"+ ,"pluscir" * "\x2A22"+ ,"plusdo" * "\x2214"+ ,"plusdu" * "\x2A25"+ ,"pluse" * "\x2A72"+ ,"PlusMinus" * "\x00B1"+ ,"plusmn" * "\x00B1"+ ,"plussim" * "\x2A26"+ ,"plustwo" * "\x2A27"+ ,"pm" * "\x00B1"+ ,"Poincareplane" * "\x210C"+ ,"pointint" * "\x2A15"+ ,"Popf" * "\x2119"+ ,"popf" * "\xD835\xDD61"+ ,"pound" * "\x00A3"+ ,"pr" * "\x227A"+ ,"Pr" * "\x2ABB"+ ,"prap" * "\x2AB7"+ ,"prcue" * "\x227C"+ ,"pre" * "\x2AAF"+ ,"prE" * "\x2AB3"+ ,"prec" * "\x227A"+ ,"precapprox" * "\x2AB7"+ ,"preccurlyeq" * "\x227C"+ ,"Precedes" * "\x227A"+ ,"PrecedesEqual" * "\x2AAF"+ ,"PrecedesSlantEqual" * "\x227C"+ ,"PrecedesTilde" * "\x227E"+ ,"preceq" * "\x2AAF"+ ,"precnapprox" * "\x2AB9"+ ,"precneqq" * "\x2AB5"+ ,"precnsim" * "\x22E8"+ ,"precsim" * "\x227E"+ ,"prime" * "\x2032"+ ,"Prime" * "\x2033"+ ,"primes" * "\x2119"+ ,"prnap" * "\x2AB9"+ ,"prnE" * "\x2AB5"+ ,"prnsim" * "\x22E8"+ ,"prod" * "\x220F"+ ,"Product" * "\x220F"+ ,"profalar" * "\x232E"+ ,"profline" * "\x2312"+ ,"profsurf" * "\x2313"+ ,"prop" * "\x221D"+ ,"Proportion" * "\x2237"+ ,"Proportional" * "\x221D"+ ,"propto" * "\x221D"+ ,"prsim" * "\x227E"+ ,"prurel" * "\x22B0"+ ,"Pscr" * "\xD835\xDCAB"+ ,"pscr" * "\xD835\xDCC5"+ ,"Psi" * "\x03A8"+ ,"psi" * "\x03C8"+ ,"puncsp" * "\x2008"+ ,"Qfr" * "\xD835\xDD14"+ ,"qfr" * "\xD835\xDD2E"+ ,"qint" * "\x2A0C"+ ,"Qopf" * "\x211A"+ ,"qopf" * "\xD835\xDD62"+ ,"qprime" * "\x2057"+ ,"Qscr" * "\xD835\xDCAC"+ ,"qscr" * "\xD835\xDCC6"+ ,"quaternions" * "\x210D"+ ,"quatint" * "\x2A16"+ ,"quest" * "\x003F"+ ,"questeq" * "\x225F"+ ,"QUOT" * "\x0022"+ ,"quot" * "\x0022"+ ,"rAarr" * "\x21DB"+ ,"race" * "\x223D\x0331"+ ,"Racute" * "\x0154"+ ,"racute" * "\x0155"+ ,"radic" * "\x221A"+ ,"raemptyv" * "\x29B3"+ ,"rang" * "\x27E9"+ ,"Rang" * "\x27EB"+ ,"rangd" * "\x2992"+ ,"range" * "\x29A5"+ ,"rangle" * "\x27E9"+ ,"raquo" * "\x00BB"+ ,"rarr" * "\x2192"+ ,"Rarr" * "\x21A0"+ ,"rArr" * "\x21D2"+ ,"rarrap" * "\x2975"+ ,"rarrb" * "\x21E5"+ ,"rarrbfs" * "\x2920"+ ,"rarrc" * "\x2933"+ ,"rarrfs" * "\x291E"+ ,"rarrhk" * "\x21AA"+ ,"rarrlp" * "\x21AC"+ ,"rarrpl" * "\x2945"+ ,"rarrsim" * "\x2974"+ ,"rarrtl" * "\x21A3"+ ,"Rarrtl" * "\x2916"+ ,"rarrw" * "\x219D"+ ,"ratail" * "\x291A"+ ,"rAtail" * "\x291C"+ ,"ratio" * "\x2236"+ ,"rationals" * "\x211A"+ ,"rbarr" * "\x290D"+ ,"rBarr" * "\x290F"+ ,"RBarr" * "\x2910"+ ,"rbbrk" * "\x2773"+ ,"rbrace" * "\x007D"+ ,"rbrack" * "\x005D"+ ,"rbrke" * "\x298C"+ ,"rbrksld" * "\x298E"+ ,"rbrkslu" * "\x2990"+ ,"Rcaron" * "\x0158"+ ,"rcaron" * "\x0159"+ ,"Rcedil" * "\x0156"+ ,"rcedil" * "\x0157"+ ,"rceil" * "\x2309"+ ,"rcub" * "\x007D"+ ,"Rcy" * "\x0420"+ ,"rcy" * "\x0440"+ ,"rdca" * "\x2937"+ ,"rdldhar" * "\x2969"+ ,"rdquo" * "\x201D"+ ,"rdquor" * "\x201D"+ ,"rdsh" * "\x21B3"+ ,"Re" * "\x211C"+ ,"real" * "\x211C"+ ,"realine" * "\x211B"+ ,"realpart" * "\x211C"+ ,"reals" * "\x211D"+ ,"rect" * "\x25AD"+ ,"REG" * "\x00AE"+ ,"reg" * "\x00AE"+ ,"ReverseElement" * "\x220B"+ ,"ReverseEquilibrium" * "\x21CB"+ ,"ReverseUpEquilibrium" * "\x296F"+ ,"rfisht" * "\x297D"+ ,"rfloor" * "\x230B"+ ,"Rfr" * "\x211C"+ ,"rfr" * "\xD835\xDD2F"+ ,"rHar" * "\x2964"+ ,"rhard" * "\x21C1"+ ,"rharu" * "\x21C0"+ ,"rharul" * "\x296C"+ ,"Rho" * "\x03A1"+ ,"rho" * "\x03C1"+ ,"rhov" * "\x03F1"+ ,"RightAngleBracket" * "\x27E9"+ ,"RightArrow" * "\x2192"+ ,"rightarrow" * "\x2192"+ ,"Rightarrow" * "\x21D2"+ ,"RightArrowBar" * "\x21E5"+ ,"RightArrowLeftArrow" * "\x21C4"+ ,"rightarrowtail" * "\x21A3"+ ,"RightCeiling" * "\x2309"+ ,"RightDoubleBracket" * "\x27E7"+ ,"RightDownTeeVector" * "\x295D"+ ,"RightDownVector" * "\x21C2"+ ,"RightDownVectorBar" * "\x2955"+ ,"RightFloor" * "\x230B"+ ,"rightharpoondown" * "\x21C1"+ ,"rightharpoonup" * "\x21C0"+ ,"rightleftarrows" * "\x21C4"+ ,"rightleftharpoons" * "\x21CC"+ ,"rightrightarrows" * "\x21C9"+ ,"rightsquigarrow" * "\x219D"+ ,"RightTee" * "\x22A2"+ ,"RightTeeArrow" * "\x21A6"+ ,"RightTeeVector" * "\x295B"+ ,"rightthreetimes" * "\x22CC"+ ,"RightTriangle" * "\x22B3"+ ,"RightTriangleBar" * "\x29D0"+ ,"RightTriangleEqual" * "\x22B5"+ ,"RightUpDownVector" * "\x294F"+ ,"RightUpTeeVector" * "\x295C"+ ,"RightUpVector" * "\x21BE"+ ,"RightUpVectorBar" * "\x2954"+ ,"RightVector" * "\x21C0"+ ,"RightVectorBar" * "\x2953"+ ,"ring" * "\x02DA"+ ,"risingdotseq" * "\x2253"+ ,"rlarr" * "\x21C4"+ ,"rlhar" * "\x21CC"+ ,"rlm" * "\x200F"+ ,"rmoust" * "\x23B1"+ ,"rmoustache" * "\x23B1"+ ,"rnmid" * "\x2AEE"+ ,"roang" * "\x27ED"+ ,"roarr" * "\x21FE"+ ,"robrk" * "\x27E7"+ ,"ropar" * "\x2986"+ ,"Ropf" * "\x211D"+ ,"ropf" * "\xD835\xDD63"+ ,"roplus" * "\x2A2E"+ ,"rotimes" * "\x2A35"+ ,"RoundImplies" * "\x2970"+ ,"rpar" * "\x0029"+ ,"rpargt" * "\x2994"+ ,"rppolint" * "\x2A12"+ ,"rrarr" * "\x21C9"+ ,"Rrightarrow" * "\x21DB"+ ,"rsaquo" * "\x203A"+ ,"Rscr" * "\x211B"+ ,"rscr" * "\xD835\xDCC7"+ ,"Rsh" * "\x21B1"+ ,"rsh" * "\x21B1"+ ,"rsqb" * "\x005D"+ ,"rsquo" * "\x2019"+ ,"rsquor" * "\x2019"+ ,"rthree" * "\x22CC"+ ,"rtimes" * "\x22CA"+ ,"rtri" * "\x25B9"+ ,"rtrie" * "\x22B5"+ ,"rtrif" * "\x25B8"+ ,"rtriltri" * "\x29CE"+ ,"RuleDelayed" * "\x29F4"+ ,"ruluhar" * "\x2968"+ ,"rx" * "\x211E"+ ,"Sacute" * "\x015A"+ ,"sacute" * "\x015B"+ ,"sbquo" * "\x201A"+ ,"sc" * "\x227B"+ ,"Sc" * "\x2ABC"+ ,"scap" * "\x2AB8"+ ,"Scaron" * "\x0160"+ ,"scaron" * "\x0161"+ ,"sccue" * "\x227D"+ ,"sce" * "\x2AB0"+ ,"scE" * "\x2AB4"+ ,"Scedil" * "\x015E"+ ,"scedil" * "\x015F"+ ,"Scirc" * "\x015C"+ ,"scirc" * "\x015D"+ ,"scnap" * "\x2ABA"+ ,"scnE" * "\x2AB6"+ ,"scnsim" * "\x22E9"+ ,"scpolint" * "\x2A13"+ ,"scsim" * "\x227F"+ ,"Scy" * "\x0421"+ ,"scy" * "\x0441"+ ,"sdot" * "\x22C5"+ ,"sdotb" * "\x22A1"+ ,"sdote" * "\x2A66"+ ,"searhk" * "\x2925"+ ,"searr" * "\x2198"+ ,"seArr" * "\x21D8"+ ,"searrow" * "\x2198"+ ,"sect" * "\x00A7"+ ,"semi" * "\x003B"+ ,"seswar" * "\x2929"+ ,"setminus" * "\x2216"+ ,"setmn" * "\x2216"+ ,"sext" * "\x2736"+ ,"Sfr" * "\xD835\xDD16"+ ,"sfr" * "\xD835\xDD30"+ ,"sfrown" * "\x2322"+ ,"sharp" * "\x266F"+ ,"SHCHcy" * "\x0429"+ ,"shchcy" * "\x0449"+ ,"SHcy" * "\x0428"+ ,"shcy" * "\x0448"+ ,"ShortDownArrow" * "\x2193"+ ,"ShortLeftArrow" * "\x2190"+ ,"shortmid" * "\x2223"+ ,"shortparallel" * "\x2225"+ ,"ShortRightArrow" * "\x2192"+ ,"ShortUpArrow" * "\x2191"+ ,"shy" * "\x00AD"+ ,"Sigma" * "\x03A3"+ ,"sigma" * "\x03C3"+ ,"sigmaf" * "\x03C2"+ ,"sigmav" * "\x03C2"+ ,"sim" * "\x223C"+ ,"simdot" * "\x2A6A"+ ,"sime" * "\x2243"+ ,"simeq" * "\x2243"+ ,"simg" * "\x2A9E"+ ,"simgE" * "\x2AA0"+ ,"siml" * "\x2A9D"+ ,"simlE" * "\x2A9F"+ ,"simne" * "\x2246"+ ,"simplus" * "\x2A24"+ ,"simrarr" * "\x2972"+ ,"slarr" * "\x2190"+ ,"SmallCircle" * "\x2218"+ ,"smallsetminus" * "\x2216"+ ,"smashp" * "\x2A33"+ ,"smeparsl" * "\x29E4"+ ,"smid" * "\x2223"+ ,"smile" * "\x2323"+ ,"smt" * "\x2AAA"+ ,"smte" * "\x2AAC"+ ,"smtes" * "\x2AAC\xFE00"+ ,"SOFTcy" * "\x042C"+ ,"softcy" * "\x044C"+ ,"sol" * "\x002F"+ ,"solb" * "\x29C4"+ ,"solbar" * "\x233F"+ ,"Sopf" * "\xD835\xDD4A"+ ,"sopf" * "\xD835\xDD64"+ ,"spades" * "\x2660"+ ,"spadesuit" * "\x2660"+ ,"spar" * "\x2225"+ ,"sqcap" * "\x2293"+ ,"sqcaps" * "\x2293\xFE00"+ ,"sqcup" * "\x2294"+ ,"sqcups" * "\x2294\xFE00"+ ,"Sqrt" * "\x221A"+ ,"sqsub" * "\x228F"+ ,"sqsube" * "\x2291"+ ,"sqsubset" * "\x228F"+ ,"sqsubseteq" * "\x2291"+ ,"sqsup" * "\x2290"+ ,"sqsupe" * "\x2292"+ ,"sqsupset" * "\x2290"+ ,"sqsupseteq" * "\x2292"+ ,"squ" * "\x25A1"+ ,"Square" * "\x25A1"+ ,"square" * "\x25A1"+ ,"SquareIntersection" * "\x2293"+ ,"SquareSubset" * "\x228F"+ ,"SquareSubsetEqual" * "\x2291"+ ,"SquareSuperset" * "\x2290"+ ,"SquareSupersetEqual" * "\x2292"+ ,"SquareUnion" * "\x2294"+ ,"squarf" * "\x25AA"+ ,"squf" * "\x25AA"+ ,"srarr" * "\x2192"+ ,"Sscr" * "\xD835\xDCAE"+ ,"sscr" * "\xD835\xDCC8"+ ,"ssetmn" * "\x2216"+ ,"ssmile" * "\x2323"+ ,"sstarf" * "\x22C6"+ ,"Star" * "\x22C6"+ ,"star" * "\x2606"+ ,"starf" * "\x2605"+ ,"straightepsilon" * "\x03F5"+ ,"straightphi" * "\x03D5"+ ,"strns" * "\x00AF"+ ,"sub" * "\x2282"+ ,"Sub" * "\x22D0"+ ,"subdot" * "\x2ABD"+ ,"sube" * "\x2286"+ ,"subE" * "\x2AC5"+ ,"subedot" * "\x2AC3"+ ,"submult" * "\x2AC1"+ ,"subne" * "\x228A"+ ,"subnE" * "\x2ACB"+ ,"subplus" * "\x2ABF"+ ,"subrarr" * "\x2979"+ ,"subset" * "\x2282"+ ,"Subset" * "\x22D0"+ ,"subseteq" * "\x2286"+ ,"subseteqq" * "\x2AC5"+ ,"SubsetEqual" * "\x2286"+ ,"subsetneq" * "\x228A"+ ,"subsetneqq" * "\x2ACB"+ ,"subsim" * "\x2AC7"+ ,"subsub" * "\x2AD5"+ ,"subsup" * "\x2AD3"+ ,"succ" * "\x227B"+ ,"succapprox" * "\x2AB8"+ ,"succcurlyeq" * "\x227D"+ ,"Succeeds" * "\x227B"+ ,"SucceedsEqual" * "\x2AB0"+ ,"SucceedsSlantEqual" * "\x227D"+ ,"SucceedsTilde" * "\x227F"+ ,"succeq" * "\x2AB0"+ ,"succnapprox" * "\x2ABA"+ ,"succneqq" * "\x2AB6"+ ,"succnsim" * "\x22E9"+ ,"succsim" * "\x227F"+ ,"SuchThat" * "\x220B"+ ,"Sum" * "\x2211"+ ,"sum" * "\x2211"+ ,"sung" * "\x266A"+ ,"sup" * "\x2283"+ ,"Sup" * "\x22D1"+ ,"sup1" * "\x00B9"+ ,"sup2" * "\x00B2"+ ,"sup3" * "\x00B3"+ ,"supdot" * "\x2ABE"+ ,"supdsub" * "\x2AD8"+ ,"supe" * "\x2287"+ ,"supE" * "\x2AC6"+ ,"supedot" * "\x2AC4"+ ,"Superset" * "\x2283"+ ,"SupersetEqual" * "\x2287"+ ,"suphsol" * "\x27C9"+ ,"suphsub" * "\x2AD7"+ ,"suplarr" * "\x297B"+ ,"supmult" * "\x2AC2"+ ,"supne" * "\x228B"+ ,"supnE" * "\x2ACC"+ ,"supplus" * "\x2AC0"+ ,"supset" * "\x2283"+ ,"Supset" * "\x22D1"+ ,"supseteq" * "\x2287"+ ,"supseteqq" * "\x2AC6"+ ,"supsetneq" * "\x228B"+ ,"supsetneqq" * "\x2ACC"+ ,"supsim" * "\x2AC8"+ ,"supsub" * "\x2AD4"+ ,"supsup" * "\x2AD6"+ ,"swarhk" * "\x2926"+ ,"swarr" * "\x2199"+ ,"swArr" * "\x21D9"+ ,"swarrow" * "\x2199"+ ,"swnwar" * "\x292A"+ ,"szlig" * "\x00DF"+ ,"Tab" * "\x0009"+ ,"target" * "\x2316"+ ,"Tau" * "\x03A4"+ ,"tau" * "\x03C4"+ ,"tbrk" * "\x23B4"+ ,"Tcaron" * "\x0164"+ ,"tcaron" * "\x0165"+ ,"Tcedil" * "\x0162"+ ,"tcedil" * "\x0163"+ ,"Tcy" * "\x0422"+ ,"tcy" * "\x0442"+ ,"tdot" * "\x20DB"+ ,"telrec" * "\x2315"+ ,"Tfr" * "\xD835\xDD17"+ ,"tfr" * "\xD835\xDD31"+ ,"there4" * "\x2234"+ ,"Therefore" * "\x2234"+ ,"therefore" * "\x2234"+ ,"Theta" * "\x0398"+ ,"theta" * "\x03B8"+ ,"thetasym" * "\x03D1"+ ,"thetav" * "\x03D1"+ ,"thickapprox" * "\x2248"+ ,"thicksim" * "\x223C"+ ,"ThickSpace" * "\x205F\x200A"+ ,"thinsp" * "\x2009"+ ,"ThinSpace" * "\x2009"+ ,"thkap" * "\x2248"+ ,"thksim" * "\x223C"+ ,"THORN" * "\x00DE"+ ,"thorn" * "\x00FE"+ ,"tilde" * "\x02DC"+ ,"Tilde" * "\x223C"+ ,"TildeEqual" * "\x2243"+ ,"TildeFullEqual" * "\x2245"+ ,"TildeTilde" * "\x2248"+ ,"times" * "\x00D7"+ ,"timesb" * "\x22A0"+ ,"timesbar" * "\x2A31"+ ,"timesd" * "\x2A30"+ ,"tint" * "\x222D"+ ,"toea" * "\x2928"+ ,"top" * "\x22A4"+ ,"topbot" * "\x2336"+ ,"topcir" * "\x2AF1"+ ,"Topf" * "\xD835\xDD4B"+ ,"topf" * "\xD835\xDD65"+ ,"topfork" * "\x2ADA"+ ,"tosa" * "\x2929"+ ,"tprime" * "\x2034"+ ,"TRADE" * "\x2122"+ ,"trade" * "\x2122"+ ,"triangle" * "\x25B5"+ ,"triangledown" * "\x25BF"+ ,"triangleleft" * "\x25C3"+ ,"trianglelefteq" * "\x22B4"+ ,"triangleq" * "\x225C"+ ,"triangleright" * "\x25B9"+ ,"trianglerighteq" * "\x22B5"+ ,"tridot" * "\x25EC"+ ,"trie" * "\x225C"+ ,"triminus" * "\x2A3A"+ ,"TripleDot" * "\x20DB"+ ,"triplus" * "\x2A39"+ ,"trisb" * "\x29CD"+ ,"tritime" * "\x2A3B"+ ,"trpezium" * "\x23E2"+ ,"Tscr" * "\xD835\xDCAF"+ ,"tscr" * "\xD835\xDCC9"+ ,"TScy" * "\x0426"+ ,"tscy" * "\x0446"+ ,"TSHcy" * "\x040B"+ ,"tshcy" * "\x045B"+ ,"Tstrok" * "\x0166"+ ,"tstrok" * "\x0167"+ ,"twixt" * "\x226C"+ ,"twoheadleftarrow" * "\x219E"+ ,"twoheadrightarrow" * "\x21A0"+ ,"Uacute" * "\x00DA"+ ,"uacute" * "\x00FA"+ ,"uarr" * "\x2191"+ ,"Uarr" * "\x219F"+ ,"uArr" * "\x21D1"+ ,"Uarrocir" * "\x2949"+ ,"Ubrcy" * "\x040E"+ ,"ubrcy" * "\x045E"+ ,"Ubreve" * "\x016C"+ ,"ubreve" * "\x016D"+ ,"Ucirc" * "\x00DB"+ ,"ucirc" * "\x00FB"+ ,"Ucy" * "\x0423"+ ,"ucy" * "\x0443"+ ,"udarr" * "\x21C5"+ ,"Udblac" * "\x0170"+ ,"udblac" * "\x0171"+ ,"udhar" * "\x296E"+ ,"ufisht" * "\x297E"+ ,"Ufr" * "\xD835\xDD18"+ ,"ufr" * "\xD835\xDD32"+ ,"Ugrave" * "\x00D9"+ ,"ugrave" * "\x00F9"+ ,"uHar" * "\x2963"+ ,"uharl" * "\x21BF"+ ,"uharr" * "\x21BE"+ ,"uhblk" * "\x2580"+ ,"ulcorn" * "\x231C"+ ,"ulcorner" * "\x231C"+ ,"ulcrop" * "\x230F"+ ,"ultri" * "\x25F8"+ ,"Umacr" * "\x016A"+ ,"umacr" * "\x016B"+ ,"uml" * "\x00A8"+ ,"UnderBar" * "\x005F"+ ,"UnderBrace" * "\x23DF"+ ,"UnderBracket" * "\x23B5"+ ,"UnderParenthesis" * "\x23DD"+ ,"Union" * "\x22C3"+ ,"UnionPlus" * "\x228E"+ ,"Uogon" * "\x0172"+ ,"uogon" * "\x0173"+ ,"Uopf" * "\xD835\xDD4C"+ ,"uopf" * "\xD835\xDD66"+ ,"UpArrow" * "\x2191"+ ,"uparrow" * "\x2191"+ ,"Uparrow" * "\x21D1"+ ,"UpArrowBar" * "\x2912"+ ,"UpArrowDownArrow" * "\x21C5"+ ,"UpDownArrow" * "\x2195"+ ,"updownarrow" * "\x2195"+ ,"Updownarrow" * "\x21D5"+ ,"UpEquilibrium" * "\x296E"+ ,"upharpoonleft" * "\x21BF"+ ,"upharpoonright" * "\x21BE"+ ,"uplus" * "\x228E"+ ,"UpperLeftArrow" * "\x2196"+ ,"UpperRightArrow" * "\x2197"+ ,"upsi" * "\x03C5"+ ,"Upsi" * "\x03D2"+ ,"upsih" * "\x03D2"+ ,"Upsilon" * "\x03A5"+ ,"upsilon" * "\x03C5"+ ,"UpTee" * "\x22A5"+ ,"UpTeeArrow" * "\x21A5"+ ,"upuparrows" * "\x21C8"+ ,"urcorn" * "\x231D"+ ,"urcorner" * "\x231D"+ ,"urcrop" * "\x230E"+ ,"Uring" * "\x016E"+ ,"uring" * "\x016F"+ ,"urtri" * "\x25F9"+ ,"Uscr" * "\xD835\xDCB0"+ ,"uscr" * "\xD835\xDCCA"+ ,"utdot" * "\x22F0"+ ,"Utilde" * "\x0168"+ ,"utilde" * "\x0169"+ ,"utri" * "\x25B5"+ ,"utrif" * "\x25B4"+ ,"uuarr" * "\x21C8"+ ,"Uuml" * "\x00DC"+ ,"uuml" * "\x00FC"+ ,"uwangle" * "\x29A7"+ ,"vangrt" * "\x299C"+ ,"varepsilon" * "\x03F5"+ ,"varkappa" * "\x03F0"+ ,"varnothing" * "\x2205"+ ,"varphi" * "\x03D5"+ ,"varpi" * "\x03D6"+ ,"varpropto" * "\x221D"+ ,"varr" * "\x2195"+ ,"vArr" * "\x21D5"+ ,"varrho" * "\x03F1"+ ,"varsigma" * "\x03C2"+ ,"varsubsetneq" * "\x228A\xFE00"+ ,"varsubsetneqq" * "\x2ACB\xFE00"+ ,"varsupsetneq" * "\x228B\xFE00"+ ,"varsupsetneqq" * "\x2ACC\xFE00"+ ,"vartheta" * "\x03D1"+ ,"vartriangleleft" * "\x22B2"+ ,"vartriangleright" * "\x22B3"+ ,"vBar" * "\x2AE8"+ ,"Vbar" * "\x2AEB"+ ,"vBarv" * "\x2AE9"+ ,"Vcy" * "\x0412"+ ,"vcy" * "\x0432"+ ,"vdash" * "\x22A2"+ ,"vDash" * "\x22A8"+ ,"Vdash" * "\x22A9"+ ,"VDash" * "\x22AB"+ ,"Vdashl" * "\x2AE6"+ ,"vee" * "\x2228"+ ,"Vee" * "\x22C1"+ ,"veebar" * "\x22BB"+ ,"veeeq" * "\x225A"+ ,"vellip" * "\x22EE"+ ,"verbar" * "\x007C"+ ,"Verbar" * "\x2016"+ ,"vert" * "\x007C"+ ,"Vert" * "\x2016"+ ,"VerticalBar" * "\x2223"+ ,"VerticalLine" * "\x007C"+ ,"VerticalSeparator" * "\x2758"+ ,"VerticalTilde" * "\x2240"+ ,"VeryThinSpace" * "\x200A"+ ,"Vfr" * "\xD835\xDD19"+ ,"vfr" * "\xD835\xDD33"+ ,"vltri" * "\x22B2"+ ,"vnsub" * "\x2282\x20D2"+ ,"vnsup" * "\x2283\x20D2"+ ,"Vopf" * "\xD835\xDD4D"+ ,"vopf" * "\xD835\xDD67"+ ,"vprop" * "\x221D"+ ,"vrtri" * "\x22B3"+ ,"Vscr" * "\xD835\xDCB1"+ ,"vscr" * "\xD835\xDCCB"+ ,"vsubne" * "\x228A\xFE00"+ ,"vsubnE" * "\x2ACB\xFE00"+ ,"vsupne" * "\x228B\xFE00"+ ,"vsupnE" * "\x2ACC\xFE00"+ ,"Vvdash" * "\x22AA"+ ,"vzigzag" * "\x299A"+ ,"Wcirc" * "\x0174"+ ,"wcirc" * "\x0175"+ ,"wedbar" * "\x2A5F"+ ,"wedge" * "\x2227"+ ,"Wedge" * "\x22C0"+ ,"wedgeq" * "\x2259"+ ,"weierp" * "\x2118"+ ,"Wfr" * "\xD835\xDD1A"+ ,"wfr" * "\xD835\xDD34"+ ,"Wopf" * "\xD835\xDD4E"+ ,"wopf" * "\xD835\xDD68"+ ,"wp" * "\x2118"+ ,"wr" * "\x2240"+ ,"wreath" * "\x2240"+ ,"Wscr" * "\xD835\xDCB2"+ ,"wscr" * "\xD835\xDCCC"+ ,"xcap" * "\x22C2"+ ,"xcirc" * "\x25EF"+ ,"xcup" * "\x22C3"+ ,"xdtri" * "\x25BD"+ ,"Xfr" * "\xD835\xDD1B"+ ,"xfr" * "\xD835\xDD35"+ ,"xharr" * "\x27F7"+ ,"xhArr" * "\x27FA"+ ,"Xi" * "\x039E"+ ,"xi" * "\x03BE"+ ,"xlarr" * "\x27F5"+ ,"xlArr" * "\x27F8"+ ,"xmap" * "\x27FC"+ ,"xnis" * "\x22FB"+ ,"xodot" * "\x2A00"+ ,"Xopf" * "\xD835\xDD4F"+ ,"xopf" * "\xD835\xDD69"+ ,"xoplus" * "\x2A01"+ ,"xotime" * "\x2A02"+ ,"xrarr" * "\x27F6"+ ,"xrArr" * "\x27F9"+ ,"Xscr" * "\xD835\xDCB3"+ ,"xscr" * "\xD835\xDCCD"+ ,"xsqcup" * "\x2A06"+ ,"xuplus" * "\x2A04"+ ,"xutri" * "\x25B3"+ ,"xvee" * "\x22C1"+ ,"xwedge" * "\x22C0"+ ,"Yacute" * "\x00DD"+ ,"yacute" * "\x00FD"+ ,"YAcy" * "\x042F"+ ,"yacy" * "\x044F"+ ,"Ycirc" * "\x0176"+ ,"ycirc" * "\x0177"+ ,"Ycy" * "\x042B"+ ,"ycy" * "\x044B"+ ,"yen" * "\x00A5"+ ,"Yfr" * "\xD835\xDD1C"+ ,"yfr" * "\xD835\xDD36"+ ,"YIcy" * "\x0407"+ ,"yicy" * "\x0457"+ ,"Yopf" * "\xD835\xDD50"+ ,"yopf" * "\xD835\xDD6A"+ ,"Yscr" * "\xD835\xDCB4"+ ,"yscr" * "\xD835\xDCCE"+ ,"YUcy" * "\x042E"+ ,"yucy" * "\x044E"+ ,"yuml" * "\x00FF"+ ,"Yuml" * "\x0178"+ ,"Zacute" * "\x0179"+ ,"zacute" * "\x017A"+ ,"Zcaron" * "\x017D"+ ,"zcaron" * "\x017E"+ ,"Zcy" * "\x0417"+ ,"zcy" * "\x0437"+ ,"Zdot" * "\x017B"+ ,"zdot" * "\x017C"+ ,"zeetrf" * "\x2128"+ ,"ZeroWidthSpace" * "\x200B"+ ,"Zeta" * "\x0396"+ ,"zeta" * "\x03B6"+ ,"Zfr" * "\x2128"+ ,"zfr" * "\xD835\xDD37"+ ,"ZHcy" * "\x0416"+ ,"zhcy" * "\x0436"+ ,"zigrarr" * "\x21DD"+ ,"Zopf" * "\x2124"+ ,"zopf" * "\xD835\xDD6B"+ ,"Zscr" * "\xD835\xDCB5"+ ,"zscr" * "\xD835\xDCCF"+ ,"zwj" * "\x200D"+ ,"zwnj" * "\x200C" ]
Text/HTML/TagSoup/Implementation.hs view
@@ -81,7 +81,7 @@ where -- main choice loop go :: ((Position,[Tag str]),[Out]) -> [Tag str]- go ((p,ws),xs) | p `seq` False = undefined -- otherwise p is a space leak when optTagPosition == False+ go ((p,ws),xs) | p `seq` False = [] -- otherwise p is a space leak when optTagPosition == False go ((p,ws),xs) | not $ null ws = (if optTagWarning then (reverse ws++) else id) $ go ((p,[]),xs) go ((p,ws),Pos p2:xs) = go ((p2,ws),xs) @@ -119,7 +119,6 @@ -- loop round collecting characters, if the b is set including entity charss :: Bool -> ((Position,[Tag str]),[Out]) -> ( ((Position,[Tag str]),[Out]) , String)- charss _ ((p,_),_) | p `seq` False = undefined charss t x | Just a <- fromChr x = (y, a:b) where (y,b) = charss t (next x) charss t x | t, isEntityName x = second (toString n ++) $ charss t $ addWarns m z
Text/HTML/TagSoup/Options.hs view
@@ -60,7 +60,7 @@ -- | The default parse options value, described in 'ParseOptions'. Equivalent to -- @'parseOptionsEntities' 'lookupEntity'@. parseOptions :: StringLike str => ParseOptions str-parseOptions = parseOptionsEntities $ fmap fromChar . lookupEntity . toString+parseOptions = parseOptionsEntities $ fmap fromString . lookupEntity . toString -- | A 'ParseOptions' structure optimised for speed, following the fast options.
Text/HTML/TagSoup/Render.hs view
@@ -9,8 +9,6 @@ RenderOptions(..), renderOptions ) where -import Data.Char-import qualified Data.IntMap as IntMap import Text.HTML.TagSoup.Entity import Text.HTML.TagSoup.Type import Text.StringLike@@ -27,11 +25,9 @@ } --- | Replace the four characters @&\"\<\>@ with their HTML entities (the list from 'xmlEntities').+-- | Replace the four characters @&\"\<\>@ with their HTML entities ('escapeXML' lifted to 'StringLike'). escapeHTML :: StringLike str => str -> str-escapeHTML = fromString . concatMap esc1 . toString- where esc = IntMap.fromList [(b, "&"++a++";") | (a,b) <- xmlEntities]- esc1 x = IntMap.findWithDefault [x] (ord x) esc+escapeHTML = fromString . escapeXML . toString -- | The default render options value, described in 'RenderOptions'.
tagsoup.cabal view
@@ -1,7 +1,7 @@ cabal-version: >= 1.6 name: tagsoup-version: 0.12.8-copyright: Neil Mitchell 2006-2012+version: 0.13+copyright: Neil Mitchell 2006-2013 author: Neil Mitchell <ndmitchell@gmail.com> maintainer: Neil Mitchell <ndmitchell@gmail.com> homepage: http://community.haskell.org/~ndm/tagsoup/