]> source.dussan.org Git - gitea.git/commitdiff
Update x/net (#5169)
authorAntoine GIRARD <sapk@users.noreply.github.com>
Fri, 26 Oct 2018 23:05:56 +0000 (01:05 +0200)
committertechknowlogick <hello@techknowlogick.com>
Fri, 26 Oct 2018 23:05:56 +0000 (19:05 -0400)
16 files changed:
Gopkg.lock
Gopkg.toml
vendor/golang.org/x/net/context/context.go
vendor/golang.org/x/net/context/go17.go
vendor/golang.org/x/net/context/go19.go [new file with mode: 0644]
vendor/golang.org/x/net/context/pre_go17.go
vendor/golang.org/x/net/context/pre_go19.go [new file with mode: 0644]
vendor/golang.org/x/net/html/atom/gen.go
vendor/golang.org/x/net/html/atom/table.go
vendor/golang.org/x/net/html/const.go
vendor/golang.org/x/net/html/doc.go
vendor/golang.org/x/net/html/entity.go
vendor/golang.org/x/net/html/foreign.go
vendor/golang.org/x/net/html/node.go
vendor/golang.org/x/net/html/parse.go
vendor/golang.org/x/net/html/token.go

index d084ae11887f7128d0e2c8d8f4067f7e4de15f45..ac08abce753bbdb57884c9bccedc6b0e3b2585fe 100644 (file)
   revision = "12dd70caea0268ac0d6c2707d0611ef601e7c64e"
 
 [[projects]]
-  digest = "1:47ea747d07fae720d749d06ac5dc5ded0df70c57e328b6549cf2d9c64698757e"
+  branch = "master"
+  digest = "1:6d5ed712653ea5321fe3e3475ab2188cf362a4e0d31e9fd3acbd4dfbbca0d680"
   name = "golang.org/x/net"
   packages = [
     "context",
     "html/charset",
   ]
   pruneopts = "NUT"
-  revision = "f2499483f923065a842d38eb4c7f1927e6fc6e6d"
+  revision = "9b4f9f5ad5197c79fd623a3638e70d8b26cef344"
 
 [[projects]]
   digest = "1:8159a9cda4b8810aaaeb0d60e2fa68e2fd86d8af4ec8f5059830839e3c8d93d5"
index 08a90a3081f8dde3e250da1a362e46a54dba0d5f..1da118ab73e38f659852ed9a64797d4532b4c9f6 100644 (file)
@@ -27,7 +27,7 @@ ignored = ["google.golang.org/appengine*"]
   name = "golang.org/x/text"
 
 [[constraint]]
-  revision = "f2499483f923065a842d38eb4c7f1927e6fc6e6d"
+  branch = "master"
   name = "golang.org/x/net"
 
 [[override]]
index 134654cf7e2bf2ba2aaf2206e2e6f04460f412c7..a3c021d3f88e98457163fd084ac9b49e1ddf5931 100644 (file)
@@ -5,9 +5,11 @@
 // Package context defines the Context type, which carries deadlines,
 // cancelation signals, and other request-scoped values across API boundaries
 // and between processes.
+// As of Go 1.7 this package is available in the standard library under the
+// name context.  https://golang.org/pkg/context.
 //
 // Incoming requests to a server should create a Context, and outgoing calls to
-// servers should accept a Context.  The chain of function calls between must
+// servers should accept a Context. The chain of function calls between must
 // propagate the Context, optionally replacing it with a modified copy created
 // using WithDeadline, WithTimeout, WithCancel, or WithValue.
 //
 // propagation:
 //
 // Do not store Contexts inside a struct type; instead, pass a Context
-// explicitly to each function that needs it.  The Context should be the first
+// explicitly to each function that needs it. The Context should be the first
 // parameter, typically named ctx:
 //
 //     func DoSomething(ctx context.Context, arg Arg) error {
 //             // ... use ctx ...
 //     }
 //
-// Do not pass a nil Context, even if a function permits it.  Pass context.TODO
+// Do not pass a nil Context, even if a function permits it. Pass context.TODO
 // if you are unsure about which Context to use.
 //
 // Use context Values only for request-scoped data that transits processes and
 // Contexts.
 package context // import "golang.org/x/net/context"
 
-import "time"
-
-// A Context carries a deadline, a cancelation signal, and other values across
-// API boundaries.
-//
-// Context's methods may be called by multiple goroutines simultaneously.
-type Context interface {
-       // Deadline returns the time when work done on behalf of this context
-       // should be canceled.  Deadline returns ok==false when no deadline is
-       // set.  Successive calls to Deadline return the same results.
-       Deadline() (deadline time.Time, ok bool)
-
-       // Done returns a channel that's closed when work done on behalf of this
-       // context should be canceled.  Done may return nil if this context can
-       // never be canceled.  Successive calls to Done return the same value.
-       //
-       // WithCancel arranges for Done to be closed when cancel is called;
-       // WithDeadline arranges for Done to be closed when the deadline
-       // expires; WithTimeout arranges for Done to be closed when the timeout
-       // elapses.
-       //
-       // Done is provided for use in select statements:
-       //
-       //  // Stream generates values with DoSomething and sends them to out
-       //  // until DoSomething returns an error or ctx.Done is closed.
-       //  func Stream(ctx context.Context, out chan<- Value) error {
-       //      for {
-       //              v, err := DoSomething(ctx)
-       //              if err != nil {
-       //                      return err
-       //              }
-       //              select {
-       //              case <-ctx.Done():
-       //                      return ctx.Err()
-       //              case out <- v:
-       //              }
-       //      }
-       //  }
-       //
-       // See http://blog.golang.org/pipelines for more examples of how to use
-       // a Done channel for cancelation.
-       Done() <-chan struct{}
-
-       // Err returns a non-nil error value after Done is closed.  Err returns
-       // Canceled if the context was canceled or DeadlineExceeded if the
-       // context's deadline passed.  No other values for Err are defined.
-       // After Done is closed, successive calls to Err return the same value.
-       Err() error
-
-       // Value returns the value associated with this context for key, or nil
-       // if no value is associated with key.  Successive calls to Value with
-       // the same key returns the same result.
-       //
-       // Use context values only for request-scoped data that transits
-       // processes and API boundaries, not for passing optional parameters to
-       // functions.
-       //
-       // A key identifies a specific value in a Context.  Functions that wish
-       // to store values in Context typically allocate a key in a global
-       // variable then use that key as the argument to context.WithValue and
-       // Context.Value.  A key can be any type that supports equality;
-       // packages should define keys as an unexported type to avoid
-       // collisions.
-       //
-       // Packages that define a Context key should provide type-safe accessors
-       // for the values stores using that key:
-       //
-       //      // Package user defines a User type that's stored in Contexts.
-       //      package user
-       //
-       //      import "golang.org/x/net/context"
-       //
-       //      // User is the type of value stored in the Contexts.
-       //      type User struct {...}
-       //
-       //      // key is an unexported type for keys defined in this package.
-       //      // This prevents collisions with keys defined in other packages.
-       //      type key int
-       //
-       //      // userKey is the key for user.User values in Contexts.  It is
-       //      // unexported; clients use user.NewContext and user.FromContext
-       //      // instead of using this key directly.
-       //      var userKey key = 0
-       //
-       //      // NewContext returns a new Context that carries value u.
-       //      func NewContext(ctx context.Context, u *User) context.Context {
-       //              return context.WithValue(ctx, userKey, u)
-       //      }
-       //
-       //      // FromContext returns the User value stored in ctx, if any.
-       //      func FromContext(ctx context.Context) (*User, bool) {
-       //              u, ok := ctx.Value(userKey).(*User)
-       //              return u, ok
-       //      }
-       Value(key interface{}) interface{}
-}
-
 // Background returns a non-nil, empty Context. It is never canceled, has no
-// values, and has no deadline.  It is typically used by the main function,
+// values, and has no deadline. It is typically used by the main function,
 // initialization, and tests, and as the top-level Context for incoming
 // requests.
 func Background() Context {
        return background
 }
 
-// TODO returns a non-nil, empty Context.  Code should use context.TODO when
+// TODO returns a non-nil, empty Context. Code should use context.TODO when
 // it's unclear which Context to use or it is not yet available (because the
 // surrounding function has not yet been extended to accept a Context
 // parameter).  TODO is recognized by static analysis tools that determine
@@ -149,8 +54,3 @@ func Background() Context {
 func TODO() Context {
        return todo
 }
-
-// A CancelFunc tells an operation to abandon its work.
-// A CancelFunc does not wait for the work to stop.
-// After the first call, subsequent calls to a CancelFunc do nothing.
-type CancelFunc func()
index f8cda19adaee90ab3c324e0092cdf360fa8c65f1..d20f52b7de93f81675cb405bd4309af9ee61d2d1 100644 (file)
@@ -35,8 +35,8 @@ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
 }
 
 // WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d.  If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent.  The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
 // context's Done channel is closed when the deadline expires, when the returned
 // cancel function is called, or when the parent context's Done channel is
 // closed, whichever happens first.
diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go
new file mode 100644 (file)
index 0000000..d88bd1d
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.9
+
+package context
+
+import "context" // standard library's context, as of Go 1.7
+
+// A Context carries a deadline, a cancelation signal, and other values across
+// API boundaries.
+//
+// Context's methods may be called by multiple goroutines simultaneously.
+type Context = context.Context
+
+// A CancelFunc tells an operation to abandon its work.
+// A CancelFunc does not wait for the work to stop.
+// After the first call, subsequent calls to a CancelFunc do nothing.
+type CancelFunc = context.CancelFunc
index 5a30acabd03c329e79666269531751840fe86e7a..0f35592df51885abc1eb01b2e58318590df65874 100644 (file)
@@ -13,7 +13,7 @@ import (
        "time"
 )
 
-// An emptyCtx is never canceled, has no values, and has no deadline.  It is not
+// An emptyCtx is never canceled, has no values, and has no deadline. It is not
 // struct{}, since vars of this type must have distinct addresses.
 type emptyCtx int
 
@@ -104,7 +104,7 @@ func propagateCancel(parent Context, child canceler) {
 }
 
 // parentCancelCtx follows a chain of parent references until it finds a
-// *cancelCtx.  This function understands how each of the concrete types in this
+// *cancelCtx. This function understands how each of the concrete types in this
 // package represents its parent.
 func parentCancelCtx(parent Context) (*cancelCtx, bool) {
        for {
@@ -134,14 +134,14 @@ func removeChild(parent Context, child canceler) {
        p.mu.Unlock()
 }
 
-// A canceler is a context type that can be canceled directly.  The
+// A canceler is a context type that can be canceled directly. The
 // implementations are *cancelCtx and *timerCtx.
 type canceler interface {
        cancel(removeFromParent bool, err error)
        Done() <-chan struct{}
 }
 
-// A cancelCtx can be canceled.  When canceled, it also cancels any children
+// A cancelCtx can be canceled. When canceled, it also cancels any children
 // that implement canceler.
 type cancelCtx struct {
        Context
@@ -193,8 +193,8 @@ func (c *cancelCtx) cancel(removeFromParent bool, err error) {
 }
 
 // WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d.  If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent.  The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
 // context's Done channel is closed when the deadline expires, when the returned
 // cancel function is called, or when the parent context's Done channel is
 // closed, whichever happens first.
@@ -226,8 +226,8 @@ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
        return c, func() { c.cancel(true, Canceled) }
 }
 
-// A timerCtx carries a timer and a deadline.  It embeds a cancelCtx to
-// implement Done and Err.  It implements cancel by stopping its timer then
+// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
+// implement Done and Err. It implements cancel by stopping its timer then
 // delegating to cancelCtx.cancel.
 type timerCtx struct {
        *cancelCtx
@@ -281,7 +281,7 @@ func WithValue(parent Context, key interface{}, val interface{}) Context {
        return &valueCtx{parent, key, val}
 }
 
-// A valueCtx carries a key-value pair.  It implements Value for that key and
+// A valueCtx carries a key-value pair. It implements Value for that key and
 // delegates all other calls to the embedded Context.
 type valueCtx struct {
        Context
diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go
new file mode 100644 (file)
index 0000000..b105f80
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.9
+
+package context
+
+import "time"
+
+// A Context carries a deadline, a cancelation signal, and other values across
+// API boundaries.
+//
+// Context's methods may be called by multiple goroutines simultaneously.
+type Context interface {
+       // Deadline returns the time when work done on behalf of this context
+       // should be canceled. Deadline returns ok==false when no deadline is
+       // set. Successive calls to Deadline return the same results.
+       Deadline() (deadline time.Time, ok bool)
+
+       // Done returns a channel that's closed when work done on behalf of this
+       // context should be canceled. Done may return nil if this context can
+       // never be canceled. Successive calls to Done return the same value.
+       //
+       // WithCancel arranges for Done to be closed when cancel is called;
+       // WithDeadline arranges for Done to be closed when the deadline
+       // expires; WithTimeout arranges for Done to be closed when the timeout
+       // elapses.
+       //
+       // Done is provided for use in select statements:
+       //
+       //  // Stream generates values with DoSomething and sends them to out
+       //  // until DoSomething returns an error or ctx.Done is closed.
+       //  func Stream(ctx context.Context, out chan<- Value) error {
+       //      for {
+       //              v, err := DoSomething(ctx)
+       //              if err != nil {
+       //                      return err
+       //              }
+       //              select {
+       //              case <-ctx.Done():
+       //                      return ctx.Err()
+       //              case out <- v:
+       //              }
+       //      }
+       //  }
+       //
+       // See http://blog.golang.org/pipelines for more examples of how to use
+       // a Done channel for cancelation.
+       Done() <-chan struct{}
+
+       // Err returns a non-nil error value after Done is closed. Err returns
+       // Canceled if the context was canceled or DeadlineExceeded if the
+       // context's deadline passed. No other values for Err are defined.
+       // After Done is closed, successive calls to Err return the same value.
+       Err() error
+
+       // Value returns the value associated with this context for key, or nil
+       // if no value is associated with key. Successive calls to Value with
+       // the same key returns the same result.
+       //
+       // Use context values only for request-scoped data that transits
+       // processes and API boundaries, not for passing optional parameters to
+       // functions.
+       //
+       // A key identifies a specific value in a Context. Functions that wish
+       // to store values in Context typically allocate a key in a global
+       // variable then use that key as the argument to context.WithValue and
+       // Context.Value. A key can be any type that supports equality;
+       // packages should define keys as an unexported type to avoid
+       // collisions.
+       //
+       // Packages that define a Context key should provide type-safe accessors
+       // for the values stores using that key:
+       //
+       //      // Package user defines a User type that's stored in Contexts.
+       //      package user
+       //
+       //      import "golang.org/x/net/context"
+       //
+       //      // User is the type of value stored in the Contexts.
+       //      type User struct {...}
+       //
+       //      // key is an unexported type for keys defined in this package.
+       //      // This prevents collisions with keys defined in other packages.
+       //      type key int
+       //
+       //      // userKey is the key for user.User values in Contexts. It is
+       //      // unexported; clients use user.NewContext and user.FromContext
+       //      // instead of using this key directly.
+       //      var userKey key = 0
+       //
+       //      // NewContext returns a new Context that carries value u.
+       //      func NewContext(ctx context.Context, u *User) context.Context {
+       //              return context.WithValue(ctx, userKey, u)
+       //      }
+       //
+       //      // FromContext returns the User value stored in ctx, if any.
+       //      func FromContext(ctx context.Context) (*User, bool) {
+       //              u, ok := ctx.Value(userKey).(*User)
+       //              return u, ok
+       //      }
+       Value(key interface{}) interface{}
+}
+
+// A CancelFunc tells an operation to abandon its work.
+// A CancelFunc does not wait for the work to stop.
+// After the first call, subsequent calls to a CancelFunc do nothing.
+type CancelFunc func()
index 6bfa86601987a0e439ed468b414db440db78177a..5d052781bceaf8504923cff6da7d4a5f22044169 100644 (file)
@@ -4,17 +4,17 @@
 
 // +build ignore
 
-package main
+//go:generate go run gen.go
+//go:generate go run gen.go -test
 
-// This program generates table.go and table_test.go.
-// Invoke as
-//
-//     go run gen.go |gofmt >table.go
-//     go run gen.go -test |gofmt >table_test.go
+package main
 
 import (
+       "bytes"
        "flag"
        "fmt"
+       "go/format"
+       "io/ioutil"
        "math/rand"
        "os"
        "sort"
@@ -42,6 +42,18 @@ func identifier(s string) string {
 
 var test = flag.Bool("test", false, "generate table_test.go")
 
+func genFile(name string, buf *bytes.Buffer) {
+       b, err := format.Source(buf.Bytes())
+       if err != nil {
+               fmt.Fprintln(os.Stderr, err)
+               os.Exit(1)
+       }
+       if err := ioutil.WriteFile(name, b, 0644); err != nil {
+               fmt.Fprintln(os.Stderr, err)
+               os.Exit(1)
+       }
+}
+
 func main() {
        flag.Parse()
 
@@ -52,32 +64,31 @@ func main() {
        all = append(all, extra...)
        sort.Strings(all)
 
-       if *test {
-               fmt.Printf("// generated by go run gen.go -test; DO NOT EDIT\n\n")
-               fmt.Printf("package atom\n\n")
-               fmt.Printf("var testAtomList = []string{\n")
-               for _, s := range all {
-                       fmt.Printf("\t%q,\n", s)
-               }
-               fmt.Printf("}\n")
-               return
-       }
-
        // uniq - lists have dups
-       // compute max len too
-       maxLen := 0
        w := 0
        for _, s := range all {
                if w == 0 || all[w-1] != s {
-                       if maxLen < len(s) {
-                               maxLen = len(s)
-                       }
                        all[w] = s
                        w++
                }
        }
        all = all[:w]
 
+       if *test {
+               var buf bytes.Buffer
+               fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
+               fmt.Fprintln(&buf, "//go:generate go run gen.go -test\n")
+               fmt.Fprintln(&buf, "package atom\n")
+               fmt.Fprintln(&buf, "var testAtomList = []string{")
+               for _, s := range all {
+                       fmt.Fprintf(&buf, "\t%q,\n", s)
+               }
+               fmt.Fprintln(&buf, "}")
+
+               genFile("table_test.go", &buf)
+               return
+       }
+
        // Find hash that minimizes table size.
        var best *table
        for i := 0; i < 1000000; i++ {
@@ -163,36 +174,46 @@ func main() {
                atom[s] = uint32(off<<8 | len(s))
        }
 
+       var buf bytes.Buffer
        // Generate the Go code.
-       fmt.Printf("// generated by go run gen.go; DO NOT EDIT\n\n")
-       fmt.Printf("package atom\n\nconst (\n")
+       fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
+       fmt.Fprintln(&buf, "//go:generate go run gen.go\n")
+       fmt.Fprintln(&buf, "package atom\n\nconst (")
+
+       // compute max len
+       maxLen := 0
        for _, s := range all {
-               fmt.Printf("\t%s Atom = %#x\n", identifier(s), atom[s])
+               if maxLen < len(s) {
+                       maxLen = len(s)
+               }
+               fmt.Fprintf(&buf, "\t%s Atom = %#x\n", identifier(s), atom[s])
        }
-       fmt.Printf(")\n\n")
+       fmt.Fprintln(&buf, ")\n")
 
-       fmt.Printf("const hash0 = %#x\n\n", best.h0)
-       fmt.Printf("const maxAtomLen = %d\n\n", maxLen)
+       fmt.Fprintf(&buf, "const hash0 = %#x\n\n", best.h0)
+       fmt.Fprintf(&buf, "const maxAtomLen = %d\n\n", maxLen)
 
-       fmt.Printf("var table = [1<<%d]Atom{\n", best.k)
+       fmt.Fprintf(&buf, "var table = [1<<%d]Atom{\n", best.k)
        for i, s := range best.tab {
                if s == "" {
                        continue
                }
-               fmt.Printf("\t%#x: %#x, // %s\n", i, atom[s], s)
+               fmt.Fprintf(&buf, "\t%#x: %#x, // %s\n", i, atom[s], s)
        }
-       fmt.Printf("}\n")
+       fmt.Fprintf(&buf, "}\n")
        datasize := (1 << best.k) * 4
 
-       fmt.Printf("const atomText =\n")
+       fmt.Fprintln(&buf, "const atomText =")
        textsize := len(text)
        for len(text) > 60 {
-               fmt.Printf("\t%q +\n", text[:60])
+               fmt.Fprintf(&buf, "\t%q +\n", text[:60])
                text = text[60:]
        }
-       fmt.Printf("\t%q\n\n", text)
+       fmt.Fprintf(&buf, "\t%q\n\n", text)
+
+       genFile("table.go", &buf)
 
-       fmt.Fprintf(os.Stderr, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
+       fmt.Fprintf(os.Stdout, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
 }
 
 type byLen []string
@@ -285,8 +306,10 @@ func (t *table) push(i uint32, depth int) bool {
 
 // The lists of element names and attribute keys were taken from
 // https://html.spec.whatwg.org/multipage/indices.html#index
-// as of the "HTML Living Standard - Last Updated 21 February 2015" version.
+// as of the "HTML Living Standard - Last Updated 16 April 2018" version.
 
+// "command", "keygen" and "menuitem" have been removed from the spec,
+// but are kept here for backwards compatibility.
 var elements = []string{
        "a",
        "abbr",
@@ -349,6 +372,7 @@ var elements = []string{
        "legend",
        "li",
        "link",
+       "main",
        "map",
        "mark",
        "menu",
@@ -364,6 +388,7 @@ var elements = []string{
        "output",
        "p",
        "param",
+       "picture",
        "pre",
        "progress",
        "q",
@@ -375,6 +400,7 @@ var elements = []string{
        "script",
        "section",
        "select",
+       "slot",
        "small",
        "source",
        "span",
@@ -403,14 +429,21 @@ var elements = []string{
 }
 
 // https://html.spec.whatwg.org/multipage/indices.html#attributes-3
-
+//
+// "challenge", "command", "contextmenu", "dropzone", "icon", "keytype", "mediagroup",
+// "radiogroup", "spellcheck", "scoped", "seamless", "sortable" and "sorted" have been removed from the spec,
+// but are kept here for backwards compatibility.
 var attributes = []string{
        "abbr",
        "accept",
        "accept-charset",
        "accesskey",
        "action",
+       "allowfullscreen",
+       "allowpaymentrequest",
+       "allowusermedia",
        "alt",
+       "as",
        "async",
        "autocomplete",
        "autofocus",
@@ -420,6 +453,7 @@ var attributes = []string{
        "checked",
        "cite",
        "class",
+       "color",
        "cols",
        "colspan",
        "command",
@@ -457,6 +491,8 @@ var attributes = []string{
        "icon",
        "id",
        "inputmode",
+       "integrity",
+       "is",
        "ismap",
        "itemid",
        "itemprop",
@@ -481,16 +517,20 @@ var attributes = []string{
        "multiple",
        "muted",
        "name",
+       "nomodule",
+       "nonce",
        "novalidate",
        "open",
        "optimum",
        "pattern",
        "ping",
        "placeholder",
+       "playsinline",
        "poster",
        "preload",
        "radiogroup",
        "readonly",
+       "referrerpolicy",
        "rel",
        "required",
        "reversed",
@@ -507,10 +547,13 @@ var attributes = []string{
        "sizes",
        "sortable",
        "sorted",
+       "slot",
        "span",
+       "spellcheck",
        "src",
        "srcdoc",
        "srclang",
+       "srcset",
        "start",
        "step",
        "style",
@@ -520,16 +563,22 @@ var attributes = []string{
        "translate",
        "type",
        "typemustmatch",
+       "updateviacache",
        "usemap",
        "value",
        "width",
+       "workertype",
        "wrap",
 }
 
+// "onautocomplete", "onautocompleteerror", "onmousewheel",
+// "onshow" and "onsort" have been removed from the spec,
+// but are kept here for backwards compatibility.
 var eventHandlers = []string{
        "onabort",
        "onautocomplete",
        "onautocompleteerror",
+       "onauxclick",
        "onafterprint",
        "onbeforeprint",
        "onbeforeunload",
@@ -541,11 +590,14 @@ var eventHandlers = []string{
        "onclick",
        "onclose",
        "oncontextmenu",
+       "oncopy",
        "oncuechange",
+       "oncut",
        "ondblclick",
        "ondrag",
        "ondragend",
        "ondragenter",
+       "ondragexit",
        "ondragleave",
        "ondragover",
        "ondragstart",
@@ -565,18 +617,24 @@ var eventHandlers = []string{
        "onload",
        "onloadeddata",
        "onloadedmetadata",
+       "onloadend",
        "onloadstart",
        "onmessage",
+       "onmessageerror",
        "onmousedown",
+       "onmouseenter",
+       "onmouseleave",
        "onmousemove",
        "onmouseout",
        "onmouseover",
        "onmouseup",
        "onmousewheel",
+       "onwheel",
        "onoffline",
        "ononline",
        "onpagehide",
        "onpageshow",
+       "onpaste",
        "onpause",
        "onplay",
        "onplaying",
@@ -585,7 +643,9 @@ var eventHandlers = []string{
        "onratechange",
        "onreset",
        "onresize",
+       "onrejectionhandled",
        "onscroll",
+       "onsecuritypolicyviolation",
        "onseeked",
        "onseeking",
        "onselect",
@@ -597,6 +657,7 @@ var eventHandlers = []string{
        "onsuspend",
        "ontimeupdate",
        "ontoggle",
+       "onunhandledrejection",
        "onunload",
        "onvolumechange",
        "onwaiting",
@@ -604,6 +665,7 @@ var eventHandlers = []string{
 
 // extra are ad-hoc values not covered by any of the lists above.
 var extra = []string{
+       "acronym",
        "align",
        "annotation",
        "annotation-xml",
@@ -639,6 +701,8 @@ var extra = []string{
        "plaintext",
        "prompt",
        "public",
+       "rb",
+       "rtc",
        "spacer",
        "strike",
        "svg",
index 2605ba3102f63aeb5cdb7e871dbbb1ee7b7f3e34..2a938864cb9d3e88b3259c4856412517a39dce5f 100644 (file)
-// generated by go run gen.go; DO NOT EDIT
+// Code generated by go generate gen.go; DO NOT EDIT.
+
+//go:generate go run gen.go
 
 package atom
 
 const (
-       A                   Atom = 0x1
-       Abbr                Atom = 0x4
-       Accept              Atom = 0x2106
-       AcceptCharset       Atom = 0x210e
-       Accesskey           Atom = 0x3309
-       Action              Atom = 0x1f606
-       Address             Atom = 0x4f307
-       Align               Atom = 0x1105
-       Alt                 Atom = 0x4503
-       Annotation          Atom = 0x1670a
-       AnnotationXml       Atom = 0x1670e
-       Applet              Atom = 0x2b306
-       Area                Atom = 0x2fa04
-       Article             Atom = 0x38807
-       Aside               Atom = 0x8305
-       Async               Atom = 0x7b05
-       Audio               Atom = 0xa605
-       Autocomplete        Atom = 0x1fc0c
-       Autofocus           Atom = 0xb309
-       Autoplay            Atom = 0xce08
-       B                   Atom = 0x101
-       Base                Atom = 0xd604
-       Basefont            Atom = 0xd608
-       Bdi                 Atom = 0x1a03
-       Bdo                 Atom = 0xe703
-       Bgsound             Atom = 0x11807
-       Big                 Atom = 0x12403
-       Blink               Atom = 0x12705
-       Blockquote          Atom = 0x12c0a
-       Body                Atom = 0x2f04
-       Br                  Atom = 0x202
-       Button              Atom = 0x13606
-       Canvas              Atom = 0x7f06
-       Caption             Atom = 0x1bb07
-       Center              Atom = 0x5b506
-       Challenge           Atom = 0x21f09
-       Charset             Atom = 0x2807
-       Checked             Atom = 0x32807
-       Cite                Atom = 0x3c804
-       Class               Atom = 0x4de05
-       Code                Atom = 0x14904
-       Col                 Atom = 0x15003
-       Colgroup            Atom = 0x15008
-       Color               Atom = 0x15d05
-       Cols                Atom = 0x16204
-       Colspan             Atom = 0x16207
-       Command             Atom = 0x17507
-       Content             Atom = 0x42307
-       Contenteditable     Atom = 0x4230f
-       Contextmenu         Atom = 0x3310b
-       Controls            Atom = 0x18808
-       Coords              Atom = 0x19406
-       Crossorigin         Atom = 0x19f0b
-       Data                Atom = 0x44a04
-       Datalist            Atom = 0x44a08
-       Datetime            Atom = 0x23c08
-       Dd                  Atom = 0x26702
-       Default             Atom = 0x8607
-       Defer               Atom = 0x14b05
-       Del                 Atom = 0x3ef03
-       Desc                Atom = 0x4db04
-       Details             Atom = 0x4807
-       Dfn                 Atom = 0x6103
-       Dialog              Atom = 0x1b06
-       Dir                 Atom = 0x6903
-       Dirname             Atom = 0x6907
-       Disabled            Atom = 0x10c08
-       Div                 Atom = 0x11303
-       Dl                  Atom = 0x11e02
-       Download            Atom = 0x40008
-       Draggable           Atom = 0x17b09
-       Dropzone            Atom = 0x39108
-       Dt                  Atom = 0x50902
-       Em                  Atom = 0x6502
-       Embed               Atom = 0x6505
-       Enctype             Atom = 0x21107
-       Face                Atom = 0x5b304
-       Fieldset            Atom = 0x1b008
-       Figcaption          Atom = 0x1b80a
-       Figure              Atom = 0x1cc06
-       Font                Atom = 0xda04
-       Footer              Atom = 0x8d06
-       For                 Atom = 0x1d803
-       ForeignObject       Atom = 0x1d80d
-       Foreignobject       Atom = 0x1e50d
-       Form                Atom = 0x1f204
-       Formaction          Atom = 0x1f20a
-       Formenctype         Atom = 0x20d0b
-       Formmethod          Atom = 0x2280a
-       Formnovalidate      Atom = 0x2320e
-       Formtarget          Atom = 0x2470a
-       Frame               Atom = 0x9a05
-       Frameset            Atom = 0x9a08
-       H1                  Atom = 0x26e02
-       H2                  Atom = 0x29402
-       H3                  Atom = 0x2a702
-       H4                  Atom = 0x2e902
-       H5                  Atom = 0x2f302
-       H6                  Atom = 0x50b02
-       Head                Atom = 0x2d504
-       Header              Atom = 0x2d506
-       Headers             Atom = 0x2d507
-       Height              Atom = 0x25106
-       Hgroup              Atom = 0x25906
-       Hidden              Atom = 0x26506
-       High                Atom = 0x26b04
-       Hr                  Atom = 0x27002
-       Href                Atom = 0x27004
-       Hreflang            Atom = 0x27008
-       Html                Atom = 0x25504
-       HttpEquiv           Atom = 0x2780a
-       I                   Atom = 0x601
-       Icon                Atom = 0x42204
-       Id                  Atom = 0x8502
-       Iframe              Atom = 0x29606
-       Image               Atom = 0x29c05
-       Img                 Atom = 0x2a103
-       Input               Atom = 0x3e805
-       Inputmode           Atom = 0x3e809
-       Ins                 Atom = 0x1a803
-       Isindex             Atom = 0x2a907
-       Ismap               Atom = 0x2b005
-       Itemid              Atom = 0x33c06
-       Itemprop            Atom = 0x3c908
-       Itemref             Atom = 0x5ad07
-       Itemscope           Atom = 0x2b909
-       Itemtype            Atom = 0x2c308
-       Kbd                 Atom = 0x1903
-       Keygen              Atom = 0x3906
-       Keytype             Atom = 0x53707
-       Kind                Atom = 0x10904
-       Label               Atom = 0xf005
-       Lang                Atom = 0x27404
-       Legend              Atom = 0x18206
-       Li                  Atom = 0x1202
-       Link                Atom = 0x12804
-       List                Atom = 0x44e04
-       Listing             Atom = 0x44e07
-       Loop                Atom = 0xf404
-       Low                 Atom = 0x11f03
-       Malignmark          Atom = 0x100a
-       Manifest            Atom = 0x5f108
-       Map                 Atom = 0x2b203
-       Mark                Atom = 0x1604
-       Marquee             Atom = 0x2cb07
-       Math                Atom = 0x2d204
-       Max                 Atom = 0x2e103
-       Maxlength           Atom = 0x2e109
-       Media               Atom = 0x6e05
-       Mediagroup          Atom = 0x6e0a
-       Menu                Atom = 0x33804
-       Menuitem            Atom = 0x33808
-       Meta                Atom = 0x45d04
-       Meter               Atom = 0x24205
-       Method              Atom = 0x22c06
-       Mglyph              Atom = 0x2a206
-       Mi                  Atom = 0x2eb02
-       Min                 Atom = 0x2eb03
-       Minlength           Atom = 0x2eb09
-       Mn                  Atom = 0x23502
-       Mo                  Atom = 0x3ed02
-       Ms                  Atom = 0x2bc02
-       Mtext               Atom = 0x2f505
-       Multiple            Atom = 0x30308
-       Muted               Atom = 0x30b05
-       Name                Atom = 0x6c04
-       Nav                 Atom = 0x3e03
-       Nobr                Atom = 0x5704
-       Noembed             Atom = 0x6307
-       Noframes            Atom = 0x9808
-       Noscript            Atom = 0x3d208
-       Novalidate          Atom = 0x2360a
-       Object              Atom = 0x1ec06
-       Ol                  Atom = 0xc902
-       Onabort             Atom = 0x13a07
-       Onafterprint        Atom = 0x1c00c
-       Onautocomplete      Atom = 0x1fa0e
-       Onautocompleteerror Atom = 0x1fa13
-       Onbeforeprint       Atom = 0x6040d
-       Onbeforeunload      Atom = 0x4e70e
-       Onblur              Atom = 0xaa06
-       Oncancel            Atom = 0xe908
-       Oncanplay           Atom = 0x28509
-       Oncanplaythrough    Atom = 0x28510
-       Onchange            Atom = 0x3a708
-       Onclick             Atom = 0x31007
-       Onclose             Atom = 0x31707
-       Oncontextmenu       Atom = 0x32f0d
-       Oncuechange         Atom = 0x3420b
-       Ondblclick          Atom = 0x34d0a
-       Ondrag              Atom = 0x35706
-       Ondragend           Atom = 0x35709
-       Ondragenter         Atom = 0x3600b
-       Ondragleave         Atom = 0x36b0b
-       Ondragover          Atom = 0x3760a
-       Ondragstart         Atom = 0x3800b
-       Ondrop              Atom = 0x38f06
-       Ondurationchange    Atom = 0x39f10
-       Onemptied           Atom = 0x39609
-       Onended             Atom = 0x3af07
-       Onerror             Atom = 0x3b607
-       Onfocus             Atom = 0x3bd07
-       Onhashchange        Atom = 0x3da0c
-       Oninput             Atom = 0x3e607
-       Oninvalid           Atom = 0x3f209
-       Onkeydown           Atom = 0x3fb09
-       Onkeypress          Atom = 0x4080a
-       Onkeyup             Atom = 0x41807
-       Onlanguagechange    Atom = 0x43210
-       Onload              Atom = 0x44206
-       Onloadeddata        Atom = 0x4420c
-       Onloadedmetadata    Atom = 0x45510
-       Onloadstart         Atom = 0x46b0b
-       Onmessage           Atom = 0x47609
-       Onmousedown         Atom = 0x47f0b
-       Onmousemove         Atom = 0x48a0b
-       Onmouseout          Atom = 0x4950a
-       Onmouseover         Atom = 0x4a20b
-       Onmouseup           Atom = 0x4ad09
-       Onmousewheel        Atom = 0x4b60c
-       Onoffline           Atom = 0x4c209
-       Ononline            Atom = 0x4cb08
-       Onpagehide          Atom = 0x4d30a
-       Onpageshow          Atom = 0x4fe0a
-       Onpause             Atom = 0x50d07
-       Onplay              Atom = 0x51706
-       Onplaying           Atom = 0x51709
-       Onpopstate          Atom = 0x5200a
-       Onprogress          Atom = 0x52a0a
-       Onratechange        Atom = 0x53e0c
-       Onreset             Atom = 0x54a07
-       Onresize            Atom = 0x55108
-       Onscroll            Atom = 0x55f08
-       Onseeked            Atom = 0x56708
-       Onseeking           Atom = 0x56f09
-       Onselect            Atom = 0x57808
-       Onshow              Atom = 0x58206
-       Onsort              Atom = 0x58b06
-       Onstalled           Atom = 0x59509
-       Onstorage           Atom = 0x59e09
-       Onsubmit            Atom = 0x5a708
-       Onsuspend           Atom = 0x5bb09
-       Ontimeupdate        Atom = 0xdb0c
-       Ontoggle            Atom = 0x5c408
-       Onunload            Atom = 0x5cc08
-       Onvolumechange      Atom = 0x5d40e
-       Onwaiting           Atom = 0x5e209
-       Open                Atom = 0x3cf04
-       Optgroup            Atom = 0xf608
-       Optimum             Atom = 0x5eb07
-       Option              Atom = 0x60006
-       Output              Atom = 0x49c06
-       P                   Atom = 0xc01
-       Param               Atom = 0xc05
-       Pattern             Atom = 0x5107
-       Ping                Atom = 0x7704
-       Placeholder         Atom = 0xc30b
-       Plaintext           Atom = 0xfd09
-       Poster              Atom = 0x15706
-       Pre                 Atom = 0x25e03
-       Preload             Atom = 0x25e07
-       Progress            Atom = 0x52c08
-       Prompt              Atom = 0x5fa06
-       Public              Atom = 0x41e06
-       Q                   Atom = 0x13101
-       Radiogroup          Atom = 0x30a
-       Readonly            Atom = 0x2fb08
-       Rel                 Atom = 0x25f03
-       Required            Atom = 0x1d008
-       Reversed            Atom = 0x5a08
-       Rows                Atom = 0x9204
-       Rowspan             Atom = 0x9207
-       Rp                  Atom = 0x1c602
-       Rt                  Atom = 0x13f02
-       Ruby                Atom = 0xaf04
-       S                   Atom = 0x2c01
-       Samp                Atom = 0x4e04
-       Sandbox             Atom = 0xbb07
-       Scope               Atom = 0x2bd05
-       Scoped              Atom = 0x2bd06
-       Script              Atom = 0x3d406
-       Seamless            Atom = 0x31c08
-       Section             Atom = 0x4e207
-       Select              Atom = 0x57a06
-       Selected            Atom = 0x57a08
-       Shape               Atom = 0x4f905
-       Size                Atom = 0x55504
-       Sizes               Atom = 0x55505
-       Small               Atom = 0x18f05
-       Sortable            Atom = 0x58d08
-       Sorted              Atom = 0x19906
-       Source              Atom = 0x1aa06
-       Spacer              Atom = 0x2db06
-       Span                Atom = 0x9504
-       Spellcheck          Atom = 0x3230a
-       Src                 Atom = 0x3c303
-       Srcdoc              Atom = 0x3c306
-       Srclang             Atom = 0x41107
-       Start               Atom = 0x38605
-       Step                Atom = 0x5f704
-       Strike              Atom = 0x53306
-       Strong              Atom = 0x55906
-       Style               Atom = 0x61105
-       Sub                 Atom = 0x5a903
-       Summary             Atom = 0x61607
-       Sup                 Atom = 0x61d03
-       Svg                 Atom = 0x62003
-       System              Atom = 0x62306
-       Tabindex            Atom = 0x46308
-       Table               Atom = 0x42d05
-       Target              Atom = 0x24b06
-       Tbody               Atom = 0x2e05
-       Td                  Atom = 0x4702
-       Template            Atom = 0x62608
-       Textarea            Atom = 0x2f608
-       Tfoot               Atom = 0x8c05
-       Th                  Atom = 0x22e02
-       Thead               Atom = 0x2d405
-       Time                Atom = 0xdd04
-       Title               Atom = 0xa105
-       Tr                  Atom = 0x10502
-       Track               Atom = 0x10505
-       Translate           Atom = 0x14009
-       Tt                  Atom = 0x5302
-       Type                Atom = 0x21404
-       Typemustmatch       Atom = 0x2140d
-       U                   Atom = 0xb01
-       Ul                  Atom = 0x8a02
-       Usemap              Atom = 0x51106
-       Value               Atom = 0x4005
-       Var                 Atom = 0x11503
-       Video               Atom = 0x28105
-       Wbr                 Atom = 0x12103
-       Width               Atom = 0x50705
-       Wrap                Atom = 0x58704
-       Xmp                 Atom = 0xc103
+       A                         Atom = 0x1
+       Abbr                      Atom = 0x4
+       Accept                    Atom = 0x1a06
+       AcceptCharset             Atom = 0x1a0e
+       Accesskey                 Atom = 0x2c09
+       Acronym                   Atom = 0xaa07
+       Action                    Atom = 0x27206
+       Address                   Atom = 0x6f307
+       Align                     Atom = 0xb105
+       Allowfullscreen           Atom = 0x2080f
+       Allowpaymentrequest       Atom = 0xc113
+       Allowusermedia            Atom = 0xdd0e
+       Alt                       Atom = 0xf303
+       Annotation                Atom = 0x1c90a
+       AnnotationXml             Atom = 0x1c90e
+       Applet                    Atom = 0x31906
+       Area                      Atom = 0x35604
+       Article                   Atom = 0x3fc07
+       As                        Atom = 0x3c02
+       Aside                     Atom = 0x10705
+       Async                     Atom = 0xff05
+       Audio                     Atom = 0x11505
+       Autocomplete              Atom = 0x2780c
+       Autofocus                 Atom = 0x12109
+       Autoplay                  Atom = 0x13c08
+       B                         Atom = 0x101
+       Base                      Atom = 0x3b04
+       Basefont                  Atom = 0x3b08
+       Bdi                       Atom = 0xba03
+       Bdo                       Atom = 0x14b03
+       Bgsound                   Atom = 0x15e07
+       Big                       Atom = 0x17003
+       Blink                     Atom = 0x17305
+       Blockquote                Atom = 0x1870a
+       Body                      Atom = 0x2804
+       Br                        Atom = 0x202
+       Button                    Atom = 0x19106
+       Canvas                    Atom = 0x10306
+       Caption                   Atom = 0x23107
+       Center                    Atom = 0x22006
+       Challenge                 Atom = 0x29b09
+       Charset                   Atom = 0x2107
+       Checked                   Atom = 0x47907
+       Cite                      Atom = 0x19c04
+       Class                     Atom = 0x56405
+       Code                      Atom = 0x5c504
+       Col                       Atom = 0x1ab03
+       Colgroup                  Atom = 0x1ab08
+       Color                     Atom = 0x1bf05
+       Cols                      Atom = 0x1c404
+       Colspan                   Atom = 0x1c407
+       Command                   Atom = 0x1d707
+       Content                   Atom = 0x58b07
+       Contenteditable           Atom = 0x58b0f
+       Contextmenu               Atom = 0x3800b
+       Controls                  Atom = 0x1de08
+       Coords                    Atom = 0x1ea06
+       Crossorigin               Atom = 0x1fb0b
+       Data                      Atom = 0x4a504
+       Datalist                  Atom = 0x4a508
+       Datetime                  Atom = 0x2b808
+       Dd                        Atom = 0x2d702
+       Default                   Atom = 0x10a07
+       Defer                     Atom = 0x5c705
+       Del                       Atom = 0x45203
+       Desc                      Atom = 0x56104
+       Details                   Atom = 0x7207
+       Dfn                       Atom = 0x8703
+       Dialog                    Atom = 0xbb06
+       Dir                       Atom = 0x9303
+       Dirname                   Atom = 0x9307
+       Disabled                  Atom = 0x16408
+       Div                       Atom = 0x16b03
+       Dl                        Atom = 0x5e602
+       Download                  Atom = 0x46308
+       Draggable                 Atom = 0x17a09
+       Dropzone                  Atom = 0x40508
+       Dt                        Atom = 0x64b02
+       Em                        Atom = 0x6e02
+       Embed                     Atom = 0x6e05
+       Enctype                   Atom = 0x28d07
+       Face                      Atom = 0x21e04
+       Fieldset                  Atom = 0x22608
+       Figcaption                Atom = 0x22e0a
+       Figure                    Atom = 0x24806
+       Font                      Atom = 0x3f04
+       Footer                    Atom = 0xf606
+       For                       Atom = 0x25403
+       ForeignObject             Atom = 0x2540d
+       Foreignobject             Atom = 0x2610d
+       Form                      Atom = 0x26e04
+       Formaction                Atom = 0x26e0a
+       Formenctype               Atom = 0x2890b
+       Formmethod                Atom = 0x2a40a
+       Formnovalidate            Atom = 0x2ae0e
+       Formtarget                Atom = 0x2c00a
+       Frame                     Atom = 0x8b05
+       Frameset                  Atom = 0x8b08
+       H1                        Atom = 0x15c02
+       H2                        Atom = 0x2de02
+       H3                        Atom = 0x30d02
+       H4                        Atom = 0x34502
+       H5                        Atom = 0x34f02
+       H6                        Atom = 0x64d02
+       Head                      Atom = 0x33104
+       Header                    Atom = 0x33106
+       Headers                   Atom = 0x33107
+       Height                    Atom = 0x5206
+       Hgroup                    Atom = 0x2ca06
+       Hidden                    Atom = 0x2d506
+       High                      Atom = 0x2db04
+       Hr                        Atom = 0x15702
+       Href                      Atom = 0x2e004
+       Hreflang                  Atom = 0x2e008
+       Html                      Atom = 0x5604
+       HttpEquiv                 Atom = 0x2e80a
+       I                         Atom = 0x601
+       Icon                      Atom = 0x58a04
+       Id                        Atom = 0x10902
+       Iframe                    Atom = 0x2fc06
+       Image                     Atom = 0x30205
+       Img                       Atom = 0x30703
+       Input                     Atom = 0x44b05
+       Inputmode                 Atom = 0x44b09
+       Ins                       Atom = 0x20403
+       Integrity                 Atom = 0x23f09
+       Is                        Atom = 0x16502
+       Isindex                   Atom = 0x30f07
+       Ismap                     Atom = 0x31605
+       Itemid                    Atom = 0x38b06
+       Itemprop                  Atom = 0x19d08
+       Itemref                   Atom = 0x3cd07
+       Itemscope                 Atom = 0x67109
+       Itemtype                  Atom = 0x31f08
+       Kbd                       Atom = 0xb903
+       Keygen                    Atom = 0x3206
+       Keytype                   Atom = 0xd607
+       Kind                      Atom = 0x17704
+       Label                     Atom = 0x5905
+       Lang                      Atom = 0x2e404
+       Legend                    Atom = 0x18106
+       Li                        Atom = 0xb202
+       Link                      Atom = 0x17404
+       List                      Atom = 0x4a904
+       Listing                   Atom = 0x4a907
+       Loop                      Atom = 0x5d04
+       Low                       Atom = 0xc303
+       Main                      Atom = 0x1004
+       Malignmark                Atom = 0xb00a
+       Manifest                  Atom = 0x6d708
+       Map                       Atom = 0x31803
+       Mark                      Atom = 0xb604
+       Marquee                   Atom = 0x32707
+       Math                      Atom = 0x32e04
+       Max                       Atom = 0x33d03
+       Maxlength                 Atom = 0x33d09
+       Media                     Atom = 0xe605
+       Mediagroup                Atom = 0xe60a
+       Menu                      Atom = 0x38704
+       Menuitem                  Atom = 0x38708
+       Meta                      Atom = 0x4b804
+       Meter                     Atom = 0x9805
+       Method                    Atom = 0x2a806
+       Mglyph                    Atom = 0x30806
+       Mi                        Atom = 0x34702
+       Min                       Atom = 0x34703
+       Minlength                 Atom = 0x34709
+       Mn                        Atom = 0x2b102
+       Mo                        Atom = 0xa402
+       Ms                        Atom = 0x67402
+       Mtext                     Atom = 0x35105
+       Multiple                  Atom = 0x35f08
+       Muted                     Atom = 0x36705
+       Name                      Atom = 0x9604
+       Nav                       Atom = 0x1303
+       Nobr                      Atom = 0x3704
+       Noembed                   Atom = 0x6c07
+       Noframes                  Atom = 0x8908
+       Nomodule                  Atom = 0xa208
+       Nonce                     Atom = 0x1a605
+       Noscript                  Atom = 0x21608
+       Novalidate                Atom = 0x2b20a
+       Object                    Atom = 0x26806
+       Ol                        Atom = 0x13702
+       Onabort                   Atom = 0x19507
+       Onafterprint              Atom = 0x2360c
+       Onautocomplete            Atom = 0x2760e
+       Onautocompleteerror       Atom = 0x27613
+       Onauxclick                Atom = 0x61f0a
+       Onbeforeprint             Atom = 0x69e0d
+       Onbeforeunload            Atom = 0x6e70e
+       Onblur                    Atom = 0x56d06
+       Oncancel                  Atom = 0x11908
+       Oncanplay                 Atom = 0x14d09
+       Oncanplaythrough          Atom = 0x14d10
+       Onchange                  Atom = 0x41b08
+       Onclick                   Atom = 0x2f507
+       Onclose                   Atom = 0x36c07
+       Oncontextmenu             Atom = 0x37e0d
+       Oncopy                    Atom = 0x39106
+       Oncuechange               Atom = 0x3970b
+       Oncut                     Atom = 0x3a205
+       Ondblclick                Atom = 0x3a70a
+       Ondrag                    Atom = 0x3b106
+       Ondragend                 Atom = 0x3b109
+       Ondragenter               Atom = 0x3ba0b
+       Ondragexit                Atom = 0x3c50a
+       Ondragleave               Atom = 0x3df0b
+       Ondragover                Atom = 0x3ea0a
+       Ondragstart               Atom = 0x3f40b
+       Ondrop                    Atom = 0x40306
+       Ondurationchange          Atom = 0x41310
+       Onemptied                 Atom = 0x40a09
+       Onended                   Atom = 0x42307
+       Onerror                   Atom = 0x42a07
+       Onfocus                   Atom = 0x43107
+       Onhashchange              Atom = 0x43d0c
+       Oninput                   Atom = 0x44907
+       Oninvalid                 Atom = 0x45509
+       Onkeydown                 Atom = 0x45e09
+       Onkeypress                Atom = 0x46b0a
+       Onkeyup                   Atom = 0x48007
+       Onlanguagechange          Atom = 0x48d10
+       Onload                    Atom = 0x49d06
+       Onloadeddata              Atom = 0x49d0c
+       Onloadedmetadata          Atom = 0x4b010
+       Onloadend                 Atom = 0x4c609
+       Onloadstart               Atom = 0x4cf0b
+       Onmessage                 Atom = 0x4da09
+       Onmessageerror            Atom = 0x4da0e
+       Onmousedown               Atom = 0x4e80b
+       Onmouseenter              Atom = 0x4f30c
+       Onmouseleave              Atom = 0x4ff0c
+       Onmousemove               Atom = 0x50b0b
+       Onmouseout                Atom = 0x5160a
+       Onmouseover               Atom = 0x5230b
+       Onmouseup                 Atom = 0x52e09
+       Onmousewheel              Atom = 0x53c0c
+       Onoffline                 Atom = 0x54809
+       Ononline                  Atom = 0x55108
+       Onpagehide                Atom = 0x5590a
+       Onpageshow                Atom = 0x5730a
+       Onpaste                   Atom = 0x57f07
+       Onpause                   Atom = 0x59a07
+       Onplay                    Atom = 0x5a406
+       Onplaying                 Atom = 0x5a409
+       Onpopstate                Atom = 0x5ad0a
+       Onprogress                Atom = 0x5b70a
+       Onratechange              Atom = 0x5cc0c
+       Onrejectionhandled        Atom = 0x5d812
+       Onreset                   Atom = 0x5ea07
+       Onresize                  Atom = 0x5f108
+       Onscroll                  Atom = 0x60008
+       Onsecuritypolicyviolation Atom = 0x60819
+       Onseeked                  Atom = 0x62908
+       Onseeking                 Atom = 0x63109
+       Onselect                  Atom = 0x63a08
+       Onshow                    Atom = 0x64406
+       Onsort                    Atom = 0x64f06
+       Onstalled                 Atom = 0x65909
+       Onstorage                 Atom = 0x66209
+       Onsubmit                  Atom = 0x66b08
+       Onsuspend                 Atom = 0x67b09
+       Ontimeupdate              Atom = 0x400c
+       Ontoggle                  Atom = 0x68408
+       Onunhandledrejection      Atom = 0x68c14
+       Onunload                  Atom = 0x6ab08
+       Onvolumechange            Atom = 0x6b30e
+       Onwaiting                 Atom = 0x6c109
+       Onwheel                   Atom = 0x6ca07
+       Open                      Atom = 0x1a304
+       Optgroup                  Atom = 0x5f08
+       Optimum                   Atom = 0x6d107
+       Option                    Atom = 0x6e306
+       Output                    Atom = 0x51d06
+       P                         Atom = 0xc01
+       Param                     Atom = 0xc05
+       Pattern                   Atom = 0x6607
+       Picture                   Atom = 0x7b07
+       Ping                      Atom = 0xef04
+       Placeholder               Atom = 0x1310b
+       Plaintext                 Atom = 0x1b209
+       Playsinline               Atom = 0x1400b
+       Poster                    Atom = 0x2cf06
+       Pre                       Atom = 0x47003
+       Preload                   Atom = 0x48607
+       Progress                  Atom = 0x5b908
+       Prompt                    Atom = 0x53606
+       Public                    Atom = 0x58606
+       Q                         Atom = 0xcf01
+       Radiogroup                Atom = 0x30a
+       Rb                        Atom = 0x3a02
+       Readonly                  Atom = 0x35708
+       Referrerpolicy            Atom = 0x3d10e
+       Rel                       Atom = 0x48703
+       Required                  Atom = 0x24c08
+       Reversed                  Atom = 0x8008
+       Rows                      Atom = 0x9c04
+       Rowspan                   Atom = 0x9c07
+       Rp                        Atom = 0x23c02
+       Rt                        Atom = 0x19a02
+       Rtc                       Atom = 0x19a03
+       Ruby                      Atom = 0xfb04
+       S                         Atom = 0x2501
+       Samp                      Atom = 0x7804
+       Sandbox                   Atom = 0x12907
+       Scope                     Atom = 0x67505
+       Scoped                    Atom = 0x67506
+       Script                    Atom = 0x21806
+       Seamless                  Atom = 0x37108
+       Section                   Atom = 0x56807
+       Select                    Atom = 0x63c06
+       Selected                  Atom = 0x63c08
+       Shape                     Atom = 0x1e505
+       Size                      Atom = 0x5f504
+       Sizes                     Atom = 0x5f505
+       Slot                      Atom = 0x1ef04
+       Small                     Atom = 0x20605
+       Sortable                  Atom = 0x65108
+       Sorted                    Atom = 0x33706
+       Source                    Atom = 0x37806
+       Spacer                    Atom = 0x43706
+       Span                      Atom = 0x9f04
+       Spellcheck                Atom = 0x4740a
+       Src                       Atom = 0x5c003
+       Srcdoc                    Atom = 0x5c006
+       Srclang                   Atom = 0x5f907
+       Srcset                    Atom = 0x6f906
+       Start                     Atom = 0x3fa05
+       Step                      Atom = 0x58304
+       Strike                    Atom = 0xd206
+       Strong                    Atom = 0x6dd06
+       Style                     Atom = 0x6ff05
+       Sub                       Atom = 0x66d03
+       Summary                   Atom = 0x70407
+       Sup                       Atom = 0x70b03
+       Svg                       Atom = 0x70e03
+       System                    Atom = 0x71106
+       Tabindex                  Atom = 0x4be08
+       Table                     Atom = 0x59505
+       Target                    Atom = 0x2c406
+       Tbody                     Atom = 0x2705
+       Td                        Atom = 0x9202
+       Template                  Atom = 0x71408
+       Textarea                  Atom = 0x35208
+       Tfoot                     Atom = 0xf505
+       Th                        Atom = 0x15602
+       Thead                     Atom = 0x33005
+       Time                      Atom = 0x4204
+       Title                     Atom = 0x11005
+       Tr                        Atom = 0xcc02
+       Track                     Atom = 0x1ba05
+       Translate                 Atom = 0x1f209
+       Tt                        Atom = 0x6802
+       Type                      Atom = 0xd904
+       Typemustmatch             Atom = 0x2900d
+       U                         Atom = 0xb01
+       Ul                        Atom = 0xa702
+       Updateviacache            Atom = 0x460e
+       Usemap                    Atom = 0x59e06
+       Value                     Atom = 0x1505
+       Var                       Atom = 0x16d03
+       Video                     Atom = 0x2f105
+       Wbr                       Atom = 0x57c03
+       Width                     Atom = 0x64905
+       Workertype                Atom = 0x71c0a
+       Wrap                      Atom = 0x72604
+       Xmp                       Atom = 0x12f03
 )
 
-const hash0 = 0xc17da63e
+const hash0 = 0x81cdf10e
 
-const maxAtomLen = 19
+const maxAtomLen = 25
 
 var table = [1 << 9]Atom{
-       0x1:   0x48a0b, // onmousemove
-       0x2:   0x5e209, // onwaiting
-       0x3:   0x1fa13, // onautocompleteerror
-       0x4:   0x5fa06, // prompt
-       0x7:   0x5eb07, // optimum
-       0x8:   0x1604,  // mark
-       0xa:   0x5ad07, // itemref
-       0xb:   0x4fe0a, // onpageshow
-       0xc:   0x57a06, // select
-       0xd:   0x17b09, // draggable
-       0xe:   0x3e03,  // nav
-       0xf:   0x17507, // command
-       0x11:  0xb01,   // u
-       0x14:  0x2d507, // headers
-       0x15:  0x44a08, // datalist
-       0x17:  0x4e04,  // samp
-       0x1a:  0x3fb09, // onkeydown
-       0x1b:  0x55f08, // onscroll
-       0x1c:  0x15003, // col
-       0x20:  0x3c908, // itemprop
-       0x21:  0x2780a, // http-equiv
-       0x22:  0x61d03, // sup
-       0x24:  0x1d008, // required
-       0x2b:  0x25e07, // preload
-       0x2c:  0x6040d, // onbeforeprint
-       0x2d:  0x3600b, // ondragenter
-       0x2e:  0x50902, // dt
-       0x2f:  0x5a708, // onsubmit
-       0x30:  0x27002, // hr
-       0x31:  0x32f0d, // oncontextmenu
-       0x33:  0x29c05, // image
-       0x34:  0x50d07, // onpause
-       0x35:  0x25906, // hgroup
-       0x36:  0x7704,  // ping
-       0x37:  0x57808, // onselect
-       0x3a:  0x11303, // div
-       0x3b:  0x1fa0e, // onautocomplete
-       0x40:  0x2eb02, // mi
-       0x41:  0x31c08, // seamless
-       0x42:  0x2807,  // charset
-       0x43:  0x8502,  // id
-       0x44:  0x5200a, // onpopstate
-       0x45:  0x3ef03, // del
-       0x46:  0x2cb07, // marquee
-       0x47:  0x3309,  // accesskey
-       0x49:  0x8d06,  // footer
-       0x4a:  0x44e04, // list
-       0x4b:  0x2b005, // ismap
-       0x51:  0x33804, // menu
-       0x52:  0x2f04,  // body
-       0x55:  0x9a08,  // frameset
-       0x56:  0x54a07, // onreset
-       0x57:  0x12705, // blink
-       0x58:  0xa105,  // title
-       0x59:  0x38807, // article
-       0x5b:  0x22e02, // th
-       0x5d:  0x13101, // q
-       0x5e:  0x3cf04, // open
-       0x5f:  0x2fa04, // area
-       0x61:  0x44206, // onload
-       0x62:  0xda04,  // font
-       0x63:  0xd604,  // base
-       0x64:  0x16207, // colspan
-       0x65:  0x53707, // keytype
-       0x66:  0x11e02, // dl
-       0x68:  0x1b008, // fieldset
-       0x6a:  0x2eb03, // min
-       0x6b:  0x11503, // var
-       0x6f:  0x2d506, // header
-       0x70:  0x13f02, // rt
-       0x71:  0x15008, // colgroup
-       0x72:  0x23502, // mn
-       0x74:  0x13a07, // onabort
-       0x75:  0x3906,  // keygen
-       0x76:  0x4c209, // onoffline
-       0x77:  0x21f09, // challenge
-       0x78:  0x2b203, // map
-       0x7a:  0x2e902, // h4
-       0x7b:  0x3b607, // onerror
-       0x7c:  0x2e109, // maxlength
-       0x7d:  0x2f505, // mtext
-       0x7e:  0xbb07,  // sandbox
-       0x7f:  0x58b06, // onsort
-       0x80:  0x100a,  // malignmark
-       0x81:  0x45d04, // meta
-       0x82:  0x7b05,  // async
-       0x83:  0x2a702, // h3
-       0x84:  0x26702, // dd
-       0x85:  0x27004, // href
-       0x86:  0x6e0a,  // mediagroup
-       0x87:  0x19406, // coords
-       0x88:  0x41107, // srclang
-       0x89:  0x34d0a, // ondblclick
-       0x8a:  0x4005,  // value
-       0x8c:  0xe908,  // oncancel
-       0x8e:  0x3230a, // spellcheck
-       0x8f:  0x9a05,  // frame
-       0x91:  0x12403, // big
-       0x94:  0x1f606, // action
-       0x95:  0x6903,  // dir
-       0x97:  0x2fb08, // readonly
-       0x99:  0x42d05, // table
-       0x9a:  0x61607, // summary
-       0x9b:  0x12103, // wbr
-       0x9c:  0x30a,   // radiogroup
-       0x9d:  0x6c04,  // name
-       0x9f:  0x62306, // system
-       0xa1:  0x15d05, // color
-       0xa2:  0x7f06,  // canvas
-       0xa3:  0x25504, // html
-       0xa5:  0x56f09, // onseeking
-       0xac:  0x4f905, // shape
-       0xad:  0x25f03, // rel
-       0xae:  0x28510, // oncanplaythrough
-       0xaf:  0x3760a, // ondragover
-       0xb0:  0x62608, // template
-       0xb1:  0x1d80d, // foreignObject
-       0xb3:  0x9204,  // rows
-       0xb6:  0x44e07, // listing
-       0xb7:  0x49c06, // output
-       0xb9:  0x3310b, // contextmenu
-       0xbb:  0x11f03, // low
-       0xbc:  0x1c602, // rp
-       0xbd:  0x5bb09, // onsuspend
-       0xbe:  0x13606, // button
-       0xbf:  0x4db04, // desc
-       0xc1:  0x4e207, // section
-       0xc2:  0x52a0a, // onprogress
-       0xc3:  0x59e09, // onstorage
-       0xc4:  0x2d204, // math
-       0xc5:  0x4503,  // alt
-       0xc7:  0x8a02,  // ul
-       0xc8:  0x5107,  // pattern
-       0xc9:  0x4b60c, // onmousewheel
-       0xca:  0x35709, // ondragend
-       0xcb:  0xaf04,  // ruby
-       0xcc:  0xc01,   // p
-       0xcd:  0x31707, // onclose
-       0xce:  0x24205, // meter
-       0xcf:  0x11807, // bgsound
-       0xd2:  0x25106, // height
-       0xd4:  0x101,   // b
-       0xd5:  0x2c308, // itemtype
-       0xd8:  0x1bb07, // caption
-       0xd9:  0x10c08, // disabled
-       0xdb:  0x33808, // menuitem
-       0xdc:  0x62003, // svg
-       0xdd:  0x18f05, // small
-       0xde:  0x44a04, // data
-       0xe0:  0x4cb08, // ononline
-       0xe1:  0x2a206, // mglyph
-       0xe3:  0x6505,  // embed
-       0xe4:  0x10502, // tr
-       0xe5:  0x46b0b, // onloadstart
-       0xe7:  0x3c306, // srcdoc
-       0xeb:  0x5c408, // ontoggle
-       0xed:  0xe703,  // bdo
-       0xee:  0x4702,  // td
-       0xef:  0x8305,  // aside
-       0xf0:  0x29402, // h2
-       0xf1:  0x52c08, // progress
-       0xf2:  0x12c0a, // blockquote
-       0xf4:  0xf005,  // label
-       0xf5:  0x601,   // i
-       0xf7:  0x9207,  // rowspan
-       0xfb:  0x51709, // onplaying
-       0xfd:  0x2a103, // img
-       0xfe:  0xf608,  // optgroup
-       0xff:  0x42307, // content
-       0x101: 0x53e0c, // onratechange
-       0x103: 0x3da0c, // onhashchange
-       0x104: 0x4807,  // details
-       0x106: 0x40008, // download
-       0x109: 0x14009, // translate
-       0x10b: 0x4230f, // contenteditable
-       0x10d: 0x36b0b, // ondragleave
-       0x10e: 0x2106,  // accept
-       0x10f: 0x57a08, // selected
-       0x112: 0x1f20a, // formaction
-       0x113: 0x5b506, // center
-       0x115: 0x45510, // onloadedmetadata
-       0x116: 0x12804, // link
-       0x117: 0xdd04,  // time
-       0x118: 0x19f0b, // crossorigin
-       0x119: 0x3bd07, // onfocus
-       0x11a: 0x58704, // wrap
-       0x11b: 0x42204, // icon
-       0x11d: 0x28105, // video
-       0x11e: 0x4de05, // class
-       0x121: 0x5d40e, // onvolumechange
-       0x122: 0xaa06,  // onblur
-       0x123: 0x2b909, // itemscope
-       0x124: 0x61105, // style
-       0x127: 0x41e06, // public
-       0x129: 0x2320e, // formnovalidate
-       0x12a: 0x58206, // onshow
-       0x12c: 0x51706, // onplay
-       0x12d: 0x3c804, // cite
-       0x12e: 0x2bc02, // ms
-       0x12f: 0xdb0c,  // ontimeupdate
-       0x130: 0x10904, // kind
-       0x131: 0x2470a, // formtarget
-       0x135: 0x3af07, // onended
-       0x136: 0x26506, // hidden
-       0x137: 0x2c01,  // s
-       0x139: 0x2280a, // formmethod
-       0x13a: 0x3e805, // input
-       0x13c: 0x50b02, // h6
-       0x13d: 0xc902,  // ol
-       0x13e: 0x3420b, // oncuechange
-       0x13f: 0x1e50d, // foreignobject
-       0x143: 0x4e70e, // onbeforeunload
-       0x144: 0x2bd05, // scope
-       0x145: 0x39609, // onemptied
-       0x146: 0x14b05, // defer
-       0x147: 0xc103,  // xmp
-       0x148: 0x39f10, // ondurationchange
-       0x149: 0x1903,  // kbd
-       0x14c: 0x47609, // onmessage
-       0x14d: 0x60006, // option
-       0x14e: 0x2eb09, // minlength
-       0x14f: 0x32807, // checked
-       0x150: 0xce08,  // autoplay
-       0x152: 0x202,   // br
-       0x153: 0x2360a, // novalidate
-       0x156: 0x6307,  // noembed
-       0x159: 0x31007, // onclick
-       0x15a: 0x47f0b, // onmousedown
-       0x15b: 0x3a708, // onchange
-       0x15e: 0x3f209, // oninvalid
-       0x15f: 0x2bd06, // scoped
-       0x160: 0x18808, // controls
-       0x161: 0x30b05, // muted
-       0x162: 0x58d08, // sortable
-       0x163: 0x51106, // usemap
-       0x164: 0x1b80a, // figcaption
-       0x165: 0x35706, // ondrag
-       0x166: 0x26b04, // high
-       0x168: 0x3c303, // src
-       0x169: 0x15706, // poster
-       0x16b: 0x1670e, // annotation-xml
-       0x16c: 0x5f704, // step
-       0x16d: 0x4,     // abbr
-       0x16e: 0x1b06,  // dialog
-       0x170: 0x1202,  // li
-       0x172: 0x3ed02, // mo
-       0x175: 0x1d803, // for
-       0x176: 0x1a803, // ins
-       0x178: 0x55504, // size
-       0x179: 0x43210, // onlanguagechange
-       0x17a: 0x8607,  // default
-       0x17b: 0x1a03,  // bdi
-       0x17c: 0x4d30a, // onpagehide
-       0x17d: 0x6907,  // dirname
-       0x17e: 0x21404, // type
-       0x17f: 0x1f204, // form
-       0x181: 0x28509, // oncanplay
-       0x182: 0x6103,  // dfn
-       0x183: 0x46308, // tabindex
-       0x186: 0x6502,  // em
-       0x187: 0x27404, // lang
-       0x189: 0x39108, // dropzone
-       0x18a: 0x4080a, // onkeypress
-       0x18b: 0x23c08, // datetime
-       0x18c: 0x16204, // cols
-       0x18d: 0x1,     // a
-       0x18e: 0x4420c, // onloadeddata
-       0x190: 0xa605,  // audio
-       0x192: 0x2e05,  // tbody
-       0x193: 0x22c06, // method
-       0x195: 0xf404,  // loop
-       0x196: 0x29606, // iframe
-       0x198: 0x2d504, // head
-       0x19e: 0x5f108, // manifest
-       0x19f: 0xb309,  // autofocus
-       0x1a0: 0x14904, // code
-       0x1a1: 0x55906, // strong
-       0x1a2: 0x30308, // multiple
-       0x1a3: 0xc05,   // param
-       0x1a6: 0x21107, // enctype
-       0x1a7: 0x5b304, // face
-       0x1a8: 0xfd09,  // plaintext
-       0x1a9: 0x26e02, // h1
-       0x1aa: 0x59509, // onstalled
-       0x1ad: 0x3d406, // script
-       0x1ae: 0x2db06, // spacer
-       0x1af: 0x55108, // onresize
-       0x1b0: 0x4a20b, // onmouseover
-       0x1b1: 0x5cc08, // onunload
-       0x1b2: 0x56708, // onseeked
-       0x1b4: 0x2140d, // typemustmatch
-       0x1b5: 0x1cc06, // figure
-       0x1b6: 0x4950a, // onmouseout
-       0x1b7: 0x25e03, // pre
-       0x1b8: 0x50705, // width
-       0x1b9: 0x19906, // sorted
-       0x1bb: 0x5704,  // nobr
-       0x1be: 0x5302,  // tt
-       0x1bf: 0x1105,  // align
-       0x1c0: 0x3e607, // oninput
-       0x1c3: 0x41807, // onkeyup
-       0x1c6: 0x1c00c, // onafterprint
-       0x1c7: 0x210e,  // accept-charset
-       0x1c8: 0x33c06, // itemid
-       0x1c9: 0x3e809, // inputmode
-       0x1cb: 0x53306, // strike
-       0x1cc: 0x5a903, // sub
-       0x1cd: 0x10505, // track
-       0x1ce: 0x38605, // start
-       0x1d0: 0xd608,  // basefont
-       0x1d6: 0x1aa06, // source
-       0x1d7: 0x18206, // legend
-       0x1d8: 0x2d405, // thead
-       0x1da: 0x8c05,  // tfoot
-       0x1dd: 0x1ec06, // object
-       0x1de: 0x6e05,  // media
-       0x1df: 0x1670a, // annotation
-       0x1e0: 0x20d0b, // formenctype
-       0x1e2: 0x3d208, // noscript
-       0x1e4: 0x55505, // sizes
-       0x1e5: 0x1fc0c, // autocomplete
-       0x1e6: 0x9504,  // span
-       0x1e7: 0x9808,  // noframes
-       0x1e8: 0x24b06, // target
-       0x1e9: 0x38f06, // ondrop
-       0x1ea: 0x2b306, // applet
-       0x1ec: 0x5a08,  // reversed
-       0x1f0: 0x2a907, // isindex
-       0x1f3: 0x27008, // hreflang
-       0x1f5: 0x2f302, // h5
-       0x1f6: 0x4f307, // address
-       0x1fa: 0x2e103, // max
-       0x1fb: 0xc30b,  // placeholder
-       0x1fc: 0x2f608, // textarea
-       0x1fe: 0x4ad09, // onmouseup
-       0x1ff: 0x3800b, // ondragstart
+       0x1:   0xe60a,  // mediagroup
+       0x2:   0x2e404, // lang
+       0x4:   0x2c09,  // accesskey
+       0x5:   0x8b08,  // frameset
+       0x7:   0x63a08, // onselect
+       0x8:   0x71106, // system
+       0xa:   0x64905, // width
+       0xc:   0x2890b, // formenctype
+       0xd:   0x13702, // ol
+       0xe:   0x3970b, // oncuechange
+       0x10:  0x14b03, // bdo
+       0x11:  0x11505, // audio
+       0x12:  0x17a09, // draggable
+       0x14:  0x2f105, // video
+       0x15:  0x2b102, // mn
+       0x16:  0x38704, // menu
+       0x17:  0x2cf06, // poster
+       0x19:  0xf606,  // footer
+       0x1a:  0x2a806, // method
+       0x1b:  0x2b808, // datetime
+       0x1c:  0x19507, // onabort
+       0x1d:  0x460e,  // updateviacache
+       0x1e:  0xff05,  // async
+       0x1f:  0x49d06, // onload
+       0x21:  0x11908, // oncancel
+       0x22:  0x62908, // onseeked
+       0x23:  0x30205, // image
+       0x24:  0x5d812, // onrejectionhandled
+       0x26:  0x17404, // link
+       0x27:  0x51d06, // output
+       0x28:  0x33104, // head
+       0x29:  0x4ff0c, // onmouseleave
+       0x2a:  0x57f07, // onpaste
+       0x2b:  0x5a409, // onplaying
+       0x2c:  0x1c407, // colspan
+       0x2f:  0x1bf05, // color
+       0x30:  0x5f504, // size
+       0x31:  0x2e80a, // http-equiv
+       0x33:  0x601,   // i
+       0x34:  0x5590a, // onpagehide
+       0x35:  0x68c14, // onunhandledrejection
+       0x37:  0x42a07, // onerror
+       0x3a:  0x3b08,  // basefont
+       0x3f:  0x1303,  // nav
+       0x40:  0x17704, // kind
+       0x41:  0x35708, // readonly
+       0x42:  0x30806, // mglyph
+       0x44:  0xb202,  // li
+       0x46:  0x2d506, // hidden
+       0x47:  0x70e03, // svg
+       0x48:  0x58304, // step
+       0x49:  0x23f09, // integrity
+       0x4a:  0x58606, // public
+       0x4c:  0x1ab03, // col
+       0x4d:  0x1870a, // blockquote
+       0x4e:  0x34f02, // h5
+       0x50:  0x5b908, // progress
+       0x51:  0x5f505, // sizes
+       0x52:  0x34502, // h4
+       0x56:  0x33005, // thead
+       0x57:  0xd607,  // keytype
+       0x58:  0x5b70a, // onprogress
+       0x59:  0x44b09, // inputmode
+       0x5a:  0x3b109, // ondragend
+       0x5d:  0x3a205, // oncut
+       0x5e:  0x43706, // spacer
+       0x5f:  0x1ab08, // colgroup
+       0x62:  0x16502, // is
+       0x65:  0x3c02,  // as
+       0x66:  0x54809, // onoffline
+       0x67:  0x33706, // sorted
+       0x69:  0x48d10, // onlanguagechange
+       0x6c:  0x43d0c, // onhashchange
+       0x6d:  0x9604,  // name
+       0x6e:  0xf505,  // tfoot
+       0x6f:  0x56104, // desc
+       0x70:  0x33d03, // max
+       0x72:  0x1ea06, // coords
+       0x73:  0x30d02, // h3
+       0x74:  0x6e70e, // onbeforeunload
+       0x75:  0x9c04,  // rows
+       0x76:  0x63c06, // select
+       0x77:  0x9805,  // meter
+       0x78:  0x38b06, // itemid
+       0x79:  0x53c0c, // onmousewheel
+       0x7a:  0x5c006, // srcdoc
+       0x7d:  0x1ba05, // track
+       0x7f:  0x31f08, // itemtype
+       0x82:  0xa402,  // mo
+       0x83:  0x41b08, // onchange
+       0x84:  0x33107, // headers
+       0x85:  0x5cc0c, // onratechange
+       0x86:  0x60819, // onsecuritypolicyviolation
+       0x88:  0x4a508, // datalist
+       0x89:  0x4e80b, // onmousedown
+       0x8a:  0x1ef04, // slot
+       0x8b:  0x4b010, // onloadedmetadata
+       0x8c:  0x1a06,  // accept
+       0x8d:  0x26806, // object
+       0x91:  0x6b30e, // onvolumechange
+       0x92:  0x2107,  // charset
+       0x93:  0x27613, // onautocompleteerror
+       0x94:  0xc113,  // allowpaymentrequest
+       0x95:  0x2804,  // body
+       0x96:  0x10a07, // default
+       0x97:  0x63c08, // selected
+       0x98:  0x21e04, // face
+       0x99:  0x1e505, // shape
+       0x9b:  0x68408, // ontoggle
+       0x9e:  0x64b02, // dt
+       0x9f:  0xb604,  // mark
+       0xa1:  0xb01,   // u
+       0xa4:  0x6ab08, // onunload
+       0xa5:  0x5d04,  // loop
+       0xa6:  0x16408, // disabled
+       0xaa:  0x42307, // onended
+       0xab:  0xb00a,  // malignmark
+       0xad:  0x67b09, // onsuspend
+       0xae:  0x35105, // mtext
+       0xaf:  0x64f06, // onsort
+       0xb0:  0x19d08, // itemprop
+       0xb3:  0x67109, // itemscope
+       0xb4:  0x17305, // blink
+       0xb6:  0x3b106, // ondrag
+       0xb7:  0xa702,  // ul
+       0xb8:  0x26e04, // form
+       0xb9:  0x12907, // sandbox
+       0xba:  0x8b05,  // frame
+       0xbb:  0x1505,  // value
+       0xbc:  0x66209, // onstorage
+       0xbf:  0xaa07,  // acronym
+       0xc0:  0x19a02, // rt
+       0xc2:  0x202,   // br
+       0xc3:  0x22608, // fieldset
+       0xc4:  0x2900d, // typemustmatch
+       0xc5:  0xa208,  // nomodule
+       0xc6:  0x6c07,  // noembed
+       0xc7:  0x69e0d, // onbeforeprint
+       0xc8:  0x19106, // button
+       0xc9:  0x2f507, // onclick
+       0xca:  0x70407, // summary
+       0xcd:  0xfb04,  // ruby
+       0xce:  0x56405, // class
+       0xcf:  0x3f40b, // ondragstart
+       0xd0:  0x23107, // caption
+       0xd4:  0xdd0e,  // allowusermedia
+       0xd5:  0x4cf0b, // onloadstart
+       0xd9:  0x16b03, // div
+       0xda:  0x4a904, // list
+       0xdb:  0x32e04, // math
+       0xdc:  0x44b05, // input
+       0xdf:  0x3ea0a, // ondragover
+       0xe0:  0x2de02, // h2
+       0xe2:  0x1b209, // plaintext
+       0xe4:  0x4f30c, // onmouseenter
+       0xe7:  0x47907, // checked
+       0xe8:  0x47003, // pre
+       0xea:  0x35f08, // multiple
+       0xeb:  0xba03,  // bdi
+       0xec:  0x33d09, // maxlength
+       0xed:  0xcf01,  // q
+       0xee:  0x61f0a, // onauxclick
+       0xf0:  0x57c03, // wbr
+       0xf2:  0x3b04,  // base
+       0xf3:  0x6e306, // option
+       0xf5:  0x41310, // ondurationchange
+       0xf7:  0x8908,  // noframes
+       0xf9:  0x40508, // dropzone
+       0xfb:  0x67505, // scope
+       0xfc:  0x8008,  // reversed
+       0xfd:  0x3ba0b, // ondragenter
+       0xfe:  0x3fa05, // start
+       0xff:  0x12f03, // xmp
+       0x100: 0x5f907, // srclang
+       0x101: 0x30703, // img
+       0x104: 0x101,   // b
+       0x105: 0x25403, // for
+       0x106: 0x10705, // aside
+       0x107: 0x44907, // oninput
+       0x108: 0x35604, // area
+       0x109: 0x2a40a, // formmethod
+       0x10a: 0x72604, // wrap
+       0x10c: 0x23c02, // rp
+       0x10d: 0x46b0a, // onkeypress
+       0x10e: 0x6802,  // tt
+       0x110: 0x34702, // mi
+       0x111: 0x36705, // muted
+       0x112: 0xf303,  // alt
+       0x113: 0x5c504, // code
+       0x114: 0x6e02,  // em
+       0x115: 0x3c50a, // ondragexit
+       0x117: 0x9f04,  // span
+       0x119: 0x6d708, // manifest
+       0x11a: 0x38708, // menuitem
+       0x11b: 0x58b07, // content
+       0x11d: 0x6c109, // onwaiting
+       0x11f: 0x4c609, // onloadend
+       0x121: 0x37e0d, // oncontextmenu
+       0x123: 0x56d06, // onblur
+       0x124: 0x3fc07, // article
+       0x125: 0x9303,  // dir
+       0x126: 0xef04,  // ping
+       0x127: 0x24c08, // required
+       0x128: 0x45509, // oninvalid
+       0x129: 0xb105,  // align
+       0x12b: 0x58a04, // icon
+       0x12c: 0x64d02, // h6
+       0x12d: 0x1c404, // cols
+       0x12e: 0x22e0a, // figcaption
+       0x12f: 0x45e09, // onkeydown
+       0x130: 0x66b08, // onsubmit
+       0x131: 0x14d09, // oncanplay
+       0x132: 0x70b03, // sup
+       0x133: 0xc01,   // p
+       0x135: 0x40a09, // onemptied
+       0x136: 0x39106, // oncopy
+       0x137: 0x19c04, // cite
+       0x138: 0x3a70a, // ondblclick
+       0x13a: 0x50b0b, // onmousemove
+       0x13c: 0x66d03, // sub
+       0x13d: 0x48703, // rel
+       0x13e: 0x5f08,  // optgroup
+       0x142: 0x9c07,  // rowspan
+       0x143: 0x37806, // source
+       0x144: 0x21608, // noscript
+       0x145: 0x1a304, // open
+       0x146: 0x20403, // ins
+       0x147: 0x2540d, // foreignObject
+       0x148: 0x5ad0a, // onpopstate
+       0x14a: 0x28d07, // enctype
+       0x14b: 0x2760e, // onautocomplete
+       0x14c: 0x35208, // textarea
+       0x14e: 0x2780c, // autocomplete
+       0x14f: 0x15702, // hr
+       0x150: 0x1de08, // controls
+       0x151: 0x10902, // id
+       0x153: 0x2360c, // onafterprint
+       0x155: 0x2610d, // foreignobject
+       0x156: 0x32707, // marquee
+       0x157: 0x59a07, // onpause
+       0x158: 0x5e602, // dl
+       0x159: 0x5206,  // height
+       0x15a: 0x34703, // min
+       0x15b: 0x9307,  // dirname
+       0x15c: 0x1f209, // translate
+       0x15d: 0x5604,  // html
+       0x15e: 0x34709, // minlength
+       0x15f: 0x48607, // preload
+       0x160: 0x71408, // template
+       0x161: 0x3df0b, // ondragleave
+       0x162: 0x3a02,  // rb
+       0x164: 0x5c003, // src
+       0x165: 0x6dd06, // strong
+       0x167: 0x7804,  // samp
+       0x168: 0x6f307, // address
+       0x169: 0x55108, // ononline
+       0x16b: 0x1310b, // placeholder
+       0x16c: 0x2c406, // target
+       0x16d: 0x20605, // small
+       0x16e: 0x6ca07, // onwheel
+       0x16f: 0x1c90a, // annotation
+       0x170: 0x4740a, // spellcheck
+       0x171: 0x7207,  // details
+       0x172: 0x10306, // canvas
+       0x173: 0x12109, // autofocus
+       0x174: 0xc05,   // param
+       0x176: 0x46308, // download
+       0x177: 0x45203, // del
+       0x178: 0x36c07, // onclose
+       0x179: 0xb903,  // kbd
+       0x17a: 0x31906, // applet
+       0x17b: 0x2e004, // href
+       0x17c: 0x5f108, // onresize
+       0x17e: 0x49d0c, // onloadeddata
+       0x180: 0xcc02,  // tr
+       0x181: 0x2c00a, // formtarget
+       0x182: 0x11005, // title
+       0x183: 0x6ff05, // style
+       0x184: 0xd206,  // strike
+       0x185: 0x59e06, // usemap
+       0x186: 0x2fc06, // iframe
+       0x187: 0x1004,  // main
+       0x189: 0x7b07,  // picture
+       0x18c: 0x31605, // ismap
+       0x18e: 0x4a504, // data
+       0x18f: 0x5905,  // label
+       0x191: 0x3d10e, // referrerpolicy
+       0x192: 0x15602, // th
+       0x194: 0x53606, // prompt
+       0x195: 0x56807, // section
+       0x197: 0x6d107, // optimum
+       0x198: 0x2db04, // high
+       0x199: 0x15c02, // h1
+       0x19a: 0x65909, // onstalled
+       0x19b: 0x16d03, // var
+       0x19c: 0x4204,  // time
+       0x19e: 0x67402, // ms
+       0x19f: 0x33106, // header
+       0x1a0: 0x4da09, // onmessage
+       0x1a1: 0x1a605, // nonce
+       0x1a2: 0x26e0a, // formaction
+       0x1a3: 0x22006, // center
+       0x1a4: 0x3704,  // nobr
+       0x1a5: 0x59505, // table
+       0x1a6: 0x4a907, // listing
+       0x1a7: 0x18106, // legend
+       0x1a9: 0x29b09, // challenge
+       0x1aa: 0x24806, // figure
+       0x1ab: 0xe605,  // media
+       0x1ae: 0xd904,  // type
+       0x1af: 0x3f04,  // font
+       0x1b0: 0x4da0e, // onmessageerror
+       0x1b1: 0x37108, // seamless
+       0x1b2: 0x8703,  // dfn
+       0x1b3: 0x5c705, // defer
+       0x1b4: 0xc303,  // low
+       0x1b5: 0x19a03, // rtc
+       0x1b6: 0x5230b, // onmouseover
+       0x1b7: 0x2b20a, // novalidate
+       0x1b8: 0x71c0a, // workertype
+       0x1ba: 0x3cd07, // itemref
+       0x1bd: 0x1,     // a
+       0x1be: 0x31803, // map
+       0x1bf: 0x400c,  // ontimeupdate
+       0x1c0: 0x15e07, // bgsound
+       0x1c1: 0x3206,  // keygen
+       0x1c2: 0x2705,  // tbody
+       0x1c5: 0x64406, // onshow
+       0x1c7: 0x2501,  // s
+       0x1c8: 0x6607,  // pattern
+       0x1cc: 0x14d10, // oncanplaythrough
+       0x1ce: 0x2d702, // dd
+       0x1cf: 0x6f906, // srcset
+       0x1d0: 0x17003, // big
+       0x1d2: 0x65108, // sortable
+       0x1d3: 0x48007, // onkeyup
+       0x1d5: 0x5a406, // onplay
+       0x1d7: 0x4b804, // meta
+       0x1d8: 0x40306, // ondrop
+       0x1da: 0x60008, // onscroll
+       0x1db: 0x1fb0b, // crossorigin
+       0x1dc: 0x5730a, // onpageshow
+       0x1dd: 0x4,     // abbr
+       0x1de: 0x9202,  // td
+       0x1df: 0x58b0f, // contenteditable
+       0x1e0: 0x27206, // action
+       0x1e1: 0x1400b, // playsinline
+       0x1e2: 0x43107, // onfocus
+       0x1e3: 0x2e008, // hreflang
+       0x1e5: 0x5160a, // onmouseout
+       0x1e6: 0x5ea07, // onreset
+       0x1e7: 0x13c08, // autoplay
+       0x1e8: 0x63109, // onseeking
+       0x1ea: 0x67506, // scoped
+       0x1ec: 0x30a,   // radiogroup
+       0x1ee: 0x3800b, // contextmenu
+       0x1ef: 0x52e09, // onmouseup
+       0x1f1: 0x2ca06, // hgroup
+       0x1f2: 0x2080f, // allowfullscreen
+       0x1f3: 0x4be08, // tabindex
+       0x1f6: 0x30f07, // isindex
+       0x1f7: 0x1a0e,  // accept-charset
+       0x1f8: 0x2ae0e, // formnovalidate
+       0x1fb: 0x1c90e, // annotation-xml
+       0x1fc: 0x6e05,  // embed
+       0x1fd: 0x21806, // script
+       0x1fe: 0xbb06,  // dialog
+       0x1ff: 0x1d707, // command
 }
 
-const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" +
-       "genavaluealtdetailsampatternobreversedfnoembedirnamediagroup" +
-       "ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya" +
-       "utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance" +
-       "labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink" +
-       "blockquotebuttonabortranslatecodefercolgroupostercolorcolspa" +
-       "nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross" +
-       "originsourcefieldsetfigcaptionafterprintfigurequiredforeignO" +
-       "bjectforeignobjectformactionautocompleteerrorformenctypemust" +
-       "matchallengeformmethodformnovalidatetimeterformtargetheightm" +
-       "lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug" +
-       "h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu" +
-       "eematheaderspacermaxlength4minlength5mtextareadonlymultiplem" +
-       "utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec" +
-       "hangeondblclickondragendondragenterondragleaveondragoverondr" +
-       "agstarticleondropzonemptiedondurationchangeonendedonerroronf" +
-       "ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido" +
-       "nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang" +
-       "uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta" +
-       "rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm" +
-       "ouseuponmousewheelonofflineononlineonpagehidesclassectionbef" +
-       "oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta" +
-       "teonprogresstrikeytypeonratechangeonresetonresizestrongonscr" +
-       "ollonseekedonseekingonselectedonshowraponsortableonstalledon" +
-       "storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume" +
-       "changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu" +
-       "mmarysupsvgsystemplate"
+const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" +
+       "asefontimeupdateviacacheightmlabelooptgroupatternoembedetail" +
+       "sampictureversedfnoframesetdirnameterowspanomoduleacronymali" +
+       "gnmarkbdialogallowpaymentrequestrikeytypeallowusermediagroup" +
+       "ingaltfooterubyasyncanvasidefaultitleaudioncancelautofocusan" +
+       "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" +
+       "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" +
+       "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" +
+       "ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" +
+       "ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" +
+       "ignObjectforeignobjectformactionautocompleteerrorformenctype" +
+       "mustmatchallengeformmethodformnovalidatetimeformtargethgroup" +
+       "osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" +
+       "ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" +
+       "inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" +
+       "extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" +
+       "enterondragexitemreferrerpolicyondragleaveondragoverondragst" +
+       "articleondropzonemptiedondurationchangeonendedonerroronfocus" +
+       "paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" +
+       "spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" +
+       "onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" +
+       "usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" +
+       "seoveronmouseupromptonmousewheelonofflineononlineonpagehides" +
+       "classectionbluronpageshowbronpastepublicontenteditableonpaus" +
+       "emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" +
+       "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" +
+       "violationauxclickonseekedonseekingonselectedonshowidth6onsor" +
+       "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" +
+       "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" +
+       "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" +
+       "arysupsvgsystemplateworkertypewrap"
index 52f651ff6db829e51da7226669b8bfa66ee26504..a3a918f0b381d2663037373b487e1d7f776c5c35 100644 (file)
@@ -4,7 +4,7 @@
 
 package html
 
-// Section 12.2.3.2 of the HTML5 specification says "The following elements
+// Section 12.2.4.2 of the HTML5 specification says "The following elements
 // have varying levels of special parsing rules".
 // https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
 var isSpecialElementMap = map[string]bool{
@@ -52,10 +52,12 @@ var isSpecialElementMap = map[string]bool{
        "iframe":     true,
        "img":        true,
        "input":      true,
-       "isindex":    true,
+       "isindex":    true, // The 'isindex' element has been removed, but keep it for backwards compatibility.
+       "keygen":     true,
        "li":         true,
        "link":       true,
        "listing":    true,
+       "main":       true,
        "marquee":    true,
        "menu":       true,
        "meta":       true,
@@ -95,8 +97,16 @@ func isSpecialElement(element *Node) bool {
        switch element.Namespace {
        case "", "html":
                return isSpecialElementMap[element.Data]
+       case "math":
+               switch element.Data {
+               case "mi", "mo", "mn", "ms", "mtext", "annotation-xml":
+                       return true
+               }
        case "svg":
-               return element.Data == "foreignObject"
+               switch element.Data {
+               case "foreignObject", "desc", "title":
+                       return true
+               }
        }
        return false
 }
index 94f496874abab2caffb8cfd242420cd17fa3b85e..822ed42a04c1c52fe0d8855c0ae50708be80b1f6 100644 (file)
@@ -49,18 +49,18 @@ call to Next. For example, to extract an HTML page's anchor text:
        for {
                tt := z.Next()
                switch tt {
-               case ErrorToken:
+               case html.ErrorToken:
                        return z.Err()
-               case TextToken:
+               case html.TextToken:
                        if depth > 0 {
                                // emitBytes should copy the []byte it receives,
                                // if it doesn't process it immediately.
                                emitBytes(z.Text())
                        }
-               case StartTagToken, EndTagToken:
+               case html.StartTagToken, html.EndTagToken:
                        tn, _ := z.TagName()
                        if len(tn) == 1 && tn[0] == 'a' {
-                               if tt == StartTagToken {
+                               if tt == html.StartTagToken {
                                        depth++
                                } else {
                                        depth--
index a50c04c60e95fc4d57d09119b386abf23c9d8645..b628880a014d865f22c5b2c15a2aaf63aa340ed7 100644 (file)
@@ -75,2083 +75,2083 @@ var entity = map[string]rune{
        "Copf;":                            '\U00002102',
        "Coproduct;":                       '\U00002210',
        "CounterClockwiseContourIntegral;": '\U00002233',
-       "Cross;":                    '\U00002A2F',
-       "Cscr;":                     '\U0001D49E',
-       "Cup;":                      '\U000022D3',
-       "CupCap;":                   '\U0000224D',
-       "DD;":                       '\U00002145',
-       "DDotrahd;":                 '\U00002911',
-       "DJcy;":                     '\U00000402',
-       "DScy;":                     '\U00000405',
-       "DZcy;":                     '\U0000040F',
-       "Dagger;":                   '\U00002021',
-       "Darr;":                     '\U000021A1',
-       "Dashv;":                    '\U00002AE4',
-       "Dcaron;":                   '\U0000010E',
-       "Dcy;":                      '\U00000414',
-       "Del;":                      '\U00002207',
-       "Delta;":                    '\U00000394',
-       "Dfr;":                      '\U0001D507',
-       "DiacriticalAcute;":         '\U000000B4',
-       "DiacriticalDot;":           '\U000002D9',
-       "DiacriticalDoubleAcute;":   '\U000002DD',
-       "DiacriticalGrave;":         '\U00000060',
-       "DiacriticalTilde;":         '\U000002DC',
-       "Diamond;":                  '\U000022C4',
-       "DifferentialD;":            '\U00002146',
-       "Dopf;":                     '\U0001D53B',
-       "Dot;":                      '\U000000A8',
-       "DotDot;":                   '\U000020DC',
-       "DotEqual;":                 '\U00002250',
-       "DoubleContourIntegral;":    '\U0000222F',
-       "DoubleDot;":                '\U000000A8',
-       "DoubleDownArrow;":          '\U000021D3',
-       "DoubleLeftArrow;":          '\U000021D0',
-       "DoubleLeftRightArrow;":     '\U000021D4',
-       "DoubleLeftTee;":            '\U00002AE4',
-       "DoubleLongLeftArrow;":      '\U000027F8',
-       "DoubleLongLeftRightArrow;": '\U000027FA',
-       "DoubleLongRightArrow;":     '\U000027F9',
-       "DoubleRightArrow;":         '\U000021D2',
-       "DoubleRightTee;":           '\U000022A8',
-       "DoubleUpArrow;":            '\U000021D1',
-       "DoubleUpDownArrow;":        '\U000021D5',
-       "DoubleVerticalBar;":        '\U00002225',
-       "DownArrow;":                '\U00002193',
-       "DownArrowBar;":             '\U00002913',
-       "DownArrowUpArrow;":         '\U000021F5',
-       "DownBreve;":                '\U00000311',
-       "DownLeftRightVector;":      '\U00002950',
-       "DownLeftTeeVector;":        '\U0000295E',
-       "DownLeftVector;":           '\U000021BD',
-       "DownLeftVectorBar;":        '\U00002956',
-       "DownRightTeeVector;":       '\U0000295F',
-       "DownRightVector;":          '\U000021C1',
-       "DownRightVectorBar;":       '\U00002957',
-       "DownTee;":                  '\U000022A4',
-       "DownTeeArrow;":             '\U000021A7',
-       "Downarrow;":                '\U000021D3',
-       "Dscr;":                     '\U0001D49F',
-       "Dstrok;":                   '\U00000110',
-       "ENG;":                      '\U0000014A',
-       "ETH;":                      '\U000000D0',
-       "Eacute;":                   '\U000000C9',
-       "Ecaron;":                   '\U0000011A',
-       "Ecirc;":                    '\U000000CA',
-       "Ecy;":                      '\U0000042D',
-       "Edot;":                     '\U00000116',
-       "Efr;":                      '\U0001D508',
-       "Egrave;":                   '\U000000C8',
-       "Element;":                  '\U00002208',
-       "Emacr;":                    '\U00000112',
-       "EmptySmallSquare;":         '\U000025FB',
-       "EmptyVerySmallSquare;":     '\U000025AB',
-       "Eogon;":                    '\U00000118',
-       "Eopf;":                     '\U0001D53C',
-       "Epsilon;":                  '\U00000395',
-       "Equal;":                    '\U00002A75',
-       "EqualTilde;":               '\U00002242',
-       "Equilibrium;":              '\U000021CC',
-       "Escr;":                     '\U00002130',
-       "Esim;":                     '\U00002A73',
-       "Eta;":                      '\U00000397',
-       "Euml;":                     '\U000000CB',
-       "Exists;":                   '\U00002203',
-       "ExponentialE;":             '\U00002147',
-       "Fcy;":                      '\U00000424',
-       "Ffr;":                      '\U0001D509',
-       "FilledSmallSquare;":        '\U000025FC',
-       "FilledVerySmallSquare;":    '\U000025AA',
-       "Fopf;":                     '\U0001D53D',
-       "ForAll;":                   '\U00002200',
-       "Fouriertrf;":               '\U00002131',
-       "Fscr;":                     '\U00002131',
-       "GJcy;":                     '\U00000403',
-       "GT;":                       '\U0000003E',
-       "Gamma;":                    '\U00000393',
-       "Gammad;":                   '\U000003DC',
-       "Gbreve;":                   '\U0000011E',
-       "Gcedil;":                   '\U00000122',
-       "Gcirc;":                    '\U0000011C',
-       "Gcy;":                      '\U00000413',
-       "Gdot;":                     '\U00000120',
-       "Gfr;":                      '\U0001D50A',
-       "Gg;":                       '\U000022D9',
-       "Gopf;":                     '\U0001D53E',
-       "GreaterEqual;":             '\U00002265',
-       "GreaterEqualLess;":         '\U000022DB',
-       "GreaterFullEqual;":         '\U00002267',
-       "GreaterGreater;":           '\U00002AA2',
-       "GreaterLess;":              '\U00002277',
-       "GreaterSlantEqual;":        '\U00002A7E',
-       "GreaterTilde;":             '\U00002273',
-       "Gscr;":                     '\U0001D4A2',
-       "Gt;":                       '\U0000226B',
-       "HARDcy;":                   '\U0000042A',
-       "Hacek;":                    '\U000002C7',
-       "Hat;":                      '\U0000005E',
-       "Hcirc;":                    '\U00000124',
-       "Hfr;":                      '\U0000210C',
-       "HilbertSpace;":             '\U0000210B',
-       "Hopf;":                     '\U0000210D',
-       "HorizontalLine;":           '\U00002500',
-       "Hscr;":                     '\U0000210B',
-       "Hstrok;":                   '\U00000126',
-       "HumpDownHump;":             '\U0000224E',
-       "HumpEqual;":                '\U0000224F',
-       "IEcy;":                     '\U00000415',
-       "IJlig;":                    '\U00000132',
-       "IOcy;":                     '\U00000401',
-       "Iacute;":                   '\U000000CD',
-       "Icirc;":                    '\U000000CE',
-       "Icy;":                      '\U00000418',
-       "Idot;":                     '\U00000130',
-       "Ifr;":                      '\U00002111',
-       "Igrave;":                   '\U000000CC',
-       "Im;":                       '\U00002111',
-       "Imacr;":                    '\U0000012A',
-       "ImaginaryI;":               '\U00002148',
-       "Implies;":                  '\U000021D2',
-       "Int;":                      '\U0000222C',
-       "Integral;":                 '\U0000222B',
-       "Intersection;":             '\U000022C2',
-       "InvisibleComma;":           '\U00002063',
-       "InvisibleTimes;":           '\U00002062',
-       "Iogon;":                    '\U0000012E',
-       "Iopf;":                     '\U0001D540',
-       "Iota;":                     '\U00000399',
-       "Iscr;":                     '\U00002110',
-       "Itilde;":                   '\U00000128',
-       "Iukcy;":                    '\U00000406',
-       "Iuml;":                     '\U000000CF',
-       "Jcirc;":                    '\U00000134',
-       "Jcy;":                      '\U00000419',
-       "Jfr;":                      '\U0001D50D',
-       "Jopf;":                     '\U0001D541',
-       "Jscr;":                     '\U0001D4A5',
-       "Jsercy;":                   '\U00000408',
-       "Jukcy;":                    '\U00000404',
-       "KHcy;":                     '\U00000425',
-       "KJcy;":                     '\U0000040C',
-       "Kappa;":                    '\U0000039A',
-       "Kcedil;":                   '\U00000136',
-       "Kcy;":                      '\U0000041A',
-       "Kfr;":                      '\U0001D50E',
-       "Kopf;":                     '\U0001D542',
-       "Kscr;":                     '\U0001D4A6',
-       "LJcy;":                     '\U00000409',
-       "LT;":                       '\U0000003C',
-       "Lacute;":                   '\U00000139',
-       "Lambda;":                   '\U0000039B',
-       "Lang;":                     '\U000027EA',
-       "Laplacetrf;":               '\U00002112',
-       "Larr;":                     '\U0000219E',
-       "Lcaron;":                   '\U0000013D',
-       "Lcedil;":                   '\U0000013B',
-       "Lcy;":                      '\U0000041B',
-       "LeftAngleBracket;":         '\U000027E8',
-       "LeftArrow;":                '\U00002190',
-       "LeftArrowBar;":             '\U000021E4',
-       "LeftArrowRightArrow;":      '\U000021C6',
-       "LeftCeiling;":              '\U00002308',
-       "LeftDoubleBracket;":        '\U000027E6',
-       "LeftDownTeeVector;":        '\U00002961',
-       "LeftDownVector;":           '\U000021C3',
-       "LeftDownVectorBar;":        '\U00002959',
-       "LeftFloor;":                '\U0000230A',
-       "LeftRightArrow;":           '\U00002194',
-       "LeftRightVector;":          '\U0000294E',
-       "LeftTee;":                  '\U000022A3',
-       "LeftTeeArrow;":             '\U000021A4',
-       "LeftTeeVector;":            '\U0000295A',
-       "LeftTriangle;":             '\U000022B2',
-       "LeftTriangleBar;":          '\U000029CF',
-       "LeftTriangleEqual;":        '\U000022B4',
-       "LeftUpDownVector;":         '\U00002951',
-       "LeftUpTeeVector;":          '\U00002960',
-       "LeftUpVector;":             '\U000021BF',
-       "LeftUpVectorBar;":          '\U00002958',
-       "LeftVector;":               '\U000021BC',
-       "LeftVectorBar;":            '\U00002952',
-       "Leftarrow;":                '\U000021D0',
-       "Leftrightarrow;":           '\U000021D4',
-       "LessEqualGreater;":         '\U000022DA',
-       "LessFullEqual;":            '\U00002266',
-       "LessGreater;":              '\U00002276',
-       "LessLess;":                 '\U00002AA1',
-       "LessSlantEqual;":           '\U00002A7D',
-       "LessTilde;":                '\U00002272',
-       "Lfr;":                      '\U0001D50F',
-       "Ll;":                       '\U000022D8',
-       "Lleftarrow;":               '\U000021DA',
-       "Lmidot;":                   '\U0000013F',
-       "LongLeftArrow;":            '\U000027F5',
-       "LongLeftRightArrow;":       '\U000027F7',
-       "LongRightArrow;":           '\U000027F6',
-       "Longleftarrow;":            '\U000027F8',
-       "Longleftrightarrow;":       '\U000027FA',
-       "Longrightarrow;":           '\U000027F9',
-       "Lopf;":                     '\U0001D543',
-       "LowerLeftArrow;":           '\U00002199',
-       "LowerRightArrow;":          '\U00002198',
-       "Lscr;":                     '\U00002112',
-       "Lsh;":                      '\U000021B0',
-       "Lstrok;":                   '\U00000141',
-       "Lt;":                       '\U0000226A',
-       "Map;":                      '\U00002905',
-       "Mcy;":                      '\U0000041C',
-       "MediumSpace;":              '\U0000205F',
-       "Mellintrf;":                '\U00002133',
-       "Mfr;":                      '\U0001D510',
-       "MinusPlus;":                '\U00002213',
-       "Mopf;":                     '\U0001D544',
-       "Mscr;":                     '\U00002133',
-       "Mu;":                       '\U0000039C',
-       "NJcy;":                     '\U0000040A',
-       "Nacute;":                   '\U00000143',
-       "Ncaron;":                   '\U00000147',
-       "Ncedil;":                   '\U00000145',
-       "Ncy;":                      '\U0000041D',
-       "NegativeMediumSpace;":      '\U0000200B',
-       "NegativeThickSpace;":       '\U0000200B',
-       "NegativeThinSpace;":        '\U0000200B',
-       "NegativeVeryThinSpace;":    '\U0000200B',
-       "NestedGreaterGreater;":     '\U0000226B',
-       "NestedLessLess;":           '\U0000226A',
-       "NewLine;":                  '\U0000000A',
-       "Nfr;":                      '\U0001D511',
-       "NoBreak;":                  '\U00002060',
-       "NonBreakingSpace;":         '\U000000A0',
-       "Nopf;":                     '\U00002115',
-       "Not;":                      '\U00002AEC',
-       "NotCongruent;":             '\U00002262',
-       "NotCupCap;":                '\U0000226D',
-       "NotDoubleVerticalBar;":     '\U00002226',
-       "NotElement;":               '\U00002209',
-       "NotEqual;":                 '\U00002260',
-       "NotExists;":                '\U00002204',
-       "NotGreater;":               '\U0000226F',
-       "NotGreaterEqual;":          '\U00002271',
-       "NotGreaterLess;":           '\U00002279',
-       "NotGreaterTilde;":          '\U00002275',
-       "NotLeftTriangle;":          '\U000022EA',
-       "NotLeftTriangleEqual;":     '\U000022EC',
-       "NotLess;":                  '\U0000226E',
-       "NotLessEqual;":             '\U00002270',
-       "NotLessGreater;":           '\U00002278',
-       "NotLessTilde;":             '\U00002274',
-       "NotPrecedes;":              '\U00002280',
-       "NotPrecedesSlantEqual;":    '\U000022E0',
-       "NotReverseElement;":        '\U0000220C',
-       "NotRightTriangle;":         '\U000022EB',
-       "NotRightTriangleEqual;":    '\U000022ED',
-       "NotSquareSubsetEqual;":     '\U000022E2',
-       "NotSquareSupersetEqual;":   '\U000022E3',
-       "NotSubsetEqual;":           '\U00002288',
-       "NotSucceeds;":              '\U00002281',
-       "NotSucceedsSlantEqual;":    '\U000022E1',
-       "NotSupersetEqual;":         '\U00002289',
-       "NotTilde;":                 '\U00002241',
-       "NotTildeEqual;":            '\U00002244',
-       "NotTildeFullEqual;":        '\U00002247',
-       "NotTildeTilde;":            '\U00002249',
-       "NotVerticalBar;":           '\U00002224',
-       "Nscr;":                     '\U0001D4A9',
-       "Ntilde;":                   '\U000000D1',
-       "Nu;":                       '\U0000039D',
-       "OElig;":                    '\U00000152',
-       "Oacute;":                   '\U000000D3',
-       "Ocirc;":                    '\U000000D4',
-       "Ocy;":                      '\U0000041E',
-       "Odblac;":                   '\U00000150',
-       "Ofr;":                      '\U0001D512',
-       "Ograve;":                   '\U000000D2',
-       "Omacr;":                    '\U0000014C',
-       "Omega;":                    '\U000003A9',
-       "Omicron;":                  '\U0000039F',
-       "Oopf;":                     '\U0001D546',
-       "OpenCurlyDoubleQuote;":     '\U0000201C',
-       "OpenCurlyQuote;":           '\U00002018',
-       "Or;":                       '\U00002A54',
-       "Oscr;":                     '\U0001D4AA',
-       "Oslash;":                   '\U000000D8',
-       "Otilde;":                   '\U000000D5',
-       "Otimes;":                   '\U00002A37',
-       "Ouml;":                     '\U000000D6',
-       "OverBar;":                  '\U0000203E',
-       "OverBrace;":                '\U000023DE',
-       "OverBracket;":              '\U000023B4',
-       "OverParenthesis;":          '\U000023DC',
-       "PartialD;":                 '\U00002202',
-       "Pcy;":                      '\U0000041F',
-       "Pfr;":                      '\U0001D513',
-       "Phi;":                      '\U000003A6',
-       "Pi;":                       '\U000003A0',
-       "PlusMinus;":                '\U000000B1',
-       "Poincareplane;":            '\U0000210C',
-       "Popf;":                     '\U00002119',
-       "Pr;":                       '\U00002ABB',
-       "Precedes;":                 '\U0000227A',
-       "PrecedesEqual;":            '\U00002AAF',
-       "PrecedesSlantEqual;":       '\U0000227C',
-       "PrecedesTilde;":            '\U0000227E',
-       "Prime;":                    '\U00002033',
-       "Product;":                  '\U0000220F',
-       "Proportion;":               '\U00002237',
-       "Proportional;":             '\U0000221D',
-       "Pscr;":                     '\U0001D4AB',
-       "Psi;":                      '\U000003A8',
-       "QUOT;":                     '\U00000022',
-       "Qfr;":                      '\U0001D514',
-       "Qopf;":                     '\U0000211A',
-       "Qscr;":                     '\U0001D4AC',
-       "RBarr;":                    '\U00002910',
-       "REG;":                      '\U000000AE',
-       "Racute;":                   '\U00000154',
-       "Rang;":                     '\U000027EB',
-       "Rarr;":                     '\U000021A0',
-       "Rarrtl;":                   '\U00002916',
-       "Rcaron;":                   '\U00000158',
-       "Rcedil;":                   '\U00000156',
-       "Rcy;":                      '\U00000420',
-       "Re;":                       '\U0000211C',
-       "ReverseElement;":           '\U0000220B',
-       "ReverseEquilibrium;":       '\U000021CB',
-       "ReverseUpEquilibrium;":     '\U0000296F',
-       "Rfr;":                      '\U0000211C',
-       "Rho;":                      '\U000003A1',
-       "RightAngleBracket;":        '\U000027E9',
-       "RightArrow;":               '\U00002192',
-       "RightArrowBar;":            '\U000021E5',
-       "RightArrowLeftArrow;":      '\U000021C4',
-       "RightCeiling;":             '\U00002309',
-       "RightDoubleBracket;":       '\U000027E7',
-       "RightDownTeeVector;":       '\U0000295D',
-       "RightDownVector;":          '\U000021C2',
-       "RightDownVectorBar;":       '\U00002955',
-       "RightFloor;":               '\U0000230B',
-       "RightTee;":                 '\U000022A2',
-       "RightTeeArrow;":            '\U000021A6',
-       "RightTeeVector;":           '\U0000295B',
-       "RightTriangle;":            '\U000022B3',
-       "RightTriangleBar;":         '\U000029D0',
-       "RightTriangleEqual;":       '\U000022B5',
-       "RightUpDownVector;":        '\U0000294F',
-       "RightUpTeeVector;":         '\U0000295C',
-       "RightUpVector;":            '\U000021BE',
-       "RightUpVectorBar;":         '\U00002954',
-       "RightVector;":              '\U000021C0',
-       "RightVectorBar;":           '\U00002953',
-       "Rightarrow;":               '\U000021D2',
-       "Ropf;":                     '\U0000211D',
-       "RoundImplies;":             '\U00002970',
-       "Rrightarrow;":              '\U000021DB',
-       "Rscr;":                     '\U0000211B',
-       "Rsh;":                      '\U000021B1',
-       "RuleDelayed;":              '\U000029F4',
-       "SHCHcy;":                   '\U00000429',
-       "SHcy;":                     '\U00000428',
-       "SOFTcy;":                   '\U0000042C',
-       "Sacute;":                   '\U0000015A',
-       "Sc;":                       '\U00002ABC',
-       "Scaron;":                   '\U00000160',
-       "Scedil;":                   '\U0000015E',
-       "Scirc;":                    '\U0000015C',
-       "Scy;":                      '\U00000421',
-       "Sfr;":                      '\U0001D516',
-       "ShortDownArrow;":           '\U00002193',
-       "ShortLeftArrow;":           '\U00002190',
-       "ShortRightArrow;":          '\U00002192',
-       "ShortUpArrow;":             '\U00002191',
-       "Sigma;":                    '\U000003A3',
-       "SmallCircle;":              '\U00002218',
-       "Sopf;":                     '\U0001D54A',
-       "Sqrt;":                     '\U0000221A',
-       "Square;":                   '\U000025A1',
-       "SquareIntersection;":       '\U00002293',
-       "SquareSubset;":             '\U0000228F',
-       "SquareSubsetEqual;":        '\U00002291',
-       "SquareSuperset;":           '\U00002290',
-       "SquareSupersetEqual;":      '\U00002292',
-       "SquareUnion;":              '\U00002294',
-       "Sscr;":                     '\U0001D4AE',
-       "Star;":                     '\U000022C6',
-       "Sub;":                      '\U000022D0',
-       "Subset;":                   '\U000022D0',
-       "SubsetEqual;":              '\U00002286',
-       "Succeeds;":                 '\U0000227B',
-       "SucceedsEqual;":            '\U00002AB0',
-       "SucceedsSlantEqual;":       '\U0000227D',
-       "SucceedsTilde;":            '\U0000227F',
-       "SuchThat;":                 '\U0000220B',
-       "Sum;":                      '\U00002211',
-       "Sup;":                      '\U000022D1',
-       "Superset;":                 '\U00002283',
-       "SupersetEqual;":            '\U00002287',
-       "Supset;":                   '\U000022D1',
-       "THORN;":                    '\U000000DE',
-       "TRADE;":                    '\U00002122',
-       "TSHcy;":                    '\U0000040B',
-       "TScy;":                     '\U00000426',
-       "Tab;":                      '\U00000009',
-       "Tau;":                      '\U000003A4',
-       "Tcaron;":                   '\U00000164',
-       "Tcedil;":                   '\U00000162',
-       "Tcy;":                      '\U00000422',
-       "Tfr;":                      '\U0001D517',
-       "Therefore;":                '\U00002234',
-       "Theta;":                    '\U00000398',
-       "ThinSpace;":                '\U00002009',
-       "Tilde;":                    '\U0000223C',
-       "TildeEqual;":               '\U00002243',
-       "TildeFullEqual;":           '\U00002245',
-       "TildeTilde;":               '\U00002248',
-       "Topf;":                     '\U0001D54B',
-       "TripleDot;":                '\U000020DB',
-       "Tscr;":                     '\U0001D4AF',
-       "Tstrok;":                   '\U00000166',
-       "Uacute;":                   '\U000000DA',
-       "Uarr;":                     '\U0000219F',
-       "Uarrocir;":                 '\U00002949',
-       "Ubrcy;":                    '\U0000040E',
-       "Ubreve;":                   '\U0000016C',
-       "Ucirc;":                    '\U000000DB',
-       "Ucy;":                      '\U00000423',
-       "Udblac;":                   '\U00000170',
-       "Ufr;":                      '\U0001D518',
-       "Ugrave;":                   '\U000000D9',
-       "Umacr;":                    '\U0000016A',
-       "UnderBar;":                 '\U0000005F',
-       "UnderBrace;":               '\U000023DF',
-       "UnderBracket;":             '\U000023B5',
-       "UnderParenthesis;":         '\U000023DD',
-       "Union;":                    '\U000022C3',
-       "UnionPlus;":                '\U0000228E',
-       "Uogon;":                    '\U00000172',
-       "Uopf;":                     '\U0001D54C',
-       "UpArrow;":                  '\U00002191',
-       "UpArrowBar;":               '\U00002912',
-       "UpArrowDownArrow;":         '\U000021C5',
-       "UpDownArrow;":              '\U00002195',
-       "UpEquilibrium;":            '\U0000296E',
-       "UpTee;":                    '\U000022A5',
-       "UpTeeArrow;":               '\U000021A5',
-       "Uparrow;":                  '\U000021D1',
-       "Updownarrow;":              '\U000021D5',
-       "UpperLeftArrow;":           '\U00002196',
-       "UpperRightArrow;":          '\U00002197',
-       "Upsi;":                     '\U000003D2',
-       "Upsilon;":                  '\U000003A5',
-       "Uring;":                    '\U0000016E',
-       "Uscr;":                     '\U0001D4B0',
-       "Utilde;":                   '\U00000168',
-       "Uuml;":                     '\U000000DC',
-       "VDash;":                    '\U000022AB',
-       "Vbar;":                     '\U00002AEB',
-       "Vcy;":                      '\U00000412',
-       "Vdash;":                    '\U000022A9',
-       "Vdashl;":                   '\U00002AE6',
-       "Vee;":                      '\U000022C1',
-       "Verbar;":                   '\U00002016',
-       "Vert;":                     '\U00002016',
-       "VerticalBar;":              '\U00002223',
-       "VerticalLine;":             '\U0000007C',
-       "VerticalSeparator;":        '\U00002758',
-       "VerticalTilde;":            '\U00002240',
-       "VeryThinSpace;":            '\U0000200A',
-       "Vfr;":                      '\U0001D519',
-       "Vopf;":                     '\U0001D54D',
-       "Vscr;":                     '\U0001D4B1',
-       "Vvdash;":                   '\U000022AA',
-       "Wcirc;":                    '\U00000174',
-       "Wedge;":                    '\U000022C0',
-       "Wfr;":                      '\U0001D51A',
-       "Wopf;":                     '\U0001D54E',
-       "Wscr;":                     '\U0001D4B2',
-       "Xfr;":                      '\U0001D51B',
-       "Xi;":                       '\U0000039E',
-       "Xopf;":                     '\U0001D54F',
-       "Xscr;":                     '\U0001D4B3',
-       "YAcy;":                     '\U0000042F',
-       "YIcy;":                     '\U00000407',
-       "YUcy;":                     '\U0000042E',
-       "Yacute;":                   '\U000000DD',
-       "Ycirc;":                    '\U00000176',
-       "Ycy;":                      '\U0000042B',
-       "Yfr;":                      '\U0001D51C',
-       "Yopf;":                     '\U0001D550',
-       "Yscr;":                     '\U0001D4B4',
-       "Yuml;":                     '\U00000178',
-       "ZHcy;":                     '\U00000416',
-       "Zacute;":                   '\U00000179',
-       "Zcaron;":                   '\U0000017D',
-       "Zcy;":                      '\U00000417',
-       "Zdot;":                     '\U0000017B',
-       "ZeroWidthSpace;":           '\U0000200B',
-       "Zeta;":                     '\U00000396',
-       "Zfr;":                      '\U00002128',
-       "Zopf;":                     '\U00002124',
-       "Zscr;":                     '\U0001D4B5',
-       "aacute;":                   '\U000000E1',
-       "abreve;":                   '\U00000103',
-       "ac;":                       '\U0000223E',
-       "acd;":                      '\U0000223F',
-       "acirc;":                    '\U000000E2',
-       "acute;":                    '\U000000B4',
-       "acy;":                      '\U00000430',
-       "aelig;":                    '\U000000E6',
-       "af;":                       '\U00002061',
-       "afr;":                      '\U0001D51E',
-       "agrave;":                   '\U000000E0',
-       "alefsym;":                  '\U00002135',
-       "aleph;":                    '\U00002135',
-       "alpha;":                    '\U000003B1',
-       "amacr;":                    '\U00000101',
-       "amalg;":                    '\U00002A3F',
-       "amp;":                      '\U00000026',
-       "and;":                      '\U00002227',
-       "andand;":                   '\U00002A55',
-       "andd;":                     '\U00002A5C',
-       "andslope;":                 '\U00002A58',
-       "andv;":                     '\U00002A5A',
-       "ang;":                      '\U00002220',
-       "ange;":                     '\U000029A4',
-       "angle;":                    '\U00002220',
-       "angmsd;":                   '\U00002221',
-       "angmsdaa;":                 '\U000029A8',
-       "angmsdab;":                 '\U000029A9',
-       "angmsdac;":                 '\U000029AA',
-       "angmsdad;":                 '\U000029AB',
-       "angmsdae;":                 '\U000029AC',
-       "angmsdaf;":                 '\U000029AD',
-       "angmsdag;":                 '\U000029AE',
-       "angmsdah;":                 '\U000029AF',
-       "angrt;":                    '\U0000221F',
-       "angrtvb;":                  '\U000022BE',
-       "angrtvbd;":                 '\U0000299D',
-       "angsph;":                   '\U00002222',
-       "angst;":                    '\U000000C5',
-       "angzarr;":                  '\U0000237C',
-       "aogon;":                    '\U00000105',
-       "aopf;":                     '\U0001D552',
-       "ap;":                       '\U00002248',
-       "apE;":                      '\U00002A70',
-       "apacir;":                   '\U00002A6F',
-       "ape;":                      '\U0000224A',
-       "apid;":                     '\U0000224B',
-       "apos;":                     '\U00000027',
-       "approx;":                   '\U00002248',
-       "approxeq;":                 '\U0000224A',
-       "aring;":                    '\U000000E5',
-       "ascr;":                     '\U0001D4B6',
-       "ast;":                      '\U0000002A',
-       "asymp;":                    '\U00002248',
-       "asympeq;":                  '\U0000224D',
-       "atilde;":                   '\U000000E3',
-       "auml;":                     '\U000000E4',
-       "awconint;":                 '\U00002233',
-       "awint;":                    '\U00002A11',
-       "bNot;":                     '\U00002AED',
-       "backcong;":                 '\U0000224C',
-       "backepsilon;":              '\U000003F6',
-       "backprime;":                '\U00002035',
-       "backsim;":                  '\U0000223D',
-       "backsimeq;":                '\U000022CD',
-       "barvee;":                   '\U000022BD',
-       "barwed;":                   '\U00002305',
-       "barwedge;":                 '\U00002305',
-       "bbrk;":                     '\U000023B5',
-       "bbrktbrk;":                 '\U000023B6',
-       "bcong;":                    '\U0000224C',
-       "bcy;":                      '\U00000431',
-       "bdquo;":                    '\U0000201E',
-       "becaus;":                   '\U00002235',
-       "because;":                  '\U00002235',
-       "bemptyv;":                  '\U000029B0',
-       "bepsi;":                    '\U000003F6',
-       "bernou;":                   '\U0000212C',
-       "beta;":                     '\U000003B2',
-       "beth;":                     '\U00002136',
-       "between;":                  '\U0000226C',
-       "bfr;":                      '\U0001D51F',
-       "bigcap;":                   '\U000022C2',
-       "bigcirc;":                  '\U000025EF',
-       "bigcup;":                   '\U000022C3',
-       "bigodot;":                  '\U00002A00',
-       "bigoplus;":                 '\U00002A01',
-       "bigotimes;":                '\U00002A02',
-       "bigsqcup;":                 '\U00002A06',
-       "bigstar;":                  '\U00002605',
-       "bigtriangledown;":          '\U000025BD',
-       "bigtriangleup;":            '\U000025B3',
-       "biguplus;":                 '\U00002A04',
-       "bigvee;":                   '\U000022C1',
-       "bigwedge;":                 '\U000022C0',
-       "bkarow;":                   '\U0000290D',
-       "blacklozenge;":             '\U000029EB',
-       "blacksquare;":              '\U000025AA',
-       "blacktriangle;":            '\U000025B4',
-       "blacktriangledown;":        '\U000025BE',
-       "blacktriangleleft;":        '\U000025C2',
-       "blacktriangleright;":       '\U000025B8',
-       "blank;":                    '\U00002423',
-       "blk12;":                    '\U00002592',
-       "blk14;":                    '\U00002591',
-       "blk34;":                    '\U00002593',
-       "block;":                    '\U00002588',
-       "bnot;":                     '\U00002310',
-       "bopf;":                     '\U0001D553',
-       "bot;":                      '\U000022A5',
-       "bottom;":                   '\U000022A5',
-       "bowtie;":                   '\U000022C8',
-       "boxDL;":                    '\U00002557',
-       "boxDR;":                    '\U00002554',
-       "boxDl;":                    '\U00002556',
-       "boxDr;":                    '\U00002553',
-       "boxH;":                     '\U00002550',
-       "boxHD;":                    '\U00002566',
-       "boxHU;":                    '\U00002569',
-       "boxHd;":                    '\U00002564',
-       "boxHu;":                    '\U00002567',
-       "boxUL;":                    '\U0000255D',
-       "boxUR;":                    '\U0000255A',
-       "boxUl;":                    '\U0000255C',
-       "boxUr;":                    '\U00002559',
-       "boxV;":                     '\U00002551',
-       "boxVH;":                    '\U0000256C',
-       "boxVL;":                    '\U00002563',
-       "boxVR;":                    '\U00002560',
-       "boxVh;":                    '\U0000256B',
-       "boxVl;":                    '\U00002562',
-       "boxVr;":                    '\U0000255F',
-       "boxbox;":                   '\U000029C9',
-       "boxdL;":                    '\U00002555',
-       "boxdR;":                    '\U00002552',
-       "boxdl;":                    '\U00002510',
-       "boxdr;":                    '\U0000250C',
-       "boxh;":                     '\U00002500',
-       "boxhD;":                    '\U00002565',
-       "boxhU;":                    '\U00002568',
-       "boxhd;":                    '\U0000252C',
-       "boxhu;":                    '\U00002534',
-       "boxminus;":                 '\U0000229F',
-       "boxplus;":                  '\U0000229E',
-       "boxtimes;":                 '\U000022A0',
-       "boxuL;":                    '\U0000255B',
-       "boxuR;":                    '\U00002558',
-       "boxul;":                    '\U00002518',
-       "boxur;":                    '\U00002514',
-       "boxv;":                     '\U00002502',
-       "boxvH;":                    '\U0000256A',
-       "boxvL;":                    '\U00002561',
-       "boxvR;":                    '\U0000255E',
-       "boxvh;":                    '\U0000253C',
-       "boxvl;":                    '\U00002524',
-       "boxvr;":                    '\U0000251C',
-       "bprime;":                   '\U00002035',
-       "breve;":                    '\U000002D8',
-       "brvbar;":                   '\U000000A6',
-       "bscr;":                     '\U0001D4B7',
-       "bsemi;":                    '\U0000204F',
-       "bsim;":                     '\U0000223D',
-       "bsime;":                    '\U000022CD',
-       "bsol;":                     '\U0000005C',
-       "bsolb;":                    '\U000029C5',
-       "bsolhsub;":                 '\U000027C8',
-       "bull;":                     '\U00002022',
-       "bullet;":                   '\U00002022',
-       "bump;":                     '\U0000224E',
-       "bumpE;":                    '\U00002AAE',
-       "bumpe;":                    '\U0000224F',
-       "bumpeq;":                   '\U0000224F',
-       "cacute;":                   '\U00000107',
-       "cap;":                      '\U00002229',
-       "capand;":                   '\U00002A44',
-       "capbrcup;":                 '\U00002A49',
-       "capcap;":                   '\U00002A4B',
-       "capcup;":                   '\U00002A47',
-       "capdot;":                   '\U00002A40',
-       "caret;":                    '\U00002041',
-       "caron;":                    '\U000002C7',
-       "ccaps;":                    '\U00002A4D',
-       "ccaron;":                   '\U0000010D',
-       "ccedil;":                   '\U000000E7',
-       "ccirc;":                    '\U00000109',
-       "ccups;":                    '\U00002A4C',
-       "ccupssm;":                  '\U00002A50',
-       "cdot;":                     '\U0000010B',
-       "cedil;":                    '\U000000B8',
-       "cemptyv;":                  '\U000029B2',
-       "cent;":                     '\U000000A2',
-       "centerdot;":                '\U000000B7',
-       "cfr;":                      '\U0001D520',
-       "chcy;":                     '\U00000447',
-       "check;":                    '\U00002713',
-       "checkmark;":                '\U00002713',
-       "chi;":                      '\U000003C7',
-       "cir;":                      '\U000025CB',
-       "cirE;":                     '\U000029C3',
-       "circ;":                     '\U000002C6',
-       "circeq;":                   '\U00002257',
-       "circlearrowleft;":          '\U000021BA',
-       "circlearrowright;":         '\U000021BB',
-       "circledR;":                 '\U000000AE',
-       "circledS;":                 '\U000024C8',
-       "circledast;":               '\U0000229B',
-       "circledcirc;":              '\U0000229A',
-       "circleddash;":              '\U0000229D',
-       "cire;":                     '\U00002257',
-       "cirfnint;":                 '\U00002A10',
-       "cirmid;":                   '\U00002AEF',
-       "cirscir;":                  '\U000029C2',
-       "clubs;":                    '\U00002663',
-       "clubsuit;":                 '\U00002663',
-       "colon;":                    '\U0000003A',
-       "colone;":                   '\U00002254',
-       "coloneq;":                  '\U00002254',
-       "comma;":                    '\U0000002C',
-       "commat;":                   '\U00000040',
-       "comp;":                     '\U00002201',
-       "compfn;":                   '\U00002218',
-       "complement;":               '\U00002201',
-       "complexes;":                '\U00002102',
-       "cong;":                     '\U00002245',
-       "congdot;":                  '\U00002A6D',
-       "conint;":                   '\U0000222E',
-       "copf;":                     '\U0001D554',
-       "coprod;":                   '\U00002210',
-       "copy;":                     '\U000000A9',
-       "copysr;":                   '\U00002117',
-       "crarr;":                    '\U000021B5',
-       "cross;":                    '\U00002717',
-       "cscr;":                     '\U0001D4B8',
-       "csub;":                     '\U00002ACF',
-       "csube;":                    '\U00002AD1',
-       "csup;":                     '\U00002AD0',
-       "csupe;":                    '\U00002AD2',
-       "ctdot;":                    '\U000022EF',
-       "cudarrl;":                  '\U00002938',
-       "cudarrr;":                  '\U00002935',
-       "cuepr;":                    '\U000022DE',
-       "cuesc;":                    '\U000022DF',
-       "cularr;":                   '\U000021B6',
-       "cularrp;":                  '\U0000293D',
-       "cup;":                      '\U0000222A',
-       "cupbrcap;":                 '\U00002A48',
-       "cupcap;":                   '\U00002A46',
-       "cupcup;":                   '\U00002A4A',
-       "cupdot;":                   '\U0000228D',
-       "cupor;":                    '\U00002A45',
-       "curarr;":                   '\U000021B7',
-       "curarrm;":                  '\U0000293C',
-       "curlyeqprec;":              '\U000022DE',
-       "curlyeqsucc;":              '\U000022DF',
-       "curlyvee;":                 '\U000022CE',
-       "curlywedge;":               '\U000022CF',
-       "curren;":                   '\U000000A4',
-       "curvearrowleft;":           '\U000021B6',
-       "curvearrowright;":          '\U000021B7',
-       "cuvee;":                    '\U000022CE',
-       "cuwed;":                    '\U000022CF',
-       "cwconint;":                 '\U00002232',
-       "cwint;":                    '\U00002231',
-       "cylcty;":                   '\U0000232D',
-       "dArr;":                     '\U000021D3',
-       "dHar;":                     '\U00002965',
-       "dagger;":                   '\U00002020',
-       "daleth;":                   '\U00002138',
-       "darr;":                     '\U00002193',
-       "dash;":                     '\U00002010',
-       "dashv;":                    '\U000022A3',
-       "dbkarow;":                  '\U0000290F',
-       "dblac;":                    '\U000002DD',
-       "dcaron;":                   '\U0000010F',
-       "dcy;":                      '\U00000434',
-       "dd;":                       '\U00002146',
-       "ddagger;":                  '\U00002021',
-       "ddarr;":                    '\U000021CA',
-       "ddotseq;":                  '\U00002A77',
-       "deg;":                      '\U000000B0',
-       "delta;":                    '\U000003B4',
-       "demptyv;":                  '\U000029B1',
-       "dfisht;":                   '\U0000297F',
-       "dfr;":                      '\U0001D521',
-       "dharl;":                    '\U000021C3',
-       "dharr;":                    '\U000021C2',
-       "diam;":                     '\U000022C4',
-       "diamond;":                  '\U000022C4',
-       "diamondsuit;":              '\U00002666',
-       "diams;":                    '\U00002666',
-       "die;":                      '\U000000A8',
-       "digamma;":                  '\U000003DD',
-       "disin;":                    '\U000022F2',
-       "div;":                      '\U000000F7',
-       "divide;":                   '\U000000F7',
-       "divideontimes;":            '\U000022C7',
-       "divonx;":                   '\U000022C7',
-       "djcy;":                     '\U00000452',
-       "dlcorn;":                   '\U0000231E',
-       "dlcrop;":                   '\U0000230D',
-       "dollar;":                   '\U00000024',
-       "dopf;":                     '\U0001D555',
-       "dot;":                      '\U000002D9',
-       "doteq;":                    '\U00002250',
-       "doteqdot;":                 '\U00002251',
-       "dotminus;":                 '\U00002238',
-       "dotplus;":                  '\U00002214',
-       "dotsquare;":                '\U000022A1',
-       "doublebarwedge;":           '\U00002306',
-       "downarrow;":                '\U00002193',
-       "downdownarrows;":           '\U000021CA',
-       "downharpoonleft;":          '\U000021C3',
-       "downharpoonright;":         '\U000021C2',
-       "drbkarow;":                 '\U00002910',
-       "drcorn;":                   '\U0000231F',
-       "drcrop;":                   '\U0000230C',
-       "dscr;":                     '\U0001D4B9',
-       "dscy;":                     '\U00000455',
-       "dsol;":                     '\U000029F6',
-       "dstrok;":                   '\U00000111',
-       "dtdot;":                    '\U000022F1',
-       "dtri;":                     '\U000025BF',
-       "dtrif;":                    '\U000025BE',
-       "duarr;":                    '\U000021F5',
-       "duhar;":                    '\U0000296F',
-       "dwangle;":                  '\U000029A6',
-       "dzcy;":                     '\U0000045F',
-       "dzigrarr;":                 '\U000027FF',
-       "eDDot;":                    '\U00002A77',
-       "eDot;":                     '\U00002251',
-       "eacute;":                   '\U000000E9',
-       "easter;":                   '\U00002A6E',
-       "ecaron;":                   '\U0000011B',
-       "ecir;":                     '\U00002256',
-       "ecirc;":                    '\U000000EA',
-       "ecolon;":                   '\U00002255',
-       "ecy;":                      '\U0000044D',
-       "edot;":                     '\U00000117',
-       "ee;":                       '\U00002147',
-       "efDot;":                    '\U00002252',
-       "efr;":                      '\U0001D522',
-       "eg;":                       '\U00002A9A',
-       "egrave;":                   '\U000000E8',
-       "egs;":                      '\U00002A96',
-       "egsdot;":                   '\U00002A98',
-       "el;":                       '\U00002A99',
-       "elinters;":                 '\U000023E7',
-       "ell;":                      '\U00002113',
-       "els;":                      '\U00002A95',
-       "elsdot;":                   '\U00002A97',
-       "emacr;":                    '\U00000113',
-       "empty;":                    '\U00002205',
-       "emptyset;":                 '\U00002205',
-       "emptyv;":                   '\U00002205',
-       "emsp;":                     '\U00002003',
-       "emsp13;":                   '\U00002004',
-       "emsp14;":                   '\U00002005',
-       "eng;":                      '\U0000014B',
-       "ensp;":                     '\U00002002',
-       "eogon;":                    '\U00000119',
-       "eopf;":                     '\U0001D556',
-       "epar;":                     '\U000022D5',
-       "eparsl;":                   '\U000029E3',
-       "eplus;":                    '\U00002A71',
-       "epsi;":                     '\U000003B5',
-       "epsilon;":                  '\U000003B5',
-       "epsiv;":                    '\U000003F5',
-       "eqcirc;":                   '\U00002256',
-       "eqcolon;":                  '\U00002255',
-       "eqsim;":                    '\U00002242',
-       "eqslantgtr;":               '\U00002A96',
-       "eqslantless;":              '\U00002A95',
-       "equals;":                   '\U0000003D',
-       "equest;":                   '\U0000225F',
-       "equiv;":                    '\U00002261',
-       "equivDD;":                  '\U00002A78',
-       "eqvparsl;":                 '\U000029E5',
-       "erDot;":                    '\U00002253',
-       "erarr;":                    '\U00002971',
-       "escr;":                     '\U0000212F',
-       "esdot;":                    '\U00002250',
-       "esim;":                     '\U00002242',
-       "eta;":                      '\U000003B7',
-       "eth;":                      '\U000000F0',
-       "euml;":                     '\U000000EB',
-       "euro;":                     '\U000020AC',
-       "excl;":                     '\U00000021',
-       "exist;":                    '\U00002203',
-       "expectation;":              '\U00002130',
-       "exponentiale;":             '\U00002147',
-       "fallingdotseq;":            '\U00002252',
-       "fcy;":                      '\U00000444',
-       "female;":                   '\U00002640',
-       "ffilig;":                   '\U0000FB03',
-       "fflig;":                    '\U0000FB00',
-       "ffllig;":                   '\U0000FB04',
-       "ffr;":                      '\U0001D523',
-       "filig;":                    '\U0000FB01',
-       "flat;":                     '\U0000266D',
-       "fllig;":                    '\U0000FB02',
-       "fltns;":                    '\U000025B1',
-       "fnof;":                     '\U00000192',
-       "fopf;":                     '\U0001D557',
-       "forall;":                   '\U00002200',
-       "fork;":                     '\U000022D4',
-       "forkv;":                    '\U00002AD9',
-       "fpartint;":                 '\U00002A0D',
-       "frac12;":                   '\U000000BD',
-       "frac13;":                   '\U00002153',
-       "frac14;":                   '\U000000BC',
-       "frac15;":                   '\U00002155',
-       "frac16;":                   '\U00002159',
-       "frac18;":                   '\U0000215B',
-       "frac23;":                   '\U00002154',
-       "frac25;":                   '\U00002156',
-       "frac34;":                   '\U000000BE',
-       "frac35;":                   '\U00002157',
-       "frac38;":                   '\U0000215C',
-       "frac45;":                   '\U00002158',
-       "frac56;":                   '\U0000215A',
-       "frac58;":                   '\U0000215D',
-       "frac78;":                   '\U0000215E',
-       "frasl;":                    '\U00002044',
-       "frown;":                    '\U00002322',
-       "fscr;":                     '\U0001D4BB',
-       "gE;":                       '\U00002267',
-       "gEl;":                      '\U00002A8C',
-       "gacute;":                   '\U000001F5',
-       "gamma;":                    '\U000003B3',
-       "gammad;":                   '\U000003DD',
-       "gap;":                      '\U00002A86',
-       "gbreve;":                   '\U0000011F',
-       "gcirc;":                    '\U0000011D',
-       "gcy;":                      '\U00000433',
-       "gdot;":                     '\U00000121',
-       "ge;":                       '\U00002265',
-       "gel;":                      '\U000022DB',
-       "geq;":                      '\U00002265',
-       "geqq;":                     '\U00002267',
-       "geqslant;":                 '\U00002A7E',
-       "ges;":                      '\U00002A7E',
-       "gescc;":                    '\U00002AA9',
-       "gesdot;":                   '\U00002A80',
-       "gesdoto;":                  '\U00002A82',
-       "gesdotol;":                 '\U00002A84',
-       "gesles;":                   '\U00002A94',
-       "gfr;":                      '\U0001D524',
-       "gg;":                       '\U0000226B',
-       "ggg;":                      '\U000022D9',
-       "gimel;":                    '\U00002137',
-       "gjcy;":                     '\U00000453',
-       "gl;":                       '\U00002277',
-       "glE;":                      '\U00002A92',
-       "gla;":                      '\U00002AA5',
-       "glj;":                      '\U00002AA4',
-       "gnE;":                      '\U00002269',
-       "gnap;":                     '\U00002A8A',
-       "gnapprox;":                 '\U00002A8A',
-       "gne;":                      '\U00002A88',
-       "gneq;":                     '\U00002A88',
-       "gneqq;":                    '\U00002269',
-       "gnsim;":                    '\U000022E7',
-       "gopf;":                     '\U0001D558',
-       "grave;":                    '\U00000060',
-       "gscr;":                     '\U0000210A',
-       "gsim;":                     '\U00002273',
-       "gsime;":                    '\U00002A8E',
-       "gsiml;":                    '\U00002A90',
-       "gt;":                       '\U0000003E',
-       "gtcc;":                     '\U00002AA7',
-       "gtcir;":                    '\U00002A7A',
-       "gtdot;":                    '\U000022D7',
-       "gtlPar;":                   '\U00002995',
-       "gtquest;":                  '\U00002A7C',
-       "gtrapprox;":                '\U00002A86',
-       "gtrarr;":                   '\U00002978',
-       "gtrdot;":                   '\U000022D7',
-       "gtreqless;":                '\U000022DB',
-       "gtreqqless;":               '\U00002A8C',
-       "gtrless;":                  '\U00002277',
-       "gtrsim;":                   '\U00002273',
-       "hArr;":                     '\U000021D4',
-       "hairsp;":                   '\U0000200A',
-       "half;":                     '\U000000BD',
-       "hamilt;":                   '\U0000210B',
-       "hardcy;":                   '\U0000044A',
-       "harr;":                     '\U00002194',
-       "harrcir;":                  '\U00002948',
-       "harrw;":                    '\U000021AD',
-       "hbar;":                     '\U0000210F',
-       "hcirc;":                    '\U00000125',
-       "hearts;":                   '\U00002665',
-       "heartsuit;":                '\U00002665',
-       "hellip;":                   '\U00002026',
-       "hercon;":                   '\U000022B9',
-       "hfr;":                      '\U0001D525',
-       "hksearow;":                 '\U00002925',
-       "hkswarow;":                 '\U00002926',
-       "hoarr;":                    '\U000021FF',
-       "homtht;":                   '\U0000223B',
-       "hookleftarrow;":            '\U000021A9',
-       "hookrightarrow;":           '\U000021AA',
-       "hopf;":                     '\U0001D559',
-       "horbar;":                   '\U00002015',
-       "hscr;":                     '\U0001D4BD',
-       "hslash;":                   '\U0000210F',
-       "hstrok;":                   '\U00000127',
-       "hybull;":                   '\U00002043',
-       "hyphen;":                   '\U00002010',
-       "iacute;":                   '\U000000ED',
-       "ic;":                       '\U00002063',
-       "icirc;":                    '\U000000EE',
-       "icy;":                      '\U00000438',
-       "iecy;":                     '\U00000435',
-       "iexcl;":                    '\U000000A1',
-       "iff;":                      '\U000021D4',
-       "ifr;":                      '\U0001D526',
-       "igrave;":                   '\U000000EC',
-       "ii;":                       '\U00002148',
-       "iiiint;":                   '\U00002A0C',
-       "iiint;":                    '\U0000222D',
-       "iinfin;":                   '\U000029DC',
-       "iiota;":                    '\U00002129',
-       "ijlig;":                    '\U00000133',
-       "imacr;":                    '\U0000012B',
-       "image;":                    '\U00002111',
-       "imagline;":                 '\U00002110',
-       "imagpart;":                 '\U00002111',
-       "imath;":                    '\U00000131',
-       "imof;":                     '\U000022B7',
-       "imped;":                    '\U000001B5',
-       "in;":                       '\U00002208',
-       "incare;":                   '\U00002105',
-       "infin;":                    '\U0000221E',
-       "infintie;":                 '\U000029DD',
-       "inodot;":                   '\U00000131',
-       "int;":                      '\U0000222B',
-       "intcal;":                   '\U000022BA',
-       "integers;":                 '\U00002124',
-       "intercal;":                 '\U000022BA',
-       "intlarhk;":                 '\U00002A17',
-       "intprod;":                  '\U00002A3C',
-       "iocy;":                     '\U00000451',
-       "iogon;":                    '\U0000012F',
-       "iopf;":                     '\U0001D55A',
-       "iota;":                     '\U000003B9',
-       "iprod;":                    '\U00002A3C',
-       "iquest;":                   '\U000000BF',
-       "iscr;":                     '\U0001D4BE',
-       "isin;":                     '\U00002208',
-       "isinE;":                    '\U000022F9',
-       "isindot;":                  '\U000022F5',
-       "isins;":                    '\U000022F4',
-       "isinsv;":                   '\U000022F3',
-       "isinv;":                    '\U00002208',
-       "it;":                       '\U00002062',
-       "itilde;":                   '\U00000129',
-       "iukcy;":                    '\U00000456',
-       "iuml;":                     '\U000000EF',
-       "jcirc;":                    '\U00000135',
-       "jcy;":                      '\U00000439',
-       "jfr;":                      '\U0001D527',
-       "jmath;":                    '\U00000237',
-       "jopf;":                     '\U0001D55B',
-       "jscr;":                     '\U0001D4BF',
-       "jsercy;":                   '\U00000458',
-       "jukcy;":                    '\U00000454',
-       "kappa;":                    '\U000003BA',
-       "kappav;":                   '\U000003F0',
-       "kcedil;":                   '\U00000137',
-       "kcy;":                      '\U0000043A',
-       "kfr;":                      '\U0001D528',
-       "kgreen;":                   '\U00000138',
-       "khcy;":                     '\U00000445',
-       "kjcy;":                     '\U0000045C',
-       "kopf;":                     '\U0001D55C',
-       "kscr;":                     '\U0001D4C0',
-       "lAarr;":                    '\U000021DA',
-       "lArr;":                     '\U000021D0',
-       "lAtail;":                   '\U0000291B',
-       "lBarr;":                    '\U0000290E',
-       "lE;":                       '\U00002266',
-       "lEg;":                      '\U00002A8B',
-       "lHar;":                     '\U00002962',
-       "lacute;":                   '\U0000013A',
-       "laemptyv;":                 '\U000029B4',
-       "lagran;":                   '\U00002112',
-       "lambda;":                   '\U000003BB',
-       "lang;":                     '\U000027E8',
-       "langd;":                    '\U00002991',
-       "langle;":                   '\U000027E8',
-       "lap;":                      '\U00002A85',
-       "laquo;":                    '\U000000AB',
-       "larr;":                     '\U00002190',
-       "larrb;":                    '\U000021E4',
-       "larrbfs;":                  '\U0000291F',
-       "larrfs;":                   '\U0000291D',
-       "larrhk;":                   '\U000021A9',
-       "larrlp;":                   '\U000021AB',
-       "larrpl;":                   '\U00002939',
-       "larrsim;":                  '\U00002973',
-       "larrtl;":                   '\U000021A2',
-       "lat;":                      '\U00002AAB',
-       "latail;":                   '\U00002919',
-       "late;":                     '\U00002AAD',
-       "lbarr;":                    '\U0000290C',
-       "lbbrk;":                    '\U00002772',
-       "lbrace;":                   '\U0000007B',
-       "lbrack;":                   '\U0000005B',
-       "lbrke;":                    '\U0000298B',
-       "lbrksld;":                  '\U0000298F',
-       "lbrkslu;":                  '\U0000298D',
-       "lcaron;":                   '\U0000013E',
-       "lcedil;":                   '\U0000013C',
-       "lceil;":                    '\U00002308',
-       "lcub;":                     '\U0000007B',
-       "lcy;":                      '\U0000043B',
-       "ldca;":                     '\U00002936',
-       "ldquo;":                    '\U0000201C',
-       "ldquor;":                   '\U0000201E',
-       "ldrdhar;":                  '\U00002967',
-       "ldrushar;":                 '\U0000294B',
-       "ldsh;":                     '\U000021B2',
-       "le;":                       '\U00002264',
-       "leftarrow;":                '\U00002190',
-       "leftarrowtail;":            '\U000021A2',
-       "leftharpoondown;":          '\U000021BD',
-       "leftharpoonup;":            '\U000021BC',
-       "leftleftarrows;":           '\U000021C7',
-       "leftrightarrow;":           '\U00002194',
-       "leftrightarrows;":          '\U000021C6',
-       "leftrightharpoons;":        '\U000021CB',
-       "leftrightsquigarrow;":      '\U000021AD',
-       "leftthreetimes;":           '\U000022CB',
-       "leg;":                      '\U000022DA',
-       "leq;":                      '\U00002264',
-       "leqq;":                     '\U00002266',
-       "leqslant;":                 '\U00002A7D',
-       "les;":                      '\U00002A7D',
-       "lescc;":                    '\U00002AA8',
-       "lesdot;":                   '\U00002A7F',
-       "lesdoto;":                  '\U00002A81',
-       "lesdotor;":                 '\U00002A83',
-       "lesges;":                   '\U00002A93',
-       "lessapprox;":               '\U00002A85',
-       "lessdot;":                  '\U000022D6',
-       "lesseqgtr;":                '\U000022DA',
-       "lesseqqgtr;":               '\U00002A8B',
-       "lessgtr;":                  '\U00002276',
-       "lesssim;":                  '\U00002272',
-       "lfisht;":                   '\U0000297C',
-       "lfloor;":                   '\U0000230A',
-       "lfr;":                      '\U0001D529',
-       "lg;":                       '\U00002276',
-       "lgE;":                      '\U00002A91',
-       "lhard;":                    '\U000021BD',
-       "lharu;":                    '\U000021BC',
-       "lharul;":                   '\U0000296A',
-       "lhblk;":                    '\U00002584',
-       "ljcy;":                     '\U00000459',
-       "ll;":                       '\U0000226A',
-       "llarr;":                    '\U000021C7',
-       "llcorner;":                 '\U0000231E',
-       "llhard;":                   '\U0000296B',
-       "lltri;":                    '\U000025FA',
-       "lmidot;":                   '\U00000140',
-       "lmoust;":                   '\U000023B0',
-       "lmoustache;":               '\U000023B0',
-       "lnE;":                      '\U00002268',
-       "lnap;":                     '\U00002A89',
-       "lnapprox;":                 '\U00002A89',
-       "lne;":                      '\U00002A87',
-       "lneq;":                     '\U00002A87',
-       "lneqq;":                    '\U00002268',
-       "lnsim;":                    '\U000022E6',
-       "loang;":                    '\U000027EC',
-       "loarr;":                    '\U000021FD',
-       "lobrk;":                    '\U000027E6',
-       "longleftarrow;":            '\U000027F5',
-       "longleftrightarrow;":       '\U000027F7',
-       "longmapsto;":               '\U000027FC',
-       "longrightarrow;":           '\U000027F6',
-       "looparrowleft;":            '\U000021AB',
-       "looparrowright;":           '\U000021AC',
-       "lopar;":                    '\U00002985',
-       "lopf;":                     '\U0001D55D',
-       "loplus;":                   '\U00002A2D',
-       "lotimes;":                  '\U00002A34',
-       "lowast;":                   '\U00002217',
-       "lowbar;":                   '\U0000005F',
-       "loz;":                      '\U000025CA',
-       "lozenge;":                  '\U000025CA',
-       "lozf;":                     '\U000029EB',
-       "lpar;":                     '\U00000028',
-       "lparlt;":                   '\U00002993',
-       "lrarr;":                    '\U000021C6',
-       "lrcorner;":                 '\U0000231F',
-       "lrhar;":                    '\U000021CB',
-       "lrhard;":                   '\U0000296D',
-       "lrm;":                      '\U0000200E',
-       "lrtri;":                    '\U000022BF',
-       "lsaquo;":                   '\U00002039',
-       "lscr;":                     '\U0001D4C1',
-       "lsh;":                      '\U000021B0',
-       "lsim;":                     '\U00002272',
-       "lsime;":                    '\U00002A8D',
-       "lsimg;":                    '\U00002A8F',
-       "lsqb;":                     '\U0000005B',
-       "lsquo;":                    '\U00002018',
-       "lsquor;":                   '\U0000201A',
-       "lstrok;":                   '\U00000142',
-       "lt;":                       '\U0000003C',
-       "ltcc;":                     '\U00002AA6',
-       "ltcir;":                    '\U00002A79',
-       "ltdot;":                    '\U000022D6',
-       "lthree;":                   '\U000022CB',
-       "ltimes;":                   '\U000022C9',
-       "ltlarr;":                   '\U00002976',
-       "ltquest;":                  '\U00002A7B',
-       "ltrPar;":                   '\U00002996',
-       "ltri;":                     '\U000025C3',
-       "ltrie;":                    '\U000022B4',
-       "ltrif;":                    '\U000025C2',
-       "lurdshar;":                 '\U0000294A',
-       "luruhar;":                  '\U00002966',
-       "mDDot;":                    '\U0000223A',
-       "macr;":                     '\U000000AF',
-       "male;":                     '\U00002642',
-       "malt;":                     '\U00002720',
-       "maltese;":                  '\U00002720',
-       "map;":                      '\U000021A6',
-       "mapsto;":                   '\U000021A6',
-       "mapstodown;":               '\U000021A7',
-       "mapstoleft;":               '\U000021A4',
-       "mapstoup;":                 '\U000021A5',
-       "marker;":                   '\U000025AE',
-       "mcomma;":                   '\U00002A29',
-       "mcy;":                      '\U0000043C',
-       "mdash;":                    '\U00002014',
-       "measuredangle;":            '\U00002221',
-       "mfr;":                      '\U0001D52A',
-       "mho;":                      '\U00002127',
-       "micro;":                    '\U000000B5',
-       "mid;":                      '\U00002223',
-       "midast;":                   '\U0000002A',
-       "midcir;":                   '\U00002AF0',
-       "middot;":                   '\U000000B7',
-       "minus;":                    '\U00002212',
-       "minusb;":                   '\U0000229F',
-       "minusd;":                   '\U00002238',
-       "minusdu;":                  '\U00002A2A',
-       "mlcp;":                     '\U00002ADB',
-       "mldr;":                     '\U00002026',
-       "mnplus;":                   '\U00002213',
-       "models;":                   '\U000022A7',
-       "mopf;":                     '\U0001D55E',
-       "mp;":                       '\U00002213',
-       "mscr;":                     '\U0001D4C2',
-       "mstpos;":                   '\U0000223E',
-       "mu;":                       '\U000003BC',
-       "multimap;":                 '\U000022B8',
-       "mumap;":                    '\U000022B8',
-       "nLeftarrow;":               '\U000021CD',
-       "nLeftrightarrow;":          '\U000021CE',
-       "nRightarrow;":              '\U000021CF',
-       "nVDash;":                   '\U000022AF',
-       "nVdash;":                   '\U000022AE',
-       "nabla;":                    '\U00002207',
-       "nacute;":                   '\U00000144',
-       "nap;":                      '\U00002249',
-       "napos;":                    '\U00000149',
-       "napprox;":                  '\U00002249',
-       "natur;":                    '\U0000266E',
-       "natural;":                  '\U0000266E',
-       "naturals;":                 '\U00002115',
-       "nbsp;":                     '\U000000A0',
-       "ncap;":                     '\U00002A43',
-       "ncaron;":                   '\U00000148',
-       "ncedil;":                   '\U00000146',
-       "ncong;":                    '\U00002247',
-       "ncup;":                     '\U00002A42',
-       "ncy;":                      '\U0000043D',
-       "ndash;":                    '\U00002013',
-       "ne;":                       '\U00002260',
-       "neArr;":                    '\U000021D7',
-       "nearhk;":                   '\U00002924',
-       "nearr;":                    '\U00002197',
-       "nearrow;":                  '\U00002197',
-       "nequiv;":                   '\U00002262',
-       "nesear;":                   '\U00002928',
-       "nexist;":                   '\U00002204',
-       "nexists;":                  '\U00002204',
-       "nfr;":                      '\U0001D52B',
-       "nge;":                      '\U00002271',
-       "ngeq;":                     '\U00002271',
-       "ngsim;":                    '\U00002275',
-       "ngt;":                      '\U0000226F',
-       "ngtr;":                     '\U0000226F',
-       "nhArr;":                    '\U000021CE',
-       "nharr;":                    '\U000021AE',
-       "nhpar;":                    '\U00002AF2',
-       "ni;":                       '\U0000220B',
-       "nis;":                      '\U000022FC',
-       "nisd;":                     '\U000022FA',
-       "niv;":                      '\U0000220B',
-       "njcy;":                     '\U0000045A',
-       "nlArr;":                    '\U000021CD',
-       "nlarr;":                    '\U0000219A',
-       "nldr;":                     '\U00002025',
-       "nle;":                      '\U00002270',
-       "nleftarrow;":               '\U0000219A',
-       "nleftrightarrow;":          '\U000021AE',
-       "nleq;":                     '\U00002270',
-       "nless;":                    '\U0000226E',
-       "nlsim;":                    '\U00002274',
-       "nlt;":                      '\U0000226E',
-       "nltri;":                    '\U000022EA',
-       "nltrie;":                   '\U000022EC',
-       "nmid;":                     '\U00002224',
-       "nopf;":                     '\U0001D55F',
-       "not;":                      '\U000000AC',
-       "notin;":                    '\U00002209',
-       "notinva;":                  '\U00002209',
-       "notinvb;":                  '\U000022F7',
-       "notinvc;":                  '\U000022F6',
-       "notni;":                    '\U0000220C',
-       "notniva;":                  '\U0000220C',
-       "notnivb;":                  '\U000022FE',
-       "notnivc;":                  '\U000022FD',
-       "npar;":                     '\U00002226',
-       "nparallel;":                '\U00002226',
-       "npolint;":                  '\U00002A14',
-       "npr;":                      '\U00002280',
-       "nprcue;":                   '\U000022E0',
-       "nprec;":                    '\U00002280',
-       "nrArr;":                    '\U000021CF',
-       "nrarr;":                    '\U0000219B',
-       "nrightarrow;":              '\U0000219B',
-       "nrtri;":                    '\U000022EB',
-       "nrtrie;":                   '\U000022ED',
-       "nsc;":                      '\U00002281',
-       "nsccue;":                   '\U000022E1',
-       "nscr;":                     '\U0001D4C3',
-       "nshortmid;":                '\U00002224',
-       "nshortparallel;":           '\U00002226',
-       "nsim;":                     '\U00002241',
-       "nsime;":                    '\U00002244',
-       "nsimeq;":                   '\U00002244',
-       "nsmid;":                    '\U00002224',
-       "nspar;":                    '\U00002226',
-       "nsqsube;":                  '\U000022E2',
-       "nsqsupe;":                  '\U000022E3',
-       "nsub;":                     '\U00002284',
-       "nsube;":                    '\U00002288',
-       "nsubseteq;":                '\U00002288',
-       "nsucc;":                    '\U00002281',
-       "nsup;":                     '\U00002285',
-       "nsupe;":                    '\U00002289',
-       "nsupseteq;":                '\U00002289',
-       "ntgl;":                     '\U00002279',
-       "ntilde;":                   '\U000000F1',
-       "ntlg;":                     '\U00002278',
-       "ntriangleleft;":            '\U000022EA',
-       "ntrianglelefteq;":          '\U000022EC',
-       "ntriangleright;":           '\U000022EB',
-       "ntrianglerighteq;":         '\U000022ED',
-       "nu;":                       '\U000003BD',
-       "num;":                      '\U00000023',
-       "numero;":                   '\U00002116',
-       "numsp;":                    '\U00002007',
-       "nvDash;":                   '\U000022AD',
-       "nvHarr;":                   '\U00002904',
-       "nvdash;":                   '\U000022AC',
-       "nvinfin;":                  '\U000029DE',
-       "nvlArr;":                   '\U00002902',
-       "nvrArr;":                   '\U00002903',
-       "nwArr;":                    '\U000021D6',
-       "nwarhk;":                   '\U00002923',
-       "nwarr;":                    '\U00002196',
-       "nwarrow;":                  '\U00002196',
-       "nwnear;":                   '\U00002927',
-       "oS;":                       '\U000024C8',
-       "oacute;":                   '\U000000F3',
-       "oast;":                     '\U0000229B',
-       "ocir;":                     '\U0000229A',
-       "ocirc;":                    '\U000000F4',
-       "ocy;":                      '\U0000043E',
-       "odash;":                    '\U0000229D',
-       "odblac;":                   '\U00000151',
-       "odiv;":                     '\U00002A38',
-       "odot;":                     '\U00002299',
-       "odsold;":                   '\U000029BC',
-       "oelig;":                    '\U00000153',
-       "ofcir;":                    '\U000029BF',
-       "ofr;":                      '\U0001D52C',
-       "ogon;":                     '\U000002DB',
-       "ograve;":                   '\U000000F2',
-       "ogt;":                      '\U000029C1',
-       "ohbar;":                    '\U000029B5',
-       "ohm;":                      '\U000003A9',
-       "oint;":                     '\U0000222E',
-       "olarr;":                    '\U000021BA',
-       "olcir;":                    '\U000029BE',
-       "olcross;":                  '\U000029BB',
-       "oline;":                    '\U0000203E',
-       "olt;":                      '\U000029C0',
-       "omacr;":                    '\U0000014D',
-       "omega;":                    '\U000003C9',
-       "omicron;":                  '\U000003BF',
-       "omid;":                     '\U000029B6',
-       "ominus;":                   '\U00002296',
-       "oopf;":                     '\U0001D560',
-       "opar;":                     '\U000029B7',
-       "operp;":                    '\U000029B9',
-       "oplus;":                    '\U00002295',
-       "or;":                       '\U00002228',
-       "orarr;":                    '\U000021BB',
-       "ord;":                      '\U00002A5D',
-       "order;":                    '\U00002134',
-       "orderof;":                  '\U00002134',
-       "ordf;":                     '\U000000AA',
-       "ordm;":                     '\U000000BA',
-       "origof;":                   '\U000022B6',
-       "oror;":                     '\U00002A56',
-       "orslope;":                  '\U00002A57',
-       "orv;":                      '\U00002A5B',
-       "oscr;":                     '\U00002134',
-       "oslash;":                   '\U000000F8',
-       "osol;":                     '\U00002298',
-       "otilde;":                   '\U000000F5',
-       "otimes;":                   '\U00002297',
-       "otimesas;":                 '\U00002A36',
-       "ouml;":                     '\U000000F6',
-       "ovbar;":                    '\U0000233D',
-       "par;":                      '\U00002225',
-       "para;":                     '\U000000B6',
-       "parallel;":                 '\U00002225',
-       "parsim;":                   '\U00002AF3',
-       "parsl;":                    '\U00002AFD',
-       "part;":                     '\U00002202',
-       "pcy;":                      '\U0000043F',
-       "percnt;":                   '\U00000025',
-       "period;":                   '\U0000002E',
-       "permil;":                   '\U00002030',
-       "perp;":                     '\U000022A5',
-       "pertenk;":                  '\U00002031',
-       "pfr;":                      '\U0001D52D',
-       "phi;":                      '\U000003C6',
-       "phiv;":                     '\U000003D5',
-       "phmmat;":                   '\U00002133',
-       "phone;":                    '\U0000260E',
-       "pi;":                       '\U000003C0',
-       "pitchfork;":                '\U000022D4',
-       "piv;":                      '\U000003D6',
-       "planck;":                   '\U0000210F',
-       "planckh;":                  '\U0000210E',
-       "plankv;":                   '\U0000210F',
-       "plus;":                     '\U0000002B',
-       "plusacir;":                 '\U00002A23',
-       "plusb;":                    '\U0000229E',
-       "pluscir;":                  '\U00002A22',
-       "plusdo;":                   '\U00002214',
-       "plusdu;":                   '\U00002A25',
-       "pluse;":                    '\U00002A72',
-       "plusmn;":                   '\U000000B1',
-       "plussim;":                  '\U00002A26',
-       "plustwo;":                  '\U00002A27',
-       "pm;":                       '\U000000B1',
-       "pointint;":                 '\U00002A15',
-       "popf;":                     '\U0001D561',
-       "pound;":                    '\U000000A3',
-       "pr;":                       '\U0000227A',
-       "prE;":                      '\U00002AB3',
-       "prap;":                     '\U00002AB7',
-       "prcue;":                    '\U0000227C',
-       "pre;":                      '\U00002AAF',
-       "prec;":                     '\U0000227A',
-       "precapprox;":               '\U00002AB7',
-       "preccurlyeq;":              '\U0000227C',
-       "preceq;":                   '\U00002AAF',
-       "precnapprox;":              '\U00002AB9',
-       "precneqq;":                 '\U00002AB5',
-       "precnsim;":                 '\U000022E8',
-       "precsim;":                  '\U0000227E',
-       "prime;":                    '\U00002032',
-       "primes;":                   '\U00002119',
-       "prnE;":                     '\U00002AB5',
-       "prnap;":                    '\U00002AB9',
-       "prnsim;":                   '\U000022E8',
-       "prod;":                     '\U0000220F',
-       "profalar;":                 '\U0000232E',
-       "profline;":                 '\U00002312',
-       "profsurf;":                 '\U00002313',
-       "prop;":                     '\U0000221D',
-       "propto;":                   '\U0000221D',
-       "prsim;":                    '\U0000227E',
-       "prurel;":                   '\U000022B0',
-       "pscr;":                     '\U0001D4C5',
-       "psi;":                      '\U000003C8',
-       "puncsp;":                   '\U00002008',
-       "qfr;":                      '\U0001D52E',
-       "qint;":                     '\U00002A0C',
-       "qopf;":                     '\U0001D562',
-       "qprime;":                   '\U00002057',
-       "qscr;":                     '\U0001D4C6',
-       "quaternions;":              '\U0000210D',
-       "quatint;":                  '\U00002A16',
-       "quest;":                    '\U0000003F',
-       "questeq;":                  '\U0000225F',
-       "quot;":                     '\U00000022',
-       "rAarr;":                    '\U000021DB',
-       "rArr;":                     '\U000021D2',
-       "rAtail;":                   '\U0000291C',
-       "rBarr;":                    '\U0000290F',
-       "rHar;":                     '\U00002964',
-       "racute;":                   '\U00000155',
-       "radic;":                    '\U0000221A',
-       "raemptyv;":                 '\U000029B3',
-       "rang;":                     '\U000027E9',
-       "rangd;":                    '\U00002992',
-       "range;":                    '\U000029A5',
-       "rangle;":                   '\U000027E9',
-       "raquo;":                    '\U000000BB',
-       "rarr;":                     '\U00002192',
-       "rarrap;":                   '\U00002975',
-       "rarrb;":                    '\U000021E5',
-       "rarrbfs;":                  '\U00002920',
-       "rarrc;":                    '\U00002933',
-       "rarrfs;":                   '\U0000291E',
-       "rarrhk;":                   '\U000021AA',
-       "rarrlp;":                   '\U000021AC',
-       "rarrpl;":                   '\U00002945',
-       "rarrsim;":                  '\U00002974',
-       "rarrtl;":                   '\U000021A3',
-       "rarrw;":                    '\U0000219D',
-       "ratail;":                   '\U0000291A',
-       "ratio;":                    '\U00002236',
-       "rationals;":                '\U0000211A',
-       "rbarr;":                    '\U0000290D',
-       "rbbrk;":                    '\U00002773',
-       "rbrace;":                   '\U0000007D',
-       "rbrack;":                   '\U0000005D',
-       "rbrke;":                    '\U0000298C',
-       "rbrksld;":                  '\U0000298E',
-       "rbrkslu;":                  '\U00002990',
-       "rcaron;":                   '\U00000159',
-       "rcedil;":                   '\U00000157',
-       "rceil;":                    '\U00002309',
-       "rcub;":                     '\U0000007D',
-       "rcy;":                      '\U00000440',
-       "rdca;":                     '\U00002937',
-       "rdldhar;":                  '\U00002969',
-       "rdquo;":                    '\U0000201D',
-       "rdquor;":                   '\U0000201D',
-       "rdsh;":                     '\U000021B3',
-       "real;":                     '\U0000211C',
-       "realine;":                  '\U0000211B',
-       "realpart;":                 '\U0000211C',
-       "reals;":                    '\U0000211D',
-       "rect;":                     '\U000025AD',
-       "reg;":                      '\U000000AE',
-       "rfisht;":                   '\U0000297D',
-       "rfloor;":                   '\U0000230B',
-       "rfr;":                      '\U0001D52F',
-       "rhard;":                    '\U000021C1',
-       "rharu;":                    '\U000021C0',
-       "rharul;":                   '\U0000296C',
-       "rho;":                      '\U000003C1',
-       "rhov;":                     '\U000003F1',
-       "rightarrow;":               '\U00002192',
-       "rightarrowtail;":           '\U000021A3',
-       "rightharpoondown;":         '\U000021C1',
-       "rightharpoonup;":           '\U000021C0',
-       "rightleftarrows;":          '\U000021C4',
-       "rightleftharpoons;":        '\U000021CC',
-       "rightrightarrows;":         '\U000021C9',
-       "rightsquigarrow;":          '\U0000219D',
-       "rightthreetimes;":          '\U000022CC',
-       "ring;":                     '\U000002DA',
-       "risingdotseq;":             '\U00002253',
-       "rlarr;":                    '\U000021C4',
-       "rlhar;":                    '\U000021CC',
-       "rlm;":                      '\U0000200F',
-       "rmoust;":                   '\U000023B1',
-       "rmoustache;":               '\U000023B1',
-       "rnmid;":                    '\U00002AEE',
-       "roang;":                    '\U000027ED',
-       "roarr;":                    '\U000021FE',
-       "robrk;":                    '\U000027E7',
-       "ropar;":                    '\U00002986',
-       "ropf;":                     '\U0001D563',
-       "roplus;":                   '\U00002A2E',
-       "rotimes;":                  '\U00002A35',
-       "rpar;":                     '\U00000029',
-       "rpargt;":                   '\U00002994',
-       "rppolint;":                 '\U00002A12',
-       "rrarr;":                    '\U000021C9',
-       "rsaquo;":                   '\U0000203A',
-       "rscr;":                     '\U0001D4C7',
-       "rsh;":                      '\U000021B1',
-       "rsqb;":                     '\U0000005D',
-       "rsquo;":                    '\U00002019',
-       "rsquor;":                   '\U00002019',
-       "rthree;":                   '\U000022CC',
-       "rtimes;":                   '\U000022CA',
-       "rtri;":                     '\U000025B9',
-       "rtrie;":                    '\U000022B5',
-       "rtrif;":                    '\U000025B8',
-       "rtriltri;":                 '\U000029CE',
-       "ruluhar;":                  '\U00002968',
-       "rx;":                       '\U0000211E',
-       "sacute;":                   '\U0000015B',
-       "sbquo;":                    '\U0000201A',
-       "sc;":                       '\U0000227B',
-       "scE;":                      '\U00002AB4',
-       "scap;":                     '\U00002AB8',
-       "scaron;":                   '\U00000161',
-       "sccue;":                    '\U0000227D',
-       "sce;":                      '\U00002AB0',
-       "scedil;":                   '\U0000015F',
-       "scirc;":                    '\U0000015D',
-       "scnE;":                     '\U00002AB6',
-       "scnap;":                    '\U00002ABA',
-       "scnsim;":                   '\U000022E9',
-       "scpolint;":                 '\U00002A13',
-       "scsim;":                    '\U0000227F',
-       "scy;":                      '\U00000441',
-       "sdot;":                     '\U000022C5',
-       "sdotb;":                    '\U000022A1',
-       "sdote;":                    '\U00002A66',
-       "seArr;":                    '\U000021D8',
-       "searhk;":                   '\U00002925',
-       "searr;":                    '\U00002198',
-       "searrow;":                  '\U00002198',
-       "sect;":                     '\U000000A7',
-       "semi;":                     '\U0000003B',
-       "seswar;":                   '\U00002929',
-       "setminus;":                 '\U00002216',
-       "setmn;":                    '\U00002216',
-       "sext;":                     '\U00002736',
-       "sfr;":                      '\U0001D530',
-       "sfrown;":                   '\U00002322',
-       "sharp;":                    '\U0000266F',
-       "shchcy;":                   '\U00000449',
-       "shcy;":                     '\U00000448',
-       "shortmid;":                 '\U00002223',
-       "shortparallel;":            '\U00002225',
-       "shy;":                      '\U000000AD',
-       "sigma;":                    '\U000003C3',
-       "sigmaf;":                   '\U000003C2',
-       "sigmav;":                   '\U000003C2',
-       "sim;":                      '\U0000223C',
-       "simdot;":                   '\U00002A6A',
-       "sime;":                     '\U00002243',
-       "simeq;":                    '\U00002243',
-       "simg;":                     '\U00002A9E',
-       "simgE;":                    '\U00002AA0',
-       "siml;":                     '\U00002A9D',
-       "simlE;":                    '\U00002A9F',
-       "simne;":                    '\U00002246',
-       "simplus;":                  '\U00002A24',
-       "simrarr;":                  '\U00002972',
-       "slarr;":                    '\U00002190',
-       "smallsetminus;":            '\U00002216',
-       "smashp;":                   '\U00002A33',
-       "smeparsl;":                 '\U000029E4',
-       "smid;":                     '\U00002223',
-       "smile;":                    '\U00002323',
-       "smt;":                      '\U00002AAA',
-       "smte;":                     '\U00002AAC',
-       "softcy;":                   '\U0000044C',
-       "sol;":                      '\U0000002F',
-       "solb;":                     '\U000029C4',
-       "solbar;":                   '\U0000233F',
-       "sopf;":                     '\U0001D564',
-       "spades;":                   '\U00002660',
-       "spadesuit;":                '\U00002660',
-       "spar;":                     '\U00002225',
-       "sqcap;":                    '\U00002293',
-       "sqcup;":                    '\U00002294',
-       "sqsub;":                    '\U0000228F',
-       "sqsube;":                   '\U00002291',
-       "sqsubset;":                 '\U0000228F',
-       "sqsubseteq;":               '\U00002291',
-       "sqsup;":                    '\U00002290',
-       "sqsupe;":                   '\U00002292',
-       "sqsupset;":                 '\U00002290',
-       "sqsupseteq;":               '\U00002292',
-       "squ;":                      '\U000025A1',
-       "square;":                   '\U000025A1',
-       "squarf;":                   '\U000025AA',
-       "squf;":                     '\U000025AA',
-       "srarr;":                    '\U00002192',
-       "sscr;":                     '\U0001D4C8',
-       "ssetmn;":                   '\U00002216',
-       "ssmile;":                   '\U00002323',
-       "sstarf;":                   '\U000022C6',
-       "star;":                     '\U00002606',
-       "starf;":                    '\U00002605',
-       "straightepsilon;":          '\U000003F5',
-       "straightphi;":              '\U000003D5',
-       "strns;":                    '\U000000AF',
-       "sub;":                      '\U00002282',
-       "subE;":                     '\U00002AC5',
-       "subdot;":                   '\U00002ABD',
-       "sube;":                     '\U00002286',
-       "subedot;":                  '\U00002AC3',
-       "submult;":                  '\U00002AC1',
-       "subnE;":                    '\U00002ACB',
-       "subne;":                    '\U0000228A',
-       "subplus;":                  '\U00002ABF',
-       "subrarr;":                  '\U00002979',
-       "subset;":                   '\U00002282',
-       "subseteq;":                 '\U00002286',
-       "subseteqq;":                '\U00002AC5',
-       "subsetneq;":                '\U0000228A',
-       "subsetneqq;":               '\U00002ACB',
-       "subsim;":                   '\U00002AC7',
-       "subsub;":                   '\U00002AD5',
-       "subsup;":                   '\U00002AD3',
-       "succ;":                     '\U0000227B',
-       "succapprox;":               '\U00002AB8',
-       "succcurlyeq;":              '\U0000227D',
-       "succeq;":                   '\U00002AB0',
-       "succnapprox;":              '\U00002ABA',
-       "succneqq;":                 '\U00002AB6',
-       "succnsim;":                 '\U000022E9',
-       "succsim;":                  '\U0000227F',
-       "sum;":                      '\U00002211',
-       "sung;":                     '\U0000266A',
-       "sup;":                      '\U00002283',
-       "sup1;":                     '\U000000B9',
-       "sup2;":                     '\U000000B2',
-       "sup3;":                     '\U000000B3',
-       "supE;":                     '\U00002AC6',
-       "supdot;":                   '\U00002ABE',
-       "supdsub;":                  '\U00002AD8',
-       "supe;":                     '\U00002287',
-       "supedot;":                  '\U00002AC4',
-       "suphsol;":                  '\U000027C9',
-       "suphsub;":                  '\U00002AD7',
-       "suplarr;":                  '\U0000297B',
-       "supmult;":                  '\U00002AC2',
-       "supnE;":                    '\U00002ACC',
-       "supne;":                    '\U0000228B',
-       "supplus;":                  '\U00002AC0',
-       "supset;":                   '\U00002283',
-       "supseteq;":                 '\U00002287',
-       "supseteqq;":                '\U00002AC6',
-       "supsetneq;":                '\U0000228B',
-       "supsetneqq;":               '\U00002ACC',
-       "supsim;":                   '\U00002AC8',
-       "supsub;":                   '\U00002AD4',
-       "supsup;":                   '\U00002AD6',
-       "swArr;":                    '\U000021D9',
-       "swarhk;":                   '\U00002926',
-       "swarr;":                    '\U00002199',
-       "swarrow;":                  '\U00002199',
-       "swnwar;":                   '\U0000292A',
-       "szlig;":                    '\U000000DF',
-       "target;":                   '\U00002316',
-       "tau;":                      '\U000003C4',
-       "tbrk;":                     '\U000023B4',
-       "tcaron;":                   '\U00000165',
-       "tcedil;":                   '\U00000163',
-       "tcy;":                      '\U00000442',
-       "tdot;":                     '\U000020DB',
-       "telrec;":                   '\U00002315',
-       "tfr;":                      '\U0001D531',
-       "there4;":                   '\U00002234',
-       "therefore;":                '\U00002234',
-       "theta;":                    '\U000003B8',
-       "thetasym;":                 '\U000003D1',
-       "thetav;":                   '\U000003D1',
-       "thickapprox;":              '\U00002248',
-       "thicksim;":                 '\U0000223C',
-       "thinsp;":                   '\U00002009',
-       "thkap;":                    '\U00002248',
-       "thksim;":                   '\U0000223C',
-       "thorn;":                    '\U000000FE',
-       "tilde;":                    '\U000002DC',
-       "times;":                    '\U000000D7',
-       "timesb;":                   '\U000022A0',
-       "timesbar;":                 '\U00002A31',
-       "timesd;":                   '\U00002A30',
-       "tint;":                     '\U0000222D',
-       "toea;":                     '\U00002928',
-       "top;":                      '\U000022A4',
-       "topbot;":                   '\U00002336',
-       "topcir;":                   '\U00002AF1',
-       "topf;":                     '\U0001D565',
-       "topfork;":                  '\U00002ADA',
-       "tosa;":                     '\U00002929',
-       "tprime;":                   '\U00002034',
-       "trade;":                    '\U00002122',
-       "triangle;":                 '\U000025B5',
-       "triangledown;":             '\U000025BF',
-       "triangleleft;":             '\U000025C3',
-       "trianglelefteq;":           '\U000022B4',
-       "triangleq;":                '\U0000225C',
-       "triangleright;":            '\U000025B9',
-       "trianglerighteq;":          '\U000022B5',
-       "tridot;":                   '\U000025EC',
-       "trie;":                     '\U0000225C',
-       "triminus;":                 '\U00002A3A',
-       "triplus;":                  '\U00002A39',
-       "trisb;":                    '\U000029CD',
-       "tritime;":                  '\U00002A3B',
-       "trpezium;":                 '\U000023E2',
-       "tscr;":                     '\U0001D4C9',
-       "tscy;":                     '\U00000446',
-       "tshcy;":                    '\U0000045B',
-       "tstrok;":                   '\U00000167',
-       "twixt;":                    '\U0000226C',
-       "twoheadleftarrow;":         '\U0000219E',
-       "twoheadrightarrow;":        '\U000021A0',
-       "uArr;":                     '\U000021D1',
-       "uHar;":                     '\U00002963',
-       "uacute;":                   '\U000000FA',
-       "uarr;":                     '\U00002191',
-       "ubrcy;":                    '\U0000045E',
-       "ubreve;":                   '\U0000016D',
-       "ucirc;":                    '\U000000FB',
-       "ucy;":                      '\U00000443',
-       "udarr;":                    '\U000021C5',
-       "udblac;":                   '\U00000171',
-       "udhar;":                    '\U0000296E',
-       "ufisht;":                   '\U0000297E',
-       "ufr;":                      '\U0001D532',
-       "ugrave;":                   '\U000000F9',
-       "uharl;":                    '\U000021BF',
-       "uharr;":                    '\U000021BE',
-       "uhblk;":                    '\U00002580',
-       "ulcorn;":                   '\U0000231C',
-       "ulcorner;":                 '\U0000231C',
-       "ulcrop;":                   '\U0000230F',
-       "ultri;":                    '\U000025F8',
-       "umacr;":                    '\U0000016B',
-       "uml;":                      '\U000000A8',
-       "uogon;":                    '\U00000173',
-       "uopf;":                     '\U0001D566',
-       "uparrow;":                  '\U00002191',
-       "updownarrow;":              '\U00002195',
-       "upharpoonleft;":            '\U000021BF',
-       "upharpoonright;":           '\U000021BE',
-       "uplus;":                    '\U0000228E',
-       "upsi;":                     '\U000003C5',
-       "upsih;":                    '\U000003D2',
-       "upsilon;":                  '\U000003C5',
-       "upuparrows;":               '\U000021C8',
-       "urcorn;":                   '\U0000231D',
-       "urcorner;":                 '\U0000231D',
-       "urcrop;":                   '\U0000230E',
-       "uring;":                    '\U0000016F',
-       "urtri;":                    '\U000025F9',
-       "uscr;":                     '\U0001D4CA',
-       "utdot;":                    '\U000022F0',
-       "utilde;":                   '\U00000169',
-       "utri;":                     '\U000025B5',
-       "utrif;":                    '\U000025B4',
-       "uuarr;":                    '\U000021C8',
-       "uuml;":                     '\U000000FC',
-       "uwangle;":                  '\U000029A7',
-       "vArr;":                     '\U000021D5',
-       "vBar;":                     '\U00002AE8',
-       "vBarv;":                    '\U00002AE9',
-       "vDash;":                    '\U000022A8',
-       "vangrt;":                   '\U0000299C',
-       "varepsilon;":               '\U000003F5',
-       "varkappa;":                 '\U000003F0',
-       "varnothing;":               '\U00002205',
-       "varphi;":                   '\U000003D5',
-       "varpi;":                    '\U000003D6',
-       "varpropto;":                '\U0000221D',
-       "varr;":                     '\U00002195',
-       "varrho;":                   '\U000003F1',
-       "varsigma;":                 '\U000003C2',
-       "vartheta;":                 '\U000003D1',
-       "vartriangleleft;":          '\U000022B2',
-       "vartriangleright;":         '\U000022B3',
-       "vcy;":                      '\U00000432',
-       "vdash;":                    '\U000022A2',
-       "vee;":                      '\U00002228',
-       "veebar;":                   '\U000022BB',
-       "veeeq;":                    '\U0000225A',
-       "vellip;":                   '\U000022EE',
-       "verbar;":                   '\U0000007C',
-       "vert;":                     '\U0000007C',
-       "vfr;":                      '\U0001D533',
-       "vltri;":                    '\U000022B2',
-       "vopf;":                     '\U0001D567',
-       "vprop;":                    '\U0000221D',
-       "vrtri;":                    '\U000022B3',
-       "vscr;":                     '\U0001D4CB',
-       "vzigzag;":                  '\U0000299A',
-       "wcirc;":                    '\U00000175',
-       "wedbar;":                   '\U00002A5F',
-       "wedge;":                    '\U00002227',
-       "wedgeq;":                   '\U00002259',
-       "weierp;":                   '\U00002118',
-       "wfr;":                      '\U0001D534',
-       "wopf;":                     '\U0001D568',
-       "wp;":                       '\U00002118',
-       "wr;":                       '\U00002240',
-       "wreath;":                   '\U00002240',
-       "wscr;":                     '\U0001D4CC',
-       "xcap;":                     '\U000022C2',
-       "xcirc;":                    '\U000025EF',
-       "xcup;":                     '\U000022C3',
-       "xdtri;":                    '\U000025BD',
-       "xfr;":                      '\U0001D535',
-       "xhArr;":                    '\U000027FA',
-       "xharr;":                    '\U000027F7',
-       "xi;":                       '\U000003BE',
-       "xlArr;":                    '\U000027F8',
-       "xlarr;":                    '\U000027F5',
-       "xmap;":                     '\U000027FC',
-       "xnis;":                     '\U000022FB',
-       "xodot;":                    '\U00002A00',
-       "xopf;":                     '\U0001D569',
-       "xoplus;":                   '\U00002A01',
-       "xotime;":                   '\U00002A02',
-       "xrArr;":                    '\U000027F9',
-       "xrarr;":                    '\U000027F6',
-       "xscr;":                     '\U0001D4CD',
-       "xsqcup;":                   '\U00002A06',
-       "xuplus;":                   '\U00002A04',
-       "xutri;":                    '\U000025B3',
-       "xvee;":                     '\U000022C1',
-       "xwedge;":                   '\U000022C0',
-       "yacute;":                   '\U000000FD',
-       "yacy;":                     '\U0000044F',
-       "ycirc;":                    '\U00000177',
-       "ycy;":                      '\U0000044B',
-       "yen;":                      '\U000000A5',
-       "yfr;":                      '\U0001D536',
-       "yicy;":                     '\U00000457',
-       "yopf;":                     '\U0001D56A',
-       "yscr;":                     '\U0001D4CE',
-       "yucy;":                     '\U0000044E',
-       "yuml;":                     '\U000000FF',
-       "zacute;":                   '\U0000017A',
-       "zcaron;":                   '\U0000017E',
-       "zcy;":                      '\U00000437',
-       "zdot;":                     '\U0000017C',
-       "zeetrf;":                   '\U00002128',
-       "zeta;":                     '\U000003B6',
-       "zfr;":                      '\U0001D537',
-       "zhcy;":                     '\U00000436',
-       "zigrarr;":                  '\U000021DD',
-       "zopf;":                     '\U0001D56B',
-       "zscr;":                     '\U0001D4CF',
-       "zwj;":                      '\U0000200D',
-       "zwnj;":                     '\U0000200C',
-       "AElig":                     '\U000000C6',
-       "AMP":                       '\U00000026',
-       "Aacute":                    '\U000000C1',
-       "Acirc":                     '\U000000C2',
-       "Agrave":                    '\U000000C0',
-       "Aring":                     '\U000000C5',
-       "Atilde":                    '\U000000C3',
-       "Auml":                      '\U000000C4',
-       "COPY":                      '\U000000A9',
-       "Ccedil":                    '\U000000C7',
-       "ETH":                       '\U000000D0',
-       "Eacute":                    '\U000000C9',
-       "Ecirc":                     '\U000000CA',
-       "Egrave":                    '\U000000C8',
-       "Euml":                      '\U000000CB',
-       "GT":                        '\U0000003E',
-       "Iacute":                    '\U000000CD',
-       "Icirc":                     '\U000000CE',
-       "Igrave":                    '\U000000CC',
-       "Iuml":                      '\U000000CF',
-       "LT":                        '\U0000003C',
-       "Ntilde":                    '\U000000D1',
-       "Oacute":                    '\U000000D3',
-       "Ocirc":                     '\U000000D4',
-       "Ograve":                    '\U000000D2',
-       "Oslash":                    '\U000000D8',
-       "Otilde":                    '\U000000D5',
-       "Ouml":                      '\U000000D6',
-       "QUOT":                      '\U00000022',
-       "REG":                       '\U000000AE',
-       "THORN":                     '\U000000DE',
-       "Uacute":                    '\U000000DA',
-       "Ucirc":                     '\U000000DB',
-       "Ugrave":                    '\U000000D9',
-       "Uuml":                      '\U000000DC',
-       "Yacute":                    '\U000000DD',
-       "aacute":                    '\U000000E1',
-       "acirc":                     '\U000000E2',
-       "acute":                     '\U000000B4',
-       "aelig":                     '\U000000E6',
-       "agrave":                    '\U000000E0',
-       "amp":                       '\U00000026',
-       "aring":                     '\U000000E5',
-       "atilde":                    '\U000000E3',
-       "auml":                      '\U000000E4',
-       "brvbar":                    '\U000000A6',
-       "ccedil":                    '\U000000E7',
-       "cedil":                     '\U000000B8',
-       "cent":                      '\U000000A2',
-       "copy":                      '\U000000A9',
-       "curren":                    '\U000000A4',
-       "deg":                       '\U000000B0',
-       "divide":                    '\U000000F7',
-       "eacute":                    '\U000000E9',
-       "ecirc":                     '\U000000EA',
-       "egrave":                    '\U000000E8',
-       "eth":                       '\U000000F0',
-       "euml":                      '\U000000EB',
-       "frac12":                    '\U000000BD',
-       "frac14":                    '\U000000BC',
-       "frac34":                    '\U000000BE',
-       "gt":                        '\U0000003E',
-       "iacute":                    '\U000000ED',
-       "icirc":                     '\U000000EE',
-       "iexcl":                     '\U000000A1',
-       "igrave":                    '\U000000EC',
-       "iquest":                    '\U000000BF',
-       "iuml":                      '\U000000EF',
-       "laquo":                     '\U000000AB',
-       "lt":                        '\U0000003C',
-       "macr":                      '\U000000AF',
-       "micro":                     '\U000000B5',
-       "middot":                    '\U000000B7',
-       "nbsp":                      '\U000000A0',
-       "not":                       '\U000000AC',
-       "ntilde":                    '\U000000F1',
-       "oacute":                    '\U000000F3',
-       "ocirc":                     '\U000000F4',
-       "ograve":                    '\U000000F2',
-       "ordf":                      '\U000000AA',
-       "ordm":                      '\U000000BA',
-       "oslash":                    '\U000000F8',
-       "otilde":                    '\U000000F5',
-       "ouml":                      '\U000000F6',
-       "para":                      '\U000000B6',
-       "plusmn":                    '\U000000B1',
-       "pound":                     '\U000000A3',
-       "quot":                      '\U00000022',
-       "raquo":                     '\U000000BB',
-       "reg":                       '\U000000AE',
-       "sect":                      '\U000000A7',
-       "shy":                       '\U000000AD',
-       "sup1":                      '\U000000B9',
-       "sup2":                      '\U000000B2',
-       "sup3":                      '\U000000B3',
-       "szlig":                     '\U000000DF',
-       "thorn":                     '\U000000FE',
-       "times":                     '\U000000D7',
-       "uacute":                    '\U000000FA',
-       "ucirc":                     '\U000000FB',
-       "ugrave":                    '\U000000F9',
-       "uml":                       '\U000000A8',
-       "uuml":                      '\U000000FC',
-       "yacute":                    '\U000000FD',
-       "yen":                       '\U000000A5',
-       "yuml":                      '\U000000FF',
+       "Cross;":                           '\U00002A2F',
+       "Cscr;":                            '\U0001D49E',
+       "Cup;":                             '\U000022D3',
+       "CupCap;":                          '\U0000224D',
+       "DD;":                              '\U00002145',
+       "DDotrahd;":                        '\U00002911',
+       "DJcy;":                            '\U00000402',
+       "DScy;":                            '\U00000405',
+       "DZcy;":                            '\U0000040F',
+       "Dagger;":                          '\U00002021',
+       "Darr;":                            '\U000021A1',
+       "Dashv;":                           '\U00002AE4',
+       "Dcaron;":                          '\U0000010E',
+       "Dcy;":                             '\U00000414',
+       "Del;":                             '\U00002207',
+       "Delta;":                           '\U00000394',
+       "Dfr;":                             '\U0001D507',
+       "DiacriticalAcute;":                '\U000000B4',
+       "DiacriticalDot;":                  '\U000002D9',
+       "DiacriticalDoubleAcute;":          '\U000002DD',
+       "DiacriticalGrave;":                '\U00000060',
+       "DiacriticalTilde;":                '\U000002DC',
+       "Diamond;":                         '\U000022C4',
+       "DifferentialD;":                   '\U00002146',
+       "Dopf;":                            '\U0001D53B',
+       "Dot;":                             '\U000000A8',
+       "DotDot;":                          '\U000020DC',
+       "DotEqual;":                        '\U00002250',
+       "DoubleContourIntegral;":           '\U0000222F',
+       "DoubleDot;":                       '\U000000A8',
+       "DoubleDownArrow;":                 '\U000021D3',
+       "DoubleLeftArrow;":                 '\U000021D0',
+       "DoubleLeftRightArrow;":            '\U000021D4',
+       "DoubleLeftTee;":                   '\U00002AE4',
+       "DoubleLongLeftArrow;":             '\U000027F8',
+       "DoubleLongLeftRightArrow;":        '\U000027FA',
+       "DoubleLongRightArrow;":            '\U000027F9',
+       "DoubleRightArrow;":                '\U000021D2',
+       "DoubleRightTee;":                  '\U000022A8',
+       "DoubleUpArrow;":                   '\U000021D1',
+       "DoubleUpDownArrow;":               '\U000021D5',
+       "DoubleVerticalBar;":               '\U00002225',
+       "DownArrow;":                       '\U00002193',
+       "DownArrowBar;":                    '\U00002913',
+       "DownArrowUpArrow;":                '\U000021F5',
+       "DownBreve;":                       '\U00000311',
+       "DownLeftRightVector;":             '\U00002950',
+       "DownLeftTeeVector;":               '\U0000295E',
+       "DownLeftVector;":                  '\U000021BD',
+       "DownLeftVectorBar;":               '\U00002956',
+       "DownRightTeeVector;":              '\U0000295F',
+       "DownRightVector;":                 '\U000021C1',
+       "DownRightVectorBar;":              '\U00002957',
+       "DownTee;":                         '\U000022A4',
+       "DownTeeArrow;":                    '\U000021A7',
+       "Downarrow;":                       '\U000021D3',
+       "Dscr;":                            '\U0001D49F',
+       "Dstrok;":                          '\U00000110',
+       "ENG;":                             '\U0000014A',
+       "ETH;":                             '\U000000D0',
+       "Eacute;":                          '\U000000C9',
+       "Ecaron;":                          '\U0000011A',
+       "Ecirc;":                           '\U000000CA',
+       "Ecy;":                             '\U0000042D',
+       "Edot;":                            '\U00000116',
+       "Efr;":                             '\U0001D508',
+       "Egrave;":                          '\U000000C8',
+       "Element;":                         '\U00002208',
+       "Emacr;":                           '\U00000112',
+       "EmptySmallSquare;":                '\U000025FB',
+       "EmptyVerySmallSquare;":            '\U000025AB',
+       "Eogon;":                           '\U00000118',
+       "Eopf;":                            '\U0001D53C',
+       "Epsilon;":                         '\U00000395',
+       "Equal;":                           '\U00002A75',
+       "EqualTilde;":                      '\U00002242',
+       "Equilibrium;":                     '\U000021CC',
+       "Escr;":                            '\U00002130',
+       "Esim;":                            '\U00002A73',
+       "Eta;":                             '\U00000397',
+       "Euml;":                            '\U000000CB',
+       "Exists;":                          '\U00002203',
+       "ExponentialE;":                    '\U00002147',
+       "Fcy;":                             '\U00000424',
+       "Ffr;":                             '\U0001D509',
+       "FilledSmallSquare;":               '\U000025FC',
+       "FilledVerySmallSquare;":           '\U000025AA',
+       "Fopf;":                            '\U0001D53D',
+       "ForAll;":                          '\U00002200',
+       "Fouriertrf;":                      '\U00002131',
+       "Fscr;":                            '\U00002131',
+       "GJcy;":                            '\U00000403',
+       "GT;":                              '\U0000003E',
+       "Gamma;":                           '\U00000393',
+       "Gammad;":                          '\U000003DC',
+       "Gbreve;":                          '\U0000011E',
+       "Gcedil;":                          '\U00000122',
+       "Gcirc;":                           '\U0000011C',
+       "Gcy;":                             '\U00000413',
+       "Gdot;":                            '\U00000120',
+       "Gfr;":                             '\U0001D50A',
+       "Gg;":                              '\U000022D9',
+       "Gopf;":                            '\U0001D53E',
+       "GreaterEqual;":                    '\U00002265',
+       "GreaterEqualLess;":                '\U000022DB',
+       "GreaterFullEqual;":                '\U00002267',
+       "GreaterGreater;":                  '\U00002AA2',
+       "GreaterLess;":                     '\U00002277',
+       "GreaterSlantEqual;":               '\U00002A7E',
+       "GreaterTilde;":                    '\U00002273',
+       "Gscr;":                            '\U0001D4A2',
+       "Gt;":                              '\U0000226B',
+       "HARDcy;":                          '\U0000042A',
+       "Hacek;":                           '\U000002C7',
+       "Hat;":                             '\U0000005E',
+       "Hcirc;":                           '\U00000124',
+       "Hfr;":                             '\U0000210C',
+       "HilbertSpace;":                    '\U0000210B',
+       "Hopf;":                            '\U0000210D',
+       "HorizontalLine;":                  '\U00002500',
+       "Hscr;":                            '\U0000210B',
+       "Hstrok;":                          '\U00000126',
+       "HumpDownHump;":                    '\U0000224E',
+       "HumpEqual;":                       '\U0000224F',
+       "IEcy;":                            '\U00000415',
+       "IJlig;":                           '\U00000132',
+       "IOcy;":                            '\U00000401',
+       "Iacute;":                          '\U000000CD',
+       "Icirc;":                           '\U000000CE',
+       "Icy;":                             '\U00000418',
+       "Idot;":                            '\U00000130',
+       "Ifr;":                             '\U00002111',
+       "Igrave;":                          '\U000000CC',
+       "Im;":                              '\U00002111',
+       "Imacr;":                           '\U0000012A',
+       "ImaginaryI;":                      '\U00002148',
+       "Implies;":                         '\U000021D2',
+       "Int;":                             '\U0000222C',
+       "Integral;":                        '\U0000222B',
+       "Intersection;":                    '\U000022C2',
+       "InvisibleComma;":                  '\U00002063',
+       "InvisibleTimes;":                  '\U00002062',
+       "Iogon;":                           '\U0000012E',
+       "Iopf;":                            '\U0001D540',
+       "Iota;":                            '\U00000399',
+       "Iscr;":                            '\U00002110',
+       "Itilde;":                          '\U00000128',
+       "Iukcy;":                           '\U00000406',
+       "Iuml;":                            '\U000000CF',
+       "Jcirc;":                           '\U00000134',
+       "Jcy;":                             '\U00000419',
+       "Jfr;":                             '\U0001D50D',
+       "Jopf;":                            '\U0001D541',
+       "Jscr;":                            '\U0001D4A5',
+       "Jsercy;":                          '\U00000408',
+       "Jukcy;":                           '\U00000404',
+       "KHcy;":                            '\U00000425',
+       "KJcy;":                            '\U0000040C',
+       "Kappa;":                           '\U0000039A',
+       "Kcedil;":                          '\U00000136',
+       "Kcy;":                             '\U0000041A',
+       "Kfr;":                             '\U0001D50E',
+       "Kopf;":                            '\U0001D542',
+       "Kscr;":                            '\U0001D4A6',
+       "LJcy;":                            '\U00000409',
+       "LT;":                              '\U0000003C',
+       "Lacute;":                          '\U00000139',
+       "Lambda;":                          '\U0000039B',
+       "Lang;":                            '\U000027EA',
+       "Laplacetrf;":                      '\U00002112',
+       "Larr;":                            '\U0000219E',
+       "Lcaron;":                          '\U0000013D',
+       "Lcedil;":                          '\U0000013B',
+       "Lcy;":                             '\U0000041B',
+       "LeftAngleBracket;":                '\U000027E8',
+       "LeftArrow;":                       '\U00002190',
+       "LeftArrowBar;":                    '\U000021E4',
+       "LeftArrowRightArrow;":             '\U000021C6',
+       "LeftCeiling;":                     '\U00002308',
+       "LeftDoubleBracket;":               '\U000027E6',
+       "LeftDownTeeVector;":               '\U00002961',
+       "LeftDownVector;":                  '\U000021C3',
+       "LeftDownVectorBar;":               '\U00002959',
+       "LeftFloor;":                       '\U0000230A',
+       "LeftRightArrow;":                  '\U00002194',
+       "LeftRightVector;":                 '\U0000294E',
+       "LeftTee;":                         '\U000022A3',
+       "LeftTeeArrow;":                    '\U000021A4',
+       "LeftTeeVector;":                   '\U0000295A',
+       "LeftTriangle;":                    '\U000022B2',
+       "LeftTriangleBar;":                 '\U000029CF',
+       "LeftTriangleEqual;":               '\U000022B4',
+       "LeftUpDownVector;":                '\U00002951',
+       "LeftUpTeeVector;":                 '\U00002960',
+       "LeftUpVector;":                    '\U000021BF',
+       "LeftUpVectorBar;":                 '\U00002958',
+       "LeftVector;":                      '\U000021BC',
+       "LeftVectorBar;":                   '\U00002952',
+       "Leftarrow;":                       '\U000021D0',
+       "Leftrightarrow;":                  '\U000021D4',
+       "LessEqualGreater;":                '\U000022DA',
+       "LessFullEqual;":                   '\U00002266',
+       "LessGreater;":                     '\U00002276',
+       "LessLess;":                        '\U00002AA1',
+       "LessSlantEqual;":                  '\U00002A7D',
+       "LessTilde;":                       '\U00002272',
+       "Lfr;":                             '\U0001D50F',
+       "Ll;":                              '\U000022D8',
+       "Lleftarrow;":                      '\U000021DA',
+       "Lmidot;":                          '\U0000013F',
+       "LongLeftArrow;":                   '\U000027F5',
+       "LongLeftRightArrow;":              '\U000027F7',
+       "LongRightArrow;":                  '\U000027F6',
+       "Longleftarrow;":                   '\U000027F8',
+       "Longleftrightarrow;":              '\U000027FA',
+       "Longrightarrow;":                  '\U000027F9',
+       "Lopf;":                            '\U0001D543',
+       "LowerLeftArrow;":                  '\U00002199',
+       "LowerRightArrow;":                 '\U00002198',
+       "Lscr;":                            '\U00002112',
+       "Lsh;":                             '\U000021B0',
+       "Lstrok;":                          '\U00000141',
+       "Lt;":                              '\U0000226A',
+       "Map;":                             '\U00002905',
+       "Mcy;":                             '\U0000041C',
+       "MediumSpace;":                     '\U0000205F',
+       "Mellintrf;":                       '\U00002133',
+       "Mfr;":                             '\U0001D510',
+       "MinusPlus;":                       '\U00002213',
+       "Mopf;":                            '\U0001D544',
+       "Mscr;":                            '\U00002133',
+       "Mu;":                              '\U0000039C',
+       "NJcy;":                            '\U0000040A',
+       "Nacute;":                          '\U00000143',
+       "Ncaron;":                          '\U00000147',
+       "Ncedil;":                          '\U00000145',
+       "Ncy;":                             '\U0000041D',
+       "NegativeMediumSpace;":             '\U0000200B',
+       "NegativeThickSpace;":              '\U0000200B',
+       "NegativeThinSpace;":               '\U0000200B',
+       "NegativeVeryThinSpace;":           '\U0000200B',
+       "NestedGreaterGreater;":            '\U0000226B',
+       "NestedLessLess;":                  '\U0000226A',
+       "NewLine;":                         '\U0000000A',
+       "Nfr;":                             '\U0001D511',
+       "NoBreak;":                         '\U00002060',
+       "NonBreakingSpace;":                '\U000000A0',
+       "Nopf;":                            '\U00002115',
+       "Not;":                             '\U00002AEC',
+       "NotCongruent;":                    '\U00002262',
+       "NotCupCap;":                       '\U0000226D',
+       "NotDoubleVerticalBar;":            '\U00002226',
+       "NotElement;":                      '\U00002209',
+       "NotEqual;":                        '\U00002260',
+       "NotExists;":                       '\U00002204',
+       "NotGreater;":                      '\U0000226F',
+       "NotGreaterEqual;":                 '\U00002271',
+       "NotGreaterLess;":                  '\U00002279',
+       "NotGreaterTilde;":                 '\U00002275',
+       "NotLeftTriangle;":                 '\U000022EA',
+       "NotLeftTriangleEqual;":            '\U000022EC',
+       "NotLess;":                         '\U0000226E',
+       "NotLessEqual;":                    '\U00002270',
+       "NotLessGreater;":                  '\U00002278',
+       "NotLessTilde;":                    '\U00002274',
+       "NotPrecedes;":                     '\U00002280',
+       "NotPrecedesSlantEqual;":           '\U000022E0',
+       "NotReverseElement;":               '\U0000220C',
+       "NotRightTriangle;":                '\U000022EB',
+       "NotRightTriangleEqual;":           '\U000022ED',
+       "NotSquareSubsetEqual;":            '\U000022E2',
+       "NotSquareSupersetEqual;":          '\U000022E3',
+       "NotSubsetEqual;":                  '\U00002288',
+       "NotSucceeds;":                     '\U00002281',
+       "NotSucceedsSlantEqual;":           '\U000022E1',
+       "NotSupersetEqual;":                '\U00002289',
+       "NotTilde;":                        '\U00002241',
+       "NotTildeEqual;":                   '\U00002244',
+       "NotTildeFullEqual;":               '\U00002247',
+       "NotTildeTilde;":                   '\U00002249',
+       "NotVerticalBar;":                  '\U00002224',
+       "Nscr;":                            '\U0001D4A9',
+       "Ntilde;":                          '\U000000D1',
+       "Nu;":                              '\U0000039D',
+       "OElig;":                           '\U00000152',
+       "Oacute;":                          '\U000000D3',
+       "Ocirc;":                           '\U000000D4',
+       "Ocy;":                             '\U0000041E',
+       "Odblac;":                          '\U00000150',
+       "Ofr;":                             '\U0001D512',
+       "Ograve;":                          '\U000000D2',
+       "Omacr;":                           '\U0000014C',
+       "Omega;":                           '\U000003A9',
+       "Omicron;":                         '\U0000039F',
+       "Oopf;":                            '\U0001D546',
+       "OpenCurlyDoubleQuote;":            '\U0000201C',
+       "OpenCurlyQuote;":                  '\U00002018',
+       "Or;":                              '\U00002A54',
+       "Oscr;":                            '\U0001D4AA',
+       "Oslash;":                          '\U000000D8',
+       "Otilde;":                          '\U000000D5',
+       "Otimes;":                          '\U00002A37',
+       "Ouml;":                            '\U000000D6',
+       "OverBar;":                         '\U0000203E',
+       "OverBrace;":                       '\U000023DE',
+       "OverBracket;":                     '\U000023B4',
+       "OverParenthesis;":                 '\U000023DC',
+       "PartialD;":                        '\U00002202',
+       "Pcy;":                             '\U0000041F',
+       "Pfr;":                             '\U0001D513',
+       "Phi;":                             '\U000003A6',
+       "Pi;":                              '\U000003A0',
+       "PlusMinus;":                       '\U000000B1',
+       "Poincareplane;":                   '\U0000210C',
+       "Popf;":                            '\U00002119',
+       "Pr;":                              '\U00002ABB',
+       "Precedes;":                        '\U0000227A',
+       "PrecedesEqual;":                   '\U00002AAF',
+       "PrecedesSlantEqual;":              '\U0000227C',
+       "PrecedesTilde;":                   '\U0000227E',
+       "Prime;":                           '\U00002033',
+       "Product;":                         '\U0000220F',
+       "Proportion;":                      '\U00002237',
+       "Proportional;":                    '\U0000221D',
+       "Pscr;":                            '\U0001D4AB',
+       "Psi;":                             '\U000003A8',
+       "QUOT;":                            '\U00000022',
+       "Qfr;":                             '\U0001D514',
+       "Qopf;":                            '\U0000211A',
+       "Qscr;":                            '\U0001D4AC',
+       "RBarr;":                           '\U00002910',
+       "REG;":                             '\U000000AE',
+       "Racute;":                          '\U00000154',
+       "Rang;":                            '\U000027EB',
+       "Rarr;":                            '\U000021A0',
+       "Rarrtl;":                          '\U00002916',
+       "Rcaron;":                          '\U00000158',
+       "Rcedil;":                          '\U00000156',
+       "Rcy;":                             '\U00000420',
+       "Re;":                              '\U0000211C',
+       "ReverseElement;":                  '\U0000220B',
+       "ReverseEquilibrium;":              '\U000021CB',
+       "ReverseUpEquilibrium;":            '\U0000296F',
+       "Rfr;":                             '\U0000211C',
+       "Rho;":                             '\U000003A1',
+       "RightAngleBracket;":               '\U000027E9',
+       "RightArrow;":                      '\U00002192',
+       "RightArrowBar;":                   '\U000021E5',
+       "RightArrowLeftArrow;":             '\U000021C4',
+       "RightCeiling;":                    '\U00002309',
+       "RightDoubleBracket;":              '\U000027E7',
+       "RightDownTeeVector;":              '\U0000295D',
+       "RightDownVector;":                 '\U000021C2',
+       "RightDownVectorBar;":              '\U00002955',
+       "RightFloor;":                      '\U0000230B',
+       "RightTee;":                        '\U000022A2',
+       "RightTeeArrow;":                   '\U000021A6',
+       "RightTeeVector;":                  '\U0000295B',
+       "RightTriangle;":                   '\U000022B3',
+       "RightTriangleBar;":                '\U000029D0',
+       "RightTriangleEqual;":              '\U000022B5',
+       "RightUpDownVector;":               '\U0000294F',
+       "RightUpTeeVector;":                '\U0000295C',
+       "RightUpVector;":                   '\U000021BE',
+       "RightUpVectorBar;":                '\U00002954',
+       "RightVector;":                     '\U000021C0',
+       "RightVectorBar;":                  '\U00002953',
+       "Rightarrow;":                      '\U000021D2',
+       "Ropf;":                            '\U0000211D',
+       "RoundImplies;":                    '\U00002970',
+       "Rrightarrow;":                     '\U000021DB',
+       "Rscr;":                            '\U0000211B',
+       "Rsh;":                             '\U000021B1',
+       "RuleDelayed;":                     '\U000029F4',
+       "SHCHcy;":                          '\U00000429',
+       "SHcy;":                            '\U00000428',
+       "SOFTcy;":                          '\U0000042C',
+       "Sacute;":                          '\U0000015A',
+       "Sc;":                              '\U00002ABC',
+       "Scaron;":                          '\U00000160',
+       "Scedil;":                          '\U0000015E',
+       "Scirc;":                           '\U0000015C',
+       "Scy;":                             '\U00000421',
+       "Sfr;":                             '\U0001D516',
+       "ShortDownArrow;":                  '\U00002193',
+       "ShortLeftArrow;":                  '\U00002190',
+       "ShortRightArrow;":                 '\U00002192',
+       "ShortUpArrow;":                    '\U00002191',
+       "Sigma;":                           '\U000003A3',
+       "SmallCircle;":                     '\U00002218',
+       "Sopf;":                            '\U0001D54A',
+       "Sqrt;":                            '\U0000221A',
+       "Square;":                          '\U000025A1',
+       "SquareIntersection;":              '\U00002293',
+       "SquareSubset;":                    '\U0000228F',
+       "SquareSubsetEqual;":               '\U00002291',
+       "SquareSuperset;":                  '\U00002290',
+       "SquareSupersetEqual;":             '\U00002292',
+       "SquareUnion;":                     '\U00002294',
+       "Sscr;":                            '\U0001D4AE',
+       "Star;":                            '\U000022C6',
+       "Sub;":                             '\U000022D0',
+       "Subset;":                          '\U000022D0',
+       "SubsetEqual;":                     '\U00002286',
+       "Succeeds;":                        '\U0000227B',
+       "SucceedsEqual;":                   '\U00002AB0',
+       "SucceedsSlantEqual;":              '\U0000227D',
+       "SucceedsTilde;":                   '\U0000227F',
+       "SuchThat;":                        '\U0000220B',
+       "Sum;":                             '\U00002211',
+       "Sup;":                             '\U000022D1',
+       "Superset;":                        '\U00002283',
+       "SupersetEqual;":                   '\U00002287',
+       "Supset;":                          '\U000022D1',
+       "THORN;":                           '\U000000DE',
+       "TRADE;":                           '\U00002122',
+       "TSHcy;":                           '\U0000040B',
+       "TScy;":                            '\U00000426',
+       "Tab;":                             '\U00000009',
+       "Tau;":                             '\U000003A4',
+       "Tcaron;":                          '\U00000164',
+       "Tcedil;":                          '\U00000162',
+       "Tcy;":                             '\U00000422',
+       "Tfr;":                             '\U0001D517',
+       "Therefore;":                       '\U00002234',
+       "Theta;":                           '\U00000398',
+       "ThinSpace;":                       '\U00002009',
+       "Tilde;":                           '\U0000223C',
+       "TildeEqual;":                      '\U00002243',
+       "TildeFullEqual;":                  '\U00002245',
+       "TildeTilde;":                      '\U00002248',
+       "Topf;":                            '\U0001D54B',
+       "TripleDot;":                       '\U000020DB',
+       "Tscr;":                            '\U0001D4AF',
+       "Tstrok;":                          '\U00000166',
+       "Uacute;":                          '\U000000DA',
+       "Uarr;":                            '\U0000219F',
+       "Uarrocir;":                        '\U00002949',
+       "Ubrcy;":                           '\U0000040E',
+       "Ubreve;":                          '\U0000016C',
+       "Ucirc;":                           '\U000000DB',
+       "Ucy;":                             '\U00000423',
+       "Udblac;":                          '\U00000170',
+       "Ufr;":                             '\U0001D518',
+       "Ugrave;":                          '\U000000D9',
+       "Umacr;":                           '\U0000016A',
+       "UnderBar;":                        '\U0000005F',
+       "UnderBrace;":                      '\U000023DF',
+       "UnderBracket;":                    '\U000023B5',
+       "UnderParenthesis;":                '\U000023DD',
+       "Union;":                           '\U000022C3',
+       "UnionPlus;":                       '\U0000228E',
+       "Uogon;":                           '\U00000172',
+       "Uopf;":                            '\U0001D54C',
+       "UpArrow;":                         '\U00002191',
+       "UpArrowBar;":                      '\U00002912',
+       "UpArrowDownArrow;":                '\U000021C5',
+       "UpDownArrow;":                     '\U00002195',
+       "UpEquilibrium;":                   '\U0000296E',
+       "UpTee;":                           '\U000022A5',
+       "UpTeeArrow;":                      '\U000021A5',
+       "Uparrow;":                         '\U000021D1',
+       "Updownarrow;":                     '\U000021D5',
+       "UpperLeftArrow;":                  '\U00002196',
+       "UpperRightArrow;":                 '\U00002197',
+       "Upsi;":                            '\U000003D2',
+       "Upsilon;":                         '\U000003A5',
+       "Uring;":                           '\U0000016E',
+       "Uscr;":                            '\U0001D4B0',
+       "Utilde;":                          '\U00000168',
+       "Uuml;":                            '\U000000DC',
+       "VDash;":                           '\U000022AB',
+       "Vbar;":                            '\U00002AEB',
+       "Vcy;":                             '\U00000412',
+       "Vdash;":                           '\U000022A9',
+       "Vdashl;":                          '\U00002AE6',
+       "Vee;":                             '\U000022C1',
+       "Verbar;":                          '\U00002016',
+       "Vert;":                            '\U00002016',
+       "VerticalBar;":                     '\U00002223',
+       "VerticalLine;":                    '\U0000007C',
+       "VerticalSeparator;":               '\U00002758',
+       "VerticalTilde;":                   '\U00002240',
+       "VeryThinSpace;":                   '\U0000200A',
+       "Vfr;":                             '\U0001D519',
+       "Vopf;":                            '\U0001D54D',
+       "Vscr;":                            '\U0001D4B1',
+       "Vvdash;":                          '\U000022AA',
+       "Wcirc;":                           '\U00000174',
+       "Wedge;":                           '\U000022C0',
+       "Wfr;":                             '\U0001D51A',
+       "Wopf;":                            '\U0001D54E',
+       "Wscr;":                            '\U0001D4B2',
+       "Xfr;":                             '\U0001D51B',
+       "Xi;":                              '\U0000039E',
+       "Xopf;":                            '\U0001D54F',
+       "Xscr;":                            '\U0001D4B3',
+       "YAcy;":                            '\U0000042F',
+       "YIcy;":                            '\U00000407',
+       "YUcy;":                            '\U0000042E',
+       "Yacute;":                          '\U000000DD',
+       "Ycirc;":                           '\U00000176',
+       "Ycy;":                             '\U0000042B',
+       "Yfr;":                             '\U0001D51C',
+       "Yopf;":                            '\U0001D550',
+       "Yscr;":                            '\U0001D4B4',
+       "Yuml;":                            '\U00000178',
+       "ZHcy;":                            '\U00000416',
+       "Zacute;":                          '\U00000179',
+       "Zcaron;":                          '\U0000017D',
+       "Zcy;":                             '\U00000417',
+       "Zdot;":                            '\U0000017B',
+       "ZeroWidthSpace;":                  '\U0000200B',
+       "Zeta;":                            '\U00000396',
+       "Zfr;":                             '\U00002128',
+       "Zopf;":                            '\U00002124',
+       "Zscr;":                            '\U0001D4B5',
+       "aacute;":                          '\U000000E1',
+       "abreve;":                          '\U00000103',
+       "ac;":                              '\U0000223E',
+       "acd;":                             '\U0000223F',
+       "acirc;":                           '\U000000E2',
+       "acute;":                           '\U000000B4',
+       "acy;":                             '\U00000430',
+       "aelig;":                           '\U000000E6',
+       "af;":                              '\U00002061',
+       "afr;":                             '\U0001D51E',
+       "agrave;":                          '\U000000E0',
+       "alefsym;":                         '\U00002135',
+       "aleph;":                           '\U00002135',
+       "alpha;":                           '\U000003B1',
+       "amacr;":                           '\U00000101',
+       "amalg;":                           '\U00002A3F',
+       "amp;":                             '\U00000026',
+       "and;":                             '\U00002227',
+       "andand;":                          '\U00002A55',
+       "andd;":                            '\U00002A5C',
+       "andslope;":                        '\U00002A58',
+       "andv;":                            '\U00002A5A',
+       "ang;":                             '\U00002220',
+       "ange;":                            '\U000029A4',
+       "angle;":                           '\U00002220',
+       "angmsd;":                          '\U00002221',
+       "angmsdaa;":                        '\U000029A8',
+       "angmsdab;":                        '\U000029A9',
+       "angmsdac;":                        '\U000029AA',
+       "angmsdad;":                        '\U000029AB',
+       "angmsdae;":                        '\U000029AC',
+       "angmsdaf;":                        '\U000029AD',
+       "angmsdag;":                        '\U000029AE',
+       "angmsdah;":                        '\U000029AF',
+       "angrt;":                           '\U0000221F',
+       "angrtvb;":                         '\U000022BE',
+       "angrtvbd;":                        '\U0000299D',
+       "angsph;":                          '\U00002222',
+       "angst;":                           '\U000000C5',
+       "angzarr;":                         '\U0000237C',
+       "aogon;":                           '\U00000105',
+       "aopf;":                            '\U0001D552',
+       "ap;":                              '\U00002248',
+       "apE;":                             '\U00002A70',
+       "apacir;":                          '\U00002A6F',
+       "ape;":                             '\U0000224A',
+       "apid;":                            '\U0000224B',
+       "apos;":                            '\U00000027',
+       "approx;":                          '\U00002248',
+       "approxeq;":                        '\U0000224A',
+       "aring;":                           '\U000000E5',
+       "ascr;":                            '\U0001D4B6',
+       "ast;":                             '\U0000002A',
+       "asymp;":                           '\U00002248',
+       "asympeq;":                         '\U0000224D',
+       "atilde;":                          '\U000000E3',
+       "auml;":                            '\U000000E4',
+       "awconint;":                        '\U00002233',
+       "awint;":                           '\U00002A11',
+       "bNot;":                            '\U00002AED',
+       "backcong;":                        '\U0000224C',
+       "backepsilon;":                     '\U000003F6',
+       "backprime;":                       '\U00002035',
+       "backsim;":                         '\U0000223D',
+       "backsimeq;":                       '\U000022CD',
+       "barvee;":                          '\U000022BD',
+       "barwed;":                          '\U00002305',
+       "barwedge;":                        '\U00002305',
+       "bbrk;":                            '\U000023B5',
+       "bbrktbrk;":                        '\U000023B6',
+       "bcong;":                           '\U0000224C',
+       "bcy;":                             '\U00000431',
+       "bdquo;":                           '\U0000201E',
+       "becaus;":                          '\U00002235',
+       "because;":                         '\U00002235',
+       "bemptyv;":                         '\U000029B0',
+       "bepsi;":                           '\U000003F6',
+       "bernou;":                          '\U0000212C',
+       "beta;":                            '\U000003B2',
+       "beth;":                            '\U00002136',
+       "between;":                         '\U0000226C',
+       "bfr;":                             '\U0001D51F',
+       "bigcap;":                          '\U000022C2',
+       "bigcirc;":                         '\U000025EF',
+       "bigcup;":                          '\U000022C3',
+       "bigodot;":                         '\U00002A00',
+       "bigoplus;":                        '\U00002A01',
+       "bigotimes;":                       '\U00002A02',
+       "bigsqcup;":                        '\U00002A06',
+       "bigstar;":                         '\U00002605',
+       "bigtriangledown;":                 '\U000025BD',
+       "bigtriangleup;":                   '\U000025B3',
+       "biguplus;":                        '\U00002A04',
+       "bigvee;":                          '\U000022C1',
+       "bigwedge;":                        '\U000022C0',
+       "bkarow;":                          '\U0000290D',
+       "blacklozenge;":                    '\U000029EB',
+       "blacksquare;":                     '\U000025AA',
+       "blacktriangle;":                   '\U000025B4',
+       "blacktriangledown;":               '\U000025BE',
+       "blacktriangleleft;":               '\U000025C2',
+       "blacktriangleright;":              '\U000025B8',
+       "blank;":                           '\U00002423',
+       "blk12;":                           '\U00002592',
+       "blk14;":                           '\U00002591',
+       "blk34;":                           '\U00002593',
+       "block;":                           '\U00002588',
+       "bnot;":                            '\U00002310',
+       "bopf;":                            '\U0001D553',
+       "bot;":                             '\U000022A5',
+       "bottom;":                          '\U000022A5',
+       "bowtie;":                          '\U000022C8',
+       "boxDL;":                           '\U00002557',
+       "boxDR;":                           '\U00002554',
+       "boxDl;":                           '\U00002556',
+       "boxDr;":                           '\U00002553',
+       "boxH;":                            '\U00002550',
+       "boxHD;":                           '\U00002566',
+       "boxHU;":                           '\U00002569',
+       "boxHd;":                           '\U00002564',
+       "boxHu;":                           '\U00002567',
+       "boxUL;":                           '\U0000255D',
+       "boxUR;":                           '\U0000255A',
+       "boxUl;":                           '\U0000255C',
+       "boxUr;":                           '\U00002559',
+       "boxV;":                            '\U00002551',
+       "boxVH;":                           '\U0000256C',
+       "boxVL;":                           '\U00002563',
+       "boxVR;":                           '\U00002560',
+       "boxVh;":                           '\U0000256B',
+       "boxVl;":                           '\U00002562',
+       "boxVr;":                           '\U0000255F',
+       "boxbox;":                          '\U000029C9',
+       "boxdL;":                           '\U00002555',
+       "boxdR;":                           '\U00002552',
+       "boxdl;":                           '\U00002510',
+       "boxdr;":                           '\U0000250C',
+       "boxh;":                            '\U00002500',
+       "boxhD;":                           '\U00002565',
+       "boxhU;":                           '\U00002568',
+       "boxhd;":                           '\U0000252C',
+       "boxhu;":                           '\U00002534',
+       "boxminus;":                        '\U0000229F',
+       "boxplus;":                         '\U0000229E',
+       "boxtimes;":                        '\U000022A0',
+       "boxuL;":                           '\U0000255B',
+       "boxuR;":                           '\U00002558',
+       "boxul;":                           '\U00002518',
+       "boxur;":                           '\U00002514',
+       "boxv;":                            '\U00002502',
+       "boxvH;":                           '\U0000256A',
+       "boxvL;":                           '\U00002561',
+       "boxvR;":                           '\U0000255E',
+       "boxvh;":                           '\U0000253C',
+       "boxvl;":                           '\U00002524',
+       "boxvr;":                           '\U0000251C',
+       "bprime;":                          '\U00002035',
+       "breve;":                           '\U000002D8',
+       "brvbar;":                          '\U000000A6',
+       "bscr;":                            '\U0001D4B7',
+       "bsemi;":                           '\U0000204F',
+       "bsim;":                            '\U0000223D',
+       "bsime;":                           '\U000022CD',
+       "bsol;":                            '\U0000005C',
+       "bsolb;":                           '\U000029C5',
+       "bsolhsub;":                        '\U000027C8',
+       "bull;":                            '\U00002022',
+       "bullet;":                          '\U00002022',
+       "bump;":                            '\U0000224E',
+       "bumpE;":                           '\U00002AAE',
+       "bumpe;":                           '\U0000224F',
+       "bumpeq;":                          '\U0000224F',
+       "cacute;":                          '\U00000107',
+       "cap;":                             '\U00002229',
+       "capand;":                          '\U00002A44',
+       "capbrcup;":                        '\U00002A49',
+       "capcap;":                          '\U00002A4B',
+       "capcup;":                          '\U00002A47',
+       "capdot;":                          '\U00002A40',
+       "caret;":                           '\U00002041',
+       "caron;":                           '\U000002C7',
+       "ccaps;":                           '\U00002A4D',
+       "ccaron;":                          '\U0000010D',
+       "ccedil;":                          '\U000000E7',
+       "ccirc;":                           '\U00000109',
+       "ccups;":                           '\U00002A4C',
+       "ccupssm;":                         '\U00002A50',
+       "cdot;":                            '\U0000010B',
+       "cedil;":                           '\U000000B8',
+       "cemptyv;":                         '\U000029B2',
+       "cent;":                            '\U000000A2',
+       "centerdot;":                       '\U000000B7',
+       "cfr;":                             '\U0001D520',
+       "chcy;":                            '\U00000447',
+       "check;":                           '\U00002713',
+       "checkmark;":                       '\U00002713',
+       "chi;":                             '\U000003C7',
+       "cir;":                             '\U000025CB',
+       "cirE;":                            '\U000029C3',
+       "circ;":                            '\U000002C6',
+       "circeq;":                          '\U00002257',
+       "circlearrowleft;":                 '\U000021BA',
+       "circlearrowright;":                '\U000021BB',
+       "circledR;":                        '\U000000AE',
+       "circledS;":                        '\U000024C8',
+       "circledast;":                      '\U0000229B',
+       "circledcirc;":                     '\U0000229A',
+       "circleddash;":                     '\U0000229D',
+       "cire;":                            '\U00002257',
+       "cirfnint;":                        '\U00002A10',
+       "cirmid;":                          '\U00002AEF',
+       "cirscir;":                         '\U000029C2',
+       "clubs;":                           '\U00002663',
+       "clubsuit;":                        '\U00002663',
+       "colon;":                           '\U0000003A',
+       "colone;":                          '\U00002254',
+       "coloneq;":                         '\U00002254',
+       "comma;":                           '\U0000002C',
+       "commat;":                          '\U00000040',
+       "comp;":                            '\U00002201',
+       "compfn;":                          '\U00002218',
+       "complement;":                      '\U00002201',
+       "complexes;":                       '\U00002102',
+       "cong;":                            '\U00002245',
+       "congdot;":                         '\U00002A6D',
+       "conint;":                          '\U0000222E',
+       "copf;":                            '\U0001D554',
+       "coprod;":                          '\U00002210',
+       "copy;":                            '\U000000A9',
+       "copysr;":                          '\U00002117',
+       "crarr;":                           '\U000021B5',
+       "cross;":                           '\U00002717',
+       "cscr;":                            '\U0001D4B8',
+       "csub;":                            '\U00002ACF',
+       "csube;":                           '\U00002AD1',
+       "csup;":                            '\U00002AD0',
+       "csupe;":                           '\U00002AD2',
+       "ctdot;":                           '\U000022EF',
+       "cudarrl;":                         '\U00002938',
+       "cudarrr;":                         '\U00002935',
+       "cuepr;":                           '\U000022DE',
+       "cuesc;":                           '\U000022DF',
+       "cularr;":                          '\U000021B6',
+       "cularrp;":                         '\U0000293D',
+       "cup;":                             '\U0000222A',
+       "cupbrcap;":                        '\U00002A48',
+       "cupcap;":                          '\U00002A46',
+       "cupcup;":                          '\U00002A4A',
+       "cupdot;":                          '\U0000228D',
+       "cupor;":                           '\U00002A45',
+       "curarr;":                          '\U000021B7',
+       "curarrm;":                         '\U0000293C',
+       "curlyeqprec;":                     '\U000022DE',
+       "curlyeqsucc;":                     '\U000022DF',
+       "curlyvee;":                        '\U000022CE',
+       "curlywedge;":                      '\U000022CF',
+       "curren;":                          '\U000000A4',
+       "curvearrowleft;":                  '\U000021B6',
+       "curvearrowright;":                 '\U000021B7',
+       "cuvee;":                           '\U000022CE',
+       "cuwed;":                           '\U000022CF',
+       "cwconint;":                        '\U00002232',
+       "cwint;":                           '\U00002231',
+       "cylcty;":                          '\U0000232D',
+       "dArr;":                            '\U000021D3',
+       "dHar;":                            '\U00002965',
+       "dagger;":                          '\U00002020',
+       "daleth;":                          '\U00002138',
+       "darr;":                            '\U00002193',
+       "dash;":                            '\U00002010',
+       "dashv;":                           '\U000022A3',
+       "dbkarow;":                         '\U0000290F',
+       "dblac;":                           '\U000002DD',
+       "dcaron;":                          '\U0000010F',
+       "dcy;":                             '\U00000434',
+       "dd;":                              '\U00002146',
+       "ddagger;":                         '\U00002021',
+       "ddarr;":                           '\U000021CA',
+       "ddotseq;":                         '\U00002A77',
+       "deg;":                             '\U000000B0',
+       "delta;":                           '\U000003B4',
+       "demptyv;":                         '\U000029B1',
+       "dfisht;":                          '\U0000297F',
+       "dfr;":                             '\U0001D521',
+       "dharl;":                           '\U000021C3',
+       "dharr;":                           '\U000021C2',
+       "diam;":                            '\U000022C4',
+       "diamond;":                         '\U000022C4',
+       "diamondsuit;":                     '\U00002666',
+       "diams;":                           '\U00002666',
+       "die;":                             '\U000000A8',
+       "digamma;":                         '\U000003DD',
+       "disin;":                           '\U000022F2',
+       "div;":                             '\U000000F7',
+       "divide;":                          '\U000000F7',
+       "divideontimes;":                   '\U000022C7',
+       "divonx;":                          '\U000022C7',
+       "djcy;":                            '\U00000452',
+       "dlcorn;":                          '\U0000231E',
+       "dlcrop;":                          '\U0000230D',
+       "dollar;":                          '\U00000024',
+       "dopf;":                            '\U0001D555',
+       "dot;":                             '\U000002D9',
+       "doteq;":                           '\U00002250',
+       "doteqdot;":                        '\U00002251',
+       "dotminus;":                        '\U00002238',
+       "dotplus;":                         '\U00002214',
+       "dotsquare;":                       '\U000022A1',
+       "doublebarwedge;":                  '\U00002306',
+       "downarrow;":                       '\U00002193',
+       "downdownarrows;":                  '\U000021CA',
+       "downharpoonleft;":                 '\U000021C3',
+       "downharpoonright;":                '\U000021C2',
+       "drbkarow;":                        '\U00002910',
+       "drcorn;":                          '\U0000231F',
+       "drcrop;":                          '\U0000230C',
+       "dscr;":                            '\U0001D4B9',
+       "dscy;":                            '\U00000455',
+       "dsol;":                            '\U000029F6',
+       "dstrok;":                          '\U00000111',
+       "dtdot;":                           '\U000022F1',
+       "dtri;":                            '\U000025BF',
+       "dtrif;":                           '\U000025BE',
+       "duarr;":                           '\U000021F5',
+       "duhar;":                           '\U0000296F',
+       "dwangle;":                         '\U000029A6',
+       "dzcy;":                            '\U0000045F',
+       "dzigrarr;":                        '\U000027FF',
+       "eDDot;":                           '\U00002A77',
+       "eDot;":                            '\U00002251',
+       "eacute;":                          '\U000000E9',
+       "easter;":                          '\U00002A6E',
+       "ecaron;":                          '\U0000011B',
+       "ecir;":                            '\U00002256',
+       "ecirc;":                           '\U000000EA',
+       "ecolon;":                          '\U00002255',
+       "ecy;":                             '\U0000044D',
+       "edot;":                            '\U00000117',
+       "ee;":                              '\U00002147',
+       "efDot;":                           '\U00002252',
+       "efr;":                             '\U0001D522',
+       "eg;":                              '\U00002A9A',
+       "egrave;":                          '\U000000E8',
+       "egs;":                             '\U00002A96',
+       "egsdot;":                          '\U00002A98',
+       "el;":                              '\U00002A99',
+       "elinters;":                        '\U000023E7',
+       "ell;":                             '\U00002113',
+       "els;":                             '\U00002A95',
+       "elsdot;":                          '\U00002A97',
+       "emacr;":                           '\U00000113',
+       "empty;":                           '\U00002205',
+       "emptyset;":                        '\U00002205',
+       "emptyv;":                          '\U00002205',
+       "emsp;":                            '\U00002003',
+       "emsp13;":                          '\U00002004',
+       "emsp14;":                          '\U00002005',
+       "eng;":                             '\U0000014B',
+       "ensp;":                            '\U00002002',
+       "eogon;":                           '\U00000119',
+       "eopf;":                            '\U0001D556',
+       "epar;":                            '\U000022D5',
+       "eparsl;":                          '\U000029E3',
+       "eplus;":                           '\U00002A71',
+       "epsi;":                            '\U000003B5',
+       "epsilon;":                         '\U000003B5',
+       "epsiv;":                           '\U000003F5',
+       "eqcirc;":                          '\U00002256',
+       "eqcolon;":                         '\U00002255',
+       "eqsim;":                           '\U00002242',
+       "eqslantgtr;":                      '\U00002A96',
+       "eqslantless;":                     '\U00002A95',
+       "equals;":                          '\U0000003D',
+       "equest;":                          '\U0000225F',
+       "equiv;":                           '\U00002261',
+       "equivDD;":                         '\U00002A78',
+       "eqvparsl;":                        '\U000029E5',
+       "erDot;":                           '\U00002253',
+       "erarr;":                           '\U00002971',
+       "escr;":                            '\U0000212F',
+       "esdot;":                           '\U00002250',
+       "esim;":                            '\U00002242',
+       "eta;":                             '\U000003B7',
+       "eth;":                             '\U000000F0',
+       "euml;":                            '\U000000EB',
+       "euro;":                            '\U000020AC',
+       "excl;":                            '\U00000021',
+       "exist;":                           '\U00002203',
+       "expectation;":                     '\U00002130',
+       "exponentiale;":                    '\U00002147',
+       "fallingdotseq;":                   '\U00002252',
+       "fcy;":                             '\U00000444',
+       "female;":                          '\U00002640',
+       "ffilig;":                          '\U0000FB03',
+       "fflig;":                           '\U0000FB00',
+       "ffllig;":                          '\U0000FB04',
+       "ffr;":                             '\U0001D523',
+       "filig;":                           '\U0000FB01',
+       "flat;":                            '\U0000266D',
+       "fllig;":                           '\U0000FB02',
+       "fltns;":                           '\U000025B1',
+       "fnof;":                            '\U00000192',
+       "fopf;":                            '\U0001D557',
+       "forall;":                          '\U00002200',
+       "fork;":                            '\U000022D4',
+       "forkv;":                           '\U00002AD9',
+       "fpartint;":                        '\U00002A0D',
+       "frac12;":                          '\U000000BD',
+       "frac13;":                          '\U00002153',
+       "frac14;":                          '\U000000BC',
+       "frac15;":                          '\U00002155',
+       "frac16;":                          '\U00002159',
+       "frac18;":                          '\U0000215B',
+       "frac23;":                          '\U00002154',
+       "frac25;":                          '\U00002156',
+       "frac34;":                          '\U000000BE',
+       "frac35;":                          '\U00002157',
+       "frac38;":                          '\U0000215C',
+       "frac45;":                          '\U00002158',
+       "frac56;":                          '\U0000215A',
+       "frac58;":                          '\U0000215D',
+       "frac78;":                          '\U0000215E',
+       "frasl;":                           '\U00002044',
+       "frown;":                           '\U00002322',
+       "fscr;":                            '\U0001D4BB',
+       "gE;":                              '\U00002267',
+       "gEl;":                             '\U00002A8C',
+       "gacute;":                          '\U000001F5',
+       "gamma;":                           '\U000003B3',
+       "gammad;":                          '\U000003DD',
+       "gap;":                             '\U00002A86',
+       "gbreve;":                          '\U0000011F',
+       "gcirc;":                           '\U0000011D',
+       "gcy;":                             '\U00000433',
+       "gdot;":                            '\U00000121',
+       "ge;":                              '\U00002265',
+       "gel;":                             '\U000022DB',
+       "geq;":                             '\U00002265',
+       "geqq;":                            '\U00002267',
+       "geqslant;":                        '\U00002A7E',
+       "ges;":                             '\U00002A7E',
+       "gescc;":                           '\U00002AA9',
+       "gesdot;":                          '\U00002A80',
+       "gesdoto;":                         '\U00002A82',
+       "gesdotol;":                        '\U00002A84',
+       "gesles;":                          '\U00002A94',
+       "gfr;":                             '\U0001D524',
+       "gg;":                              '\U0000226B',
+       "ggg;":                             '\U000022D9',
+       "gimel;":                           '\U00002137',
+       "gjcy;":                            '\U00000453',
+       "gl;":                              '\U00002277',
+       "glE;":                             '\U00002A92',
+       "gla;":                             '\U00002AA5',
+       "glj;":                             '\U00002AA4',
+       "gnE;":                             '\U00002269',
+       "gnap;":                            '\U00002A8A',
+       "gnapprox;":                        '\U00002A8A',
+       "gne;":                             '\U00002A88',
+       "gneq;":                            '\U00002A88',
+       "gneqq;":                           '\U00002269',
+       "gnsim;":                           '\U000022E7',
+       "gopf;":                            '\U0001D558',
+       "grave;":                           '\U00000060',
+       "gscr;":                            '\U0000210A',
+       "gsim;":                            '\U00002273',
+       "gsime;":                           '\U00002A8E',
+       "gsiml;":                           '\U00002A90',
+       "gt;":                              '\U0000003E',
+       "gtcc;":                            '\U00002AA7',
+       "gtcir;":                           '\U00002A7A',
+       "gtdot;":                           '\U000022D7',
+       "gtlPar;":                          '\U00002995',
+       "gtquest;":                         '\U00002A7C',
+       "gtrapprox;":                       '\U00002A86',
+       "gtrarr;":                          '\U00002978',
+       "gtrdot;":                          '\U000022D7',
+       "gtreqless;":                       '\U000022DB',
+       "gtreqqless;":                      '\U00002A8C',
+       "gtrless;":                         '\U00002277',
+       "gtrsim;":                          '\U00002273',
+       "hArr;":                            '\U000021D4',
+       "hairsp;":                          '\U0000200A',
+       "half;":                            '\U000000BD',
+       "hamilt;":                          '\U0000210B',
+       "hardcy;":                          '\U0000044A',
+       "harr;":                            '\U00002194',
+       "harrcir;":                         '\U00002948',
+       "harrw;":                           '\U000021AD',
+       "hbar;":                            '\U0000210F',
+       "hcirc;":                           '\U00000125',
+       "hearts;":                          '\U00002665',
+       "heartsuit;":                       '\U00002665',
+       "hellip;":                          '\U00002026',
+       "hercon;":                          '\U000022B9',
+       "hfr;":                             '\U0001D525',
+       "hksearow;":                        '\U00002925',
+       "hkswarow;":                        '\U00002926',
+       "hoarr;":                           '\U000021FF',
+       "homtht;":                          '\U0000223B',
+       "hookleftarrow;":                   '\U000021A9',
+       "hookrightarrow;":                  '\U000021AA',
+       "hopf;":                            '\U0001D559',
+       "horbar;":                          '\U00002015',
+       "hscr;":                            '\U0001D4BD',
+       "hslash;":                          '\U0000210F',
+       "hstrok;":                          '\U00000127',
+       "hybull;":                          '\U00002043',
+       "hyphen;":                          '\U00002010',
+       "iacute;":                          '\U000000ED',
+       "ic;":                              '\U00002063',
+       "icirc;":                           '\U000000EE',
+       "icy;":                             '\U00000438',
+       "iecy;":                            '\U00000435',
+       "iexcl;":                           '\U000000A1',
+       "iff;":                             '\U000021D4',
+       "ifr;":                             '\U0001D526',
+       "igrave;":                          '\U000000EC',
+       "ii;":                              '\U00002148',
+       "iiiint;":                          '\U00002A0C',
+       "iiint;":                           '\U0000222D',
+       "iinfin;":                          '\U000029DC',
+       "iiota;":                           '\U00002129',
+       "ijlig;":                           '\U00000133',
+       "imacr;":                           '\U0000012B',
+       "image;":                           '\U00002111',
+       "imagline;":                        '\U00002110',
+       "imagpart;":                        '\U00002111',
+       "imath;":                           '\U00000131',
+       "imof;":                            '\U000022B7',
+       "imped;":                           '\U000001B5',
+       "in;":                              '\U00002208',
+       "incare;":                          '\U00002105',
+       "infin;":                           '\U0000221E',
+       "infintie;":                        '\U000029DD',
+       "inodot;":                          '\U00000131',
+       "int;":                             '\U0000222B',
+       "intcal;":                          '\U000022BA',
+       "integers;":                        '\U00002124',
+       "intercal;":                        '\U000022BA',
+       "intlarhk;":                        '\U00002A17',
+       "intprod;":                         '\U00002A3C',
+       "iocy;":                            '\U00000451',
+       "iogon;":                           '\U0000012F',
+       "iopf;":                            '\U0001D55A',
+       "iota;":                            '\U000003B9',
+       "iprod;":                           '\U00002A3C',
+       "iquest;":                          '\U000000BF',
+       "iscr;":                            '\U0001D4BE',
+       "isin;":                            '\U00002208',
+       "isinE;":                           '\U000022F9',
+       "isindot;":                         '\U000022F5',
+       "isins;":                           '\U000022F4',
+       "isinsv;":                          '\U000022F3',
+       "isinv;":                           '\U00002208',
+       "it;":                              '\U00002062',
+       "itilde;":                          '\U00000129',
+       "iukcy;":                           '\U00000456',
+       "iuml;":                            '\U000000EF',
+       "jcirc;":                           '\U00000135',
+       "jcy;":                             '\U00000439',
+       "jfr;":                             '\U0001D527',
+       "jmath;":                           '\U00000237',
+       "jopf;":                            '\U0001D55B',
+       "jscr;":                            '\U0001D4BF',
+       "jsercy;":                          '\U00000458',
+       "jukcy;":                           '\U00000454',
+       "kappa;":                           '\U000003BA',
+       "kappav;":                          '\U000003F0',
+       "kcedil;":                          '\U00000137',
+       "kcy;":                             '\U0000043A',
+       "kfr;":                             '\U0001D528',
+       "kgreen;":                          '\U00000138',
+       "khcy;":                            '\U00000445',
+       "kjcy;":                            '\U0000045C',
+       "kopf;":                            '\U0001D55C',
+       "kscr;":                            '\U0001D4C0',
+       "lAarr;":                           '\U000021DA',
+       "lArr;":                            '\U000021D0',
+       "lAtail;":                          '\U0000291B',
+       "lBarr;":                           '\U0000290E',
+       "lE;":                              '\U00002266',
+       "lEg;":                             '\U00002A8B',
+       "lHar;":                            '\U00002962',
+       "lacute;":                          '\U0000013A',
+       "laemptyv;":                        '\U000029B4',
+       "lagran;":                          '\U00002112',
+       "lambda;":                          '\U000003BB',
+       "lang;":                            '\U000027E8',
+       "langd;":                           '\U00002991',
+       "langle;":                          '\U000027E8',
+       "lap;":                             '\U00002A85',
+       "laquo;":                           '\U000000AB',
+       "larr;":                            '\U00002190',
+       "larrb;":                           '\U000021E4',
+       "larrbfs;":                         '\U0000291F',
+       "larrfs;":                          '\U0000291D',
+       "larrhk;":                          '\U000021A9',
+       "larrlp;":                          '\U000021AB',
+       "larrpl;":                          '\U00002939',
+       "larrsim;":                         '\U00002973',
+       "larrtl;":                          '\U000021A2',
+       "lat;":                             '\U00002AAB',
+       "latail;":                          '\U00002919',
+       "late;":                            '\U00002AAD',
+       "lbarr;":                           '\U0000290C',
+       "lbbrk;":                           '\U00002772',
+       "lbrace;":                          '\U0000007B',
+       "lbrack;":                          '\U0000005B',
+       "lbrke;":                           '\U0000298B',
+       "lbrksld;":                         '\U0000298F',
+       "lbrkslu;":                         '\U0000298D',
+       "lcaron;":                          '\U0000013E',
+       "lcedil;":                          '\U0000013C',
+       "lceil;":                           '\U00002308',
+       "lcub;":                            '\U0000007B',
+       "lcy;":                             '\U0000043B',
+       "ldca;":                            '\U00002936',
+       "ldquo;":                           '\U0000201C',
+       "ldquor;":                          '\U0000201E',
+       "ldrdhar;":                         '\U00002967',
+       "ldrushar;":                        '\U0000294B',
+       "ldsh;":                            '\U000021B2',
+       "le;":                              '\U00002264',
+       "leftarrow;":                       '\U00002190',
+       "leftarrowtail;":                   '\U000021A2',
+       "leftharpoondown;":                 '\U000021BD',
+       "leftharpoonup;":                   '\U000021BC',
+       "leftleftarrows;":                  '\U000021C7',
+       "leftrightarrow;":                  '\U00002194',
+       "leftrightarrows;":                 '\U000021C6',
+       "leftrightharpoons;":               '\U000021CB',
+       "leftrightsquigarrow;":             '\U000021AD',
+       "leftthreetimes;":                  '\U000022CB',
+       "leg;":                             '\U000022DA',
+       "leq;":                             '\U00002264',
+       "leqq;":                            '\U00002266',
+       "leqslant;":                        '\U00002A7D',
+       "les;":                             '\U00002A7D',
+       "lescc;":                           '\U00002AA8',
+       "lesdot;":                          '\U00002A7F',
+       "lesdoto;":                         '\U00002A81',
+       "lesdotor;":                        '\U00002A83',
+       "lesges;":                          '\U00002A93',
+       "lessapprox;":                      '\U00002A85',
+       "lessdot;":                         '\U000022D6',
+       "lesseqgtr;":                       '\U000022DA',
+       "lesseqqgtr;":                      '\U00002A8B',
+       "lessgtr;":                         '\U00002276',
+       "lesssim;":                         '\U00002272',
+       "lfisht;":                          '\U0000297C',
+       "lfloor;":                          '\U0000230A',
+       "lfr;":                             '\U0001D529',
+       "lg;":                              '\U00002276',
+       "lgE;":                             '\U00002A91',
+       "lhard;":                           '\U000021BD',
+       "lharu;":                           '\U000021BC',
+       "lharul;":                          '\U0000296A',
+       "lhblk;":                           '\U00002584',
+       "ljcy;":                            '\U00000459',
+       "ll;":                              '\U0000226A',
+       "llarr;":                           '\U000021C7',
+       "llcorner;":                        '\U0000231E',
+       "llhard;":                          '\U0000296B',
+       "lltri;":                           '\U000025FA',
+       "lmidot;":                          '\U00000140',
+       "lmoust;":                          '\U000023B0',
+       "lmoustache;":                      '\U000023B0',
+       "lnE;":                             '\U00002268',
+       "lnap;":                            '\U00002A89',
+       "lnapprox;":                        '\U00002A89',
+       "lne;":                             '\U00002A87',
+       "lneq;":                            '\U00002A87',
+       "lneqq;":                           '\U00002268',
+       "lnsim;":                           '\U000022E6',
+       "loang;":                           '\U000027EC',
+       "loarr;":                           '\U000021FD',
+       "lobrk;":                           '\U000027E6',
+       "longleftarrow;":                   '\U000027F5',
+       "longleftrightarrow;":              '\U000027F7',
+       "longmapsto;":                      '\U000027FC',
+       "longrightarrow;":                  '\U000027F6',
+       "looparrowleft;":                   '\U000021AB',
+       "looparrowright;":                  '\U000021AC',
+       "lopar;":                           '\U00002985',
+       "lopf;":                            '\U0001D55D',
+       "loplus;":                          '\U00002A2D',
+       "lotimes;":                         '\U00002A34',
+       "lowast;":                          '\U00002217',
+       "lowbar;":                          '\U0000005F',
+       "loz;":                             '\U000025CA',
+       "lozenge;":                         '\U000025CA',
+       "lozf;":                            '\U000029EB',
+       "lpar;":                            '\U00000028',
+       "lparlt;":                          '\U00002993',
+       "lrarr;":                           '\U000021C6',
+       "lrcorner;":                        '\U0000231F',
+       "lrhar;":                           '\U000021CB',
+       "lrhard;":                          '\U0000296D',
+       "lrm;":                             '\U0000200E',
+       "lrtri;":                           '\U000022BF',
+       "lsaquo;":                          '\U00002039',
+       "lscr;":                            '\U0001D4C1',
+       "lsh;":                             '\U000021B0',
+       "lsim;":                            '\U00002272',
+       "lsime;":                           '\U00002A8D',
+       "lsimg;":                           '\U00002A8F',
+       "lsqb;":                            '\U0000005B',
+       "lsquo;":                           '\U00002018',
+       "lsquor;":                          '\U0000201A',
+       "lstrok;":                          '\U00000142',
+       "lt;":                              '\U0000003C',
+       "ltcc;":                            '\U00002AA6',
+       "ltcir;":                           '\U00002A79',
+       "ltdot;":                           '\U000022D6',
+       "lthree;":                          '\U000022CB',
+       "ltimes;":                          '\U000022C9',
+       "ltlarr;":                          '\U00002976',
+       "ltquest;":                         '\U00002A7B',
+       "ltrPar;":                          '\U00002996',
+       "ltri;":                            '\U000025C3',
+       "ltrie;":                           '\U000022B4',
+       "ltrif;":                           '\U000025C2',
+       "lurdshar;":                        '\U0000294A',
+       "luruhar;":                         '\U00002966',
+       "mDDot;":                           '\U0000223A',
+       "macr;":                            '\U000000AF',
+       "male;":                            '\U00002642',
+       "malt;":                            '\U00002720',
+       "maltese;":                         '\U00002720',
+       "map;":                             '\U000021A6',
+       "mapsto;":                          '\U000021A6',
+       "mapstodown;":                      '\U000021A7',
+       "mapstoleft;":                      '\U000021A4',
+       "mapstoup;":                        '\U000021A5',
+       "marker;":                          '\U000025AE',
+       "mcomma;":                          '\U00002A29',
+       "mcy;":                             '\U0000043C',
+       "mdash;":                           '\U00002014',
+       "measuredangle;":                   '\U00002221',
+       "mfr;":                             '\U0001D52A',
+       "mho;":                             '\U00002127',
+       "micro;":                           '\U000000B5',
+       "mid;":                             '\U00002223',
+       "midast;":                          '\U0000002A',
+       "midcir;":                          '\U00002AF0',
+       "middot;":                          '\U000000B7',
+       "minus;":                           '\U00002212',
+       "minusb;":                          '\U0000229F',
+       "minusd;":                          '\U00002238',
+       "minusdu;":                         '\U00002A2A',
+       "mlcp;":                            '\U00002ADB',
+       "mldr;":                            '\U00002026',
+       "mnplus;":                          '\U00002213',
+       "models;":                          '\U000022A7',
+       "mopf;":                            '\U0001D55E',
+       "mp;":                              '\U00002213',
+       "mscr;":                            '\U0001D4C2',
+       "mstpos;":                          '\U0000223E',
+       "mu;":                              '\U000003BC',
+       "multimap;":                        '\U000022B8',
+       "mumap;":                           '\U000022B8',
+       "nLeftarrow;":                      '\U000021CD',
+       "nLeftrightarrow;":                 '\U000021CE',
+       "nRightarrow;":                     '\U000021CF',
+       "nVDash;":                          '\U000022AF',
+       "nVdash;":                          '\U000022AE',
+       "nabla;":                           '\U00002207',
+       "nacute;":                          '\U00000144',
+       "nap;":                             '\U00002249',
+       "napos;":                           '\U00000149',
+       "napprox;":                         '\U00002249',
+       "natur;":                           '\U0000266E',
+       "natural;":                         '\U0000266E',
+       "naturals;":                        '\U00002115',
+       "nbsp;":                            '\U000000A0',
+       "ncap;":                            '\U00002A43',
+       "ncaron;":                          '\U00000148',
+       "ncedil;":                          '\U00000146',
+       "ncong;":                           '\U00002247',
+       "ncup;":                            '\U00002A42',
+       "ncy;":                             '\U0000043D',
+       "ndash;":                           '\U00002013',
+       "ne;":                              '\U00002260',
+       "neArr;":                           '\U000021D7',
+       "nearhk;":                          '\U00002924',
+       "nearr;":                           '\U00002197',
+       "nearrow;":                         '\U00002197',
+       "nequiv;":                          '\U00002262',
+       "nesear;":                          '\U00002928',
+       "nexist;":                          '\U00002204',
+       "nexists;":                         '\U00002204',
+       "nfr;":                             '\U0001D52B',
+       "nge;":                             '\U00002271',
+       "ngeq;":                            '\U00002271',
+       "ngsim;":                           '\U00002275',
+       "ngt;":                             '\U0000226F',
+       "ngtr;":                            '\U0000226F',
+       "nhArr;":                           '\U000021CE',
+       "nharr;":                           '\U000021AE',
+       "nhpar;":                           '\U00002AF2',
+       "ni;":                              '\U0000220B',
+       "nis;":                             '\U000022FC',
+       "nisd;":                            '\U000022FA',
+       "niv;":                             '\U0000220B',
+       "njcy;":                            '\U0000045A',
+       "nlArr;":                           '\U000021CD',
+       "nlarr;":                           '\U0000219A',
+       "nldr;":                            '\U00002025',
+       "nle;":                             '\U00002270',
+       "nleftarrow;":                      '\U0000219A',
+       "nleftrightarrow;":                 '\U000021AE',
+       "nleq;":                            '\U00002270',
+       "nless;":                           '\U0000226E',
+       "nlsim;":                           '\U00002274',
+       "nlt;":                             '\U0000226E',
+       "nltri;":                           '\U000022EA',
+       "nltrie;":                          '\U000022EC',
+       "nmid;":                            '\U00002224',
+       "nopf;":                            '\U0001D55F',
+       "not;":                             '\U000000AC',
+       "notin;":                           '\U00002209',
+       "notinva;":                         '\U00002209',
+       "notinvb;":                         '\U000022F7',
+       "notinvc;":                         '\U000022F6',
+       "notni;":                           '\U0000220C',
+       "notniva;":                         '\U0000220C',
+       "notnivb;":                         '\U000022FE',
+       "notnivc;":                         '\U000022FD',
+       "npar;":                            '\U00002226',
+       "nparallel;":                       '\U00002226',
+       "npolint;":                         '\U00002A14',
+       "npr;":                             '\U00002280',
+       "nprcue;":                          '\U000022E0',
+       "nprec;":                           '\U00002280',
+       "nrArr;":                           '\U000021CF',
+       "nrarr;":                           '\U0000219B',
+       "nrightarrow;":                     '\U0000219B',
+       "nrtri;":                           '\U000022EB',
+       "nrtrie;":                          '\U000022ED',
+       "nsc;":                             '\U00002281',
+       "nsccue;":                          '\U000022E1',
+       "nscr;":                            '\U0001D4C3',
+       "nshortmid;":                       '\U00002224',
+       "nshortparallel;":                  '\U00002226',
+       "nsim;":                            '\U00002241',
+       "nsime;":                           '\U00002244',
+       "nsimeq;":                          '\U00002244',
+       "nsmid;":                           '\U00002224',
+       "nspar;":                           '\U00002226',
+       "nsqsube;":                         '\U000022E2',
+       "nsqsupe;":                         '\U000022E3',
+       "nsub;":                            '\U00002284',
+       "nsube;":                           '\U00002288',
+       "nsubseteq;":                       '\U00002288',
+       "nsucc;":                           '\U00002281',
+       "nsup;":                            '\U00002285',
+       "nsupe;":                           '\U00002289',
+       "nsupseteq;":                       '\U00002289',
+       "ntgl;":                            '\U00002279',
+       "ntilde;":                          '\U000000F1',
+       "ntlg;":                            '\U00002278',
+       "ntriangleleft;":                   '\U000022EA',
+       "ntrianglelefteq;":                 '\U000022EC',
+       "ntriangleright;":                  '\U000022EB',
+       "ntrianglerighteq;":                '\U000022ED',
+       "nu;":                              '\U000003BD',
+       "num;":                             '\U00000023',
+       "numero;":                          '\U00002116',
+       "numsp;":                           '\U00002007',
+       "nvDash;":                          '\U000022AD',
+       "nvHarr;":                          '\U00002904',
+       "nvdash;":                          '\U000022AC',
+       "nvinfin;":                         '\U000029DE',
+       "nvlArr;":                          '\U00002902',
+       "nvrArr;":                          '\U00002903',
+       "nwArr;":                           '\U000021D6',
+       "nwarhk;":                          '\U00002923',
+       "nwarr;":                           '\U00002196',
+       "nwarrow;":                         '\U00002196',
+       "nwnear;":                          '\U00002927',
+       "oS;":                              '\U000024C8',
+       "oacute;":                          '\U000000F3',
+       "oast;":                            '\U0000229B',
+       "ocir;":                            '\U0000229A',
+       "ocirc;":                           '\U000000F4',
+       "ocy;":                             '\U0000043E',
+       "odash;":                           '\U0000229D',
+       "odblac;":                          '\U00000151',
+       "odiv;":                            '\U00002A38',
+       "odot;":                            '\U00002299',
+       "odsold;":                          '\U000029BC',
+       "oelig;":                           '\U00000153',
+       "ofcir;":                           '\U000029BF',
+       "ofr;":                             '\U0001D52C',
+       "ogon;":                            '\U000002DB',
+       "ograve;":                          '\U000000F2',
+       "ogt;":                             '\U000029C1',
+       "ohbar;":                           '\U000029B5',
+       "ohm;":                             '\U000003A9',
+       "oint;":                            '\U0000222E',
+       "olarr;":                           '\U000021BA',
+       "olcir;":                           '\U000029BE',
+       "olcross;":                         '\U000029BB',
+       "oline;":                           '\U0000203E',
+       "olt;":                             '\U000029C0',
+       "omacr;":                           '\U0000014D',
+       "omega;":                           '\U000003C9',
+       "omicron;":                         '\U000003BF',
+       "omid;":                            '\U000029B6',
+       "ominus;":                          '\U00002296',
+       "oopf;":                            '\U0001D560',
+       "opar;":                            '\U000029B7',
+       "operp;":                           '\U000029B9',
+       "oplus;":                           '\U00002295',
+       "or;":                              '\U00002228',
+       "orarr;":                           '\U000021BB',
+       "ord;":                             '\U00002A5D',
+       "order;":                           '\U00002134',
+       "orderof;":                         '\U00002134',
+       "ordf;":                            '\U000000AA',
+       "ordm;":                            '\U000000BA',
+       "origof;":                          '\U000022B6',
+       "oror;":                            '\U00002A56',
+       "orslope;":                         '\U00002A57',
+       "orv;":                             '\U00002A5B',
+       "oscr;":                            '\U00002134',
+       "oslash;":                          '\U000000F8',
+       "osol;":                            '\U00002298',
+       "otilde;":                          '\U000000F5',
+       "otimes;":                          '\U00002297',
+       "otimesas;":                        '\U00002A36',
+       "ouml;":                            '\U000000F6',
+       "ovbar;":                           '\U0000233D',
+       "par;":                             '\U00002225',
+       "para;":                            '\U000000B6',
+       "parallel;":                        '\U00002225',
+       "parsim;":                          '\U00002AF3',
+       "parsl;":                           '\U00002AFD',
+       "part;":                            '\U00002202',
+       "pcy;":                             '\U0000043F',
+       "percnt;":                          '\U00000025',
+       "period;":                          '\U0000002E',
+       "permil;":                          '\U00002030',
+       "perp;":                            '\U000022A5',
+       "pertenk;":                         '\U00002031',
+       "pfr;":                             '\U0001D52D',
+       "phi;":                             '\U000003C6',
+       "phiv;":                            '\U000003D5',
+       "phmmat;":                          '\U00002133',
+       "phone;":                           '\U0000260E',
+       "pi;":                              '\U000003C0',
+       "pitchfork;":                       '\U000022D4',
+       "piv;":                             '\U000003D6',
+       "planck;":                          '\U0000210F',
+       "planckh;":                         '\U0000210E',
+       "plankv;":                          '\U0000210F',
+       "plus;":                            '\U0000002B',
+       "plusacir;":                        '\U00002A23',
+       "plusb;":                           '\U0000229E',
+       "pluscir;":                         '\U00002A22',
+       "plusdo;":                          '\U00002214',
+       "plusdu;":                          '\U00002A25',
+       "pluse;":                           '\U00002A72',
+       "plusmn;":                          '\U000000B1',
+       "plussim;":                         '\U00002A26',
+       "plustwo;":                         '\U00002A27',
+       "pm;":                              '\U000000B1',
+       "pointint;":                        '\U00002A15',
+       "popf;":                            '\U0001D561',
+       "pound;":                           '\U000000A3',
+       "pr;":                              '\U0000227A',
+       "prE;":                             '\U00002AB3',
+       "prap;":                            '\U00002AB7',
+       "prcue;":                           '\U0000227C',
+       "pre;":                             '\U00002AAF',
+       "prec;":                            '\U0000227A',
+       "precapprox;":                      '\U00002AB7',
+       "preccurlyeq;":                     '\U0000227C',
+       "preceq;":                          '\U00002AAF',
+       "precnapprox;":                     '\U00002AB9',
+       "precneqq;":                        '\U00002AB5',
+       "precnsim;":                        '\U000022E8',
+       "precsim;":                         '\U0000227E',
+       "prime;":                           '\U00002032',
+       "primes;":                          '\U00002119',
+       "prnE;":                            '\U00002AB5',
+       "prnap;":                           '\U00002AB9',
+       "prnsim;":                          '\U000022E8',
+       "prod;":                            '\U0000220F',
+       "profalar;":                        '\U0000232E',
+       "profline;":                        '\U00002312',
+       "profsurf;":                        '\U00002313',
+       "prop;":                            '\U0000221D',
+       "propto;":                          '\U0000221D',
+       "prsim;":                           '\U0000227E',
+       "prurel;":                          '\U000022B0',
+       "pscr;":                            '\U0001D4C5',
+       "psi;":                             '\U000003C8',
+       "puncsp;":                          '\U00002008',
+       "qfr;":                             '\U0001D52E',
+       "qint;":                            '\U00002A0C',
+       "qopf;":                            '\U0001D562',
+       "qprime;":                          '\U00002057',
+       "qscr;":                            '\U0001D4C6',
+       "quaternions;":                     '\U0000210D',
+       "quatint;":                         '\U00002A16',
+       "quest;":                           '\U0000003F',
+       "questeq;":                         '\U0000225F',
+       "quot;":                            '\U00000022',
+       "rAarr;":                           '\U000021DB',
+       "rArr;":                            '\U000021D2',
+       "rAtail;":                          '\U0000291C',
+       "rBarr;":                           '\U0000290F',
+       "rHar;":                            '\U00002964',
+       "racute;":                          '\U00000155',
+       "radic;":                           '\U0000221A',
+       "raemptyv;":                        '\U000029B3',
+       "rang;":                            '\U000027E9',
+       "rangd;":                           '\U00002992',
+       "range;":                           '\U000029A5',
+       "rangle;":                          '\U000027E9',
+       "raquo;":                           '\U000000BB',
+       "rarr;":                            '\U00002192',
+       "rarrap;":                          '\U00002975',
+       "rarrb;":                           '\U000021E5',
+       "rarrbfs;":                         '\U00002920',
+       "rarrc;":                           '\U00002933',
+       "rarrfs;":                          '\U0000291E',
+       "rarrhk;":                          '\U000021AA',
+       "rarrlp;":                          '\U000021AC',
+       "rarrpl;":                          '\U00002945',
+       "rarrsim;":                         '\U00002974',
+       "rarrtl;":                          '\U000021A3',
+       "rarrw;":                           '\U0000219D',
+       "ratail;":                          '\U0000291A',
+       "ratio;":                           '\U00002236',
+       "rationals;":                       '\U0000211A',
+       "rbarr;":                           '\U0000290D',
+       "rbbrk;":                           '\U00002773',
+       "rbrace;":                          '\U0000007D',
+       "rbrack;":                          '\U0000005D',
+       "rbrke;":                           '\U0000298C',
+       "rbrksld;":                         '\U0000298E',
+       "rbrkslu;":                         '\U00002990',
+       "rcaron;":                          '\U00000159',
+       "rcedil;":                          '\U00000157',
+       "rceil;":                           '\U00002309',
+       "rcub;":                            '\U0000007D',
+       "rcy;":                             '\U00000440',
+       "rdca;":                            '\U00002937',
+       "rdldhar;":                         '\U00002969',
+       "rdquo;":                           '\U0000201D',
+       "rdquor;":                          '\U0000201D',
+       "rdsh;":                            '\U000021B3',
+       "real;":                            '\U0000211C',
+       "realine;":                         '\U0000211B',
+       "realpart;":                        '\U0000211C',
+       "reals;":                           '\U0000211D',
+       "rect;":                            '\U000025AD',
+       "reg;":                             '\U000000AE',
+       "rfisht;":                          '\U0000297D',
+       "rfloor;":                          '\U0000230B',
+       "rfr;":                             '\U0001D52F',
+       "rhard;":                           '\U000021C1',
+       "rharu;":                           '\U000021C0',
+       "rharul;":                          '\U0000296C',
+       "rho;":                             '\U000003C1',
+       "rhov;":                            '\U000003F1',
+       "rightarrow;":                      '\U00002192',
+       "rightarrowtail;":                  '\U000021A3',
+       "rightharpoondown;":                '\U000021C1',
+       "rightharpoonup;":                  '\U000021C0',
+       "rightleftarrows;":                 '\U000021C4',
+       "rightleftharpoons;":               '\U000021CC',
+       "rightrightarrows;":                '\U000021C9',
+       "rightsquigarrow;":                 '\U0000219D',
+       "rightthreetimes;":                 '\U000022CC',
+       "ring;":                            '\U000002DA',
+       "risingdotseq;":                    '\U00002253',
+       "rlarr;":                           '\U000021C4',
+       "rlhar;":                           '\U000021CC',
+       "rlm;":                             '\U0000200F',
+       "rmoust;":                          '\U000023B1',
+       "rmoustache;":                      '\U000023B1',
+       "rnmid;":                           '\U00002AEE',
+       "roang;":                           '\U000027ED',
+       "roarr;":                           '\U000021FE',
+       "robrk;":                           '\U000027E7',
+       "ropar;":                           '\U00002986',
+       "ropf;":                            '\U0001D563',
+       "roplus;":                          '\U00002A2E',
+       "rotimes;":                         '\U00002A35',
+       "rpar;":                            '\U00000029',
+       "rpargt;":                          '\U00002994',
+       "rppolint;":                        '\U00002A12',
+       "rrarr;":                           '\U000021C9',
+       "rsaquo;":                          '\U0000203A',
+       "rscr;":                            '\U0001D4C7',
+       "rsh;":                             '\U000021B1',
+       "rsqb;":                            '\U0000005D',
+       "rsquo;":                           '\U00002019',
+       "rsquor;":                          '\U00002019',
+       "rthree;":                          '\U000022CC',
+       "rtimes;":                          '\U000022CA',
+       "rtri;":                            '\U000025B9',
+       "rtrie;":                           '\U000022B5',
+       "rtrif;":                           '\U000025B8',
+       "rtriltri;":                        '\U000029CE',
+       "ruluhar;":                         '\U00002968',
+       "rx;":                              '\U0000211E',
+       "sacute;":                          '\U0000015B',
+       "sbquo;":                           '\U0000201A',
+       "sc;":                              '\U0000227B',
+       "scE;":                             '\U00002AB4',
+       "scap;":                            '\U00002AB8',
+       "scaron;":                          '\U00000161',
+       "sccue;":                           '\U0000227D',
+       "sce;":                             '\U00002AB0',
+       "scedil;":                          '\U0000015F',
+       "scirc;":                           '\U0000015D',
+       "scnE;":                            '\U00002AB6',
+       "scnap;":                           '\U00002ABA',
+       "scnsim;":                          '\U000022E9',
+       "scpolint;":                        '\U00002A13',
+       "scsim;":                           '\U0000227F',
+       "scy;":                             '\U00000441',
+       "sdot;":                            '\U000022C5',
+       "sdotb;":                           '\U000022A1',
+       "sdote;":                           '\U00002A66',
+       "seArr;":                           '\U000021D8',
+       "searhk;":                          '\U00002925',
+       "searr;":                           '\U00002198',
+       "searrow;":                         '\U00002198',
+       "sect;":                            '\U000000A7',
+       "semi;":                            '\U0000003B',
+       "seswar;":                          '\U00002929',
+       "setminus;":                        '\U00002216',
+       "setmn;":                           '\U00002216',
+       "sext;":                            '\U00002736',
+       "sfr;":                             '\U0001D530',
+       "sfrown;":                          '\U00002322',
+       "sharp;":                           '\U0000266F',
+       "shchcy;":                          '\U00000449',
+       "shcy;":                            '\U00000448',
+       "shortmid;":                        '\U00002223',
+       "shortparallel;":                   '\U00002225',
+       "shy;":                             '\U000000AD',
+       "sigma;":                           '\U000003C3',
+       "sigmaf;":                          '\U000003C2',
+       "sigmav;":                          '\U000003C2',
+       "sim;":                             '\U0000223C',
+       "simdot;":                          '\U00002A6A',
+       "sime;":                            '\U00002243',
+       "simeq;":                           '\U00002243',
+       "simg;":                            '\U00002A9E',
+       "simgE;":                           '\U00002AA0',
+       "siml;":                            '\U00002A9D',
+       "simlE;":                           '\U00002A9F',
+       "simne;":                           '\U00002246',
+       "simplus;":                         '\U00002A24',
+       "simrarr;":                         '\U00002972',
+       "slarr;":                           '\U00002190',
+       "smallsetminus;":                   '\U00002216',
+       "smashp;":                          '\U00002A33',
+       "smeparsl;":                        '\U000029E4',
+       "smid;":                            '\U00002223',
+       "smile;":                           '\U00002323',
+       "smt;":                             '\U00002AAA',
+       "smte;":                            '\U00002AAC',
+       "softcy;":                          '\U0000044C',
+       "sol;":                             '\U0000002F',
+       "solb;":                            '\U000029C4',
+       "solbar;":                          '\U0000233F',
+       "sopf;":                            '\U0001D564',
+       "spades;":                          '\U00002660',
+       "spadesuit;":                       '\U00002660',
+       "spar;":                            '\U00002225',
+       "sqcap;":                           '\U00002293',
+       "sqcup;":                           '\U00002294',
+       "sqsub;":                           '\U0000228F',
+       "sqsube;":                          '\U00002291',
+       "sqsubset;":                        '\U0000228F',
+       "sqsubseteq;":                      '\U00002291',
+       "sqsup;":                           '\U00002290',
+       "sqsupe;":                          '\U00002292',
+       "sqsupset;":                        '\U00002290',
+       "sqsupseteq;":                      '\U00002292',
+       "squ;":                             '\U000025A1',
+       "square;":                          '\U000025A1',
+       "squarf;":                          '\U000025AA',
+       "squf;":                            '\U000025AA',
+       "srarr;":                           '\U00002192',
+       "sscr;":                            '\U0001D4C8',
+       "ssetmn;":                          '\U00002216',
+       "ssmile;":                          '\U00002323',
+       "sstarf;":                          '\U000022C6',
+       "star;":                            '\U00002606',
+       "starf;":                           '\U00002605',
+       "straightepsilon;":                 '\U000003F5',
+       "straightphi;":                     '\U000003D5',
+       "strns;":                           '\U000000AF',
+       "sub;":                             '\U00002282',
+       "subE;":                            '\U00002AC5',
+       "subdot;":                          '\U00002ABD',
+       "sube;":                            '\U00002286',
+       "subedot;":                         '\U00002AC3',
+       "submult;":                         '\U00002AC1',
+       "subnE;":                           '\U00002ACB',
+       "subne;":                           '\U0000228A',
+       "subplus;":                         '\U00002ABF',
+       "subrarr;":                         '\U00002979',
+       "subset;":                          '\U00002282',
+       "subseteq;":                        '\U00002286',
+       "subseteqq;":                       '\U00002AC5',
+       "subsetneq;":                       '\U0000228A',
+       "subsetneqq;":                      '\U00002ACB',
+       "subsim;":                          '\U00002AC7',
+       "subsub;":                          '\U00002AD5',
+       "subsup;":                          '\U00002AD3',
+       "succ;":                            '\U0000227B',
+       "succapprox;":                      '\U00002AB8',
+       "succcurlyeq;":                     '\U0000227D',
+       "succeq;":                          '\U00002AB0',
+       "succnapprox;":                     '\U00002ABA',
+       "succneqq;":                        '\U00002AB6',
+       "succnsim;":                        '\U000022E9',
+       "succsim;":                         '\U0000227F',
+       "sum;":                             '\U00002211',
+       "sung;":                            '\U0000266A',
+       "sup;":                             '\U00002283',
+       "sup1;":                            '\U000000B9',
+       "sup2;":                            '\U000000B2',
+       "sup3;":                            '\U000000B3',
+       "supE;":                            '\U00002AC6',
+       "supdot;":                          '\U00002ABE',
+       "supdsub;":                         '\U00002AD8',
+       "supe;":                            '\U00002287',
+       "supedot;":                         '\U00002AC4',
+       "suphsol;":                         '\U000027C9',
+       "suphsub;":                         '\U00002AD7',
+       "suplarr;":                         '\U0000297B',
+       "supmult;":                         '\U00002AC2',
+       "supnE;":                           '\U00002ACC',
+       "supne;":                           '\U0000228B',
+       "supplus;":                         '\U00002AC0',
+       "supset;":                          '\U00002283',
+       "supseteq;":                        '\U00002287',
+       "supseteqq;":                       '\U00002AC6',
+       "supsetneq;":                       '\U0000228B',
+       "supsetneqq;":                      '\U00002ACC',
+       "supsim;":                          '\U00002AC8',
+       "supsub;":                          '\U00002AD4',
+       "supsup;":                          '\U00002AD6',
+       "swArr;":                           '\U000021D9',
+       "swarhk;":                          '\U00002926',
+       "swarr;":                           '\U00002199',
+       "swarrow;":                         '\U00002199',
+       "swnwar;":                          '\U0000292A',
+       "szlig;":                           '\U000000DF',
+       "target;":                          '\U00002316',
+       "tau;":                             '\U000003C4',
+       "tbrk;":                            '\U000023B4',
+       "tcaron;":                          '\U00000165',
+       "tcedil;":                          '\U00000163',
+       "tcy;":                             '\U00000442',
+       "tdot;":                            '\U000020DB',
+       "telrec;":                          '\U00002315',
+       "tfr;":                             '\U0001D531',
+       "there4;":                          '\U00002234',
+       "therefore;":                       '\U00002234',
+       "theta;":                           '\U000003B8',
+       "thetasym;":                        '\U000003D1',
+       "thetav;":                          '\U000003D1',
+       "thickapprox;":                     '\U00002248',
+       "thicksim;":                        '\U0000223C',
+       "thinsp;":                          '\U00002009',
+       "thkap;":                           '\U00002248',
+       "thksim;":                          '\U0000223C',
+       "thorn;":                           '\U000000FE',
+       "tilde;":                           '\U000002DC',
+       "times;":                           '\U000000D7',
+       "timesb;":                          '\U000022A0',
+       "timesbar;":                        '\U00002A31',
+       "timesd;":                          '\U00002A30',
+       "tint;":                            '\U0000222D',
+       "toea;":                            '\U00002928',
+       "top;":                             '\U000022A4',
+       "topbot;":                          '\U00002336',
+       "topcir;":                          '\U00002AF1',
+       "topf;":                            '\U0001D565',
+       "topfork;":                         '\U00002ADA',
+       "tosa;":                            '\U00002929',
+       "tprime;":                          '\U00002034',
+       "trade;":                           '\U00002122',
+       "triangle;":                        '\U000025B5',
+       "triangledown;":                    '\U000025BF',
+       "triangleleft;":                    '\U000025C3',
+       "trianglelefteq;":                  '\U000022B4',
+       "triangleq;":                       '\U0000225C',
+       "triangleright;":                   '\U000025B9',
+       "trianglerighteq;":                 '\U000022B5',
+       "tridot;":                          '\U000025EC',
+       "trie;":                            '\U0000225C',
+       "triminus;":                        '\U00002A3A',
+       "triplus;":                         '\U00002A39',
+       "trisb;":                           '\U000029CD',
+       "tritime;":                         '\U00002A3B',
+       "trpezium;":                        '\U000023E2',
+       "tscr;":                            '\U0001D4C9',
+       "tscy;":                            '\U00000446',
+       "tshcy;":                           '\U0000045B',
+       "tstrok;":                          '\U00000167',
+       "twixt;":                           '\U0000226C',
+       "twoheadleftarrow;":                '\U0000219E',
+       "twoheadrightarrow;":               '\U000021A0',
+       "uArr;":                            '\U000021D1',
+       "uHar;":                            '\U00002963',
+       "uacute;":                          '\U000000FA',
+       "uarr;":                            '\U00002191',
+       "ubrcy;":                           '\U0000045E',
+       "ubreve;":                          '\U0000016D',
+       "ucirc;":                           '\U000000FB',
+       "ucy;":                             '\U00000443',
+       "udarr;":                           '\U000021C5',
+       "udblac;":                          '\U00000171',
+       "udhar;":                           '\U0000296E',
+       "ufisht;":                          '\U0000297E',
+       "ufr;":                             '\U0001D532',
+       "ugrave;":                          '\U000000F9',
+       "uharl;":                           '\U000021BF',
+       "uharr;":                           '\U000021BE',
+       "uhblk;":                           '\U00002580',
+       "ulcorn;":                          '\U0000231C',
+       "ulcorner;":                        '\U0000231C',
+       "ulcrop;":                          '\U0000230F',
+       "ultri;":                           '\U000025F8',
+       "umacr;":                           '\U0000016B',
+       "uml;":                             '\U000000A8',
+       "uogon;":                           '\U00000173',
+       "uopf;":                            '\U0001D566',
+       "uparrow;":                         '\U00002191',
+       "updownarrow;":                     '\U00002195',
+       "upharpoonleft;":                   '\U000021BF',
+       "upharpoonright;":                  '\U000021BE',
+       "uplus;":                           '\U0000228E',
+       "upsi;":                            '\U000003C5',
+       "upsih;":                           '\U000003D2',
+       "upsilon;":                         '\U000003C5',
+       "upuparrows;":                      '\U000021C8',
+       "urcorn;":                          '\U0000231D',
+       "urcorner;":                        '\U0000231D',
+       "urcrop;":                          '\U0000230E',
+       "uring;":                           '\U0000016F',
+       "urtri;":                           '\U000025F9',
+       "uscr;":                            '\U0001D4CA',
+       "utdot;":                           '\U000022F0',
+       "utilde;":                          '\U00000169',
+       "utri;":                            '\U000025B5',
+       "utrif;":                           '\U000025B4',
+       "uuarr;":                           '\U000021C8',
+       "uuml;":                            '\U000000FC',
+       "uwangle;":                         '\U000029A7',
+       "vArr;":                            '\U000021D5',
+       "vBar;":                            '\U00002AE8',
+       "vBarv;":                           '\U00002AE9',
+       "vDash;":                           '\U000022A8',
+       "vangrt;":                          '\U0000299C',
+       "varepsilon;":                      '\U000003F5',
+       "varkappa;":                        '\U000003F0',
+       "varnothing;":                      '\U00002205',
+       "varphi;":                          '\U000003D5',
+       "varpi;":                           '\U000003D6',
+       "varpropto;":                       '\U0000221D',
+       "varr;":                            '\U00002195',
+       "varrho;":                          '\U000003F1',
+       "varsigma;":                        '\U000003C2',
+       "vartheta;":                        '\U000003D1',
+       "vartriangleleft;":                 '\U000022B2',
+       "vartriangleright;":                '\U000022B3',
+       "vcy;":                             '\U00000432',
+       "vdash;":                           '\U000022A2',
+       "vee;":                             '\U00002228',
+       "veebar;":                          '\U000022BB',
+       "veeeq;":                           '\U0000225A',
+       "vellip;":                          '\U000022EE',
+       "verbar;":                          '\U0000007C',
+       "vert;":                            '\U0000007C',
+       "vfr;":                             '\U0001D533',
+       "vltri;":                           '\U000022B2',
+       "vopf;":                            '\U0001D567',
+       "vprop;":                           '\U0000221D',
+       "vrtri;":                           '\U000022B3',
+       "vscr;":                            '\U0001D4CB',
+       "vzigzag;":                         '\U0000299A',
+       "wcirc;":                           '\U00000175',
+       "wedbar;":                          '\U00002A5F',
+       "wedge;":                           '\U00002227',
+       "wedgeq;":                          '\U00002259',
+       "weierp;":                          '\U00002118',
+       "wfr;":                             '\U0001D534',
+       "wopf;":                            '\U0001D568',
+       "wp;":                              '\U00002118',
+       "wr;":                              '\U00002240',
+       "wreath;":                          '\U00002240',
+       "wscr;":                            '\U0001D4CC',
+       "xcap;":                            '\U000022C2',
+       "xcirc;":                           '\U000025EF',
+       "xcup;":                            '\U000022C3',
+       "xdtri;":                           '\U000025BD',
+       "xfr;":                             '\U0001D535',
+       "xhArr;":                           '\U000027FA',
+       "xharr;":                           '\U000027F7',
+       "xi;":                              '\U000003BE',
+       "xlArr;":                           '\U000027F8',
+       "xlarr;":                           '\U000027F5',
+       "xmap;":                            '\U000027FC',
+       "xnis;":                            '\U000022FB',
+       "xodot;":                           '\U00002A00',
+       "xopf;":                            '\U0001D569',
+       "xoplus;":                          '\U00002A01',
+       "xotime;":                          '\U00002A02',
+       "xrArr;":                           '\U000027F9',
+       "xrarr;":                           '\U000027F6',
+       "xscr;":                            '\U0001D4CD',
+       "xsqcup;":                          '\U00002A06',
+       "xuplus;":                          '\U00002A04',
+       "xutri;":                           '\U000025B3',
+       "xvee;":                            '\U000022C1',
+       "xwedge;":                          '\U000022C0',
+       "yacute;":                          '\U000000FD',
+       "yacy;":                            '\U0000044F',
+       "ycirc;":                           '\U00000177',
+       "ycy;":                             '\U0000044B',
+       "yen;":                             '\U000000A5',
+       "yfr;":                             '\U0001D536',
+       "yicy;":                            '\U00000457',
+       "yopf;":                            '\U0001D56A',
+       "yscr;":                            '\U0001D4CE',
+       "yucy;":                            '\U0000044E',
+       "yuml;":                            '\U000000FF',
+       "zacute;":                          '\U0000017A',
+       "zcaron;":                          '\U0000017E',
+       "zcy;":                             '\U00000437',
+       "zdot;":                            '\U0000017C',
+       "zeetrf;":                          '\U00002128',
+       "zeta;":                            '\U000003B6',
+       "zfr;":                             '\U0001D537',
+       "zhcy;":                            '\U00000436',
+       "zigrarr;":                         '\U000021DD',
+       "zopf;":                            '\U0001D56B',
+       "zscr;":                            '\U0001D4CF',
+       "zwj;":                             '\U0000200D',
+       "zwnj;":                            '\U0000200C',
+       "AElig":                            '\U000000C6',
+       "AMP":                              '\U00000026',
+       "Aacute":                           '\U000000C1',
+       "Acirc":                            '\U000000C2',
+       "Agrave":                           '\U000000C0',
+       "Aring":                            '\U000000C5',
+       "Atilde":                           '\U000000C3',
+       "Auml":                             '\U000000C4',
+       "COPY":                             '\U000000A9',
+       "Ccedil":                           '\U000000C7',
+       "ETH":                              '\U000000D0',
+       "Eacute":                           '\U000000C9',
+       "Ecirc":                            '\U000000CA',
+       "Egrave":                           '\U000000C8',
+       "Euml":                             '\U000000CB',
+       "GT":                               '\U0000003E',
+       "Iacute":                           '\U000000CD',
+       "Icirc":                            '\U000000CE',
+       "Igrave":                           '\U000000CC',
+       "Iuml":                             '\U000000CF',
+       "LT":                               '\U0000003C',
+       "Ntilde":                           '\U000000D1',
+       "Oacute":                           '\U000000D3',
+       "Ocirc":                            '\U000000D4',
+       "Ograve":                           '\U000000D2',
+       "Oslash":                           '\U000000D8',
+       "Otilde":                           '\U000000D5',
+       "Ouml":                             '\U000000D6',
+       "QUOT":                             '\U00000022',
+       "REG":                              '\U000000AE',
+       "THORN":                            '\U000000DE',
+       "Uacute":                           '\U000000DA',
+       "Ucirc":                            '\U000000DB',
+       "Ugrave":                           '\U000000D9',
+       "Uuml":                             '\U000000DC',
+       "Yacute":                           '\U000000DD',
+       "aacute":                           '\U000000E1',
+       "acirc":                            '\U000000E2',
+       "acute":                            '\U000000B4',
+       "aelig":                            '\U000000E6',
+       "agrave":                           '\U000000E0',
+       "amp":                              '\U00000026',
+       "aring":                            '\U000000E5',
+       "atilde":                           '\U000000E3',
+       "auml":                             '\U000000E4',
+       "brvbar":                           '\U000000A6',
+       "ccedil":                           '\U000000E7',
+       "cedil":                            '\U000000B8',
+       "cent":                             '\U000000A2',
+       "copy":                             '\U000000A9',
+       "curren":                           '\U000000A4',
+       "deg":                              '\U000000B0',
+       "divide":                           '\U000000F7',
+       "eacute":                           '\U000000E9',
+       "ecirc":                            '\U000000EA',
+       "egrave":                           '\U000000E8',
+       "eth":                              '\U000000F0',
+       "euml":                             '\U000000EB',
+       "frac12":                           '\U000000BD',
+       "frac14":                           '\U000000BC',
+       "frac34":                           '\U000000BE',
+       "gt":                               '\U0000003E',
+       "iacute":                           '\U000000ED',
+       "icirc":                            '\U000000EE',
+       "iexcl":                            '\U000000A1',
+       "igrave":                           '\U000000EC',
+       "iquest":                           '\U000000BF',
+       "iuml":                             '\U000000EF',
+       "laquo":                            '\U000000AB',
+       "lt":                               '\U0000003C',
+       "macr":                             '\U000000AF',
+       "micro":                            '\U000000B5',
+       "middot":                           '\U000000B7',
+       "nbsp":                             '\U000000A0',
+       "not":                              '\U000000AC',
+       "ntilde":                           '\U000000F1',
+       "oacute":                           '\U000000F3',
+       "ocirc":                            '\U000000F4',
+       "ograve":                           '\U000000F2',
+       "ordf":                             '\U000000AA',
+       "ordm":                             '\U000000BA',
+       "oslash":                           '\U000000F8',
+       "otilde":                           '\U000000F5',
+       "ouml":                             '\U000000F6',
+       "para":                             '\U000000B6',
+       "plusmn":                           '\U000000B1',
+       "pound":                            '\U000000A3',
+       "quot":                             '\U00000022',
+       "raquo":                            '\U000000BB',
+       "reg":                              '\U000000AE',
+       "sect":                             '\U000000A7',
+       "shy":                              '\U000000AD',
+       "sup1":                             '\U000000B9',
+       "sup2":                             '\U000000B2',
+       "sup3":                             '\U000000B3',
+       "szlig":                            '\U000000DF',
+       "thorn":                            '\U000000FE',
+       "times":                            '\U000000D7',
+       "uacute":                           '\U000000FA',
+       "ucirc":                            '\U000000FB',
+       "ugrave":                           '\U000000F9',
+       "uml":                              '\U000000A8',
+       "uuml":                             '\U000000FC',
+       "yacute":                           '\U000000FD',
+       "yen":                              '\U000000A5',
+       "yuml":                             '\U000000FF',
 }
 
 // HTML entities that are two unicode codepoints.
index d3b3844099bf151b97131dde31a161b7de630053..01477a96397c971333726e0f248d54ae05206cdb 100644 (file)
@@ -67,7 +67,7 @@ func mathMLTextIntegrationPoint(n *Node) bool {
        return false
 }
 
-// Section 12.2.5.5.
+// Section 12.2.6.5.
 var breakout = map[string]bool{
        "b":          true,
        "big":        true,
@@ -115,7 +115,7 @@ var breakout = map[string]bool{
        "var":        true,
 }
 
-// Section 12.2.5.5.
+// Section 12.2.6.5.
 var svgTagNameAdjustments = map[string]string{
        "altglyph":            "altGlyph",
        "altglyphdef":         "altGlyphDef",
@@ -155,7 +155,7 @@ var svgTagNameAdjustments = map[string]string{
        "textpath":            "textPath",
 }
 
-// Section 12.2.5.1
+// Section 12.2.6.1
 var mathMLAttributeAdjustments = map[string]string{
        "definitionurl": "definitionURL",
 }
index 26b657aec83b56df82d1b0d24cea65a4c7730cc2..2c1cade6070d3609b8a6fe064ff0b1950389b658 100644 (file)
@@ -21,9 +21,10 @@ const (
        scopeMarkerNode
 )
 
-// Section 12.2.3.3 says "scope markers are inserted when entering applet
-// elements, buttons, object elements, marquees, table cells, and table
-// captions, and are used to prevent formatting from 'leaking'".
+// Section 12.2.4.3 says "The markers are inserted when entering applet,
+// object, marquee, template, td, th, and caption elements, and are used
+// to prevent formatting from "leaking" into applet, object, marquee,
+// template, td, th, and caption elements".
 var scopeMarker = Node{Type: scopeMarkerNode}
 
 // A Node consists of a NodeType and some Data (tag name for element nodes,
@@ -173,6 +174,16 @@ func (s *nodeStack) index(n *Node) int {
        return -1
 }
 
+// contains returns whether a is within s.
+func (s *nodeStack) contains(a atom.Atom) bool {
+       for _, n := range *s {
+               if n.DataAtom == a {
+                       return true
+               }
+       }
+       return false
+}
+
 // insert inserts a node at the given index.
 func (s *nodeStack) insert(i int, n *Node) {
        (*s) = append(*s, nil)
@@ -191,3 +202,19 @@ func (s *nodeStack) remove(n *Node) {
        (*s)[j] = nil
        *s = (*s)[:j]
 }
+
+type insertionModeStack []insertionMode
+
+func (s *insertionModeStack) pop() (im insertionMode) {
+       i := len(*s)
+       im = (*s)[i-1]
+       *s = (*s)[:i-1]
+       return im
+}
+
+func (s *insertionModeStack) top() insertionMode {
+       if i := len(*s); i > 0 {
+               return (*s)[i-1]
+       }
+       return nil
+}
index be4b2bf5aa9e067b6eac9e8d3589ff497de1574e..64a5793725b9e975497030cd7ef1d06555dd120f 100644 (file)
@@ -25,20 +25,22 @@ type parser struct {
        hasSelfClosingToken bool
        // doc is the document root element.
        doc *Node
-       // The stack of open elements (section 12.2.3.2) and active formatting
-       // elements (section 12.2.3.3).
+       // The stack of open elements (section 12.2.4.2) and active formatting
+       // elements (section 12.2.4.3).
        oe, afe nodeStack
-       // Element pointers (section 12.2.3.4).
+       // Element pointers (section 12.2.4.4).
        head, form *Node
-       // Other parsing state flags (section 12.2.3.5).
+       // Other parsing state flags (section 12.2.4.5).
        scripting, framesetOK bool
+       // The stack of template insertion modes
+       templateStack insertionModeStack
        // im is the current insertion mode.
        im insertionMode
        // originalIM is the insertion mode to go back to after completing a text
        // or inTableText insertion mode.
        originalIM insertionMode
        // fosterParenting is whether new elements should be inserted according to
-       // the foster parenting rules (section 12.2.5.3).
+       // the foster parenting rules (section 12.2.6.1).
        fosterParenting bool
        // quirks is whether the parser is operating in "quirks mode."
        quirks bool
@@ -56,7 +58,7 @@ func (p *parser) top() *Node {
        return p.doc
 }
 
-// Stop tags for use in popUntil. These come from section 12.2.3.2.
+// Stop tags for use in popUntil. These come from section 12.2.4.2.
 var (
        defaultScopeStopTags = map[string][]a.Atom{
                "":     {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template},
@@ -79,7 +81,7 @@ const (
 
 // popUntil pops the stack of open elements at the highest element whose tag
 // is in matchTags, provided there is no higher element in the scope's stop
-// tags (as defined in section 12.2.3.2). It returns whether or not there was
+// tags (as defined in section 12.2.4.2). It returns whether or not there was
 // such an element. If there was not, popUntil leaves the stack unchanged.
 //
 // For example, the set of stop tags for table scope is: "html", "table". If
@@ -126,7 +128,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {
                                        return -1
                                }
                        case tableScope:
-                               if tagAtom == a.Html || tagAtom == a.Table {
+                               if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
                                        return -1
                                }
                        case selectScope:
@@ -162,17 +164,17 @@ func (p *parser) clearStackToContext(s scope) {
                tagAtom := p.oe[i].DataAtom
                switch s {
                case tableScope:
-                       if tagAtom == a.Html || tagAtom == a.Table {
+                       if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
                                p.oe = p.oe[:i+1]
                                return
                        }
                case tableRowScope:
-                       if tagAtom == a.Html || tagAtom == a.Tr {
+                       if tagAtom == a.Html || tagAtom == a.Tr || tagAtom == a.Template {
                                p.oe = p.oe[:i+1]
                                return
                        }
                case tableBodyScope:
-                       if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead {
+                       if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead || tagAtom == a.Template {
                                p.oe = p.oe[:i+1]
                                return
                        }
@@ -183,7 +185,7 @@ func (p *parser) clearStackToContext(s scope) {
 }
 
 // generateImpliedEndTags pops nodes off the stack of open elements as long as
-// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt.
+// the top node has a tag name of dd, dt, li, optgroup, option, p, rb, rp, rt or rtc.
 // If exceptions are specified, nodes with that name will not be popped off.
 func (p *parser) generateImpliedEndTags(exceptions ...string) {
        var i int
@@ -192,7 +194,7 @@ loop:
                n := p.oe[i]
                if n.Type == ElementNode {
                        switch n.DataAtom {
-                       case a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt:
+                       case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc:
                                for _, except := range exceptions {
                                        if n.Data == except {
                                                break loop
@@ -234,9 +236,9 @@ func (p *parser) shouldFosterParent() bool {
 }
 
 // fosterParent adds a child node according to the foster parenting rules.
-// Section 12.2.5.3, "foster parenting".
+// Section 12.2.6.1, "foster parenting".
 func (p *parser) fosterParent(n *Node) {
-       var table, parent, prev *Node
+       var table, parent, prev, template *Node
        var i int
        for i = len(p.oe) - 1; i >= 0; i-- {
                if p.oe[i].DataAtom == a.Table {
@@ -245,6 +247,19 @@ func (p *parser) fosterParent(n *Node) {
                }
        }
 
+       var j int
+       for j = len(p.oe) - 1; j >= 0; j-- {
+               if p.oe[j].DataAtom == a.Template {
+                       template = p.oe[j]
+                       break
+               }
+       }
+
+       if template != nil && (table == nil || j > i) {
+               template.AppendChild(n)
+               return
+       }
+
        if table == nil {
                // The foster parent is the html element.
                parent = p.oe[0]
@@ -304,7 +319,7 @@ func (p *parser) addElement() {
        })
 }
 
-// Section 12.2.3.3.
+// Section 12.2.4.3.
 func (p *parser) addFormattingElement() {
        tagAtom, attr := p.tok.DataAtom, p.tok.Attr
        p.addElement()
@@ -351,7 +366,7 @@ findIdenticalElements:
        p.afe = append(p.afe, p.top())
 }
 
-// Section 12.2.3.3.
+// Section 12.2.4.3.
 func (p *parser) clearActiveFormattingElements() {
        for {
                n := p.afe.pop()
@@ -361,7 +376,7 @@ func (p *parser) clearActiveFormattingElements() {
        }
 }
 
-// Section 12.2.3.3.
+// Section 12.2.4.3.
 func (p *parser) reconstructActiveFormattingElements() {
        n := p.afe.top()
        if n == nil {
@@ -390,12 +405,12 @@ func (p *parser) reconstructActiveFormattingElements() {
        }
 }
 
-// Section 12.2.4.
+// Section 12.2.5.
 func (p *parser) acknowledgeSelfClosingTag() {
        p.hasSelfClosingToken = false
 }
 
-// An insertion mode (section 12.2.3.1) is the state transition function from
+// An insertion mode (section 12.2.4.1) is the state transition function from
 // a particular state in the HTML5 parser's state machine. It updates the
 // parser's fields depending on parser.tok (where ErrorToken means EOF).
 // It returns whether the token was consumed.
@@ -403,7 +418,7 @@ type insertionMode func(*parser) bool
 
 // setOriginalIM sets the insertion mode to return to after completing a text or
 // inTableText insertion mode.
-// Section 12.2.3.1, "using the rules for".
+// Section 12.2.4.1, "using the rules for".
 func (p *parser) setOriginalIM() {
        if p.originalIM != nil {
                panic("html: bad parser state: originalIM was set twice")
@@ -411,18 +426,38 @@ func (p *parser) setOriginalIM() {
        p.originalIM = p.im
 }
 
-// Section 12.2.3.1, "reset the insertion mode".
+// Section 12.2.4.1, "reset the insertion mode".
 func (p *parser) resetInsertionMode() {
        for i := len(p.oe) - 1; i >= 0; i-- {
                n := p.oe[i]
-               if i == 0 && p.context != nil {
+               last := i == 0
+               if last && p.context != nil {
                        n = p.context
                }
 
                switch n.DataAtom {
                case a.Select:
+                       if !last {
+                               for ancestor, first := n, p.oe[0]; ancestor != first; {
+                                       if ancestor == first {
+                                               break
+                                       }
+                                       ancestor = p.oe[p.oe.index(ancestor)-1]
+                                       switch ancestor.DataAtom {
+                                       case a.Template:
+                                               p.im = inSelectIM
+                                               return
+                                       case a.Table:
+                                               p.im = inSelectInTableIM
+                                               return
+                                       }
+                               }
+                       }
                        p.im = inSelectIM
                case a.Td, a.Th:
+                       // TODO: remove this divergence from the HTML5 spec.
+                       //
+                       // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
                        p.im = inCellIM
                case a.Tr:
                        p.im = inRowIM
@@ -434,25 +469,41 @@ func (p *parser) resetInsertionMode() {
                        p.im = inColumnGroupIM
                case a.Table:
                        p.im = inTableIM
+               case a.Template:
+                       // TODO: remove this divergence from the HTML5 spec.
+                       if n.Namespace != "" {
+                               continue
+                       }
+                       p.im = p.templateStack.top()
                case a.Head:
-                       p.im = inBodyIM
+                       // TODO: remove this divergence from the HTML5 spec.
+                       //
+                       // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+                       p.im = inHeadIM
                case a.Body:
                        p.im = inBodyIM
                case a.Frameset:
                        p.im = inFramesetIM
                case a.Html:
-                       p.im = beforeHeadIM
+                       if p.head == nil {
+                               p.im = beforeHeadIM
+                       } else {
+                               p.im = afterHeadIM
+                       }
                default:
+                       if last {
+                               p.im = inBodyIM
+                               return
+                       }
                        continue
                }
                return
        }
-       p.im = inBodyIM
 }
 
 const whitespace = " \t\r\n\f"
 
-// Section 12.2.5.4.1.
+// Section 12.2.6.4.1.
 func initialIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -479,7 +530,7 @@ func initialIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.2.
+// Section 12.2.6.4.2.
 func beforeHTMLIM(p *parser) bool {
        switch p.tok.Type {
        case DoctypeToken:
@@ -517,7 +568,7 @@ func beforeHTMLIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.3.
+// Section 12.2.6.4.3.
 func beforeHeadIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -560,7 +611,7 @@ func beforeHeadIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.4.
+// Section 12.2.6.4.4.
 func inHeadIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -590,19 +641,41 @@ func inHeadIM(p *parser) bool {
                case a.Head:
                        // Ignore the token.
                        return true
+               case a.Template:
+                       p.addElement()
+                       p.afe = append(p.afe, &scopeMarker)
+                       p.framesetOK = false
+                       p.im = inTemplateIM
+                       p.templateStack = append(p.templateStack, inTemplateIM)
+                       return true
                }
        case EndTagToken:
                switch p.tok.DataAtom {
                case a.Head:
-                       n := p.oe.pop()
-                       if n.DataAtom != a.Head {
-                               panic("html: bad parser state: <head> element not found, in the in-head insertion mode")
-                       }
+                       p.oe.pop()
                        p.im = afterHeadIM
                        return true
                case a.Body, a.Html, a.Br:
                        p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
                        return false
+               case a.Template:
+                       if !p.oe.contains(a.Template) {
+                               return true
+                       }
+                       // TODO: remove this divergence from the HTML5 spec.
+                       //
+                       // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+                       p.generateImpliedEndTags()
+                       for i := len(p.oe) - 1; i >= 0; i-- {
+                               if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
+                                       p.oe = p.oe[:i]
+                                       break
+                               }
+                       }
+                       p.clearActiveFormattingElements()
+                       p.templateStack.pop()
+                       p.resetInsertionMode()
+                       return true
                default:
                        // Ignore the token.
                        return true
@@ -622,7 +695,7 @@ func inHeadIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.6.
+// Section 12.2.6.4.6.
 func afterHeadIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -648,7 +721,7 @@ func afterHeadIM(p *parser) bool {
                        p.addElement()
                        p.im = inFramesetIM
                        return true
-               case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+               case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
                        p.oe = append(p.oe, p.head)
                        defer p.oe.remove(p.head)
                        return inHeadIM(p)
@@ -660,6 +733,8 @@ func afterHeadIM(p *parser) bool {
                switch p.tok.DataAtom {
                case a.Body, a.Html, a.Br:
                        // Drop down to creating an implied <body> tag.
+               case a.Template:
+                       return inHeadIM(p)
                default:
                        // Ignore the token.
                        return true
@@ -697,7 +772,7 @@ func copyAttributes(dst *Node, src Token) {
        }
 }
 
-// Section 12.2.5.4.7.
+// Section 12.2.6.4.7.
 func inBodyIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -727,10 +802,16 @@ func inBodyIM(p *parser) bool {
        case StartTagToken:
                switch p.tok.DataAtom {
                case a.Html:
+                       if p.oe.contains(a.Template) {
+                               return true
+                       }
                        copyAttributes(p.oe[0], p.tok)
-               case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+               case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
                        return inHeadIM(p)
                case a.Body:
+                       if p.oe.contains(a.Template) {
+                               return true
+                       }
                        if len(p.oe) >= 2 {
                                body := p.oe[1]
                                if body.Type == ElementNode && body.DataAtom == a.Body {
@@ -767,9 +848,13 @@ func inBodyIM(p *parser) bool {
                        // The newline, if any, will be dealt with by the TextToken case.
                        p.framesetOK = false
                case a.Form:
-                       if p.form == nil {
-                               p.popUntil(buttonScope, a.P)
-                               p.addElement()
+                       if p.form != nil && !p.oe.contains(a.Template) {
+                               // Ignore the token
+                               return true
+                       }
+                       p.popUntil(buttonScope, a.P)
+                       p.addElement()
+                       if !p.oe.contains(a.Template) {
                                p.form = p.top()
                        }
                case a.Li:
@@ -903,6 +988,14 @@ func inBodyIM(p *parser) bool {
                        p.acknowledgeSelfClosingTag()
                        p.popUntil(buttonScope, a.P)
                        p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+                       if p.form == nil {
+                               // NOTE: The 'isindex' element has been removed,
+                               // and the 'template' element has not been designed to be
+                               // collaborative with the index element.
+                               //
+                               // Ignore the token.
+                               return true
+                       }
                        if action != "" {
                                p.form.Attr = []Attribute{{Key: "action", Val: action}}
                        }
@@ -952,11 +1045,16 @@ func inBodyIM(p *parser) bool {
                        }
                        p.reconstructActiveFormattingElements()
                        p.addElement()
-               case a.Rp, a.Rt:
+               case a.Rb, a.Rtc:
                        if p.elementInScope(defaultScope, a.Ruby) {
                                p.generateImpliedEndTags()
                        }
                        p.addElement()
+               case a.Rp, a.Rt:
+                       if p.elementInScope(defaultScope, a.Ruby) {
+                               p.generateImpliedEndTags("rtc")
+                       }
+                       p.addElement()
                case a.Math, a.Svg:
                        p.reconstructActiveFormattingElements()
                        if p.tok.DataAtom == a.Math {
@@ -993,15 +1091,29 @@ func inBodyIM(p *parser) bool {
                case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
                        p.popUntil(defaultScope, p.tok.DataAtom)
                case a.Form:
-                       node := p.form
-                       p.form = nil
-                       i := p.indexOfElementInScope(defaultScope, a.Form)
-                       if node == nil || i == -1 || p.oe[i] != node {
-                               // Ignore the token.
-                               return true
+                       if p.oe.contains(a.Template) {
+                               i := p.indexOfElementInScope(defaultScope, a.Form)
+                               if i == -1 {
+                                       // Ignore the token.
+                                       return true
+                               }
+                               p.generateImpliedEndTags()
+                               if p.oe[i].DataAtom != a.Form {
+                                       // Ignore the token.
+                                       return true
+                               }
+                               p.popUntil(defaultScope, a.Form)
+                       } else {
+                               node := p.form
+                               p.form = nil
+                               i := p.indexOfElementInScope(defaultScope, a.Form)
+                               if node == nil || i == -1 || p.oe[i] != node {
+                                       // Ignore the token.
+                                       return true
+                               }
+                               p.generateImpliedEndTags()
+                               p.oe.remove(node)
                        }
-                       p.generateImpliedEndTags()
-                       p.oe.remove(node)
                case a.P:
                        if !p.elementInScope(buttonScope, a.P) {
                                p.parseImpliedToken(StartTagToken, a.P, a.P.String())
@@ -1022,6 +1134,8 @@ func inBodyIM(p *parser) bool {
                case a.Br:
                        p.tok.Type = StartTagToken
                        return false
+               case a.Template:
+                       return inHeadIM(p)
                default:
                        p.inBodyEndTagOther(p.tok.DataAtom)
                }
@@ -1030,6 +1144,21 @@ func inBodyIM(p *parser) bool {
                        Type: CommentNode,
                        Data: p.tok.Data,
                })
+       case ErrorToken:
+               // TODO: remove this divergence from the HTML5 spec.
+               if len(p.templateStack) > 0 {
+                       p.im = inTemplateIM
+                       return false
+               } else {
+                       for _, e := range p.oe {
+                               switch e.DataAtom {
+                               case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th,
+                                       a.Thead, a.Tr, a.Body, a.Html:
+                               default:
+                                       return true
+                               }
+                       }
+               }
        }
 
        return true
@@ -1160,7 +1289,7 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {
 }
 
 // inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
-// "Any other end tag" handling from 12.2.5.5 The rules for parsing tokens in foreign content
+// "Any other end tag" handling from 12.2.6.5 The rules for parsing tokens in foreign content
 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
 func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
        for i := len(p.oe) - 1; i >= 0; i-- {
@@ -1174,7 +1303,7 @@ func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
        }
 }
 
-// Section 12.2.5.4.8.
+// Section 12.2.6.4.8.
 func textIM(p *parser) bool {
        switch p.tok.Type {
        case ErrorToken:
@@ -1203,12 +1332,9 @@ func textIM(p *parser) bool {
        return p.tok.Type == EndTagToken
 }
 
-// Section 12.2.5.4.9.
+// Section 12.2.6.4.9.
 func inTableIM(p *parser) bool {
        switch p.tok.Type {
-       case ErrorToken:
-               // Stop parsing.
-               return true
        case TextToken:
                p.tok.Data = strings.Replace(p.tok.Data, "\x00", "", -1)
                switch p.oe.top().DataAtom {
@@ -1249,7 +1375,7 @@ func inTableIM(p *parser) bool {
                        }
                        // Ignore the token.
                        return true
-               case a.Style, a.Script:
+               case a.Style, a.Script, a.Template:
                        return inHeadIM(p)
                case a.Input:
                        for _, t := range p.tok.Attr {
@@ -1261,7 +1387,7 @@ func inTableIM(p *parser) bool {
                        }
                        // Otherwise drop down to the default action.
                case a.Form:
-                       if p.form != nil {
+                       if p.oe.contains(a.Template) || p.form != nil {
                                // Ignore the token.
                                return true
                        }
@@ -1291,6 +1417,8 @@ func inTableIM(p *parser) bool {
                case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
                        // Ignore the token.
                        return true
+               case a.Template:
+                       return inHeadIM(p)
                }
        case CommentToken:
                p.addChild(&Node{
@@ -1301,6 +1429,8 @@ func inTableIM(p *parser) bool {
        case DoctypeToken:
                // Ignore the token.
                return true
+       case ErrorToken:
+               return inBodyIM(p)
        }
 
        p.fosterParenting = true
@@ -1309,7 +1439,7 @@ func inTableIM(p *parser) bool {
        return inBodyIM(p)
 }
 
-// Section 12.2.5.4.11.
+// Section 12.2.6.4.11.
 func inCaptionIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken:
@@ -1355,7 +1485,7 @@ func inCaptionIM(p *parser) bool {
        return inBodyIM(p)
 }
 
-// Section 12.2.5.4.12.
+// Section 12.2.6.4.12.
 func inColumnGroupIM(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -1386,11 +1516,13 @@ func inColumnGroupIM(p *parser) bool {
                        p.oe.pop()
                        p.acknowledgeSelfClosingTag()
                        return true
+               case a.Template:
+                       return inHeadIM(p)
                }
        case EndTagToken:
                switch p.tok.DataAtom {
                case a.Colgroup:
-                       if p.oe.top().DataAtom != a.Html {
+                       if p.oe.top().DataAtom == a.Colgroup {
                                p.oe.pop()
                                p.im = inTableIM
                        }
@@ -1398,17 +1530,21 @@ func inColumnGroupIM(p *parser) bool {
                case a.Col:
                        // Ignore the token.
                        return true
+               case a.Template:
+                       return inHeadIM(p)
                }
+       case ErrorToken:
+               return inBodyIM(p)
        }
-       if p.oe.top().DataAtom != a.Html {
-               p.oe.pop()
-               p.im = inTableIM
-               return false
+       if p.oe.top().DataAtom != a.Colgroup {
+               return true
        }
-       return true
+       p.oe.pop()
+       p.im = inTableIM
+       return false
 }
 
-// Section 12.2.5.4.13.
+// Section 12.2.6.4.13.
 func inTableBodyIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken:
@@ -1460,7 +1596,7 @@ func inTableBodyIM(p *parser) bool {
        return inTableIM(p)
 }
 
-// Section 12.2.5.4.14.
+// Section 12.2.6.4.14.
 func inRowIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken:
@@ -1511,7 +1647,7 @@ func inRowIM(p *parser) bool {
        return inTableIM(p)
 }
 
-// Section 12.2.5.4.15.
+// Section 12.2.6.4.15.
 func inCellIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken:
@@ -1560,12 +1696,9 @@ func inCellIM(p *parser) bool {
        return inBodyIM(p)
 }
 
-// Section 12.2.5.4.16.
+// Section 12.2.6.4.16.
 func inSelectIM(p *parser) bool {
        switch p.tok.Type {
-       case ErrorToken:
-               // Stop parsing.
-               return true
        case TextToken:
                p.addText(strings.Replace(p.tok.Data, "\x00", "", -1))
        case StartTagToken:
@@ -1597,7 +1730,7 @@ func inSelectIM(p *parser) bool {
                        p.tokenizer.NextIsNotRawText()
                        // Ignore the token.
                        return true
-               case a.Script:
+               case a.Script, a.Template:
                        return inHeadIM(p)
                }
        case EndTagToken:
@@ -1618,6 +1751,8 @@ func inSelectIM(p *parser) bool {
                        if p.popUntil(selectScope, a.Select) {
                                p.resetInsertionMode()
                        }
+               case a.Template:
+                       return inHeadIM(p)
                }
        case CommentToken:
                p.addChild(&Node{
@@ -1627,12 +1762,14 @@ func inSelectIM(p *parser) bool {
        case DoctypeToken:
                // Ignore the token.
                return true
+       case ErrorToken:
+               return inBodyIM(p)
        }
 
        return true
 }
 
-// Section 12.2.5.4.17.
+// Section 12.2.6.4.17.
 func inSelectInTableIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken, EndTagToken:
@@ -1650,7 +1787,73 @@ func inSelectInTableIM(p *parser) bool {
        return inSelectIM(p)
 }
 
-// Section 12.2.5.4.18.
+// Section 12.2.6.4.18.
+func inTemplateIM(p *parser) bool {
+       switch p.tok.Type {
+       case TextToken, CommentToken, DoctypeToken:
+               return inBodyIM(p)
+       case StartTagToken:
+               switch p.tok.DataAtom {
+               case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
+                       return inHeadIM(p)
+               case a.Caption, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
+                       p.templateStack.pop()
+                       p.templateStack = append(p.templateStack, inTableIM)
+                       p.im = inTableIM
+                       return false
+               case a.Col:
+                       p.templateStack.pop()
+                       p.templateStack = append(p.templateStack, inColumnGroupIM)
+                       p.im = inColumnGroupIM
+                       return false
+               case a.Tr:
+                       p.templateStack.pop()
+                       p.templateStack = append(p.templateStack, inTableBodyIM)
+                       p.im = inTableBodyIM
+                       return false
+               case a.Td, a.Th:
+                       p.templateStack.pop()
+                       p.templateStack = append(p.templateStack, inRowIM)
+                       p.im = inRowIM
+                       return false
+               default:
+                       p.templateStack.pop()
+                       p.templateStack = append(p.templateStack, inBodyIM)
+                       p.im = inBodyIM
+                       return false
+               }
+       case EndTagToken:
+               switch p.tok.DataAtom {
+               case a.Template:
+                       return inHeadIM(p)
+               default:
+                       // Ignore the token.
+                       return true
+               }
+       case ErrorToken:
+               if !p.oe.contains(a.Template) {
+                       // Ignore the token.
+                       return true
+               }
+               // TODO: remove this divergence from the HTML5 spec.
+               //
+               // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+               p.generateImpliedEndTags()
+               for i := len(p.oe) - 1; i >= 0; i-- {
+                       if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
+                               p.oe = p.oe[:i]
+                               break
+                       }
+               }
+               p.clearActiveFormattingElements()
+               p.templateStack.pop()
+               p.resetInsertionMode()
+               return false
+       }
+       return false
+}
+
+// Section 12.2.6.4.19.
 func afterBodyIM(p *parser) bool {
        switch p.tok.Type {
        case ErrorToken:
@@ -1688,7 +1891,7 @@ func afterBodyIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.19.
+// Section 12.2.6.4.20.
 func inFramesetIM(p *parser) bool {
        switch p.tok.Type {
        case CommentToken:
@@ -1738,7 +1941,7 @@ func inFramesetIM(p *parser) bool {
        return true
 }
 
-// Section 12.2.5.4.20.
+// Section 12.2.6.4.21.
 func afterFramesetIM(p *parser) bool {
        switch p.tok.Type {
        case CommentToken:
@@ -1777,7 +1980,7 @@ func afterFramesetIM(p *parser) bool {
        return true
 }
 
-// Section 12.2.5.4.21.
+// Section 12.2.6.4.22.
 func afterAfterBodyIM(p *parser) bool {
        switch p.tok.Type {
        case ErrorToken:
@@ -1806,7 +2009,7 @@ func afterAfterBodyIM(p *parser) bool {
        return false
 }
 
-// Section 12.2.5.4.22.
+// Section 12.2.6.4.23.
 func afterAfterFramesetIM(p *parser) bool {
        switch p.tok.Type {
        case CommentToken:
@@ -1844,7 +2047,7 @@ func afterAfterFramesetIM(p *parser) bool {
 
 const whitespaceOrNUL = whitespace + "\x00"
 
-// Section 12.2.5.5.
+// Section 12.2.6.5
 func parseForeignContent(p *parser) bool {
        switch p.tok.Type {
        case TextToken:
@@ -1924,7 +2127,7 @@ func parseForeignContent(p *parser) bool {
        return true
 }
 
-// Section 12.2.5.
+// Section 12.2.6.
 func (p *parser) inForeignContent() bool {
        if len(p.oe) == 0 {
                return false
@@ -2012,6 +2215,15 @@ func (p *parser) parse() error {
 }
 
 // Parse returns the parse tree for the HTML from the given Reader.
+//
+// It implements the HTML5 parsing algorithm
+// (https://html.spec.whatwg.org/multipage/syntax.html#tree-construction),
+// which is very complicated. The resultant tree can contain implicitly created
+// nodes that have no explicit <tag> listed in r's data, and nodes' parents can
+// differ from the nesting implied by a naive processing of start and end
+// <tag>s. Conversely, explicit <tag>s in r's data can be silently dropped,
+// with no corresponding node in the resulting tree.
+//
 // The input is assumed to be UTF-8 encoded.
 func Parse(r io.Reader) (*Node, error) {
        p := &parser{
@@ -2033,6 +2245,8 @@ func Parse(r io.Reader) (*Node, error) {
 // ParseFragment parses a fragment of HTML and returns the nodes that were
 // found. If the fragment is the InnerHTML for an existing element, pass that
 // element in context.
+//
+// It has the same intricacies as Parse.
 func ParseFragment(r io.Reader, context *Node) ([]*Node, error) {
        contextTag := ""
        if context != nil {
@@ -2064,6 +2278,9 @@ func ParseFragment(r io.Reader, context *Node) ([]*Node, error) {
        }
        p.doc.AppendChild(root)
        p.oe = nodeStack{root}
+       if context != nil && context.DataAtom == a.Template {
+               p.templateStack = append(p.templateStack, inTemplateIM)
+       }
        p.resetInsertionMode()
 
        for n := context; n != nil; n = n.Parent {
index 893e272a9e8d7b5f48dac5ef2d9d785231abaa77..e3c01d7c9060b2202713df30e7398e578e45f223 100644 (file)
@@ -1161,8 +1161,8 @@ func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) {
        return nil, nil, false
 }
 
-// Token returns the next Token. The result's Data and Attr values remain valid
-// after subsequent Next calls.
+// Token returns the current Token. The result's Data and Attr values remain
+// valid after subsequent Next calls.
 func (z *Tokenizer) Token() Token {
        t := Token{Type: z.tt}
        switch z.tt {