<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203116] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203116">203116</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2016-07-12 09:43:04 -0700 (Tue, 12 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move MathMLOperatorDictionary from rendering to DOM
https://bugs.webkit.org/show_bug.cgi?id=159619

Patch by Frederic Wang &lt;fwang@igalia.com&gt; on 2016-07-12
Reviewed by Brent Fulgham.

No new tests, behavior is unchanged.

* CMakeLists.txt: Use the new location of MathMLOperatorDictionary files.
* WebCore.xcodeproj/project.pbxproj: Ditto.
* mathml/MathMLAllInOne.cpp: Add MathMLOperatorDictionary.cpp
* mathml/MathMLOperatorDictionary.cpp: Renamed from Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp.
* mathml/MathMLOperatorDictionary.h: Renamed from Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoremathmlMathMLAllInOnecpp">trunk/Source/WebCore/mathml/MathMLAllInOne.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoremathmlMathMLOperatorDictionarycpp">trunk/Source/WebCore/mathml/MathMLOperatorDictionary.cpp</a></li>
<li><a href="#trunkSourceWebCoremathmlMathMLOperatorDictionaryh">trunk/Source/WebCore/mathml/MathMLOperatorDictionary.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorerenderingmathmlMathMLOperatorDictionarycpp">trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlMathMLOperatorDictionaryh">trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -1986,6 +1986,7 @@
</span><span class="cx">     mathml/MathMLInlineContainerElement.cpp
</span><span class="cx">     mathml/MathMLMathElement.cpp
</span><span class="cx">     mathml/MathMLMencloseElement.cpp
</span><ins>+    mathml/MathMLOperatorDictionary.cpp
</ins><span class="cx">     mathml/MathMLSelectElement.cpp
</span><span class="cx">     mathml/MathMLSpaceElement.cpp
</span><span class="cx">     mathml/MathMLTextElement.cpp
</span><span class="lines">@@ -2517,7 +2518,6 @@
</span><span class="cx">     rendering/line/LineWidth.cpp
</span><span class="cx">     rendering/line/TrailingObjects.cpp
</span><span class="cx"> 
</span><del>-    rendering/mathml/MathMLOperatorDictionary.cpp
</del><span class="cx">     rendering/mathml/MathMLStyle.cpp
</span><span class="cx">     rendering/mathml/MathOperator.cpp
</span><span class="cx">     rendering/mathml/RenderMathMLBlock.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/ChangeLog        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-07-12  Frederic Wang  &lt;fwang@igalia.com&gt;
+
+        Move MathMLOperatorDictionary from rendering to DOM
+        https://bugs.webkit.org/show_bug.cgi?id=159619
+
+        Reviewed by Brent Fulgham.
+
+        No new tests, behavior is unchanged.
+
+        * CMakeLists.txt: Use the new location of MathMLOperatorDictionary files.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * mathml/MathMLAllInOne.cpp: Add MathMLOperatorDictionary.cpp
+        * mathml/MathMLOperatorDictionary.cpp: Renamed from Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp.
+        * mathml/MathMLOperatorDictionary.h: Renamed from Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h.
+
</ins><span class="cx"> 2016-07-12  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove ENABLE_CSS3_TEXT_LINE_BREAK flag
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx">                 01E6C2E41194B2820050821C /* SpellingDot@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E6C2E31194B2820050821C /* SpellingDot@2x.png */; };
</span><span class="cx">                 0562F9611573F88F0031CA16 /* PlatformLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0562F9601573F88F0031CA16 /* PlatformLayer.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 05D913CEEAB2A60534218ACF /* MathMLMencloseElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E61C653A64807A83E76FB8 /* MathMLMencloseElement.cpp */; };
</span><ins>+                16EA24CEEAB2A60534218ACF /* MathMLOperatorDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4F72C653A64807A83E76FB8 /* MathMLOperatorDictionary.cpp */; };
</ins><span class="cx">                 05FD69E012845D4300B2BEB3 /* DOMTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 05FD69DF12845D4300B2BEB3 /* DOMTimeStamp.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 06027CAD0B1CBFC000884B2D /* ContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 06027CAC0B1CBFC000884B2D /* ContextMenuItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 062287840B4DB322000C34DF /* FocusDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = 062287830B4DB322000C34DF /* FocusDirection.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1692,9 +1693,7 @@
</span><span class="cx">                 439046DC12DA25E800AF80A2 /* RenderMathMLFraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046C812DA25E800AF80A2 /* RenderMathMLFraction.h */; };
</span><span class="cx">                 439046DD12DA25E800AF80A2 /* RenderMathMLMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046C912DA25E800AF80A2 /* RenderMathMLMath.cpp */; };
</span><span class="cx">                 439046DE12DA25E800AF80A2 /* RenderMathMLMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */; };
</span><del>-                439046DF12DA25E17BAF80A2 /* MathMLOperatorDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CB12DA25E17BAF80A2 /* MathMLOperatorDictionary.cpp */; };
</del><span class="cx">                 439046DF12DA25E800AF80A2 /* RenderMathMLOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */; };
</span><del>-                439046E012DA25E17BAF80A2 /* MathMLOperatorDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CC12DA25E17BAF80A2 /* MathMLOperatorDictionary.h */; };
</del><span class="cx">                 439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */; };
</span><span class="cx">                 439046E112DA25E800AF80A2 /* RenderMathMLRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */; };
</span><span class="cx">                 439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */; };
</span><span class="lines">@@ -9301,9 +9300,7 @@
</span><span class="cx">                 439046C812DA25E800AF80A2 /* RenderMathMLFraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLFraction.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046C912DA25E800AF80A2 /* RenderMathMLMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLMath.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLMath.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                439046CB12DA25E17BAF80A2 /* MathMLOperatorDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLOperatorDictionary.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLOperator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                439046CC12DA25E17BAF80A2 /* MathMLOperatorDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLOperatorDictionary.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLOperator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLRoot.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLRoot.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -14009,6 +14006,7 @@
</span><span class="cx">                 C3CF17A215B0063F00276D39 /* IdTargetObserverRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IdTargetObserverRegistry.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C3CF17A315B0063F00276D39 /* IdTargetObserverRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IdTargetObserverRegistry.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C3E61C653A64807A83E76FB8 /* MathMLMencloseElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLMencloseElement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                D4F72C653A64807A83E76FB8 /* MathMLOperatorDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLOperatorDictionary.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 C400D10818F1C8F60090D863 /* EventLoopInput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventLoopInput.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C4CD629818383766007EBAF1 /* FrameSnapshotting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameSnapshotting.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C4CD629918383766007EBAF1 /* FrameSnapshotting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameSnapshotting.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -14381,6 +14379,7 @@
</span><span class="cx">                 CE2849881CA3614600B4A57F /* ContentSecurityPolicyDirectiveNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContentSecurityPolicyDirectiveNames.cpp; path = csp/ContentSecurityPolicyDirectiveNames.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE5CB1B314EDAB6F00BB2795 /* EventSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventSender.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE6D89294C7AACE0AD89B3DD /* MathMLMencloseElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLMencloseElement.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                DF7E9A294C7AACE0AD89B3DD /* MathMLOperatorDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLOperatorDictionary.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 CE6DADF71C591E6A003F6A88 /* ContentSecurityPolicyResponseHeaders.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContentSecurityPolicyResponseHeaders.cpp; path = csp/ContentSecurityPolicyResponseHeaders.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE6DADF81C591E6A003F6A88 /* ContentSecurityPolicyResponseHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContentSecurityPolicyResponseHeaders.h; path = csp/ContentSecurityPolicyResponseHeaders.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE799F951C6A46BC0097B518 /* ContentSecurityPolicySourceList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContentSecurityPolicySourceList.cpp; path = csp/ContentSecurityPolicySourceList.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -17109,8 +17108,6 @@
</span><span class="cx">                 439046C212DA25CE00AF80A2 /* mathml */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><del>-                                439046CB12DA25E17BAF80A2 /* MathMLOperatorDictionary.cpp */,
-                                439046CC12DA25E17BAF80A2 /* MathMLOperatorDictionary.h */,
</del><span class="cx">                                 439046D512DA25E812AF80AC /* MathOperator.cpp */,
</span><span class="cx">                                 439046D612DA25E812AF80AC /* MathOperator.h */,
</span><span class="cx">                                 439176CB12DA25E17BAF80A2 /* MathMLStyle.cpp */,
</span><span class="lines">@@ -24864,6 +24861,8 @@
</span><span class="cx">                                 FABE72F21059C1EB00D999DD /* MathMLMathElement.h */,
</span><span class="cx">                                 C3E61C653A64807A83E76FB8 /* MathMLMencloseElement.cpp */,
</span><span class="cx">                                 CE6D89294C7AACE0AD89B3DD /* MathMLMencloseElement.h */,
</span><ins>+                                D4F72C653A64807A83E76FB8 /* MathMLOperatorDictionary.cpp */,
+                                DF7E9A294C7AACE0AD89B3DD /* MathMLOperatorDictionary.h */,
</ins><span class="cx">                                 F75A059AF170D8FAA5B8CABE /* MathMLSelectElement.cpp */,
</span><span class="cx">                                 59780849D41E6F65D81198BC /* MathMLSelectElement.h */,
</span><span class="cx">                                 4FA65A691108ABED002615E0 /* MathMLSpaceElement.cpp */,
</span><span class="lines">@@ -27402,7 +27401,6 @@
</span><span class="cx">                                 FABE72F71059C1EB00D999DD /* MathMLInlineContainerElement.h in Headers */,
</span><span class="cx">                                 FABE72F91059C1EB00D999DD /* MathMLMathElement.h in Headers */,
</span><span class="cx">                                 44A28AAF12DFB8BF00AE923B /* MathMLNames.h in Headers */,
</span><del>-                                439046E012DA25E17BAF80A2 /* MathMLOperatorDictionary.h in Headers */,
</del><span class="cx">                                 439176E012DA25E17BAF80A2 /* MathMLStyle.h in Headers */,
</span><span class="cx">                                 4FA65A6C1108ABED002615E0 /* MathMLSpaceElement.h in Headers */,
</span><span class="cx">                                 FA654A6C1108ABED002615E0 /* MathMLTextElement.h in Headers */,
</span><span class="lines">@@ -31224,8 +31222,8 @@
</span><span class="cx">                                 FABE72F61059C1EB00D999DD /* MathMLInlineContainerElement.cpp in Sources */,
</span><span class="cx">                                 FABE72F81059C1EB00D999DD /* MathMLMathElement.cpp in Sources */,
</span><span class="cx">                                 05D913CEEAB2A60534218ACF /* MathMLMencloseElement.cpp in Sources */,
</span><ins>+                                16EA24CEEAB2A60534218ACF /* MathMLOperatorDictionary.cpp in Sources */,
</ins><span class="cx">                                 FABE72FE1059C21100D999DD /* MathMLNames.cpp in Sources */,
</span><del>-                                439046DF12DA25E17BAF80A2 /* MathMLOperatorDictionary.cpp in Sources */,
</del><span class="cx">                                 439176DF12DA25E17BAF80A2 /* MathMLStyle.cpp in Sources */,
</span><span class="cx">                                 FED48390CED66C3255F72C59 /* MathMLSelectElement.cpp in Sources */,
</span><span class="cx">                                 4FA65A6B1108ABED002615E0 /* MathMLSpaceElement.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlMathMLAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/mathml/MathMLAllInOne.cpp (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/MathMLAllInOne.cpp        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/mathml/MathMLAllInOne.cpp        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;MathMLInlineContainerElement.cpp&quot;
</span><span class="cx"> #include &quot;MathMLMathElement.cpp&quot;
</span><span class="cx"> #include &quot;MathMLMencloseElement.cpp&quot;
</span><ins>+#include &quot;MathMLOperatorDictionary.cpp&quot;
</ins><span class="cx"> #include &quot;MathMLSelectElement.cpp&quot;
</span><span class="cx"> #include &quot;MathMLTextElement.cpp&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlMathMLOperatorDictionarycppfromrev203115trunkSourceWebCorerenderingmathmlMathMLOperatorDictionarycpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/mathml/MathMLOperatorDictionary.cpp (from rev 203115, trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp) (0 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/MathMLOperatorDictionary.cpp                                (rev 0)
+++ trunk/Source/WebCore/mathml/MathMLOperatorDictionary.cpp        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -0,0 +1,1118 @@
</span><ins>+/*
+ * Copyright (C) 2015 Frederic Wang (fred.wang@free.fr). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+
+#if ENABLE(MATHML)
+#include &quot;MathMLOperatorDictionary.h&quot;
+
+namespace WebCore {
+
+using namespace MathMLOperatorDictionary;
+
+typedef std::pair&lt;UChar, Form&gt; Key;
+static inline Key ExtractKey(const Entry* entry) { return Key(entry-&gt;character, static_cast&lt;Form&gt;(entry-&gt;form)); }
+static inline UChar ExtractChar(const Entry* entry) { return entry-&gt;character; }
+
+// This table has been automatically generated from the Operator Dictionary of the MathML3 specification (appendix C).
+// Some people use the binary operator &quot;U+2225 PARALLEL TO&quot; as an opening and closing delimiter, so we add the corresponding stretchy prefix and postfix forms.
+static const unsigned dictionarySize = 1041;
+static const Entry dictionary[dictionarySize] = {
+    { 0x21, Postfix, 1, 0, 0}, // EXCLAMATION MARK
+    { 0x25, Infix, 3, 3, 0}, // PERCENT SIGN
+    { 0x26, Postfix, 0, 0, 0}, // AMPERSAND
+    { 0x27, Postfix, 0, 0, Accent}, // APOSTROPHE
+    { 0x28, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT PARENTHESIS
+    { 0x29, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT PARENTHESIS
+    { 0x2A, Infix, 3, 3, 0}, // ASTERISK
+    { 0x2B, Infix, 4, 4, 0}, // PLUS SIGN
+    { 0x2B, Prefix, 0, 1, 0}, // PLUS SIGN
+    { 0x2C, Infix, 0, 3, Separator}, // COMMA
+    { 0x2D, Infix, 4, 4, 0}, // HYPHEN-MINUS
+    { 0x2D, Prefix, 0, 1, 0}, // HYPHEN-MINUS
+    { 0x2E, Infix, 3, 3, 0}, // FULL STOP
+    { 0x2F, Infix, 1, 1, 0}, // SOLIDUS
+    { 0x3A, Infix, 1, 2, 0}, // COLON
+    { 0x3B, Infix, 0, 3, Separator}, // SEMICOLON
+    { 0x3C, Infix, 5, 5, 0}, // LESS-THAN SIGN
+    { 0x3D, Infix, 5, 5, 0}, // EQUALS SIGN
+    { 0x3E, Infix, 5, 5, 0}, // GREATER-THAN SIGN
+    { 0x3F, Infix, 1, 1, 0}, // QUESTION MARK
+    { 0x40, Infix, 1, 1, 0}, // COMMERCIAL AT
+    { 0x5B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET
+    { 0x5C, Infix, 0, 0, 0}, // REVERSE SOLIDUS
+    { 0x5D, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET
+    { 0x5E, Postfix, 0, 0, Accent | Stretchy}, // CIRCUMFLEX ACCENT
+    { 0x5E, Infix, 1, 1, 0}, // CIRCUMFLEX ACCENT
+    { 0x5F, Postfix, 0, 0, Accent | Stretchy}, // LOW LINE
+    { 0x5F, Infix, 1, 1, 0}, // LOW LINE
+    { 0x60, Postfix, 0, 0, Accent}, // GRAVE ACCENT
+    { 0x7B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT CURLY BRACKET
+    { 0x7C, Infix, 2, 2, Stretchy | Symmetric | Fence}, // VERTICAL LINE
+    { 0x7C, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // VERTICAL LINE
+    { 0x7C, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // VERTICAL LINE
+    { 0x7D, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT CURLY BRACKET
+    { 0x7E, Postfix, 0, 0, Accent | Stretchy}, // TILDE
+    { 0xA8, Postfix, 0, 0, Accent}, // DIAERESIS
+    { 0xAC, Prefix, 2, 1, 0}, // NOT SIGN
+    { 0xAF, Postfix, 0, 0, Accent | Stretchy}, // MACRON
+    { 0xB0, Postfix, 0, 0, 0}, // DEGREE SIGN
+    { 0xB1, Infix, 4, 4, 0}, // PLUS-MINUS SIGN
+    { 0xB1, Prefix, 0, 1, 0}, // PLUS-MINUS SIGN
+    { 0xB4, Postfix, 0, 0, Accent}, // ACUTE ACCENT
+    { 0xB7, Infix, 4, 4, 0}, // MIDDLE DOT
+    { 0xB8, Postfix, 0, 0, Accent}, // CEDILLA
+    { 0xD7, Infix, 4, 4, 0}, // MULTIPLICATION SIGN
+    { 0xF7, Infix, 4, 4, 0}, // DIVISION SIGN
+    { 0x2C6, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER CIRCUMFLEX ACCENT
+    { 0x2C7, Postfix, 0, 0, Accent | Stretchy}, // CARON
+    { 0x2C9, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER MACRON
+    { 0x2CA, Postfix, 0, 0, Accent}, // MODIFIER LETTER ACUTE ACCENT
+    { 0x2CB, Postfix, 0, 0, Accent}, // MODIFIER LETTER GRAVE ACCENT
+    { 0x2CD, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER LOW MACRON
+    { 0x2D8, Postfix, 0, 0, Accent}, // BREVE
+    { 0x2D9, Postfix, 0, 0, Accent}, // DOT ABOVE
+    { 0x2DA, Postfix, 0, 0, Accent}, // RING ABOVE
+    { 0x2DC, Postfix, 0, 0, Accent | Stretchy}, // SMALL TILDE
+    { 0x2DD, Postfix, 0, 0, Accent}, // DOUBLE ACUTE ACCENT
+    { 0x2F7, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER LOW TILDE
+    { 0x302, Postfix, 0, 0, Accent | Stretchy}, // COMBINING CIRCUMFLEX ACCENT
+    { 0x311, Postfix, 0, 0, Accent}, // COMBINING INVERTED BREVE
+    { 0x3F6, Infix, 5, 5, 0}, // GREEK REVERSED LUNATE EPSILON SYMBOL
+    { 0x2016, Prefix, 0, 0, Fence | Stretchy}, // DOUBLE VERTICAL LINE
+    { 0x2016, Postfix, 0, 0, Fence | Stretchy}, // DOUBLE VERTICAL LINE
+    { 0x2018, Prefix, 0, 0, Fence}, // LEFT SINGLE QUOTATION MARK
+    { 0x2019, Postfix, 0, 0, Fence}, // RIGHT SINGLE QUOTATION MARK
+    { 0x201C, Prefix, 0, 0, Fence}, // LEFT DOUBLE QUOTATION MARK
+    { 0x201D, Postfix, 0, 0, Fence}, // RIGHT DOUBLE QUOTATION MARK
+    { 0x2022, Infix, 4, 4, 0}, // BULLET
+    { 0x2026, Infix, 0, 0, 0}, // HORIZONTAL ELLIPSIS
+    { 0x2032, Postfix, 0, 2, 0}, // PRIME
+    { 0x203E, Postfix, 0, 0, Accent | Stretchy}, // OVERLINE
+    { 0x2044, Infix, 4, 4, Stretchy}, // FRACTION SLASH
+    { 0x2061, Infix, 0, 0, 0}, // FUNCTION APPLICATION
+    { 0x2062, Infix, 0, 0, 0}, // INVISIBLE TIMES
+    { 0x2063, Infix, 0, 0, Separator}, // INVISIBLE SEPARATOR
+    { 0x2064, Infix, 0, 0, 0}, // INVISIBLE PLUS
+    { 0x20DB, Postfix, 0, 0, Accent}, // COMBINING THREE DOTS ABOVE
+    { 0x20DC, Postfix, 0, 0, Accent}, // COMBINING FOUR DOTS ABOVE
+    { 0x2145, Prefix, 2, 1, 0}, // DOUBLE-STRUCK ITALIC CAPITAL D
+    { 0x2146, Prefix, 2, 0, 0}, // DOUBLE-STRUCK ITALIC SMALL D
+    { 0x2190, Infix, 5, 5, Accent | Stretchy}, // LEFTWARDS ARROW
+    { 0x2191, Infix, 5, 5, Stretchy}, // UPWARDS ARROW
+    { 0x2192, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW
+    { 0x2193, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW
+    { 0x2194, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT ARROW
+    { 0x2195, Infix, 5, 5, Stretchy}, // UP DOWN ARROW
+    { 0x2196, Infix, 5, 5, Stretchy}, // NORTH WEST ARROW
+    { 0x2197, Infix, 5, 5, Stretchy}, // NORTH EAST ARROW
+    { 0x2198, Infix, 5, 5, Stretchy}, // SOUTH EAST ARROW
+    { 0x2199, Infix, 5, 5, Stretchy}, // SOUTH WEST ARROW
+    { 0x219A, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH STROKE
+    { 0x219B, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH STROKE
+    { 0x219C, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS WAVE ARROW
+    { 0x219D, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WAVE ARROW
+    { 0x219E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TWO HEADED ARROW
+    { 0x219F, Infix, 5, 5, Stretchy | Accent}, // UPWARDS TWO HEADED ARROW
+    { 0x21A0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TWO HEADED ARROW
+    { 0x21A1, Infix, 5, 5, Stretchy}, // DOWNWARDS TWO HEADED ARROW
+    { 0x21A2, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH TAIL
+    { 0x21A3, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH TAIL
+    { 0x21A4, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW FROM BAR
+    { 0x21A5, Infix, 5, 5, Stretchy}, // UPWARDS ARROW FROM BAR
+    { 0x21A6, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW FROM BAR
+    { 0x21A7, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW FROM BAR
+    { 0x21A8, Infix, 5, 5, Stretchy}, // UP DOWN ARROW WITH BASE
+    { 0x21A9, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH HOOK
+    { 0x21AA, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH HOOK
+    { 0x21AB, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH LOOP
+    { 0x21AC, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH LOOP
+    { 0x21AD, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT WAVE ARROW
+    { 0x21AE, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH STROKE
+    { 0x21AF, Infix, 5, 5, Stretchy}, // DOWNWARDS ZIGZAG ARROW
+    { 0x21B0, Infix, 5, 5, Stretchy}, // UPWARDS ARROW WITH TIP LEFTWARDS
+    { 0x21B1, Infix, 5, 5, Stretchy}, // UPWARDS ARROW WITH TIP RIGHTWARDS
+    { 0x21B2, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH TIP LEFTWARDS
+    { 0x21B3, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH TIP RIGHTWARDS
+    { 0x21B4, Infix, 5, 5, Stretchy}, // RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+    { 0x21B5, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH CORNER LEFTWARDS
+    { 0x21B6, Infix, 5, 5, Accent}, // ANTICLOCKWISE TOP SEMICIRCLE ARROW
+    { 0x21B7, Infix, 5, 5, Accent}, // CLOCKWISE TOP SEMICIRCLE ARROW
+    { 0x21B8, Infix, 5, 5, 0}, // NORTH WEST ARROW TO LONG BAR
+    { 0x21B9, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+    { 0x21BA, Infix, 5, 5, 0}, // ANTICLOCKWISE OPEN CIRCLE ARROW
+    { 0x21BB, Infix, 5, 5, 0}, // CLOCKWISE OPEN CIRCLE ARROW
+    { 0x21BC, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UPWARDS
+    { 0x21BD, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB DOWNWARDS
+    { 0x21BE, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHTWARDS
+    { 0x21BF, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFTWARDS
+    { 0x21C0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UPWARDS
+    { 0x21C1, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+    { 0x21C2, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+    { 0x21C3, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFTWARDS
+    { 0x21C4, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+    { 0x21C5, Infix, 5, 5, Stretchy}, // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+    { 0x21C6, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+    { 0x21C7, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS PAIRED ARROWS
+    { 0x21C8, Infix, 5, 5, Stretchy}, // UPWARDS PAIRED ARROWS
+    { 0x21C9, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS PAIRED ARROWS
+    { 0x21CA, Infix, 5, 5, Stretchy}, // DOWNWARDS PAIRED ARROWS
+    { 0x21CB, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+    { 0x21CC, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+    { 0x21CD, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW WITH STROKE
+    { 0x21CE, Infix, 5, 5, Accent}, // LEFT RIGHT DOUBLE ARROW WITH STROKE
+    { 0x21CF, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW WITH STROKE
+    { 0x21D0, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DOUBLE ARROW
+    { 0x21D1, Infix, 5, 5, Stretchy}, // UPWARDS DOUBLE ARROW
+    { 0x21D2, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DOUBLE ARROW
+    { 0x21D3, Infix, 5, 5, Stretchy}, // DOWNWARDS DOUBLE ARROW
+    { 0x21D4, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT DOUBLE ARROW
+    { 0x21D5, Infix, 5, 5, Stretchy}, // UP DOWN DOUBLE ARROW
+    { 0x21D6, Infix, 5, 5, Stretchy}, // NORTH WEST DOUBLE ARROW
+    { 0x21D7, Infix, 5, 5, Stretchy}, // NORTH EAST DOUBLE ARROW
+    { 0x21D8, Infix, 5, 5, Stretchy}, // SOUTH EAST DOUBLE ARROW
+    { 0x21D9, Infix, 5, 5, Stretchy}, // SOUTH WEST DOUBLE ARROW
+    { 0x21DA, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TRIPLE ARROW
+    { 0x21DB, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TRIPLE ARROW
+    { 0x21DC, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS SQUIGGLE ARROW
+    { 0x21DD, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS SQUIGGLE ARROW
+    { 0x21DE, Infix, 5, 5, 0}, // UPWARDS ARROW WITH DOUBLE STROKE
+    { 0x21DF, Infix, 5, 5, 0}, // DOWNWARDS ARROW WITH DOUBLE STROKE
+    { 0x21E0, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DASHED ARROW
+    { 0x21E1, Infix, 5, 5, Stretchy}, // UPWARDS DASHED ARROW
+    { 0x21E2, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DASHED ARROW
+    { 0x21E3, Infix, 5, 5, Stretchy}, // DOWNWARDS DASHED ARROW
+    { 0x21E4, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW TO BAR
+    { 0x21E5, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW TO BAR
+    { 0x21E6, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS WHITE ARROW
+    { 0x21E7, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW
+    { 0x21E8, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WHITE ARROW
+    { 0x21E9, Infix, 5, 5, Stretchy}, // DOWNWARDS WHITE ARROW
+    { 0x21EA, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW FROM BAR
+    { 0x21EB, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL
+    { 0x21EC, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+    { 0x21ED, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+    { 0x21EE, Infix, 5, 5, Stretchy}, // UPWARDS WHITE DOUBLE ARROW
+    { 0x21EF, Infix, 5, 5, Stretchy}, // UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+    { 0x21F0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WHITE ARROW FROM WALL
+    { 0x21F1, Infix, 5, 5, 0}, // NORTH WEST ARROW TO CORNER
+    { 0x21F2, Infix, 5, 5, 0}, // SOUTH EAST ARROW TO CORNER
+    { 0x21F3, Infix, 5, 5, Stretchy}, // UP DOWN WHITE ARROW
+    { 0x21F4, Infix, 5, 5, Accent}, // RIGHT ARROW WITH SMALL CIRCLE
+    { 0x21F5, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+    { 0x21F6, Infix, 5, 5, Stretchy | Accent}, // THREE RIGHTWARDS ARROWS
+    { 0x21F7, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH VERTICAL STROKE
+    { 0x21F8, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH VERTICAL STROKE
+    { 0x21F9, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH VERTICAL STROKE
+    { 0x21FA, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+    { 0x21FB, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+    { 0x21FC, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+    { 0x21FD, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS OPEN-HEADED ARROW
+    { 0x21FE, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS OPEN-HEADED ARROW
+    { 0x21FF, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT OPEN-HEADED ARROW
+    { 0x2200, Prefix, 2, 1, 0}, // FOR ALL
+    { 0x2201, Infix, 1, 2, 0}, // COMPLEMENT
+    { 0x2202, Prefix, 2, 1, 0}, // PARTIAL DIFFERENTIAL
+    { 0x2203, Prefix, 2, 1, 0}, // THERE EXISTS
+    { 0x2204, Prefix, 2, 1, 0}, // THERE DOES NOT EXIST
+    { 0x2206, Infix, 3, 3, 0}, // INCREMENT
+    { 0x2207, Prefix, 2, 1, 0}, // NABLA
+    { 0x2208, Infix, 5, 5, 0}, // ELEMENT OF
+    { 0x2209, Infix, 5, 5, 0}, // NOT AN ELEMENT OF
+    { 0x220A, Infix, 5, 5, 0}, // SMALL ELEMENT OF
+    { 0x220B, Infix, 5, 5, 0}, // CONTAINS AS MEMBER
+    { 0x220C, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS MEMBER
+    { 0x220D, Infix, 5, 5, 0}, // SMALL CONTAINS AS MEMBER
+    { 0x220E, Infix, 3, 3, 0}, // END OF PROOF
+    { 0x220F, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY PRODUCT
+    { 0x2210, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY COPRODUCT
+    { 0x2211, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SUMMATION
+    { 0x2212, Infix, 4, 4, 0}, // MINUS SIGN
+    { 0x2212, Prefix, 0, 1, 0}, // MINUS SIGN
+    { 0x2213, Infix, 4, 4, 0}, // MINUS-OR-PLUS SIGN
+    { 0x2213, Prefix, 0, 1, 0}, // MINUS-OR-PLUS SIGN
+    { 0x2214, Infix, 4, 4, 0}, // DOT PLUS
+    { 0x2215, Infix, 4, 4, Stretchy}, // DIVISION SLASH
+    { 0x2216, Infix, 4, 4, 0}, // SET MINUS
+    { 0x2217, Infix, 4, 4, 0}, // ASTERISK OPERATOR
+    { 0x2218, Infix, 4, 4, 0}, // RING OPERATOR
+    { 0x2219, Infix, 4, 4, 0}, // BULLET OPERATOR
+    { 0x221A, Prefix, 1, 1, Stretchy}, // SQUARE ROOT
+    { 0x221B, Prefix, 1, 1, 0}, // CUBE ROOT
+    { 0x221C, Prefix, 1, 1, 0}, // FOURTH ROOT
+    { 0x221D, Infix, 5, 5, 0}, // PROPORTIONAL TO
+    { 0x221F, Infix, 5, 5, 0}, // RIGHT ANGLE
+    { 0x2220, Prefix, 0, 0, 0}, // ANGLE
+    { 0x2221, Prefix, 0, 0, 0}, // MEASURED ANGLE
+    { 0x2222, Prefix, 0, 0, 0}, // SPHERICAL ANGLE
+    { 0x2223, Infix, 5, 5, 0}, // DIVIDES
+    { 0x2224, Infix, 5, 5, 0}, // DOES NOT DIVIDE
+    { 0x2225, Infix, 5, 5, 0}, // PARALLEL TO
+    { 0x2225, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // PARALLEL TO
+    { 0x2225, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // PARALLEL TO
+    { 0x2226, Infix, 5, 5, 0}, // NOT PARALLEL TO
+    { 0x2227, Infix, 4, 4, 0}, // LOGICAL AND
+    { 0x2228, Infix, 4, 4, 0}, // LOGICAL OR
+    { 0x2229, Infix, 4, 4, 0}, // INTERSECTION
+    { 0x222A, Infix, 4, 4, 0}, // UNION
+    { 0x222B, Prefix, 0, 1, Symmetric | LargeOp}, // INTEGRAL
+    { 0x222C, Prefix, 0, 1, Symmetric | LargeOp}, // DOUBLE INTEGRAL
+    { 0x222D, Prefix, 0, 1, Symmetric | LargeOp}, // TRIPLE INTEGRAL
+    { 0x222E, Prefix, 0, 1, Symmetric | LargeOp}, // CONTOUR INTEGRAL
+    { 0x222F, Prefix, 0, 1, Symmetric | LargeOp}, // SURFACE INTEGRAL
+    { 0x2230, Prefix, 0, 1, Symmetric | LargeOp}, // VOLUME INTEGRAL
+    { 0x2231, Prefix, 0, 1, Symmetric | LargeOp}, // CLOCKWISE INTEGRAL
+    { 0x2232, Prefix, 0, 1, Symmetric | LargeOp}, // CLOCKWISE CONTOUR INTEGRAL
+    { 0x2233, Prefix, 0, 1, Symmetric | LargeOp}, // ANTICLOCKWISE CONTOUR INTEGRAL
+    { 0x2234, Infix, 5, 5, 0}, // THEREFORE
+    { 0x2235, Infix, 5, 5, 0}, // BECAUSE
+    { 0x2236, Infix, 5, 5, 0}, // RATIO
+    { 0x2237, Infix, 5, 5, 0}, // PROPORTION
+    { 0x2238, Infix, 4, 4, 0}, // DOT MINUS
+    { 0x2239, Infix, 5, 5, 0}, // EXCESS
+    { 0x223A, Infix, 4, 4, 0}, // GEOMETRIC PROPORTION
+    { 0x223B, Infix, 5, 5, 0}, // HOMOTHETIC
+    { 0x223C, Infix, 5, 5, 0}, // TILDE OPERATOR
+    { 0x223D, Infix, 5, 5, 0}, // REVERSED TILDE
+    { 0x223E, Infix, 5, 5, 0}, // INVERTED LAZY S
+    { 0x223F, Infix, 3, 3, 0}, // SINE WAVE
+    { 0x2240, Infix, 4, 4, 0}, // WREATH PRODUCT
+    { 0x2241, Infix, 5, 5, 0}, // NOT TILDE
+    { 0x2242, Infix, 5, 5, 0}, // MINUS TILDE
+    { 0x2243, Infix, 5, 5, 0}, // ASYMPTOTICALLY EQUAL TO
+    { 0x2244, Infix, 5, 5, 0}, // NOT ASYMPTOTICALLY EQUAL TO
+    { 0x2245, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL TO
+    { 0x2246, Infix, 5, 5, 0}, // APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+    { 0x2247, Infix, 5, 5, 0}, // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+    { 0x2248, Infix, 5, 5, 0}, // ALMOST EQUAL TO
+    { 0x2249, Infix, 5, 5, 0}, // NOT ALMOST EQUAL TO
+    { 0x224A, Infix, 5, 5, 0}, // ALMOST EQUAL OR EQUAL TO
+    { 0x224B, Infix, 5, 5, 0}, // TRIPLE TILDE
+    { 0x224C, Infix, 5, 5, 0}, // ALL EQUAL TO
+    { 0x224D, Infix, 5, 5, 0}, // EQUIVALENT TO
+    { 0x224E, Infix, 5, 5, 0}, // GEOMETRICALLY EQUIVALENT TO
+    { 0x224F, Infix, 5, 5, 0}, // DIFFERENCE BETWEEN
+    { 0x2250, Infix, 5, 5, 0}, // APPROACHES THE LIMIT
+    { 0x2251, Infix, 5, 5, 0}, // GEOMETRICALLY EQUAL TO
+    { 0x2252, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL TO OR THE IMAGE OF
+    { 0x2253, Infix, 5, 5, 0}, // IMAGE OF OR APPROXIMATELY EQUAL TO
+    { 0x2254, Infix, 5, 5, 0}, // COLON EQUALS
+    { 0x2255, Infix, 5, 5, 0}, // EQUALS COLON
+    { 0x2256, Infix, 5, 5, 0}, // RING IN EQUAL TO
+    { 0x2257, Infix, 5, 5, 0}, // RING EQUAL TO
+    { 0x2258, Infix, 5, 5, 0}, // CORRESPONDS TO
+    { 0x2259, Infix, 5, 5, 0}, // ESTIMATES
+    { 0x225A, Infix, 5, 5, 0}, // EQUIANGULAR TO
+    { 0x225C, Infix, 5, 5, 0}, // DELTA EQUAL TO
+    { 0x225D, Infix, 5, 5, 0}, // EQUAL TO BY DEFINITION
+    { 0x225E, Infix, 5, 5, 0}, // MEASURED BY
+    { 0x225F, Infix, 5, 5, 0}, // QUESTIONED EQUAL TO
+    { 0x2260, Infix, 5, 5, 0}, // NOT EQUAL TO
+    { 0x2261, Infix, 5, 5, 0}, // IDENTICAL TO
+    { 0x2262, Infix, 5, 5, 0}, // NOT IDENTICAL TO
+    { 0x2263, Infix, 5, 5, 0}, // STRICTLY EQUIVALENT TO
+    { 0x2264, Infix, 5, 5, 0}, // LESS-THAN OR EQUAL TO
+    { 0x2265, Infix, 5, 5, 0}, // GREATER-THAN OR EQUAL TO
+    { 0x2266, Infix, 5, 5, 0}, // LESS-THAN OVER EQUAL TO
+    { 0x2267, Infix, 5, 5, 0}, // GREATER-THAN OVER EQUAL TO
+    { 0x2268, Infix, 5, 5, 0}, // LESS-THAN BUT NOT EQUAL TO
+    { 0x2269, Infix, 5, 5, 0}, // GREATER-THAN BUT NOT EQUAL TO
+    { 0x226A, Infix, 5, 5, 0}, // MUCH LESS-THAN
+    { 0x226B, Infix, 5, 5, 0}, // MUCH GREATER-THAN
+    { 0x226C, Infix, 5, 5, 0}, // BETWEEN
+    { 0x226D, Infix, 5, 5, 0}, // NOT EQUIVALENT TO
+    { 0x226E, Infix, 5, 5, 0}, // NOT LESS-THAN
+    { 0x226F, Infix, 5, 5, 0}, // NOT GREATER-THAN
+    { 0x2270, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR EQUAL TO
+    { 0x2271, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR EQUAL TO
+    { 0x2272, Infix, 5, 5, 0}, // LESS-THAN OR EQUIVALENT TO
+    { 0x2273, Infix, 5, 5, 0}, // GREATER-THAN OR EQUIVALENT TO
+    { 0x2274, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR EQUIVALENT TO
+    { 0x2275, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR EQUIVALENT TO
+    { 0x2276, Infix, 5, 5, 0}, // LESS-THAN OR GREATER-THAN
+    { 0x2277, Infix, 5, 5, 0}, // GREATER-THAN OR LESS-THAN
+    { 0x2278, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR GREATER-THAN
+    { 0x2279, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR LESS-THAN
+    { 0x227A, Infix, 5, 5, 0}, // PRECEDES
+    { 0x227B, Infix, 5, 5, 0}, // SUCCEEDS
+    { 0x227C, Infix, 5, 5, 0}, // PRECEDES OR EQUAL TO
+    { 0x227D, Infix, 5, 5, 0}, // SUCCEEDS OR EQUAL TO
+    { 0x227E, Infix, 5, 5, 0}, // PRECEDES OR EQUIVALENT TO
+    { 0x227F, Infix, 5, 5, 0}, // SUCCEEDS OR EQUIVALENT TO
+    { 0x2280, Infix, 5, 5, 0}, // DOES NOT PRECEDE
+    { 0x2281, Infix, 5, 5, 0}, // DOES NOT SUCCEED
+    { 0x2282, Infix, 5, 5, 0}, // SUBSET OF
+    { 0x2283, Infix, 5, 5, 0}, // SUPERSET OF
+    { 0x2284, Infix, 5, 5, 0}, // NOT A SUBSET OF
+    { 0x2285, Infix, 5, 5, 0}, // NOT A SUPERSET OF
+    { 0x2286, Infix, 5, 5, 0}, // SUBSET OF OR EQUAL TO
+    { 0x2287, Infix, 5, 5, 0}, // SUPERSET OF OR EQUAL TO
+    { 0x2288, Infix, 5, 5, 0}, // NEITHER A SUBSET OF NOR EQUAL TO
+    { 0x2289, Infix, 5, 5, 0}, // NEITHER A SUPERSET OF NOR EQUAL TO
+    { 0x228A, Infix, 5, 5, 0}, // SUBSET OF WITH NOT EQUAL TO
+    { 0x228B, Infix, 5, 5, 0}, // SUPERSET OF WITH NOT EQUAL TO
+    { 0x228C, Infix, 4, 4, 0}, // MULTISET
+    { 0x228D, Infix, 4, 4, 0}, // MULTISET MULTIPLICATION
+    { 0x228E, Infix, 4, 4, 0}, // MULTISET UNION
+    { 0x228F, Infix, 5, 5, 0}, // SQUARE IMAGE OF
+    { 0x2290, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF
+    { 0x2291, Infix, 5, 5, 0}, // SQUARE IMAGE OF OR EQUAL TO
+    { 0x2292, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF OR EQUAL TO
+    { 0x2293, Infix, 4, 4, 0}, // SQUARE CAP
+    { 0x2294, Infix, 4, 4, 0}, // SQUARE CUP
+    { 0x2295, Infix, 4, 4, 0}, // CIRCLED PLUS
+    { 0x2296, Infix, 4, 4, 0}, // CIRCLED MINUS
+    { 0x2297, Infix, 4, 4, 0}, // CIRCLED TIMES
+    { 0x2298, Infix, 4, 4, 0}, // CIRCLED DIVISION SLASH
+    { 0x2299, Infix, 4, 4, 0}, // CIRCLED DOT OPERATOR
+    { 0x229A, Infix, 4, 4, 0}, // CIRCLED RING OPERATOR
+    { 0x229B, Infix, 4, 4, 0}, // CIRCLED ASTERISK OPERATOR
+    { 0x229C, Infix, 4, 4, 0}, // CIRCLED EQUALS
+    { 0x229D, Infix, 4, 4, 0}, // CIRCLED DASH
+    { 0x229E, Infix, 4, 4, 0}, // SQUARED PLUS
+    { 0x229F, Infix, 4, 4, 0}, // SQUARED MINUS
+    { 0x22A0, Infix, 4, 4, 0}, // SQUARED TIMES
+    { 0x22A1, Infix, 4, 4, 0}, // SQUARED DOT OPERATOR
+    { 0x22A2, Infix, 5, 5, 0}, // RIGHT TACK
+    { 0x22A3, Infix, 5, 5, 0}, // LEFT TACK
+    { 0x22A4, Infix, 5, 5, 0}, // DOWN TACK
+    { 0x22A5, Infix, 5, 5, 0}, // UP TACK
+    { 0x22A6, Infix, 5, 5, 0}, // ASSERTION
+    { 0x22A7, Infix, 5, 5, 0}, // MODELS
+    { 0x22A8, Infix, 5, 5, 0}, // TRUE
+    { 0x22A9, Infix, 5, 5, 0}, // FORCES
+    { 0x22AA, Infix, 5, 5, 0}, // TRIPLE VERTICAL BAR RIGHT TURNSTILE
+    { 0x22AB, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+    { 0x22AC, Infix, 5, 5, 0}, // DOES NOT PROVE
+    { 0x22AD, Infix, 5, 5, 0}, // NOT TRUE
+    { 0x22AE, Infix, 5, 5, 0}, // DOES NOT FORCE
+    { 0x22AF, Infix, 5, 5, 0}, // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+    { 0x22B0, Infix, 5, 5, 0}, // PRECEDES UNDER RELATION
+    { 0x22B1, Infix, 5, 5, 0}, // SUCCEEDS UNDER RELATION
+    { 0x22B2, Infix, 5, 5, 0}, // NORMAL SUBGROUP OF
+    { 0x22B3, Infix, 5, 5, 0}, // CONTAINS AS NORMAL SUBGROUP
+    { 0x22B4, Infix, 5, 5, 0}, // NORMAL SUBGROUP OF OR EQUAL TO
+    { 0x22B5, Infix, 5, 5, 0}, // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+    { 0x22B6, Infix, 5, 5, 0}, // ORIGINAL OF
+    { 0x22B7, Infix, 5, 5, 0}, // IMAGE OF
+    { 0x22B8, Infix, 5, 5, 0}, // MULTIMAP
+    { 0x22B9, Infix, 5, 5, 0}, // HERMITIAN CONJUGATE MATRIX
+    { 0x22BA, Infix, 4, 4, 0}, // INTERCALATE
+    { 0x22BB, Infix, 4, 4, 0}, // XOR
+    { 0x22BC, Infix, 4, 4, 0}, // NAND
+    { 0x22BD, Infix, 4, 4, 0}, // NOR
+    { 0x22BE, Infix, 3, 3, 0}, // RIGHT ANGLE WITH ARC
+    { 0x22BF, Infix, 3, 3, 0}, // RIGHT TRIANGLE
+    { 0x22C0, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY LOGICAL AND
+    { 0x22C1, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY LOGICAL OR
+    { 0x22C2, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY INTERSECTION
+    { 0x22C3, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION
+    { 0x22C4, Infix, 4, 4, 0}, // DIAMOND OPERATOR
+    { 0x22C5, Infix, 4, 4, 0}, // DOT OPERATOR
+    { 0x22C6, Infix, 4, 4, 0}, // STAR OPERATOR
+    { 0x22C7, Infix, 4, 4, 0}, // DIVISION TIMES
+    { 0x22C8, Infix, 5, 5, 0}, // BOWTIE
+    { 0x22C9, Infix, 4, 4, 0}, // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+    { 0x22CA, Infix, 4, 4, 0}, // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+    { 0x22CB, Infix, 4, 4, 0}, // LEFT SEMIDIRECT PRODUCT
+    { 0x22CC, Infix, 4, 4, 0}, // RIGHT SEMIDIRECT PRODUCT
+    { 0x22CD, Infix, 5, 5, 0}, // REVERSED TILDE EQUALS
+    { 0x22CE, Infix, 4, 4, 0}, // CURLY LOGICAL OR
+    { 0x22CF, Infix, 4, 4, 0}, // CURLY LOGICAL AND
+    { 0x22D0, Infix, 5, 5, 0}, // DOUBLE SUBSET
+    { 0x22D1, Infix, 5, 5, 0}, // DOUBLE SUPERSET
+    { 0x22D2, Infix, 4, 4, 0}, // DOUBLE INTERSECTION
+    { 0x22D3, Infix, 4, 4, 0}, // DOUBLE UNION
+    { 0x22D4, Infix, 5, 5, 0}, // PITCHFORK
+    { 0x22D5, Infix, 5, 5, 0}, // EQUAL AND PARALLEL TO
+    { 0x22D6, Infix, 5, 5, 0}, // LESS-THAN WITH DOT
+    { 0x22D7, Infix, 5, 5, 0}, // GREATER-THAN WITH DOT
+    { 0x22D8, Infix, 5, 5, 0}, // VERY MUCH LESS-THAN
+    { 0x22D9, Infix, 5, 5, 0}, // VERY MUCH GREATER-THAN
+    { 0x22DA, Infix, 5, 5, 0}, // LESS-THAN EQUAL TO OR GREATER-THAN
+    { 0x22DB, Infix, 5, 5, 0}, // GREATER-THAN EQUAL TO OR LESS-THAN
+    { 0x22DC, Infix, 5, 5, 0}, // EQUAL TO OR LESS-THAN
+    { 0x22DD, Infix, 5, 5, 0}, // EQUAL TO OR GREATER-THAN
+    { 0x22DE, Infix, 5, 5, 0}, // EQUAL TO OR PRECEDES
+    { 0x22DF, Infix, 5, 5, 0}, // EQUAL TO OR SUCCEEDS
+    { 0x22E0, Infix, 5, 5, 0}, // DOES NOT PRECEDE OR EQUAL
+    { 0x22E1, Infix, 5, 5, 0}, // DOES NOT SUCCEED OR EQUAL
+    { 0x22E2, Infix, 5, 5, 0}, // NOT SQUARE IMAGE OF OR EQUAL TO
+    { 0x22E3, Infix, 5, 5, 0}, // NOT SQUARE ORIGINAL OF OR EQUAL TO
+    { 0x22E4, Infix, 5, 5, 0}, // SQUARE IMAGE OF OR NOT EQUAL TO
+    { 0x22E5, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF OR NOT EQUAL TO
+    { 0x22E6, Infix, 5, 5, 0}, // LESS-THAN BUT NOT EQUIVALENT TO
+    { 0x22E7, Infix, 5, 5, 0}, // GREATER-THAN BUT NOT EQUIVALENT TO
+    { 0x22E8, Infix, 5, 5, 0}, // PRECEDES BUT NOT EQUIVALENT TO
+    { 0x22E9, Infix, 5, 5, 0}, // SUCCEEDS BUT NOT EQUIVALENT TO
+    { 0x22EA, Infix, 5, 5, 0}, // NOT NORMAL SUBGROUP OF
+    { 0x22EB, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS NORMAL SUBGROUP
+    { 0x22EC, Infix, 5, 5, 0}, // NOT NORMAL SUBGROUP OF OR EQUAL TO
+    { 0x22ED, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+    { 0x22EE, Infix, 5, 5, 0}, // VERTICAL ELLIPSIS
+    { 0x22EF, Infix, 0, 0, 0}, // MIDLINE HORIZONTAL ELLIPSIS
+    { 0x22F0, Infix, 5, 5, 0}, // UP RIGHT DIAGONAL ELLIPSIS
+    { 0x22F1, Infix, 5, 5, 0}, // DOWN RIGHT DIAGONAL ELLIPSIS
+    { 0x22F2, Infix, 5, 5, 0}, // ELEMENT OF WITH LONG HORIZONTAL STROKE
+    { 0x22F3, Infix, 5, 5, 0}, // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+    { 0x22F4, Infix, 5, 5, 0}, // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+    { 0x22F5, Infix, 5, 5, 0}, // ELEMENT OF WITH DOT ABOVE
+    { 0x22F6, Infix, 5, 5, 0}, // ELEMENT OF WITH OVERBAR
+    { 0x22F7, Infix, 5, 5, 0}, // SMALL ELEMENT OF WITH OVERBAR
+    { 0x22F8, Infix, 5, 5, 0}, // ELEMENT OF WITH UNDERBAR
+    { 0x22F9, Infix, 5, 5, 0}, // ELEMENT OF WITH TWO HORIZONTAL STROKES
+    { 0x22FA, Infix, 5, 5, 0}, // CONTAINS WITH LONG HORIZONTAL STROKE
+    { 0x22FB, Infix, 5, 5, 0}, // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+    { 0x22FC, Infix, 5, 5, 0}, // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+    { 0x22FD, Infix, 5, 5, 0}, // CONTAINS WITH OVERBAR
+    { 0x22FE, Infix, 5, 5, 0}, // SMALL CONTAINS WITH OVERBAR
+    { 0x22FF, Infix, 5, 5, 0}, // Z NOTATION BAG MEMBERSHIP
+    { 0x2308, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT CEILING
+    { 0x2309, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT CEILING
+    { 0x230A, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT FLOOR
+    { 0x230B, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT FLOOR
+    { 0x23B4, Postfix, 0, 0, Accent | Stretchy}, // TOP SQUARE BRACKET
+    { 0x23B5, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM SQUARE BRACKET
+    { 0x23DC, Postfix, 0, 0, Accent | Stretchy}, // TOP PARENTHESIS
+    { 0x23DD, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM PARENTHESIS
+    { 0x23DE, Postfix, 0, 0, Accent | Stretchy}, // TOP CURLY BRACKET
+    { 0x23DF, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM CURLY BRACKET
+    { 0x23E0, Postfix, 0, 0, Accent | Stretchy}, // TOP TORTOISE SHELL BRACKET
+    { 0x23E1, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM TORTOISE SHELL BRACKET
+    { 0x25A0, Infix, 3, 3, 0}, // BLACK SQUARE
+    { 0x25A1, Infix, 3, 3, 0}, // WHITE SQUARE
+    { 0x25AA, Infix, 3, 3, 0}, // BLACK SMALL SQUARE
+    { 0x25AB, Infix, 3, 3, 0}, // WHITE SMALL SQUARE
+    { 0x25AD, Infix, 3, 3, 0}, // WHITE RECTANGLE
+    { 0x25AE, Infix, 3, 3, 0}, // BLACK VERTICAL RECTANGLE
+    { 0x25AF, Infix, 3, 3, 0}, // WHITE VERTICAL RECTANGLE
+    { 0x25B0, Infix, 3, 3, 0}, // BLACK PARALLELOGRAM
+    { 0x25B1, Infix, 3, 3, 0}, // WHITE PARALLELOGRAM
+    { 0x25B2, Infix, 4, 4, 0}, // BLACK UP-POINTING TRIANGLE
+    { 0x25B3, Infix, 4, 4, 0}, // WHITE UP-POINTING TRIANGLE
+    { 0x25B4, Infix, 4, 4, 0}, // BLACK UP-POINTING SMALL TRIANGLE
+    { 0x25B5, Infix, 4, 4, 0}, // WHITE UP-POINTING SMALL TRIANGLE
+    { 0x25B6, Infix, 4, 4, 0}, // BLACK RIGHT-POINTING TRIANGLE
+    { 0x25B7, Infix, 4, 4, 0}, // WHITE RIGHT-POINTING TRIANGLE
+    { 0x25B8, Infix, 4, 4, 0}, // BLACK RIGHT-POINTING SMALL TRIANGLE
+    { 0x25B9, Infix, 4, 4, 0}, // WHITE RIGHT-POINTING SMALL TRIANGLE
+    { 0x25BC, Infix, 4, 4, 0}, // BLACK DOWN-POINTING TRIANGLE
+    { 0x25BD, Infix, 4, 4, 0}, // WHITE DOWN-POINTING TRIANGLE
+    { 0x25BE, Infix, 4, 4, 0}, // BLACK DOWN-POINTING SMALL TRIANGLE
+    { 0x25BF, Infix, 4, 4, 0}, // WHITE DOWN-POINTING SMALL TRIANGLE
+    { 0x25C0, Infix, 4, 4, 0}, // BLACK LEFT-POINTING TRIANGLE
+    { 0x25C1, Infix, 4, 4, 0}, // WHITE LEFT-POINTING TRIANGLE
+    { 0x25C2, Infix, 4, 4, 0}, // BLACK LEFT-POINTING SMALL TRIANGLE
+    { 0x25C3, Infix, 4, 4, 0}, // WHITE LEFT-POINTING SMALL TRIANGLE
+    { 0x25C4, Infix, 4, 4, 0}, // BLACK LEFT-POINTING POINTER
+    { 0x25C5, Infix, 4, 4, 0}, // WHITE LEFT-POINTING POINTER
+    { 0x25C6, Infix, 4, 4, 0}, // BLACK DIAMOND
+    { 0x25C7, Infix, 4, 4, 0}, // WHITE DIAMOND
+    { 0x25C8, Infix, 4, 4, 0}, // WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+    { 0x25C9, Infix, 4, 4, 0}, // FISHEYE
+    { 0x25CC, Infix, 4, 4, 0}, // DOTTED CIRCLE
+    { 0x25CD, Infix, 4, 4, 0}, // CIRCLE WITH VERTICAL FILL
+    { 0x25CE, Infix, 4, 4, 0}, // BULLSEYE
+    { 0x25CF, Infix, 4, 4, 0}, // BLACK CIRCLE
+    { 0x25D6, Infix, 4, 4, 0}, // LEFT HALF BLACK CIRCLE
+    { 0x25D7, Infix, 4, 4, 0}, // RIGHT HALF BLACK CIRCLE
+    { 0x25E6, Infix, 4, 4, 0}, // WHITE BULLET
+    { 0x266D, Postfix, 0, 2, 0}, // MUSIC FLAT SIGN
+    { 0x266E, Postfix, 0, 2, 0}, // MUSIC NATURAL SIGN
+    { 0x266F, Postfix, 0, 2, 0}, // MUSIC SHARP SIGN
+    { 0x2758, Infix, 5, 5, 0}, // LIGHT VERTICAL BAR
+    { 0x2772, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+    { 0x2773, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+    { 0x27E6, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT WHITE SQUARE BRACKET
+    { 0x27E7, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+    { 0x27E8, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT ANGLE BRACKET
+    { 0x27E9, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT ANGLE BRACKET
+    { 0x27EA, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+    { 0x27EB, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+    { 0x27EC, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+    { 0x27ED, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+    { 0x27EE, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT FLATTENED PARENTHESIS
+    { 0x27EF, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+    { 0x27F0, Infix, 5, 5, Stretchy}, // UPWARDS QUADRUPLE ARROW
+    { 0x27F1, Infix, 5, 5, Stretchy}, // DOWNWARDS QUADRUPLE ARROW
+    { 0x27F5, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS ARROW
+    { 0x27F6, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS ARROW
+    { 0x27F7, Infix, 5, 5, Stretchy | Accent}, // LONG LEFT RIGHT ARROW
+    { 0x27F8, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS DOUBLE ARROW
+    { 0x27F9, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS DOUBLE ARROW
+    { 0x27FA, Infix, 5, 5, Stretchy | Accent}, // LONG LEFT RIGHT DOUBLE ARROW
+    { 0x27FB, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS ARROW FROM BAR
+    { 0x27FC, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS ARROW FROM BAR
+    { 0x27FD, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS DOUBLE ARROW FROM BAR
+    { 0x27FE, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+    { 0x27FF, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS SQUIGGLE ARROW
+    { 0x2900, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+    { 0x2901, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+    { 0x2902, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+    { 0x2903, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+    { 0x2904, Infix, 5, 5, Accent}, // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+    { 0x2905, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW FROM BAR
+    { 0x2906, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW FROM BAR
+    { 0x2907, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW FROM BAR
+    { 0x2908, Infix, 5, 5, 0}, // DOWNWARDS ARROW WITH HORIZONTAL STROKE
+    { 0x2909, Infix, 5, 5, 0}, // UPWARDS ARROW WITH HORIZONTAL STROKE
+    { 0x290A, Infix, 5, 5, Stretchy}, // UPWARDS TRIPLE ARROW
+    { 0x290B, Infix, 5, 5, Stretchy}, // DOWNWARDS TRIPLE ARROW
+    { 0x290C, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DOUBLE DASH ARROW
+    { 0x290D, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DOUBLE DASH ARROW
+    { 0x290E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TRIPLE DASH ARROW
+    { 0x290F, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TRIPLE DASH ARROW
+    { 0x2910, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+    { 0x2911, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH DOTTED STEM
+    { 0x2912, Infix, 5, 5, Stretchy}, // UPWARDS ARROW TO BAR
+    { 0x2913, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW TO BAR
+    { 0x2914, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+    { 0x2915, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+    { 0x2916, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+    { 0x2917, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+    { 0x2918, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+    { 0x2919, Infix, 5, 5, Accent}, // LEFTWARDS ARROW-TAIL
+    { 0x291A, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW-TAIL
+    { 0x291B, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW-TAIL
+    { 0x291C, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW-TAIL
+    { 0x291D, Infix, 5, 5, Accent}, // LEFTWARDS ARROW TO BLACK DIAMOND
+    { 0x291E, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW TO BLACK DIAMOND
+    { 0x291F, Infix, 5, 5, Accent}, // LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+    { 0x2920, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+    { 0x2921, Infix, 5, 5, Stretchy}, // NORTH WEST AND SOUTH EAST ARROW
+    { 0x2922, Infix, 5, 5, Stretchy}, // NORTH EAST AND SOUTH WEST ARROW
+    { 0x2923, Infix, 5, 5, 0}, // NORTH WEST ARROW WITH HOOK
+    { 0x2924, Infix, 5, 5, 0}, // NORTH EAST ARROW WITH HOOK
+    { 0x2925, Infix, 5, 5, 0}, // SOUTH EAST ARROW WITH HOOK
+    { 0x2926, Infix, 5, 5, 0}, // SOUTH WEST ARROW WITH HOOK
+    { 0x2927, Infix, 5, 5, 0}, // NORTH WEST ARROW AND NORTH EAST ARROW
+    { 0x2928, Infix, 5, 5, 0}, // NORTH EAST ARROW AND SOUTH EAST ARROW
+    { 0x2929, Infix, 5, 5, 0}, // SOUTH EAST ARROW AND SOUTH WEST ARROW
+    { 0x292A, Infix, 5, 5, 0}, // SOUTH WEST ARROW AND NORTH WEST ARROW
+    { 0x292B, Infix, 5, 5, 0}, // RISING DIAGONAL CROSSING FALLING DIAGONAL
+    { 0x292C, Infix, 5, 5, 0}, // FALLING DIAGONAL CROSSING RISING DIAGONAL
+    { 0x292D, Infix, 5, 5, 0}, // SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+    { 0x292E, Infix, 5, 5, 0}, // NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+    { 0x292F, Infix, 5, 5, 0}, // FALLING DIAGONAL CROSSING NORTH EAST ARROW
+    { 0x2930, Infix, 5, 5, 0}, // RISING DIAGONAL CROSSING SOUTH EAST ARROW
+    { 0x2931, Infix, 5, 5, 0}, // NORTH EAST ARROW CROSSING NORTH WEST ARROW
+    { 0x2932, Infix, 5, 5, 0}, // NORTH WEST ARROW CROSSING NORTH EAST ARROW
+    { 0x2933, Infix, 5, 5, Accent}, // WAVE ARROW POINTING DIRECTLY RIGHT
+    { 0x2934, Infix, 5, 5, 0}, // ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+    { 0x2935, Infix, 5, 5, 0}, // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+    { 0x2936, Infix, 5, 5, 0}, // ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+    { 0x2937, Infix, 5, 5, 0}, // ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+    { 0x2938, Infix, 5, 5, 0}, // RIGHT-SIDE ARC CLOCKWISE ARROW
+    { 0x2939, Infix, 5, 5, 0}, // LEFT-SIDE ARC ANTICLOCKWISE ARROW
+    { 0x293A, Infix, 5, 5, Accent}, // TOP ARC ANTICLOCKWISE ARROW
+    { 0x293B, Infix, 5, 5, Accent}, // BOTTOM ARC ANTICLOCKWISE ARROW
+    { 0x293C, Infix, 5, 5, Accent}, // TOP ARC CLOCKWISE ARROW WITH MINUS
+    { 0x293D, Infix, 5, 5, Accent}, // TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+    { 0x293E, Infix, 5, 5, 0}, // LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+    { 0x293F, Infix, 5, 5, 0}, // LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+    { 0x2940, Infix, 5, 5, 0}, // ANTICLOCKWISE CLOSED CIRCLE ARROW
+    { 0x2941, Infix, 5, 5, 0}, // CLOCKWISE CLOSED CIRCLE ARROW
+    { 0x2942, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+    { 0x2943, Infix, 5, 5, Accent}, // LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+    { 0x2944, Infix, 5, 5, Accent}, // SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+    { 0x2945, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH PLUS BELOW
+    { 0x2946, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH PLUS BELOW
+    { 0x2947, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW THROUGH X
+    { 0x2948, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+    { 0x2949, Infix, 5, 5, 0}, // UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+    { 0x294A, Infix, 5, 5, Accent}, // LEFT BARB UP RIGHT BARB DOWN HARPOON
+    { 0x294B, Infix, 5, 5, Accent}, // LEFT BARB DOWN RIGHT BARB UP HARPOON
+    { 0x294C, Infix, 5, 5, 0}, // UP BARB RIGHT DOWN BARB LEFT HARPOON
+    { 0x294D, Infix, 5, 5, 0}, // UP BARB LEFT DOWN BARB RIGHT HARPOON
+    { 0x294E, Infix, 5, 5, Stretchy | Accent}, // LEFT BARB UP RIGHT BARB UP HARPOON
+    { 0x294F, Infix, 5, 5, Stretchy}, // UP BARB RIGHT DOWN BARB RIGHT HARPOON
+    { 0x2950, Infix, 5, 5, Stretchy | Accent}, // LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+    { 0x2951, Infix, 5, 5, Stretchy}, // UP BARB LEFT DOWN BARB LEFT HARPOON
+    { 0x2952, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UP TO BAR
+    { 0x2953, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UP TO BAR
+    { 0x2954, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHT TO BAR
+    { 0x2955, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+    { 0x2956, Infix, 5, 5, Stretchy}, // LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+    { 0x2957, Infix, 5, 5, Stretchy}, // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+    { 0x2958, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT TO BAR
+    { 0x2959, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+    { 0x295A, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UP FROM BAR
+    { 0x295B, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+    { 0x295C, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+    { 0x295D, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+    { 0x295E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+    { 0x295F, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+    { 0x2960, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT FROM BAR
+    { 0x2961, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+    { 0x2962, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+    { 0x2963, Infix, 5, 5, 0}, // UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+    { 0x2964, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+    { 0x2965, Infix, 5, 5, 0}, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+    { 0x2966, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+    { 0x2967, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+    { 0x2968, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+    { 0x2969, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+    { 0x296A, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+    { 0x296B, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+    { 0x296C, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+    { 0x296D, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+    { 0x296E, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+    { 0x296F, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+    { 0x2970, Infix, 5, 5, Accent}, // RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+    { 0x2971, Infix, 5, 5, Accent}, // EQUALS SIGN ABOVE RIGHTWARDS ARROW
+    { 0x2972, Infix, 5, 5, Accent}, // TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+    { 0x2973, Infix, 5, 5, Accent}, // LEFTWARDS ARROW ABOVE TILDE OPERATOR
+    { 0x2974, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+    { 0x2975, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+    { 0x2976, Infix, 5, 5, Accent}, // LESS-THAN ABOVE LEFTWARDS ARROW
+    { 0x2977, Infix, 5, 5, Accent}, // LEFTWARDS ARROW THROUGH LESS-THAN
+    { 0x2978, Infix, 5, 5, Accent}, // GREATER-THAN ABOVE RIGHTWARDS ARROW
+    { 0x2979, Infix, 5, 5, Accent}, // SUBSET ABOVE RIGHTWARDS ARROW
+    { 0x297A, Infix, 5, 5, Accent}, // LEFTWARDS ARROW THROUGH SUBSET
+    { 0x297B, Infix, 5, 5, Accent}, // SUPERSET ABOVE LEFTWARDS ARROW
+    { 0x297C, Infix, 5, 5, Accent}, // LEFT FISH TAIL
+    { 0x297D, Infix, 5, 5, Accent}, // RIGHT FISH TAIL
+    { 0x297E, Infix, 5, 5, 0}, // UP FISH TAIL
+    { 0x297F, Infix, 5, 5, 0}, // DOWN FISH TAIL
+    { 0x2980, Prefix, 0, 0, Fence | Stretchy}, // TRIPLE VERTICAL BAR DELIMITER
+    { 0x2980, Postfix, 0, 0, Fence | Stretchy}, // TRIPLE VERTICAL BAR DELIMITER
+    { 0x2981, Infix, 3, 3, 0}, // Z NOTATION SPOT
+    { 0x2982, Infix, 3, 3, 0}, // Z NOTATION TYPE COLON
+    { 0x2983, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT WHITE CURLY BRACKET
+    { 0x2984, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT WHITE CURLY BRACKET
+    { 0x2985, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT WHITE PARENTHESIS
+    { 0x2986, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT WHITE PARENTHESIS
+    { 0x2987, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION LEFT IMAGE BRACKET
+    { 0x2988, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION RIGHT IMAGE BRACKET
+    { 0x2989, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION LEFT BINDING BRACKET
+    { 0x298A, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION RIGHT BINDING BRACKET
+    { 0x298B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH UNDERBAR
+    { 0x298C, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH UNDERBAR
+    { 0x298D, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+    { 0x298E, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+    { 0x298F, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+    { 0x2990, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+    { 0x2991, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT ANGLE BRACKET WITH DOT
+    { 0x2992, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT ANGLE BRACKET WITH DOT
+    { 0x2993, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT ARC LESS-THAN BRACKET
+    { 0x2994, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT ARC GREATER-THAN BRACKET
+    { 0x2995, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // DOUBLE LEFT ARC GREATER-THAN BRACKET
+    { 0x2996, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // DOUBLE RIGHT ARC LESS-THAN BRACKET
+    { 0x2997, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT BLACK TORTOISE SHELL BRACKET
+    { 0x2998, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT BLACK TORTOISE SHELL BRACKET
+    { 0x2999, Infix, 3, 3, 0}, // DOTTED FENCE
+    { 0x299A, Infix, 3, 3, 0}, // VERTICAL ZIGZAG LINE
+    { 0x299B, Infix, 3, 3, 0}, // MEASURED ANGLE OPENING LEFT
+    { 0x299C, Infix, 3, 3, 0}, // RIGHT ANGLE VARIANT WITH SQUARE
+    { 0x299D, Infix, 3, 3, 0}, // MEASURED RIGHT ANGLE WITH DOT
+    { 0x299E, Infix, 3, 3, 0}, // ANGLE WITH S INSIDE
+    { 0x299F, Infix, 3, 3, 0}, // ACUTE ANGLE
+    { 0x29A0, Infix, 3, 3, 0}, // SPHERICAL ANGLE OPENING LEFT
+    { 0x29A1, Infix, 3, 3, 0}, // SPHERICAL ANGLE OPENING UP
+    { 0x29A2, Infix, 3, 3, 0}, // TURNED ANGLE
+    { 0x29A3, Infix, 3, 3, 0}, // REVERSED ANGLE
+    { 0x29A4, Infix, 3, 3, 0}, // ANGLE WITH UNDERBAR
+    { 0x29A5, Infix, 3, 3, 0}, // REVERSED ANGLE WITH UNDERBAR
+    { 0x29A6, Infix, 3, 3, 0}, // OBLIQUE ANGLE OPENING UP
+    { 0x29A7, Infix, 3, 3, 0}, // OBLIQUE ANGLE OPENING DOWN
+    { 0x29A8, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+    { 0x29A9, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+    { 0x29AA, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+    { 0x29AB, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+    { 0x29AC, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+    { 0x29AD, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+    { 0x29AE, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+    { 0x29AF, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+    { 0x29B0, Infix, 3, 3, 0}, // REVERSED EMPTY SET
+    { 0x29B1, Infix, 3, 3, 0}, // EMPTY SET WITH OVERBAR
+    { 0x29B2, Infix, 3, 3, 0}, // EMPTY SET WITH SMALL CIRCLE ABOVE
+    { 0x29B3, Infix, 3, 3, 0}, // EMPTY SET WITH RIGHT ARROW ABOVE
+    { 0x29B4, Infix, 3, 3, 0}, // EMPTY SET WITH LEFT ARROW ABOVE
+    { 0x29B5, Infix, 3, 3, 0}, // CIRCLE WITH HORIZONTAL BAR
+    { 0x29B6, Infix, 4, 4, 0}, // CIRCLED VERTICAL BAR
+    { 0x29B7, Infix, 4, 4, 0}, // CIRCLED PARALLEL
+    { 0x29B8, Infix, 4, 4, 0}, // CIRCLED REVERSE SOLIDUS
+    { 0x29B9, Infix, 4, 4, 0}, // CIRCLED PERPENDICULAR
+    { 0x29BA, Infix, 4, 4, 0}, // CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+    { 0x29BB, Infix, 4, 4, 0}, // CIRCLE WITH SUPERIMPOSED X
+    { 0x29BC, Infix, 4, 4, 0}, // CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+    { 0x29BD, Infix, 4, 4, 0}, // UP ARROW THROUGH CIRCLE
+    { 0x29BE, Infix, 4, 4, 0}, // CIRCLED WHITE BULLET
+    { 0x29BF, Infix, 4, 4, 0}, // CIRCLED BULLET
+    { 0x29C0, Infix, 5, 5, 0}, // CIRCLED LESS-THAN
+    { 0x29C1, Infix, 5, 5, 0}, // CIRCLED GREATER-THAN
+    { 0x29C2, Infix, 3, 3, 0}, // CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+    { 0x29C3, Infix, 3, 3, 0}, // CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+    { 0x29C4, Infix, 4, 4, 0}, // SQUARED RISING DIAGONAL SLASH
+    { 0x29C5, Infix, 4, 4, 0}, // SQUARED FALLING DIAGONAL SLASH
+    { 0x29C6, Infix, 4, 4, 0}, // SQUARED ASTERISK
+    { 0x29C7, Infix, 4, 4, 0}, // SQUARED SMALL CIRCLE
+    { 0x29C8, Infix, 4, 4, 0}, // SQUARED SQUARE
+    { 0x29C9, Infix, 3, 3, 0}, // TWO JOINED SQUARES
+    { 0x29CA, Infix, 3, 3, 0}, // TRIANGLE WITH DOT ABOVE
+    { 0x29CB, Infix, 3, 3, 0}, // TRIANGLE WITH UNDERBAR
+    { 0x29CC, Infix, 3, 3, 0}, // S IN TRIANGLE
+    { 0x29CD, Infix, 3, 3, 0}, // TRIANGLE WITH SERIFS AT BOTTOM
+    { 0x29CE, Infix, 5, 5, 0}, // RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+    { 0x29CF, Infix, 5, 5, 0}, // LEFT TRIANGLE BESIDE VERTICAL BAR
+    { 0x29D0, Infix, 5, 5, 0}, // VERTICAL BAR BESIDE RIGHT TRIANGLE
+    { 0x29D1, Infix, 5, 5, 0}, // BOWTIE WITH LEFT HALF BLACK
+    { 0x29D2, Infix, 5, 5, 0}, // BOWTIE WITH RIGHT HALF BLACK
+    { 0x29D3, Infix, 5, 5, 0}, // BLACK BOWTIE
+    { 0x29D4, Infix, 5, 5, 0}, // TIMES WITH LEFT HALF BLACK
+    { 0x29D5, Infix, 5, 5, 0}, // TIMES WITH RIGHT HALF BLACK
+    { 0x29D6, Infix, 4, 4, 0}, // WHITE HOURGLASS
+    { 0x29D7, Infix, 4, 4, 0}, // BLACK HOURGLASS
+    { 0x29D8, Infix, 3, 3, 0}, // LEFT WIGGLY FENCE
+    { 0x29D9, Infix, 3, 3, 0}, // RIGHT WIGGLY FENCE
+    { 0x29DB, Infix, 3, 3, 0}, // RIGHT DOUBLE WIGGLY FENCE
+    { 0x29DC, Infix, 3, 3, 0}, // INCOMPLETE INFINITY
+    { 0x29DD, Infix, 3, 3, 0}, // TIE OVER INFINITY
+    { 0x29DE, Infix, 5, 5, 0}, // INFINITY NEGATED WITH VERTICAL BAR
+    { 0x29DF, Infix, 3, 3, 0}, // DOUBLE-ENDED MULTIMAP
+    { 0x29E0, Infix, 3, 3, 0}, // SQUARE WITH CONTOURED OUTLINE
+    { 0x29E1, Infix, 5, 5, 0}, // INCREASES AS
+    { 0x29E2, Infix, 4, 4, 0}, // SHUFFLE PRODUCT
+    { 0x29E3, Infix, 5, 5, 0}, // EQUALS SIGN AND SLANTED PARALLEL
+    { 0x29E4, Infix, 5, 5, 0}, // EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+    { 0x29E5, Infix, 5, 5, 0}, // IDENTICAL TO AND SLANTED PARALLEL
+    { 0x29E6, Infix, 5, 5, 0}, // GLEICH STARK
+    { 0x29E7, Infix, 3, 3, 0}, // THERMODYNAMIC
+    { 0x29E8, Infix, 3, 3, 0}, // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+    { 0x29E9, Infix, 3, 3, 0}, // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+    { 0x29EA, Infix, 3, 3, 0}, // BLACK DIAMOND WITH DOWN ARROW
+    { 0x29EB, Infix, 3, 3, 0}, // BLACK LOZENGE
+    { 0x29EC, Infix, 3, 3, 0}, // WHITE CIRCLE WITH DOWN ARROW
+    { 0x29ED, Infix, 3, 3, 0}, // BLACK CIRCLE WITH DOWN ARROW
+    { 0x29EE, Infix, 3, 3, 0}, // ERROR-BARRED WHITE SQUARE
+    { 0x29EF, Infix, 3, 3, 0}, // ERROR-BARRED BLACK SQUARE
+    { 0x29F0, Infix, 3, 3, 0}, // ERROR-BARRED WHITE DIAMOND
+    { 0x29F1, Infix, 3, 3, 0}, // ERROR-BARRED BLACK DIAMOND
+    { 0x29F2, Infix, 3, 3, 0}, // ERROR-BARRED WHITE CIRCLE
+    { 0x29F3, Infix, 3, 3, 0}, // ERROR-BARRED BLACK CIRCLE
+    { 0x29F4, Infix, 5, 5, 0}, // RULE-DELAYED
+    { 0x29F5, Infix, 4, 4, 0}, // REVERSE SOLIDUS OPERATOR
+    { 0x29F6, Infix, 4, 4, 0}, // SOLIDUS WITH OVERBAR
+    { 0x29F7, Infix, 4, 4, 0}, // REVERSE SOLIDUS WITH HORIZONTAL STROKE
+    { 0x29F8, Infix, 3, 3, 0}, // BIG SOLIDUS
+    { 0x29F9, Infix, 3, 3, 0}, // BIG REVERSE SOLIDUS
+    { 0x29FA, Infix, 3, 3, 0}, // DOUBLE PLUS
+    { 0x29FB, Infix, 3, 3, 0}, // TRIPLE PLUS
+    { 0x29FC, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT-POINTING CURVED ANGLE BRACKET
+    { 0x29FD, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT-POINTING CURVED ANGLE BRACKET
+    { 0x29FE, Infix, 4, 4, 0}, // TINY
+    { 0x29FF, Infix, 4, 4, 0}, // MINY
+    { 0x2A00, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED DOT OPERATOR
+    { 0x2A01, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED PLUS OPERATOR
+    { 0x2A02, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED TIMES OPERATOR
+    { 0x2A03, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION OPERATOR WITH DOT
+    { 0x2A04, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION OPERATOR WITH PLUS
+    { 0x2A05, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SQUARE INTERSECTION OPERATOR
+    { 0x2A06, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SQUARE UNION OPERATOR
+    { 0x2A07, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // TWO LOGICAL AND OPERATOR
+    { 0x2A08, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // TWO LOGICAL OR OPERATOR
+    { 0x2A09, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY TIMES OPERATOR
+    { 0x2A0A, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // MODULO TWO SUM
+    { 0x2A0B, Prefix, 1, 2, Symmetric | LargeOp}, // SUMMATION WITH INTEGRAL
+    { 0x2A0C, Prefix, 0, 1, Symmetric | LargeOp}, // QUADRUPLE INTEGRAL OPERATOR
+    { 0x2A0D, Prefix, 1, 2, Symmetric | LargeOp}, // FINITE PART INTEGRAL
+    { 0x2A0E, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH DOUBLE STROKE
+    { 0x2A0F, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL AVERAGE WITH SLASH
+    { 0x2A10, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // CIRCULATION FUNCTION
+    { 0x2A11, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // ANTICLOCKWISE INTEGRATION
+    { 0x2A12, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+    { 0x2A13, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+    { 0x2A14, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION NOT INCLUDING THE POLE
+    { 0x2A15, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL AROUND A POINT OPERATOR
+    { 0x2A16, Prefix, 1, 2, Symmetric | LargeOp}, // QUATERNION INTEGRAL OPERATOR
+    { 0x2A17, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+    { 0x2A18, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH TIMES SIGN
+    { 0x2A19, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH INTERSECTION
+    { 0x2A1A, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH UNION
+    { 0x2A1B, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH OVERBAR
+    { 0x2A1C, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH UNDERBAR
+    { 0x2A1D, Infix, 3, 3, 0}, // JOIN
+    { 0x2A1E, Infix, 3, 3, 0}, // LARGE LEFT TRIANGLE OPERATOR
+    { 0x2A1F, Infix, 3, 3, 0}, // Z NOTATION SCHEMA COMPOSITION
+    { 0x2A20, Infix, 3, 3, 0}, // Z NOTATION SCHEMA PIPING
+    { 0x2A21, Infix, 3, 3, 0}, // Z NOTATION SCHEMA PROJECTION
+    { 0x2A22, Infix, 4, 4, 0}, // PLUS SIGN WITH SMALL CIRCLE ABOVE
+    { 0x2A23, Infix, 4, 4, 0}, // PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+    { 0x2A24, Infix, 4, 4, 0}, // PLUS SIGN WITH TILDE ABOVE
+    { 0x2A25, Infix, 4, 4, 0}, // PLUS SIGN WITH DOT BELOW
+    { 0x2A26, Infix, 4, 4, 0}, // PLUS SIGN WITH TILDE BELOW
+    { 0x2A27, Infix, 4, 4, 0}, // PLUS SIGN WITH SUBSCRIPT TWO
+    { 0x2A28, Infix, 4, 4, 0}, // PLUS SIGN WITH BLACK TRIANGLE
+    { 0x2A29, Infix, 4, 4, 0}, // MINUS SIGN WITH COMMA ABOVE
+    { 0x2A2A, Infix, 4, 4, 0}, // MINUS SIGN WITH DOT BELOW
+    { 0x2A2B, Infix, 4, 4, 0}, // MINUS SIGN WITH FALLING DOTS
+    { 0x2A2C, Infix, 4, 4, 0}, // MINUS SIGN WITH RISING DOTS
+    { 0x2A2D, Infix, 4, 4, 0}, // PLUS SIGN IN LEFT HALF CIRCLE
+    { 0x2A2E, Infix, 4, 4, 0}, // PLUS SIGN IN RIGHT HALF CIRCLE
+    { 0x2A2F, Infix, 4, 4, 0}, // VECTOR OR CROSS PRODUCT
+    { 0x2A30, Infix, 4, 4, 0}, // MULTIPLICATION SIGN WITH DOT ABOVE
+    { 0x2A31, Infix, 4, 4, 0}, // MULTIPLICATION SIGN WITH UNDERBAR
+    { 0x2A32, Infix, 4, 4, 0}, // SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+    { 0x2A33, Infix, 4, 4, 0}, // SMASH PRODUCT
+    { 0x2A34, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+    { 0x2A35, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+    { 0x2A36, Infix, 4, 4, 0}, // CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+    { 0x2A37, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN DOUBLE CIRCLE
+    { 0x2A38, Infix, 4, 4, 0}, // CIRCLED DIVISION SIGN
+    { 0x2A39, Infix, 4, 4, 0}, // PLUS SIGN IN TRIANGLE
+    { 0x2A3A, Infix, 4, 4, 0}, // MINUS SIGN IN TRIANGLE
+    { 0x2A3B, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN TRIANGLE
+    { 0x2A3C, Infix, 4, 4, 0}, // INTERIOR PRODUCT
+    { 0x2A3D, Infix, 4, 4, 0}, // RIGHTHAND INTERIOR PRODUCT
+    { 0x2A3E, Infix, 4, 4, 0}, // Z NOTATION RELATIONAL COMPOSITION
+    { 0x2A3F, Infix, 4, 4, 0}, // AMALGAMATION OR COPRODUCT
+    { 0x2A40, Infix, 4, 4, 0}, // INTERSECTION WITH DOT
+    { 0x2A41, Infix, 4, 4, 0}, // UNION WITH MINUS SIGN
+    { 0x2A42, Infix, 4, 4, 0}, // UNION WITH OVERBAR
+    { 0x2A43, Infix, 4, 4, 0}, // INTERSECTION WITH OVERBAR
+    { 0x2A44, Infix, 4, 4, 0}, // INTERSECTION WITH LOGICAL AND
+    { 0x2A45, Infix, 4, 4, 0}, // UNION WITH LOGICAL OR
+    { 0x2A46, Infix, 4, 4, 0}, // UNION ABOVE INTERSECTION
+    { 0x2A47, Infix, 4, 4, 0}, // INTERSECTION ABOVE UNION
+    { 0x2A48, Infix, 4, 4, 0}, // UNION ABOVE BAR ABOVE INTERSECTION
+    { 0x2A49, Infix, 4, 4, 0}, // INTERSECTION ABOVE BAR ABOVE UNION
+    { 0x2A4A, Infix, 4, 4, 0}, // UNION BESIDE AND JOINED WITH UNION
+    { 0x2A4B, Infix, 4, 4, 0}, // INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+    { 0x2A4C, Infix, 4, 4, 0}, // CLOSED UNION WITH SERIFS
+    { 0x2A4D, Infix, 4, 4, 0}, // CLOSED INTERSECTION WITH SERIFS
+    { 0x2A4E, Infix, 4, 4, 0}, // DOUBLE SQUARE INTERSECTION
+    { 0x2A4F, Infix, 4, 4, 0}, // DOUBLE SQUARE UNION
+    { 0x2A50, Infix, 4, 4, 0}, // CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+    { 0x2A51, Infix, 4, 4, 0}, // LOGICAL AND WITH DOT ABOVE
+    { 0x2A52, Infix, 4, 4, 0}, // LOGICAL OR WITH DOT ABOVE
+    { 0x2A53, Infix, 4, 4, 0}, // DOUBLE LOGICAL AND
+    { 0x2A54, Infix, 4, 4, 0}, // DOUBLE LOGICAL OR
+    { 0x2A55, Infix, 4, 4, 0}, // TWO INTERSECTING LOGICAL AND
+    { 0x2A56, Infix, 4, 4, 0}, // TWO INTERSECTING LOGICAL OR
+    { 0x2A57, Infix, 4, 4, 0}, // SLOPING LARGE OR
+    { 0x2A58, Infix, 4, 4, 0}, // SLOPING LARGE AND
+    { 0x2A59, Infix, 5, 5, 0}, // LOGICAL OR OVERLAPPING LOGICAL AND
+    { 0x2A5A, Infix, 4, 4, 0}, // LOGICAL AND WITH MIDDLE STEM
+    { 0x2A5B, Infix, 4, 4, 0}, // LOGICAL OR WITH MIDDLE STEM
+    { 0x2A5C, Infix, 4, 4, 0}, // LOGICAL AND WITH HORIZONTAL DASH
+    { 0x2A5D, Infix, 4, 4, 0}, // LOGICAL OR WITH HORIZONTAL DASH
+    { 0x2A5E, Infix, 4, 4, 0}, // LOGICAL AND WITH DOUBLE OVERBAR
+    { 0x2A5F, Infix, 4, 4, 0}, // LOGICAL AND WITH UNDERBAR
+    { 0x2A60, Infix, 4, 4, 0}, // LOGICAL AND WITH DOUBLE UNDERBAR
+    { 0x2A61, Infix, 4, 4, 0}, // SMALL VEE WITH UNDERBAR
+    { 0x2A62, Infix, 4, 4, 0}, // LOGICAL OR WITH DOUBLE OVERBAR
+    { 0x2A63, Infix, 4, 4, 0}, // LOGICAL OR WITH DOUBLE UNDERBAR
+    { 0x2A64, Infix, 4, 4, 0}, // Z NOTATION DOMAIN ANTIRESTRICTION
+    { 0x2A65, Infix, 4, 4, 0}, // Z NOTATION RANGE ANTIRESTRICTION
+    { 0x2A66, Infix, 5, 5, 0}, // EQUALS SIGN WITH DOT BELOW
+    { 0x2A67, Infix, 5, 5, 0}, // IDENTICAL WITH DOT ABOVE
+    { 0x2A68, Infix, 5, 5, 0}, // TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+    { 0x2A69, Infix, 5, 5, 0}, // TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+    { 0x2A6A, Infix, 5, 5, 0}, // TILDE OPERATOR WITH DOT ABOVE
+    { 0x2A6B, Infix, 5, 5, 0}, // TILDE OPERATOR WITH RISING DOTS
+    { 0x2A6C, Infix, 5, 5, 0}, // SIMILAR MINUS SIMILAR
+    { 0x2A6D, Infix, 5, 5, 0}, // CONGRUENT WITH DOT ABOVE
+    { 0x2A6E, Infix, 5, 5, 0}, // EQUALS WITH ASTERISK
+    { 0x2A6F, Infix, 5, 5, 0}, // ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+    { 0x2A70, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL OR EQUAL TO
+    { 0x2A71, Infix, 4, 4, 0}, // EQUALS SIGN ABOVE PLUS SIGN
+    { 0x2A72, Infix, 4, 4, 0}, // PLUS SIGN ABOVE EQUALS SIGN
+    { 0x2A73, Infix, 5, 5, 0}, // EQUALS SIGN ABOVE TILDE OPERATOR
+    { 0x2A74, Infix, 5, 5, 0}, // DOUBLE COLON EQUAL
+    { 0x2A75, Infix, 5, 5, 0}, // TWO CONSECUTIVE EQUALS SIGNS
+    { 0x2A76, Infix, 5, 5, 0}, // THREE CONSECUTIVE EQUALS SIGNS
+    { 0x2A77, Infix, 5, 5, 0}, // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+    { 0x2A78, Infix, 5, 5, 0}, // EQUIVALENT WITH FOUR DOTS ABOVE
+    { 0x2A79, Infix, 5, 5, 0}, // LESS-THAN WITH CIRCLE INSIDE
+    { 0x2A7A, Infix, 5, 5, 0}, // GREATER-THAN WITH CIRCLE INSIDE
+    { 0x2A7B, Infix, 5, 5, 0}, // LESS-THAN WITH QUESTION MARK ABOVE
+    { 0x2A7C, Infix, 5, 5, 0}, // GREATER-THAN WITH QUESTION MARK ABOVE
+    { 0x2A7D, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO
+    { 0x2A7E, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO
+    { 0x2A7F, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+    { 0x2A80, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+    { 0x2A81, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+    { 0x2A82, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+    { 0x2A83, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+    { 0x2A84, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+    { 0x2A85, Infix, 5, 5, 0}, // LESS-THAN OR APPROXIMATE
+    { 0x2A86, Infix, 5, 5, 0}, // GREATER-THAN OR APPROXIMATE
+    { 0x2A87, Infix, 5, 5, 0}, // LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+    { 0x2A88, Infix, 5, 5, 0}, // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+    { 0x2A89, Infix, 5, 5, 0}, // LESS-THAN AND NOT APPROXIMATE
+    { 0x2A8A, Infix, 5, 5, 0}, // GREATER-THAN AND NOT APPROXIMATE
+    { 0x2A8B, Infix, 5, 5, 0}, // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+    { 0x2A8C, Infix, 5, 5, 0}, // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+    { 0x2A8D, Infix, 5, 5, 0}, // LESS-THAN ABOVE SIMILAR OR EQUAL
+    { 0x2A8E, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SIMILAR OR EQUAL
+    { 0x2A8F, Infix, 5, 5, 0}, // LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+    { 0x2A90, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+    { 0x2A91, Infix, 5, 5, 0}, // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+    { 0x2A92, Infix, 5, 5, 0}, // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+    { 0x2A93, Infix, 5, 5, 0}, // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+    { 0x2A94, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+    { 0x2A95, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR LESS-THAN
+    { 0x2A96, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR GREATER-THAN
+    { 0x2A97, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+    { 0x2A98, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+    { 0x2A99, Infix, 5, 5, 0}, // DOUBLE-LINE EQUAL TO OR LESS-THAN
+    { 0x2A9A, Infix, 5, 5, 0}, // DOUBLE-LINE EQUAL TO OR GREATER-THAN
+    { 0x2A9B, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+    { 0x2A9C, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+    { 0x2A9D, Infix, 5, 5, 0}, // SIMILAR OR LESS-THAN
+    { 0x2A9E, Infix, 5, 5, 0}, // SIMILAR OR GREATER-THAN
+    { 0x2A9F, Infix, 5, 5, 0}, // SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+    { 0x2AA0, Infix, 5, 5, 0}, // SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+    { 0x2AA1, Infix, 5, 5, 0}, // DOUBLE NESTED LESS-THAN
+    { 0x2AA2, Infix, 5, 5, 0}, // DOUBLE NESTED GREATER-THAN
+    { 0x2AA3, Infix, 5, 5, 0}, // DOUBLE NESTED LESS-THAN WITH UNDERBAR
+    { 0x2AA4, Infix, 5, 5, 0}, // GREATER-THAN OVERLAPPING LESS-THAN
+    { 0x2AA5, Infix, 5, 5, 0}, // GREATER-THAN BESIDE LESS-THAN
+    { 0x2AA6, Infix, 5, 5, 0}, // LESS-THAN CLOSED BY CURVE
+    { 0x2AA7, Infix, 5, 5, 0}, // GREATER-THAN CLOSED BY CURVE
+    { 0x2AA8, Infix, 5, 5, 0}, // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+    { 0x2AA9, Infix, 5, 5, 0}, // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+    { 0x2AAA, Infix, 5, 5, 0}, // SMALLER THAN
+    { 0x2AAB, Infix, 5, 5, 0}, // LARGER THAN
+    { 0x2AAC, Infix, 5, 5, 0}, // SMALLER THAN OR EQUAL TO
+    { 0x2AAD, Infix, 5, 5, 0}, // LARGER THAN OR EQUAL TO
+    { 0x2AAE, Infix, 5, 5, 0}, // EQUALS SIGN WITH BUMPY ABOVE
+    { 0x2AAF, Infix, 5, 5, 0}, // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+    { 0x2AB0, Infix, 5, 5, 0}, // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+    { 0x2AB1, Infix, 5, 5, 0}, // PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+    { 0x2AB2, Infix, 5, 5, 0}, // SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+    { 0x2AB3, Infix, 5, 5, 0}, // PRECEDES ABOVE EQUALS SIGN
+    { 0x2AB4, Infix, 5, 5, 0}, // SUCCEEDS ABOVE EQUALS SIGN
+    { 0x2AB5, Infix, 5, 5, 0}, // PRECEDES ABOVE NOT EQUAL TO
+    { 0x2AB6, Infix, 5, 5, 0}, // SUCCEEDS ABOVE NOT EQUAL TO
+    { 0x2AB7, Infix, 5, 5, 0}, // PRECEDES ABOVE ALMOST EQUAL TO
+    { 0x2AB8, Infix, 5, 5, 0}, // SUCCEEDS ABOVE ALMOST EQUAL TO
+    { 0x2AB9, Infix, 5, 5, 0}, // PRECEDES ABOVE NOT ALMOST EQUAL TO
+    { 0x2ABA, Infix, 5, 5, 0}, // SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+    { 0x2ABB, Infix, 5, 5, 0}, // DOUBLE PRECEDES
+    { 0x2ABC, Infix, 5, 5, 0}, // DOUBLE SUCCEEDS
+    { 0x2ABD, Infix, 5, 5, 0}, // SUBSET WITH DOT
+    { 0x2ABE, Infix, 5, 5, 0}, // SUPERSET WITH DOT
+    { 0x2ABF, Infix, 5, 5, 0}, // SUBSET WITH PLUS SIGN BELOW
+    { 0x2AC0, Infix, 5, 5, 0}, // SUPERSET WITH PLUS SIGN BELOW
+    { 0x2AC1, Infix, 5, 5, 0}, // SUBSET WITH MULTIPLICATION SIGN BELOW
+    { 0x2AC2, Infix, 5, 5, 0}, // SUPERSET WITH MULTIPLICATION SIGN BELOW
+    { 0x2AC3, Infix, 5, 5, 0}, // SUBSET OF OR EQUAL TO WITH DOT ABOVE
+    { 0x2AC4, Infix, 5, 5, 0}, // SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+    { 0x2AC5, Infix, 5, 5, 0}, // SUBSET OF ABOVE EQUALS SIGN
+    { 0x2AC6, Infix, 5, 5, 0}, // SUPERSET OF ABOVE EQUALS SIGN
+    { 0x2AC7, Infix, 5, 5, 0}, // SUBSET OF ABOVE TILDE OPERATOR
+    { 0x2AC8, Infix, 5, 5, 0}, // SUPERSET OF ABOVE TILDE OPERATOR
+    { 0x2AC9, Infix, 5, 5, 0}, // SUBSET OF ABOVE ALMOST EQUAL TO
+    { 0x2ACA, Infix, 5, 5, 0}, // SUPERSET OF ABOVE ALMOST EQUAL TO
+    { 0x2ACB, Infix, 5, 5, 0}, // SUBSET OF ABOVE NOT EQUAL TO
+    { 0x2ACC, Infix, 5, 5, 0}, // SUPERSET OF ABOVE NOT EQUAL TO
+    { 0x2ACD, Infix, 5, 5, 0}, // SQUARE LEFT OPEN BOX OPERATOR
+    { 0x2ACE, Infix, 5, 5, 0}, // SQUARE RIGHT OPEN BOX OPERATOR
+    { 0x2ACF, Infix, 5, 5, 0}, // CLOSED SUBSET
+    { 0x2AD0, Infix, 5, 5, 0}, // CLOSED SUPERSET
+    { 0x2AD1, Infix, 5, 5, 0}, // CLOSED SUBSET OR EQUAL TO
+    { 0x2AD2, Infix, 5, 5, 0}, // CLOSED SUPERSET OR EQUAL TO
+    { 0x2AD3, Infix, 5, 5, 0}, // SUBSET ABOVE SUPERSET
+    { 0x2AD4, Infix, 5, 5, 0}, // SUPERSET ABOVE SUBSET
+    { 0x2AD5, Infix, 5, 5, 0}, // SUBSET ABOVE SUBSET
+    { 0x2AD6, Infix, 5, 5, 0}, // SUPERSET ABOVE SUPERSET
+    { 0x2AD7, Infix, 5, 5, 0}, // SUPERSET BESIDE SUBSET
+    { 0x2AD8, Infix, 5, 5, 0}, // SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+    { 0x2AD9, Infix, 5, 5, 0}, // ELEMENT OF OPENING DOWNWARDS
+    { 0x2ADA, Infix, 5, 5, 0}, // PITCHFORK WITH TEE TOP
+    { 0x2ADB, Infix, 5, 5, 0}, // TRANSVERSAL INTERSECTION
+    { 0x2ADD, Infix, 5, 5, 0}, // NONFORKING
+    { 0x2ADE, Infix, 5, 5, 0}, // SHORT LEFT TACK
+    { 0x2ADF, Infix, 5, 5, 0}, // SHORT DOWN TACK
+    { 0x2AE0, Infix, 5, 5, 0}, // SHORT UP TACK
+    { 0x2AE1, Infix, 5, 5, 0}, // PERPENDICULAR WITH S
+    { 0x2AE2, Infix, 5, 5, 0}, // VERTICAL BAR TRIPLE RIGHT TURNSTILE
+    { 0x2AE3, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR LEFT TURNSTILE
+    { 0x2AE4, Infix, 5, 5, 0}, // VERTICAL BAR DOUBLE LEFT TURNSTILE
+    { 0x2AE5, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+    { 0x2AE6, Infix, 5, 5, 0}, // LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+    { 0x2AE7, Infix, 5, 5, 0}, // SHORT DOWN TACK WITH OVERBAR
+    { 0x2AE8, Infix, 5, 5, 0}, // SHORT UP TACK WITH UNDERBAR
+    { 0x2AE9, Infix, 5, 5, 0}, // SHORT UP TACK ABOVE SHORT DOWN TACK
+    { 0x2AEA, Infix, 5, 5, 0}, // DOUBLE DOWN TACK
+    { 0x2AEB, Infix, 5, 5, 0}, // DOUBLE UP TACK
+    { 0x2AEC, Infix, 5, 5, 0}, // DOUBLE STROKE NOT SIGN
+    { 0x2AED, Infix, 5, 5, 0}, // REVERSED DOUBLE STROKE NOT SIGN
+    { 0x2AEE, Infix, 5, 5, 0}, // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+    { 0x2AEF, Infix, 5, 5, 0}, // VERTICAL LINE WITH CIRCLE ABOVE
+    { 0x2AF0, Infix, 5, 5, 0}, // VERTICAL LINE WITH CIRCLE BELOW
+    { 0x2AF1, Infix, 5, 5, 0}, // DOWN TACK WITH CIRCLE BELOW
+    { 0x2AF2, Infix, 5, 5, 0}, // PARALLEL WITH HORIZONTAL STROKE
+    { 0x2AF3, Infix, 5, 5, 0}, // PARALLEL WITH TILDE OPERATOR
+    { 0x2AF4, Infix, 4, 4, 0}, // TRIPLE VERTICAL BAR BINARY RELATION
+    { 0x2AF5, Infix, 4, 4, 0}, // TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+    { 0x2AF6, Infix, 4, 4, 0}, // TRIPLE COLON OPERATOR
+    { 0x2AF7, Infix, 5, 5, 0}, // TRIPLE NESTED LESS-THAN
+    { 0x2AF8, Infix, 5, 5, 0}, // TRIPLE NESTED GREATER-THAN
+    { 0x2AF9, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+    { 0x2AFA, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+    { 0x2AFB, Infix, 4, 4, 0}, // TRIPLE SOLIDUS BINARY RELATION
+    { 0x2AFC, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LARGE TRIPLE VERTICAL BAR OPERATOR
+    { 0x2AFD, Infix, 4, 4, 0}, // DOUBLE SOLIDUS OPERATOR
+    { 0x2AFE, Infix, 3, 3, 0}, // WHITE VERTICAL BAR
+    { 0x2AFF, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY WHITE VERTICAL BAR
+    { 0x2B45, Infix, 5, 5, Stretchy}, // LEFTWARDS QUADRUPLE ARROW
+    { 0x2B46, Infix, 5, 5, Stretchy} // RIGHTWARDS QUADRUPLE ARROW
+};
+
+// A list of operators that stretch in the horizontal direction. This has been generated from Mozilla's MathML operator dictionary.
+static inline UChar ExtractKeyHorizontal(const UChar* entry) { return *entry; }
+static const UChar horizontalOperators[] = {
+    0x003D, 0x005E, 0x005F, 0x007E, 0x00AF, 0x02C6, 0x02C7, 0x02C9, 0x02CD, 0x02DC, 0x02F7, 0x0302, 0x0332, 0x203E, 0x20D0, 0x20D1, 0x20D6, 0x20D7, 0x20E1, 0x2190, 0x2192, 0x2194, 0x2198, 0x2199, 0x219C, 0x219D, 0x219E, 0x21A0, 0x21A2, 0x21A3, 0x21A4, 0x21A6, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21B4, 0x21B9, 0x21BC, 0x21BD, 0x21C0, 0x21C1, 0x21C4, 0x21C6, 0x21C7, 0x21C9, 0x21CB, 0x21CC, 0x21D0, 0x21D2, 0x21D4, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21E0, 0x21E2, 0x21E4, 0x21E5, 0x21E6, 0x21E8, 0x21F0, 0x21F6, 0x21FD, 0x21FE, 0x21FF, 0x23B4, 0x23B5, 0x23DC, 0x23DD, 0x23DE, 0x23DF, 0x23E0, 0x23E1, 0x2500, 0x27F5, 0x27F6, 0x27F7, 0x27F8, 0x27F9, 0x27FA, 0x27FB, 0x27FC, 0x27FD, 0x27FE, 0x27FF, 0x290C, 0x290D, 0x290E, 0x290F, 0x2910, 0x294E, 0x2950, 0x2952, 0x2953, 0x2956, 0x2957, 0x295A, 0x295B, 0x295E, 0x295F, 0x2B45, 0x2B46, 0xFE35, 0xFE36, 0xFE37, 0xFE38
+};
+
+const Entry* MathMLOperatorDictionary::getEntry(UChar textContent, Form form)
+{
+    return tryBinarySearch&lt;const Entry, Key&gt;(dictionary, dictionarySize, Key(textContent, form), ExtractKey);
+}
+
+const Entry* MathMLOperatorDictionary::getEntry(UChar textContent)
+{
+    // For each operator, the dictionary has at most three form in the following order: Infix, Prefix, Postfix.
+    if (const Entry* entry = tryBinarySearch&lt;const Entry, UChar&gt;(dictionary, dictionarySize, textContent, ExtractChar)) {
+        // There are at most two other entries before the one found.
+        if (entry != dictionary &amp;&amp; (entry - 1)-&gt;character == textContent)
+            entry--;
+        if (entry != dictionary &amp;&amp; (entry - 1)-&gt;character == textContent)
+            entry--;
+        return entry;
+    }
+    return nullptr;
+}
+
+bool MathMLOperatorDictionary::isVertical(UChar textContent)
+{
+    return !tryBinarySearch&lt;const UChar, UChar&gt;(horizontalOperators, WTF_ARRAY_LENGTH(horizontalOperators), textContent, ExtractKeyHorizontal);
+}
+
+}
+
+#endif // ENABLE(MATHML)
</ins></span></pre></div>
<a id="trunkSourceWebCoremathmlMathMLOperatorDictionarycpp"></a>
<div class="propset"><h4>Property changes: trunk/Source/WebCore/mathml/MathMLOperatorDictionary.cpp</h4>
<pre class="diff"><span>
</span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<ins>+LF
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceWebCoremathmlMathMLOperatorDictionaryhfromrev203115trunkSourceWebCorerenderingmathmlMathMLOperatorDictionaryh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/mathml/MathMLOperatorDictionary.h (from rev 203115, trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h) (0 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/MathMLOperatorDictionary.h                                (rev 0)
+++ trunk/Source/WebCore/mathml/MathMLOperatorDictionary.h        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+/*
+ * Copyright (C) 2015 Frederic Wang (fred.wang@free.fr). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MathMLOperatorDictionary_h
+#define MathMLOperatorDictionary_h
+
+#if ENABLE(MATHML)
+
+#include &lt;unicode/utypes.h&gt;
+
+namespace WebCore {
+
+namespace MathMLOperatorDictionary {
+enum Form { Infix, Prefix, Postfix };
+enum Flag {
+    Accent = 0x1, // FIXME: This must be used to implement accentunder/accent on munderover (https://bugs.webkit.org/show_bug.cgi?id=124826).
+    Fence = 0x2, // This has no visual effect but allows to expose semantic information via the accessibility tree.
+    LargeOp = 0x4,
+    MovableLimits = 0x8,
+    Separator = 0x10, // This has no visual effect but allows to expose semantic information via the accessibility tree.
+    Stretchy = 0x20,
+    Symmetric = 0x40
+};
+struct Entry {
+    UChar character;
+    unsigned form : 2;
+    unsigned lspace : 3;
+    unsigned rspace : 3;
+    unsigned flags : 8;
+};
+const Entry* getEntry(UChar, Form);
+const Entry* getEntry(UChar);
+bool isVertical(UChar);
+}
+
+}
+#endif // ENABLE(MATHML)
+#endif // MathMLOperatorDictionary_h
</ins></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlMathMLOperatorDictionarycpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.cpp        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -1,1118 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Frederic Wang (fred.wang@free.fr). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include &quot;config.h&quot;
-
-#if ENABLE(MATHML)
-#include &quot;MathMLOperatorDictionary.h&quot;
-
-namespace WebCore {
-
-using namespace MathMLOperatorDictionary;
-
-typedef std::pair&lt;UChar, Form&gt; Key;
-static inline Key ExtractKey(const Entry* entry) { return Key(entry-&gt;character, static_cast&lt;Form&gt;(entry-&gt;form)); }
-static inline UChar ExtractChar(const Entry* entry) { return entry-&gt;character; }
-
-// This table has been automatically generated from the Operator Dictionary of the MathML3 specification (appendix C).
-// Some people use the binary operator &quot;U+2225 PARALLEL TO&quot; as an opening and closing delimiter, so we add the corresponding stretchy prefix and postfix forms.
-static const unsigned dictionarySize = 1041;
-static const Entry dictionary[dictionarySize] = {
-    { 0x21, Postfix, 1, 0, 0}, // EXCLAMATION MARK
-    { 0x25, Infix, 3, 3, 0}, // PERCENT SIGN
-    { 0x26, Postfix, 0, 0, 0}, // AMPERSAND
-    { 0x27, Postfix, 0, 0, Accent}, // APOSTROPHE
-    { 0x28, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT PARENTHESIS
-    { 0x29, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT PARENTHESIS
-    { 0x2A, Infix, 3, 3, 0}, // ASTERISK
-    { 0x2B, Infix, 4, 4, 0}, // PLUS SIGN
-    { 0x2B, Prefix, 0, 1, 0}, // PLUS SIGN
-    { 0x2C, Infix, 0, 3, Separator}, // COMMA
-    { 0x2D, Infix, 4, 4, 0}, // HYPHEN-MINUS
-    { 0x2D, Prefix, 0, 1, 0}, // HYPHEN-MINUS
-    { 0x2E, Infix, 3, 3, 0}, // FULL STOP
-    { 0x2F, Infix, 1, 1, 0}, // SOLIDUS
-    { 0x3A, Infix, 1, 2, 0}, // COLON
-    { 0x3B, Infix, 0, 3, Separator}, // SEMICOLON
-    { 0x3C, Infix, 5, 5, 0}, // LESS-THAN SIGN
-    { 0x3D, Infix, 5, 5, 0}, // EQUALS SIGN
-    { 0x3E, Infix, 5, 5, 0}, // GREATER-THAN SIGN
-    { 0x3F, Infix, 1, 1, 0}, // QUESTION MARK
-    { 0x40, Infix, 1, 1, 0}, // COMMERCIAL AT
-    { 0x5B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET
-    { 0x5C, Infix, 0, 0, 0}, // REVERSE SOLIDUS
-    { 0x5D, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET
-    { 0x5E, Postfix, 0, 0, Accent | Stretchy}, // CIRCUMFLEX ACCENT
-    { 0x5E, Infix, 1, 1, 0}, // CIRCUMFLEX ACCENT
-    { 0x5F, Postfix, 0, 0, Accent | Stretchy}, // LOW LINE
-    { 0x5F, Infix, 1, 1, 0}, // LOW LINE
-    { 0x60, Postfix, 0, 0, Accent}, // GRAVE ACCENT
-    { 0x7B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT CURLY BRACKET
-    { 0x7C, Infix, 2, 2, Stretchy | Symmetric | Fence}, // VERTICAL LINE
-    { 0x7C, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // VERTICAL LINE
-    { 0x7C, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // VERTICAL LINE
-    { 0x7D, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT CURLY BRACKET
-    { 0x7E, Postfix, 0, 0, Accent | Stretchy}, // TILDE
-    { 0xA8, Postfix, 0, 0, Accent}, // DIAERESIS
-    { 0xAC, Prefix, 2, 1, 0}, // NOT SIGN
-    { 0xAF, Postfix, 0, 0, Accent | Stretchy}, // MACRON
-    { 0xB0, Postfix, 0, 0, 0}, // DEGREE SIGN
-    { 0xB1, Infix, 4, 4, 0}, // PLUS-MINUS SIGN
-    { 0xB1, Prefix, 0, 1, 0}, // PLUS-MINUS SIGN
-    { 0xB4, Postfix, 0, 0, Accent}, // ACUTE ACCENT
-    { 0xB7, Infix, 4, 4, 0}, // MIDDLE DOT
-    { 0xB8, Postfix, 0, 0, Accent}, // CEDILLA
-    { 0xD7, Infix, 4, 4, 0}, // MULTIPLICATION SIGN
-    { 0xF7, Infix, 4, 4, 0}, // DIVISION SIGN
-    { 0x2C6, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER CIRCUMFLEX ACCENT
-    { 0x2C7, Postfix, 0, 0, Accent | Stretchy}, // CARON
-    { 0x2C9, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER MACRON
-    { 0x2CA, Postfix, 0, 0, Accent}, // MODIFIER LETTER ACUTE ACCENT
-    { 0x2CB, Postfix, 0, 0, Accent}, // MODIFIER LETTER GRAVE ACCENT
-    { 0x2CD, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER LOW MACRON
-    { 0x2D8, Postfix, 0, 0, Accent}, // BREVE
-    { 0x2D9, Postfix, 0, 0, Accent}, // DOT ABOVE
-    { 0x2DA, Postfix, 0, 0, Accent}, // RING ABOVE
-    { 0x2DC, Postfix, 0, 0, Accent | Stretchy}, // SMALL TILDE
-    { 0x2DD, Postfix, 0, 0, Accent}, // DOUBLE ACUTE ACCENT
-    { 0x2F7, Postfix, 0, 0, Accent | Stretchy}, // MODIFIER LETTER LOW TILDE
-    { 0x302, Postfix, 0, 0, Accent | Stretchy}, // COMBINING CIRCUMFLEX ACCENT
-    { 0x311, Postfix, 0, 0, Accent}, // COMBINING INVERTED BREVE
-    { 0x3F6, Infix, 5, 5, 0}, // GREEK REVERSED LUNATE EPSILON SYMBOL
-    { 0x2016, Prefix, 0, 0, Fence | Stretchy}, // DOUBLE VERTICAL LINE
-    { 0x2016, Postfix, 0, 0, Fence | Stretchy}, // DOUBLE VERTICAL LINE
-    { 0x2018, Prefix, 0, 0, Fence}, // LEFT SINGLE QUOTATION MARK
-    { 0x2019, Postfix, 0, 0, Fence}, // RIGHT SINGLE QUOTATION MARK
-    { 0x201C, Prefix, 0, 0, Fence}, // LEFT DOUBLE QUOTATION MARK
-    { 0x201D, Postfix, 0, 0, Fence}, // RIGHT DOUBLE QUOTATION MARK
-    { 0x2022, Infix, 4, 4, 0}, // BULLET
-    { 0x2026, Infix, 0, 0, 0}, // HORIZONTAL ELLIPSIS
-    { 0x2032, Postfix, 0, 2, 0}, // PRIME
-    { 0x203E, Postfix, 0, 0, Accent | Stretchy}, // OVERLINE
-    { 0x2044, Infix, 4, 4, Stretchy}, // FRACTION SLASH
-    { 0x2061, Infix, 0, 0, 0}, // FUNCTION APPLICATION
-    { 0x2062, Infix, 0, 0, 0}, // INVISIBLE TIMES
-    { 0x2063, Infix, 0, 0, Separator}, // INVISIBLE SEPARATOR
-    { 0x2064, Infix, 0, 0, 0}, // INVISIBLE PLUS
-    { 0x20DB, Postfix, 0, 0, Accent}, // COMBINING THREE DOTS ABOVE
-    { 0x20DC, Postfix, 0, 0, Accent}, // COMBINING FOUR DOTS ABOVE
-    { 0x2145, Prefix, 2, 1, 0}, // DOUBLE-STRUCK ITALIC CAPITAL D
-    { 0x2146, Prefix, 2, 0, 0}, // DOUBLE-STRUCK ITALIC SMALL D
-    { 0x2190, Infix, 5, 5, Accent | Stretchy}, // LEFTWARDS ARROW
-    { 0x2191, Infix, 5, 5, Stretchy}, // UPWARDS ARROW
-    { 0x2192, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW
-    { 0x2193, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW
-    { 0x2194, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT ARROW
-    { 0x2195, Infix, 5, 5, Stretchy}, // UP DOWN ARROW
-    { 0x2196, Infix, 5, 5, Stretchy}, // NORTH WEST ARROW
-    { 0x2197, Infix, 5, 5, Stretchy}, // NORTH EAST ARROW
-    { 0x2198, Infix, 5, 5, Stretchy}, // SOUTH EAST ARROW
-    { 0x2199, Infix, 5, 5, Stretchy}, // SOUTH WEST ARROW
-    { 0x219A, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH STROKE
-    { 0x219B, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH STROKE
-    { 0x219C, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS WAVE ARROW
-    { 0x219D, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WAVE ARROW
-    { 0x219E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TWO HEADED ARROW
-    { 0x219F, Infix, 5, 5, Stretchy | Accent}, // UPWARDS TWO HEADED ARROW
-    { 0x21A0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TWO HEADED ARROW
-    { 0x21A1, Infix, 5, 5, Stretchy}, // DOWNWARDS TWO HEADED ARROW
-    { 0x21A2, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH TAIL
-    { 0x21A3, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH TAIL
-    { 0x21A4, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW FROM BAR
-    { 0x21A5, Infix, 5, 5, Stretchy}, // UPWARDS ARROW FROM BAR
-    { 0x21A6, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW FROM BAR
-    { 0x21A7, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW FROM BAR
-    { 0x21A8, Infix, 5, 5, Stretchy}, // UP DOWN ARROW WITH BASE
-    { 0x21A9, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH HOOK
-    { 0x21AA, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH HOOK
-    { 0x21AB, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW WITH LOOP
-    { 0x21AC, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW WITH LOOP
-    { 0x21AD, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT WAVE ARROW
-    { 0x21AE, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH STROKE
-    { 0x21AF, Infix, 5, 5, Stretchy}, // DOWNWARDS ZIGZAG ARROW
-    { 0x21B0, Infix, 5, 5, Stretchy}, // UPWARDS ARROW WITH TIP LEFTWARDS
-    { 0x21B1, Infix, 5, 5, Stretchy}, // UPWARDS ARROW WITH TIP RIGHTWARDS
-    { 0x21B2, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH TIP LEFTWARDS
-    { 0x21B3, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH TIP RIGHTWARDS
-    { 0x21B4, Infix, 5, 5, Stretchy}, // RIGHTWARDS ARROW WITH CORNER DOWNWARDS
-    { 0x21B5, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW WITH CORNER LEFTWARDS
-    { 0x21B6, Infix, 5, 5, Accent}, // ANTICLOCKWISE TOP SEMICIRCLE ARROW
-    { 0x21B7, Infix, 5, 5, Accent}, // CLOCKWISE TOP SEMICIRCLE ARROW
-    { 0x21B8, Infix, 5, 5, 0}, // NORTH WEST ARROW TO LONG BAR
-    { 0x21B9, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
-    { 0x21BA, Infix, 5, 5, 0}, // ANTICLOCKWISE OPEN CIRCLE ARROW
-    { 0x21BB, Infix, 5, 5, 0}, // CLOCKWISE OPEN CIRCLE ARROW
-    { 0x21BC, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UPWARDS
-    { 0x21BD, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB DOWNWARDS
-    { 0x21BE, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHTWARDS
-    { 0x21BF, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFTWARDS
-    { 0x21C0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UPWARDS
-    { 0x21C1, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB DOWNWARDS
-    { 0x21C2, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHTWARDS
-    { 0x21C3, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFTWARDS
-    { 0x21C4, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW OVER LEFTWARDS ARROW
-    { 0x21C5, Infix, 5, 5, Stretchy}, // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
-    { 0x21C6, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW OVER RIGHTWARDS ARROW
-    { 0x21C7, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS PAIRED ARROWS
-    { 0x21C8, Infix, 5, 5, Stretchy}, // UPWARDS PAIRED ARROWS
-    { 0x21C9, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS PAIRED ARROWS
-    { 0x21CA, Infix, 5, 5, Stretchy}, // DOWNWARDS PAIRED ARROWS
-    { 0x21CB, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
-    { 0x21CC, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
-    { 0x21CD, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW WITH STROKE
-    { 0x21CE, Infix, 5, 5, Accent}, // LEFT RIGHT DOUBLE ARROW WITH STROKE
-    { 0x21CF, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW WITH STROKE
-    { 0x21D0, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DOUBLE ARROW
-    { 0x21D1, Infix, 5, 5, Stretchy}, // UPWARDS DOUBLE ARROW
-    { 0x21D2, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DOUBLE ARROW
-    { 0x21D3, Infix, 5, 5, Stretchy}, // DOWNWARDS DOUBLE ARROW
-    { 0x21D4, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT DOUBLE ARROW
-    { 0x21D5, Infix, 5, 5, Stretchy}, // UP DOWN DOUBLE ARROW
-    { 0x21D6, Infix, 5, 5, Stretchy}, // NORTH WEST DOUBLE ARROW
-    { 0x21D7, Infix, 5, 5, Stretchy}, // NORTH EAST DOUBLE ARROW
-    { 0x21D8, Infix, 5, 5, Stretchy}, // SOUTH EAST DOUBLE ARROW
-    { 0x21D9, Infix, 5, 5, Stretchy}, // SOUTH WEST DOUBLE ARROW
-    { 0x21DA, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TRIPLE ARROW
-    { 0x21DB, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TRIPLE ARROW
-    { 0x21DC, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS SQUIGGLE ARROW
-    { 0x21DD, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS SQUIGGLE ARROW
-    { 0x21DE, Infix, 5, 5, 0}, // UPWARDS ARROW WITH DOUBLE STROKE
-    { 0x21DF, Infix, 5, 5, 0}, // DOWNWARDS ARROW WITH DOUBLE STROKE
-    { 0x21E0, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DASHED ARROW
-    { 0x21E1, Infix, 5, 5, Stretchy}, // UPWARDS DASHED ARROW
-    { 0x21E2, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DASHED ARROW
-    { 0x21E3, Infix, 5, 5, Stretchy}, // DOWNWARDS DASHED ARROW
-    { 0x21E4, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS ARROW TO BAR
-    { 0x21E5, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS ARROW TO BAR
-    { 0x21E6, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS WHITE ARROW
-    { 0x21E7, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW
-    { 0x21E8, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WHITE ARROW
-    { 0x21E9, Infix, 5, 5, Stretchy}, // DOWNWARDS WHITE ARROW
-    { 0x21EA, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW FROM BAR
-    { 0x21EB, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL
-    { 0x21EC, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
-    { 0x21ED, Infix, 5, 5, Stretchy}, // UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
-    { 0x21EE, Infix, 5, 5, Stretchy}, // UPWARDS WHITE DOUBLE ARROW
-    { 0x21EF, Infix, 5, 5, Stretchy}, // UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
-    { 0x21F0, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS WHITE ARROW FROM WALL
-    { 0x21F1, Infix, 5, 5, 0}, // NORTH WEST ARROW TO CORNER
-    { 0x21F2, Infix, 5, 5, 0}, // SOUTH EAST ARROW TO CORNER
-    { 0x21F3, Infix, 5, 5, Stretchy}, // UP DOWN WHITE ARROW
-    { 0x21F4, Infix, 5, 5, Accent}, // RIGHT ARROW WITH SMALL CIRCLE
-    { 0x21F5, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
-    { 0x21F6, Infix, 5, 5, Stretchy | Accent}, // THREE RIGHTWARDS ARROWS
-    { 0x21F7, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH VERTICAL STROKE
-    { 0x21F8, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH VERTICAL STROKE
-    { 0x21F9, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH VERTICAL STROKE
-    { 0x21FA, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
-    { 0x21FB, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
-    { 0x21FC, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
-    { 0x21FD, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS OPEN-HEADED ARROW
-    { 0x21FE, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS OPEN-HEADED ARROW
-    { 0x21FF, Infix, 5, 5, Stretchy | Accent}, // LEFT RIGHT OPEN-HEADED ARROW
-    { 0x2200, Prefix, 2, 1, 0}, // FOR ALL
-    { 0x2201, Infix, 1, 2, 0}, // COMPLEMENT
-    { 0x2202, Prefix, 2, 1, 0}, // PARTIAL DIFFERENTIAL
-    { 0x2203, Prefix, 2, 1, 0}, // THERE EXISTS
-    { 0x2204, Prefix, 2, 1, 0}, // THERE DOES NOT EXIST
-    { 0x2206, Infix, 3, 3, 0}, // INCREMENT
-    { 0x2207, Prefix, 2, 1, 0}, // NABLA
-    { 0x2208, Infix, 5, 5, 0}, // ELEMENT OF
-    { 0x2209, Infix, 5, 5, 0}, // NOT AN ELEMENT OF
-    { 0x220A, Infix, 5, 5, 0}, // SMALL ELEMENT OF
-    { 0x220B, Infix, 5, 5, 0}, // CONTAINS AS MEMBER
-    { 0x220C, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS MEMBER
-    { 0x220D, Infix, 5, 5, 0}, // SMALL CONTAINS AS MEMBER
-    { 0x220E, Infix, 3, 3, 0}, // END OF PROOF
-    { 0x220F, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY PRODUCT
-    { 0x2210, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY COPRODUCT
-    { 0x2211, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SUMMATION
-    { 0x2212, Infix, 4, 4, 0}, // MINUS SIGN
-    { 0x2212, Prefix, 0, 1, 0}, // MINUS SIGN
-    { 0x2213, Infix, 4, 4, 0}, // MINUS-OR-PLUS SIGN
-    { 0x2213, Prefix, 0, 1, 0}, // MINUS-OR-PLUS SIGN
-    { 0x2214, Infix, 4, 4, 0}, // DOT PLUS
-    { 0x2215, Infix, 4, 4, Stretchy}, // DIVISION SLASH
-    { 0x2216, Infix, 4, 4, 0}, // SET MINUS
-    { 0x2217, Infix, 4, 4, 0}, // ASTERISK OPERATOR
-    { 0x2218, Infix, 4, 4, 0}, // RING OPERATOR
-    { 0x2219, Infix, 4, 4, 0}, // BULLET OPERATOR
-    { 0x221A, Prefix, 1, 1, Stretchy}, // SQUARE ROOT
-    { 0x221B, Prefix, 1, 1, 0}, // CUBE ROOT
-    { 0x221C, Prefix, 1, 1, 0}, // FOURTH ROOT
-    { 0x221D, Infix, 5, 5, 0}, // PROPORTIONAL TO
-    { 0x221F, Infix, 5, 5, 0}, // RIGHT ANGLE
-    { 0x2220, Prefix, 0, 0, 0}, // ANGLE
-    { 0x2221, Prefix, 0, 0, 0}, // MEASURED ANGLE
-    { 0x2222, Prefix, 0, 0, 0}, // SPHERICAL ANGLE
-    { 0x2223, Infix, 5, 5, 0}, // DIVIDES
-    { 0x2224, Infix, 5, 5, 0}, // DOES NOT DIVIDE
-    { 0x2225, Infix, 5, 5, 0}, // PARALLEL TO
-    { 0x2225, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // PARALLEL TO
-    { 0x2225, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // PARALLEL TO
-    { 0x2226, Infix, 5, 5, 0}, // NOT PARALLEL TO
-    { 0x2227, Infix, 4, 4, 0}, // LOGICAL AND
-    { 0x2228, Infix, 4, 4, 0}, // LOGICAL OR
-    { 0x2229, Infix, 4, 4, 0}, // INTERSECTION
-    { 0x222A, Infix, 4, 4, 0}, // UNION
-    { 0x222B, Prefix, 0, 1, Symmetric | LargeOp}, // INTEGRAL
-    { 0x222C, Prefix, 0, 1, Symmetric | LargeOp}, // DOUBLE INTEGRAL
-    { 0x222D, Prefix, 0, 1, Symmetric | LargeOp}, // TRIPLE INTEGRAL
-    { 0x222E, Prefix, 0, 1, Symmetric | LargeOp}, // CONTOUR INTEGRAL
-    { 0x222F, Prefix, 0, 1, Symmetric | LargeOp}, // SURFACE INTEGRAL
-    { 0x2230, Prefix, 0, 1, Symmetric | LargeOp}, // VOLUME INTEGRAL
-    { 0x2231, Prefix, 0, 1, Symmetric | LargeOp}, // CLOCKWISE INTEGRAL
-    { 0x2232, Prefix, 0, 1, Symmetric | LargeOp}, // CLOCKWISE CONTOUR INTEGRAL
-    { 0x2233, Prefix, 0, 1, Symmetric | LargeOp}, // ANTICLOCKWISE CONTOUR INTEGRAL
-    { 0x2234, Infix, 5, 5, 0}, // THEREFORE
-    { 0x2235, Infix, 5, 5, 0}, // BECAUSE
-    { 0x2236, Infix, 5, 5, 0}, // RATIO
-    { 0x2237, Infix, 5, 5, 0}, // PROPORTION
-    { 0x2238, Infix, 4, 4, 0}, // DOT MINUS
-    { 0x2239, Infix, 5, 5, 0}, // EXCESS
-    { 0x223A, Infix, 4, 4, 0}, // GEOMETRIC PROPORTION
-    { 0x223B, Infix, 5, 5, 0}, // HOMOTHETIC
-    { 0x223C, Infix, 5, 5, 0}, // TILDE OPERATOR
-    { 0x223D, Infix, 5, 5, 0}, // REVERSED TILDE
-    { 0x223E, Infix, 5, 5, 0}, // INVERTED LAZY S
-    { 0x223F, Infix, 3, 3, 0}, // SINE WAVE
-    { 0x2240, Infix, 4, 4, 0}, // WREATH PRODUCT
-    { 0x2241, Infix, 5, 5, 0}, // NOT TILDE
-    { 0x2242, Infix, 5, 5, 0}, // MINUS TILDE
-    { 0x2243, Infix, 5, 5, 0}, // ASYMPTOTICALLY EQUAL TO
-    { 0x2244, Infix, 5, 5, 0}, // NOT ASYMPTOTICALLY EQUAL TO
-    { 0x2245, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL TO
-    { 0x2246, Infix, 5, 5, 0}, // APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-    { 0x2247, Infix, 5, 5, 0}, // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-    { 0x2248, Infix, 5, 5, 0}, // ALMOST EQUAL TO
-    { 0x2249, Infix, 5, 5, 0}, // NOT ALMOST EQUAL TO
-    { 0x224A, Infix, 5, 5, 0}, // ALMOST EQUAL OR EQUAL TO
-    { 0x224B, Infix, 5, 5, 0}, // TRIPLE TILDE
-    { 0x224C, Infix, 5, 5, 0}, // ALL EQUAL TO
-    { 0x224D, Infix, 5, 5, 0}, // EQUIVALENT TO
-    { 0x224E, Infix, 5, 5, 0}, // GEOMETRICALLY EQUIVALENT TO
-    { 0x224F, Infix, 5, 5, 0}, // DIFFERENCE BETWEEN
-    { 0x2250, Infix, 5, 5, 0}, // APPROACHES THE LIMIT
-    { 0x2251, Infix, 5, 5, 0}, // GEOMETRICALLY EQUAL TO
-    { 0x2252, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL TO OR THE IMAGE OF
-    { 0x2253, Infix, 5, 5, 0}, // IMAGE OF OR APPROXIMATELY EQUAL TO
-    { 0x2254, Infix, 5, 5, 0}, // COLON EQUALS
-    { 0x2255, Infix, 5, 5, 0}, // EQUALS COLON
-    { 0x2256, Infix, 5, 5, 0}, // RING IN EQUAL TO
-    { 0x2257, Infix, 5, 5, 0}, // RING EQUAL TO
-    { 0x2258, Infix, 5, 5, 0}, // CORRESPONDS TO
-    { 0x2259, Infix, 5, 5, 0}, // ESTIMATES
-    { 0x225A, Infix, 5, 5, 0}, // EQUIANGULAR TO
-    { 0x225C, Infix, 5, 5, 0}, // DELTA EQUAL TO
-    { 0x225D, Infix, 5, 5, 0}, // EQUAL TO BY DEFINITION
-    { 0x225E, Infix, 5, 5, 0}, // MEASURED BY
-    { 0x225F, Infix, 5, 5, 0}, // QUESTIONED EQUAL TO
-    { 0x2260, Infix, 5, 5, 0}, // NOT EQUAL TO
-    { 0x2261, Infix, 5, 5, 0}, // IDENTICAL TO
-    { 0x2262, Infix, 5, 5, 0}, // NOT IDENTICAL TO
-    { 0x2263, Infix, 5, 5, 0}, // STRICTLY EQUIVALENT TO
-    { 0x2264, Infix, 5, 5, 0}, // LESS-THAN OR EQUAL TO
-    { 0x2265, Infix, 5, 5, 0}, // GREATER-THAN OR EQUAL TO
-    { 0x2266, Infix, 5, 5, 0}, // LESS-THAN OVER EQUAL TO
-    { 0x2267, Infix, 5, 5, 0}, // GREATER-THAN OVER EQUAL TO
-    { 0x2268, Infix, 5, 5, 0}, // LESS-THAN BUT NOT EQUAL TO
-    { 0x2269, Infix, 5, 5, 0}, // GREATER-THAN BUT NOT EQUAL TO
-    { 0x226A, Infix, 5, 5, 0}, // MUCH LESS-THAN
-    { 0x226B, Infix, 5, 5, 0}, // MUCH GREATER-THAN
-    { 0x226C, Infix, 5, 5, 0}, // BETWEEN
-    { 0x226D, Infix, 5, 5, 0}, // NOT EQUIVALENT TO
-    { 0x226E, Infix, 5, 5, 0}, // NOT LESS-THAN
-    { 0x226F, Infix, 5, 5, 0}, // NOT GREATER-THAN
-    { 0x2270, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR EQUAL TO
-    { 0x2271, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR EQUAL TO
-    { 0x2272, Infix, 5, 5, 0}, // LESS-THAN OR EQUIVALENT TO
-    { 0x2273, Infix, 5, 5, 0}, // GREATER-THAN OR EQUIVALENT TO
-    { 0x2274, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR EQUIVALENT TO
-    { 0x2275, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR EQUIVALENT TO
-    { 0x2276, Infix, 5, 5, 0}, // LESS-THAN OR GREATER-THAN
-    { 0x2277, Infix, 5, 5, 0}, // GREATER-THAN OR LESS-THAN
-    { 0x2278, Infix, 5, 5, 0}, // NEITHER LESS-THAN NOR GREATER-THAN
-    { 0x2279, Infix, 5, 5, 0}, // NEITHER GREATER-THAN NOR LESS-THAN
-    { 0x227A, Infix, 5, 5, 0}, // PRECEDES
-    { 0x227B, Infix, 5, 5, 0}, // SUCCEEDS
-    { 0x227C, Infix, 5, 5, 0}, // PRECEDES OR EQUAL TO
-    { 0x227D, Infix, 5, 5, 0}, // SUCCEEDS OR EQUAL TO
-    { 0x227E, Infix, 5, 5, 0}, // PRECEDES OR EQUIVALENT TO
-    { 0x227F, Infix, 5, 5, 0}, // SUCCEEDS OR EQUIVALENT TO
-    { 0x2280, Infix, 5, 5, 0}, // DOES NOT PRECEDE
-    { 0x2281, Infix, 5, 5, 0}, // DOES NOT SUCCEED
-    { 0x2282, Infix, 5, 5, 0}, // SUBSET OF
-    { 0x2283, Infix, 5, 5, 0}, // SUPERSET OF
-    { 0x2284, Infix, 5, 5, 0}, // NOT A SUBSET OF
-    { 0x2285, Infix, 5, 5, 0}, // NOT A SUPERSET OF
-    { 0x2286, Infix, 5, 5, 0}, // SUBSET OF OR EQUAL TO
-    { 0x2287, Infix, 5, 5, 0}, // SUPERSET OF OR EQUAL TO
-    { 0x2288, Infix, 5, 5, 0}, // NEITHER A SUBSET OF NOR EQUAL TO
-    { 0x2289, Infix, 5, 5, 0}, // NEITHER A SUPERSET OF NOR EQUAL TO
-    { 0x228A, Infix, 5, 5, 0}, // SUBSET OF WITH NOT EQUAL TO
-    { 0x228B, Infix, 5, 5, 0}, // SUPERSET OF WITH NOT EQUAL TO
-    { 0x228C, Infix, 4, 4, 0}, // MULTISET
-    { 0x228D, Infix, 4, 4, 0}, // MULTISET MULTIPLICATION
-    { 0x228E, Infix, 4, 4, 0}, // MULTISET UNION
-    { 0x228F, Infix, 5, 5, 0}, // SQUARE IMAGE OF
-    { 0x2290, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF
-    { 0x2291, Infix, 5, 5, 0}, // SQUARE IMAGE OF OR EQUAL TO
-    { 0x2292, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF OR EQUAL TO
-    { 0x2293, Infix, 4, 4, 0}, // SQUARE CAP
-    { 0x2294, Infix, 4, 4, 0}, // SQUARE CUP
-    { 0x2295, Infix, 4, 4, 0}, // CIRCLED PLUS
-    { 0x2296, Infix, 4, 4, 0}, // CIRCLED MINUS
-    { 0x2297, Infix, 4, 4, 0}, // CIRCLED TIMES
-    { 0x2298, Infix, 4, 4, 0}, // CIRCLED DIVISION SLASH
-    { 0x2299, Infix, 4, 4, 0}, // CIRCLED DOT OPERATOR
-    { 0x229A, Infix, 4, 4, 0}, // CIRCLED RING OPERATOR
-    { 0x229B, Infix, 4, 4, 0}, // CIRCLED ASTERISK OPERATOR
-    { 0x229C, Infix, 4, 4, 0}, // CIRCLED EQUALS
-    { 0x229D, Infix, 4, 4, 0}, // CIRCLED DASH
-    { 0x229E, Infix, 4, 4, 0}, // SQUARED PLUS
-    { 0x229F, Infix, 4, 4, 0}, // SQUARED MINUS
-    { 0x22A0, Infix, 4, 4, 0}, // SQUARED TIMES
-    { 0x22A1, Infix, 4, 4, 0}, // SQUARED DOT OPERATOR
-    { 0x22A2, Infix, 5, 5, 0}, // RIGHT TACK
-    { 0x22A3, Infix, 5, 5, 0}, // LEFT TACK
-    { 0x22A4, Infix, 5, 5, 0}, // DOWN TACK
-    { 0x22A5, Infix, 5, 5, 0}, // UP TACK
-    { 0x22A6, Infix, 5, 5, 0}, // ASSERTION
-    { 0x22A7, Infix, 5, 5, 0}, // MODELS
-    { 0x22A8, Infix, 5, 5, 0}, // TRUE
-    { 0x22A9, Infix, 5, 5, 0}, // FORCES
-    { 0x22AA, Infix, 5, 5, 0}, // TRIPLE VERTICAL BAR RIGHT TURNSTILE
-    { 0x22AB, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-    { 0x22AC, Infix, 5, 5, 0}, // DOES NOT PROVE
-    { 0x22AD, Infix, 5, 5, 0}, // NOT TRUE
-    { 0x22AE, Infix, 5, 5, 0}, // DOES NOT FORCE
-    { 0x22AF, Infix, 5, 5, 0}, // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-    { 0x22B0, Infix, 5, 5, 0}, // PRECEDES UNDER RELATION
-    { 0x22B1, Infix, 5, 5, 0}, // SUCCEEDS UNDER RELATION
-    { 0x22B2, Infix, 5, 5, 0}, // NORMAL SUBGROUP OF
-    { 0x22B3, Infix, 5, 5, 0}, // CONTAINS AS NORMAL SUBGROUP
-    { 0x22B4, Infix, 5, 5, 0}, // NORMAL SUBGROUP OF OR EQUAL TO
-    { 0x22B5, Infix, 5, 5, 0}, // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-    { 0x22B6, Infix, 5, 5, 0}, // ORIGINAL OF
-    { 0x22B7, Infix, 5, 5, 0}, // IMAGE OF
-    { 0x22B8, Infix, 5, 5, 0}, // MULTIMAP
-    { 0x22B9, Infix, 5, 5, 0}, // HERMITIAN CONJUGATE MATRIX
-    { 0x22BA, Infix, 4, 4, 0}, // INTERCALATE
-    { 0x22BB, Infix, 4, 4, 0}, // XOR
-    { 0x22BC, Infix, 4, 4, 0}, // NAND
-    { 0x22BD, Infix, 4, 4, 0}, // NOR
-    { 0x22BE, Infix, 3, 3, 0}, // RIGHT ANGLE WITH ARC
-    { 0x22BF, Infix, 3, 3, 0}, // RIGHT TRIANGLE
-    { 0x22C0, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY LOGICAL AND
-    { 0x22C1, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY LOGICAL OR
-    { 0x22C2, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY INTERSECTION
-    { 0x22C3, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION
-    { 0x22C4, Infix, 4, 4, 0}, // DIAMOND OPERATOR
-    { 0x22C5, Infix, 4, 4, 0}, // DOT OPERATOR
-    { 0x22C6, Infix, 4, 4, 0}, // STAR OPERATOR
-    { 0x22C7, Infix, 4, 4, 0}, // DIVISION TIMES
-    { 0x22C8, Infix, 5, 5, 0}, // BOWTIE
-    { 0x22C9, Infix, 4, 4, 0}, // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-    { 0x22CA, Infix, 4, 4, 0}, // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-    { 0x22CB, Infix, 4, 4, 0}, // LEFT SEMIDIRECT PRODUCT
-    { 0x22CC, Infix, 4, 4, 0}, // RIGHT SEMIDIRECT PRODUCT
-    { 0x22CD, Infix, 5, 5, 0}, // REVERSED TILDE EQUALS
-    { 0x22CE, Infix, 4, 4, 0}, // CURLY LOGICAL OR
-    { 0x22CF, Infix, 4, 4, 0}, // CURLY LOGICAL AND
-    { 0x22D0, Infix, 5, 5, 0}, // DOUBLE SUBSET
-    { 0x22D1, Infix, 5, 5, 0}, // DOUBLE SUPERSET
-    { 0x22D2, Infix, 4, 4, 0}, // DOUBLE INTERSECTION
-    { 0x22D3, Infix, 4, 4, 0}, // DOUBLE UNION
-    { 0x22D4, Infix, 5, 5, 0}, // PITCHFORK
-    { 0x22D5, Infix, 5, 5, 0}, // EQUAL AND PARALLEL TO
-    { 0x22D6, Infix, 5, 5, 0}, // LESS-THAN WITH DOT
-    { 0x22D7, Infix, 5, 5, 0}, // GREATER-THAN WITH DOT
-    { 0x22D8, Infix, 5, 5, 0}, // VERY MUCH LESS-THAN
-    { 0x22D9, Infix, 5, 5, 0}, // VERY MUCH GREATER-THAN
-    { 0x22DA, Infix, 5, 5, 0}, // LESS-THAN EQUAL TO OR GREATER-THAN
-    { 0x22DB, Infix, 5, 5, 0}, // GREATER-THAN EQUAL TO OR LESS-THAN
-    { 0x22DC, Infix, 5, 5, 0}, // EQUAL TO OR LESS-THAN
-    { 0x22DD, Infix, 5, 5, 0}, // EQUAL TO OR GREATER-THAN
-    { 0x22DE, Infix, 5, 5, 0}, // EQUAL TO OR PRECEDES
-    { 0x22DF, Infix, 5, 5, 0}, // EQUAL TO OR SUCCEEDS
-    { 0x22E0, Infix, 5, 5, 0}, // DOES NOT PRECEDE OR EQUAL
-    { 0x22E1, Infix, 5, 5, 0}, // DOES NOT SUCCEED OR EQUAL
-    { 0x22E2, Infix, 5, 5, 0}, // NOT SQUARE IMAGE OF OR EQUAL TO
-    { 0x22E3, Infix, 5, 5, 0}, // NOT SQUARE ORIGINAL OF OR EQUAL TO
-    { 0x22E4, Infix, 5, 5, 0}, // SQUARE IMAGE OF OR NOT EQUAL TO
-    { 0x22E5, Infix, 5, 5, 0}, // SQUARE ORIGINAL OF OR NOT EQUAL TO
-    { 0x22E6, Infix, 5, 5, 0}, // LESS-THAN BUT NOT EQUIVALENT TO
-    { 0x22E7, Infix, 5, 5, 0}, // GREATER-THAN BUT NOT EQUIVALENT TO
-    { 0x22E8, Infix, 5, 5, 0}, // PRECEDES BUT NOT EQUIVALENT TO
-    { 0x22E9, Infix, 5, 5, 0}, // SUCCEEDS BUT NOT EQUIVALENT TO
-    { 0x22EA, Infix, 5, 5, 0}, // NOT NORMAL SUBGROUP OF
-    { 0x22EB, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS NORMAL SUBGROUP
-    { 0x22EC, Infix, 5, 5, 0}, // NOT NORMAL SUBGROUP OF OR EQUAL TO
-    { 0x22ED, Infix, 5, 5, 0}, // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
-    { 0x22EE, Infix, 5, 5, 0}, // VERTICAL ELLIPSIS
-    { 0x22EF, Infix, 0, 0, 0}, // MIDLINE HORIZONTAL ELLIPSIS
-    { 0x22F0, Infix, 5, 5, 0}, // UP RIGHT DIAGONAL ELLIPSIS
-    { 0x22F1, Infix, 5, 5, 0}, // DOWN RIGHT DIAGONAL ELLIPSIS
-    { 0x22F2, Infix, 5, 5, 0}, // ELEMENT OF WITH LONG HORIZONTAL STROKE
-    { 0x22F3, Infix, 5, 5, 0}, // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
-    { 0x22F4, Infix, 5, 5, 0}, // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
-    { 0x22F5, Infix, 5, 5, 0}, // ELEMENT OF WITH DOT ABOVE
-    { 0x22F6, Infix, 5, 5, 0}, // ELEMENT OF WITH OVERBAR
-    { 0x22F7, Infix, 5, 5, 0}, // SMALL ELEMENT OF WITH OVERBAR
-    { 0x22F8, Infix, 5, 5, 0}, // ELEMENT OF WITH UNDERBAR
-    { 0x22F9, Infix, 5, 5, 0}, // ELEMENT OF WITH TWO HORIZONTAL STROKES
-    { 0x22FA, Infix, 5, 5, 0}, // CONTAINS WITH LONG HORIZONTAL STROKE
-    { 0x22FB, Infix, 5, 5, 0}, // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
-    { 0x22FC, Infix, 5, 5, 0}, // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
-    { 0x22FD, Infix, 5, 5, 0}, // CONTAINS WITH OVERBAR
-    { 0x22FE, Infix, 5, 5, 0}, // SMALL CONTAINS WITH OVERBAR
-    { 0x22FF, Infix, 5, 5, 0}, // Z NOTATION BAG MEMBERSHIP
-    { 0x2308, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT CEILING
-    { 0x2309, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT CEILING
-    { 0x230A, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT FLOOR
-    { 0x230B, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT FLOOR
-    { 0x23B4, Postfix, 0, 0, Accent | Stretchy}, // TOP SQUARE BRACKET
-    { 0x23B5, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM SQUARE BRACKET
-    { 0x23DC, Postfix, 0, 0, Accent | Stretchy}, // TOP PARENTHESIS
-    { 0x23DD, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM PARENTHESIS
-    { 0x23DE, Postfix, 0, 0, Accent | Stretchy}, // TOP CURLY BRACKET
-    { 0x23DF, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM CURLY BRACKET
-    { 0x23E0, Postfix, 0, 0, Accent | Stretchy}, // TOP TORTOISE SHELL BRACKET
-    { 0x23E1, Postfix, 0, 0, Accent | Stretchy}, // BOTTOM TORTOISE SHELL BRACKET
-    { 0x25A0, Infix, 3, 3, 0}, // BLACK SQUARE
-    { 0x25A1, Infix, 3, 3, 0}, // WHITE SQUARE
-    { 0x25AA, Infix, 3, 3, 0}, // BLACK SMALL SQUARE
-    { 0x25AB, Infix, 3, 3, 0}, // WHITE SMALL SQUARE
-    { 0x25AD, Infix, 3, 3, 0}, // WHITE RECTANGLE
-    { 0x25AE, Infix, 3, 3, 0}, // BLACK VERTICAL RECTANGLE
-    { 0x25AF, Infix, 3, 3, 0}, // WHITE VERTICAL RECTANGLE
-    { 0x25B0, Infix, 3, 3, 0}, // BLACK PARALLELOGRAM
-    { 0x25B1, Infix, 3, 3, 0}, // WHITE PARALLELOGRAM
-    { 0x25B2, Infix, 4, 4, 0}, // BLACK UP-POINTING TRIANGLE
-    { 0x25B3, Infix, 4, 4, 0}, // WHITE UP-POINTING TRIANGLE
-    { 0x25B4, Infix, 4, 4, 0}, // BLACK UP-POINTING SMALL TRIANGLE
-    { 0x25B5, Infix, 4, 4, 0}, // WHITE UP-POINTING SMALL TRIANGLE
-    { 0x25B6, Infix, 4, 4, 0}, // BLACK RIGHT-POINTING TRIANGLE
-    { 0x25B7, Infix, 4, 4, 0}, // WHITE RIGHT-POINTING TRIANGLE
-    { 0x25B8, Infix, 4, 4, 0}, // BLACK RIGHT-POINTING SMALL TRIANGLE
-    { 0x25B9, Infix, 4, 4, 0}, // WHITE RIGHT-POINTING SMALL TRIANGLE
-    { 0x25BC, Infix, 4, 4, 0}, // BLACK DOWN-POINTING TRIANGLE
-    { 0x25BD, Infix, 4, 4, 0}, // WHITE DOWN-POINTING TRIANGLE
-    { 0x25BE, Infix, 4, 4, 0}, // BLACK DOWN-POINTING SMALL TRIANGLE
-    { 0x25BF, Infix, 4, 4, 0}, // WHITE DOWN-POINTING SMALL TRIANGLE
-    { 0x25C0, Infix, 4, 4, 0}, // BLACK LEFT-POINTING TRIANGLE
-    { 0x25C1, Infix, 4, 4, 0}, // WHITE LEFT-POINTING TRIANGLE
-    { 0x25C2, Infix, 4, 4, 0}, // BLACK LEFT-POINTING SMALL TRIANGLE
-    { 0x25C3, Infix, 4, 4, 0}, // WHITE LEFT-POINTING SMALL TRIANGLE
-    { 0x25C4, Infix, 4, 4, 0}, // BLACK LEFT-POINTING POINTER
-    { 0x25C5, Infix, 4, 4, 0}, // WHITE LEFT-POINTING POINTER
-    { 0x25C6, Infix, 4, 4, 0}, // BLACK DIAMOND
-    { 0x25C7, Infix, 4, 4, 0}, // WHITE DIAMOND
-    { 0x25C8, Infix, 4, 4, 0}, // WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-    { 0x25C9, Infix, 4, 4, 0}, // FISHEYE
-    { 0x25CC, Infix, 4, 4, 0}, // DOTTED CIRCLE
-    { 0x25CD, Infix, 4, 4, 0}, // CIRCLE WITH VERTICAL FILL
-    { 0x25CE, Infix, 4, 4, 0}, // BULLSEYE
-    { 0x25CF, Infix, 4, 4, 0}, // BLACK CIRCLE
-    { 0x25D6, Infix, 4, 4, 0}, // LEFT HALF BLACK CIRCLE
-    { 0x25D7, Infix, 4, 4, 0}, // RIGHT HALF BLACK CIRCLE
-    { 0x25E6, Infix, 4, 4, 0}, // WHITE BULLET
-    { 0x266D, Postfix, 0, 2, 0}, // MUSIC FLAT SIGN
-    { 0x266E, Postfix, 0, 2, 0}, // MUSIC NATURAL SIGN
-    { 0x266F, Postfix, 0, 2, 0}, // MUSIC SHARP SIGN
-    { 0x2758, Infix, 5, 5, 0}, // LIGHT VERTICAL BAR
-    { 0x2772, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
-    { 0x2773, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
-    { 0x27E6, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT WHITE SQUARE BRACKET
-    { 0x27E7, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
-    { 0x27E8, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT ANGLE BRACKET
-    { 0x27E9, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT ANGLE BRACKET
-    { 0x27EA, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
-    { 0x27EB, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
-    { 0x27EC, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
-    { 0x27ED, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
-    { 0x27EE, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL LEFT FLATTENED PARENTHESIS
-    { 0x27EF, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
-    { 0x27F0, Infix, 5, 5, Stretchy}, // UPWARDS QUADRUPLE ARROW
-    { 0x27F1, Infix, 5, 5, Stretchy}, // DOWNWARDS QUADRUPLE ARROW
-    { 0x27F5, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS ARROW
-    { 0x27F6, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS ARROW
-    { 0x27F7, Infix, 5, 5, Stretchy | Accent}, // LONG LEFT RIGHT ARROW
-    { 0x27F8, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS DOUBLE ARROW
-    { 0x27F9, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS DOUBLE ARROW
-    { 0x27FA, Infix, 5, 5, Stretchy | Accent}, // LONG LEFT RIGHT DOUBLE ARROW
-    { 0x27FB, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS ARROW FROM BAR
-    { 0x27FC, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS ARROW FROM BAR
-    { 0x27FD, Infix, 5, 5, Stretchy | Accent}, // LONG LEFTWARDS DOUBLE ARROW FROM BAR
-    { 0x27FE, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS DOUBLE ARROW FROM BAR
-    { 0x27FF, Infix, 5, 5, Stretchy | Accent}, // LONG RIGHTWARDS SQUIGGLE ARROW
-    { 0x2900, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
-    { 0x2901, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
-    { 0x2902, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
-    { 0x2903, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
-    { 0x2904, Infix, 5, 5, Accent}, // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
-    { 0x2905, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW FROM BAR
-    { 0x2906, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW FROM BAR
-    { 0x2907, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW FROM BAR
-    { 0x2908, Infix, 5, 5, 0}, // DOWNWARDS ARROW WITH HORIZONTAL STROKE
-    { 0x2909, Infix, 5, 5, 0}, // UPWARDS ARROW WITH HORIZONTAL STROKE
-    { 0x290A, Infix, 5, 5, Stretchy}, // UPWARDS TRIPLE ARROW
-    { 0x290B, Infix, 5, 5, Stretchy}, // DOWNWARDS TRIPLE ARROW
-    { 0x290C, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS DOUBLE DASH ARROW
-    { 0x290D, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS DOUBLE DASH ARROW
-    { 0x290E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS TRIPLE DASH ARROW
-    { 0x290F, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TRIPLE DASH ARROW
-    { 0x2910, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
-    { 0x2911, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH DOTTED STEM
-    { 0x2912, Infix, 5, 5, Stretchy}, // UPWARDS ARROW TO BAR
-    { 0x2913, Infix, 5, 5, Stretchy}, // DOWNWARDS ARROW TO BAR
-    { 0x2914, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
-    { 0x2915, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
-    { 0x2916, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL
-    { 0x2917, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
-    { 0x2918, Infix, 5, 5, Accent}, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
-    { 0x2919, Infix, 5, 5, Accent}, // LEFTWARDS ARROW-TAIL
-    { 0x291A, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW-TAIL
-    { 0x291B, Infix, 5, 5, Accent}, // LEFTWARDS DOUBLE ARROW-TAIL
-    { 0x291C, Infix, 5, 5, Accent}, // RIGHTWARDS DOUBLE ARROW-TAIL
-    { 0x291D, Infix, 5, 5, Accent}, // LEFTWARDS ARROW TO BLACK DIAMOND
-    { 0x291E, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW TO BLACK DIAMOND
-    { 0x291F, Infix, 5, 5, Accent}, // LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
-    { 0x2920, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
-    { 0x2921, Infix, 5, 5, Stretchy}, // NORTH WEST AND SOUTH EAST ARROW
-    { 0x2922, Infix, 5, 5, Stretchy}, // NORTH EAST AND SOUTH WEST ARROW
-    { 0x2923, Infix, 5, 5, 0}, // NORTH WEST ARROW WITH HOOK
-    { 0x2924, Infix, 5, 5, 0}, // NORTH EAST ARROW WITH HOOK
-    { 0x2925, Infix, 5, 5, 0}, // SOUTH EAST ARROW WITH HOOK
-    { 0x2926, Infix, 5, 5, 0}, // SOUTH WEST ARROW WITH HOOK
-    { 0x2927, Infix, 5, 5, 0}, // NORTH WEST ARROW AND NORTH EAST ARROW
-    { 0x2928, Infix, 5, 5, 0}, // NORTH EAST ARROW AND SOUTH EAST ARROW
-    { 0x2929, Infix, 5, 5, 0}, // SOUTH EAST ARROW AND SOUTH WEST ARROW
-    { 0x292A, Infix, 5, 5, 0}, // SOUTH WEST ARROW AND NORTH WEST ARROW
-    { 0x292B, Infix, 5, 5, 0}, // RISING DIAGONAL CROSSING FALLING DIAGONAL
-    { 0x292C, Infix, 5, 5, 0}, // FALLING DIAGONAL CROSSING RISING DIAGONAL
-    { 0x292D, Infix, 5, 5, 0}, // SOUTH EAST ARROW CROSSING NORTH EAST ARROW
-    { 0x292E, Infix, 5, 5, 0}, // NORTH EAST ARROW CROSSING SOUTH EAST ARROW
-    { 0x292F, Infix, 5, 5, 0}, // FALLING DIAGONAL CROSSING NORTH EAST ARROW
-    { 0x2930, Infix, 5, 5, 0}, // RISING DIAGONAL CROSSING SOUTH EAST ARROW
-    { 0x2931, Infix, 5, 5, 0}, // NORTH EAST ARROW CROSSING NORTH WEST ARROW
-    { 0x2932, Infix, 5, 5, 0}, // NORTH WEST ARROW CROSSING NORTH EAST ARROW
-    { 0x2933, Infix, 5, 5, Accent}, // WAVE ARROW POINTING DIRECTLY RIGHT
-    { 0x2934, Infix, 5, 5, 0}, // ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
-    { 0x2935, Infix, 5, 5, 0}, // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
-    { 0x2936, Infix, 5, 5, 0}, // ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
-    { 0x2937, Infix, 5, 5, 0}, // ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
-    { 0x2938, Infix, 5, 5, 0}, // RIGHT-SIDE ARC CLOCKWISE ARROW
-    { 0x2939, Infix, 5, 5, 0}, // LEFT-SIDE ARC ANTICLOCKWISE ARROW
-    { 0x293A, Infix, 5, 5, Accent}, // TOP ARC ANTICLOCKWISE ARROW
-    { 0x293B, Infix, 5, 5, Accent}, // BOTTOM ARC ANTICLOCKWISE ARROW
-    { 0x293C, Infix, 5, 5, Accent}, // TOP ARC CLOCKWISE ARROW WITH MINUS
-    { 0x293D, Infix, 5, 5, Accent}, // TOP ARC ANTICLOCKWISE ARROW WITH PLUS
-    { 0x293E, Infix, 5, 5, 0}, // LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
-    { 0x293F, Infix, 5, 5, 0}, // LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
-    { 0x2940, Infix, 5, 5, 0}, // ANTICLOCKWISE CLOSED CIRCLE ARROW
-    { 0x2941, Infix, 5, 5, 0}, // CLOCKWISE CLOSED CIRCLE ARROW
-    { 0x2942, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
-    { 0x2943, Infix, 5, 5, Accent}, // LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
-    { 0x2944, Infix, 5, 5, Accent}, // SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
-    { 0x2945, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW WITH PLUS BELOW
-    { 0x2946, Infix, 5, 5, Accent}, // LEFTWARDS ARROW WITH PLUS BELOW
-    { 0x2947, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW THROUGH X
-    { 0x2948, Infix, 5, 5, Accent}, // LEFT RIGHT ARROW THROUGH SMALL CIRCLE
-    { 0x2949, Infix, 5, 5, 0}, // UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
-    { 0x294A, Infix, 5, 5, Accent}, // LEFT BARB UP RIGHT BARB DOWN HARPOON
-    { 0x294B, Infix, 5, 5, Accent}, // LEFT BARB DOWN RIGHT BARB UP HARPOON
-    { 0x294C, Infix, 5, 5, 0}, // UP BARB RIGHT DOWN BARB LEFT HARPOON
-    { 0x294D, Infix, 5, 5, 0}, // UP BARB LEFT DOWN BARB RIGHT HARPOON
-    { 0x294E, Infix, 5, 5, Stretchy | Accent}, // LEFT BARB UP RIGHT BARB UP HARPOON
-    { 0x294F, Infix, 5, 5, Stretchy}, // UP BARB RIGHT DOWN BARB RIGHT HARPOON
-    { 0x2950, Infix, 5, 5, Stretchy | Accent}, // LEFT BARB DOWN RIGHT BARB DOWN HARPOON
-    { 0x2951, Infix, 5, 5, Stretchy}, // UP BARB LEFT DOWN BARB LEFT HARPOON
-    { 0x2952, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UP TO BAR
-    { 0x2953, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UP TO BAR
-    { 0x2954, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHT TO BAR
-    { 0x2955, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
-    { 0x2956, Infix, 5, 5, Stretchy}, // LEFTWARDS HARPOON WITH BARB DOWN TO BAR
-    { 0x2957, Infix, 5, 5, Stretchy}, // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
-    { 0x2958, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT TO BAR
-    { 0x2959, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT TO BAR
-    { 0x295A, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB UP FROM BAR
-    { 0x295B, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB UP FROM BAR
-    { 0x295C, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB RIGHT FROM BAR
-    { 0x295D, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
-    { 0x295E, Infix, 5, 5, Stretchy | Accent}, // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
-    { 0x295F, Infix, 5, 5, Stretchy | Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
-    { 0x2960, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT FROM BAR
-    { 0x2961, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
-    { 0x2962, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
-    { 0x2963, Infix, 5, 5, 0}, // UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
-    { 0x2964, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
-    { 0x2965, Infix, 5, 5, 0}, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
-    { 0x2966, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
-    { 0x2967, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
-    { 0x2968, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
-    { 0x2969, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
-    { 0x296A, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
-    { 0x296B, Infix, 5, 5, Accent}, // LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
-    { 0x296C, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
-    { 0x296D, Infix, 5, 5, Accent}, // RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
-    { 0x296E, Infix, 5, 5, Stretchy}, // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
-    { 0x296F, Infix, 5, 5, Stretchy}, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
-    { 0x2970, Infix, 5, 5, Accent}, // RIGHT DOUBLE ARROW WITH ROUNDED HEAD
-    { 0x2971, Infix, 5, 5, Accent}, // EQUALS SIGN ABOVE RIGHTWARDS ARROW
-    { 0x2972, Infix, 5, 5, Accent}, // TILDE OPERATOR ABOVE RIGHTWARDS ARROW
-    { 0x2973, Infix, 5, 5, Accent}, // LEFTWARDS ARROW ABOVE TILDE OPERATOR
-    { 0x2974, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE TILDE OPERATOR
-    { 0x2975, Infix, 5, 5, Accent}, // RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
-    { 0x2976, Infix, 5, 5, Accent}, // LESS-THAN ABOVE LEFTWARDS ARROW
-    { 0x2977, Infix, 5, 5, Accent}, // LEFTWARDS ARROW THROUGH LESS-THAN
-    { 0x2978, Infix, 5, 5, Accent}, // GREATER-THAN ABOVE RIGHTWARDS ARROW
-    { 0x2979, Infix, 5, 5, Accent}, // SUBSET ABOVE RIGHTWARDS ARROW
-    { 0x297A, Infix, 5, 5, Accent}, // LEFTWARDS ARROW THROUGH SUBSET
-    { 0x297B, Infix, 5, 5, Accent}, // SUPERSET ABOVE LEFTWARDS ARROW
-    { 0x297C, Infix, 5, 5, Accent}, // LEFT FISH TAIL
-    { 0x297D, Infix, 5, 5, Accent}, // RIGHT FISH TAIL
-    { 0x297E, Infix, 5, 5, 0}, // UP FISH TAIL
-    { 0x297F, Infix, 5, 5, 0}, // DOWN FISH TAIL
-    { 0x2980, Prefix, 0, 0, Fence | Stretchy}, // TRIPLE VERTICAL BAR DELIMITER
-    { 0x2980, Postfix, 0, 0, Fence | Stretchy}, // TRIPLE VERTICAL BAR DELIMITER
-    { 0x2981, Infix, 3, 3, 0}, // Z NOTATION SPOT
-    { 0x2982, Infix, 3, 3, 0}, // Z NOTATION TYPE COLON
-    { 0x2983, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT WHITE CURLY BRACKET
-    { 0x2984, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT WHITE CURLY BRACKET
-    { 0x2985, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT WHITE PARENTHESIS
-    { 0x2986, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT WHITE PARENTHESIS
-    { 0x2987, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION LEFT IMAGE BRACKET
-    { 0x2988, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION RIGHT IMAGE BRACKET
-    { 0x2989, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION LEFT BINDING BRACKET
-    { 0x298A, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // Z NOTATION RIGHT BINDING BRACKET
-    { 0x298B, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH UNDERBAR
-    { 0x298C, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH UNDERBAR
-    { 0x298D, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
-    { 0x298E, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-    { 0x298F, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
-    { 0x2990, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
-    { 0x2991, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT ANGLE BRACKET WITH DOT
-    { 0x2992, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT ANGLE BRACKET WITH DOT
-    { 0x2993, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT ARC LESS-THAN BRACKET
-    { 0x2994, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT ARC GREATER-THAN BRACKET
-    { 0x2995, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // DOUBLE LEFT ARC GREATER-THAN BRACKET
-    { 0x2996, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // DOUBLE RIGHT ARC LESS-THAN BRACKET
-    { 0x2997, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT BLACK TORTOISE SHELL BRACKET
-    { 0x2998, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT BLACK TORTOISE SHELL BRACKET
-    { 0x2999, Infix, 3, 3, 0}, // DOTTED FENCE
-    { 0x299A, Infix, 3, 3, 0}, // VERTICAL ZIGZAG LINE
-    { 0x299B, Infix, 3, 3, 0}, // MEASURED ANGLE OPENING LEFT
-    { 0x299C, Infix, 3, 3, 0}, // RIGHT ANGLE VARIANT WITH SQUARE
-    { 0x299D, Infix, 3, 3, 0}, // MEASURED RIGHT ANGLE WITH DOT
-    { 0x299E, Infix, 3, 3, 0}, // ANGLE WITH S INSIDE
-    { 0x299F, Infix, 3, 3, 0}, // ACUTE ANGLE
-    { 0x29A0, Infix, 3, 3, 0}, // SPHERICAL ANGLE OPENING LEFT
-    { 0x29A1, Infix, 3, 3, 0}, // SPHERICAL ANGLE OPENING UP
-    { 0x29A2, Infix, 3, 3, 0}, // TURNED ANGLE
-    { 0x29A3, Infix, 3, 3, 0}, // REVERSED ANGLE
-    { 0x29A4, Infix, 3, 3, 0}, // ANGLE WITH UNDERBAR
-    { 0x29A5, Infix, 3, 3, 0}, // REVERSED ANGLE WITH UNDERBAR
-    { 0x29A6, Infix, 3, 3, 0}, // OBLIQUE ANGLE OPENING UP
-    { 0x29A7, Infix, 3, 3, 0}, // OBLIQUE ANGLE OPENING DOWN
-    { 0x29A8, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
-    { 0x29A9, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
-    { 0x29AA, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
-    { 0x29AB, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
-    { 0x29AC, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
-    { 0x29AD, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
-    { 0x29AE, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
-    { 0x29AF, Infix, 3, 3, 0}, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
-    { 0x29B0, Infix, 3, 3, 0}, // REVERSED EMPTY SET
-    { 0x29B1, Infix, 3, 3, 0}, // EMPTY SET WITH OVERBAR
-    { 0x29B2, Infix, 3, 3, 0}, // EMPTY SET WITH SMALL CIRCLE ABOVE
-    { 0x29B3, Infix, 3, 3, 0}, // EMPTY SET WITH RIGHT ARROW ABOVE
-    { 0x29B4, Infix, 3, 3, 0}, // EMPTY SET WITH LEFT ARROW ABOVE
-    { 0x29B5, Infix, 3, 3, 0}, // CIRCLE WITH HORIZONTAL BAR
-    { 0x29B6, Infix, 4, 4, 0}, // CIRCLED VERTICAL BAR
-    { 0x29B7, Infix, 4, 4, 0}, // CIRCLED PARALLEL
-    { 0x29B8, Infix, 4, 4, 0}, // CIRCLED REVERSE SOLIDUS
-    { 0x29B9, Infix, 4, 4, 0}, // CIRCLED PERPENDICULAR
-    { 0x29BA, Infix, 4, 4, 0}, // CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
-    { 0x29BB, Infix, 4, 4, 0}, // CIRCLE WITH SUPERIMPOSED X
-    { 0x29BC, Infix, 4, 4, 0}, // CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
-    { 0x29BD, Infix, 4, 4, 0}, // UP ARROW THROUGH CIRCLE
-    { 0x29BE, Infix, 4, 4, 0}, // CIRCLED WHITE BULLET
-    { 0x29BF, Infix, 4, 4, 0}, // CIRCLED BULLET
-    { 0x29C0, Infix, 5, 5, 0}, // CIRCLED LESS-THAN
-    { 0x29C1, Infix, 5, 5, 0}, // CIRCLED GREATER-THAN
-    { 0x29C2, Infix, 3, 3, 0}, // CIRCLE WITH SMALL CIRCLE TO THE RIGHT
-    { 0x29C3, Infix, 3, 3, 0}, // CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
-    { 0x29C4, Infix, 4, 4, 0}, // SQUARED RISING DIAGONAL SLASH
-    { 0x29C5, Infix, 4, 4, 0}, // SQUARED FALLING DIAGONAL SLASH
-    { 0x29C6, Infix, 4, 4, 0}, // SQUARED ASTERISK
-    { 0x29C7, Infix, 4, 4, 0}, // SQUARED SMALL CIRCLE
-    { 0x29C8, Infix, 4, 4, 0}, // SQUARED SQUARE
-    { 0x29C9, Infix, 3, 3, 0}, // TWO JOINED SQUARES
-    { 0x29CA, Infix, 3, 3, 0}, // TRIANGLE WITH DOT ABOVE
-    { 0x29CB, Infix, 3, 3, 0}, // TRIANGLE WITH UNDERBAR
-    { 0x29CC, Infix, 3, 3, 0}, // S IN TRIANGLE
-    { 0x29CD, Infix, 3, 3, 0}, // TRIANGLE WITH SERIFS AT BOTTOM
-    { 0x29CE, Infix, 5, 5, 0}, // RIGHT TRIANGLE ABOVE LEFT TRIANGLE
-    { 0x29CF, Infix, 5, 5, 0}, // LEFT TRIANGLE BESIDE VERTICAL BAR
-    { 0x29D0, Infix, 5, 5, 0}, // VERTICAL BAR BESIDE RIGHT TRIANGLE
-    { 0x29D1, Infix, 5, 5, 0}, // BOWTIE WITH LEFT HALF BLACK
-    { 0x29D2, Infix, 5, 5, 0}, // BOWTIE WITH RIGHT HALF BLACK
-    { 0x29D3, Infix, 5, 5, 0}, // BLACK BOWTIE
-    { 0x29D4, Infix, 5, 5, 0}, // TIMES WITH LEFT HALF BLACK
-    { 0x29D5, Infix, 5, 5, 0}, // TIMES WITH RIGHT HALF BLACK
-    { 0x29D6, Infix, 4, 4, 0}, // WHITE HOURGLASS
-    { 0x29D7, Infix, 4, 4, 0}, // BLACK HOURGLASS
-    { 0x29D8, Infix, 3, 3, 0}, // LEFT WIGGLY FENCE
-    { 0x29D9, Infix, 3, 3, 0}, // RIGHT WIGGLY FENCE
-    { 0x29DB, Infix, 3, 3, 0}, // RIGHT DOUBLE WIGGLY FENCE
-    { 0x29DC, Infix, 3, 3, 0}, // INCOMPLETE INFINITY
-    { 0x29DD, Infix, 3, 3, 0}, // TIE OVER INFINITY
-    { 0x29DE, Infix, 5, 5, 0}, // INFINITY NEGATED WITH VERTICAL BAR
-    { 0x29DF, Infix, 3, 3, 0}, // DOUBLE-ENDED MULTIMAP
-    { 0x29E0, Infix, 3, 3, 0}, // SQUARE WITH CONTOURED OUTLINE
-    { 0x29E1, Infix, 5, 5, 0}, // INCREASES AS
-    { 0x29E2, Infix, 4, 4, 0}, // SHUFFLE PRODUCT
-    { 0x29E3, Infix, 5, 5, 0}, // EQUALS SIGN AND SLANTED PARALLEL
-    { 0x29E4, Infix, 5, 5, 0}, // EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
-    { 0x29E5, Infix, 5, 5, 0}, // IDENTICAL TO AND SLANTED PARALLEL
-    { 0x29E6, Infix, 5, 5, 0}, // GLEICH STARK
-    { 0x29E7, Infix, 3, 3, 0}, // THERMODYNAMIC
-    { 0x29E8, Infix, 3, 3, 0}, // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
-    { 0x29E9, Infix, 3, 3, 0}, // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
-    { 0x29EA, Infix, 3, 3, 0}, // BLACK DIAMOND WITH DOWN ARROW
-    { 0x29EB, Infix, 3, 3, 0}, // BLACK LOZENGE
-    { 0x29EC, Infix, 3, 3, 0}, // WHITE CIRCLE WITH DOWN ARROW
-    { 0x29ED, Infix, 3, 3, 0}, // BLACK CIRCLE WITH DOWN ARROW
-    { 0x29EE, Infix, 3, 3, 0}, // ERROR-BARRED WHITE SQUARE
-    { 0x29EF, Infix, 3, 3, 0}, // ERROR-BARRED BLACK SQUARE
-    { 0x29F0, Infix, 3, 3, 0}, // ERROR-BARRED WHITE DIAMOND
-    { 0x29F1, Infix, 3, 3, 0}, // ERROR-BARRED BLACK DIAMOND
-    { 0x29F2, Infix, 3, 3, 0}, // ERROR-BARRED WHITE CIRCLE
-    { 0x29F3, Infix, 3, 3, 0}, // ERROR-BARRED BLACK CIRCLE
-    { 0x29F4, Infix, 5, 5, 0}, // RULE-DELAYED
-    { 0x29F5, Infix, 4, 4, 0}, // REVERSE SOLIDUS OPERATOR
-    { 0x29F6, Infix, 4, 4, 0}, // SOLIDUS WITH OVERBAR
-    { 0x29F7, Infix, 4, 4, 0}, // REVERSE SOLIDUS WITH HORIZONTAL STROKE
-    { 0x29F8, Infix, 3, 3, 0}, // BIG SOLIDUS
-    { 0x29F9, Infix, 3, 3, 0}, // BIG REVERSE SOLIDUS
-    { 0x29FA, Infix, 3, 3, 0}, // DOUBLE PLUS
-    { 0x29FB, Infix, 3, 3, 0}, // TRIPLE PLUS
-    { 0x29FC, Prefix, 0, 0, Symmetric | Fence | Stretchy}, // LEFT-POINTING CURVED ANGLE BRACKET
-    { 0x29FD, Postfix, 0, 0, Symmetric | Fence | Stretchy}, // RIGHT-POINTING CURVED ANGLE BRACKET
-    { 0x29FE, Infix, 4, 4, 0}, // TINY
-    { 0x29FF, Infix, 4, 4, 0}, // MINY
-    { 0x2A00, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED DOT OPERATOR
-    { 0x2A01, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED PLUS OPERATOR
-    { 0x2A02, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY CIRCLED TIMES OPERATOR
-    { 0x2A03, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION OPERATOR WITH DOT
-    { 0x2A04, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY UNION OPERATOR WITH PLUS
-    { 0x2A05, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SQUARE INTERSECTION OPERATOR
-    { 0x2A06, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY SQUARE UNION OPERATOR
-    { 0x2A07, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // TWO LOGICAL AND OPERATOR
-    { 0x2A08, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // TWO LOGICAL OR OPERATOR
-    { 0x2A09, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY TIMES OPERATOR
-    { 0x2A0A, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // MODULO TWO SUM
-    { 0x2A0B, Prefix, 1, 2, Symmetric | LargeOp}, // SUMMATION WITH INTEGRAL
-    { 0x2A0C, Prefix, 0, 1, Symmetric | LargeOp}, // QUADRUPLE INTEGRAL OPERATOR
-    { 0x2A0D, Prefix, 1, 2, Symmetric | LargeOp}, // FINITE PART INTEGRAL
-    { 0x2A0E, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH DOUBLE STROKE
-    { 0x2A0F, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL AVERAGE WITH SLASH
-    { 0x2A10, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // CIRCULATION FUNCTION
-    { 0x2A11, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // ANTICLOCKWISE INTEGRATION
-    { 0x2A12, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
-    { 0x2A13, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
-    { 0x2A14, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LINE INTEGRATION NOT INCLUDING THE POLE
-    { 0x2A15, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL AROUND A POINT OPERATOR
-    { 0x2A16, Prefix, 1, 2, Symmetric | LargeOp}, // QUATERNION INTEGRAL OPERATOR
-    { 0x2A17, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
-    { 0x2A18, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH TIMES SIGN
-    { 0x2A19, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH INTERSECTION
-    { 0x2A1A, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH UNION
-    { 0x2A1B, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH OVERBAR
-    { 0x2A1C, Prefix, 1, 2, Symmetric | LargeOp}, // INTEGRAL WITH UNDERBAR
-    { 0x2A1D, Infix, 3, 3, 0}, // JOIN
-    { 0x2A1E, Infix, 3, 3, 0}, // LARGE LEFT TRIANGLE OPERATOR
-    { 0x2A1F, Infix, 3, 3, 0}, // Z NOTATION SCHEMA COMPOSITION
-    { 0x2A20, Infix, 3, 3, 0}, // Z NOTATION SCHEMA PIPING
-    { 0x2A21, Infix, 3, 3, 0}, // Z NOTATION SCHEMA PROJECTION
-    { 0x2A22, Infix, 4, 4, 0}, // PLUS SIGN WITH SMALL CIRCLE ABOVE
-    { 0x2A23, Infix, 4, 4, 0}, // PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
-    { 0x2A24, Infix, 4, 4, 0}, // PLUS SIGN WITH TILDE ABOVE
-    { 0x2A25, Infix, 4, 4, 0}, // PLUS SIGN WITH DOT BELOW
-    { 0x2A26, Infix, 4, 4, 0}, // PLUS SIGN WITH TILDE BELOW
-    { 0x2A27, Infix, 4, 4, 0}, // PLUS SIGN WITH SUBSCRIPT TWO
-    { 0x2A28, Infix, 4, 4, 0}, // PLUS SIGN WITH BLACK TRIANGLE
-    { 0x2A29, Infix, 4, 4, 0}, // MINUS SIGN WITH COMMA ABOVE
-    { 0x2A2A, Infix, 4, 4, 0}, // MINUS SIGN WITH DOT BELOW
-    { 0x2A2B, Infix, 4, 4, 0}, // MINUS SIGN WITH FALLING DOTS
-    { 0x2A2C, Infix, 4, 4, 0}, // MINUS SIGN WITH RISING DOTS
-    { 0x2A2D, Infix, 4, 4, 0}, // PLUS SIGN IN LEFT HALF CIRCLE
-    { 0x2A2E, Infix, 4, 4, 0}, // PLUS SIGN IN RIGHT HALF CIRCLE
-    { 0x2A2F, Infix, 4, 4, 0}, // VECTOR OR CROSS PRODUCT
-    { 0x2A30, Infix, 4, 4, 0}, // MULTIPLICATION SIGN WITH DOT ABOVE
-    { 0x2A31, Infix, 4, 4, 0}, // MULTIPLICATION SIGN WITH UNDERBAR
-    { 0x2A32, Infix, 4, 4, 0}, // SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
-    { 0x2A33, Infix, 4, 4, 0}, // SMASH PRODUCT
-    { 0x2A34, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN LEFT HALF CIRCLE
-    { 0x2A35, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
-    { 0x2A36, Infix, 4, 4, 0}, // CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
-    { 0x2A37, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN DOUBLE CIRCLE
-    { 0x2A38, Infix, 4, 4, 0}, // CIRCLED DIVISION SIGN
-    { 0x2A39, Infix, 4, 4, 0}, // PLUS SIGN IN TRIANGLE
-    { 0x2A3A, Infix, 4, 4, 0}, // MINUS SIGN IN TRIANGLE
-    { 0x2A3B, Infix, 4, 4, 0}, // MULTIPLICATION SIGN IN TRIANGLE
-    { 0x2A3C, Infix, 4, 4, 0}, // INTERIOR PRODUCT
-    { 0x2A3D, Infix, 4, 4, 0}, // RIGHTHAND INTERIOR PRODUCT
-    { 0x2A3E, Infix, 4, 4, 0}, // Z NOTATION RELATIONAL COMPOSITION
-    { 0x2A3F, Infix, 4, 4, 0}, // AMALGAMATION OR COPRODUCT
-    { 0x2A40, Infix, 4, 4, 0}, // INTERSECTION WITH DOT
-    { 0x2A41, Infix, 4, 4, 0}, // UNION WITH MINUS SIGN
-    { 0x2A42, Infix, 4, 4, 0}, // UNION WITH OVERBAR
-    { 0x2A43, Infix, 4, 4, 0}, // INTERSECTION WITH OVERBAR
-    { 0x2A44, Infix, 4, 4, 0}, // INTERSECTION WITH LOGICAL AND
-    { 0x2A45, Infix, 4, 4, 0}, // UNION WITH LOGICAL OR
-    { 0x2A46, Infix, 4, 4, 0}, // UNION ABOVE INTERSECTION
-    { 0x2A47, Infix, 4, 4, 0}, // INTERSECTION ABOVE UNION
-    { 0x2A48, Infix, 4, 4, 0}, // UNION ABOVE BAR ABOVE INTERSECTION
-    { 0x2A49, Infix, 4, 4, 0}, // INTERSECTION ABOVE BAR ABOVE UNION
-    { 0x2A4A, Infix, 4, 4, 0}, // UNION BESIDE AND JOINED WITH UNION
-    { 0x2A4B, Infix, 4, 4, 0}, // INTERSECTION BESIDE AND JOINED WITH INTERSECTION
-    { 0x2A4C, Infix, 4, 4, 0}, // CLOSED UNION WITH SERIFS
-    { 0x2A4D, Infix, 4, 4, 0}, // CLOSED INTERSECTION WITH SERIFS
-    { 0x2A4E, Infix, 4, 4, 0}, // DOUBLE SQUARE INTERSECTION
-    { 0x2A4F, Infix, 4, 4, 0}, // DOUBLE SQUARE UNION
-    { 0x2A50, Infix, 4, 4, 0}, // CLOSED UNION WITH SERIFS AND SMASH PRODUCT
-    { 0x2A51, Infix, 4, 4, 0}, // LOGICAL AND WITH DOT ABOVE
-    { 0x2A52, Infix, 4, 4, 0}, // LOGICAL OR WITH DOT ABOVE
-    { 0x2A53, Infix, 4, 4, 0}, // DOUBLE LOGICAL AND
-    { 0x2A54, Infix, 4, 4, 0}, // DOUBLE LOGICAL OR
-    { 0x2A55, Infix, 4, 4, 0}, // TWO INTERSECTING LOGICAL AND
-    { 0x2A56, Infix, 4, 4, 0}, // TWO INTERSECTING LOGICAL OR
-    { 0x2A57, Infix, 4, 4, 0}, // SLOPING LARGE OR
-    { 0x2A58, Infix, 4, 4, 0}, // SLOPING LARGE AND
-    { 0x2A59, Infix, 5, 5, 0}, // LOGICAL OR OVERLAPPING LOGICAL AND
-    { 0x2A5A, Infix, 4, 4, 0}, // LOGICAL AND WITH MIDDLE STEM
-    { 0x2A5B, Infix, 4, 4, 0}, // LOGICAL OR WITH MIDDLE STEM
-    { 0x2A5C, Infix, 4, 4, 0}, // LOGICAL AND WITH HORIZONTAL DASH
-    { 0x2A5D, Infix, 4, 4, 0}, // LOGICAL OR WITH HORIZONTAL DASH
-    { 0x2A5E, Infix, 4, 4, 0}, // LOGICAL AND WITH DOUBLE OVERBAR
-    { 0x2A5F, Infix, 4, 4, 0}, // LOGICAL AND WITH UNDERBAR
-    { 0x2A60, Infix, 4, 4, 0}, // LOGICAL AND WITH DOUBLE UNDERBAR
-    { 0x2A61, Infix, 4, 4, 0}, // SMALL VEE WITH UNDERBAR
-    { 0x2A62, Infix, 4, 4, 0}, // LOGICAL OR WITH DOUBLE OVERBAR
-    { 0x2A63, Infix, 4, 4, 0}, // LOGICAL OR WITH DOUBLE UNDERBAR
-    { 0x2A64, Infix, 4, 4, 0}, // Z NOTATION DOMAIN ANTIRESTRICTION
-    { 0x2A65, Infix, 4, 4, 0}, // Z NOTATION RANGE ANTIRESTRICTION
-    { 0x2A66, Infix, 5, 5, 0}, // EQUALS SIGN WITH DOT BELOW
-    { 0x2A67, Infix, 5, 5, 0}, // IDENTICAL WITH DOT ABOVE
-    { 0x2A68, Infix, 5, 5, 0}, // TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
-    { 0x2A69, Infix, 5, 5, 0}, // TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
-    { 0x2A6A, Infix, 5, 5, 0}, // TILDE OPERATOR WITH DOT ABOVE
-    { 0x2A6B, Infix, 5, 5, 0}, // TILDE OPERATOR WITH RISING DOTS
-    { 0x2A6C, Infix, 5, 5, 0}, // SIMILAR MINUS SIMILAR
-    { 0x2A6D, Infix, 5, 5, 0}, // CONGRUENT WITH DOT ABOVE
-    { 0x2A6E, Infix, 5, 5, 0}, // EQUALS WITH ASTERISK
-    { 0x2A6F, Infix, 5, 5, 0}, // ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
-    { 0x2A70, Infix, 5, 5, 0}, // APPROXIMATELY EQUAL OR EQUAL TO
-    { 0x2A71, Infix, 4, 4, 0}, // EQUALS SIGN ABOVE PLUS SIGN
-    { 0x2A72, Infix, 4, 4, 0}, // PLUS SIGN ABOVE EQUALS SIGN
-    { 0x2A73, Infix, 5, 5, 0}, // EQUALS SIGN ABOVE TILDE OPERATOR
-    { 0x2A74, Infix, 5, 5, 0}, // DOUBLE COLON EQUAL
-    { 0x2A75, Infix, 5, 5, 0}, // TWO CONSECUTIVE EQUALS SIGNS
-    { 0x2A76, Infix, 5, 5, 0}, // THREE CONSECUTIVE EQUALS SIGNS
-    { 0x2A77, Infix, 5, 5, 0}, // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
-    { 0x2A78, Infix, 5, 5, 0}, // EQUIVALENT WITH FOUR DOTS ABOVE
-    { 0x2A79, Infix, 5, 5, 0}, // LESS-THAN WITH CIRCLE INSIDE
-    { 0x2A7A, Infix, 5, 5, 0}, // GREATER-THAN WITH CIRCLE INSIDE
-    { 0x2A7B, Infix, 5, 5, 0}, // LESS-THAN WITH QUESTION MARK ABOVE
-    { 0x2A7C, Infix, 5, 5, 0}, // GREATER-THAN WITH QUESTION MARK ABOVE
-    { 0x2A7D, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO
-    { 0x2A7E, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO
-    { 0x2A7F, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
-    { 0x2A80, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
-    { 0x2A81, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
-    { 0x2A82, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
-    { 0x2A83, Infix, 5, 5, 0}, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
-    { 0x2A84, Infix, 5, 5, 0}, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
-    { 0x2A85, Infix, 5, 5, 0}, // LESS-THAN OR APPROXIMATE
-    { 0x2A86, Infix, 5, 5, 0}, // GREATER-THAN OR APPROXIMATE
-    { 0x2A87, Infix, 5, 5, 0}, // LESS-THAN AND SINGLE-LINE NOT EQUAL TO
-    { 0x2A88, Infix, 5, 5, 0}, // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
-    { 0x2A89, Infix, 5, 5, 0}, // LESS-THAN AND NOT APPROXIMATE
-    { 0x2A8A, Infix, 5, 5, 0}, // GREATER-THAN AND NOT APPROXIMATE
-    { 0x2A8B, Infix, 5, 5, 0}, // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
-    { 0x2A8C, Infix, 5, 5, 0}, // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
-    { 0x2A8D, Infix, 5, 5, 0}, // LESS-THAN ABOVE SIMILAR OR EQUAL
-    { 0x2A8E, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SIMILAR OR EQUAL
-    { 0x2A8F, Infix, 5, 5, 0}, // LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
-    { 0x2A90, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
-    { 0x2A91, Infix, 5, 5, 0}, // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
-    { 0x2A92, Infix, 5, 5, 0}, // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
-    { 0x2A93, Infix, 5, 5, 0}, // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
-    { 0x2A94, Infix, 5, 5, 0}, // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
-    { 0x2A95, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR LESS-THAN
-    { 0x2A96, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR GREATER-THAN
-    { 0x2A97, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
-    { 0x2A98, Infix, 5, 5, 0}, // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
-    { 0x2A99, Infix, 5, 5, 0}, // DOUBLE-LINE EQUAL TO OR LESS-THAN
-    { 0x2A9A, Infix, 5, 5, 0}, // DOUBLE-LINE EQUAL TO OR GREATER-THAN
-    { 0x2A9B, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
-    { 0x2A9C, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
-    { 0x2A9D, Infix, 5, 5, 0}, // SIMILAR OR LESS-THAN
-    { 0x2A9E, Infix, 5, 5, 0}, // SIMILAR OR GREATER-THAN
-    { 0x2A9F, Infix, 5, 5, 0}, // SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
-    { 0x2AA0, Infix, 5, 5, 0}, // SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
-    { 0x2AA1, Infix, 5, 5, 0}, // DOUBLE NESTED LESS-THAN
-    { 0x2AA2, Infix, 5, 5, 0}, // DOUBLE NESTED GREATER-THAN
-    { 0x2AA3, Infix, 5, 5, 0}, // DOUBLE NESTED LESS-THAN WITH UNDERBAR
-    { 0x2AA4, Infix, 5, 5, 0}, // GREATER-THAN OVERLAPPING LESS-THAN
-    { 0x2AA5, Infix, 5, 5, 0}, // GREATER-THAN BESIDE LESS-THAN
-    { 0x2AA6, Infix, 5, 5, 0}, // LESS-THAN CLOSED BY CURVE
-    { 0x2AA7, Infix, 5, 5, 0}, // GREATER-THAN CLOSED BY CURVE
-    { 0x2AA8, Infix, 5, 5, 0}, // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
-    { 0x2AA9, Infix, 5, 5, 0}, // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
-    { 0x2AAA, Infix, 5, 5, 0}, // SMALLER THAN
-    { 0x2AAB, Infix, 5, 5, 0}, // LARGER THAN
-    { 0x2AAC, Infix, 5, 5, 0}, // SMALLER THAN OR EQUAL TO
-    { 0x2AAD, Infix, 5, 5, 0}, // LARGER THAN OR EQUAL TO
-    { 0x2AAE, Infix, 5, 5, 0}, // EQUALS SIGN WITH BUMPY ABOVE
-    { 0x2AAF, Infix, 5, 5, 0}, // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
-    { 0x2AB0, Infix, 5, 5, 0}, // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
-    { 0x2AB1, Infix, 5, 5, 0}, // PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
-    { 0x2AB2, Infix, 5, 5, 0}, // SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
-    { 0x2AB3, Infix, 5, 5, 0}, // PRECEDES ABOVE EQUALS SIGN
-    { 0x2AB4, Infix, 5, 5, 0}, // SUCCEEDS ABOVE EQUALS SIGN
-    { 0x2AB5, Infix, 5, 5, 0}, // PRECEDES ABOVE NOT EQUAL TO
-    { 0x2AB6, Infix, 5, 5, 0}, // SUCCEEDS ABOVE NOT EQUAL TO
-    { 0x2AB7, Infix, 5, 5, 0}, // PRECEDES ABOVE ALMOST EQUAL TO
-    { 0x2AB8, Infix, 5, 5, 0}, // SUCCEEDS ABOVE ALMOST EQUAL TO
-    { 0x2AB9, Infix, 5, 5, 0}, // PRECEDES ABOVE NOT ALMOST EQUAL TO
-    { 0x2ABA, Infix, 5, 5, 0}, // SUCCEEDS ABOVE NOT ALMOST EQUAL TO
-    { 0x2ABB, Infix, 5, 5, 0}, // DOUBLE PRECEDES
-    { 0x2ABC, Infix, 5, 5, 0}, // DOUBLE SUCCEEDS
-    { 0x2ABD, Infix, 5, 5, 0}, // SUBSET WITH DOT
-    { 0x2ABE, Infix, 5, 5, 0}, // SUPERSET WITH DOT
-    { 0x2ABF, Infix, 5, 5, 0}, // SUBSET WITH PLUS SIGN BELOW
-    { 0x2AC0, Infix, 5, 5, 0}, // SUPERSET WITH PLUS SIGN BELOW
-    { 0x2AC1, Infix, 5, 5, 0}, // SUBSET WITH MULTIPLICATION SIGN BELOW
-    { 0x2AC2, Infix, 5, 5, 0}, // SUPERSET WITH MULTIPLICATION SIGN BELOW
-    { 0x2AC3, Infix, 5, 5, 0}, // SUBSET OF OR EQUAL TO WITH DOT ABOVE
-    { 0x2AC4, Infix, 5, 5, 0}, // SUPERSET OF OR EQUAL TO WITH DOT ABOVE
-    { 0x2AC5, Infix, 5, 5, 0}, // SUBSET OF ABOVE EQUALS SIGN
-    { 0x2AC6, Infix, 5, 5, 0}, // SUPERSET OF ABOVE EQUALS SIGN
-    { 0x2AC7, Infix, 5, 5, 0}, // SUBSET OF ABOVE TILDE OPERATOR
-    { 0x2AC8, Infix, 5, 5, 0}, // SUPERSET OF ABOVE TILDE OPERATOR
-    { 0x2AC9, Infix, 5, 5, 0}, // SUBSET OF ABOVE ALMOST EQUAL TO
-    { 0x2ACA, Infix, 5, 5, 0}, // SUPERSET OF ABOVE ALMOST EQUAL TO
-    { 0x2ACB, Infix, 5, 5, 0}, // SUBSET OF ABOVE NOT EQUAL TO
-    { 0x2ACC, Infix, 5, 5, 0}, // SUPERSET OF ABOVE NOT EQUAL TO
-    { 0x2ACD, Infix, 5, 5, 0}, // SQUARE LEFT OPEN BOX OPERATOR
-    { 0x2ACE, Infix, 5, 5, 0}, // SQUARE RIGHT OPEN BOX OPERATOR
-    { 0x2ACF, Infix, 5, 5, 0}, // CLOSED SUBSET
-    { 0x2AD0, Infix, 5, 5, 0}, // CLOSED SUPERSET
-    { 0x2AD1, Infix, 5, 5, 0}, // CLOSED SUBSET OR EQUAL TO
-    { 0x2AD2, Infix, 5, 5, 0}, // CLOSED SUPERSET OR EQUAL TO
-    { 0x2AD3, Infix, 5, 5, 0}, // SUBSET ABOVE SUPERSET
-    { 0x2AD4, Infix, 5, 5, 0}, // SUPERSET ABOVE SUBSET
-    { 0x2AD5, Infix, 5, 5, 0}, // SUBSET ABOVE SUBSET
-    { 0x2AD6, Infix, 5, 5, 0}, // SUPERSET ABOVE SUPERSET
-    { 0x2AD7, Infix, 5, 5, 0}, // SUPERSET BESIDE SUBSET
-    { 0x2AD8, Infix, 5, 5, 0}, // SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
-    { 0x2AD9, Infix, 5, 5, 0}, // ELEMENT OF OPENING DOWNWARDS
-    { 0x2ADA, Infix, 5, 5, 0}, // PITCHFORK WITH TEE TOP
-    { 0x2ADB, Infix, 5, 5, 0}, // TRANSVERSAL INTERSECTION
-    { 0x2ADD, Infix, 5, 5, 0}, // NONFORKING
-    { 0x2ADE, Infix, 5, 5, 0}, // SHORT LEFT TACK
-    { 0x2ADF, Infix, 5, 5, 0}, // SHORT DOWN TACK
-    { 0x2AE0, Infix, 5, 5, 0}, // SHORT UP TACK
-    { 0x2AE1, Infix, 5, 5, 0}, // PERPENDICULAR WITH S
-    { 0x2AE2, Infix, 5, 5, 0}, // VERTICAL BAR TRIPLE RIGHT TURNSTILE
-    { 0x2AE3, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR LEFT TURNSTILE
-    { 0x2AE4, Infix, 5, 5, 0}, // VERTICAL BAR DOUBLE LEFT TURNSTILE
-    { 0x2AE5, Infix, 5, 5, 0}, // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
-    { 0x2AE6, Infix, 5, 5, 0}, // LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
-    { 0x2AE7, Infix, 5, 5, 0}, // SHORT DOWN TACK WITH OVERBAR
-    { 0x2AE8, Infix, 5, 5, 0}, // SHORT UP TACK WITH UNDERBAR
-    { 0x2AE9, Infix, 5, 5, 0}, // SHORT UP TACK ABOVE SHORT DOWN TACK
-    { 0x2AEA, Infix, 5, 5, 0}, // DOUBLE DOWN TACK
-    { 0x2AEB, Infix, 5, 5, 0}, // DOUBLE UP TACK
-    { 0x2AEC, Infix, 5, 5, 0}, // DOUBLE STROKE NOT SIGN
-    { 0x2AED, Infix, 5, 5, 0}, // REVERSED DOUBLE STROKE NOT SIGN
-    { 0x2AEE, Infix, 5, 5, 0}, // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
-    { 0x2AEF, Infix, 5, 5, 0}, // VERTICAL LINE WITH CIRCLE ABOVE
-    { 0x2AF0, Infix, 5, 5, 0}, // VERTICAL LINE WITH CIRCLE BELOW
-    { 0x2AF1, Infix, 5, 5, 0}, // DOWN TACK WITH CIRCLE BELOW
-    { 0x2AF2, Infix, 5, 5, 0}, // PARALLEL WITH HORIZONTAL STROKE
-    { 0x2AF3, Infix, 5, 5, 0}, // PARALLEL WITH TILDE OPERATOR
-    { 0x2AF4, Infix, 4, 4, 0}, // TRIPLE VERTICAL BAR BINARY RELATION
-    { 0x2AF5, Infix, 4, 4, 0}, // TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
-    { 0x2AF6, Infix, 4, 4, 0}, // TRIPLE COLON OPERATOR
-    { 0x2AF7, Infix, 5, 5, 0}, // TRIPLE NESTED LESS-THAN
-    { 0x2AF8, Infix, 5, 5, 0}, // TRIPLE NESTED GREATER-THAN
-    { 0x2AF9, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
-    { 0x2AFA, Infix, 5, 5, 0}, // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
-    { 0x2AFB, Infix, 4, 4, 0}, // TRIPLE SOLIDUS BINARY RELATION
-    { 0x2AFC, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // LARGE TRIPLE VERTICAL BAR OPERATOR
-    { 0x2AFD, Infix, 4, 4, 0}, // DOUBLE SOLIDUS OPERATOR
-    { 0x2AFE, Infix, 3, 3, 0}, // WHITE VERTICAL BAR
-    { 0x2AFF, Prefix, 1, 2, Symmetric | LargeOp | MovableLimits}, // N-ARY WHITE VERTICAL BAR
-    { 0x2B45, Infix, 5, 5, Stretchy}, // LEFTWARDS QUADRUPLE ARROW
-    { 0x2B46, Infix, 5, 5, Stretchy} // RIGHTWARDS QUADRUPLE ARROW
-};
-
-// A list of operators that stretch in the horizontal direction. This has been generated from Mozilla's MathML operator dictionary.
-static inline UChar ExtractKeyHorizontal(const UChar* entry) { return *entry; }
-static const UChar horizontalOperators[] = {
-    0x003D, 0x005E, 0x005F, 0x007E, 0x00AF, 0x02C6, 0x02C7, 0x02C9, 0x02CD, 0x02DC, 0x02F7, 0x0302, 0x0332, 0x203E, 0x20D0, 0x20D1, 0x20D6, 0x20D7, 0x20E1, 0x2190, 0x2192, 0x2194, 0x2198, 0x2199, 0x219C, 0x219D, 0x219E, 0x21A0, 0x21A2, 0x21A3, 0x21A4, 0x21A6, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21B4, 0x21B9, 0x21BC, 0x21BD, 0x21C0, 0x21C1, 0x21C4, 0x21C6, 0x21C7, 0x21C9, 0x21CB, 0x21CC, 0x21D0, 0x21D2, 0x21D4, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21E0, 0x21E2, 0x21E4, 0x21E5, 0x21E6, 0x21E8, 0x21F0, 0x21F6, 0x21FD, 0x21FE, 0x21FF, 0x23B4, 0x23B5, 0x23DC, 0x23DD, 0x23DE, 0x23DF, 0x23E0, 0x23E1, 0x2500, 0x27F5, 0x27F6, 0x27F7, 0x27F8, 0x27F9, 0x27FA, 0x27FB, 0x27FC, 0x27FD, 0x27FE, 0x27FF, 0x290C, 0x290D, 0x290E, 0x290F, 0x2910, 0x294E, 0x2950, 0x2952, 0x2953, 0x2956, 0x2957, 0x295A, 0x295B, 0x295E, 0x295F, 0x2B45, 0x2B46, 0xFE35, 0xFE36, 0xFE37, 0xFE38
-};
-
-const Entry* MathMLOperatorDictionary::getEntry(UChar textContent, Form form)
-{
-    return tryBinarySearch&lt;const Entry, Key&gt;(dictionary, dictionarySize, Key(textContent, form), ExtractKey);
-}
-
-const Entry* MathMLOperatorDictionary::getEntry(UChar textContent)
-{
-    // For each operator, the dictionary has at most three form in the following order: Infix, Prefix, Postfix.
-    if (const Entry* entry = tryBinarySearch&lt;const Entry, UChar&gt;(dictionary, dictionarySize, textContent, ExtractChar)) {
-        // There are at most two other entries before the one found.
-        if (entry != dictionary &amp;&amp; (entry - 1)-&gt;character == textContent)
-            entry--;
-        if (entry != dictionary &amp;&amp; (entry - 1)-&gt;character == textContent)
-            entry--;
-        return entry;
-    }
-    return nullptr;
-}
-
-bool MathMLOperatorDictionary::isVertical(UChar textContent)
-{
-    return !tryBinarySearch&lt;const UChar, UChar&gt;(horizontalOperators, WTF_ARRAY_LENGTH(horizontalOperators), textContent, ExtractKeyHorizontal);
-}
-
-}
-
-#endif // ENABLE(MATHML)
</del></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlMathMLOperatorDictionaryh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h (203115 => 203116)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h        2016-07-12 14:36:34 UTC (rev 203115)
+++ trunk/Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h        2016-07-12 16:43:04 UTC (rev 203116)
</span><span class="lines">@@ -1,60 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Frederic Wang (fred.wang@free.fr). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef MathMLOperatorDictionary_h
-#define MathMLOperatorDictionary_h
-
-#if ENABLE(MATHML)
-
-#include &lt;unicode/utypes.h&gt;
-
-namespace WebCore {
-
-namespace MathMLOperatorDictionary {
-enum Form { Infix, Prefix, Postfix };
-enum Flag {
-    Accent = 0x1,
-    Fence = 0x2, // This has no visual effect but allows to expose semantic information via the accessibility tree.
-    LargeOp = 0x4,
-    MovableLimits = 0x8,
-    Separator = 0x10, // This has no visual effect but allows to expose semantic information via the accessibility tree.
-    Stretchy = 0x20,
-    Symmetric = 0x40
-};
-struct Entry {
-    UChar character;
-    unsigned form : 2;
-    unsigned lspace : 3;
-    unsigned rspace : 3;
-    unsigned flags : 8;
-};
-const Entry* getEntry(UChar, Form);
-const Entry* getEntry(UChar);
-bool isVertical(UChar);
-}
-
-}
-#endif // ENABLE(MATHML)
-#endif // MathMLOperatorDictionary_h
</del></span></pre>
</div>
</div>

</body>
</html>