diff options
40 files changed, 1844 insertions, 1695 deletions
diff --git a/changelog.md b/changelog.md index 45bdb495d..8d4dc81c0 100644 --- a/changelog.md +++ b/changelog.md @@ -6,7 +6,7 @@ - ``macros.callsite`` is now deprecated. Since the introduction of ``varargs`` parameters this became unnecessary. - Anonymous tuples with a single element can now be written as ``(1,)`` with a - trailing comma. The underlying AST is ``nnkTupleConst(newLit 1)`` for this + trailing comma. The underlying AST is ``nnkTupleConstr(newLit 1)`` for this example. ``nnkTupleConstr`` is a new node kind your macros need to be able to deal with! - Indexing into a ``cstring`` for the JS target is now mapped diff --git a/compiler/ast.nim b/compiler/ast.nim index 832463bd5..6591105d4 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -506,6 +506,7 @@ type tfGenericTypeParam tfImplicitTypeParam tfInferrableStatic + tfConceptMatchedTypeSym tfExplicit # for typedescs, marks types explicitly prefixed with the # `type` operator (e.g. type int) tfWildcard # consider a proc like foo[T, I](x: Type[T, I]) diff --git a/compiler/docgen.nim b/compiler/docgen.nim index b35452365..3842f0ad4 100644 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -787,14 +787,13 @@ proc getOutFile2(conf: ConfigRef; filename, ext, dir: string): string = proc writeOutput*(d: PDoc, filename, outExt: string, useWarning = false) = var content = genOutFile(d) - var success = true if optStdout in d.conf.globalOptions: writeRope(stdout, content) else: let outfile = getOutFile2(d.conf, filename, outExt, "htmldocs") - success = writeRope(content, outfile) - if not success: - rawMessage(d.conf, if useWarning: warnCannotOpenFile else: errCannotOpenFile, filename) + createDir(outfile.parentDir) + if not writeRope(content, outfile): + rawMessage(d.conf, if useWarning: warnCannotOpenFile else: errCannotOpenFile, outfile) proc writeOutputJson*(d: PDoc, filename, outExt: string, useWarning = false) = diff --git a/compiler/importer.nim b/compiler/importer.nim index c013b93ab..acc3d26d2 100644 --- a/compiler/importer.nim +++ b/compiler/importer.nim @@ -174,20 +174,32 @@ proc impMod(c: PContext; it: PNode; importStmtResult: PNode) = #importForwarded(c, m.ast, emptySet) proc evalImport(c: PContext, n: PNode): PNode = - #result = n result = newNodeI(nkImportStmt, n.info) for i in countup(0, sonsLen(n) - 1): let it = n.sons[i] if it.kind == nkInfix and it.len == 3 and it[2].kind == nkBracket: let sep = it[0] let dir = it[1] - let a = newNodeI(nkInfix, it.info) - a.add sep - a.add dir - a.add sep # dummy entry, replaced in the loop + var imp = newNodeI(nkInfix, it.info) + imp.add sep + imp.add dir + imp.add sep # dummy entry, replaced in the loop for x in it[2]: - a.sons[2] = x - impMod(c, a, result) + if x.kind == nkInfix and x.sons[0].ident.s == "as": + imp.sons[2] = x.sons[1] + let impAs = newNodeI(nkImportAs, it.info) + impAs.add imp + impAs.add x.sons[2] + imp = impAs + impMod(c, imp, result) + else: + imp.sons[2] = x + impMod(c, imp, result) + elif it.kind == nkInfix and it.sons[0].ident.s == "as": + let imp = newNodeI(nkImportAs, it.info) + imp.add it.sons[1] + imp.add it.sons[2] + impMod(c, imp, result) else: impMod(c, it, result) diff --git a/compiler/lexer.nim b/compiler/lexer.nim index 9727d16a7..6ad1d9fc6 100644 --- a/compiler/lexer.nim +++ b/compiler/lexer.nim @@ -1209,7 +1209,7 @@ proc rawGetTok*(L: var TLexer, tok: var TToken) = tok.tokType = tkInvalid lexMessage(L, errGenerated, "invalid token: " & c & " (\\" & $(ord(c)) & ')') of '\"': - # check for extended raw string literal: + # check for generalized raw string literal: var rawMode = L.bufpos > 0 and L.buf[L.bufpos-1] in SymChars getString(L, tok, rawMode) if rawMode: diff --git a/compiler/lookups.nim b/compiler/lookups.nim index 1e9d963fa..7f0882754 100644 --- a/compiler/lookups.nim +++ b/compiler/lookups.nim @@ -161,7 +161,7 @@ proc ensureNoMissingOrUnusedSymbols(c: PContext; scope: PScope) = var s = initTabIter(it, scope.symbols) var missingImpls = 0 while s != nil: - if sfForward in s.flags and s.kind != skType: + if sfForward in s.flags and s.kind notin {skType, skModule}: # too many 'implementation of X' errors are annoying # and slow 'suggest' down: if missingImpls == 0: @@ -259,7 +259,7 @@ proc errorUseQualifier*(c: PContext; info: TLineInfo; s: PSym) = proc errorUndeclaredIdentifier*(c: PContext; info: TLineInfo; name: string) = var err = "undeclared identifier: '" & name & "'" if c.recursiveDep.len > 0: - err.add "\nThis might be caused by a recursive module dependency: " + err.add "\nThis might be caused by a recursive module dependency:\n" err.add c.recursiveDep # prevent excessive errors for 'nim check' c.recursiveDep = "" diff --git a/compiler/modulepaths.nim b/compiler/modulepaths.nim index e5cbf3a2c..118002fcf 100644 --- a/compiler/modulepaths.nim +++ b/compiler/modulepaths.nim @@ -126,13 +126,6 @@ proc getModuleName*(conf: ConfigRef; n: PNode): string = of nkInfix: let n0 = n[0] let n1 = n[1] - if n0.kind == nkIdent and n0.ident.s == "as": - # XXX hack ahead: - n.kind = nkImportAs - n.sons[0] = n.sons[1] - n.sons[1] = n.sons[2] - n.sons.setLen(2) - return getModuleName(conf, n.sons[0]) when false: if n1.kind == nkPrefix and n1[0].kind == nkIdent and n1[0].ident.s == "$": if n0.kind == nkIdent and n0.ident.s == "/": diff --git a/compiler/parser.nim b/compiler/parser.nim index 98ccb05b9..246dcb814 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -1638,7 +1638,7 @@ proc parseStaticOrDefer(p: var TParser; k: TNodeKind): PNode = addSon(result, parseStmt(p)) proc parseAsm(p: var TParser): PNode = - #| asmStmt = 'asm' pragma? (STR_LIT | RSTR_LIT | TRIPLE_STR_LIT) + #| asmStmt = 'asm' pragma? (STR_LIT | RSTR_LIT | TRIPLESTR_LIT) result = newNodeP(nkAsmStmt, p) getTokNoInd(p) if p.tok.tokType == tkCurlyDotLe: addSon(result, parsePragma(p)) diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index a067f2074..263068344 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -868,11 +868,17 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int, of wExplain: sym.flags.incl sfExplain of wDeprecated: - if sym != nil and sym.kind in routineKinds: + if sym != nil and sym.kind in routineKinds + {skType}: if it.kind in nkPragmaCallKinds: discard getStrLitNode(c, it) incl(sym.flags, sfDeprecated) + elif sym != nil and sym.kind != skModule: + # We don't support the extra annotation field + if it.kind in nkPragmaCallKinds: + localError(c.config, it.info, "annotation to deprecated not supported here") + incl(sym.flags, sfDeprecated) + # At this point we're quite sure this is a statement and applies to the + # whole module elif it.kind in nkPragmaCallKinds: deprecatedStmt(c, it) - elif sym != nil: incl(sym.flags, sfDeprecated) else: incl(c.module.flags, sfDeprecated) of wVarargs: noVal(c, it) diff --git a/compiler/rodutils.nim b/compiler/rodutils.nim index a774cdba7..90431999a 100644 --- a/compiler/rodutils.nim +++ b/compiler/rodutils.nim @@ -10,8 +10,8 @@ ## Serialization utilities for the compiler. import strutils, math -# MSVC prior to 2013 doesn't have C99 functions -when defined(windows) and (defined(vcc) or defined(bcc)): +# bcc on windows doesn't have C99 functions +when defined(windows) and defined(bcc): {.emit: """#if defined(_MSC_VER) && _MSC_VER < 1900 #include <stdarg.h> static int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) { diff --git a/compiler/semcall.nim b/compiler/semcall.nim index ef452fcdc..dc71f2567 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -399,12 +399,11 @@ proc updateDefaultParams(call: PNode) = # the default params with `nfDefaultParam` and `instantiateProcType` # computes correctly the default values for each instantiation. let calleeParams = call[0].sym.typ.n - for i in countdown(call.len - 1, 1): - if nfDefaultParam notin call[i].flags: - return - let def = calleeParams[i].sym.ast - if nfDefaultRefsParam in def.flags: call.flags.incl nfDefaultRefsParam - call[i] = def + for i in 1..<call.len: + if nfDefaultParam in call[i].flags: + let def = calleeParams[i].sym.ast + if nfDefaultRefsParam in def.flags: call.flags.incl nfDefaultRefsParam + call[i] = def proc semResolvedCall(c: PContext, x: TCandidate, n: PNode, flags: TExprFlags): PNode = diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 895920310..5a8c76216 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -352,6 +352,11 @@ proc isOpImpl(c: PContext, n: PNode, flags: TExprFlags): PNode = res = t.kind == tyProc and t.callConv == ccClosure and tfIterator notin t.flags + of "iterator": + let t = skipTypes(t1, abstractRange) + res = t.kind == tyProc and + t.callConv == ccClosure and + tfIterator in t.flags else: res = false else: diff --git a/compiler/semfold.nim b/compiler/semfold.nim index a6c185fdc..444940144 100644 --- a/compiler/semfold.nim +++ b/compiler/semfold.nim @@ -69,9 +69,13 @@ proc foldSub*(a, b: BiggestInt, n: PNode; g: ModuleGraph): PNode = checkInRange(g.config, n, res): result = newIntNodeT(res, n, g) +proc foldUnarySub(a: BiggestInt, n: PNode, g: ModuleGraph): PNode = + if a != firstOrd(g.config, n.typ): + result = newIntNodeT(-a, n, g) + proc foldAbs*(a: BiggestInt, n: PNode; g: ModuleGraph): PNode = if a != firstOrd(g.config, n.typ): - result = newIntNodeT(a, n, g) + result = newIntNodeT(abs(a), n, g) proc foldMod*(a, b: BiggestInt, n: PNode; g: ModuleGraph): PNode = if b != 0'i64: @@ -173,32 +177,41 @@ proc makeRangeF(typ: PType, first, last: BiggestFloat; g: ModuleGraph): PType = result.n = n addSonSkipIntLit(result, skipTypes(typ, {tyRange})) -proc evalIs(n, a: PNode): PNode = +proc evalIs(n: PNode, lhs: PSym, g: ModuleGraph): PNode = # XXX: This should use the standard isOpImpl - #internalAssert a.kind == nkSym and a.sym.kind == skType - #internalAssert n.sonsLen == 3 and - # n[2].kind in {nkStrLit..nkTripleStrLit, nkType} + internalAssert g.config, + n.sonsLen == 3 and + lhs.typ != nil and + n[2].kind in {nkStrLit..nkTripleStrLit, nkType} - let t1 = a.sym.typ + var + res = false + t1 = lhs.typ + t2 = n[2].typ + + if t1.kind == tyTypeDesc and t2.kind != tyTypeDesc: + t1 = t1.base if n[2].kind in {nkStrLit..nkTripleStrLit}: case n[2].strVal.normalize of "closure": let t = skipTypes(t1, abstractRange) - result = newIntNode(nkIntLit, ord(t.kind == tyProc and - t.callConv == ccClosure and - tfIterator notin t.flags)) + res = t.kind == tyProc and + t.callConv == ccClosure and + tfIterator notin t.flags of "iterator": let t = skipTypes(t1, abstractRange) - result = newIntNode(nkIntLit, ord(t.kind == tyProc and - t.callConv == ccClosure and - tfIterator in t.flags)) - else: discard + res = t.kind == tyProc and + t.callConv == ccClosure and + tfIterator in t.flags + else: + res = false else: # XXX semexprs.isOpImpl is slightly different and requires a context. yay. let t2 = n[2].typ - var match = sameType(t1, t2) - result = newIntNode(nkIntLit, ord(match)) + res = sameType(t1, t2) + + result = newIntNode(nkIntLit, ord(res)) result.typ = n.typ proc evalOp(m: TMagic, n, a, b, c: PNode; g: ModuleGraph): PNode = @@ -207,7 +220,7 @@ proc evalOp(m: TMagic, n, a, b, c: PNode; g: ModuleGraph): PNode = case m of mOrd: result = newIntNodeT(getOrdValue(a), n, g) of mChr: result = newIntNodeT(getInt(a), n, g) - of mUnaryMinusI, mUnaryMinusI64: result = newIntNodeT(- getInt(a), n, g) + of mUnaryMinusI, mUnaryMinusI64: result = foldUnarySub(getInt(a), n, g) of mUnaryMinusF64: result = newFloatNodeT(- getFloat(a), n, g) of mNot: result = newIntNodeT(1 - getInt(a), n, g) of mCard: result = newIntNodeT(nimsets.cardSet(g.config, a), n, g) @@ -584,6 +597,9 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode = result = copyTree(s.ast) of skProc, skFunc, skMethod: result = n + of skParam: + if s.typ != nil and s.typ.kind == tyTypeDesc: + result = newSymNodeTypeDesc(s, n.info) of skType: # XXX gensym'ed symbols can come here and cannot be resolved. This is # dirty, but correct. @@ -651,9 +667,9 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode = of mConStrStr: result = foldConStrStr(m, n, g) of mIs: - let a = getConstExpr(m, n[1], g) - if a != nil and a.kind == nkSym and a.sym.kind == skType: - result = evalIs(n, a) + let lhs = getConstExpr(m, n[1], g) + if lhs != nil and lhs.kind == nkSym: + result = evalIs(n, lhs.sym, g) else: result = magicCall(m, n, g) except OverflowError: diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 1669a7707..86f3a17ab 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -372,7 +372,7 @@ proc semTypeIdent(c: PContext, n: PNode): PSym = if n.kind == nkSym: result = getGenSym(c, n.sym) else: - result = pickSym(c, n, {skType, skGenericParam}) + result = pickSym(c, n, {skType, skGenericParam, skParam}) if result.isNil: result = qualifiedLookUp(c, n, {checkAmbiguity, checkUndeclared}) if result != nil: @@ -1345,7 +1345,7 @@ proc semTypeClass(c: PContext, n: PNode, prev: PType): PType = if modifier != tyNone: dummyName = param[0] dummyType = c.makeTypeWithModifier(modifier, candidateTypeSlot) - if modifier == tyTypeDesc: dummyType.flags.incl tfExplicit + if modifier == tyTypeDesc: dummyType.flags.incl tfConceptMatchedTypeSym else: dummyName = param dummyType = candidateTypeSlot diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index f206119ec..932163055 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -993,7 +993,8 @@ proc typeRelImpl(c: var TCandidate, f, aOrig: PType, useTypeLoweringRuleInTypeClass = c.c.matchedConcept != nil and not c.isNoCall and f.kind != tyTypeDesc and - tfExplicit notin aOrig.flags + tfExplicit notin aOrig.flags and + tfConceptMatchedTypeSym notin aOrig.flags aOrig = if useTypeLoweringRuleInTypeClass: aOrig.skipTypes({tyTypeDesc}) diff --git a/compiler/suggest.nim b/compiler/suggest.nim index 3d3cd2484..770bf25e6 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -454,14 +454,23 @@ proc suggestSym*(conf: ConfigRef; info: TLineInfo; s: PSym; usageSym: var PSym; suggestResult(conf, symToSuggest(conf, s, isLocal=false, ideOutline, info, 100, PrefixMatch.None, false, 0)) proc warnAboutDeprecated(conf: ConfigRef; info: TLineInfo; s: PSym) = + var pragmaNode: PNode + if s.kind in routineKinds: - let n = s.ast[pragmasPos] - if n.kind != nkEmpty: - for it in n: - if whichPragma(it) == wDeprecated and it.safeLen == 2 and - it[1].kind in {nkStrLit..nkTripleStrLit}: - message(conf, info, warnDeprecated, it[1].strVal & "; " & s.name.s) - return + pragmaNode = s.ast[pragmasPos] + elif s.kind in {skType}: + # s.ast = nkTypedef / nkPragmaExpr / [nkSym, nkPragma] + pragmaNode = s.ast[0][1] + + doAssert pragmaNode == nil or pragmaNode.kind == nkPragma + + if pragmaNode != nil: + for it in pragmaNode: + if whichPragma(it) == wDeprecated and it.safeLen == 2 and + it[1].kind in {nkStrLit..nkTripleStrLit}: + message(conf, info, warnDeprecated, it[1].strVal & "; " & s.name.s) + return + message(conf, info, warnDeprecated, s.name.s) proc markUsed(conf: ConfigRef; info: TLineInfo; s: PSym; usageSym: var PSym) = diff --git a/compiler/types.nim b/compiler/types.nim index 4a16e7207..d0eec35cf 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -428,6 +428,8 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string = sfAnon notin t.sym.flags: if t.kind == tyInt and isIntLit(t): result = t.sym.name.s & " literal(" & $t.n.intVal & ")" + elif t.kind == tyAlias: + result = typeToString(t.sons[0]) elif prefer in {preferName, preferTypeName} or t.sym.owner.isNil: result = t.sym.name.s if t.kind == tyGenericParam and t.sonsLen > 0: diff --git a/doc/tut1.rst b/doc/tut1.rst index 67ef43948..e200cfe8b 100644 --- a/doc/tut1.rst +++ b/doc/tut1.rst @@ -571,8 +571,8 @@ With parenthesis and semicolons ``(;)`` you can use statements where only an expression is allowed: .. code-block:: nim - # computes fac(4) at compile time: :test: "nim c $1" + # computes fac(4) at compile time: const fac4 = (var x = 1; for i in 1..4: x *= i; x) diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim index f54fe87f7..fbf2b8e73 100644 --- a/lib/pure/htmlparser.nim +++ b/lib/pure/htmlparser.nim @@ -387,1481 +387,1484 @@ proc entityToRune*(entity: string): Rune = doAssert entityToRune("#x0003F") == "?".runeAt(0) if entity.len < 2: return # smallest entity has length 2 if entity[0] == '#': + var runeValue = 0 case entity[1] of '0'..'9': - try: return Rune(parseInt(entity[1..^1])) - except: return + try: runeValue = parseInt(entity[1..^1]) + except: discard of 'x', 'X': # not case sensitive here - try: return Rune(parseHexInt(entity[2..^1])) - except: return - else: return # other entities are not defined with prefix ``#`` + try: runeValue = parseHexInt(entity[2..^1]) + except: discard + else: discard # other entities are not defined with prefix ``#`` + if runeValue notin 0..0x10FFFF: runeValue = 0 # only return legal values + return Rune(runeValue) case entity # entity names are case sensitive - of "Tab": result = Rune(0x00009) - of "NewLine": result = Rune(0x0000A) - of "excl": result = Rune(0x00021) - of "quot", "QUOT": result = Rune(0x00022) - of "num": result = Rune(0x00023) - of "dollar": result = Rune(0x00024) - of "percnt": result = Rune(0x00025) - of "amp", "AMP": result = Rune(0x00026) - of "apos": result = Rune(0x00027) - of "lpar": result = Rune(0x00028) - of "rpar": result = Rune(0x00029) - of "ast", "midast": result = Rune(0x0002A) - of "plus": result = Rune(0x0002B) - of "comma": result = Rune(0x0002C) - of "period": result = Rune(0x0002E) - of "sol": result = Rune(0x0002F) - of "colon": result = Rune(0x0003A) - of "semi": result = Rune(0x0003B) - of "lt", "LT": result = Rune(0x0003C) - of "equals": result = Rune(0x0003D) - of "gt", "GT": result = Rune(0x0003E) - of "quest": result = Rune(0x0003F) - of "commat": result = Rune(0x00040) - of "lsqb", "lbrack": result = Rune(0x0005B) - of "bsol": result = Rune(0x0005C) - of "rsqb", "rbrack": result = Rune(0x0005D) - of "Hat": result = Rune(0x0005E) - of "lowbar": result = Rune(0x0005F) - of "grave", "DiacriticalGrave": result = Rune(0x00060) - of "lcub", "lbrace": result = Rune(0x0007B) - of "verbar", "vert", "VerticalLine": result = Rune(0x0007C) - of "rcub", "rbrace": result = Rune(0x0007D) - of "nbsp", "NonBreakingSpace": result = Rune(0x000A0) - of "iexcl": result = Rune(0x000A1) - of "cent": result = Rune(0x000A2) - of "pound": result = Rune(0x000A3) - of "curren": result = Rune(0x000A4) - of "yen": result = Rune(0x000A5) - of "brvbar": result = Rune(0x000A6) - of "sect": result = Rune(0x000A7) - of "Dot", "die", "DoubleDot", "uml": result = Rune(0x000A8) - of "copy", "COPY": result = Rune(0x000A9) - of "ordf": result = Rune(0x000AA) - of "laquo": result = Rune(0x000AB) - of "not": result = Rune(0x000AC) - of "shy": result = Rune(0x000AD) - of "reg", "circledR", "REG": result = Rune(0x000AE) - of "macr", "OverBar", "strns": result = Rune(0x000AF) - of "deg": result = Rune(0x000B0) - of "plusmn", "pm", "PlusMinus": result = Rune(0x000B1) - of "sup2": result = Rune(0x000B2) - of "sup3": result = Rune(0x000B3) - of "acute", "DiacriticalAcute": result = Rune(0x000B4) - of "micro": result = Rune(0x000B5) - of "para": result = Rune(0x000B6) - of "middot", "centerdot", "CenterDot": result = Rune(0x000B7) - of "cedil", "Cedilla": result = Rune(0x000B8) - of "sup1": result = Rune(0x000B9) - of "ordm": result = Rune(0x000BA) - of "raquo": result = Rune(0x000BB) - of "frac14": result = Rune(0x000BC) - of "frac12", "half": result = Rune(0x000BD) - of "frac34": result = Rune(0x000BE) - of "iquest": result = Rune(0x000BF) - of "Agrave": result = Rune(0x000C0) - of "Aacute": result = Rune(0x000C1) - of "Acirc": result = Rune(0x000C2) - of "Atilde": result = Rune(0x000C3) - of "Auml": result = Rune(0x000C4) - of "Aring": result = Rune(0x000C5) - of "AElig": result = Rune(0x000C6) - of "Ccedil": result = Rune(0x000C7) - of "Egrave": result = Rune(0x000C8) - of "Eacute": result = Rune(0x000C9) - of "Ecirc": result = Rune(0x000CA) - of "Euml": result = Rune(0x000CB) - of "Igrave": result = Rune(0x000CC) - of "Iacute": result = Rune(0x000CD) - of "Icirc": result = Rune(0x000CE) - of "Iuml": result = Rune(0x000CF) - of "ETH": result = Rune(0x000D0) - of "Ntilde": result = Rune(0x000D1) - of "Ograve": result = Rune(0x000D2) - of "Oacute": result = Rune(0x000D3) - of "Ocirc": result = Rune(0x000D4) - of "Otilde": result = Rune(0x000D5) - of "Ouml": result = Rune(0x000D6) - of "times": result = Rune(0x000D7) - of "Oslash": result = Rune(0x000D8) - of "Ugrave": result = Rune(0x000D9) - of "Uacute": result = Rune(0x000DA) - of "Ucirc": result = Rune(0x000DB) - of "Uuml": result = Rune(0x000DC) - of "Yacute": result = Rune(0x000DD) - of "THORN": result = Rune(0x000DE) - of "szlig": result = Rune(0x000DF) - of "agrave": result = Rune(0x000E0) - of "aacute": result = Rune(0x000E1) - of "acirc": result = Rune(0x000E2) - of "atilde": result = Rune(0x000E3) - of "auml": result = Rune(0x000E4) - of "aring": result = Rune(0x000E5) - of "aelig": result = Rune(0x000E6) - of "ccedil": result = Rune(0x000E7) - of "egrave": result = Rune(0x000E8) - of "eacute": result = Rune(0x000E9) - of "ecirc": result = Rune(0x000EA) - of "euml": result = Rune(0x000EB) - of "igrave": result = Rune(0x000EC) - of "iacute": result = Rune(0x000ED) - of "icirc": result = Rune(0x000EE) - of "iuml": result = Rune(0x000EF) - of "eth": result = Rune(0x000F0) - of "ntilde": result = Rune(0x000F1) - of "ograve": result = Rune(0x000F2) - of "oacute": result = Rune(0x000F3) - of "ocirc": result = Rune(0x000F4) - of "otilde": result = Rune(0x000F5) - of "ouml": result = Rune(0x000F6) - of "divide", "div": result = Rune(0x000F7) - of "oslash": result = Rune(0x000F8) - of "ugrave": result = Rune(0x000F9) - of "uacute": result = Rune(0x000FA) - of "ucirc": result = Rune(0x000FB) - of "uuml": result = Rune(0x000FC) - of "yacute": result = Rune(0x000FD) - of "thorn": result = Rune(0x000FE) - of "yuml": result = Rune(0x000FF) - of "Amacr": result = Rune(0x00100) - of "amacr": result = Rune(0x00101) - of "Abreve": result = Rune(0x00102) - of "abreve": result = Rune(0x00103) - of "Aogon": result = Rune(0x00104) - of "aogon": result = Rune(0x00105) - of "Cacute": result = Rune(0x00106) - of "cacute": result = Rune(0x00107) - of "Ccirc": result = Rune(0x00108) - of "ccirc": result = Rune(0x00109) - of "Cdot": result = Rune(0x0010A) - of "cdot": result = Rune(0x0010B) - of "Ccaron": result = Rune(0x0010C) - of "ccaron": result = Rune(0x0010D) - of "Dcaron": result = Rune(0x0010E) - of "dcaron": result = Rune(0x0010F) - of "Dstrok": result = Rune(0x00110) - of "dstrok": result = Rune(0x00111) - of "Emacr": result = Rune(0x00112) - of "emacr": result = Rune(0x00113) - of "Edot": result = Rune(0x00116) - of "edot": result = Rune(0x00117) - of "Eogon": result = Rune(0x00118) - of "eogon": result = Rune(0x00119) - of "Ecaron": result = Rune(0x0011A) - of "ecaron": result = Rune(0x0011B) - of "Gcirc": result = Rune(0x0011C) - of "gcirc": result = Rune(0x0011D) - of "Gbreve": result = Rune(0x0011E) - of "gbreve": result = Rune(0x0011F) - of "Gdot": result = Rune(0x00120) - of "gdot": result = Rune(0x00121) - of "Gcedil": result = Rune(0x00122) - of "Hcirc": result = Rune(0x00124) - of "hcirc": result = Rune(0x00125) - of "Hstrok": result = Rune(0x00126) - of "hstrok": result = Rune(0x00127) - of "Itilde": result = Rune(0x00128) - of "itilde": result = Rune(0x00129) - of "Imacr": result = Rune(0x0012A) - of "imacr": result = Rune(0x0012B) - of "Iogon": result = Rune(0x0012E) - of "iogon": result = Rune(0x0012F) - of "Idot": result = Rune(0x00130) - of "imath", "inodot": result = Rune(0x00131) - of "IJlig": result = Rune(0x00132) - of "ijlig": result = Rune(0x00133) - of "Jcirc": result = Rune(0x00134) - of "jcirc": result = Rune(0x00135) - of "Kcedil": result = Rune(0x00136) - of "kcedil": result = Rune(0x00137) - of "kgreen": result = Rune(0x00138) - of "Lacute": result = Rune(0x00139) - of "lacute": result = Rune(0x0013A) - of "Lcedil": result = Rune(0x0013B) - of "lcedil": result = Rune(0x0013C) - of "Lcaron": result = Rune(0x0013D) - of "lcaron": result = Rune(0x0013E) - of "Lmidot": result = Rune(0x0013F) - of "lmidot": result = Rune(0x00140) - of "Lstrok": result = Rune(0x00141) - of "lstrok": result = Rune(0x00142) - of "Nacute": result = Rune(0x00143) - of "nacute": result = Rune(0x00144) - of "Ncedil": result = Rune(0x00145) - of "ncedil": result = Rune(0x00146) - of "Ncaron": result = Rune(0x00147) - of "ncaron": result = Rune(0x00148) - of "napos": result = Rune(0x00149) - of "ENG": result = Rune(0x0014A) - of "eng": result = Rune(0x0014B) - of "Omacr": result = Rune(0x0014C) - of "omacr": result = Rune(0x0014D) - of "Odblac": result = Rune(0x00150) - of "odblac": result = Rune(0x00151) - of "OElig": result = Rune(0x00152) - of "oelig": result = Rune(0x00153) - of "Racute": result = Rune(0x00154) - of "racute": result = Rune(0x00155) - of "Rcedil": result = Rune(0x00156) - of "rcedil": result = Rune(0x00157) - of "Rcaron": result = Rune(0x00158) - of "rcaron": result = Rune(0x00159) - of "Sacute": result = Rune(0x0015A) - of "sacute": result = Rune(0x0015B) - of "Scirc": result = Rune(0x0015C) - of "scirc": result = Rune(0x0015D) - of "Scedil": result = Rune(0x0015E) - of "scedil": result = Rune(0x0015F) - of "Scaron": result = Rune(0x00160) - of "scaron": result = Rune(0x00161) - of "Tcedil": result = Rune(0x00162) - of "tcedil": result = Rune(0x00163) - of "Tcaron": result = Rune(0x00164) - of "tcaron": result = Rune(0x00165) - of "Tstrok": result = Rune(0x00166) - of "tstrok": result = Rune(0x00167) - of "Utilde": result = Rune(0x00168) - of "utilde": result = Rune(0x00169) - of "Umacr": result = Rune(0x0016A) - of "umacr": result = Rune(0x0016B) - of "Ubreve": result = Rune(0x0016C) - of "ubreve": result = Rune(0x0016D) - of "Uring": result = Rune(0x0016E) - of "uring": result = Rune(0x0016F) - of "Udblac": result = Rune(0x00170) - of "udblac": result = Rune(0x00171) - of "Uogon": result = Rune(0x00172) - of "uogon": result = Rune(0x00173) - of "Wcirc": result = Rune(0x00174) - of "wcirc": result = Rune(0x00175) - of "Ycirc": result = Rune(0x00176) - of "ycirc": result = Rune(0x00177) - of "Yuml": result = Rune(0x00178) - of "Zacute": result = Rune(0x00179) - of "zacute": result = Rune(0x0017A) - of "Zdot": result = Rune(0x0017B) - of "zdot": result = Rune(0x0017C) - of "Zcaron": result = Rune(0x0017D) - of "zcaron": result = Rune(0x0017E) - of "fnof": result = Rune(0x00192) - of "imped": result = Rune(0x001B5) - of "gacute": result = Rune(0x001F5) - of "jmath": result = Rune(0x00237) - of "circ": result = Rune(0x002C6) - of "caron", "Hacek": result = Rune(0x002C7) - of "breve", "Breve": result = Rune(0x002D8) - of "dot", "DiacriticalDot": result = Rune(0x002D9) - of "ring": result = Rune(0x002DA) - of "ogon": result = Rune(0x002DB) - of "tilde", "DiacriticalTilde": result = Rune(0x002DC) - of "dblac", "DiacriticalDoubleAcute": result = Rune(0x002DD) - of "DownBreve": result = Rune(0x00311) - of "UnderBar": result = Rune(0x00332) - of "Alpha": result = Rune(0x00391) - of "Beta": result = Rune(0x00392) - of "Gamma": result = Rune(0x00393) - of "Delta": result = Rune(0x00394) - of "Epsilon": result = Rune(0x00395) - of "Zeta": result = Rune(0x00396) - of "Eta": result = Rune(0x00397) - of "Theta": result = Rune(0x00398) - of "Iota": result = Rune(0x00399) - of "Kappa": result = Rune(0x0039A) - of "Lambda": result = Rune(0x0039B) - of "Mu": result = Rune(0x0039C) - of "Nu": result = Rune(0x0039D) - of "Xi": result = Rune(0x0039E) - of "Omicron": result = Rune(0x0039F) - of "Pi": result = Rune(0x003A0) - of "Rho": result = Rune(0x003A1) - of "Sigma": result = Rune(0x003A3) - of "Tau": result = Rune(0x003A4) - of "Upsilon": result = Rune(0x003A5) - of "Phi": result = Rune(0x003A6) - of "Chi": result = Rune(0x003A7) - of "Psi": result = Rune(0x003A8) - of "Omega": result = Rune(0x003A9) - of "alpha": result = Rune(0x003B1) - of "beta": result = Rune(0x003B2) - of "gamma": result = Rune(0x003B3) - of "delta": result = Rune(0x003B4) - of "epsiv", "varepsilon", "epsilon": result = Rune(0x003B5) - of "zeta": result = Rune(0x003B6) - of "eta": result = Rune(0x003B7) - of "theta": result = Rune(0x003B8) - of "iota": result = Rune(0x003B9) - of "kappa": result = Rune(0x003BA) - of "lambda": result = Rune(0x003BB) - of "mu": result = Rune(0x003BC) - of "nu": result = Rune(0x003BD) - of "xi": result = Rune(0x003BE) - of "omicron": result = Rune(0x003BF) - of "pi": result = Rune(0x003C0) - of "rho": result = Rune(0x003C1) - of "sigmav", "varsigma", "sigmaf": result = Rune(0x003C2) - of "sigma": result = Rune(0x003C3) - of "tau": result = Rune(0x003C4) - of "upsi", "upsilon": result = Rune(0x003C5) - of "phi", "phiv", "varphi": result = Rune(0x003C6) - of "chi": result = Rune(0x003C7) - of "psi": result = Rune(0x003C8) - of "omega": result = Rune(0x003C9) - of "thetav", "vartheta", "thetasym": result = Rune(0x003D1) - of "Upsi", "upsih": result = Rune(0x003D2) - of "straightphi": result = Rune(0x003D5) - of "piv", "varpi": result = Rune(0x003D6) - of "Gammad": result = Rune(0x003DC) - of "gammad", "digamma": result = Rune(0x003DD) - of "kappav", "varkappa": result = Rune(0x003F0) - of "rhov", "varrho": result = Rune(0x003F1) - of "epsi", "straightepsilon": result = Rune(0x003F5) - of "bepsi", "backepsilon": result = Rune(0x003F6) - of "IOcy": result = Rune(0x00401) - of "DJcy": result = Rune(0x00402) - of "GJcy": result = Rune(0x00403) - of "Jukcy": result = Rune(0x00404) - of "DScy": result = Rune(0x00405) - of "Iukcy": result = Rune(0x00406) - of "YIcy": result = Rune(0x00407) - of "Jsercy": result = Rune(0x00408) - of "LJcy": result = Rune(0x00409) - of "NJcy": result = Rune(0x0040A) - of "TSHcy": result = Rune(0x0040B) - of "KJcy": result = Rune(0x0040C) - of "Ubrcy": result = Rune(0x0040E) - of "DZcy": result = Rune(0x0040F) - of "Acy": result = Rune(0x00410) - of "Bcy": result = Rune(0x00411) - of "Vcy": result = Rune(0x00412) - of "Gcy": result = Rune(0x00413) - of "Dcy": result = Rune(0x00414) - of "IEcy": result = Rune(0x00415) - of "ZHcy": result = Rune(0x00416) - of "Zcy": result = Rune(0x00417) - of "Icy": result = Rune(0x00418) - of "Jcy": result = Rune(0x00419) - of "Kcy": result = Rune(0x0041A) - of "Lcy": result = Rune(0x0041B) - of "Mcy": result = Rune(0x0041C) - of "Ncy": result = Rune(0x0041D) - of "Ocy": result = Rune(0x0041E) - of "Pcy": result = Rune(0x0041F) - of "Rcy": result = Rune(0x00420) - of "Scy": result = Rune(0x00421) - of "Tcy": result = Rune(0x00422) - of "Ucy": result = Rune(0x00423) - of "Fcy": result = Rune(0x00424) - of "KHcy": result = Rune(0x00425) - of "TScy": result = Rune(0x00426) - of "CHcy": result = Rune(0x00427) - of "SHcy": result = Rune(0x00428) - of "SHCHcy": result = Rune(0x00429) - of "HARDcy": result = Rune(0x0042A) - of "Ycy": result = Rune(0x0042B) - of "SOFTcy": result = Rune(0x0042C) - of "Ecy": result = Rune(0x0042D) - of "YUcy": result = Rune(0x0042E) - of "YAcy": result = Rune(0x0042F) - of "acy": result = Rune(0x00430) - of "bcy": result = Rune(0x00431) - of "vcy": result = Rune(0x00432) - of "gcy": result = Rune(0x00433) - of "dcy": result = Rune(0x00434) - of "iecy": result = Rune(0x00435) - of "zhcy": result = Rune(0x00436) - of "zcy": result = Rune(0x00437) - of "icy": result = Rune(0x00438) - of "jcy": result = Rune(0x00439) - of "kcy": result = Rune(0x0043A) - of "lcy": result = Rune(0x0043B) - of "mcy": result = Rune(0x0043C) - of "ncy": result = Rune(0x0043D) - of "ocy": result = Rune(0x0043E) - of "pcy": result = Rune(0x0043F) - of "rcy": result = Rune(0x00440) - of "scy": result = Rune(0x00441) - of "tcy": result = Rune(0x00442) - of "ucy": result = Rune(0x00443) - of "fcy": result = Rune(0x00444) - of "khcy": result = Rune(0x00445) - of "tscy": result = Rune(0x00446) - of "chcy": result = Rune(0x00447) - of "shcy": result = Rune(0x00448) - of "shchcy": result = Rune(0x00449) - of "hardcy": result = Rune(0x0044A) - of "ycy": result = Rune(0x0044B) - of "softcy": result = Rune(0x0044C) - of "ecy": result = Rune(0x0044D) - of "yucy": result = Rune(0x0044E) - of "yacy": result = Rune(0x0044F) - of "iocy": result = Rune(0x00451) - of "djcy": result = Rune(0x00452) - of "gjcy": result = Rune(0x00453) - of "jukcy": result = Rune(0x00454) - of "dscy": result = Rune(0x00455) - of "iukcy": result = Rune(0x00456) - of "yicy": result = Rune(0x00457) - of "jsercy": result = Rune(0x00458) - of "ljcy": result = Rune(0x00459) - of "njcy": result = Rune(0x0045A) - of "tshcy": result = Rune(0x0045B) - of "kjcy": result = Rune(0x0045C) - of "ubrcy": result = Rune(0x0045E) - of "dzcy": result = Rune(0x0045F) - of "ensp": result = Rune(0x02002) - of "emsp": result = Rune(0x02003) - of "emsp13": result = Rune(0x02004) - of "emsp14": result = Rune(0x02005) - of "numsp": result = Rune(0x02007) - of "puncsp": result = Rune(0x02008) - of "thinsp", "ThinSpace": result = Rune(0x02009) - of "hairsp", "VeryThinSpace": result = Rune(0x0200A) + of "Tab": Rune(0x00009) + of "NewLine": Rune(0x0000A) + of "excl": Rune(0x00021) + of "quot", "QUOT": Rune(0x00022) + of "num": Rune(0x00023) + of "dollar": Rune(0x00024) + of "percnt": Rune(0x00025) + of "amp", "AMP": Rune(0x00026) + of "apos": Rune(0x00027) + of "lpar": Rune(0x00028) + of "rpar": Rune(0x00029) + of "ast", "midast": Rune(0x0002A) + of "plus": Rune(0x0002B) + of "comma": Rune(0x0002C) + of "period": Rune(0x0002E) + of "sol": Rune(0x0002F) + of "colon": Rune(0x0003A) + of "semi": Rune(0x0003B) + of "lt", "LT": Rune(0x0003C) + of "equals": Rune(0x0003D) + of "gt", "GT": Rune(0x0003E) + of "quest": Rune(0x0003F) + of "commat": Rune(0x00040) + of "lsqb", "lbrack": Rune(0x0005B) + of "bsol": Rune(0x0005C) + of "rsqb", "rbrack": Rune(0x0005D) + of "Hat": Rune(0x0005E) + of "lowbar": Rune(0x0005F) + of "grave", "DiacriticalGrave": Rune(0x00060) + of "lcub", "lbrace": Rune(0x0007B) + of "verbar", "vert", "VerticalLine": Rune(0x0007C) + of "rcub", "rbrace": Rune(0x0007D) + of "nbsp", "NonBreakingSpace": Rune(0x000A0) + of "iexcl": Rune(0x000A1) + of "cent": Rune(0x000A2) + of "pound": Rune(0x000A3) + of "curren": Rune(0x000A4) + of "yen": Rune(0x000A5) + of "brvbar": Rune(0x000A6) + of "sect": Rune(0x000A7) + of "Dot", "die", "DoubleDot", "uml": Rune(0x000A8) + of "copy", "COPY": Rune(0x000A9) + of "ordf": Rune(0x000AA) + of "laquo": Rune(0x000AB) + of "not": Rune(0x000AC) + of "shy": Rune(0x000AD) + of "reg", "circledR", "REG": Rune(0x000AE) + of "macr", "OverBar", "strns": Rune(0x000AF) + of "deg": Rune(0x000B0) + of "plusmn", "pm", "PlusMinus": Rune(0x000B1) + of "sup2": Rune(0x000B2) + of "sup3": Rune(0x000B3) + of "acute", "DiacriticalAcute": Rune(0x000B4) + of "micro": Rune(0x000B5) + of "para": Rune(0x000B6) + of "middot", "centerdot", "CenterDot": Rune(0x000B7) + of "cedil", "Cedilla": Rune(0x000B8) + of "sup1": Rune(0x000B9) + of "ordm": Rune(0x000BA) + of "raquo": Rune(0x000BB) + of "frac14": Rune(0x000BC) + of "frac12", "half": Rune(0x000BD) + of "frac34": Rune(0x000BE) + of "iquest": Rune(0x000BF) + of "Agrave": Rune(0x000C0) + of "Aacute": Rune(0x000C1) + of "Acirc": Rune(0x000C2) + of "Atilde": Rune(0x000C3) + of "Auml": Rune(0x000C4) + of "Aring": Rune(0x000C5) + of "AElig": Rune(0x000C6) + of "Ccedil": Rune(0x000C7) + of "Egrave": Rune(0x000C8) + of "Eacute": Rune(0x000C9) + of "Ecirc": Rune(0x000CA) + of "Euml": Rune(0x000CB) + of "Igrave": Rune(0x000CC) + of "Iacute": Rune(0x000CD) + of "Icirc": Rune(0x000CE) + of "Iuml": Rune(0x000CF) + of "ETH": Rune(0x000D0) + of "Ntilde": Rune(0x000D1) + of "Ograve": Rune(0x000D2) + of "Oacute": Rune(0x000D3) + of "Ocirc": Rune(0x000D4) + of "Otilde": Rune(0x000D5) + of "Ouml": Rune(0x000D6) + of "times": Rune(0x000D7) + of "Oslash": Rune(0x000D8) + of "Ugrave": Rune(0x000D9) + of "Uacute": Rune(0x000DA) + of "Ucirc": Rune(0x000DB) + of "Uuml": Rune(0x000DC) + of "Yacute": Rune(0x000DD) + of "THORN": Rune(0x000DE) + of "szlig": Rune(0x000DF) + of "agrave": Rune(0x000E0) + of "aacute": Rune(0x000E1) + of "acirc": Rune(0x000E2) + of "atilde": Rune(0x000E3) + of "auml": Rune(0x000E4) + of "aring": Rune(0x000E5) + of "aelig": Rune(0x000E6) + of "ccedil": Rune(0x000E7) + of "egrave": Rune(0x000E8) + of "eacute": Rune(0x000E9) + of "ecirc": Rune(0x000EA) + of "euml": Rune(0x000EB) + of "igrave": Rune(0x000EC) + of "iacute": Rune(0x000ED) + of "icirc": Rune(0x000EE) + of "iuml": Rune(0x000EF) + of "eth": Rune(0x000F0) + of "ntilde": Rune(0x000F1) + of "ograve": Rune(0x000F2) + of "oacute": Rune(0x000F3) + of "ocirc": Rune(0x000F4) + of "otilde": Rune(0x000F5) + of "ouml": Rune(0x000F6) + of "divide", "div": Rune(0x000F7) + of "oslash": Rune(0x000F8) + of "ugrave": Rune(0x000F9) + of "uacute": Rune(0x000FA) + of "ucirc": Rune(0x000FB) + of "uuml": Rune(0x000FC) + of "yacute": Rune(0x000FD) + of "thorn": Rune(0x000FE) + of "yuml": Rune(0x000FF) + of "Amacr": Rune(0x00100) + of "amacr": Rune(0x00101) + of "Abreve": Rune(0x00102) + of "abreve": Rune(0x00103) + of "Aogon": Rune(0x00104) + of "aogon": Rune(0x00105) + of "Cacute": Rune(0x00106) + of "cacute": Rune(0x00107) + of "Ccirc": Rune(0x00108) + of "ccirc": Rune(0x00109) + of "Cdot": Rune(0x0010A) + of "cdot": Rune(0x0010B) + of "Ccaron": Rune(0x0010C) + of "ccaron": Rune(0x0010D) + of "Dcaron": Rune(0x0010E) + of "dcaron": Rune(0x0010F) + of "Dstrok": Rune(0x00110) + of "dstrok": Rune(0x00111) + of "Emacr": Rune(0x00112) + of "emacr": Rune(0x00113) + of "Edot": Rune(0x00116) + of "edot": Rune(0x00117) + of "Eogon": Rune(0x00118) + of "eogon": Rune(0x00119) + of "Ecaron": Rune(0x0011A) + of "ecaron": Rune(0x0011B) + of "Gcirc": Rune(0x0011C) + of "gcirc": Rune(0x0011D) + of "Gbreve": Rune(0x0011E) + of "gbreve": Rune(0x0011F) + of "Gdot": Rune(0x00120) + of "gdot": Rune(0x00121) + of "Gcedil": Rune(0x00122) + of "Hcirc": Rune(0x00124) + of "hcirc": Rune(0x00125) + of "Hstrok": Rune(0x00126) + of "hstrok": Rune(0x00127) + of "Itilde": Rune(0x00128) + of "itilde": Rune(0x00129) + of "Imacr": Rune(0x0012A) + of "imacr": Rune(0x0012B) + of "Iogon": Rune(0x0012E) + of "iogon": Rune(0x0012F) + of "Idot": Rune(0x00130) + of "imath", "inodot": Rune(0x00131) + of "IJlig": Rune(0x00132) + of "ijlig": Rune(0x00133) + of "Jcirc": Rune(0x00134) + of "jcirc": Rune(0x00135) + of "Kcedil": Rune(0x00136) + of "kcedil": Rune(0x00137) + of "kgreen": Rune(0x00138) + of "Lacute": Rune(0x00139) + of "lacute": Rune(0x0013A) + of "Lcedil": Rune(0x0013B) + of "lcedil": Rune(0x0013C) + of "Lcaron": Rune(0x0013D) + of "lcaron": Rune(0x0013E) + of "Lmidot": Rune(0x0013F) + of "lmidot": Rune(0x00140) + of "Lstrok": Rune(0x00141) + of "lstrok": Rune(0x00142) + of "Nacute": Rune(0x00143) + of "nacute": Rune(0x00144) + of "Ncedil": Rune(0x00145) + of "ncedil": Rune(0x00146) + of "Ncaron": Rune(0x00147) + of "ncaron": Rune(0x00148) + of "napos": Rune(0x00149) + of "ENG": Rune(0x0014A) + of "eng": Rune(0x0014B) + of "Omacr": Rune(0x0014C) + of "omacr": Rune(0x0014D) + of "Odblac": Rune(0x00150) + of "odblac": Rune(0x00151) + of "OElig": Rune(0x00152) + of "oelig": Rune(0x00153) + of "Racute": Rune(0x00154) + of "racute": Rune(0x00155) + of "Rcedil": Rune(0x00156) + of "rcedil": Rune(0x00157) + of "Rcaron": Rune(0x00158) + of "rcaron": Rune(0x00159) + of "Sacute": Rune(0x0015A) + of "sacute": Rune(0x0015B) + of "Scirc": Rune(0x0015C) + of "scirc": Rune(0x0015D) + of "Scedil": Rune(0x0015E) + of "scedil": Rune(0x0015F) + of "Scaron": Rune(0x00160) + of "scaron": Rune(0x00161) + of "Tcedil": Rune(0x00162) + of "tcedil": Rune(0x00163) + of "Tcaron": Rune(0x00164) + of "tcaron": Rune(0x00165) + of "Tstrok": Rune(0x00166) + of "tstrok": Rune(0x00167) + of "Utilde": Rune(0x00168) + of "utilde": Rune(0x00169) + of "Umacr": Rune(0x0016A) + of "umacr": Rune(0x0016B) + of "Ubreve": Rune(0x0016C) + of "ubreve": Rune(0x0016D) + of "Uring": Rune(0x0016E) + of "uring": Rune(0x0016F) + of "Udblac": Rune(0x00170) + of "udblac": Rune(0x00171) + of "Uogon": Rune(0x00172) + of "uogon": Rune(0x00173) + of "Wcirc": Rune(0x00174) + of "wcirc": Rune(0x00175) + of "Ycirc": Rune(0x00176) + of "ycirc": Rune(0x00177) + of "Yuml": Rune(0x00178) + of "Zacute": Rune(0x00179) + of "zacute": Rune(0x0017A) + of "Zdot": Rune(0x0017B) + of "zdot": Rune(0x0017C) + of "Zcaron": Rune(0x0017D) + of "zcaron": Rune(0x0017E) + of "fnof": Rune(0x00192) + of "imped": Rune(0x001B5) + of "gacute": Rune(0x001F5) + of "jmath": Rune(0x00237) + of "circ": Rune(0x002C6) + of "caron", "Hacek": Rune(0x002C7) + of "breve", "Breve": Rune(0x002D8) + of "dot", "DiacriticalDot": Rune(0x002D9) + of "ring": Rune(0x002DA) + of "ogon": Rune(0x002DB) + of "tilde", "DiacriticalTilde": Rune(0x002DC) + of "dblac", "DiacriticalDoubleAcute": Rune(0x002DD) + of "DownBreve": Rune(0x00311) + of "UnderBar": Rune(0x00332) + of "Alpha": Rune(0x00391) + of "Beta": Rune(0x00392) + of "Gamma": Rune(0x00393) + of "Delta": Rune(0x00394) + of "Epsilon": Rune(0x00395) + of "Zeta": Rune(0x00396) + of "Eta": Rune(0x00397) + of "Theta": Rune(0x00398) + of "Iota": Rune(0x00399) + of "Kappa": Rune(0x0039A) + of "Lambda": Rune(0x0039B) + of "Mu": Rune(0x0039C) + of "Nu": Rune(0x0039D) + of "Xi": Rune(0x0039E) + of "Omicron": Rune(0x0039F) + of "Pi": Rune(0x003A0) + of "Rho": Rune(0x003A1) + of "Sigma": Rune(0x003A3) + of "Tau": Rune(0x003A4) + of "Upsilon": Rune(0x003A5) + of "Phi": Rune(0x003A6) + of "Chi": Rune(0x003A7) + of "Psi": Rune(0x003A8) + of "Omega": Rune(0x003A9) + of "alpha": Rune(0x003B1) + of "beta": Rune(0x003B2) + of "gamma": Rune(0x003B3) + of "delta": Rune(0x003B4) + of "epsiv", "varepsilon", "epsilon": Rune(0x003B5) + of "zeta": Rune(0x003B6) + of "eta": Rune(0x003B7) + of "theta": Rune(0x003B8) + of "iota": Rune(0x003B9) + of "kappa": Rune(0x003BA) + of "lambda": Rune(0x003BB) + of "mu": Rune(0x003BC) + of "nu": Rune(0x003BD) + of "xi": Rune(0x003BE) + of "omicron": Rune(0x003BF) + of "pi": Rune(0x003C0) + of "rho": Rune(0x003C1) + of "sigmav", "varsigma", "sigmaf": Rune(0x003C2) + of "sigma": Rune(0x003C3) + of "tau": Rune(0x003C4) + of "upsi", "upsilon": Rune(0x003C5) + of "phi", "phiv", "varphi": Rune(0x003C6) + of "chi": Rune(0x003C7) + of "psi": Rune(0x003C8) + of "omega": Rune(0x003C9) + of "thetav", "vartheta", "thetasym": Rune(0x003D1) + of "Upsi", "upsih": Rune(0x003D2) + of "straightphi": Rune(0x003D5) + of "piv", "varpi": Rune(0x003D6) + of "Gammad": Rune(0x003DC) + of "gammad", "digamma": Rune(0x003DD) + of "kappav", "varkappa": Rune(0x003F0) + of "rhov", "varrho": Rune(0x003F1) + of "epsi", "straightepsilon": Rune(0x003F5) + of "bepsi", "backepsilon": Rune(0x003F6) + of "IOcy": Rune(0x00401) + of "DJcy": Rune(0x00402) + of "GJcy": Rune(0x00403) + of "Jukcy": Rune(0x00404) + of "DScy": Rune(0x00405) + of "Iukcy": Rune(0x00406) + of "YIcy": Rune(0x00407) + of "Jsercy": Rune(0x00408) + of "LJcy": Rune(0x00409) + of "NJcy": Rune(0x0040A) + of "TSHcy": Rune(0x0040B) + of "KJcy": Rune(0x0040C) + of "Ubrcy": Rune(0x0040E) + of "DZcy": Rune(0x0040F) + of "Acy": Rune(0x00410) + of "Bcy": Rune(0x00411) + of "Vcy": Rune(0x00412) + of "Gcy": Rune(0x00413) + of "Dcy": Rune(0x00414) + of "IEcy": Rune(0x00415) + of "ZHcy": Rune(0x00416) + of "Zcy": Rune(0x00417) + of "Icy": Rune(0x00418) + of "Jcy": Rune(0x00419) + of "Kcy": Rune(0x0041A) + of "Lcy": Rune(0x0041B) + of "Mcy": Rune(0x0041C) + of "Ncy": Rune(0x0041D) + of "Ocy": Rune(0x0041E) + of "Pcy": Rune(0x0041F) + of "Rcy": Rune(0x00420) + of "Scy": Rune(0x00421) + of "Tcy": Rune(0x00422) + of "Ucy": Rune(0x00423) + of "Fcy": Rune(0x00424) + of "KHcy": Rune(0x00425) + of "TScy": Rune(0x00426) + of "CHcy": Rune(0x00427) + of "SHcy": Rune(0x00428) + of "SHCHcy": Rune(0x00429) + of "HARDcy": Rune(0x0042A) + of "Ycy": Rune(0x0042B) + of "SOFTcy": Rune(0x0042C) + of "Ecy": Rune(0x0042D) + of "YUcy": Rune(0x0042E) + of "YAcy": Rune(0x0042F) + of "acy": Rune(0x00430) + of "bcy": Rune(0x00431) + of "vcy": Rune(0x00432) + of "gcy": Rune(0x00433) + of "dcy": Rune(0x00434) + of "iecy": Rune(0x00435) + of "zhcy": Rune(0x00436) + of "zcy": Rune(0x00437) + of "icy": Rune(0x00438) + of "jcy": Rune(0x00439) + of "kcy": Rune(0x0043A) + of "lcy": Rune(0x0043B) + of "mcy": Rune(0x0043C) + of "ncy": Rune(0x0043D) + of "ocy": Rune(0x0043E) + of "pcy": Rune(0x0043F) + of "rcy": Rune(0x00440) + of "scy": Rune(0x00441) + of "tcy": Rune(0x00442) + of "ucy": Rune(0x00443) + of "fcy": Rune(0x00444) + of "khcy": Rune(0x00445) + of "tscy": Rune(0x00446) + of "chcy": Rune(0x00447) + of "shcy": Rune(0x00448) + of "shchcy": Rune(0x00449) + of "hardcy": Rune(0x0044A) + of "ycy": Rune(0x0044B) + of "softcy": Rune(0x0044C) + of "ecy": Rune(0x0044D) + of "yucy": Rune(0x0044E) + of "yacy": Rune(0x0044F) + of "iocy": Rune(0x00451) + of "djcy": Rune(0x00452) + of "gjcy": Rune(0x00453) + of "jukcy": Rune(0x00454) + of "dscy": Rune(0x00455) + of "iukcy": Rune(0x00456) + of "yicy": Rune(0x00457) + of "jsercy": Rune(0x00458) + of "ljcy": Rune(0x00459) + of "njcy": Rune(0x0045A) + of "tshcy": Rune(0x0045B) + of "kjcy": Rune(0x0045C) + of "ubrcy": Rune(0x0045E) + of "dzcy": Rune(0x0045F) + of "ensp": Rune(0x02002) + of "emsp": Rune(0x02003) + of "emsp13": Rune(0x02004) + of "emsp14": Rune(0x02005) + of "numsp": Rune(0x02007) + of "puncsp": Rune(0x02008) + of "thinsp", "ThinSpace": Rune(0x02009) + of "hairsp", "VeryThinSpace": Rune(0x0200A) of "ZeroWidthSpace", "NegativeVeryThinSpace", "NegativeThinSpace", - "NegativeMediumSpace", "NegativeThickSpace": result = Rune(0x0200B) - of "zwnj": result = Rune(0x0200C) - of "zwj": result = Rune(0x0200D) - of "lrm": result = Rune(0x0200E) - of "rlm": result = Rune(0x0200F) - of "hyphen", "dash": result = Rune(0x02010) - of "ndash": result = Rune(0x02013) - of "mdash": result = Rune(0x02014) - of "horbar": result = Rune(0x02015) - of "Verbar", "Vert": result = Rune(0x02016) - of "lsquo", "OpenCurlyQuote": result = Rune(0x02018) - of "rsquo", "rsquor", "CloseCurlyQuote": result = Rune(0x02019) - of "lsquor", "sbquo": result = Rune(0x0201A) - of "ldquo", "OpenCurlyDoubleQuote": result = Rune(0x0201C) - of "rdquo", "rdquor", "CloseCurlyDoubleQuote": result = Rune(0x0201D) - of "ldquor", "bdquo": result = Rune(0x0201E) - of "dagger": result = Rune(0x02020) - of "Dagger", "ddagger": result = Rune(0x02021) - of "bull", "bullet": result = Rune(0x02022) - of "nldr": result = Rune(0x02025) - of "hellip", "mldr": result = Rune(0x02026) - of "permil": result = Rune(0x02030) - of "pertenk": result = Rune(0x02031) - of "prime": result = Rune(0x02032) - of "Prime": result = Rune(0x02033) - of "tprime": result = Rune(0x02034) - of "bprime", "backprime": result = Rune(0x02035) - of "lsaquo": result = Rune(0x02039) - of "rsaquo": result = Rune(0x0203A) - of "oline": result = Rune(0x0203E) - of "caret": result = Rune(0x02041) - of "hybull": result = Rune(0x02043) - of "frasl": result = Rune(0x02044) - of "bsemi": result = Rune(0x0204F) - of "qprime": result = Rune(0x02057) - of "MediumSpace": result = Rune(0x0205F) - of "NoBreak": result = Rune(0x02060) - of "ApplyFunction", "af": result = Rune(0x02061) - of "InvisibleTimes", "it": result = Rune(0x02062) - of "InvisibleComma", "ic": result = Rune(0x02063) - of "euro": result = Rune(0x020AC) - of "tdot", "TripleDot": result = Rune(0x020DB) - of "DotDot": result = Rune(0x020DC) - of "Copf", "complexes": result = Rune(0x02102) - of "incare": result = Rune(0x02105) - of "gscr": result = Rune(0x0210A) - of "hamilt", "HilbertSpace", "Hscr": result = Rune(0x0210B) - of "Hfr", "Poincareplane": result = Rune(0x0210C) - of "quaternions", "Hopf": result = Rune(0x0210D) - of "planckh": result = Rune(0x0210E) - of "planck", "hbar", "plankv", "hslash": result = Rune(0x0210F) - of "Iscr", "imagline": result = Rune(0x02110) - of "image", "Im", "imagpart", "Ifr": result = Rune(0x02111) - of "Lscr", "lagran", "Laplacetrf": result = Rune(0x02112) - of "ell": result = Rune(0x02113) - of "Nopf", "naturals": result = Rune(0x02115) - of "numero": result = Rune(0x02116) - of "copysr": result = Rune(0x02117) - of "weierp", "wp": result = Rune(0x02118) - of "Popf", "primes": result = Rune(0x02119) - of "rationals", "Qopf": result = Rune(0x0211A) - of "Rscr", "realine": result = Rune(0x0211B) - of "real", "Re", "realpart", "Rfr": result = Rune(0x0211C) - of "reals", "Ropf": result = Rune(0x0211D) - of "rx": result = Rune(0x0211E) - of "trade", "TRADE": result = Rune(0x02122) - of "integers", "Zopf": result = Rune(0x02124) - of "ohm": result = Rune(0x02126) - of "mho": result = Rune(0x02127) - of "Zfr", "zeetrf": result = Rune(0x02128) - of "iiota": result = Rune(0x02129) - of "angst": result = Rune(0x0212B) - of "bernou", "Bernoullis", "Bscr": result = Rune(0x0212C) - of "Cfr", "Cayleys": result = Rune(0x0212D) - of "escr": result = Rune(0x0212F) - of "Escr", "expectation": result = Rune(0x02130) - of "Fscr", "Fouriertrf": result = Rune(0x02131) - of "phmmat", "Mellintrf", "Mscr": result = Rune(0x02133) - of "order", "orderof", "oscr": result = Rune(0x02134) - of "alefsym", "aleph": result = Rune(0x02135) - of "beth": result = Rune(0x02136) - of "gimel": result = Rune(0x02137) - of "daleth": result = Rune(0x02138) - of "CapitalDifferentialD", "DD": result = Rune(0x02145) - of "DifferentialD", "dd": result = Rune(0x02146) - of "ExponentialE", "exponentiale", "ee": result = Rune(0x02147) - of "ImaginaryI", "ii": result = Rune(0x02148) - of "frac13": result = Rune(0x02153) - of "frac23": result = Rune(0x02154) - of "frac15": result = Rune(0x02155) - of "frac25": result = Rune(0x02156) - of "frac35": result = Rune(0x02157) - of "frac45": result = Rune(0x02158) - of "frac16": result = Rune(0x02159) - of "frac56": result = Rune(0x0215A) - of "frac18": result = Rune(0x0215B) - of "frac38": result = Rune(0x0215C) - of "frac58": result = Rune(0x0215D) - of "frac78": result = Rune(0x0215E) + "NegativeMediumSpace", "NegativeThickSpace": Rune(0x0200B) + of "zwnj": Rune(0x0200C) + of "zwj": Rune(0x0200D) + of "lrm": Rune(0x0200E) + of "rlm": Rune(0x0200F) + of "hyphen", "dash": Rune(0x02010) + of "ndash": Rune(0x02013) + of "mdash": Rune(0x02014) + of "horbar": Rune(0x02015) + of "Verbar", "Vert": Rune(0x02016) + of "lsquo", "OpenCurlyQuote": Rune(0x02018) + of "rsquo", "rsquor", "CloseCurlyQuote": Rune(0x02019) + of "lsquor", "sbquo": Rune(0x0201A) + of "ldquo", "OpenCurlyDoubleQuote": Rune(0x0201C) + of "rdquo", "rdquor", "CloseCurlyDoubleQuote": Rune(0x0201D) + of "ldquor", "bdquo": Rune(0x0201E) + of "dagger": Rune(0x02020) + of "Dagger", "ddagger": Rune(0x02021) + of "bull", "bullet": Rune(0x02022) + of "nldr": Rune(0x02025) + of "hellip", "mldr": Rune(0x02026) + of "permil": Rune(0x02030) + of "pertenk": Rune(0x02031) + of "prime": Rune(0x02032) + of "Prime": Rune(0x02033) + of "tprime": Rune(0x02034) + of "bprime", "backprime": Rune(0x02035) + of "lsaquo": Rune(0x02039) + of "rsaquo": Rune(0x0203A) + of "oline": Rune(0x0203E) + of "caret": Rune(0x02041) + of "hybull": Rune(0x02043) + of "frasl": Rune(0x02044) + of "bsemi": Rune(0x0204F) + of "qprime": Rune(0x02057) + of "MediumSpace": Rune(0x0205F) + of "NoBreak": Rune(0x02060) + of "ApplyFunction", "af": Rune(0x02061) + of "InvisibleTimes", "it": Rune(0x02062) + of "InvisibleComma", "ic": Rune(0x02063) + of "euro": Rune(0x020AC) + of "tdot", "TripleDot": Rune(0x020DB) + of "DotDot": Rune(0x020DC) + of "Copf", "complexes": Rune(0x02102) + of "incare": Rune(0x02105) + of "gscr": Rune(0x0210A) + of "hamilt", "HilbertSpace", "Hscr": Rune(0x0210B) + of "Hfr", "Poincareplane": Rune(0x0210C) + of "quaternions", "Hopf": Rune(0x0210D) + of "planckh": Rune(0x0210E) + of "planck", "hbar", "plankv", "hslash": Rune(0x0210F) + of "Iscr", "imagline": Rune(0x02110) + of "image", "Im", "imagpart", "Ifr": Rune(0x02111) + of "Lscr", "lagran", "Laplacetrf": Rune(0x02112) + of "ell": Rune(0x02113) + of "Nopf", "naturals": Rune(0x02115) + of "numero": Rune(0x02116) + of "copysr": Rune(0x02117) + of "weierp", "wp": Rune(0x02118) + of "Popf", "primes": Rune(0x02119) + of "rationals", "Qopf": Rune(0x0211A) + of "Rscr", "realine": Rune(0x0211B) + of "real", "Re", "realpart", "Rfr": Rune(0x0211C) + of "reals", "Ropf": Rune(0x0211D) + of "rx": Rune(0x0211E) + of "trade", "TRADE": Rune(0x02122) + of "integers", "Zopf": Rune(0x02124) + of "ohm": Rune(0x02126) + of "mho": Rune(0x02127) + of "Zfr", "zeetrf": Rune(0x02128) + of "iiota": Rune(0x02129) + of "angst": Rune(0x0212B) + of "bernou", "Bernoullis", "Bscr": Rune(0x0212C) + of "Cfr", "Cayleys": Rune(0x0212D) + of "escr": Rune(0x0212F) + of "Escr", "expectation": Rune(0x02130) + of "Fscr", "Fouriertrf": Rune(0x02131) + of "phmmat", "Mellintrf", "Mscr": Rune(0x02133) + of "order", "orderof", "oscr": Rune(0x02134) + of "alefsym", "aleph": Rune(0x02135) + of "beth": Rune(0x02136) + of "gimel": Rune(0x02137) + of "daleth": Rune(0x02138) + of "CapitalDifferentialD", "DD": Rune(0x02145) + of "DifferentialD", "dd": Rune(0x02146) + of "ExponentialE", "exponentiale", "ee": Rune(0x02147) + of "ImaginaryI", "ii": Rune(0x02148) + of "frac13": Rune(0x02153) + of "frac23": Rune(0x02154) + of "frac15": Rune(0x02155) + of "frac25": Rune(0x02156) + of "frac35": Rune(0x02157) + of "frac45": Rune(0x02158) + of "frac16": Rune(0x02159) + of "frac56": Rune(0x0215A) + of "frac18": Rune(0x0215B) + of "frac38": Rune(0x0215C) + of "frac58": Rune(0x0215D) + of "frac78": Rune(0x0215E) of "larr", "leftarrow", "LeftArrow", "slarr", - "ShortLeftArrow": result = Rune(0x02190) - of "uarr", "uparrow", "UpArrow", "ShortUpArrow": result = Rune(0x02191) + "ShortLeftArrow": Rune(0x02190) + of "uarr", "uparrow", "UpArrow", "ShortUpArrow": Rune(0x02191) of "rarr", "rightarrow", "RightArrow", "srarr", - "ShortRightArrow": result = Rune(0x02192) + "ShortRightArrow": Rune(0x02192) of "darr", "downarrow", "DownArrow", - "ShortDownArrow": result = Rune(0x02193) - of "harr", "leftrightarrow", "LeftRightArrow": result = Rune(0x02194) - of "varr", "updownarrow", "UpDownArrow": result = Rune(0x02195) - of "nwarr", "UpperLeftArrow", "nwarrow": result = Rune(0x02196) - of "nearr", "UpperRightArrow", "nearrow": result = Rune(0x02197) - of "searr", "searrow", "LowerRightArrow": result = Rune(0x02198) - of "swarr", "swarrow", "LowerLeftArrow": result = Rune(0x02199) - of "nlarr", "nleftarrow": result = Rune(0x0219A) - of "nrarr", "nrightarrow": result = Rune(0x0219B) - of "rarrw", "rightsquigarrow": result = Rune(0x0219D) - of "Larr", "twoheadleftarrow": result = Rune(0x0219E) - of "Uarr": result = Rune(0x0219F) - of "Rarr", "twoheadrightarrow": result = Rune(0x021A0) - of "Darr": result = Rune(0x021A1) - of "larrtl", "leftarrowtail": result = Rune(0x021A2) - of "rarrtl", "rightarrowtail": result = Rune(0x021A3) - of "LeftTeeArrow", "mapstoleft": result = Rune(0x021A4) - of "UpTeeArrow", "mapstoup": result = Rune(0x021A5) - of "map", "RightTeeArrow", "mapsto": result = Rune(0x021A6) - of "DownTeeArrow", "mapstodown": result = Rune(0x021A7) - of "larrhk", "hookleftarrow": result = Rune(0x021A9) - of "rarrhk", "hookrightarrow": result = Rune(0x021AA) - of "larrlp", "looparrowleft": result = Rune(0x021AB) - of "rarrlp", "looparrowright": result = Rune(0x021AC) - of "harrw", "leftrightsquigarrow": result = Rune(0x021AD) - of "nharr", "nleftrightarrow": result = Rune(0x021AE) - of "lsh", "Lsh": result = Rune(0x021B0) - of "rsh", "Rsh": result = Rune(0x021B1) - of "ldsh": result = Rune(0x021B2) - of "rdsh": result = Rune(0x021B3) - of "crarr": result = Rune(0x021B5) - of "cularr", "curvearrowleft": result = Rune(0x021B6) - of "curarr", "curvearrowright": result = Rune(0x021B7) - of "olarr", "circlearrowleft": result = Rune(0x021BA) - of "orarr", "circlearrowright": result = Rune(0x021BB) - of "lharu", "LeftVector", "leftharpoonup": result = Rune(0x021BC) - of "lhard", "leftharpoondown", "DownLeftVector": result = Rune(0x021BD) - of "uharr", "upharpoonright", "RightUpVector": result = Rune(0x021BE) - of "uharl", "upharpoonleft", "LeftUpVector": result = Rune(0x021BF) - of "rharu", "RightVector", "rightharpoonup": result = Rune(0x021C0) - of "rhard", "rightharpoondown", "DownRightVector": result = Rune(0x021C1) - of "dharr", "RightDownVector", "downharpoonright": result = Rune(0x021C2) - of "dharl", "LeftDownVector", "downharpoonleft": result = Rune(0x021C3) - of "rlarr", "rightleftarrows", "RightArrowLeftArrow": result = Rune(0x021C4) - of "udarr", "UpArrowDownArrow": result = Rune(0x021C5) - of "lrarr", "leftrightarrows", "LeftArrowRightArrow": result = Rune(0x021C6) - of "llarr", "leftleftarrows": result = Rune(0x021C7) - of "uuarr", "upuparrows": result = Rune(0x021C8) - of "rrarr", "rightrightarrows": result = Rune(0x021C9) - of "ddarr", "downdownarrows": result = Rune(0x021CA) + "ShortDownArrow": Rune(0x02193) + of "harr", "leftrightarrow", "LeftRightArrow": Rune(0x02194) + of "varr", "updownarrow", "UpDownArrow": Rune(0x02195) + of "nwarr", "UpperLeftArrow", "nwarrow": Rune(0x02196) + of "nearr", "UpperRightArrow", "nearrow": Rune(0x02197) + of "searr", "searrow", "LowerRightArrow": Rune(0x02198) + of "swarr", "swarrow", "LowerLeftArrow": Rune(0x02199) + of "nlarr", "nleftarrow": Rune(0x0219A) + of "nrarr", "nrightarrow": Rune(0x0219B) + of "rarrw", "rightsquigarrow": Rune(0x0219D) + of "Larr", "twoheadleftarrow": Rune(0x0219E) + of "Uarr": Rune(0x0219F) + of "Rarr", "twoheadrightarrow": Rune(0x021A0) + of "Darr": Rune(0x021A1) + of "larrtl", "leftarrowtail": Rune(0x021A2) + of "rarrtl", "rightarrowtail": Rune(0x021A3) + of "LeftTeeArrow", "mapstoleft": Rune(0x021A4) + of "UpTeeArrow", "mapstoup": Rune(0x021A5) + of "map", "RightTeeArrow", "mapsto": Rune(0x021A6) + of "DownTeeArrow", "mapstodown": Rune(0x021A7) + of "larrhk", "hookleftarrow": Rune(0x021A9) + of "rarrhk", "hookrightarrow": Rune(0x021AA) + of "larrlp", "looparrowleft": Rune(0x021AB) + of "rarrlp", "looparrowright": Rune(0x021AC) + of "harrw", "leftrightsquigarrow": Rune(0x021AD) + of "nharr", "nleftrightarrow": Rune(0x021AE) + of "lsh", "Lsh": Rune(0x021B0) + of "rsh", "Rsh": Rune(0x021B1) + of "ldsh": Rune(0x021B2) + of "rdsh": Rune(0x021B3) + of "crarr": Rune(0x021B5) + of "cularr", "curvearrowleft": Rune(0x021B6) + of "curarr", "curvearrowright": Rune(0x021B7) + of "olarr", "circlearrowleft": Rune(0x021BA) + of "orarr", "circlearrowright": Rune(0x021BB) + of "lharu", "LeftVector", "leftharpoonup": Rune(0x021BC) + of "lhard", "leftharpoondown", "DownLeftVector": Rune(0x021BD) + of "uharr", "upharpoonright", "RightUpVector": Rune(0x021BE) + of "uharl", "upharpoonleft", "LeftUpVector": Rune(0x021BF) + of "rharu", "RightVector", "rightharpoonup": Rune(0x021C0) + of "rhard", "rightharpoondown", "DownRightVector": Rune(0x021C1) + of "dharr", "RightDownVector", "downharpoonright": Rune(0x021C2) + of "dharl", "LeftDownVector", "downharpoonleft": Rune(0x021C3) + of "rlarr", "rightleftarrows", "RightArrowLeftArrow": Rune(0x021C4) + of "udarr", "UpArrowDownArrow": Rune(0x021C5) + of "lrarr", "leftrightarrows", "LeftArrowRightArrow": Rune(0x021C6) + of "llarr", "leftleftarrows": Rune(0x021C7) + of "uuarr", "upuparrows": Rune(0x021C8) + of "rrarr", "rightrightarrows": Rune(0x021C9) + of "ddarr", "downdownarrows": Rune(0x021CA) of "lrhar", "ReverseEquilibrium", - "leftrightharpoons": result = Rune(0x021CB) - of "rlhar", "rightleftharpoons", "Equilibrium": result = Rune(0x021CC) - of "nlArr", "nLeftarrow": result = Rune(0x021CD) - of "nhArr", "nLeftrightarrow": result = Rune(0x021CE) - of "nrArr", "nRightarrow": result = Rune(0x021CF) - of "lArr", "Leftarrow", "DoubleLeftArrow": result = Rune(0x021D0) - of "uArr", "Uparrow", "DoubleUpArrow": result = Rune(0x021D1) + "leftrightharpoons": Rune(0x021CB) + of "rlhar", "rightleftharpoons", "Equilibrium": Rune(0x021CC) + of "nlArr", "nLeftarrow": Rune(0x021CD) + of "nhArr", "nLeftrightarrow": Rune(0x021CE) + of "nrArr", "nRightarrow": Rune(0x021CF) + of "lArr", "Leftarrow", "DoubleLeftArrow": Rune(0x021D0) + of "uArr", "Uparrow", "DoubleUpArrow": Rune(0x021D1) of "rArr", "Rightarrow", "Implies", - "DoubleRightArrow": result = Rune(0x021D2) - of "dArr", "Downarrow", "DoubleDownArrow": result = Rune(0x021D3) + "DoubleRightArrow": Rune(0x021D2) + of "dArr", "Downarrow", "DoubleDownArrow": Rune(0x021D3) of "hArr", "Leftrightarrow", "DoubleLeftRightArrow", - "iff": result = Rune(0x021D4) - of "vArr", "Updownarrow", "DoubleUpDownArrow": result = Rune(0x021D5) - of "nwArr": result = Rune(0x021D6) - of "neArr": result = Rune(0x021D7) - of "seArr": result = Rune(0x021D8) - of "swArr": result = Rune(0x021D9) - of "lAarr", "Lleftarrow": result = Rune(0x021DA) - of "rAarr", "Rrightarrow": result = Rune(0x021DB) - of "zigrarr": result = Rune(0x021DD) - of "larrb", "LeftArrowBar": result = Rune(0x021E4) - of "rarrb", "RightArrowBar": result = Rune(0x021E5) - of "duarr", "DownArrowUpArrow": result = Rune(0x021F5) - of "loarr": result = Rune(0x021FD) - of "roarr": result = Rune(0x021FE) - of "hoarr": result = Rune(0x021FF) - of "forall", "ForAll": result = Rune(0x02200) - of "comp", "complement": result = Rune(0x02201) - of "part", "PartialD": result = Rune(0x02202) - of "exist", "Exists": result = Rune(0x02203) - of "nexist", "NotExists", "nexists": result = Rune(0x02204) - of "empty", "emptyset", "emptyv", "varnothing": result = Rune(0x02205) - of "nabla", "Del": result = Rune(0x02207) - of "isin", "isinv", "Element", "in": result = Rune(0x02208) - of "notin", "NotElement", "notinva": result = Rune(0x02209) - of "niv", "ReverseElement", "ni", "SuchThat": result = Rune(0x0220B) - of "notni", "notniva", "NotReverseElement": result = Rune(0x0220C) - of "prod", "Product": result = Rune(0x0220F) - of "coprod", "Coproduct": result = Rune(0x02210) - of "sum", "Sum": result = Rune(0x02211) - of "minus": result = Rune(0x02212) - of "mnplus", "mp", "MinusPlus": result = Rune(0x02213) - of "plusdo", "dotplus": result = Rune(0x02214) + "iff": Rune(0x021D4) + of "vArr", "Updownarrow", "DoubleUpDownArrow": Rune(0x021D5) + of "nwArr": Rune(0x021D6) + of "neArr": Rune(0x021D7) + of "seArr": Rune(0x021D8) + of "swArr": Rune(0x021D9) + of "lAarr", "Lleftarrow": Rune(0x021DA) + of "rAarr", "Rrightarrow": Rune(0x021DB) + of "zigrarr": Rune(0x021DD) + of "larrb", "LeftArrowBar": Rune(0x021E4) + of "rarrb", "RightArrowBar": Rune(0x021E5) + of "duarr", "DownArrowUpArrow": Rune(0x021F5) + of "loarr": Rune(0x021FD) + of "roarr": Rune(0x021FE) + of "hoarr": Rune(0x021FF) + of "forall", "ForAll": Rune(0x02200) + of "comp", "complement": Rune(0x02201) + of "part", "PartialD": Rune(0x02202) + of "exist", "Exists": Rune(0x02203) + of "nexist", "NotExists", "nexists": Rune(0x02204) + of "empty", "emptyset", "emptyv", "varnothing": Rune(0x02205) + of "nabla", "Del": Rune(0x02207) + of "isin", "isinv", "Element", "in": Rune(0x02208) + of "notin", "NotElement", "notinva": Rune(0x02209) + of "niv", "ReverseElement", "ni", "SuchThat": Rune(0x0220B) + of "notni", "notniva", "NotReverseElement": Rune(0x0220C) + of "prod", "Product": Rune(0x0220F) + of "coprod", "Coproduct": Rune(0x02210) + of "sum", "Sum": Rune(0x02211) + of "minus": Rune(0x02212) + of "mnplus", "mp", "MinusPlus": Rune(0x02213) + of "plusdo", "dotplus": Rune(0x02214) of "setmn", "setminus", "Backslash", "ssetmn", - "smallsetminus": result = Rune(0x02216) - of "lowast": result = Rune(0x02217) - of "compfn", "SmallCircle": result = Rune(0x02218) - of "radic", "Sqrt": result = Rune(0x0221A) + "smallsetminus": Rune(0x02216) + of "lowast": Rune(0x02217) + of "compfn", "SmallCircle": Rune(0x02218) + of "radic", "Sqrt": Rune(0x0221A) of "prop", "propto", "Proportional", "vprop", - "varpropto": result = Rune(0x0221D) - of "infin": result = Rune(0x0221E) - of "angrt": result = Rune(0x0221F) - of "ang", "angle": result = Rune(0x02220) - of "angmsd", "measuredangle": result = Rune(0x02221) - of "angsph": result = Rune(0x02222) - of "mid", "VerticalBar", "smid", "shortmid": result = Rune(0x02223) - of "nmid", "NotVerticalBar", "nsmid", "nshortmid": result = Rune(0x02224) + "varpropto": Rune(0x0221D) + of "infin": Rune(0x0221E) + of "angrt": Rune(0x0221F) + of "ang", "angle": Rune(0x02220) + of "angmsd", "measuredangle": Rune(0x02221) + of "angsph": Rune(0x02222) + of "mid", "VerticalBar", "smid", "shortmid": Rune(0x02223) + of "nmid", "NotVerticalBar", "nsmid", "nshortmid": Rune(0x02224) of "par", "parallel", "DoubleVerticalBar", "spar", - "shortparallel": result = Rune(0x02225) + "shortparallel": Rune(0x02225) of "npar", "nparallel", "NotDoubleVerticalBar", "nspar", - "nshortparallel": result = Rune(0x02226) - of "and", "wedge": result = Rune(0x02227) - of "or", "vee": result = Rune(0x02228) - of "cap": result = Rune(0x02229) - of "cup": result = Rune(0x0222A) - of "int", "Integral": result = Rune(0x0222B) - of "Int": result = Rune(0x0222C) - of "tint", "iiint": result = Rune(0x0222D) - of "conint", "oint", "ContourIntegral": result = Rune(0x0222E) - of "Conint", "DoubleContourIntegral": result = Rune(0x0222F) - of "Cconint": result = Rune(0x02230) - of "cwint": result = Rune(0x02231) - of "cwconint", "ClockwiseContourIntegral": result = Rune(0x02232) - of "awconint", "CounterClockwiseContourIntegral": result = Rune(0x02233) - of "there4", "therefore", "Therefore": result = Rune(0x02234) - of "becaus", "because", "Because": result = Rune(0x02235) - of "ratio": result = Rune(0x02236) - of "Colon", "Proportion": result = Rune(0x02237) - of "minusd", "dotminus": result = Rune(0x02238) - of "mDDot": result = Rune(0x0223A) - of "homtht": result = Rune(0x0223B) - of "sim", "Tilde", "thksim", "thicksim": result = Rune(0x0223C) - of "bsim", "backsim": result = Rune(0x0223D) - of "ac", "mstpos": result = Rune(0x0223E) - of "acd": result = Rune(0x0223F) - of "wreath", "VerticalTilde", "wr": result = Rune(0x02240) - of "nsim", "NotTilde": result = Rune(0x02241) - of "esim", "EqualTilde", "eqsim": result = Rune(0x02242) - of "sime", "TildeEqual", "simeq": result = Rune(0x02243) - of "nsime", "nsimeq", "NotTildeEqual": result = Rune(0x02244) - of "cong", "TildeFullEqual": result = Rune(0x02245) - of "simne": result = Rune(0x02246) - of "ncong", "NotTildeFullEqual": result = Rune(0x02247) + "nshortparallel": Rune(0x02226) + of "and", "wedge": Rune(0x02227) + of "or", "vee": Rune(0x02228) + of "cap": Rune(0x02229) + of "cup": Rune(0x0222A) + of "int", "Integral": Rune(0x0222B) + of "Int": Rune(0x0222C) + of "tint", "iiint": Rune(0x0222D) + of "conint", "oint", "ContourIntegral": Rune(0x0222E) + of "Conint", "DoubleContourIntegral": Rune(0x0222F) + of "Cconint": Rune(0x02230) + of "cwint": Rune(0x02231) + of "cwconint", "ClockwiseContourIntegral": Rune(0x02232) + of "awconint", "CounterClockwiseContourIntegral": Rune(0x02233) + of "there4", "therefore", "Therefore": Rune(0x02234) + of "becaus", "because", "Because": Rune(0x02235) + of "ratio": Rune(0x02236) + of "Colon", "Proportion": Rune(0x02237) + of "minusd", "dotminus": Rune(0x02238) + of "mDDot": Rune(0x0223A) + of "homtht": Rune(0x0223B) + of "sim", "Tilde", "thksim", "thicksim": Rune(0x0223C) + of "bsim", "backsim": Rune(0x0223D) + of "ac", "mstpos": Rune(0x0223E) + of "acd": Rune(0x0223F) + of "wreath", "VerticalTilde", "wr": Rune(0x02240) + of "nsim", "NotTilde": Rune(0x02241) + of "esim", "EqualTilde", "eqsim": Rune(0x02242) + of "sime", "TildeEqual", "simeq": Rune(0x02243) + of "nsime", "nsimeq", "NotTildeEqual": Rune(0x02244) + of "cong", "TildeFullEqual": Rune(0x02245) + of "simne": Rune(0x02246) + of "ncong", "NotTildeFullEqual": Rune(0x02247) of "asymp", "ap", "TildeTilde", "approx", "thkap", - "thickapprox": result = Rune(0x02248) - of "nap", "NotTildeTilde", "napprox": result = Rune(0x02249) - of "ape", "approxeq": result = Rune(0x0224A) - of "apid": result = Rune(0x0224B) - of "bcong", "backcong": result = Rune(0x0224C) - of "asympeq", "CupCap": result = Rune(0x0224D) - of "bump", "HumpDownHump", "Bumpeq": result = Rune(0x0224E) - of "bumpe", "HumpEqual", "bumpeq": result = Rune(0x0224F) - of "esdot", "DotEqual", "doteq": result = Rune(0x02250) - of "eDot", "doteqdot": result = Rune(0x02251) - of "efDot", "fallingdotseq": result = Rune(0x02252) - of "erDot", "risingdotseq": result = Rune(0x02253) - of "colone", "coloneq", "Assign": result = Rune(0x02254) - of "ecolon", "eqcolon": result = Rune(0x02255) - of "ecir", "eqcirc": result = Rune(0x02256) - of "cire", "circeq": result = Rune(0x02257) - of "wedgeq": result = Rune(0x02259) - of "veeeq": result = Rune(0x0225A) - of "trie", "triangleq": result = Rune(0x0225C) - of "equest", "questeq": result = Rune(0x0225F) - of "ne", "NotEqual": result = Rune(0x02260) - of "equiv", "Congruent": result = Rune(0x02261) - of "nequiv", "NotCongruent": result = Rune(0x02262) - of "le", "leq": result = Rune(0x02264) - of "ge", "GreaterEqual", "geq": result = Rune(0x02265) - of "lE", "LessFullEqual", "leqq": result = Rune(0x02266) - of "gE", "GreaterFullEqual", "geqq": result = Rune(0x02267) - of "lnE", "lneqq": result = Rune(0x02268) - of "gnE", "gneqq": result = Rune(0x02269) - of "Lt", "NestedLessLess", "ll": result = Rune(0x0226A) - of "Gt", "NestedGreaterGreater", "gg": result = Rune(0x0226B) - of "twixt", "between": result = Rune(0x0226C) - of "NotCupCap": result = Rune(0x0226D) - of "nlt", "NotLess", "nless": result = Rune(0x0226E) - of "ngt", "NotGreater", "ngtr": result = Rune(0x0226F) - of "nle", "NotLessEqual", "nleq": result = Rune(0x02270) - of "nge", "NotGreaterEqual", "ngeq": result = Rune(0x02271) - of "lsim", "LessTilde", "lesssim": result = Rune(0x02272) - of "gsim", "gtrsim", "GreaterTilde": result = Rune(0x02273) - of "nlsim", "NotLessTilde": result = Rune(0x02274) - of "ngsim", "NotGreaterTilde": result = Rune(0x02275) - of "lg", "lessgtr", "LessGreater": result = Rune(0x02276) - of "gl", "gtrless", "GreaterLess": result = Rune(0x02277) - of "ntlg", "NotLessGreater": result = Rune(0x02278) - of "ntgl", "NotGreaterLess": result = Rune(0x02279) - of "pr", "Precedes", "prec": result = Rune(0x0227A) - of "sc", "Succeeds", "succ": result = Rune(0x0227B) - of "prcue", "PrecedesSlantEqual", "preccurlyeq": result = Rune(0x0227C) - of "sccue", "SucceedsSlantEqual", "succcurlyeq": result = Rune(0x0227D) - of "prsim", "precsim", "PrecedesTilde": result = Rune(0x0227E) - of "scsim", "succsim", "SucceedsTilde": result = Rune(0x0227F) - of "npr", "nprec", "NotPrecedes": result = Rune(0x02280) - of "nsc", "nsucc", "NotSucceeds": result = Rune(0x02281) - of "sub", "subset": result = Rune(0x02282) - of "sup", "supset", "Superset": result = Rune(0x02283) - of "nsub": result = Rune(0x02284) - of "nsup": result = Rune(0x02285) - of "sube", "SubsetEqual", "subseteq": result = Rune(0x02286) - of "supe", "supseteq", "SupersetEqual": result = Rune(0x02287) - of "nsube", "nsubseteq", "NotSubsetEqual": result = Rune(0x02288) - of "nsupe", "nsupseteq", "NotSupersetEqual": result = Rune(0x02289) - of "subne", "subsetneq": result = Rune(0x0228A) - of "supne", "supsetneq": result = Rune(0x0228B) - of "cupdot": result = Rune(0x0228D) - of "uplus", "UnionPlus": result = Rune(0x0228E) - of "sqsub", "SquareSubset", "sqsubset": result = Rune(0x0228F) - of "sqsup", "SquareSuperset", "sqsupset": result = Rune(0x02290) - of "sqsube", "SquareSubsetEqual", "sqsubseteq": result = Rune(0x02291) - of "sqsupe", "SquareSupersetEqual", "sqsupseteq": result = Rune(0x02292) - of "sqcap", "SquareIntersection": result = Rune(0x02293) - of "sqcup", "SquareUnion": result = Rune(0x02294) - of "oplus", "CirclePlus": result = Rune(0x02295) - of "ominus", "CircleMinus": result = Rune(0x02296) - of "otimes", "CircleTimes": result = Rune(0x02297) - of "osol": result = Rune(0x02298) - of "odot", "CircleDot": result = Rune(0x02299) - of "ocir", "circledcirc": result = Rune(0x0229A) - of "oast", "circledast": result = Rune(0x0229B) - of "odash", "circleddash": result = Rune(0x0229D) - of "plusb", "boxplus": result = Rune(0x0229E) - of "minusb", "boxminus": result = Rune(0x0229F) - of "timesb", "boxtimes": result = Rune(0x022A0) - of "sdotb", "dotsquare": result = Rune(0x022A1) - of "vdash", "RightTee": result = Rune(0x022A2) - of "dashv", "LeftTee": result = Rune(0x022A3) - of "top", "DownTee": result = Rune(0x022A4) - of "bottom", "bot", "perp", "UpTee": result = Rune(0x022A5) - of "models": result = Rune(0x022A7) - of "vDash", "DoubleRightTee": result = Rune(0x022A8) - of "Vdash": result = Rune(0x022A9) - of "Vvdash": result = Rune(0x022AA) - of "VDash": result = Rune(0x022AB) - of "nvdash": result = Rune(0x022AC) - of "nvDash": result = Rune(0x022AD) - of "nVdash": result = Rune(0x022AE) - of "nVDash": result = Rune(0x022AF) - of "prurel": result = Rune(0x022B0) - of "vltri", "vartriangleleft", "LeftTriangle": result = Rune(0x022B2) - of "vrtri", "vartriangleright", "RightTriangle": result = Rune(0x022B3) - of "ltrie", "trianglelefteq", "LeftTriangleEqual": result = Rune(0x022B4) - of "rtrie", "trianglerighteq", "RightTriangleEqual": result = Rune(0x022B5) - of "origof": result = Rune(0x022B6) - of "imof": result = Rune(0x022B7) - of "mumap", "multimap": result = Rune(0x022B8) - of "hercon": result = Rune(0x022B9) - of "intcal", "intercal": result = Rune(0x022BA) - of "veebar": result = Rune(0x022BB) - of "barvee": result = Rune(0x022BD) - of "angrtvb": result = Rune(0x022BE) - of "lrtri": result = Rune(0x022BF) - of "xwedge", "Wedge", "bigwedge": result = Rune(0x022C0) - of "xvee", "Vee", "bigvee": result = Rune(0x022C1) - of "xcap", "Intersection", "bigcap": result = Rune(0x022C2) - of "xcup", "Union", "bigcup": result = Rune(0x022C3) - of "diam", "diamond", "Diamond": result = Rune(0x022C4) - of "sdot": result = Rune(0x022C5) - of "sstarf", "Star": result = Rune(0x022C6) - of "divonx", "divideontimes": result = Rune(0x022C7) - of "bowtie": result = Rune(0x022C8) - of "ltimes": result = Rune(0x022C9) - of "rtimes": result = Rune(0x022CA) - of "lthree", "leftthreetimes": result = Rune(0x022CB) - of "rthree", "rightthreetimes": result = Rune(0x022CC) - of "bsime", "backsimeq": result = Rune(0x022CD) - of "cuvee", "curlyvee": result = Rune(0x022CE) - of "cuwed", "curlywedge": result = Rune(0x022CF) - of "Sub", "Subset": result = Rune(0x022D0) - of "Sup", "Supset": result = Rune(0x022D1) - of "Cap": result = Rune(0x022D2) - of "Cup": result = Rune(0x022D3) - of "fork", "pitchfork": result = Rune(0x022D4) - of "epar": result = Rune(0x022D5) - of "ltdot", "lessdot": result = Rune(0x022D6) - of "gtdot", "gtrdot": result = Rune(0x022D7) - of "Ll": result = Rune(0x022D8) - of "Gg", "ggg": result = Rune(0x022D9) - of "leg", "LessEqualGreater", "lesseqgtr": result = Rune(0x022DA) - of "gel", "gtreqless", "GreaterEqualLess": result = Rune(0x022DB) - of "cuepr", "curlyeqprec": result = Rune(0x022DE) - of "cuesc", "curlyeqsucc": result = Rune(0x022DF) - of "nprcue", "NotPrecedesSlantEqual": result = Rune(0x022E0) - of "nsccue", "NotSucceedsSlantEqual": result = Rune(0x022E1) - of "nsqsube", "NotSquareSubsetEqual": result = Rune(0x022E2) - of "nsqsupe", "NotSquareSupersetEqual": result = Rune(0x022E3) - of "lnsim": result = Rune(0x022E6) - of "gnsim": result = Rune(0x022E7) - of "prnsim", "precnsim": result = Rune(0x022E8) - of "scnsim", "succnsim": result = Rune(0x022E9) - of "nltri", "ntriangleleft", "NotLeftTriangle": result = Rune(0x022EA) - of "nrtri", "ntriangleright", "NotRightTriangle": result = Rune(0x022EB) + "thickapprox": Rune(0x02248) + of "nap", "NotTildeTilde", "napprox": Rune(0x02249) + of "ape", "approxeq": Rune(0x0224A) + of "apid": Rune(0x0224B) + of "bcong", "backcong": Rune(0x0224C) + of "asympeq", "CupCap": Rune(0x0224D) + of "bump", "HumpDownHump", "Bumpeq": Rune(0x0224E) + of "bumpe", "HumpEqual", "bumpeq": Rune(0x0224F) + of "esdot", "DotEqual", "doteq": Rune(0x02250) + of "eDot", "doteqdot": Rune(0x02251) + of "efDot", "fallingdotseq": Rune(0x02252) + of "erDot", "risingdotseq": Rune(0x02253) + of "colone", "coloneq", "Assign": Rune(0x02254) + of "ecolon", "eqcolon": Rune(0x02255) + of "ecir", "eqcirc": Rune(0x02256) + of "cire", "circeq": Rune(0x02257) + of "wedgeq": Rune(0x02259) + of "veeeq": Rune(0x0225A) + of "trie", "triangleq": Rune(0x0225C) + of "equest", "questeq": Rune(0x0225F) + of "ne", "NotEqual": Rune(0x02260) + of "equiv", "Congruent": Rune(0x02261) + of "nequiv", "NotCongruent": Rune(0x02262) + of "le", "leq": Rune(0x02264) + of "ge", "GreaterEqual", "geq": Rune(0x02265) + of "lE", "LessFullEqual", "leqq": Rune(0x02266) + of "gE", "GreaterFullEqual", "geqq": Rune(0x02267) + of "lnE", "lneqq": Rune(0x02268) + of "gnE", "gneqq": Rune(0x02269) + of "Lt", "NestedLessLess", "ll": Rune(0x0226A) + of "Gt", "NestedGreaterGreater", "gg": Rune(0x0226B) + of "twixt", "between": Rune(0x0226C) + of "NotCupCap": Rune(0x0226D) + of "nlt", "NotLess", "nless": Rune(0x0226E) + of "ngt", "NotGreater", "ngtr": Rune(0x0226F) + of "nle", "NotLessEqual", "nleq": Rune(0x02270) + of "nge", "NotGreaterEqual", "ngeq": Rune(0x02271) + of "lsim", "LessTilde", "lesssim": Rune(0x02272) + of "gsim", "gtrsim", "GreaterTilde": Rune(0x02273) + of "nlsim", "NotLessTilde": Rune(0x02274) + of "ngsim", "NotGreaterTilde": Rune(0x02275) + of "lg", "lessgtr", "LessGreater": Rune(0x02276) + of "gl", "gtrless", "GreaterLess": Rune(0x02277) + of "ntlg", "NotLessGreater": Rune(0x02278) + of "ntgl", "NotGreaterLess": Rune(0x02279) + of "pr", "Precedes", "prec": Rune(0x0227A) + of "sc", "Succeeds", "succ": Rune(0x0227B) + of "prcue", "PrecedesSlantEqual", "preccurlyeq": Rune(0x0227C) + of "sccue", "SucceedsSlantEqual", "succcurlyeq": Rune(0x0227D) + of "prsim", "precsim", "PrecedesTilde": Rune(0x0227E) + of "scsim", "succsim", "SucceedsTilde": Rune(0x0227F) + of "npr", "nprec", "NotPrecedes": Rune(0x02280) + of "nsc", "nsucc", "NotSucceeds": Rune(0x02281) + of "sub", "subset": Rune(0x02282) + of "sup", "supset", "Superset": Rune(0x02283) + of "nsub": Rune(0x02284) + of "nsup": Rune(0x02285) + of "sube", "SubsetEqual", "subseteq": Rune(0x02286) + of "supe", "supseteq", "SupersetEqual": Rune(0x02287) + of "nsube", "nsubseteq", "NotSubsetEqual": Rune(0x02288) + of "nsupe", "nsupseteq", "NotSupersetEqual": Rune(0x02289) + of "subne", "subsetneq": Rune(0x0228A) + of "supne", "supsetneq": Rune(0x0228B) + of "cupdot": Rune(0x0228D) + of "uplus", "UnionPlus": Rune(0x0228E) + of "sqsub", "SquareSubset", "sqsubset": Rune(0x0228F) + of "sqsup", "SquareSuperset", "sqsupset": Rune(0x02290) + of "sqsube", "SquareSubsetEqual", "sqsubseteq": Rune(0x02291) + of "sqsupe", "SquareSupersetEqual", "sqsupseteq": Rune(0x02292) + of "sqcap", "SquareIntersection": Rune(0x02293) + of "sqcup", "SquareUnion": Rune(0x02294) + of "oplus", "CirclePlus": Rune(0x02295) + of "ominus", "CircleMinus": Rune(0x02296) + of "otimes", "CircleTimes": Rune(0x02297) + of "osol": Rune(0x02298) + of "odot", "CircleDot": Rune(0x02299) + of "ocir", "circledcirc": Rune(0x0229A) + of "oast", "circledast": Rune(0x0229B) + of "odash", "circleddash": Rune(0x0229D) + of "plusb", "boxplus": Rune(0x0229E) + of "minusb", "boxminus": Rune(0x0229F) + of "timesb", "boxtimes": Rune(0x022A0) + of "sdotb", "dotsquare": Rune(0x022A1) + of "vdash", "RightTee": Rune(0x022A2) + of "dashv", "LeftTee": Rune(0x022A3) + of "top", "DownTee": Rune(0x022A4) + of "bottom", "bot", "perp", "UpTee": Rune(0x022A5) + of "models": Rune(0x022A7) + of "vDash", "DoubleRightTee": Rune(0x022A8) + of "Vdash": Rune(0x022A9) + of "Vvdash": Rune(0x022AA) + of "VDash": Rune(0x022AB) + of "nvdash": Rune(0x022AC) + of "nvDash": Rune(0x022AD) + of "nVdash": Rune(0x022AE) + of "nVDash": Rune(0x022AF) + of "prurel": Rune(0x022B0) + of "vltri", "vartriangleleft", "LeftTriangle": Rune(0x022B2) + of "vrtri", "vartriangleright", "RightTriangle": Rune(0x022B3) + of "ltrie", "trianglelefteq", "LeftTriangleEqual": Rune(0x022B4) + of "rtrie", "trianglerighteq", "RightTriangleEqual": Rune(0x022B5) + of "origof": Rune(0x022B6) + of "imof": Rune(0x022B7) + of "mumap", "multimap": Rune(0x022B8) + of "hercon": Rune(0x022B9) + of "intcal", "intercal": Rune(0x022BA) + of "veebar": Rune(0x022BB) + of "barvee": Rune(0x022BD) + of "angrtvb": Rune(0x022BE) + of "lrtri": Rune(0x022BF) + of "xwedge", "Wedge", "bigwedge": Rune(0x022C0) + of "xvee", "Vee", "bigvee": Rune(0x022C1) + of "xcap", "Intersection", "bigcap": Rune(0x022C2) + of "xcup", "Union", "bigcup": Rune(0x022C3) + of "diam", "diamond", "Diamond": Rune(0x022C4) + of "sdot": Rune(0x022C5) + of "sstarf", "Star": Rune(0x022C6) + of "divonx", "divideontimes": Rune(0x022C7) + of "bowtie": Rune(0x022C8) + of "ltimes": Rune(0x022C9) + of "rtimes": Rune(0x022CA) + of "lthree", "leftthreetimes": Rune(0x022CB) + of "rthree", "rightthreetimes": Rune(0x022CC) + of "bsime", "backsimeq": Rune(0x022CD) + of "cuvee", "curlyvee": Rune(0x022CE) + of "cuwed", "curlywedge": Rune(0x022CF) + of "Sub", "Subset": Rune(0x022D0) + of "Sup", "Supset": Rune(0x022D1) + of "Cap": Rune(0x022D2) + of "Cup": Rune(0x022D3) + of "fork", "pitchfork": Rune(0x022D4) + of "epar": Rune(0x022D5) + of "ltdot", "lessdot": Rune(0x022D6) + of "gtdot", "gtrdot": Rune(0x022D7) + of "Ll": Rune(0x022D8) + of "Gg", "ggg": Rune(0x022D9) + of "leg", "LessEqualGreater", "lesseqgtr": Rune(0x022DA) + of "gel", "gtreqless", "GreaterEqualLess": Rune(0x022DB) + of "cuepr", "curlyeqprec": Rune(0x022DE) + of "cuesc", "curlyeqsucc": Rune(0x022DF) + of "nprcue", "NotPrecedesSlantEqual": Rune(0x022E0) + of "nsccue", "NotSucceedsSlantEqual": Rune(0x022E1) + of "nsqsube", "NotSquareSubsetEqual": Rune(0x022E2) + of "nsqsupe", "NotSquareSupersetEqual": Rune(0x022E3) + of "lnsim": Rune(0x022E6) + of "gnsim": Rune(0x022E7) + of "prnsim", "precnsim": Rune(0x022E8) + of "scnsim", "succnsim": Rune(0x022E9) + of "nltri", "ntriangleleft", "NotLeftTriangle": Rune(0x022EA) + of "nrtri", "ntriangleright", "NotRightTriangle": Rune(0x022EB) of "nltrie", "ntrianglelefteq", - "NotLeftTriangleEqual": result = Rune(0x022EC) + "NotLeftTriangleEqual": Rune(0x022EC) of "nrtrie", "ntrianglerighteq", - "NotRightTriangleEqual": result = Rune(0x022ED) - of "vellip": result = Rune(0x022EE) - of "ctdot": result = Rune(0x022EF) - of "utdot": result = Rune(0x022F0) - of "dtdot": result = Rune(0x022F1) - of "disin": result = Rune(0x022F2) - of "isinsv": result = Rune(0x022F3) - of "isins": result = Rune(0x022F4) - of "isindot": result = Rune(0x022F5) - of "notinvc": result = Rune(0x022F6) - of "notinvb": result = Rune(0x022F7) - of "isinE": result = Rune(0x022F9) - of "nisd": result = Rune(0x022FA) - of "xnis": result = Rune(0x022FB) - of "nis": result = Rune(0x022FC) - of "notnivc": result = Rune(0x022FD) - of "notnivb": result = Rune(0x022FE) - of "barwed", "barwedge": result = Rune(0x02305) - of "Barwed", "doublebarwedge": result = Rune(0x02306) - of "lceil", "LeftCeiling": result = Rune(0x02308) - of "rceil", "RightCeiling": result = Rune(0x02309) - of "lfloor", "LeftFloor": result = Rune(0x0230A) - of "rfloor", "RightFloor": result = Rune(0x0230B) - of "drcrop": result = Rune(0x0230C) - of "dlcrop": result = Rune(0x0230D) - of "urcrop": result = Rune(0x0230E) - of "ulcrop": result = Rune(0x0230F) - of "bnot": result = Rune(0x02310) - of "profline": result = Rune(0x02312) - of "profsurf": result = Rune(0x02313) - of "telrec": result = Rune(0x02315) - of "target": result = Rune(0x02316) - of "ulcorn", "ulcorner": result = Rune(0x0231C) - of "urcorn", "urcorner": result = Rune(0x0231D) - of "dlcorn", "llcorner": result = Rune(0x0231E) - of "drcorn", "lrcorner": result = Rune(0x0231F) - of "frown", "sfrown": result = Rune(0x02322) - of "smile", "ssmile": result = Rune(0x02323) - of "cylcty": result = Rune(0x0232D) - of "profalar": result = Rune(0x0232E) - of "topbot": result = Rune(0x02336) - of "ovbar": result = Rune(0x0233D) - of "solbar": result = Rune(0x0233F) - of "angzarr": result = Rune(0x0237C) - of "lmoust", "lmoustache": result = Rune(0x023B0) - of "rmoust", "rmoustache": result = Rune(0x023B1) - of "tbrk", "OverBracket": result = Rune(0x023B4) - of "bbrk", "UnderBracket": result = Rune(0x023B5) - of "bbrktbrk": result = Rune(0x023B6) - of "OverParenthesis": result = Rune(0x023DC) - of "UnderParenthesis": result = Rune(0x023DD) - of "OverBrace": result = Rune(0x023DE) - of "UnderBrace": result = Rune(0x023DF) - of "trpezium": result = Rune(0x023E2) - of "elinters": result = Rune(0x023E7) - of "blank": result = Rune(0x02423) - of "oS", "circledS": result = Rune(0x024C8) - of "boxh", "HorizontalLine": result = Rune(0x02500) - of "boxv": result = Rune(0x02502) - of "boxdr": result = Rune(0x0250C) - of "boxdl": result = Rune(0x02510) - of "boxur": result = Rune(0x02514) - of "boxul": result = Rune(0x02518) - of "boxvr": result = Rune(0x0251C) - of "boxvl": result = Rune(0x02524) - of "boxhd": result = Rune(0x0252C) - of "boxhu": result = Rune(0x02534) - of "boxvh": result = Rune(0x0253C) - of "boxH": result = Rune(0x02550) - of "boxV": result = Rune(0x02551) - of "boxdR": result = Rune(0x02552) - of "boxDr": result = Rune(0x02553) - of "boxDR": result = Rune(0x02554) - of "boxdL": result = Rune(0x02555) - of "boxDl": result = Rune(0x02556) - of "boxDL": result = Rune(0x02557) - of "boxuR": result = Rune(0x02558) - of "boxUr": result = Rune(0x02559) - of "boxUR": result = Rune(0x0255A) - of "boxuL": result = Rune(0x0255B) - of "boxUl": result = Rune(0x0255C) - of "boxUL": result = Rune(0x0255D) - of "boxvR": result = Rune(0x0255E) - of "boxVr": result = Rune(0x0255F) - of "boxVR": result = Rune(0x02560) - of "boxvL": result = Rune(0x02561) - of "boxVl": result = Rune(0x02562) - of "boxVL": result = Rune(0x02563) - of "boxHd": result = Rune(0x02564) - of "boxhD": result = Rune(0x02565) - of "boxHD": result = Rune(0x02566) - of "boxHu": result = Rune(0x02567) - of "boxhU": result = Rune(0x02568) - of "boxHU": result = Rune(0x02569) - of "boxvH": result = Rune(0x0256A) - of "boxVh": result = Rune(0x0256B) - of "boxVH": result = Rune(0x0256C) - of "uhblk": result = Rune(0x02580) - of "lhblk": result = Rune(0x02584) - of "block": result = Rune(0x02588) - of "blk14": result = Rune(0x02591) - of "blk12": result = Rune(0x02592) - of "blk34": result = Rune(0x02593) - of "squ", "square", "Square": result = Rune(0x025A1) + "NotRightTriangleEqual": Rune(0x022ED) + of "vellip": Rune(0x022EE) + of "ctdot": Rune(0x022EF) + of "utdot": Rune(0x022F0) + of "dtdot": Rune(0x022F1) + of "disin": Rune(0x022F2) + of "isinsv": Rune(0x022F3) + of "isins": Rune(0x022F4) + of "isindot": Rune(0x022F5) + of "notinvc": Rune(0x022F6) + of "notinvb": Rune(0x022F7) + of "isinE": Rune(0x022F9) + of "nisd": Rune(0x022FA) + of "xnis": Rune(0x022FB) + of "nis": Rune(0x022FC) + of "notnivc": Rune(0x022FD) + of "notnivb": Rune(0x022FE) + of "barwed", "barwedge": Rune(0x02305) + of "Barwed", "doublebarwedge": Rune(0x02306) + of "lceil", "LeftCeiling": Rune(0x02308) + of "rceil", "RightCeiling": Rune(0x02309) + of "lfloor", "LeftFloor": Rune(0x0230A) + of "rfloor", "RightFloor": Rune(0x0230B) + of "drcrop": Rune(0x0230C) + of "dlcrop": Rune(0x0230D) + of "urcrop": Rune(0x0230E) + of "ulcrop": Rune(0x0230F) + of "bnot": Rune(0x02310) + of "profline": Rune(0x02312) + of "profsurf": Rune(0x02313) + of "telrec": Rune(0x02315) + of "target": Rune(0x02316) + of "ulcorn", "ulcorner": Rune(0x0231C) + of "urcorn", "urcorner": Rune(0x0231D) + of "dlcorn", "llcorner": Rune(0x0231E) + of "drcorn", "lrcorner": Rune(0x0231F) + of "frown", "sfrown": Rune(0x02322) + of "smile", "ssmile": Rune(0x02323) + of "cylcty": Rune(0x0232D) + of "profalar": Rune(0x0232E) + of "topbot": Rune(0x02336) + of "ovbar": Rune(0x0233D) + of "solbar": Rune(0x0233F) + of "angzarr": Rune(0x0237C) + of "lmoust", "lmoustache": Rune(0x023B0) + of "rmoust", "rmoustache": Rune(0x023B1) + of "tbrk", "OverBracket": Rune(0x023B4) + of "bbrk", "UnderBracket": Rune(0x023B5) + of "bbrktbrk": Rune(0x023B6) + of "OverParenthesis": Rune(0x023DC) + of "UnderParenthesis": Rune(0x023DD) + of "OverBrace": Rune(0x023DE) + of "UnderBrace": Rune(0x023DF) + of "trpezium": Rune(0x023E2) + of "elinters": Rune(0x023E7) + of "blank": Rune(0x02423) + of "oS", "circledS": Rune(0x024C8) + of "boxh", "HorizontalLine": Rune(0x02500) + of "boxv": Rune(0x02502) + of "boxdr": Rune(0x0250C) + of "boxdl": Rune(0x02510) + of "boxur": Rune(0x02514) + of "boxul": Rune(0x02518) + of "boxvr": Rune(0x0251C) + of "boxvl": Rune(0x02524) + of "boxhd": Rune(0x0252C) + of "boxhu": Rune(0x02534) + of "boxvh": Rune(0x0253C) + of "boxH": Rune(0x02550) + of "boxV": Rune(0x02551) + of "boxdR": Rune(0x02552) + of "boxDr": Rune(0x02553) + of "boxDR": Rune(0x02554) + of "boxdL": Rune(0x02555) + of "boxDl": Rune(0x02556) + of "boxDL": Rune(0x02557) + of "boxuR": Rune(0x02558) + of "boxUr": Rune(0x02559) + of "boxUR": Rune(0x0255A) + of "boxuL": Rune(0x0255B) + of "boxUl": Rune(0x0255C) + of "boxUL": Rune(0x0255D) + of "boxvR": Rune(0x0255E) + of "boxVr": Rune(0x0255F) + of "boxVR": Rune(0x02560) + of "boxvL": Rune(0x02561) + of "boxVl": Rune(0x02562) + of "boxVL": Rune(0x02563) + of "boxHd": Rune(0x02564) + of "boxhD": Rune(0x02565) + of "boxHD": Rune(0x02566) + of "boxHu": Rune(0x02567) + of "boxhU": Rune(0x02568) + of "boxHU": Rune(0x02569) + of "boxvH": Rune(0x0256A) + of "boxVh": Rune(0x0256B) + of "boxVH": Rune(0x0256C) + of "uhblk": Rune(0x02580) + of "lhblk": Rune(0x02584) + of "block": Rune(0x02588) + of "blk14": Rune(0x02591) + of "blk12": Rune(0x02592) + of "blk34": Rune(0x02593) + of "squ", "square", "Square": Rune(0x025A1) of "squf", "squarf", "blacksquare", - "FilledVerySmallSquare": result = Rune(0x025AA) - of "EmptyVerySmallSquare": result = Rune(0x025AB) - of "rect": result = Rune(0x025AD) - of "marker": result = Rune(0x025AE) - of "fltns": result = Rune(0x025B1) - of "xutri", "bigtriangleup": result = Rune(0x025B3) - of "utrif", "blacktriangle": result = Rune(0x025B4) - of "utri", "triangle": result = Rune(0x025B5) - of "rtrif", "blacktriangleright": result = Rune(0x025B8) - of "rtri", "triangleright": result = Rune(0x025B9) - of "xdtri", "bigtriangledown": result = Rune(0x025BD) - of "dtrif", "blacktriangledown": result = Rune(0x025BE) - of "dtri", "triangledown": result = Rune(0x025BF) - of "ltrif", "blacktriangleleft": result = Rune(0x025C2) - of "ltri", "triangleleft": result = Rune(0x025C3) - of "loz", "lozenge": result = Rune(0x025CA) - of "cir": result = Rune(0x025CB) - of "tridot": result = Rune(0x025EC) - of "xcirc", "bigcirc": result = Rune(0x025EF) - of "ultri": result = Rune(0x025F8) - of "urtri": result = Rune(0x025F9) - of "lltri": result = Rune(0x025FA) - of "EmptySmallSquare": result = Rune(0x025FB) - of "FilledSmallSquare": result = Rune(0x025FC) - of "starf", "bigstar": result = Rune(0x02605) - of "star": result = Rune(0x02606) - of "phone": result = Rune(0x0260E) - of "female": result = Rune(0x02640) - of "male": result = Rune(0x02642) - of "spades", "spadesuit": result = Rune(0x02660) - of "clubs", "clubsuit": result = Rune(0x02663) - of "hearts", "heartsuit": result = Rune(0x02665) - of "diams", "diamondsuit": result = Rune(0x02666) - of "sung": result = Rune(0x0266A) - of "flat": result = Rune(0x0266D) - of "natur", "natural": result = Rune(0x0266E) - of "sharp": result = Rune(0x0266F) - of "check", "checkmark": result = Rune(0x02713) - of "cross": result = Rune(0x02717) - of "malt", "maltese": result = Rune(0x02720) - of "sext": result = Rune(0x02736) - of "VerticalSeparator": result = Rune(0x02758) - of "lbbrk": result = Rune(0x02772) - of "rbbrk": result = Rune(0x02773) - of "lobrk", "LeftDoubleBracket": result = Rune(0x027E6) - of "robrk", "RightDoubleBracket": result = Rune(0x027E7) - of "lang", "LeftAngleBracket", "langle": result = Rune(0x027E8) - of "rang", "RightAngleBracket", "rangle": result = Rune(0x027E9) - of "Lang": result = Rune(0x027EA) - of "Rang": result = Rune(0x027EB) - of "loang": result = Rune(0x027EC) - of "roang": result = Rune(0x027ED) - of "xlarr", "longleftarrow", "LongLeftArrow": result = Rune(0x027F5) - of "xrarr", "longrightarrow", "LongRightArrow": result = Rune(0x027F6) + "FilledVerySmallSquare": Rune(0x025AA) + of "EmptyVerySmallSquare": Rune(0x025AB) + of "rect": Rune(0x025AD) + of "marker": Rune(0x025AE) + of "fltns": Rune(0x025B1) + of "xutri", "bigtriangleup": Rune(0x025B3) + of "utrif", "blacktriangle": Rune(0x025B4) + of "utri", "triangle": Rune(0x025B5) + of "rtrif", "blacktriangleright": Rune(0x025B8) + of "rtri", "triangleright": Rune(0x025B9) + of "xdtri", "bigtriangledown": Rune(0x025BD) + of "dtrif", "blacktriangledown": Rune(0x025BE) + of "dtri", "triangledown": Rune(0x025BF) + of "ltrif", "blacktriangleleft": Rune(0x025C2) + of "ltri", "triangleleft": Rune(0x025C3) + of "loz", "lozenge": Rune(0x025CA) + of "cir": Rune(0x025CB) + of "tridot": Rune(0x025EC) + of "xcirc", "bigcirc": Rune(0x025EF) + of "ultri": Rune(0x025F8) + of "urtri": Rune(0x025F9) + of "lltri": Rune(0x025FA) + of "EmptySmallSquare": Rune(0x025FB) + of "FilledSmallSquare": Rune(0x025FC) + of "starf", "bigstar": Rune(0x02605) + of "star": Rune(0x02606) + of "phone": Rune(0x0260E) + of "female": Rune(0x02640) + of "male": Rune(0x02642) + of "spades", "spadesuit": Rune(0x02660) + of "clubs", "clubsuit": Rune(0x02663) + of "hearts", "heartsuit": Rune(0x02665) + of "diams", "diamondsuit": Rune(0x02666) + of "sung": Rune(0x0266A) + of "flat": Rune(0x0266D) + of "natur", "natural": Rune(0x0266E) + of "sharp": Rune(0x0266F) + of "check", "checkmark": Rune(0x02713) + of "cross": Rune(0x02717) + of "malt", "maltese": Rune(0x02720) + of "sext": Rune(0x02736) + of "VerticalSeparator": Rune(0x02758) + of "lbbrk": Rune(0x02772) + of "rbbrk": Rune(0x02773) + of "lobrk", "LeftDoubleBracket": Rune(0x027E6) + of "robrk", "RightDoubleBracket": Rune(0x027E7) + of "lang", "LeftAngleBracket", "langle": Rune(0x027E8) + of "rang", "RightAngleBracket", "rangle": Rune(0x027E9) + of "Lang": Rune(0x027EA) + of "Rang": Rune(0x027EB) + of "loang": Rune(0x027EC) + of "roang": Rune(0x027ED) + of "xlarr", "longleftarrow", "LongLeftArrow": Rune(0x027F5) + of "xrarr", "longrightarrow", "LongRightArrow": Rune(0x027F6) of "xharr", "longleftrightarrow", - "LongLeftRightArrow": result = Rune(0x027F7) - of "xlArr", "Longleftarrow", "DoubleLongLeftArrow": result = Rune(0x027F8) - of "xrArr", "Longrightarrow", "DoubleLongRightArrow": result = Rune(0x027F9) + "LongLeftRightArrow": Rune(0x027F7) + of "xlArr", "Longleftarrow", "DoubleLongLeftArrow": Rune(0x027F8) + of "xrArr", "Longrightarrow", "DoubleLongRightArrow": Rune(0x027F9) of "xhArr", "Longleftrightarrow", - "DoubleLongLeftRightArrow": result = Rune(0x027FA) - of "xmap", "longmapsto": result = Rune(0x027FC) - of "dzigrarr": result = Rune(0x027FF) - of "nvlArr": result = Rune(0x02902) - of "nvrArr": result = Rune(0x02903) - of "nvHarr": result = Rune(0x02904) - of "Map": result = Rune(0x02905) - of "lbarr": result = Rune(0x0290C) - of "rbarr", "bkarow": result = Rune(0x0290D) - of "lBarr": result = Rune(0x0290E) - of "rBarr", "dbkarow": result = Rune(0x0290F) - of "RBarr", "drbkarow": result = Rune(0x02910) - of "DDotrahd": result = Rune(0x02911) - of "UpArrowBar": result = Rune(0x02912) - of "DownArrowBar": result = Rune(0x02913) - of "Rarrtl": result = Rune(0x02916) - of "latail": result = Rune(0x02919) - of "ratail": result = Rune(0x0291A) - of "lAtail": result = Rune(0x0291B) - of "rAtail": result = Rune(0x0291C) - of "larrfs": result = Rune(0x0291D) - of "rarrfs": result = Rune(0x0291E) - of "larrbfs": result = Rune(0x0291F) - of "rarrbfs": result = Rune(0x02920) - of "nwarhk": result = Rune(0x02923) - of "nearhk": result = Rune(0x02924) - of "searhk", "hksearow": result = Rune(0x02925) - of "swarhk", "hkswarow": result = Rune(0x02926) - of "nwnear": result = Rune(0x02927) - of "nesear", "toea": result = Rune(0x02928) - of "seswar", "tosa": result = Rune(0x02929) - of "swnwar": result = Rune(0x0292A) - of "rarrc": result = Rune(0x02933) - of "cudarrr": result = Rune(0x02935) - of "ldca": result = Rune(0x02936) - of "rdca": result = Rune(0x02937) - of "cudarrl": result = Rune(0x02938) - of "larrpl": result = Rune(0x02939) - of "curarrm": result = Rune(0x0293C) - of "cularrp": result = Rune(0x0293D) - of "rarrpl": result = Rune(0x02945) - of "harrcir": result = Rune(0x02948) - of "Uarrocir": result = Rune(0x02949) - of "lurdshar": result = Rune(0x0294A) - of "ldrushar": result = Rune(0x0294B) - of "LeftRightVector": result = Rune(0x0294E) - of "RightUpDownVector": result = Rune(0x0294F) - of "DownLeftRightVector": result = Rune(0x02950) - of "LeftUpDownVector": result = Rune(0x02951) - of "LeftVectorBar": result = Rune(0x02952) - of "RightVectorBar": result = Rune(0x02953) - of "RightUpVectorBar": result = Rune(0x02954) - of "RightDownVectorBar": result = Rune(0x02955) - of "DownLeftVectorBar": result = Rune(0x02956) - of "DownRightVectorBar": result = Rune(0x02957) - of "LeftUpVectorBar": result = Rune(0x02958) - of "LeftDownVectorBar": result = Rune(0x02959) - of "LeftTeeVector": result = Rune(0x0295A) - of "RightTeeVector": result = Rune(0x0295B) - of "RightUpTeeVector": result = Rune(0x0295C) - of "RightDownTeeVector": result = Rune(0x0295D) - of "DownLeftTeeVector": result = Rune(0x0295E) - of "DownRightTeeVector": result = Rune(0x0295F) - of "LeftUpTeeVector": result = Rune(0x02960) - of "LeftDownTeeVector": result = Rune(0x02961) - of "lHar": result = Rune(0x02962) - of "uHar": result = Rune(0x02963) - of "rHar": result = Rune(0x02964) - of "dHar": result = Rune(0x02965) - of "luruhar": result = Rune(0x02966) - of "ldrdhar": result = Rune(0x02967) - of "ruluhar": result = Rune(0x02968) - of "rdldhar": result = Rune(0x02969) - of "lharul": result = Rune(0x0296A) - of "llhard": result = Rune(0x0296B) - of "rharul": result = Rune(0x0296C) - of "lrhard": result = Rune(0x0296D) - of "udhar", "UpEquilibrium": result = Rune(0x0296E) - of "duhar", "ReverseUpEquilibrium": result = Rune(0x0296F) - of "RoundImplies": result = Rune(0x02970) - of "erarr": result = Rune(0x02971) - of "simrarr": result = Rune(0x02972) - of "larrsim": result = Rune(0x02973) - of "rarrsim": result = Rune(0x02974) - of "rarrap": result = Rune(0x02975) - of "ltlarr": result = Rune(0x02976) - of "gtrarr": result = Rune(0x02978) - of "subrarr": result = Rune(0x02979) - of "suplarr": result = Rune(0x0297B) - of "lfisht": result = Rune(0x0297C) - of "rfisht": result = Rune(0x0297D) - of "ufisht": result = Rune(0x0297E) - of "dfisht": result = Rune(0x0297F) - of "lopar": result = Rune(0x02985) - of "ropar": result = Rune(0x02986) - of "lbrke": result = Rune(0x0298B) - of "rbrke": result = Rune(0x0298C) - of "lbrkslu": result = Rune(0x0298D) - of "rbrksld": result = Rune(0x0298E) - of "lbrksld": result = Rune(0x0298F) - of "rbrkslu": result = Rune(0x02990) - of "langd": result = Rune(0x02991) - of "rangd": result = Rune(0x02992) - of "lparlt": result = Rune(0x02993) - of "rpargt": result = Rune(0x02994) - of "gtlPar": result = Rune(0x02995) - of "ltrPar": result = Rune(0x02996) - of "vzigzag": result = Rune(0x0299A) - of "vangrt": result = Rune(0x0299C) - of "angrtvbd": result = Rune(0x0299D) - of "ange": result = Rune(0x029A4) - of "range": result = Rune(0x029A5) - of "dwangle": result = Rune(0x029A6) - of "uwangle": result = Rune(0x029A7) - of "angmsdaa": result = Rune(0x029A8) - of "angmsdab": result = Rune(0x029A9) - of "angmsdac": result = Rune(0x029AA) - of "angmsdad": result = Rune(0x029AB) - of "angmsdae": result = Rune(0x029AC) - of "angmsdaf": result = Rune(0x029AD) - of "angmsdag": result = Rune(0x029AE) - of "angmsdah": result = Rune(0x029AF) - of "bemptyv": result = Rune(0x029B0) - of "demptyv": result = Rune(0x029B1) - of "cemptyv": result = Rune(0x029B2) - of "raemptyv": result = Rune(0x029B3) - of "laemptyv": result = Rune(0x029B4) - of "ohbar": result = Rune(0x029B5) - of "omid": result = Rune(0x029B6) - of "opar": result = Rune(0x029B7) - of "operp": result = Rune(0x029B9) - of "olcross": result = Rune(0x029BB) - of "odsold": result = Rune(0x029BC) - of "olcir": result = Rune(0x029BE) - of "ofcir": result = Rune(0x029BF) - of "olt": result = Rune(0x029C0) - of "ogt": result = Rune(0x029C1) - of "cirscir": result = Rune(0x029C2) - of "cirE": result = Rune(0x029C3) - of "solb": result = Rune(0x029C4) - of "bsolb": result = Rune(0x029C5) - of "boxbox": result = Rune(0x029C9) - of "trisb": result = Rune(0x029CD) - of "rtriltri": result = Rune(0x029CE) - of "LeftTriangleBar": result = Rune(0x029CF) - of "RightTriangleBar": result = Rune(0x029D0) - of "race": result = Rune(0x029DA) - of "iinfin": result = Rune(0x029DC) - of "infintie": result = Rune(0x029DD) - of "nvinfin": result = Rune(0x029DE) - of "eparsl": result = Rune(0x029E3) - of "smeparsl": result = Rune(0x029E4) - of "eqvparsl": result = Rune(0x029E5) - of "lozf", "blacklozenge": result = Rune(0x029EB) - of "RuleDelayed": result = Rune(0x029F4) - of "dsol": result = Rune(0x029F6) - of "xodot", "bigodot": result = Rune(0x02A00) - of "xoplus", "bigoplus": result = Rune(0x02A01) - of "xotime", "bigotimes": result = Rune(0x02A02) - of "xuplus", "biguplus": result = Rune(0x02A04) - of "xsqcup", "bigsqcup": result = Rune(0x02A06) - of "qint", "iiiint": result = Rune(0x02A0C) - of "fpartint": result = Rune(0x02A0D) - of "cirfnint": result = Rune(0x02A10) - of "awint": result = Rune(0x02A11) - of "rppolint": result = Rune(0x02A12) - of "scpolint": result = Rune(0x02A13) - of "npolint": result = Rune(0x02A14) - of "pointint": result = Rune(0x02A15) - of "quatint": result = Rune(0x02A16) - of "intlarhk": result = Rune(0x02A17) - of "pluscir": result = Rune(0x02A22) - of "plusacir": result = Rune(0x02A23) - of "simplus": result = Rune(0x02A24) - of "plusdu": result = Rune(0x02A25) - of "plussim": result = Rune(0x02A26) - of "plustwo": result = Rune(0x02A27) - of "mcomma": result = Rune(0x02A29) - of "minusdu": result = Rune(0x02A2A) - of "loplus": result = Rune(0x02A2D) - of "roplus": result = Rune(0x02A2E) - of "Cross": result = Rune(0x02A2F) - of "timesd": result = Rune(0x02A30) - of "timesbar": result = Rune(0x02A31) - of "smashp": result = Rune(0x02A33) - of "lotimes": result = Rune(0x02A34) - of "rotimes": result = Rune(0x02A35) - of "otimesas": result = Rune(0x02A36) - of "Otimes": result = Rune(0x02A37) - of "odiv": result = Rune(0x02A38) - of "triplus": result = Rune(0x02A39) - of "triminus": result = Rune(0x02A3A) - of "tritime": result = Rune(0x02A3B) - of "iprod", "intprod": result = Rune(0x02A3C) - of "amalg": result = Rune(0x02A3F) - of "capdot": result = Rune(0x02A40) - of "ncup": result = Rune(0x02A42) - of "ncap": result = Rune(0x02A43) - of "capand": result = Rune(0x02A44) - of "cupor": result = Rune(0x02A45) - of "cupcap": result = Rune(0x02A46) - of "capcup": result = Rune(0x02A47) - of "cupbrcap": result = Rune(0x02A48) - of "capbrcup": result = Rune(0x02A49) - of "cupcup": result = Rune(0x02A4A) - of "capcap": result = Rune(0x02A4B) - of "ccups": result = Rune(0x02A4C) - of "ccaps": result = Rune(0x02A4D) - of "ccupssm": result = Rune(0x02A50) - of "And": result = Rune(0x02A53) - of "Or": result = Rune(0x02A54) - of "andand": result = Rune(0x02A55) - of "oror": result = Rune(0x02A56) - of "orslope": result = Rune(0x02A57) - of "andslope": result = Rune(0x02A58) - of "andv": result = Rune(0x02A5A) - of "orv": result = Rune(0x02A5B) - of "andd": result = Rune(0x02A5C) - of "ord": result = Rune(0x02A5D) - of "wedbar": result = Rune(0x02A5F) - of "sdote": result = Rune(0x02A66) - of "simdot": result = Rune(0x02A6A) - of "congdot": result = Rune(0x02A6D) - of "easter": result = Rune(0x02A6E) - of "apacir": result = Rune(0x02A6F) - of "apE": result = Rune(0x02A70) - of "eplus": result = Rune(0x02A71) - of "pluse": result = Rune(0x02A72) - of "Esim": result = Rune(0x02A73) - of "Colone": result = Rune(0x02A74) - of "Equal": result = Rune(0x02A75) - of "eDDot", "ddotseq": result = Rune(0x02A77) - of "equivDD": result = Rune(0x02A78) - of "ltcir": result = Rune(0x02A79) - of "gtcir": result = Rune(0x02A7A) - of "ltquest": result = Rune(0x02A7B) - of "gtquest": result = Rune(0x02A7C) - of "les", "LessSlantEqual", "leqslant": result = Rune(0x02A7D) - of "ges", "GreaterSlantEqual", "geqslant": result = Rune(0x02A7E) - of "lesdot": result = Rune(0x02A7F) - of "gesdot": result = Rune(0x02A80) - of "lesdoto": result = Rune(0x02A81) - of "gesdoto": result = Rune(0x02A82) - of "lesdotor": result = Rune(0x02A83) - of "gesdotol": result = Rune(0x02A84) - of "lap", "lessapprox": result = Rune(0x02A85) - of "gap", "gtrapprox": result = Rune(0x02A86) - of "lne", "lneq": result = Rune(0x02A87) - of "gne", "gneq": result = Rune(0x02A88) - of "lnap", "lnapprox": result = Rune(0x02A89) - of "gnap", "gnapprox": result = Rune(0x02A8A) - of "lEg", "lesseqqgtr": result = Rune(0x02A8B) - of "gEl", "gtreqqless": result = Rune(0x02A8C) - of "lsime": result = Rune(0x02A8D) - of "gsime": result = Rune(0x02A8E) - of "lsimg": result = Rune(0x02A8F) - of "gsiml": result = Rune(0x02A90) - of "lgE": result = Rune(0x02A91) - of "glE": result = Rune(0x02A92) - of "lesges": result = Rune(0x02A93) - of "gesles": result = Rune(0x02A94) - of "els", "eqslantless": result = Rune(0x02A95) - of "egs", "eqslantgtr": result = Rune(0x02A96) - of "elsdot": result = Rune(0x02A97) - of "egsdot": result = Rune(0x02A98) - of "el": result = Rune(0x02A99) - of "eg": result = Rune(0x02A9A) - of "siml": result = Rune(0x02A9D) - of "simg": result = Rune(0x02A9E) - of "simlE": result = Rune(0x02A9F) - of "simgE": result = Rune(0x02AA0) - of "LessLess": result = Rune(0x02AA1) - of "GreaterGreater": result = Rune(0x02AA2) - of "glj": result = Rune(0x02AA4) - of "gla": result = Rune(0x02AA5) - of "ltcc": result = Rune(0x02AA6) - of "gtcc": result = Rune(0x02AA7) - of "lescc": result = Rune(0x02AA8) - of "gescc": result = Rune(0x02AA9) - of "smt": result = Rune(0x02AAA) - of "lat": result = Rune(0x02AAB) - of "smte": result = Rune(0x02AAC) - of "late": result = Rune(0x02AAD) - of "bumpE": result = Rune(0x02AAE) - of "pre", "preceq", "PrecedesEqual": result = Rune(0x02AAF) - of "sce", "succeq", "SucceedsEqual": result = Rune(0x02AB0) - of "prE": result = Rune(0x02AB3) - of "scE": result = Rune(0x02AB4) - of "prnE", "precneqq": result = Rune(0x02AB5) - of "scnE", "succneqq": result = Rune(0x02AB6) - of "prap", "precapprox": result = Rune(0x02AB7) - of "scap", "succapprox": result = Rune(0x02AB8) - of "prnap", "precnapprox": result = Rune(0x02AB9) - of "scnap", "succnapprox": result = Rune(0x02ABA) - of "Pr": result = Rune(0x02ABB) - of "Sc": result = Rune(0x02ABC) - of "subdot": result = Rune(0x02ABD) - of "supdot": result = Rune(0x02ABE) - of "subplus": result = Rune(0x02ABF) - of "supplus": result = Rune(0x02AC0) - of "submult": result = Rune(0x02AC1) - of "supmult": result = Rune(0x02AC2) - of "subedot": result = Rune(0x02AC3) - of "supedot": result = Rune(0x02AC4) - of "subE", "subseteqq": result = Rune(0x02AC5) - of "supE", "supseteqq": result = Rune(0x02AC6) - of "subsim": result = Rune(0x02AC7) - of "supsim": result = Rune(0x02AC8) - of "subnE", "subsetneqq": result = Rune(0x02ACB) - of "supnE", "supsetneqq": result = Rune(0x02ACC) - of "csub": result = Rune(0x02ACF) - of "csup": result = Rune(0x02AD0) - of "csube": result = Rune(0x02AD1) - of "csupe": result = Rune(0x02AD2) - of "subsup": result = Rune(0x02AD3) - of "supsub": result = Rune(0x02AD4) - of "subsub": result = Rune(0x02AD5) - of "supsup": result = Rune(0x02AD6) - of "suphsub": result = Rune(0x02AD7) - of "supdsub": result = Rune(0x02AD8) - of "forkv": result = Rune(0x02AD9) - of "topfork": result = Rune(0x02ADA) - of "mlcp": result = Rune(0x02ADB) - of "Dashv", "DoubleLeftTee": result = Rune(0x02AE4) - of "Vdashl": result = Rune(0x02AE6) - of "Barv": result = Rune(0x02AE7) - of "vBar": result = Rune(0x02AE8) - of "vBarv": result = Rune(0x02AE9) - of "Vbar": result = Rune(0x02AEB) - of "Not": result = Rune(0x02AEC) - of "bNot": result = Rune(0x02AED) - of "rnmid": result = Rune(0x02AEE) - of "cirmid": result = Rune(0x02AEF) - of "midcir": result = Rune(0x02AF0) - of "topcir": result = Rune(0x02AF1) - of "nhpar": result = Rune(0x02AF2) - of "parsim": result = Rune(0x02AF3) - of "parsl": result = Rune(0x02AFD) - of "fflig": result = Rune(0x0FB00) - of "filig": result = Rune(0x0FB01) - of "fllig": result = Rune(0x0FB02) - of "ffilig": result = Rune(0x0FB03) - of "ffllig": result = Rune(0x0FB04) - of "Ascr": result = Rune(0x1D49C) - of "Cscr": result = Rune(0x1D49E) - of "Dscr": result = Rune(0x1D49F) - of "Gscr": result = Rune(0x1D4A2) - of "Jscr": result = Rune(0x1D4A5) - of "Kscr": result = Rune(0x1D4A6) - of "Nscr": result = Rune(0x1D4A9) - of "Oscr": result = Rune(0x1D4AA) - of "Pscr": result = Rune(0x1D4AB) - of "Qscr": result = Rune(0x1D4AC) - of "Sscr": result = Rune(0x1D4AE) - of "Tscr": result = Rune(0x1D4AF) - of "Uscr": result = Rune(0x1D4B0) - of "Vscr": result = Rune(0x1D4B1) - of "Wscr": result = Rune(0x1D4B2) - of "Xscr": result = Rune(0x1D4B3) - of "Yscr": result = Rune(0x1D4B4) - of "Zscr": result = Rune(0x1D4B5) - of "ascr": result = Rune(0x1D4B6) - of "bscr": result = Rune(0x1D4B7) - of "cscr": result = Rune(0x1D4B8) - of "dscr": result = Rune(0x1D4B9) - of "fscr": result = Rune(0x1D4BB) - of "hscr": result = Rune(0x1D4BD) - of "iscr": result = Rune(0x1D4BE) - of "jscr": result = Rune(0x1D4BF) - of "kscr": result = Rune(0x1D4C0) - of "lscr": result = Rune(0x1D4C1) - of "mscr": result = Rune(0x1D4C2) - of "nscr": result = Rune(0x1D4C3) - of "pscr": result = Rune(0x1D4C5) - of "qscr": result = Rune(0x1D4C6) - of "rscr": result = Rune(0x1D4C7) - of "sscr": result = Rune(0x1D4C8) - of "tscr": result = Rune(0x1D4C9) - of "uscr": result = Rune(0x1D4CA) - of "vscr": result = Rune(0x1D4CB) - of "wscr": result = Rune(0x1D4CC) - of "xscr": result = Rune(0x1D4CD) - of "yscr": result = Rune(0x1D4CE) - of "zscr": result = Rune(0x1D4CF) - of "Afr": result = Rune(0x1D504) - of "Bfr": result = Rune(0x1D505) - of "Dfr": result = Rune(0x1D507) - of "Efr": result = Rune(0x1D508) - of "Ffr": result = Rune(0x1D509) - of "Gfr": result = Rune(0x1D50A) - of "Jfr": result = Rune(0x1D50D) - of "Kfr": result = Rune(0x1D50E) - of "Lfr": result = Rune(0x1D50F) - of "Mfr": result = Rune(0x1D510) - of "Nfr": result = Rune(0x1D511) - of "Ofr": result = Rune(0x1D512) - of "Pfr": result = Rune(0x1D513) - of "Qfr": result = Rune(0x1D514) - of "Sfr": result = Rune(0x1D516) - of "Tfr": result = Rune(0x1D517) - of "Ufr": result = Rune(0x1D518) - of "Vfr": result = Rune(0x1D519) - of "Wfr": result = Rune(0x1D51A) - of "Xfr": result = Rune(0x1D51B) - of "Yfr": result = Rune(0x1D51C) - of "afr": result = Rune(0x1D51E) - of "bfr": result = Rune(0x1D51F) - of "cfr": result = Rune(0x1D520) - of "dfr": result = Rune(0x1D521) - of "efr": result = Rune(0x1D522) - of "ffr": result = Rune(0x1D523) - of "gfr": result = Rune(0x1D524) - of "hfr": result = Rune(0x1D525) - of "ifr": result = Rune(0x1D526) - of "jfr": result = Rune(0x1D527) - of "kfr": result = Rune(0x1D528) - of "lfr": result = Rune(0x1D529) - of "mfr": result = Rune(0x1D52A) - of "nfr": result = Rune(0x1D52B) - of "ofr": result = Rune(0x1D52C) - of "pfr": result = Rune(0x1D52D) - of "qfr": result = Rune(0x1D52E) - of "rfr": result = Rune(0x1D52F) - of "sfr": result = Rune(0x1D530) - of "tfr": result = Rune(0x1D531) - of "ufr": result = Rune(0x1D532) - of "vfr": result = Rune(0x1D533) - of "wfr": result = Rune(0x1D534) - of "xfr": result = Rune(0x1D535) - of "yfr": result = Rune(0x1D536) - of "zfr": result = Rune(0x1D537) - of "Aopf": result = Rune(0x1D538) - of "Bopf": result = Rune(0x1D539) - of "Dopf": result = Rune(0x1D53B) - of "Eopf": result = Rune(0x1D53C) - of "Fopf": result = Rune(0x1D53D) - of "Gopf": result = Rune(0x1D53E) - of "Iopf": result = Rune(0x1D540) - of "Jopf": result = Rune(0x1D541) - of "Kopf": result = Rune(0x1D542) - of "Lopf": result = Rune(0x1D543) - of "Mopf": result = Rune(0x1D544) - of "Oopf": result = Rune(0x1D546) - of "Sopf": result = Rune(0x1D54A) - of "Topf": result = Rune(0x1D54B) - of "Uopf": result = Rune(0x1D54C) - of "Vopf": result = Rune(0x1D54D) - of "Wopf": result = Rune(0x1D54E) - of "Xopf": result = Rune(0x1D54F) - of "Yopf": result = Rune(0x1D550) - of "aopf": result = Rune(0x1D552) - of "bopf": result = Rune(0x1D553) - of "copf": result = Rune(0x1D554) - of "dopf": result = Rune(0x1D555) - of "eopf": result = Rune(0x1D556) - of "fopf": result = Rune(0x1D557) - of "gopf": result = Rune(0x1D558) - of "hopf": result = Rune(0x1D559) - of "iopf": result = Rune(0x1D55A) - of "jopf": result = Rune(0x1D55B) - of "kopf": result = Rune(0x1D55C) - of "lopf": result = Rune(0x1D55D) - of "mopf": result = Rune(0x1D55E) - of "nopf": result = Rune(0x1D55F) - of "oopf": result = Rune(0x1D560) - of "popf": result = Rune(0x1D561) - of "qopf": result = Rune(0x1D562) - of "ropf": result = Rune(0x1D563) - of "sopf": result = Rune(0x1D564) - of "topf": result = Rune(0x1D565) - of "uopf": result = Rune(0x1D566) - of "vopf": result = Rune(0x1D567) - of "wopf": result = Rune(0x1D568) - of "xopf": result = Rune(0x1D569) - of "yopf": result = Rune(0x1D56A) - of "zopf": result = Rune(0x1D56B) - else: discard + "DoubleLongLeftRightArrow": Rune(0x027FA) + of "xmap", "longmapsto": Rune(0x027FC) + of "dzigrarr": Rune(0x027FF) + of "nvlArr": Rune(0x02902) + of "nvrArr": Rune(0x02903) + of "nvHarr": Rune(0x02904) + of "Map": Rune(0x02905) + of "lbarr": Rune(0x0290C) + of "rbarr", "bkarow": Rune(0x0290D) + of "lBarr": Rune(0x0290E) + of "rBarr", "dbkarow": Rune(0x0290F) + of "RBarr", "drbkarow": Rune(0x02910) + of "DDotrahd": Rune(0x02911) + of "UpArrowBar": Rune(0x02912) + of "DownArrowBar": Rune(0x02913) + of "Rarrtl": Rune(0x02916) + of "latail": Rune(0x02919) + of "ratail": Rune(0x0291A) + of "lAtail": Rune(0x0291B) + of "rAtail": Rune(0x0291C) + of "larrfs": Rune(0x0291D) + of "rarrfs": Rune(0x0291E) + of "larrbfs": Rune(0x0291F) + of "rarrbfs": Rune(0x02920) + of "nwarhk": Rune(0x02923) + of "nearhk": Rune(0x02924) + of "searhk", "hksearow": Rune(0x02925) + of "swarhk", "hkswarow": Rune(0x02926) + of "nwnear": Rune(0x02927) + of "nesear", "toea": Rune(0x02928) + of "seswar", "tosa": Rune(0x02929) + of "swnwar": Rune(0x0292A) + of "rarrc": Rune(0x02933) + of "cudarrr": Rune(0x02935) + of "ldca": Rune(0x02936) + of "rdca": Rune(0x02937) + of "cudarrl": Rune(0x02938) + of "larrpl": Rune(0x02939) + of "curarrm": Rune(0x0293C) + of "cularrp": Rune(0x0293D) + of "rarrpl": Rune(0x02945) + of "harrcir": Rune(0x02948) + of "Uarrocir": Rune(0x02949) + of "lurdshar": Rune(0x0294A) + of "ldrushar": Rune(0x0294B) + of "LeftRightVector": Rune(0x0294E) + of "RightUpDownVector": Rune(0x0294F) + of "DownLeftRightVector": Rune(0x02950) + of "LeftUpDownVector": Rune(0x02951) + of "LeftVectorBar": Rune(0x02952) + of "RightVectorBar": Rune(0x02953) + of "RightUpVectorBar": Rune(0x02954) + of "RightDownVectorBar": Rune(0x02955) + of "DownLeftVectorBar": Rune(0x02956) + of "DownRightVectorBar": Rune(0x02957) + of "LeftUpVectorBar": Rune(0x02958) + of "LeftDownVectorBar": Rune(0x02959) + of "LeftTeeVector": Rune(0x0295A) + of "RightTeeVector": Rune(0x0295B) + of "RightUpTeeVector": Rune(0x0295C) + of "RightDownTeeVector": Rune(0x0295D) + of "DownLeftTeeVector": Rune(0x0295E) + of "DownRightTeeVector": Rune(0x0295F) + of "LeftUpTeeVector": Rune(0x02960) + of "LeftDownTeeVector": Rune(0x02961) + of "lHar": Rune(0x02962) + of "uHar": Rune(0x02963) + of "rHar": Rune(0x02964) + of "dHar": Rune(0x02965) + of "luruhar": Rune(0x02966) + of "ldrdhar": Rune(0x02967) + of "ruluhar": Rune(0x02968) + of "rdldhar": Rune(0x02969) + of "lharul": Rune(0x0296A) + of "llhard": Rune(0x0296B) + of "rharul": Rune(0x0296C) + of "lrhard": Rune(0x0296D) + of "udhar", "UpEquilibrium": Rune(0x0296E) + of "duhar", "ReverseUpEquilibrium": Rune(0x0296F) + of "RoundImplies": Rune(0x02970) + of "erarr": Rune(0x02971) + of "simrarr": Rune(0x02972) + of "larrsim": Rune(0x02973) + of "rarrsim": Rune(0x02974) + of "rarrap": Rune(0x02975) + of "ltlarr": Rune(0x02976) + of "gtrarr": Rune(0x02978) + of "subrarr": Rune(0x02979) + of "suplarr": Rune(0x0297B) + of "lfisht": Rune(0x0297C) + of "rfisht": Rune(0x0297D) + of "ufisht": Rune(0x0297E) + of "dfisht": Rune(0x0297F) + of "lopar": Rune(0x02985) + of "ropar": Rune(0x02986) + of "lbrke": Rune(0x0298B) + of "rbrke": Rune(0x0298C) + of "lbrkslu": Rune(0x0298D) + of "rbrksld": Rune(0x0298E) + of "lbrksld": Rune(0x0298F) + of "rbrkslu": Rune(0x02990) + of "langd": Rune(0x02991) + of "rangd": Rune(0x02992) + of "lparlt": Rune(0x02993) + of "rpargt": Rune(0x02994) + of "gtlPar": Rune(0x02995) + of "ltrPar": Rune(0x02996) + of "vzigzag": Rune(0x0299A) + of "vangrt": Rune(0x0299C) + of "angrtvbd": Rune(0x0299D) + of "ange": Rune(0x029A4) + of "range": Rune(0x029A5) + of "dwangle": Rune(0x029A6) + of "uwangle": Rune(0x029A7) + of "angmsdaa": Rune(0x029A8) + of "angmsdab": Rune(0x029A9) + of "angmsdac": Rune(0x029AA) + of "angmsdad": Rune(0x029AB) + of "angmsdae": Rune(0x029AC) + of "angmsdaf": Rune(0x029AD) + of "angmsdag": Rune(0x029AE) + of "angmsdah": Rune(0x029AF) + of "bemptyv": Rune(0x029B0) + of "demptyv": Rune(0x029B1) + of "cemptyv": Rune(0x029B2) + of "raemptyv": Rune(0x029B3) + of "laemptyv": Rune(0x029B4) + of "ohbar": Rune(0x029B5) + of "omid": Rune(0x029B6) + of "opar": Rune(0x029B7) + of "operp": Rune(0x029B9) + of "olcross": Rune(0x029BB) + of "odsold": Rune(0x029BC) + of "olcir": Rune(0x029BE) + of "ofcir": Rune(0x029BF) + of "olt": Rune(0x029C0) + of "ogt": Rune(0x029C1) + of "cirscir": Rune(0x029C2) + of "cirE": Rune(0x029C3) + of "solb": Rune(0x029C4) + of "bsolb": Rune(0x029C5) + of "boxbox": Rune(0x029C9) + of "trisb": Rune(0x029CD) + of "rtriltri": Rune(0x029CE) + of "LeftTriangleBar": Rune(0x029CF) + of "RightTriangleBar": Rune(0x029D0) + of "race": Rune(0x029DA) + of "iinfin": Rune(0x029DC) + of "infintie": Rune(0x029DD) + of "nvinfin": Rune(0x029DE) + of "eparsl": Rune(0x029E3) + of "smeparsl": Rune(0x029E4) + of "eqvparsl": Rune(0x029E5) + of "lozf", "blacklozenge": Rune(0x029EB) + of "RuleDelayed": Rune(0x029F4) + of "dsol": Rune(0x029F6) + of "xodot", "bigodot": Rune(0x02A00) + of "xoplus", "bigoplus": Rune(0x02A01) + of "xotime", "bigotimes": Rune(0x02A02) + of "xuplus", "biguplus": Rune(0x02A04) + of "xsqcup", "bigsqcup": Rune(0x02A06) + of "qint", "iiiint": Rune(0x02A0C) + of "fpartint": Rune(0x02A0D) + of "cirfnint": Rune(0x02A10) + of "awint": Rune(0x02A11) + of "rppolint": Rune(0x02A12) + of "scpolint": Rune(0x02A13) + of "npolint": Rune(0x02A14) + of "pointint": Rune(0x02A15) + of "quatint": Rune(0x02A16) + of "intlarhk": Rune(0x02A17) + of "pluscir": Rune(0x02A22) + of "plusacir": Rune(0x02A23) + of "simplus": Rune(0x02A24) + of "plusdu": Rune(0x02A25) + of "plussim": Rune(0x02A26) + of "plustwo": Rune(0x02A27) + of "mcomma": Rune(0x02A29) + of "minusdu": Rune(0x02A2A) + of "loplus": Rune(0x02A2D) + of "roplus": Rune(0x02A2E) + of "Cross": Rune(0x02A2F) + of "timesd": Rune(0x02A30) + of "timesbar": Rune(0x02A31) + of "smashp": Rune(0x02A33) + of "lotimes": Rune(0x02A34) + of "rotimes": Rune(0x02A35) + of "otimesas": Rune(0x02A36) + of "Otimes": Rune(0x02A37) + of "odiv": Rune(0x02A38) + of "triplus": Rune(0x02A39) + of "triminus": Rune(0x02A3A) + of "tritime": Rune(0x02A3B) + of "iprod", "intprod": Rune(0x02A3C) + of "amalg": Rune(0x02A3F) + of "capdot": Rune(0x02A40) + of "ncup": Rune(0x02A42) + of "ncap": Rune(0x02A43) + of "capand": Rune(0x02A44) + of "cupor": Rune(0x02A45) + of "cupcap": Rune(0x02A46) + of "capcup": Rune(0x02A47) + of "cupbrcap": Rune(0x02A48) + of "capbrcup": Rune(0x02A49) + of "cupcup": Rune(0x02A4A) + of "capcap": Rune(0x02A4B) + of "ccups": Rune(0x02A4C) + of "ccaps": Rune(0x02A4D) + of "ccupssm": Rune(0x02A50) + of "And": Rune(0x02A53) + of "Or": Rune(0x02A54) + of "andand": Rune(0x02A55) + of "oror": Rune(0x02A56) + of "orslope": Rune(0x02A57) + of "andslope": Rune(0x02A58) + of "andv": Rune(0x02A5A) + of "orv": Rune(0x02A5B) + of "andd": Rune(0x02A5C) + of "ord": Rune(0x02A5D) + of "wedbar": Rune(0x02A5F) + of "sdote": Rune(0x02A66) + of "simdot": Rune(0x02A6A) + of "congdot": Rune(0x02A6D) + of "easter": Rune(0x02A6E) + of "apacir": Rune(0x02A6F) + of "apE": Rune(0x02A70) + of "eplus": Rune(0x02A71) + of "pluse": Rune(0x02A72) + of "Esim": Rune(0x02A73) + of "Colone": Rune(0x02A74) + of "Equal": Rune(0x02A75) + of "eDDot", "ddotseq": Rune(0x02A77) + of "equivDD": Rune(0x02A78) + of "ltcir": Rune(0x02A79) + of "gtcir": Rune(0x02A7A) + of "ltquest": Rune(0x02A7B) + of "gtquest": Rune(0x02A7C) + of "les", "LessSlantEqual", "leqslant": Rune(0x02A7D) + of "ges", "GreaterSlantEqual", "geqslant": Rune(0x02A7E) + of "lesdot": Rune(0x02A7F) + of "gesdot": Rune(0x02A80) + of "lesdoto": Rune(0x02A81) + of "gesdoto": Rune(0x02A82) + of "lesdotor": Rune(0x02A83) + of "gesdotol": Rune(0x02A84) + of "lap", "lessapprox": Rune(0x02A85) + of "gap", "gtrapprox": Rune(0x02A86) + of "lne", "lneq": Rune(0x02A87) + of "gne", "gneq": Rune(0x02A88) + of "lnap", "lnapprox": Rune(0x02A89) + of "gnap", "gnapprox": Rune(0x02A8A) + of "lEg", "lesseqqgtr": Rune(0x02A8B) + of "gEl", "gtreqqless": Rune(0x02A8C) + of "lsime": Rune(0x02A8D) + of "gsime": Rune(0x02A8E) + of "lsimg": Rune(0x02A8F) + of "gsiml": Rune(0x02A90) + of "lgE": Rune(0x02A91) + of "glE": Rune(0x02A92) + of "lesges": Rune(0x02A93) + of "gesles": Rune(0x02A94) + of "els", "eqslantless": Rune(0x02A95) + of "egs", "eqslantgtr": Rune(0x02A96) + of "elsdot": Rune(0x02A97) + of "egsdot": Rune(0x02A98) + of "el": Rune(0x02A99) + of "eg": Rune(0x02A9A) + of "siml": Rune(0x02A9D) + of "simg": Rune(0x02A9E) + of "simlE": Rune(0x02A9F) + of "simgE": Rune(0x02AA0) + of "LessLess": Rune(0x02AA1) + of "GreaterGreater": Rune(0x02AA2) + of "glj": Rune(0x02AA4) + of "gla": Rune(0x02AA5) + of "ltcc": Rune(0x02AA6) + of "gtcc": Rune(0x02AA7) + of "lescc": Rune(0x02AA8) + of "gescc": Rune(0x02AA9) + of "smt": Rune(0x02AAA) + of "lat": Rune(0x02AAB) + of "smte": Rune(0x02AAC) + of "late": Rune(0x02AAD) + of "bumpE": Rune(0x02AAE) + of "pre", "preceq", "PrecedesEqual": Rune(0x02AAF) + of "sce", "succeq", "SucceedsEqual": Rune(0x02AB0) + of "prE": Rune(0x02AB3) + of "scE": Rune(0x02AB4) + of "prnE", "precneqq": Rune(0x02AB5) + of "scnE", "succneqq": Rune(0x02AB6) + of "prap", "precapprox": Rune(0x02AB7) + of "scap", "succapprox": Rune(0x02AB8) + of "prnap", "precnapprox": Rune(0x02AB9) + of "scnap", "succnapprox": Rune(0x02ABA) + of "Pr": Rune(0x02ABB) + of "Sc": Rune(0x02ABC) + of "subdot": Rune(0x02ABD) + of "supdot": Rune(0x02ABE) + of "subplus": Rune(0x02ABF) + of "supplus": Rune(0x02AC0) + of "submult": Rune(0x02AC1) + of "supmult": Rune(0x02AC2) + of "subedot": Rune(0x02AC3) + of "supedot": Rune(0x02AC4) + of "subE", "subseteqq": Rune(0x02AC5) + of "supE", "supseteqq": Rune(0x02AC6) + of "subsim": Rune(0x02AC7) + of "supsim": Rune(0x02AC8) + of "subnE", "subsetneqq": Rune(0x02ACB) + of "supnE", "supsetneqq": Rune(0x02ACC) + of "csub": Rune(0x02ACF) + of "csup": Rune(0x02AD0) + of "csube": Rune(0x02AD1) + of "csupe": Rune(0x02AD2) + of "subsup": Rune(0x02AD3) + of "supsub": Rune(0x02AD4) + of "subsub": Rune(0x02AD5) + of "supsup": Rune(0x02AD6) + of "suphsub": Rune(0x02AD7) + of "supdsub": Rune(0x02AD8) + of "forkv": Rune(0x02AD9) + of "topfork": Rune(0x02ADA) + of "mlcp": Rune(0x02ADB) + of "Dashv", "DoubleLeftTee": Rune(0x02AE4) + of "Vdashl": Rune(0x02AE6) + of "Barv": Rune(0x02AE7) + of "vBar": Rune(0x02AE8) + of "vBarv": Rune(0x02AE9) + of "Vbar": Rune(0x02AEB) + of "Not": Rune(0x02AEC) + of "bNot": Rune(0x02AED) + of "rnmid": Rune(0x02AEE) + of "cirmid": Rune(0x02AEF) + of "midcir": Rune(0x02AF0) + of "topcir": Rune(0x02AF1) + of "nhpar": Rune(0x02AF2) + of "parsim": Rune(0x02AF3) + of "parsl": Rune(0x02AFD) + of "fflig": Rune(0x0FB00) + of "filig": Rune(0x0FB01) + of "fllig": Rune(0x0FB02) + of "ffilig": Rune(0x0FB03) + of "ffllig": Rune(0x0FB04) + of "Ascr": Rune(0x1D49C) + of "Cscr": Rune(0x1D49E) + of "Dscr": Rune(0x1D49F) + of "Gscr": Rune(0x1D4A2) + of "Jscr": Rune(0x1D4A5) + of "Kscr": Rune(0x1D4A6) + of "Nscr": Rune(0x1D4A9) + of "Oscr": Rune(0x1D4AA) + of "Pscr": Rune(0x1D4AB) + of "Qscr": Rune(0x1D4AC) + of "Sscr": Rune(0x1D4AE) + of "Tscr": Rune(0x1D4AF) + of "Uscr": Rune(0x1D4B0) + of "Vscr": Rune(0x1D4B1) + of "Wscr": Rune(0x1D4B2) + of "Xscr": Rune(0x1D4B3) + of "Yscr": Rune(0x1D4B4) + of "Zscr": Rune(0x1D4B5) + of "ascr": Rune(0x1D4B6) + of "bscr": Rune(0x1D4B7) + of "cscr": Rune(0x1D4B8) + of "dscr": Rune(0x1D4B9) + of "fscr": Rune(0x1D4BB) + of "hscr": Rune(0x1D4BD) + of "iscr": Rune(0x1D4BE) + of "jscr": Rune(0x1D4BF) + of "kscr": Rune(0x1D4C0) + of "lscr": Rune(0x1D4C1) + of "mscr": Rune(0x1D4C2) + of "nscr": Rune(0x1D4C3) + of "pscr": Rune(0x1D4C5) + of "qscr": Rune(0x1D4C6) + of "rscr": Rune(0x1D4C7) + of "sscr": Rune(0x1D4C8) + of "tscr": Rune(0x1D4C9) + of "uscr": Rune(0x1D4CA) + of "vscr": Rune(0x1D4CB) + of "wscr": Rune(0x1D4CC) + of "xscr": Rune(0x1D4CD) + of "yscr": Rune(0x1D4CE) + of "zscr": Rune(0x1D4CF) + of "Afr": Rune(0x1D504) + of "Bfr": Rune(0x1D505) + of "Dfr": Rune(0x1D507) + of "Efr": Rune(0x1D508) + of "Ffr": Rune(0x1D509) + of "Gfr": Rune(0x1D50A) + of "Jfr": Rune(0x1D50D) + of "Kfr": Rune(0x1D50E) + of "Lfr": Rune(0x1D50F) + of "Mfr": Rune(0x1D510) + of "Nfr": Rune(0x1D511) + of "Ofr": Rune(0x1D512) + of "Pfr": Rune(0x1D513) + of "Qfr": Rune(0x1D514) + of "Sfr": Rune(0x1D516) + of "Tfr": Rune(0x1D517) + of "Ufr": Rune(0x1D518) + of "Vfr": Rune(0x1D519) + of "Wfr": Rune(0x1D51A) + of "Xfr": Rune(0x1D51B) + of "Yfr": Rune(0x1D51C) + of "afr": Rune(0x1D51E) + of "bfr": Rune(0x1D51F) + of "cfr": Rune(0x1D520) + of "dfr": Rune(0x1D521) + of "efr": Rune(0x1D522) + of "ffr": Rune(0x1D523) + of "gfr": Rune(0x1D524) + of "hfr": Rune(0x1D525) + of "ifr": Rune(0x1D526) + of "jfr": Rune(0x1D527) + of "kfr": Rune(0x1D528) + of "lfr": Rune(0x1D529) + of "mfr": Rune(0x1D52A) + of "nfr": Rune(0x1D52B) + of "ofr": Rune(0x1D52C) + of "pfr": Rune(0x1D52D) + of "qfr": Rune(0x1D52E) + of "rfr": Rune(0x1D52F) + of "sfr": Rune(0x1D530) + of "tfr": Rune(0x1D531) + of "ufr": Rune(0x1D532) + of "vfr": Rune(0x1D533) + of "wfr": Rune(0x1D534) + of "xfr": Rune(0x1D535) + of "yfr": Rune(0x1D536) + of "zfr": Rune(0x1D537) + of "Aopf": Rune(0x1D538) + of "Bopf": Rune(0x1D539) + of "Dopf": Rune(0x1D53B) + of "Eopf": Rune(0x1D53C) + of "Fopf": Rune(0x1D53D) + of "Gopf": Rune(0x1D53E) + of "Iopf": Rune(0x1D540) + of "Jopf": Rune(0x1D541) + of "Kopf": Rune(0x1D542) + of "Lopf": Rune(0x1D543) + of "Mopf": Rune(0x1D544) + of "Oopf": Rune(0x1D546) + of "Sopf": Rune(0x1D54A) + of "Topf": Rune(0x1D54B) + of "Uopf": Rune(0x1D54C) + of "Vopf": Rune(0x1D54D) + of "Wopf": Rune(0x1D54E) + of "Xopf": Rune(0x1D54F) + of "Yopf": Rune(0x1D550) + of "aopf": Rune(0x1D552) + of "bopf": Rune(0x1D553) + of "copf": Rune(0x1D554) + of "dopf": Rune(0x1D555) + of "eopf": Rune(0x1D556) + of "fopf": Rune(0x1D557) + of "gopf": Rune(0x1D558) + of "hopf": Rune(0x1D559) + of "iopf": Rune(0x1D55A) + of "jopf": Rune(0x1D55B) + of "kopf": Rune(0x1D55C) + of "lopf": Rune(0x1D55D) + of "mopf": Rune(0x1D55E) + of "nopf": Rune(0x1D55F) + of "oopf": Rune(0x1D560) + of "popf": Rune(0x1D561) + of "qopf": Rune(0x1D562) + of "ropf": Rune(0x1D563) + of "sopf": Rune(0x1D564) + of "topf": Rune(0x1D565) + of "uopf": Rune(0x1D566) + of "vopf": Rune(0x1D567) + of "wopf": Rune(0x1D568) + of "xopf": Rune(0x1D569) + of "yopf": Rune(0x1D56A) + of "zopf": Rune(0x1D56B) + else: Rune(0) proc entityToUtf8*(entity: string): string = ## Converts an HTML entity name like ``Ü`` or values like ``Ü`` @@ -1869,19 +1872,20 @@ proc entityToUtf8*(entity: string): string = ## "" is returned if the entity name is unknown. The HTML parser ## already converts entities to UTF-8. runnableExamples: + const sigma = "Σ" doAssert entityToUtf8("") == "" doAssert entityToUtf8("a") == "" doAssert entityToUtf8("gt") == ">" doAssert entityToUtf8("Uuml") == "Ü" doAssert entityToUtf8("quest") == "?" doAssert entityToUtf8("#63") == "?" - doAssert entityToUtf8("Sigma") == "Σ" - doAssert entityToUtf8("#931") == "Σ" - doAssert entityToUtf8("#0931") == "Σ" - doAssert entityToUtf8("#x3A3") == "Σ" - doAssert entityToUtf8("#x03A3") == "Σ" - doAssert entityToUtf8("#x3a3") == "Σ" - doAssert entityToUtf8("#X3a3") == "Σ" + doAssert entityToUtf8("Sigma") == sigma + doAssert entityToUtf8("#931") == sigma + doAssert entityToUtf8("#0931") == sigma + doAssert entityToUtf8("#x3A3") == sigma + doAssert entityToUtf8("#x03A3") == sigma + doAssert entityToUtf8("#x3a3") == sigma + doAssert entityToUtf8("#X3a3") == sigma let rune = entityToRune(entity) if rune.ord <= 0: result = "" else: result = toUTF8(rune) diff --git a/lib/pure/math.nim b/lib/pure/math.nim index 79f287651..bc804eb86 100644 --- a/lib/pure/math.nim +++ b/lib/pure/math.nim @@ -265,7 +265,7 @@ proc arcsech*[T: float32|float64](x: T): T = arccosh(1.0 / x) proc arccsch*[T: float32|float64](x: T): T = arcsinh(1.0 / x) ## Computes the inverse hyperbolic cosecant of `x` -const windowsCC89 = defined(windows) and (defined(vcc) or defined(bcc)) +const windowsCC89 = defined(windows) and defined(bcc) when not defined(JS): # C proc hypot*(x, y: float32): float32 {.importc: "hypotf", header: "<math.h>".} diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index fb371cdce..559afd279 100644 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -37,8 +37,6 @@ type length: int data: string # != nil if a leaf -proc isConc(r: Rope): bool {.inline.} = return r.length > 0 - # Note that the left and right pointers are not needed for leafs. # Leaves have relatively high memory overhead (~30 bytes on a 32 # bit machine) and we produce many of them. This is why we cache and @@ -50,12 +48,12 @@ proc isConc(r: Rope): bool {.inline.} = return r.length > 0 proc len*(a: Rope): int {.rtl, extern: "nro$1".} = ## the rope's length if a == nil: result = 0 - else: result = abs a.length + else: result = a.length proc newRope(): Rope = new(result) proc newRope(data: string): Rope = new(result) - result.length = -len(data) + result.length = len(data) result.data = data var @@ -170,7 +168,9 @@ proc `&`*(a, b: Rope): Rope {.rtl, extern: "nroConcRopeRope".} = result = a else: result = newRope() - result.length = abs(a.length) + abs(b.length) + result.length = a.length + b.length + result.left = a + result.right = b proc `&`*(a: Rope, b: string): Rope {.rtl, extern: "nroConcRopeStr".} = ## the concatenation operator for ropes. @@ -199,11 +199,11 @@ proc `[]`*(r: Rope, i: int): char {.rtl, extern: "nroCharAt".} = var j = i if x == nil: return while true: - if not isConc(x): - if x.data.len <% j: return x.data[j] + if x != nil and x.data.len > 0: + if j < x.data.len: return x.data[j] return '\0' else: - if x.left.len >% j: + if x.left.length > j: x = x.left else: x = x.right @@ -215,7 +215,8 @@ iterator leaves*(r: Rope): string = var stack = @[r] while stack.len > 0: var it = stack.pop - while isConc(it): + while it.left != nil: + assert(it.right != nil) stack.add(it.right) it = it.left assert(it != nil) diff --git a/lib/pure/times.nim b/lib/pure/times.nim index cbf3e6413..6251c70d9 100644 --- a/lib/pure/times.nim +++ b/lib/pure/times.nim @@ -423,18 +423,14 @@ proc toUnix*(t: Time): int64 {.benign, tags: [], raises: [], noSideEffect.} = ## Convert ``t`` to a unix timestamp (seconds since ``1970-01-01T00:00:00Z``). runnableExamples: doAssert fromUnix(0).toUnix() == 0 - t.seconds proc fromWinTime*(win: int64): Time = ## Convert a Windows file time (100-nanosecond intervals since ``1601-01-01T00:00:00Z``) ## to a ``Time``. - let hnsecsSinceEpoch = (win - epochDiff) - var seconds = hnsecsSinceEpoch div rateDiff - var nanos = ((hnsecsSinceEpoch mod rateDiff) * 100).int - if nanos < 0: - nanos += convert(Seconds, Nanoseconds, 1) - seconds -= 1 + const hnsecsPerSec = convert(Seconds, Nanoseconds, 1) div 100 + let nanos = floorMod(win, hnsecsPerSec) * 100 + let seconds = floorDiv(win - epochDiff, hnsecsPerSec) result = initTime(seconds, nanos) proc toWinTime*(t: Time): int64 = diff --git a/lib/system.nim b/lib/system.nim index 29b472bdc..dcfb04c5a 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -3767,23 +3767,23 @@ template assert*(cond: bool, msg = "") = ## The compiler may not generate any code at all for ``assert`` if it is ## advised to do so through the ``-d:release`` or ``--assertions:off`` ## `command line switches <nimc.html#command-line-switches>`_. + # NOTE: `true` is correct here; --excessiveStackTrace:on will control whether + # or not to output full paths. bind instantiationInfo mixin failedAssertImpl - when compileOption("assertions"): - {.line.}: + {.line: instantiationInfo(fullPaths = true).}: + when compileOption("assertions"): if not cond: failedAssertImpl(astToStr(cond) & ' ' & msg) template doAssert*(cond: bool, msg = "") = ## same as `assert` but is always turned on and not affected by the ## ``--assertions`` command line switch. - bind instantiationInfo # NOTE: `true` is correct here; --excessiveStackTrace:on will control whether # or not to output full paths. - {.line: instantiationInfo(-1, true).}: - if not cond: - raiseAssert(astToStr(cond) & ' ' & - instantiationInfo(-1, false).fileName & '(' & - $instantiationInfo(-1, false).line & ") " & msg) + bind instantiationInfo + mixin failedAssertImpl + {.line: instantiationInfo(fullPaths = true).}: + if not cond: failedAssertImpl(astToStr(cond) & ' ' & msg) iterator items*[T](a: seq[T]): T {.inline.} = ## iterates over each item of `a`. diff --git a/tests/assert/tfaileddoassert.nim b/tests/assert/tfaileddoassert.nim new file mode 100644 index 000000000..3195fb406 --- /dev/null +++ b/tests/assert/tfaileddoassert.nim @@ -0,0 +1,11 @@ +discard """ + cmd: "nim $target -d:release $options $file" + output: ''' +assertion occured!!!!!! false +''' +""" + +onFailedAssert(msg): + echo("assertion occured!!!!!! ", msg) + +doAssert(1 == 2) diff --git a/tests/concepts/tmonoid.nim b/tests/concepts/tmonoid.nim index 49b3239bd..e0e19adbc 100644 --- a/tests/concepts/tmonoid.nim +++ b/tests/concepts/tmonoid.nim @@ -11,3 +11,15 @@ type Monoid = concept x, y proc z(x: typedesc[int]): int = 0 echo(int is Monoid) + +# https://github.com/nim-lang/Nim/issues/8126 +type AdditiveMonoid* = concept x, y, type T + x + y is T + + # some redundant checks to test an alternative approaches: + type TT = type(x) + x + y is type(x) + x + y is TT + +doAssert(1 is AdditiveMonoid) + diff --git a/tests/deprecated/importme.nim b/tests/deprecated/importme.nim new file mode 100644 index 000000000..0a9c6e37d --- /dev/null +++ b/tests/deprecated/importme.nim @@ -0,0 +1,10 @@ +type + Ty* {.deprecated.} = uint32 + Ty1* {.deprecated: "hello".} = uint32 + +var aVar* {.deprecated.}: char + +proc aProc*() {.deprecated.} = discard +proc aProc1*() {.deprecated: "hello".} = discard + +{.deprecated: "goodbye".} diff --git a/tests/deprecated/tmodule1.nim b/tests/deprecated/tmodule1.nim new file mode 100644 index 000000000..954836889 --- /dev/null +++ b/tests/deprecated/tmodule1.nim @@ -0,0 +1,23 @@ +discard """ + nimout: '''tmodule1.nim(11, 8) Warning: goodbye; importme is deprecated [Deprecated] +tmodule1.nim(14, 10) Warning: Ty is deprecated [Deprecated] +tmodule1.nim(17, 10) Warning: hello; Ty1 is deprecated [Deprecated] +tmodule1.nim(20, 8) Warning: aVar is deprecated [Deprecated] +tmodule1.nim(22, 3) Warning: aProc is deprecated [Deprecated] +tmodule1.nim(23, 3) Warning: hello; aProc1 is deprecated [Deprecated] +''' +""" + +import importme + +block: + var z: Ty + z = 0 +block: + var z: Ty1 + z = 0 +block: + echo aVar +block: + aProc() + aProc1() diff --git a/tests/deprecated/tnoannot.nim b/tests/deprecated/tnoannot.nim new file mode 100644 index 000000000..9cc5c7e06 --- /dev/null +++ b/tests/deprecated/tnoannot.nim @@ -0,0 +1,7 @@ +discard """ + line: 7 + errormsg: "annotation to deprecated not supported here" +""" + +var foo* {.deprecated.} = 42 +var foo1* {.deprecated: "no".} = 42 diff --git a/tests/errmsgs/t8339.nim b/tests/errmsgs/t8339.nim new file mode 100644 index 000000000..f0a97658a --- /dev/null +++ b/tests/errmsgs/t8339.nim @@ -0,0 +1,8 @@ +discard """ + line: 8 + errormsg: "type mismatch: got <seq[int]> but expected 'seq[float]'" +""" + +import sequtils + +var x: seq[float] = @[1].mapIt(it) diff --git a/tests/js/ttimes.nim b/tests/js/ttimes.nim deleted file mode 100644 index ad7fdd211..000000000 --- a/tests/js/ttimes.nim +++ /dev/null @@ -1,43 +0,0 @@ -discard """ - action: run -""" - -import times - -# $ date --date='@2147483647' -# Tue 19 Jan 03:14:07 GMT 2038 - -block yeardayTest: - doAssert fromUnix(2147483647).utc.yearday == 18 - -block localTime: - var local = now() - let utc = local.utc - doAssert local.toTime == utc.toTime - -let a = fromUnix(1_000_000_000) -let b = fromUnix(1_500_000_000) -doAssert b - a == initDuration(seconds = 500_000_000) - -# Because we can't change the timezone JS uses, we define a simple static timezone for testing. - -proc zonedTimeFromTime(time: Time): ZonedTime = - result.utcOffset = -7200 - result.isDst = false - result.time = time - -proc zonedTimeFromAdjTime(adjTime: Time): ZonedTIme = - result.utcOffset = -7200 - result.isDst = false - result.time = adjTime + initDuration(seconds = -7200) - -let utcPlus2 = newTimezone("", zonedTimeFromTime, zonedTimeFromAdjTime) - -block timezoneTests: - let dt = initDateTime(01, mJan, 2017, 12, 00, 00, utcPlus2) - doAssert $dt == "2017-01-01T12:00:00+02:00" - doAssert $dt.utc == "2017-01-01T10:00:00Z" - doAssert $dt.utc.inZone(utcPlus2) == $dt - -doAssert $initDateTime(01, mJan, 1911, 12, 00, 00, utc()) == "1911-01-01T12:00:00Z" -doAssert $initDateTime(01, mJan, 0023, 12, 00, 00, utc()) == "0023-01-01T12:00:00Z" \ No newline at end of file diff --git a/tests/magics/t8693.nim b/tests/magics/t8693.nim new file mode 100644 index 000000000..554244de4 --- /dev/null +++ b/tests/magics/t8693.nim @@ -0,0 +1,29 @@ +discard """ + output: '''true +false +true +false +false +true +true +false +true +true +''' +""" + +type Foo = int | float + +proc bar(t1, t2: typedesc): bool = + echo (t1 is t2) + (t2 is t1) + +proc bar[T](x: T, t2: typedesc): bool = + echo (T is t2) + (t2 is T) + +echo bar(int, Foo) +echo bar(4, Foo) +echo bar(any, int) +echo bar(int, any) +echo bar(Foo, Foo) diff --git a/tests/misc/tsemfold.nim b/tests/misc/tsemfold.nim index 18c282d9e..2101a8b50 100644 --- a/tests/misc/tsemfold.nim +++ b/tests/misc/tsemfold.nim @@ -9,6 +9,7 @@ doAssertRaises(DivByZeroError): discard 1 mod 0 doAssertRaises(DivByZeroError): discard 1 div 0 doAssertRaises(OverflowError): discard low(int8) div -1'i8 +doAssertRaises(OverflowError): discard -low(int64) doAssertRaises(OverflowError): discard low(int64) - 1'i64 doAssertRaises(OverflowError): discard high(int64) + 1'i64 @@ -21,3 +22,6 @@ doAssertRaises(OverflowError): discard low(int64) * -1 doAssertRaises(OverflowError): discard high(int8) * 2 doAssertRaises(OverflowError): discard high(int64) * 2 +doAssert abs(-1) == 1 +doAssert 2 div 2 == 1 +doAssert 2 * 3 == 6 \ No newline at end of file diff --git a/tests/modules/t8665.nim b/tests/modules/t8665.nim new file mode 100644 index 000000000..51538df79 --- /dev/null +++ b/tests/modules/t8665.nim @@ -0,0 +1 @@ +import treorder diff --git a/tests/modules/timportas.nim b/tests/modules/timportas.nim new file mode 100644 index 000000000..4681a1ee0 --- /dev/null +++ b/tests/modules/timportas.nim @@ -0,0 +1,11 @@ +discard """ + action: run +""" + +import .. / modules / [definitions as foo] +import std / times as bar +import definitions as baz + +discard foo.v +discard bar.now +discard baz.v \ No newline at end of file diff --git a/tests/parser/ttypeclasses.nim b/tests/parser/ttypeclasses.nim index 46fd20686..06146dcb6 100644 --- a/tests/parser/ttypeclasses.nim +++ b/tests/parser/ttypeclasses.nim @@ -40,3 +40,7 @@ static: assert y isnot tuple assert z isnot seq + # XXX: These cases don't work properly at the moment: + # assert type[int] isnot int + # assert type(int) isnot int + diff --git a/tests/proc/t8357.nim b/tests/proc/t8357.nim new file mode 100644 index 000000000..350ebe356 --- /dev/null +++ b/tests/proc/t8357.nim @@ -0,0 +1,10 @@ +discard """ + output: "Hello" +""" + +type + T = ref int + +let r = new(string) +r[] = "Hello" +echo r[] diff --git a/tests/proc/t8683.nim b/tests/proc/t8683.nim new file mode 100644 index 000000000..8c7e7af08 --- /dev/null +++ b/tests/proc/t8683.nim @@ -0,0 +1,11 @@ +discard """ + output: "1" +""" + +proc foo[T](bar: proc (x, y: T): int = system.cmp, baz: int) = + echo "1" + +proc foo[T](bar: proc (x, y: T): int = system.cmp) = + echo "2" + +foo[int](baz = 5) diff --git a/tests/stdlib/tropes.nim b/tests/stdlib/tropes.nim new file mode 100644 index 000000000..59239a600 --- /dev/null +++ b/tests/stdlib/tropes.nim @@ -0,0 +1,36 @@ +discard """ + file: "tropes.nim" + output: '''0 +3 + +123 +3 +6 +123 +123456 +2 +3''' +""" +import ropes + +var + r1 = rope("") + r2 = rope("123") + +echo r1.len +echo r2.len + +echo r1 +echo r2 + +r1.add("123") +r2.add("456") + +echo r1.len +echo r2.len + +echo r1 +echo r2 + +echo r1[1] +echo r2[2] \ No newline at end of file diff --git a/tests/stdlib/ttimes.nim b/tests/stdlib/ttimes.nim index e2fdf2a1f..fcafe933a 100644 --- a/tests/stdlib/ttimes.nim +++ b/tests/stdlib/ttimes.nim @@ -1,12 +1,20 @@ -# test the new time module discard """ file: "ttimes.nim" + target: "c js" output: '''[Suite] ttimes ''' """ -import - times, os, strutils, unittest +import times, strutils, unittest + +when not defined(js): + import os + +# Normally testament configures unittest with environment variables, +# but that doesn't work for the JS target. So instead we must set the correct +# settings here. +addOutputFormatter( + newConsoleOutputFormatter(PRINT_FAILURES, colorOutput = false)) proc staticTz(hours, minutes, seconds: int = 0): Timezone {.noSideEffect.} = let offset = hours * 3600 + minutes * 60 + seconds @@ -23,99 +31,12 @@ proc staticTz(hours, minutes, seconds: int = 0): Timezone {.noSideEffect.} = newTimezone("", zonedTimeFromTime, zonedTImeFromAdjTime) -# $ date --date='@2147483647' -# Tue 19 Jan 03:14:07 GMT 2038 - -proc checkFormat(t: DateTime, format, expected: string) = - let actual = t.format(format) - if actual != expected: - echo "Formatting failure!" - echo "expected: ", expected - echo "actual : ", actual - doAssert false - -let t2 = fromUnix(160070789).utc() # Mon 27 Jan 16:06:29 GMT 1975 -t2.checkFormat("d dd ddd dddd h hh H HH m mm M MM MMM MMMM s" & - " ss t tt y yy yyy yyyy yyyyy z zz zzz", - "27 27 Mon Monday 4 04 16 16 6 06 1 01 Jan January 29 29 P PM 5 75 975 1975 01975 Z Z Z") - -var t4 = fromUnix(876124714).utc # Mon 6 Oct 08:58:34 BST 1997 -t4.checkFormat("M MM MMM MMMM", "10 10 Oct October") - -# Interval tests -(t4 - initTimeInterval(years = 2)).checkFormat("yyyy", "1995") -(t4 - initTimeInterval(years = 7, minutes = 34, seconds = 24)).checkFormat("yyyy mm ss", "1990 24 10") - -# checking dayOfWeek matches known days -doAssert getDayOfWeek(01, mJan, 0000) == dSat -doAssert getDayOfWeek(01, mJan, -0023) == dSat -doAssert getDayOfWeek(21, mSep, 1900) == dFri -doAssert getDayOfWeek(01, mJan, 1970) == dThu -doAssert getDayOfWeek(21, mSep, 1970) == dMon -doAssert getDayOfWeek(01, mJan, 2000) == dSat -doAssert getDayOfWeek(01, mJan, 2021) == dFri - -# toUnix tests with GM timezone -let t4L = fromUnix(876124714).utc -doAssert toUnix(toTime(t4L)) == 876124714 -doAssert toUnix(toTime(t4L)) + t4L.utcOffset == toUnix(toTime(t4)) - -# adding intervals -var - a1L = toUnix(toTime(t4L + initTimeInterval(hours = 1))) + t4L.utcOffset - a1G = toUnix(toTime(t4)) + 60 * 60 -doAssert a1L == a1G - -# subtracting intervals -a1L = toUnix(toTime(t4L - initTimeInterval(hours = 1))) + t4L.utcOffset -a1G = toUnix(toTime(t4)) - (60 * 60) -doAssert a1L == a1G - -# Comparison between Time objects should be detected by compiler -# as 'noSideEffect'. -proc cmpTimeNoSideEffect(t1: Time, t2: Time): bool {.noSideEffect.} = - result = t1 == t2 -doAssert cmpTimeNoSideEffect(0.fromUnix, 0.fromUnix) -# Additionally `==` generic for seq[T] has explicit 'noSideEffect' pragma -# so we can check above condition by comparing seq[Time] sequences -let seqA: seq[Time] = @[] -let seqB: seq[Time] = @[] -doAssert seqA == seqB - -for tz in [ - (staticTz(seconds = 0), "+0", "+00", "+00:00"), # UTC - (staticTz(seconds = -3600), "+1", "+01", "+01:00"), # CET - (staticTz(seconds = -39600), "+11", "+11", "+11:00"), # two digits - (staticTz(seconds = -1800), "+0", "+00", "+00:30"), # half an hour - (staticTz(seconds = 7200), "-2", "-02", "-02:00"), # positive - (staticTz(seconds = 38700), "-10", "-10", "-10:45")]: # positive with three quaters hour - let dt = initDateTime(1, mJan, 2000, 00, 00, 00, tz[0]) - doAssert dt.format("z") == tz[1] - doAssert dt.format("zz") == tz[2] - doAssert dt.format("zzz") == tz[3] - -block countLeapYears: - # 1920, 2004 and 2020 are leap years, and should be counted starting at the following year - doAssert countLeapYears(1920) + 1 == countLeapYears(1921) - doAssert countLeapYears(2004) + 1 == countLeapYears(2005) - doAssert countLeapYears(2020) + 1 == countLeapYears(2021) - -block timezoneConversion: - var l = now() - let u = l.utc - l = u.local - - doAssert l.timezone == local() - doAssert u.timezone == utc() - template parseTest(s, f, sExpected: string, ydExpected: int) = let parsed = s.parse(f, utc()) parsedStr = $parsed - if parsedStr != sExpected: - echo "GOT ", parsedStr, " EXPECTED ", sExpected, " FORMAT ", f check parsedStr == sExpected - check(parsed.yearday == ydExpected) + check parsed.yearday == ydExpected template parseTestExcp(s, f: string) = expect ValueError: @@ -192,7 +113,7 @@ suite "ttimes": # Generate tests for multiple timezone files where available # Set the TZ env var for each test - when defined(Linux) or defined(macosx): + when defined(linux) or defined(macosx): const tz_dir = "/usr/share/zoneinfo" const f = "yyyy-MM-dd HH:mm zzz" @@ -333,7 +254,19 @@ suite "ttimes": check isLeapYear(2000) check (not isLeapYear(1900)) - test "subtract months": + test "TimeInterval": + let t = fromUnix(876124714).utc # Mon 6 Oct 08:58:34 BST 1997 + # Interval tests + let t2 = t - 2.years + check t2.year == 1995 + let t3 = (t - 7.years - 34.minutes - 24.seconds) + check t3.year == 1990 + check t3.minute == 24 + check t3.second == 10 + check (t + 1.hours).toTime.toUnix == t.toTime.toUnix + 60 * 60 + check (t - 1.hours).toTime.toUnix == t.toTime.toUnix - 60 * 60 + + test "TimeInterval - months": var dt = initDateTime(1, mFeb, 2017, 00, 00, 00, utc()) check $(dt - initTimeInterval(months = 1)) == "2017-01-01T00:00:00Z" dt = initDateTime(15, mMar, 2017, 00, 00, 00, utc()) @@ -404,14 +337,17 @@ suite "ttimes": let day = 24.hours let tomorrow = now + day check tomorrow - now == initDuration(days = 1) - - test "fromWinTime/toWinTime": - check 0.fromUnix.toWinTime.fromWinTime.toUnix == 0 - check (-1).fromWinTime.nanosecond == convert(Seconds, Nanoseconds, 1) - 100 - check -1.fromWinTime.toWinTime == -1 - # One nanosecond is discarded due to differences in time resolution - check initTime(0, 101).toWinTime.fromWinTime.nanosecond == 100 - check initTime(0, 101).toWinTime.fromWinTime.nanosecond == 100 + + # Disabled for JS because it fails due to precision errors + # (The JS target uses float64 for int64). + when not defined(js): + test "fromWinTime/toWinTime": + check 0.fromUnix.toWinTime.fromWinTime.toUnix == 0 + check (-1).fromWinTime.nanosecond == convert(Seconds, Nanoseconds, 1) - 100 + check (-1).fromWinTime.toWinTime == -1 + # One nanosecond is discarded due to differences in time resolution + check initTime(0, 101).toWinTime.fromWinTime.nanosecond == 100 + check initTime(0, 101).toWinTime.fromWinTime.nanosecond == 100 test "issue 7620": let layout = "M/d/yyyy' 'h:mm:ss' 'tt' 'z" @@ -477,6 +413,18 @@ suite "ttimes": expect ValueError: discard initTimeFormat("foo'") + for tz in [ + (staticTz(seconds = 0), "+0", "+00", "+00:00"), # UTC + (staticTz(seconds = -3600), "+1", "+01", "+01:00"), # CET + (staticTz(seconds = -39600), "+11", "+11", "+11:00"), # two digits + (staticTz(seconds = -1800), "+0", "+00", "+00:30"), # half an hour + (staticTz(seconds = 7200), "-2", "-02", "-02:00"), # positive + (staticTz(seconds = 38700), "-10", "-10", "-10:45")]: # positive with three quaters hour + let dt = initDateTime(1, mJan, 2000, 00, 00, 00, tz[0]) + doAssert dt.format("z") == tz[1] + doAssert dt.format("zz") == tz[2] + doAssert dt.format("zzz") == tz[3] + test "parse": check $parse("20180101", "yyyyMMdd", utc()) == "2018-01-01T00:00:00Z" parseTestExcp("+120180101", "yyyyMMdd") @@ -497,3 +445,26 @@ suite "ttimes": discard parse("'", "''") parseTestExcp("2000 A", "yyyy g") + + test "countLeapYears": + # 1920, 2004 and 2020 are leap years, and should be counted starting at the following year + check countLeapYears(1920) + 1 == countLeapYears(1921) + check countLeapYears(2004) + 1 == countLeapYears(2005) + check countLeapYears(2020) + 1 == countLeapYears(2021) + + test "timezoneConversion": + var l = now() + let u = l.utc + l = u.local + + check l.timezone == local() + check u.timezone == utc() + + test "getDayOfWeek": + check getDayOfWeek(01, mJan, 0000) == dSat + check getDayOfWeek(01, mJan, -0023) == dSat + check getDayOfWeek(21, mSep, 1900) == dFri + check getDayOfWeek(01, mJan, 1970) == dThu + check getDayOfWeek(21, mSep, 1970) == dMon + check getDayOfWeek(01, mJan, 2000) == dSat + check getDayOfWeek(01, mJan, 2021) == dFri diff --git a/tests/testament/htmlgen.nim b/tests/testament/htmlgen.nim index 4a888427e..4a10fe00c 100644 --- a/tests/testament/htmlgen.nim +++ b/tests/testament/htmlgen.nim @@ -22,8 +22,8 @@ proc generateTestResultPanelPartial(outfile: File, testResultRow: JsonNode) = target = testResultRow["target"].str.htmlQuote() action = testResultRow["action"].str.htmlQuote() result = htmlQuote testResultRow["result"].str - expected = testResultRow["expected"].str - gotten = testResultRow["given"].str + expected = testResultRow["expected"].getStr + gotten = testResultRow["given"].getStr timestamp = "unknown" var panelCtxClass, textCtxClass, bgCtxClass: string |