1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @fileoverview Semantic attributes of Math symbols and expressions.
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * This file contains the basic functionality to lookup and assign semantic
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * attributes for mathematical expressions. Since there is no such thing as a
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * well-defined semantics for all of mathematics we compute a default semantics
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * that closely models mathematical expressions found in K-12 mathematics as
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * well as in general undergraduate curriculum (i.e., calculus, linear algebra,
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * etc).
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Currently semantic attributes of symbols consist of the following two parts:
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * type -- An unmutable property of an expression, regardless of its position in
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         the math expression. For example, the letter 'f' will always have the
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         type identifier, regardless of its use in context, e.g. as function
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         symbol or variable.
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * role -- A mutable description of the role an expression plays in the context
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         of the overall mathematical expression. For instance, the symbol '|'
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         is of type punctuation, but depending on context it has the role of a
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *         neutral fence or of a single vertical bar.
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * In addition for some symbols we record the font as a further attribute.
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * When a semantically interpreted expression is transformed into a XML
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * representation, types become tag names, while role, font, etc. are added as
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * attributes.
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * This file is part of the content script as we do not want to call out to the
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * background page every time we need to look up the semantic of a symbol.
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * TODO (sorge) Move semantic tree translation into the background page
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *    alongside MathJax.
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.provide('cvox.SemanticAttr');
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.require('cvox.SemanticUtil');
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Contains the basic mappings of characters/symbols and functions to semantic
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * attributes.
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Observe that all characters are given as hex code number in order to ease the
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * comparison with those in the JSON files that define speech rules per
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * character.
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @constructor
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr = function() {
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Punctuation Characters.
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.generalPunctuations =
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '!', '"', '#', '%', '&', '\'', '*', ',', ':', ';', '?', '@', '\\',
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '¡', '§', '¶', '·', '¿', '‗', '†', '‡', '•', '‣', '․', '‥', '‧',
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '‰', '‱', '‸', '※', '‼', '‽', '‾', '⁁', '⁂', '⁃', '⁇', '⁈', '⁉',
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⁋', '⁌', '⁍', '⁎', '⁏', '⁐', '⁑', '⁓', '⁕', '⁖', '⁘', '⁙', '⁚',
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⁛', '⁜', '⁝', '⁞', '︐', '︓', '︔', '︕', '︖', '︰', '﹅', '﹆',
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '﹉', '﹊', '﹋', '﹌', '﹐', '﹔', '﹕', '﹖', '﹗', '﹟', '﹠', '﹡', '﹨',
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '﹪', '﹫', '!', '"', '#', '%', '&', ''', '*', ',', '/', ':',
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ';', '?', '@', '\'
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {string}
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @private
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.invisibleComma_ = cvox.SemanticUtil.numberToUnicode(0x2063);
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.generalPunctuations.push(this.invisibleComma_);
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.ellipses =
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '…', '⋮', '⋯', '⋰', '⋱', '︙'
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.fullStops =
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '.', '﹒', '.'
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.dashes =
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '‒', '–', '—', '―', '〜', '︱', '︲', '﹘'
97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.primes =
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '′', '″', '‴', '‵', '‶', '‷', '⁗'
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fences.
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fences are treated slightly differently from other symbols as we want to
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // record pairs of opening/closing and top/bottom fences.
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Mapping opening to closing fences.
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Object.<string, string>}
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.openClosePairs =
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      {
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Unicode categories Ps and Pe.
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Observe that left quotation 301D could also be matched to 301F,
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // but is currently matched to 301E.
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '(': ')', '[': ']', '{': '}', '⁅': '⁆', '〈': '〉', '❨': '❩',
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '❪': '❫', '❬': '❭', '❮': '❯', '❰': '❱', '❲': '❳', '❴': '❵',
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⟅': '⟆', '⟦': '⟧', '⟨': '⟩', '⟪': '⟫', '⟬': '⟭', '⟮': '⟯',
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⦃': '⦄', '⦅': '⦆', '⦇': '⦈', '⦉': '⦊', '⦋': '⦌', '⦍': '⦎',
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⦏': '⦐', '⦑': '⦒', '⦓': '⦔', '⦕': '⦖', '⦗': '⦘', '⧘': '⧙',
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⧚': '⧛', '⧼': '⧽', '⸢': '⸣', '⸤': '⸥', '⸦': '⸧', '⸨': '⸩',
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '〈': '〉', '《': '》', '「': '」', '『': '』', '【': '】',
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '〔': '〕', '〖': '〗', '〘': '〙', '〚': '〛', '〝': '〞',
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '﴾': '﴿', '︗': '︘', '﹙': '﹚', '﹛': '﹜', '﹝': '﹞', '(': ')',
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '[': ']', '{': '}', '⦅': '⦆', '「': '」',
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Unicode categories Sm and So.
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⌈': '⌉', '⌊': '⌋', '⌌': '⌍', '⌎': '⌏', '⌜': '⌝', '⌞': '⌟',
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Extender fences.
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Parenthesis.
132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⎛': '⎞', '⎜': '⎟', '⎝': '⎠',
133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Square bracket.
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⎡': '⎤', '⎢': '⎥', '⎣': '⎦',
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Curly bracket.
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⎧': '⎫', '⎨': '⎬', '⎩': '⎭', '⎰': '⎱', '⎸': '⎹'
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      };
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Mapping top to bottom fences.
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Object.<string, string>}
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.topBottomPairs =
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      {
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⎴': '⎵', '⏜': '⏝', '⏞': '⏟', '⏠': '⏡', '︵': '︶', '︷': '︸',
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '︹': '︺', '︻': '︼', '︽': '︾', '︿': '﹀', '﹁': '﹂',
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '﹃': '﹄', '﹇': '﹈'
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      };
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.leftFences = cvox.SemanticUtil.objectsToKeys(this.openClosePairs);
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.rightFences = cvox.SemanticUtil.objectsToValues(this.openClosePairs);
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.rightFences.push('〟');
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.topFences = cvox.SemanticUtil.objectsToKeys(this.topBottomPairs);
161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.bottomFences = cvox.SemanticUtil.objectsToValues(this.topBottomPairs);
165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.neutralFences =
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '|', '¦', '‖', '❘', '⦀', '⫴', '¦', '|'
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** Array of all fences.
173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.fences = this.neutralFences.concat(
176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.leftFences, this.rightFences, this.topFences, this.bottomFences);
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Identifiers.
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Latin Alphabets.
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatin =
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatin =
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // dotless i and j.
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'ı', 'ȷ'
197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinFullWidth =
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinFullWidth =
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinBold =
218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinBold =
226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinItalic =
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinItalic =
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', 'ℎ', '��', '��', '��', '��', '��',
244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       // dotless i and j.
246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��'
247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinScript =
252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', 'ℬ', '��', '��', 'ℰ', 'ℱ', '��', 'ℋ', 'ℐ', '��', '��', 'ℒ', 'ℳ',
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', 'ℛ', '��', '��', '��', '��', '��', '��', '��', '��',
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       // Powerset Cap P.
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '℘'
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinScript =
262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', 'ℯ', '��', 'ℊ', '��', '��', '��', '��', '��', '��',
264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', 'ℴ', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       // script small l
266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       'ℓ'
267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinBoldScript =
272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinBoldScript =
280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinFraktur =
288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', 'ℭ', '��', '��', '��', '��', 'ℌ', 'ℑ', '��', '��', '��', '��',
290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', 'ℜ', '��', '��', '��', '��', '��', '��', '��', 'ℨ'
291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinFraktur =
296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinDoubleStruck =
304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', 'ℂ', '��', '��', '��', '��', 'ℍ', '��', '��', '��', '��', '��',
306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       'ℕ', '��', 'ℙ', 'ℚ', 'ℝ', '��', '��', '��', '��', '��', '��', '��', 'ℤ'
307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinDoubleStruck =
312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinBoldFraktur =
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinBoldFraktur =
328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinSansSerif =
336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinSansSerif =
344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinSansSerifBold =
352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinSansSerifBold =
360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinSansSerifItalic =
368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinSansSerifItalic =
376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalLatinMonospace =
384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallLatinMonospace =
392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
397cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
398cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.latinDoubleStruckItalic =
400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'ⅅ', 'ⅆ', 'ⅇ', 'ⅈ', 'ⅉ'
402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Greek Alphabets
405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalGreek =
409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν',
411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω'
412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallGreek =
417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
418cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν',
419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'
420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
421cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalGreekBold =
425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallGreekBold =
433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalGreekItalic =
441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
447cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallGreekItalic =
449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
451cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.capitalGreekSansSerifBold =
457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
459cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.smallGreekSansSerifBold =
465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��',
467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.greekDoubleStruck =
473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'ℼ', 'ℽ', 'ℾ', 'ℿ'
475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Other alphabets.
478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.hebrewLetters =
482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'ℵ', 'ℶ', 'ℷ', 'ℸ'
484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
485cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  //Operator symbols
487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
488cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
489cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.additions =
491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '+', '±', '∓', '∔', '∧', '∨', '∩', '∪', '⊌', '⊓', '⊔', '⊝', '⊞',
493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⊤', '⊥', '⊺', '⊻', '⊼', '⋄', '⋎', '⋏', '⋒', '⋓', '△', '▷', '▽',
494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '◁', '⩞', '⊕'
495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      /**
497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       * @type {Array.<string>}
498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           */
499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Invisible operator for plus.
501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {string}
502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @private
503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.invisiblePlus_ = cvox.SemanticUtil.numberToUnicode(0x2064);
505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.additions.push(this.invisiblePlus_);
506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.multiplications =
510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '†', '‡', '∐', '∗', '∘', '∙', '≀', '⊚', '⊛', '⊠', '⊡', '⋅', '⋆', '⋇',
512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⋉', '⋊', '⋋', '⋌', '○'
513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Invisible operator for multiplication.
516cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {string}
517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @private
518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.invisibleTimes_ = cvox.SemanticUtil.numberToUnicode(0x2062);
520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.multiplications.push(this.invisibleTimes_);
521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.subtractions =
525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '-', '⁒', '⁻', '₋', '−', '∖', '∸', '≂', '⊖', '⊟', '➖', '⨩', '⨪',
527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '⨫', '⨬', '⨺', '⩁', '⩬', '﹣', '-', '‐', '‑'
528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.divisions =
533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '/', '÷', '⁄', '∕', '⊘', '⟌', '⦼', '⨸'
535cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
536cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Invisible operator for function application.
538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {string}
539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @private
540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.functionApplication_ = cvox.SemanticUtil.numberToUnicode(0x2061);
542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  //Relation symbols
544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.equalities =
548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '=', '~', '⁼', '₌', '∼', '∽', '≃', '≅', '≈', '≊', '≋', '≌', '≍',
550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '≎', '≑', '≒', '≓', '≔', '≕', '≖', '≗', '≘', '≙', '≚', '≛', '≜',
551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '≝', '≞', '≟', '≡', '≣', '⧤', '⩦', '⩮', '⩯', '⩰', '⩱', '⩲', '⩳',
552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '⩴', '⩵', '⩶', '⩷', '⩸', '⋕', '⩭', '⩪', '⩫', '⩬', '﹦', '='
553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.inequalities =
558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '<', '>', '≁', '≂', '≄', '≆', '≇', '≉', '≏', '≐', '≠', '≢', '≤',
560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≬', '≭', '≮', '≯', '≰', '≱',
561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '≲', '≳', '≴', '≵', '≶', '≷', '≸', '≹', '≺', '≻', '≼', '≽', '≾',
562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '≿', '⊀', '⊁', '⋖', '⋗', '⋘', '⋙', '⋚', '⋛', '⋜', '⋝', '⋞', '⋟',
563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⋠', '⋡', '⋢', '⋣', '⋤', '⋥', '⋦', '⋧', '⋨', '⋩', '⩹', '⩺', '⩻',
564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⩼', '⩽', '⩾', '⩿', '⪀', '⪁', '⪂', '⪃', '⪄', '⪅', '⪆', '⪇', '⪈',
565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⪉', '⪊', '⪋', '⪌', '⪍', '⪎', '⪏', '⪐', '⪑', '⪒', '⪓', '⪔', '⪕',
566cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⪖', '⪗', '⪘', '⪙', '⪚', '⪛', '⪜', '⪝', '⪞', '⪟', '⪠', '⪡', '⪢',
567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⪣', '⪤', '⪥', '⪦', '⪧', '⪨', '⪩', '⪪', '⪫', '⪬', '⪭', '⪮', '⪯',
568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⪰', '⪱', '⪲', '⪳', '⪴', '⪵', '⪶', '⪷', '⪸', '⪹', '⪺', '⪻', '⪼',
569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⫷', '⫸', '⫹', '⫺', '⧀', '⧁', '﹤', '﹥', '<', '>'
570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
571cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
572cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
573cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.relations =
575cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            // TODO (sorge): Add all the other relations.
577cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
580cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
581cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.arrows =
582cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
583cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜',
584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨', '↩',
585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '↪', '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶',
586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '↷', '↸', '↹', '↺', '↻', '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇍',
587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚',
588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⇛', '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧',
589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴',
590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⇵', '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿', '⌁', '⌃',
591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⌄', '⌤', '⎋', '➔', '➘', '➙', '➚', '➛', '➜', '➝', '➞', '➟', '➠',
592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '➡', '➢', '➣', '➤', '➥', '➦', '➧', '➨', '➩', '➪', '➫', '➬', '➭',
593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '➮', '➯', '➱', '➲', '➳', '➴', '➵', '➶', '➷', '➸', '➹', '➺', '➻',
594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '➼', '➽', '➾', '⟰', '⟱', '⟲', '⟳', '⟴', '⟵', '⟶', '⟷', '⟸', '⟹',
595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⟺', '⟻', '⟼', '⟽', '⟾', '⟿', '⤀', '⤁', '⤂', '⤃', '⤄', '⤅', '⤆',
596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⤇', '⤈', '⤉', '⤊', '⤋', '⤌', '⤍', '⤎', '⤏', '⤐', '⤑', '⤒', '⤓',
597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⤔', '⤕', '⤖', '⤗', '⤘', '⤙', '⤚', '⤛', '⤜', '⤝', '⤞', '⤟', '⤠',
598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⤡', '⤢', '⤣', '⤤', '⤥', '⤦', '⤧', '⤨', '⤩', '⤪', '⤭', '⤮', '⤯',
599cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⤰', '⤱', '⤲', '⤳', '⤴', '⤵', '⤶', '⤷', '⤸', '⤹', '⤺', '⤻', '⤼',
600cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⤽', '⤾', '⤿', '⥀', '⥁', '⥂', '⥃', '⥄', '⥅', '⥆', '⥇', '⥈', '⥉',
601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⥰', '⥱', '⥲', '⥳', '⥴', '⥵', '⥶', '⥷', '⥸', '⥹', '⥺', '⥻', '⦳',
602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⦴', '⦽', '⧪', '⧬', '⧭', '⨗', '⬀', '⬁', '⬂', '⬃', '⬄', '⬅', '⬆',
603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⬇', '⬈', '⬉', '⬊', '⬋', '⬌', '⬍', '⬎', '⬏', '⬐', '⬑', '⬰', '⬱',
604cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⬲', '⬳', '⬴', '⬵', '⬶', '⬷', '⬸', '⬹', '⬺', '⬻', '⬼', '⬽', '⬾',
605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⬿', '⭀', '⭁', '⭂', '⭃', '⭄', '⭅', '⭆', '⭇', '⭈', '⭉', '⭊', '⭋',
606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⭌', '←', '↑', '→', '↓',
607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Harpoons
608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃', '⇋', '⇌', '⥊', '⥋', '⥌',
609cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⥍', '⥎', '⥏', '⥐', '⥑', '⥒', '⥓', '⥔', '⥕', '⥖', '⥗', '⥘', '⥙',
610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⥚', '⥛', '⥜', '⥝', '⥞', '⥟', '⥠', '⥡', '⥢', '⥣', '⥤', '⥥', '⥦',
611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⥧', '⥨', '⥩', '⥪', '⥫', '⥬', '⥭', '⥮', '⥯', '⥼', '⥽', '⥾', '⥿'
612cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
613cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
614cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  //Big operation symbols
615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.sumOps =
619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⅀', // double struck
621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '∏', '∐', '∑', '⋀', '⋁', '⋂', '⋃', '⨀', '⨁', '⨂', '⨃', '⨄', '⨅',
622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⨆', '⨇', '⨈', '⨉', '⨊', '⨋', '⫼', '⫿'
623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
626cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
627cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.intOps =
628cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
629cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳', '⨌', '⨍', '⨎', '⨏',
630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⨐', '⨑', '⨒', '⨓', '⨔', '⨕', '⨖', '⨗', '⨘', '⨙', '⨚', '⨛', '⨜'
631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
633cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
635cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.prefixOps =
636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // TODO (sorge) Insert nabla, differential operators etc.
637cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '∀', '∃'
639cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
640cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
641cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
642cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.operatorBits =
644cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // TODO (sorge) What to do if single glyphs of big ops occur on their own.
645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
646cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⌠', '⌡', '⎶', '⎪', '⎮', '⎯', '⎲', '⎳', '⎷'
647cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
648cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
649cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Accents.
650cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // TODO (sorge) Add accented characters.
651cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
652cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Numbers.
653cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Digits.
654cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
655cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
657cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsNormal =
658cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
661cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
662cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
663cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
664cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsFullWidth =
665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
666cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
667cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
669cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
670cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsBold =
672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
673cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
674cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
675cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
676cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
678cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsDoubleStruck =
679cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
680cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
681cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
682cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
683cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
684cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
685cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsSansSerif =
686cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
687cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
688cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
689cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
690cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
691cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsSansSerifBold =
693cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
694cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
697cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
698cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
699cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsMonospace =
700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
701cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '��', '��', '��', '��', '��', '��', '��', '��', '��', '��'
702cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
703cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
705cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
706cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsSuperscript =
707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '²', '³', '¹', '⁰', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'
709cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
710cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
711cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
712cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
713cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digitsSubscript =
714cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'
716cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ];
717cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
718cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
719cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
720cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.fractions =
721cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
722cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '¼', '½', '¾', '⅐', '⅑', '⅒', '⅓', '⅔', '⅕', '⅖', '⅗', '⅘', '⅙',
723cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⅚', '⅛', '⅜', '⅝', '⅞', '⅟', '↉'
724cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
725cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
726cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
727cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
728cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.enclosedNumbers =
729cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // Encircled numbers.
730cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
731cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬',
732cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳', '⓪', '⓫', '⓬', '⓭', '⓮', '⓯',
733cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⓰', '⓱', '⓲', '⓳', '⓴', '⓵', '⓶', '⓷', '⓸', '⓹', '⓺', '⓻', '⓼',
734cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⓽', '⓾', '⓿', '❶', '❷', '❸', '❹', '❺', '❻', '❼', '❽', '❾', '❿',
735cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '➀', '➁', '➂', '➃', '➄', '➅', '➆', '➇', '➈', '➉', '➊', '➋', '➌',
736cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '➍', '➎', '➏', '➐', '➑', '➒', '➓', '㉈', '㉉', '㉊', '㉋', '㉌',
737cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '㉍', '㉎', '㉏', '㉑', '㉒', '㉓', '㉔', '㉕', '㉖', '㉗', '㉘',
738cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '㉙', '㉚', '㉛', '㉜', '㉝', '㉞', '㉟', '㊱', '㊲', '㊳', '㊴',
739cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '㊵', '㊶', '㊷', '㊸', '㊹', '㊺', '㊻', '㊼', '㊽', '㊾', '㊿'];
740cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
741cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
742cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
743cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.fencedNumbers =
744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // Numbers in Parenthesis.
745cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀',
747cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇'
748cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
749cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
750cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
751cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
752cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.punctuatedNumbers =
753cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // Numbers with other punctuation.
754cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ['⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒', '⒓', '⒔',
755cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', // full stop.
756cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       '��', '��', '��', '��', '��', '��', '��', '��', '��', '��', '��' // comma.
757cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
758cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** Array of all single digits.
759cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
760cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
761cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.digits = this.digitsNormal.concat(
762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.digitsFullWidth, this.digitsBold, this.digitsDoubleStruck,
763cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.digitsSansSerif, this.digitsSansSerifBold, this.digitsMonospace);
764cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** Array of all non-digit number symbols.
765cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
766cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
767cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.numbers = this.fractions.concat(
768cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.digitsSuperscript, this.digitsSubscript,
769cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.enclosedNumbers, this.fencedNumbers, this.punctuatedNumbers);
770cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** Array of all number symbols.
771cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
772cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
773cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.allNumbers = this.digits.concat(this.numbers);
774cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
775cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Functions.
776cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
777cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
778cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
779cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.trigonometricFunctions =
780cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
781cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'cos', 'cot', 'csc', 'sec', 'sin', 'tan', 'arccos', 'arccot',
782cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'arccsc', 'arcsec', 'arcsin', 'arctan'
783cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
785cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
786cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
787cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.hyperbolicFunctions =
788cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
789cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'cosh', 'coth', 'csch', 'sech', 'sinh', 'tanh',
790cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'arcosh', 'arcoth', 'arcsch', 'arsech', 'arsinh', 'artanh',
791cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'arccosh', 'arccoth', 'arccsch', 'arcsech', 'arcsinh', 'arctanh'
792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
794cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
796cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.algebraicFunctions =
797cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
798cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'deg', 'det', 'dim', 'hom', 'ker', 'Tr', 'tr'
799cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
800cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
801cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
802cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
803cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.elementaryFunctions =
804cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
805cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'log', 'ln', 'lg', 'exp', 'expt', 'gcd', 'gcd', 'arg', 'im', 're', 'Pr'
806cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
807cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** All predefined prefix functions.
808cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
809cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
810cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.prefixFunctions = this.trigonometricFunctions.concat(
811cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.hyperbolicFunctions,
812cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.algebraicFunctions,
813cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.elementaryFunctions
814cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      );
815cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /** Limit functions are handled separately as they can have lower (and upper)
816cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * limiting expressions.
817cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
818cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
819cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.limitFunctions =
820cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
821cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'inf', 'lim', 'liminf', 'limsup', 'max', 'min', 'sup', 'injlim',
822cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'projlim'
823cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
824cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type {Array.<string>}
826cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
827cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.infixFunctions =
828cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      [
829cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        'mod', 'rem'
830cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ];
831cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  /**
832cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * Default assignments of semantic attributes.
833cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @type  {Array.<{set: Array.<string>,
834cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   *         role: cvox.SemanticAttr.Role,
835cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   *         type: cvox.SemanticAttr.Type,
836cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   *         font: cvox.SemanticAttr.Font}>} The semantic meaning of the symbol.
837cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @private
838cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   */
839cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  this.symbolSetToSemantic_ = [
840cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Punctuation
841cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.generalPunctuations,
842cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PUNCTUATION,
843cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.UNKNOWN
844cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
845cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.ellipses,
846cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PUNCTUATION,
847cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.ELLIPSIS
848cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
849cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.fullStops,
850cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PUNCTUATION,
851cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.FULLSTOP
852cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
853cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.dashes,
854cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PUNCTUATION,
855cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.DASH
856cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
857cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.primes,
858cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PUNCTUATION,
859cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.PRIME
860cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
861cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Fences
862cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.leftFences,
863cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FENCE,
864cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.OPEN
865cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
866cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.rightFences,
867cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FENCE,
868cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.CLOSE
869cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
870cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.topFences,
871cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FENCE,
872cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.TOP
873cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
874cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.bottomFences,
875cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FENCE,
876cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.BOTTOM
877cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
878cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.neutralFences,
879cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FENCE,
880cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.NEUTRAL
881cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
882cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Single characters.
883cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Latin alphabets.
884cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatin,
885cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
886cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
887cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
888cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatin,
890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
891cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
892cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinFullWidth,
895cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
896cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
897cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
898cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinFullWidth,
900cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
901cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
902cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
904cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinBold,
905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLD
908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinBold,
910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
912cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLD
913cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinItalic,
915cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
916cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
917cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.ITALIC
918cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
919cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinItalic,
920cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
921cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
922cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.ITALIC
923cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
924cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinScript,
925cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
926cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
927cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SCRIPT
928cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
929cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinScript,
930cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
931cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
932cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SCRIPT
933cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
934cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinBoldScript,
935cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
936cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
937cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLDSCRIPT
938cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
939cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinBoldScript,
940cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
941cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
942cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLDSCRIPT
943cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
944cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinFraktur,
945cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
946cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.FRAKTUR
948cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
949cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinFraktur,
950cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
951cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
952cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.FRAKTUR
953cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
954cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinDoubleStruck,
955cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
956cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
957cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.DOUBLESTRUCK
958cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
959cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinDoubleStruck,
960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
961cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
962cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.DOUBLESTRUCK
963cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
964cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinBoldFraktur,
965cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
966cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
967cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLDFRAKTUR
968cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
969cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinBoldFraktur,
970cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
971cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
972cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLDFRAKTUR
973cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
974cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinSansSerif,
975cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
976cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
977cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIF
978cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
979cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinSansSerif,
980cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
981cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
982cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIF
983cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
984cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinSansSerifBold,
985cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
986cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
987cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFBOLD
988cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
989cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinSansSerifBold,
990cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
991cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
992cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFBOLD
993cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
994cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinSansSerifItalic,
995cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
996cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
997cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFITALIC
998cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
999cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinSansSerifItalic,
1000cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1001cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
1002cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFITALIC
1003cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1004cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallLatinMonospace,
1005cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1006cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
1007cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.MONOSPACE
1008cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1009cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalLatinMonospace,
1010cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1011cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
1012cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.MONOSPACE
1013cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1014cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.latinDoubleStruckItalic,
1015cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1016cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LATINLETTER,
1017cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.DOUBLESTRUCKITALIC
1018cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1019cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Greek alphabets.
1020cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallGreek,
1021cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1022cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1023cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
1024cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1025cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalGreek,
1026cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1027cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1028cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
1029cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1030cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallGreekBold,
1031cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1032cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLD
1034cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1035cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalGreekBold,
1036cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1037cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLD
1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallGreekItalic,
1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1043cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.ITALIC
1044cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalGreekItalic,
1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1047cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.ITALIC
1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.smallGreekSansSerifBold,
1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1053cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1054cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1055cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.capitalGreekSansSerifBold,
1056cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1059cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.greekDoubleStruck,
1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1062cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.GREEKLETTER,
1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.DOUBLESTRUCK
1064cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1065cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Other alphabets.
1066cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.hebrewLetters,
1067cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.IDENTIFIER,
1068cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.OTHERLETTER,
1069cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
1070cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1071cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Numbers.
1072cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsNormal,
1073cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
1076cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1077cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsFullWidth,
1078cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1079cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1080cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.NORMAL
1081cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1082cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsBold,
1083cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1084cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1085cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.BOLD
1086cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1087cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsDoubleStruck,
1088cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1089cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1090cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.DOUBLESTRUCK
1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1092cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsSansSerif,
1093cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1094cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIF
1096cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1097cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsSansSerifBold,
1098cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1099cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.SANSSERIFBOLD
1101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.digitsMonospace,
1103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER,
1105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     font: cvox.SemanticAttr.Font.MONOSPACE
1106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   {set: this.numbers,
1108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.NUMBER,
1109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGER
1110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Operators.
1112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.additions,
1113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.OPERATOR,
1114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.ADDITION
1115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.multiplications,
1117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.OPERATOR,
1118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.MULTIPLICATION
1119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.subtractions,
1121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.OPERATOR,
1122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.SUBTRACTION
1123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.divisions,
1125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.OPERATOR,
1126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.DIVISION
1127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.prefixOps,
1129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.PREFIXOP,
1130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.PREFIXFUNC
1131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Relations
1133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.equalities,
1134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.RELATION,
1135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.EQUALITY
1136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.inequalities,
1138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.RELATION,
1139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INEQUALITY
1140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.relations,
1142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.RELATION,
1143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.UNKNOWN
1144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.arrows,
1146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.RELATION,
1147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.ARROW
1148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
1149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Large operators
1150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.sumOps,
1151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.LARGEOP,
1152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.SUM},
1153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.intOps,
1154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.LARGEOP,
1155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.INTEGRAL},
1156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Functions
1157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.limitFunctions,
1158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FUNCTION,
1159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.LIMFUNC},
1160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.prefixFunctions,
1161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.FUNCTION,
1162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.PREFIXFUNC},
1163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    {set: this.infixFunctions,
1164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     type: cvox.SemanticAttr.Type.OPERATOR,
1165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     role: cvox.SemanticAttr.Role.MULTIPLICATION
1166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
1167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // TODO (sorge) Add some of the remaining elements.
1168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ];
1169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.addSingletonGetter(cvox.SemanticAttr);
1171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Union type of semantic attributes.
1175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @typedef {cvox.SemanticAttr.Type|cvox.SemanticAttr.Role}
1176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.Attr;
1178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Mapping for types of elements.
1182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @enum {string}
1183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.Type = {
1185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Leafs.
1186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Punctuation like comma, dot, ellipses.
1187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PUNCTUATION: 'punctuation',
1188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fence symbol.
1189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FENCE: 'fence',
1190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // One or several digits, plus some punctuation.
1191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NUMBER: 'number',
1192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Single or multiple letters.
1193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  IDENTIFIER: 'identifier',
1194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Regular text in a math expression.
1195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TEXT: 'text',
1196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // e.g. +, *.
1197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OPERATOR: 'operator',
1198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Relation symbol, e.g. equals.
1199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  RELATION: 'relation',
1200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // e.g. Sum, product, integral.
1201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LARGEOP: 'largeop',
1202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Some named function.
1203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FUNCTION: 'function',
1204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Branches.
1206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Compound Symbols.
1207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ACCENT: 'accent',
1208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FENCED: 'fenced',
1209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FRACTION: 'fraction',
1210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PUNCTUATED: 'punctuated',
1211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Relations.
1213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Relation sequence of a single relation.
1214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  RELSEQ: 'relseq',
1215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Relation sequence containing at least two different relations.
1216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTIREL: 'multirel',
1217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Operations.
1218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INFIXOP: 'infixop',
1219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PREFIXOP: 'prefixop',
1220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  POSTFIXOP: 'postfixop',
1221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Function and Bigop Application.
1223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  APPL: 'appl',
1224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INTEGRAL: 'integral',
1225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BIGOP: 'bigop',
1226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SQRT: 'sqrt',
1228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ROOT: 'root',
1229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // These are bigops or functions with limits.
1230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LIMUPPER: 'limupper',
1231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LIMLOWER: 'limlower',
1232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LIMBOTH: 'limboth',
1233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SUBSCRIPT: 'subscript',
1234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SUPERSCRIPT: 'superscript',
1235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UNDERSCORE: 'underscore',
1236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OVERSCORE: 'overscore',
1237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Tables and their elements.
1239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TABLE: 'table',
1240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTILINE: 'multiline',
1241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MATRIX: 'matrix',
1242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  VECTOR: 'vector',
1243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CASES: 'cases',
1244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ROW: 'row',
1245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Lines are effectively single cell rows.
1246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LINE: 'line',
1247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CELL: 'cell',
1248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // General.
1250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UNKNOWN: 'unknown',
1251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EMPTY: 'empty'
1252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Mapping for roles of nodes.
1257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Roles are more specific than types.
1258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @enum {string}
1259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.Role = {
1261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Punctuation.
1262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ELLIPSIS: 'ellipsis',
1263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FULLSTOP: 'fullstop',
1264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DASH: 'dash',
1265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PRIME: 'prime',   // Superscript.
1266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  VBAR: 'vbar',  // A vertical bar.
1267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OPENFENCE: 'openfence',
1268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CLOSEFENCE: 'closefence',
1269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  APPLICATION: 'application', // Function Application.
1270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fences.
1272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OPEN: 'open',
1273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CLOSE: 'close',
1274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TOP: 'top',
1275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BOTTOM: 'bottom',
1276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NEUTRAL: 'neutral',
1277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Letters.
1279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LATINLETTER: 'latinletter',
1280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GREEKLETTER: 'greekletter',
1281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OTHERLETTER: 'otherletter',
1282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Numbers.
1284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INTEGER: 'integer',
1285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FLOAT: 'float',
1286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OTHERNUMBER: 'othernumber',
1287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Accents.
1289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTIACCENT: 'multiaccent',
1290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OVERACCENT: 'overaccent',
1291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UNDERACCENT: 'underaccent',
1292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fenced.
1294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LEFTRIGHT: 'leftright',
1295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ABOVEBELOW: 'abovebelow',
1296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Punctuated elements.
1298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SEQUENCE: 'sequence',
1299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ENDPUNCT: 'endpunct',
1300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  STARTPUNCT: 'startpunct',
1301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Operators.
1303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NEGATIVE: 'negative',
1304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NEGATION: 'negation',
1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTIOP: 'multiop',
1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Functions.
1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LIMFUNC: 'limit function',
1309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INFIXFUNC: 'infix function',
1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PREFIXFUNC: 'prefix function',
1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  POSTFIXFUNC: 'postfix function',
1312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Large operators.
1314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SUM: 'sum',
1315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INTEGRAL: 'integral',
1316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Binary operations.
1318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ADDITION: 'addition',
1319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTIPLICATION: 'multiplication',
1320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DIVISION: 'division',
1321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SUBTRACTION: 'subtraction',
1322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  IMPLICIT: 'implicit',
1323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Relations.
1325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EQUALITY: 'equality',
1326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  INEQUALITY: 'inequality',
1327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ELEMENT: 'element',
1328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BINREL: 'binrel',
1329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ARROW: 'arrow',
1330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Roles of rows, lines, cells.
1332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // They mirror the different types for tables.
1333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MULTILINE: 'multiline',
1334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MATRIX: 'matrix',
1335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  VECTOR: 'vector',
1336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CASES: 'cases',
1337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TABLE: 'table',
1338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // General
1340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UNKNOWN: 'unknown'
1341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Mapping for font annotations. (Taken from MathML2 section 3.2.2, with the
1346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * exception of double-struck-italic.)
1347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @enum {string}
1348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.Font = {
1350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BOLD: 'bold',
1351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BOLDFRAKTUR: 'bold-fraktur',
1352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BOLDITALIC: 'bold-italic',
1353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  BOLDSCRIPT: 'bold-script',
1354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DOUBLESTRUCK: 'double-struck',
1355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DOUBLESTRUCKITALIC: 'double-struck-italic',
1356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FRAKTUR: 'fraktur',
1357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ITALIC: 'italic',
1358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  MONOSPACE: 'monospace',
1359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NORMAL: 'normal',
1360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SCRIPT: 'script',
1361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SANSSERIF: 'sans-serif',
1362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SANSSERIFITALIC: 'sans-serif-italic',
1363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SANSSERIFBOLD: 'sans-serif-bold',
1364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SANSSERIFBOLDITALIC: 'sans-serif-bold-italic',
1365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UNKNOWN: 'unknown'
1366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Lookup the semantic type of a symbol.
1371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {string} symbol The symbol to which we want to determine the type.
1372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {cvox.SemanticAttr.Type} The semantic type of the symbol.
1373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.prototype.lookupType = function(symbol) {
1375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.Type.UNKNOWN;
1376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Lookup the semantic role of a symbol.
1381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {string} symbol The symbol to which we want to determine the role.
1382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {cvox.SemanticAttr.Role} The semantic role of the symbol.
1383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.prototype.lookupRole = function(symbol) {
1385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.Role.UNKNOWN;
1386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Lookup the semantic meaning of a symbol in terms of type and role.
1391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {string} symbol The symbol to which we want to determine the meaning.
1392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {{role: cvox.SemanticAttr.Role,
1393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *           type: cvox.SemanticAttr.Type}} The semantic meaning of the symbol.
1394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.lookupMeaning = function(symbol) {
1396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.getInstance().lookupMeaning_(symbol);
1397cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1398cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * String representation of the invisible times unicode character.
1402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {string} The invisible times character.
1403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.invisibleTimes = function() {
1405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.getInstance().invisibleTimes_;
1406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * String representation of the invisible comma unicode character.
1411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {string} The invisible comma character.
1412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.invisibleComma = function() {
1414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.getInstance().invisibleComma_;
1415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1418cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * String representation of the function application character.
1420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {string} The invisible function application character.
1421cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.functionApplication = function() {
1423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.getInstance().functionApplication_;
1424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Decide when two fences match. Currently we match any right to left
1429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * or bottom to top fence and neutral to neutral.
1430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {cvox.SemanticAttr.Role} open Opening fence.
1431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {cvox.SemanticAttr.Role} close Closing fence.
1432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the fences are matching.
1433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.isMatchingFenceRole = function(open, close) {
1435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return (open == cvox.SemanticAttr.Role.OPEN &&
1436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      close == cvox.SemanticAttr.Role.CLOSE) ||
1437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          (open == cvox.SemanticAttr.Role.NEUTRAL &&
1438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              close == cvox.SemanticAttr.Role.NEUTRAL) ||
1439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                  (open == cvox.SemanticAttr.Role.TOP &&
1440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      close == cvox.SemanticAttr.Role.BOTTOM);
1441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Decide when opening and closing fences match. For neutral fences they have to
1446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * be the same.
1447cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {string} open Opening fence.
1448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {string} close Closing fence.
1449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the fences are matching.
1450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1451cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.isMatchingFence = function(open, close) {
1452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return cvox.SemanticAttr.getInstance().isMatchingFence_(open, close);
1453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Determines if a fence is an opening fence.
1458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {cvox.SemanticAttr.Role} fence Opening fence.
1459cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the fence is open or neutral.
1460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.isOpeningFence = function(fence) {
1462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return (fence == cvox.SemanticAttr.Role.OPEN ||
1463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          fence == cvox.SemanticAttr.Role.NEUTRAL);
1464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Determines if a fence is a closing fence.
1469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {cvox.SemanticAttr.Role} fence Closing fence.
1470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the fence is close or neutral.
1471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.isClosingFence = function(fence) {
1473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return (fence == cvox.SemanticAttr.Role.CLOSE ||
1474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          fence == cvox.SemanticAttr.Role.NEUTRAL);
1475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TODO (sorge) Make this depended on position in the alphabets.
1479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Check if a character is a small 'd' in some font.
1481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!string} chr The character string.
1482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the character is indeed a single small d.
1483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.isCharacterD = function(chr) {
1485cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  var Ds = ['d', 'ⅆ', 'd', '��', '��', '��', '��', '��',
1486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            '��', '��', '��', '��', '��', '��'];
1487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return Ds.indexOf(chr) != -1;
1488cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1489cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Decide when opening and closing fences match. For neutral fences they have to
1493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * be the same.
1494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!string} open Opening fence.
1495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!string} close Closing fence.
1496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {boolean} True if the fences are matching.
1497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @private
1498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.prototype.isMatchingFence_ = function(open, close) {
1500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (this.neutralFences.indexOf(open) != -1) {
1501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return open == close;
1502cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
1503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return this.openClosePairs[open] == close ||
1504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.topBottomPairs[open] == close;
1505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
1509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Lookup the semantic meaning of a symbol in terms of type and role.
1510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!string} symbol The symbol to which we want to determine the meaning.
1511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return {{role: cvox.SemanticAttr.Role,
1512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *           type: cvox.SemanticAttr.Type,
1513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *           font: cvox.SemanticAttr.Font}} The semantic meaning of the symbol.
1514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @private
1515cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
1516cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.SemanticAttr.prototype.lookupMeaning_ = function(symbol) {
1517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  for (var i = 0, set; set = this.symbolSetToSemantic_[i]; i++) {
1518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (set.set.indexOf(symbol) != -1) {
1519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return {role: set.role || cvox.SemanticAttr.Role.UNKNOWN,
1520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              type: set.type || cvox.SemanticAttr.Type.UNKNOWN,
1521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              font: set.font || cvox.SemanticAttr.Font.UNKNOWN
1522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             };
1523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
1524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
1525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return {role: cvox.SemanticAttr.Role.UNKNOWN,
1526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          type: cvox.SemanticAttr.Type.UNKNOWN,
1527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          font: cvox.SemanticAttr.Font.UNKNOWN
1528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)         };
1529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
1530