wirispluginengine 3.62.0.1322 → 7.14.0.1422

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +34 -34
  3. data/app/assets/javascripts/wirispluginengine/WIRISplugins.js +1040 -64
  4. data/app/controllers/wirispluginengine/application_controller.rb +84 -75
  5. data/app/helpers/wirispluginengine/application_helper.rb +4 -4
  6. data/config/routes.rb +4 -4
  7. data/lib/com/wiris/common/WInteger.rb +52 -51
  8. data/lib/com/wiris/plugin/api/Cas.rb +5 -5
  9. data/lib/com/wiris/plugin/api/CleanCache.rb +5 -5
  10. data/lib/com/wiris/plugin/api/Configuration.rb +5 -5
  11. data/lib/com/wiris/plugin/api/ConfigurationKeys.rb +94 -91
  12. data/lib/com/wiris/plugin/api/Editor.rb +5 -5
  13. data/lib/com/wiris/plugin/api/Filter.rb +5 -5
  14. data/lib/com/wiris/plugin/api/ImageFormatController.rb +5 -5
  15. data/lib/com/wiris/plugin/api/ParamsProvider.rb +5 -5
  16. data/lib/com/wiris/plugin/api/PluginBuilder.rb +88 -74
  17. data/lib/com/wiris/plugin/api/Render.rb +5 -5
  18. data/lib/com/wiris/plugin/api/ServiceResourceLoader.rb +5 -5
  19. data/lib/com/wiris/plugin/api/Test.rb +5 -5
  20. data/lib/com/wiris/plugin/api/TextService.rb +5 -5
  21. data/lib/com/wiris/plugin/configuration/ConfigurationUpdater.rb +5 -5
  22. data/lib/com/wiris/plugin/impl/CacheFormulaImpl.rb +15 -0
  23. data/lib/com/wiris/plugin/impl/CacheImpl.rb +124 -0
  24. data/lib/com/wiris/plugin/impl/CasImpl.rb +140 -138
  25. data/lib/com/wiris/plugin/impl/CleanCacheImpl.rb +103 -101
  26. data/lib/com/wiris/plugin/impl/ConfigurationImpl.rb +165 -166
  27. data/lib/com/wiris/plugin/impl/CustomConfigurationUpdater.rb +32 -30
  28. data/lib/com/wiris/plugin/impl/DefaultConfigurationUpdater.rb +24 -22
  29. data/lib/com/wiris/plugin/impl/EditorImpl.rb +80 -78
  30. data/lib/com/wiris/plugin/impl/FileConfigurationUpdater.rb +29 -27
  31. data/lib/com/wiris/plugin/impl/FileStorageAndCache.rb +55 -53
  32. data/lib/com/wiris/plugin/impl/FolderTreeStorageAndCache.rb +65 -134
  33. data/lib/com/wiris/plugin/impl/GenericParamsProviderImpl.rb +50 -48
  34. data/lib/com/wiris/plugin/impl/HttpImpl.rb +49 -48
  35. data/lib/com/wiris/plugin/impl/HttpListener.rb +5 -5
  36. data/lib/com/wiris/plugin/impl/ImageFormatControllerPng.rb +71 -63
  37. data/lib/com/wiris/plugin/impl/ImageFormatControllerSvg.rb +37 -28
  38. data/lib/com/wiris/plugin/impl/PluginBuilderImpl.rb +280 -248
  39. data/lib/com/wiris/plugin/impl/RenderImpl.rb +303 -257
  40. data/lib/com/wiris/plugin/impl/ServiceResourceLoaderImpl.rb +41 -39
  41. data/lib/com/wiris/plugin/impl/TestImpl.rb +177 -157
  42. data/lib/com/wiris/plugin/impl/TextFilter.rb +210 -194
  43. data/lib/com/wiris/plugin/impl/TextFilterTags.rb +57 -50
  44. data/lib/com/wiris/plugin/impl/TextServiceImpl.rb +158 -107
  45. data/lib/com/wiris/plugin/storage/StorageAndCache.rb +5 -5
  46. data/lib/com/wiris/util/json/JSon.rb +505 -493
  47. data/lib/com/wiris/util/json/JSonIntegerFormat.rb +17 -16
  48. data/lib/com/wiris/util/json/JsonAPIResponse.rb +70 -0
  49. data/lib/com/wiris/util/json/StringParser.rb +57 -56
  50. data/lib/com/wiris/util/sys/AccessProvider.rb +8 -0
  51. data/lib/com/wiris/util/sys/Cache.rb +8 -0
  52. data/lib/com/wiris/util/sys/HttpConnection.rb +14 -13
  53. data/lib/com/wiris/util/sys/HttpConnectionListener.rb +5 -5
  54. data/lib/com/wiris/util/sys/HttpSync.rb +28 -0
  55. data/lib/com/wiris/util/sys/IniFile.rb +132 -131
  56. data/lib/com/wiris/util/sys/Lock.rb +8 -0
  57. data/lib/com/wiris/util/sys/LockProvider.rb +8 -0
  58. data/lib/com/wiris/util/sys/Store.rb +126 -101
  59. data/lib/com/wiris/util/sys/StoreCache.rb +63 -0
  60. data/lib/com/wiris/util/sys/TimerProxy.rb +21 -0
  61. data/lib/com/wiris/util/sys/TimerTask.rb +8 -0
  62. data/lib/com/wiris/util/type/Arrays.rb +275 -0
  63. data/lib/com/wiris/util/type/ByteBuffer.rb +69 -0
  64. data/lib/com/wiris/util/type/Comparator.rb +8 -0
  65. data/lib/com/wiris/util/type/DataUtils.rb +24 -0
  66. data/lib/com/wiris/util/type/DoubleTools.rb +14 -0
  67. data/lib/com/wiris/util/type/HashCache.rb +43 -0
  68. data/lib/com/wiris/util/type/IntegerTools.rb +32 -0
  69. data/lib/com/wiris/util/type/Queue.rb +31 -0
  70. data/lib/com/wiris/util/type/SortArrayByStringLength.rb +26 -0
  71. data/lib/com/wiris/util/type/SortStringByLength.rb +26 -0
  72. data/lib/com/wiris/util/type/SortedHash.rb +45 -0
  73. data/lib/com/wiris/util/type/Stack.rb +31 -0
  74. data/lib/com/wiris/util/type/StringUtils.rb +56 -0
  75. data/lib/com/wiris/util/type/Tokenizer.rb +40 -0
  76. data/lib/com/wiris/util/type/UrlUtils.rb +78 -0
  77. data/lib/com/wiris/util/xml/ContentHandler.rb +8 -0
  78. data/lib/com/wiris/util/xml/DefaultHandler.rb +25 -0
  79. data/lib/com/wiris/util/xml/EntityResolver.rb +8 -0
  80. data/lib/com/wiris/util/xml/MathMLEntityResolver.rb +19 -0
  81. data/lib/com/wiris/util/xml/SAXParser.rb +470 -0
  82. data/lib/com/wiris/util/xml/SerializableImpl.rb +16 -15
  83. data/lib/com/wiris/util/xml/WCharacterBase.rb +968 -627
  84. data/lib/com/wiris/util/xml/WEntities.rb +11 -9
  85. data/lib/com/wiris/util/xml/WXmlUtils.rb +660 -490
  86. data/lib/com/wiris/util/xml/XmlSerializer.rb +517 -471
  87. data/lib/com/wiris/util/xml/XmlWriter.rb +260 -262
  88. data/lib/loader.rb +15 -12
  89. data/lib/src-generic/Array.rb +22 -22
  90. data/lib/src-generic/ArrayInt.rb +31 -31
  91. data/lib/src-generic/Base64.rb +14 -14
  92. data/lib/src-generic/BaseCode.rb +93 -93
  93. data/lib/src-generic/Boolean.rb +27 -0
  94. data/lib/src-generic/Bytes.rb +50 -50
  95. data/lib/src-generic/BytesInput.rb +37 -37
  96. data/lib/src-generic/EReg.rb +55 -55
  97. data/lib/src-generic/File.rb +35 -35
  98. data/lib/src-generic/FileLock.rb +26 -26
  99. data/lib/src-generic/FileSystem.rb +37 -37
  100. data/lib/src-generic/Hash.rb +42 -42
  101. data/lib/src-generic/Http.rb +111 -107
  102. data/lib/src-generic/HttpRequest.rb +25 -25
  103. data/lib/src-generic/HttpResponse.rb +70 -70
  104. data/lib/src-generic/Iterator.rb +20 -19
  105. data/lib/src-generic/Math.rb +14 -14
  106. data/lib/src-generic/Md5.rb +8 -8
  107. data/lib/src-generic/Md5Tools.rb +11 -11
  108. data/lib/src-generic/PropertiesTools.rb +32 -32
  109. data/lib/src-generic/Reflect.rb +16 -16
  110. data/lib/src-generic/RubyConfigurationUpdater.rb +49 -45
  111. data/lib/src-generic/Serializer.rb +84 -84
  112. data/lib/src-generic/Std.rb +74 -74
  113. data/lib/src-generic/Storage.rb +152 -152
  114. data/lib/src-generic/StringBuf.rb +40 -40
  115. data/lib/src-generic/StringTools.rb +44 -46
  116. data/lib/src-generic/Timer.rb +6 -6
  117. data/lib/src-generic/Type.rb +18 -18
  118. data/lib/src-generic/TypeTools.rb +31 -31
  119. data/lib/src-generic/Unserializer.rb +72 -72
  120. data/lib/src-generic/Utf8.rb +26 -26
  121. data/lib/src-generic/Xml.rb +199 -198
  122. data/lib/src-generic/extended/Integer.rb +5 -5
  123. data/lib/src-generic/extended/Math.rb +6 -6
  124. data/lib/src-generic/extended/Properties.rb +11 -11
  125. data/lib/src-generic/extended/String.rb +38 -38
  126. data/lib/src-generic/settings/PlatformSettings.rb +18 -18
  127. data/lib/src-generic/system/HttpProxy.rb +23 -0
  128. data/lib/src-generic/system/HttpProxyAuth.rb +10 -0
  129. data/lib/wirispluginengine.rb +5 -5
  130. data/lib/wirispluginengine/engine.rb +5 -5
  131. data/lib/wirispluginengine/integration/cleancache.rb +8 -8
  132. data/lib/wirispluginengine/integration/configurationjs.rb +8 -15
  133. data/lib/wirispluginengine/integration/configurationjson.rb +6 -6
  134. data/lib/wirispluginengine/integration/createimage.rb +7 -7
  135. data/lib/wirispluginengine/integration/getmathml.rb +18 -18
  136. data/lib/wirispluginengine/integration/resource.rb +8 -8
  137. data/lib/wirispluginengine/integration/service.rb +5 -5
  138. data/lib/wirispluginengine/integration/showimage.rb +28 -21
  139. data/lib/wirispluginengine/integration/test.rb +5 -5
  140. data/lib/wirispluginengine/integration/testfilter.rb +10 -0
  141. data/lib/wirispluginengine/version.rb +2 -2
  142. data/resources/VERSION +1 -1
  143. data/resources/WEB-INF/web.xml +25 -0
  144. data/resources/WIRISplugins.js +3809 -0
  145. data/resources/default-configuration.ini +47 -45
  146. data/resources/tech.txt +1 -1
  147. data/resources/wirisplugin.css +43 -42
  148. metadata +40 -4
  149. data/configuration.ini.dist +0 -104
@@ -1,20 +1,21 @@
1
1
  module WirisPlugin
2
2
  include Wiris
3
- require('com/wiris/util/xml/XmlSerializer.rb')
4
- class SerializableImpl
5
- include Wiris
3
+ require('com/wiris/util/xml/XmlSerializer.rb')
4
+ class SerializableImpl
5
+ include Wiris
6
+
7
+ def initialize()
8
+ super()
9
+ end
10
+ def onSerialize(s)
11
+ end
12
+ def newInstance()
13
+ return SerializableImpl.new()
14
+ end
15
+ def serialize()
16
+ s = XmlSerializer.new()
17
+ return s::write(self)
18
+ end
6
19
 
7
- def initialize()
8
- super()
9
- end
10
- def onSerialize(s)
11
- end
12
- def newInstance()
13
- return SerializableImpl.new()
14
- end
15
- def serialize()
16
- s = XmlSerializer.new()
17
- return s::write(self)
18
20
  end
19
- end
20
21
  end
@@ -1,634 +1,975 @@
1
1
  module WirisPlugin
2
2
  include Wiris
3
- class WCharacterBase
4
- include Wiris
3
+ class WCharacterBase
4
+ include Wiris
5
5
 
6
- def initialize()
7
- super()
8
- end
9
- NEGATIVE_THIN_SPACE = 57344
10
- ROOT = 61696
11
- ROOT_VERTICAL = 61727
12
- ROOT_NO_TAIL = 61728
13
- ROOT_NO_TAIL_VERTICAL = 61759
14
- ROOT_LEFT_TAIL = 61760
15
- ROOT_VERTICAL_LINE = 61761
16
- ROUND_BRACKET_LEFT = 40
17
- ROUND_BRACKET_RIGHT = 41
18
- COMMA = 44
19
- FULL_STOP = 46
20
- SQUARE_BRACKET_LEFT = 91
21
- SQUARE_BRACKET_RIGHT = 93
22
- CIRCUMFLEX_ACCENT = 94
23
- LOW_LINE = 95
24
- CURLY_BRACKET_LEFT = 123
25
- VERTICAL_BAR = 124
26
- CURLY_BRACKET_RIGHT = 125
27
- TILDE = 126
28
- MACRON = 175
29
- COMBINING_LOW_LINE = 818
30
- MODIFIER_LETTER_CIRCUMFLEX_ACCENT = 710
31
- CARON = 711
32
- EN_QUAD = 8192
33
- EM_QUAD = 8193
34
- EN_SPACE = 8194
35
- EM_SPACE = 8195
36
- THICK_SPACE = 8196
37
- MID_SPACE = 8197
38
- SIX_PER_EM_SPACE = 8198
39
- FIGIRE_SPACE = 8199
40
- PUNCTUATION_SPACE = 8200
41
- THIN_SPACE = 8201
42
- HAIR_SPACE = 8202
43
- ZERO_WIDTH_SPACE = 8203
44
- ZERO_WIDTH_NON_JOINER = 8204
45
- ZERO_WIDTH_JOINER = 8205
46
- DOUBLE_VERTICAL_BAR = 8214
47
- DOUBLE_HORIZONTAL_BAR = 9552
48
- NARROW_NO_BREAK_SPACE = 8239
49
- MEDIUM_MATHEMATICAL_SPACE = 8287
50
- WORD_JOINER = 8288
51
- PLANCKOVER2PI = 8463
52
- LEFTWARDS_ARROW = 8592
53
- UPWARDS_ARROW = 8593
54
- RIGHTWARDS_ARROW = 8594
55
- DOWNWARDS_ARROW = 8595
56
- LEFTRIGHT_ARROW = 8596
57
- UP_DOWN_ARROW = 8597
58
- LEFTWARDS_ARROW_FROM_BAR = 8612
59
- RIGHTWARDS_ARROW_FROM_BAR = 8614
60
- LEFTWARDS_ARROW_WITH_HOOK = 8617
61
- RIGHTWARDS_ARROW_WITH_HOOK = 8618
62
- LEFTWARDS_HARPOON_WITH_BARB_UPWARDS = 8636
63
- RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS = 8640
64
- LEFTWARDS_DOUBLE_ARROW = 8656
65
- RIGHTWARDS_DOUBLE_ARROW = 8658
66
- LEFT_RIGHT_DOUBLE_ARROW = 8660
67
- LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW = 8646
68
- RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW = 8644
69
- LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON = 8651
70
- RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON = 8652
71
- RIGHTWARDS_ARROW_ABOVE_SHORT_LEFTWARDS_ARROW = 10562
72
- SHORT_RIGHTWARDS_ARROW_ABOVE_LEFTWARDS_ARROW = 10564
73
- LONG_RIGHTWARDS_ARROW = 10230
74
- LONG_LEFTWARDS_ARROW = 10229
75
- LONG_LEFT_RIGHT_ARROW = 10231
76
- LONG_LEFTWARDS_DOUBLE_ARROW = 10232
77
- LONG_RIGHTWARDS_DOUBLE_ARROW = 10233
78
- LONG_LEFT_RIGHT_DOUBLE_ARROW = 10234
79
- TILDE_OPERATOR = 8764
80
- LEFT_CEILING = 8968
81
- RIGHT_CEILING = 8969
82
- LEFT_FLOOR = 8970
83
- RIGHT_FLOOR = 8971
84
- TOP_PARENTHESIS = 9180
85
- BOTTOM_PARENTHESIS = 9181
86
- TOP_SQUARE_BRACKET = 9140
87
- BOTTOM_SQUARE_BRACKET = 9141
88
- TOP_CURLY_BRACKET = 9182
89
- BOTTOM_CURLY_BRACKET = 9183
90
- MATHEMATICAL_LEFT_ANGLE_BRACKET = 10216
91
- MATHEMATICAL_RIGHT_ANGLE_BRACKET = 10217
92
- DOUBLE_STRUCK_ITALIC_CAPITAL_D = 8517
93
- DOUBLE_STRUCK_ITALIC_SMALL_D = 8518
94
- DOUBLE_STRUCK_ITALIC_SMALL_E = 8519
95
- DOUBLE_STRUCK_ITALIC_SMALL_I = 8520
96
- EPSILON = 949
97
- VAREPSILON = 1013
98
- def self.isDigit(c)
99
- if (48<=c)&&(c<=57)
100
- return true
101
- end
102
- if (1632<=c)&&(c<=1641)
103
- return true
104
- end
105
- if (1776<=c)&&(c<=1785)
106
- return true
107
- end
108
- if (2790<=c)&&(c<=2799)
109
- return true
110
- end
111
- return false
112
- end
113
- def self.isIdentifier(c)
114
- return isLetter(c)||(c==95)
115
- end
116
- def self.isLarge(c)
117
- return binarySearch(largeOps,c)
118
- end
119
- def self.isVeryLarge(c)
120
- return binarySearch(veryLargeOps,c)
121
- end
122
- def self.isBinaryOp(c)
123
- return binarySearch(binaryOps,c)
124
- end
125
- def self.isRelation(c)
126
- return binarySearch(relations,c)
127
- end
128
- def self.binarySearch(v,c)
129
- min = 0
130
- max = v::length-1
131
- loop do
132
- mid = ((min+max)/2)
133
- cc = v[mid]
134
- if c==cc
135
- return true
136
- else
137
- if c<cc
138
- max = mid-1
139
- else
140
- min = mid+1
141
- end
142
- end
143
- break if not min<=max
144
- end
145
- return false
146
- end
147
- @@binaryOps = [43, 45, 47, 177, 183, 215, 247, 8226, 8722, 8723, 8724, 8726, 8727, 8728, 8743, 8744, 8745, 8746, 8760, 8768, 8846, 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8861, 8862, 8863, 8864, 8865, 8890, 8891, 8900, 8901, 8902, 8903, 8905, 8906, 8907, 8908, 8910, 8911, 8914, 8915, 8966, 9021, 9675, 10678, 10789, 10794, 10797, 10798, 10799, 10804, 10805, 10812, 10815, 10835, 10836, 10837, 10838, 10846, 10847, 10851]
148
- def self.binaryOps
149
- @@binaryOps
150
- end
151
- def self.binaryOps=(binaryOps)
152
- @@binaryOps = binaryOps
153
- end
154
- @@relations = [60, 61, 62, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8608, 8610, 8611, 8614, 8617, 8618, 8619, 8620, 8621, 8622, 8624, 8625, 8627, 8630, 8631, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8666, 8667, 8669, 8693, 8712, 8713, 8715, 8716, 8733, 8739, 8740, 8741, 8742, 8764, 8765, 8769, 8770, 8771, 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8793, 8794, 8795, 8796, 8799, 8800, 8801, 8802, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, 8812, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8847, 8848, 8849, 8850, 8866, 8867, 8869, 8871, 8872, 8873, 8874, 8875, 8876, 8877, 8878, 8879, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8904, 8909, 8912, 8913, 8918, 8919, 8920, 8921, 8922, 8923, 8926, 8927, 8930, 8931, 8934, 8935, 8936, 8937, 8938, 8939, 8940, 8941, 8994, 8995, 9123, 10229, 10230, 10231, 10232, 10233, 10234, 10236, 10239, 10501, 10514, 10515, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10547, 10550, 10551, 10560, 10561, 10562, 10564, 10567, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582, 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, 10606, 10607, 10608, 10620, 10621, 10869, 10877, 10878, 10885, 10886, 10887, 10888, 10889, 10890, 10891, 10892, 10901, 10902, 10909, 10910, 10913, 10914, 10927, 10928, 10933, 10934, 10935, 10936, 10937, 10938, 10949, 10950, 10955, 10956, 10987, 11005]
155
- def self.relations
156
- @@relations
157
- end
158
- def self.relations=(relations)
159
- @@relations = relations
160
- end
161
- @@largeOps = [8719, 8720, 8721, 8896, 8897, 8898, 8899, 10756, 10757, 10758, 10759, 10760]
162
- def self.largeOps
163
- @@largeOps
164
- end
165
- def self.largeOps=(largeOps)
166
- @@largeOps = largeOps
167
- end
168
- @@veryLargeOps = [8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 10763, 10764, 10765, 10766, 10767, 10768, 10774, 10775, 10776, 10777, 10778, 10779, 10780]
169
- def self.veryLargeOps
170
- @@veryLargeOps
171
- end
172
- def self.veryLargeOps=(veryLargeOps)
173
- @@veryLargeOps = veryLargeOps
174
- end
175
- @@tallLetters = [98, 100, 102, 104, 105, 106, 107, 108, 116, 946, 948, 950, 952, 955, 958]
176
- def self.tallLetters
177
- @@tallLetters
178
- end
179
- def self.tallLetters=(tallLetters)
180
- @@tallLetters = tallLetters
181
- end
182
- @@longLetters = [103, 106, 112, 113, 121, 946, 947, 950, 951, 956, 958, 961, 962, 966, 967, 968]
183
- def self.longLetters
184
- @@longLetters
185
- end
186
- def self.longLetters=(longLetters)
187
- @@longLetters = longLetters
188
- end
189
- @@negations = [61, 8800, 8801, 8802, 8764, 8769, 8712, 8713, 8715, 8716, 8834, 8836, 8835, 8837, 8838, 8840, 8839, 8841, 62, 8815, 60, 8814, 8805, 8817, 8804, 8816, 10878, 8817, 10877, 8816, 8776, 8777, 8771, 8772, 8773, 8775, 8849, 8930, 8850, 8931, 8707, 8708, 8741, 8742]
190
- def self.negations
191
- @@negations
192
- end
193
- def self.negations=(negations)
194
- @@negations = negations
195
- end
196
- @@mirrorDictionary = [40, 41, 41, 40, 60, 62, 62, 60, 91, 93, 93, 91, 123, 125, 125, 123, 171, 187, 187, 171, 3898, 3899, 3899, 3898, 3900, 3901, 3901, 3900, 5787, 5788, 5788, 5787, 8249, 8250, 8250, 8249, 8261, 8262, 8262, 8261, 8317, 8318, 8318, 8317, 8333, 8334, 8334, 8333, 8712, 8715, 8713, 8716, 8714, 8717, 8715, 8712, 8716, 8713, 8717, 8714, 8725, 10741, 8764, 8765, 8765, 8764, 8771, 8909, 8786, 8787, 8787, 8786, 8788, 8789, 8789, 8788, 8804, 8805, 8805, 8804, 8806, 8807, 8807, 8806, 8808, 8809, 8809, 8808, 8810, 8811, 8811, 8810, 8814, 8815, 8815, 8814, 8816, 8817, 8817, 8816, 8818, 8819, 8819, 8818, 8820, 8821, 8821, 8820, 8822, 8823, 8823, 8822, 8824, 8825, 8825, 8824, 8826, 8827, 8827, 8826, 8828, 8829, 8829, 8828, 8830, 8831, 8831, 8830, 8832, 8833, 8833, 8832, 8834, 8835, 8835, 8834, 8836, 8837, 8837, 8836, 8838, 8839, 8839, 8838, 8840, 8841, 8841, 8840, 8842, 8843, 8843, 8842, 8847, 8848, 8848, 8847, 8849, 8850, 8850, 8849, 8856, 10680, 8866, 8867, 8867, 8866, 8870, 10974, 8872, 10980, 8873, 10979, 8875, 10981, 8880, 8881, 8881, 8880, 8882, 8883, 8883, 8882, 8884, 8885, 8885, 8884, 8886, 8887, 8887, 8886, 8905, 8906, 8906, 8905, 8907, 8908, 8908, 8907, 8909, 8771, 8912, 8913, 8913, 8912, 8918, 8919, 8919, 8918, 8920, 8921, 8921, 8920, 8922, 8923, 8923, 8922, 8924, 8925, 8925, 8924, 8926, 8927, 8927, 8926, 8928, 8929, 8929, 8928, 8930, 8931, 8931, 8930, 8932, 8933, 8933, 8932, 8934, 8935, 8935, 8934, 8936, 8937, 8937, 8936, 8938, 8939, 8939, 8938, 8940, 8941, 8941, 8940, 8944, 8945, 8945, 8944, 8946, 8954, 8947, 8955, 8948, 8956, 8950, 8957, 8951, 8958, 8954, 8946, 8955, 8947, 8956, 8948, 8957, 8950, 8958, 8951, 8968, 8969, 8969, 8968, 8970, 8971, 8971, 8970, 9001, 9002, 9002, 9001, 10088, 10089, 10089, 10088, 10090, 10091, 10091, 10090, 10092, 10093, 10093, 10092, 10094, 10095, 10095, 10094, 10096, 10097, 10097, 10096, 10098, 10099, 10099, 10098, 10100, 10101, 10101, 10100, 10179, 10180, 10180, 10179, 10181, 10182, 10182, 10181, 10184, 10185, 10185, 10184, 10187, 10189, 10189, 10187, 10197, 10198, 10198, 10197, 10205, 10206, 10206, 10205, 10210, 10211, 10211, 10210, 10212, 10213, 10213, 10212, 10214, 10215, 10215, 10214, 10216, 10217, 10217, 10216, 10218, 10219, 10219, 10218, 10220, 10221, 10221, 10220, 10222, 10223, 10223, 10222, 10627, 10628, 10628, 10627, 10629, 10630, 10630, 10629, 10631, 10632, 10632, 10631, 10633, 10634, 10634, 10633, 10635, 10636, 10636, 10635, 10637, 10640, 10638, 10639, 10639, 10638, 10640, 10637, 10641, 10642, 10642, 10641, 10643, 10644, 10644, 10643, 10645, 10646, 10646, 10645, 10647, 10648, 10648, 10647, 10680, 8856, 10688, 10689, 10689, 10688, 10692, 10693, 10693, 10692, 10703, 10704, 10704, 10703, 10705, 10706, 10706, 10705, 10708, 10709, 10709, 10708, 10712, 10713, 10713, 10712, 10714, 10715, 10715, 10714, 10741, 8725, 10744, 10745, 10745, 10744, 10748, 10749, 10749, 10748, 10795, 10796, 10796, 10795, 10797, 10798, 10798, 10797, 10804, 10805, 10805, 10804, 10812, 10813, 10813, 10812, 10852, 10853, 10853, 10852, 10873, 10874, 10874, 10873, 10877, 10878, 10878, 10877, 10879, 10880, 10880, 10879, 10881, 10882, 10882, 10881, 10883, 10884, 10884, 10883, 10891, 10892, 10892, 10891, 10897, 10898, 10898, 10897, 10899, 10900, 10900, 10899, 10901, 10902, 10902, 10901, 10903, 10904, 10904, 10903, 10905, 10906, 10906, 10905, 10907, 10908, 10908, 10907, 10913, 10914, 10914, 10913, 10918, 10919, 10919, 10918, 10920, 10921, 10921, 10920, 10922, 10923, 10923, 10922, 10924, 10925, 10925, 10924, 10927, 10928, 10928, 10927, 10931, 10932, 10932, 10931, 10939, 10940, 10940, 10939, 10941, 10942, 10942, 10941, 10943, 10944, 10944, 10943, 10945, 10946, 10946, 10945, 10947, 10948, 10948, 10947, 10949, 10950, 10950, 10949, 10957, 10958, 10958, 10957, 10959, 10960, 10960, 10959, 10961, 10962, 10962, 10961, 10963, 10964, 10964, 10963, 10965, 10966, 10966, 10965, 10974, 8870, 10979, 8873, 10980, 8872, 10981, 8875, 10988, 10989, 10989, 10988, 10999, 11000, 11000, 10999, 11001, 11002, 11002, 11001, 11778, 11779, 11779, 11778, 11780, 11781, 11781, 11780, 11785, 11786, 11786, 11785, 11788, 11789, 11789, 11788, 11804, 11805, 11805, 11804, 11808, 11809, 11809, 11808, 11810, 11811, 11811, 11810, 11812, 11813, 11813, 11812, 11814, 11815, 11815, 11814, 11816, 11817, 11817, 11816, 12296, 12297, 12297, 12296, 12298, 12299, 12299, 12298, 12300, 12301, 12301, 12300, 12302, 12303, 12303, 12302, 12304, 12305, 12305, 12304, 12308, 12309, 12309, 12308, 12310, 12311, 12311, 12310, 12312, 12313, 12313, 12312, 12314, 12315, 12315, 12314, 65113, 65114, 65114, 65113, 65115, 65116, 65116, 65115, 65117, 65118, 65118, 65117, 65124, 65125, 65125, 65124, 65288, 65289, 65289, 65288, 65308, 65310, 65310, 65308, 65339, 65341, 65341, 65339, 65371, 65373, 65373, 65371, 65375, 65376, 65376, 65375, 65378, 65379, 65379, 65378, 9115, 9118, 9116, 9119, 9117, 9120, 9118, 9115, 9119, 9116, 9120, 9117, 9121, 9124, 9122, 9125, 9123, 9126, 9124, 9121, 9125, 9122, 9126, 9123, 9127, 9131, 9130, 9134, 9129, 9133, 9131, 9127, 9134, 9130, 9133, 9129, 9128, 9132, 9132, 9128]
197
- def self.mirrorDictionary
198
- @@mirrorDictionary
199
- end
200
- def self.mirrorDictionary=(mirrorDictionary)
201
- @@mirrorDictionary = mirrorDictionary
202
- end
203
- @@horizontalLTRStretchyChars = [WCharacterBase::LEFTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW, WCharacterBase::LEFTRIGHT_ARROW, WCharacterBase::LEFTWARDS_ARROW_FROM_BAR, WCharacterBase::RIGHTWARDS_ARROW_FROM_BAR, WCharacterBase::LEFTWARDS_ARROW_WITH_HOOK, WCharacterBase::RIGHTWARDS_ARROW_WITH_HOOK, WCharacterBase::LEFTWARDS_HARPOON_WITH_BARB_UPWARDS, WCharacterBase::RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS, WCharacterBase::LEFTWARDS_DOUBLE_ARROW, WCharacterBase::RIGHTWARDS_DOUBLE_ARROW, WCharacterBase::TOP_CURLY_BRACKET, WCharacterBase::BOTTOM_CURLY_BRACKET, WCharacterBase::TOP_PARENTHESIS, WCharacterBase::BOTTOM_PARENTHESIS, WCharacterBase::TOP_SQUARE_BRACKET, WCharacterBase::BOTTOM_SQUARE_BRACKET, WCharacterBase::LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW, WCharacterBase::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON, WCharacterBase::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON]
204
- def self.horizontalLTRStretchyChars
205
- @@horizontalLTRStretchyChars
206
- end
207
- def self.horizontalLTRStretchyChars=(horizontalLTRStretchyChars)
208
- @@horizontalLTRStretchyChars = horizontalLTRStretchyChars
209
- end
210
- @@tallAccents = [WCharacterBase::LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW, WCharacterBase::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON, WCharacterBase::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON]
211
- def self.tallAccents
212
- @@tallAccents
213
- end
214
- def self.tallAccents=(tallAccents)
215
- @@tallAccents = tallAccents
216
- end
217
- PUNCTUATION_CATEGORY = "P"
218
- OTHER_CATEGORY = "C"
219
- LETTER_CATEGORY = "L"
220
- MARK_CATEGORY = "M"
221
- NUMBER_CATEGORY = "N"
222
- SYMBOL_CATEGORY = "S"
223
- SEPARATOR_CATEGORY = "Z"
224
- UNICODES_WITH_CATEGORIES = "@P:21-23,25-2A,2C-2F,3A-3B,3F-40,5B-5D,5F,7B,7D,A1,A7,AB,B6-B7,BB,BF,37E,387,55A-55F,589-58A,5BE,5C0,5C3,5C6,5F3-5F4,609-60A,60C-60D,61B,61E-61F,66A-66D,6D4,700-70D,7F7-7F9,830-83E,85E,964-965,970,AF0,DF4,E4F,E5A-E5B,F04-F12,F14,F3A-F3D,F85,FD0-FD4,FD9-FDA,104A-104F,10FB,1360-1368,1400,166D-166E,169B-169C,16EB-16ED,1735-1736,17D4-17D6,17D8-17DA,1800-180A,1944-1945,1A1E-1A1F,1AA0-1AA6,1AA8-1AAD,1B5A-1B60,1BFC-1BFF,1C3B-1C3F,1C7E-1C7F,1CC0-1CC7,1CD3,2010-2027,2030-2043,2045-2051,2053-205E,207D-207E,208D-208E,2308-230B,2329-232A,2768-2775,27C5-27C6,27E6-27EF,2983-2998,29D8-29DB,29FC-29FD,2CF9-2CFC,2CFE-2CFF,2D70,2E00-2E2E,2E30-2E44,3001-3003,3008-3011,3014-301F,3030,303D,30A0,30FB,A4FE-A4FF,A60D-A60F,A673,A67E,A6F2-A6F7,A874-A877,A8CE-A8CF,A8F8-A8FA,A8FC,A92E-A92F,A95F,A9C1-A9CD,A9DE-A9DF,AA5C-AA5F,AADE-AADF,AAF0-AAF1,ABEB,FD3E-FD3F,FE10-FE19,FE30-FE52,FE54-FE61,FE63,FE68,FE6A-FE6B,FF01-FF03,FF05-FF0A,FF0C-FF0F,FF1A-FF1B,FF1F-FF20,FF3B-FF3D,FF3F,FF5B,FF5D,FF5F-FF65,10100-10102,1039F,103D0,1056F,10857,1091F,1093F,10A50-10A58,10A7F,10AF0-10AF6,10B39-10B3F,10B99-10B9C,11047-1104D,110BB-110BC,110BE-110C1,11140-11143,11174-11175,111C5-111C9,111CD,111DB,111DD-111DF,11238-1123D,112A9,1144B-1144F,1145B,1145D,114C6,115C1-115D7,11641-11643,11660-1166C,1173C-1173E,11C41-11C45,11C70-11C71,12470-12474,16A6E-16A6F,16AF5,16B37-16B3B,16B44,1BC9F,1DA87-1DA8B,1E95E-1E95F@C:AD,600-605,61C,6DD,70F,8E2,180E,200B-200F,202A-202E,2060-2064,2066-206F,D800,DB7F-DB80,DBFF-DC00,DFFF-E000,F8FF,FEFF,FFF9-FFFB,110BD,1BCA0-1BCA3,1D173-1D17A@L:41-5A,61-7A,AA,B5,BA,C0-D6,D8-F6,F8-2C1,2C6-2D1,2E0-2E4,2EC,2EE,370-374,376-377,37A-37D,37F,386,388-38A,38C,38E-3A1,3A3-3F5,3F7-481,48A-52F,531-556,559,561-587,5D0-5EA,5F0-5F2,620-64A,66E-66F,671-6D3,6D5,6E5-6E6,6EE-6EF,6FA-6FC,6FF,710,712-72F,74D-7A5,7B1,7CA-7EA,7F4-7F5,7FA,800-815,81A,824,828,840-858,8A0-8B4,8B6-8BD,904-939,93D,950,958-961,971-980,985-98C,98F-990,993-9A8,9AA-9B0,9B2,9B6-9B9,9BD,9CE,9DC-9DD,9DF-9E1,9F0-9F1,A05-A0A,A0F-A10,A13-A28,A2A-A30,A32-A33,A35-A36,A38-A39,A59-A5C,A5E,A72-A74,A85-A8D,A8F-A91,A93-AA8,AAA-AB0,AB2-AB3,AB5-AB9,ABD,AD0,AE0-AE1,AF9,B05-B0C,B0F-B10,B13-B28,B2A-B30,B32-B33,B35-B39,B3D,B5C-B5D,B5F-B61,B71,B83,B85-B8A,B8E-B90,B92-B95,B99-B9A,B9C,B9E-B9F,BA3-BA4,BA8-BAA,BAE-BB9,BD0,C05-C0C,C0E-C10,C12-C28,C2A-C39,C3D,C58-C5A,C60-C61,C80,C85-C8C,C8E-C90,C92-CA8,CAA-CB3,CB5-CB9,CBD,CDE,CE0-CE1,CF1-CF2,D05-D0C,D0E-D10,D12-D3A,D3D,D4E,D54-D56,D5F-D61,D7A-D7F,D85-D96,D9A-DB1,DB3-DBB,DBD,DC0-DC6,E01-E30,E32-E33,E40-E46,E81-E82,E84,E87-E88,E8A,E8D,E94-E97,E99-E9F,EA1-EA3,EA5,EA7,EAA-EAB,EAD-EB0,EB2-EB3,EBD,EC0-EC4,EC6,EDC-EDF,F00,F40-F47,F49-F6C,F88-F8C,1000-102A,103F,1050-1055,105A-105D,1061,1065-1066,106E-1070,1075-1081,108E,10A0-10C5,10C7,10CD,10D0-10FA,10FC-1248,124A-124D,1250-1256,1258,125A-125D,1260-1288,128A-128D,1290-12B0,12B2-12B5,12B8-12BE,12C0,12C2-12C5,12C8-12D6,12D8-1310,1312-1315,1318-135A,1380-138F,13A0-13F5,13F8-13FD,1401-166C,166F-167F,1681-169A,16A0-16EA,16F1-16F8,1700-170C,170E-1711,1720-1731,1740-1751,1760-176C,176E-1770,1780-17B3,17D7,17DC,1820-1877,1880-1884,1887-18A8,18AA,18B0-18F5,1900-191E,1950-196D,1970-1974,1980-19AB,19B0-19C9,1A00-1A16,1A20-1A54,1AA7,1B05-1B33,1B45-1B4B,1B83-1BA0,1BAE-1BAF,1BBA-1BE5,1C00-1C23,1C4D-1C4F,1C5A-1C7D,1C80-1C88,1CE9-1CEC,1CEE-1CF1,1CF5-1CF6,1D00-1DBF,1E00-1F15,1F18-1F1D,1F20-1F45,1F48-1F4D,1F50-1F57,1F59,1F5B,1F5D,1F5F-1F7D,1F80-1FB4,1FB6-1FBC,1FBE,1FC2-1FC4,1FC6-1FCC,1FD0-1FD3,1FD6-1FDB,1FE0-1FEC,1FF2-1FF4,1FF6-1FFC,2071,207F,2090-209C,2102,2107,210A-2113,2115,2119-211D,2124,2126,2128,212A-212D,212F-2139,213C-213F,2145-2149,214E,2183-2184,2C00-2C2E,2C30-2C5E,2C60-2CE4,2CEB-2CEE,2CF2-2CF3,2D00-2D25,2D27,2D2D,2D30-2D67,2D6F,2D80-2D96,2DA0-2DA6,2DA8-2DAE,2DB0-2DB6,2DB8-2DBE,2DC0-2DC6,2DC8-2DCE,2DD0-2DD6,2DD8-2DDE,2E2F,3005-3006,3031-3035,303B-303C,3041-3096,309D-309F,30A1-30FA,30FC-30FF,3105-312D,3131-318E,31A0-31BA,31F0-31FF,3400,4DB5,4E00,9FD5,A000-A48C,A4D0-A4FD,A500-A60C,A610-A61F,A62A-A62B,A640-A66E,A67F-A69D,A6A0-A6E5,A717-A71F,A722-A788,A78B-A7AE,A7B0-A7B7,A7F7-A801,A803-A805,A807-A80A,A80C-A822,A840-A873,A882-A8B3,A8F2-A8F7,A8FB,A8FD,A90A-A925,A930-A946,A960-A97C,A984-A9B2,A9CF,A9E0-A9E4,A9E6-A9EF,A9FA-A9FE,AA00-AA28,AA40-AA42,AA44-AA4B,AA60-AA76,AA7A,AA7E-AAAF,AAB1,AAB5-AAB6,AAB9-AABD,AAC0,AAC2,AADB-AADD,AAE0-AAEA,AAF2-AAF4,AB01-AB06,AB09-AB0E,AB11-AB16,AB20-AB26,AB28-AB2E,AB30-AB5A,AB5C-AB65,AB70-ABE2,AC00,D7A3,D7B0-D7C6,D7CB-D7FB,F900-FA6D,FA70-FAD9,FB00-FB06,FB13-FB17,FB1D,FB1F-FB28,FB2A-FB36,FB38-FB3C,FB3E,FB40-FB41,FB43-FB44,FB46-FBB1,FBD3-FD3D,FD50-FD8F,FD92-FDC7,FDF0-FDFB,FE70-FE74,FE76-FEFC,FF21-FF3A,FF41-FF5A,FF66-FFBE,FFC2-FFC7,FFCA-FFCF,FFD2-FFD7,FFDA-FFDC,10000-1000B,1000D-10026,10028-1003A,1003C-1003D,1003F-1004D,10050-1005D,10080-100FA,10280-1029C,102A0-102D0,10300-1031F,10330-10340,10342-10349,10350-10375,10380-1039D,103A0-103C3,103C8-103CF,10400-1049D,104B0-104D3,104D8-104FB,10500-10527,10530-10563,10600-10736,10740-10755,10760-10767,10800-10805,10808,1080A-10835,10837-10838,1083C,1083F-10855,10860-10876,10880-1089E,108E0-108F2,108F4-108F5,10900-10915,10920-10939,10980-109B7,109BE-109BF,10A00,10A10-10A13,10A15-10A17,10A19-10A33,10A60-10A7C,10A80-10A9C,10AC0-10AC7,10AC9-10AE4,10B00-10B35,10B40-10B55,10B60-10B72,10B80-10B91,10C00-10C48,10C80-10CB2,10CC0-10CF2,11003-11037,11083-110AF,110D0-110E8,11103-11126,11150-11172,11176,11183-111B2,111C1-111C4,111DA,111DC,11200-11211,11213-1122B,11280-11286,11288,1128A-1128D,1128F-1129D,1129F-112A8,112B0-112DE,11305-1130C,1130F-11310,11313-11328,1132A-11330,11332-11333,11335-11339,1133D,11350,1135D-11361,11400-11434,11447-1144A,11480-114AF,114C4-114C5,114C7,11580-115AE,115D8-115DB,11600-1162F,11644,11680-116AA,11700-11719,118A0-118DF,118FF,11AC0-11AF8,11C00-11C08,11C0A-11C2E,11C40,11C72-11C8F,12000-12399,12480-12543,13000-1342E,14400-14646,16800-16A38,16A40-16A5E,16AD0-16AED,16B00-16B2F,16B40-16B43,16B63-16B77,16B7D-16B8F,16F00-16F44,16F50,16F93-16F9F,16FE0,17000,187EC,18800-18AF2,1B000-1B001,1BC00-1BC6A,1BC70-1BC7C,1BC80-1BC88,1BC90-1BC99,1D400-1D454,1D456-1D49C,1D49E-1D49F,1D4A2,1D4A5-1D4A6,1D4A9-1D4AC,1D4AE-1D4B9,1D4BB,1D4BD-1D4C3,1D4C5-1D505,1D507-1D50A,1D50D-1D514,1D516-1D51C,1D51E-1D539,1D53B-1D53E,1D540-1D544,1D546,1D54A-1D550,1D552-1D6A5,1D6A8-1D6C0,1D6C2-1D6DA,1D6DC-1D6FA,1D6FC-1D714,1D716-1D734,1D736-1D74E,1D750-1D76E,1D770-1D788,1D78A-1D7A8,1D7AA-1D7C2,1D7C4-1D7CB,1E800-1E8C4,1E900-1E943,1EE00-1EE03,1EE05-1EE1F,1EE21-1EE22,1EE24,1EE27,1EE29-1EE32,1EE34-1EE37,1EE39,1EE3B,1EE42,1EE47,1EE49,1EE4B,1EE4D-1EE4F,1EE51-1EE52,1EE54,1EE57,1EE59,1EE5B,1EE5D,1EE5F,1EE61-1EE62,1EE64,1EE67-1EE6A,1EE6C-1EE72,1EE74-1EE77,1EE79-1EE7C,1EE7E,1EE80-1EE89,1EE8B-1EE9B,1EEA1-1EEA3,1EEA5-1EEA9,1EEAB-1EEBB,20000,2A6D6,2A700,2B734,2B740,2B81D,2B820,2CEA1,2F800-2FA1D@M:300-36F,483-489,591-5BD,5BF,5C1-5C2,5C4-5C5,5C7,610-61A,64B-65F,670,6D6-6DC,6DF-6E4,6E7-6E8,6EA-6ED,711,730-74A,7A6-7B0,7EB-7F3,816-819,81B-823,825-827,829-82D,859-85B,8D4-8E1,8E3-903,93A-93C,93E-94F,951-957,962-963,981-983,9BC,9BE-9C4,9C7-9C8,9CB-9CD,9D7,9E2-9E3,A01-A03,A3C,A3E-A42,A47-A48,A4B-A4D,A51,A70-A71,A75,A81-A83,ABC,ABE-AC5,AC7-AC9,ACB-ACD,AE2-AE3,B01-B03,B3C,B3E-B44,B47-B48,B4B-B4D,B56-B57,B62-B63,B82,BBE-BC2,BC6-BC8,BCA-BCD,BD7,C00-C03,C3E-C44,C46-C48,C4A-C4D,C55-C56,C62-C63,C81-C83,CBC,CBE-CC4,CC6-CC8,CCA-CCD,CD5-CD6,CE2-CE3,D01-D03,D3E-D44,D46-D48,D4A-D4D,D57,D62-D63,D82-D83,DCA,DCF-DD4,DD6,DD8-DDF,DF2-DF3,E31,E34-E3A,E47-E4E,EB1,EB4-EB9,EBB-EBC,EC8-ECD,F18-F19,F35,F37,F39,F3E-F3F,F71-F84,F86-F87,F8D-F97,F99-FBC,FC6,102B-103E,1056-1059,105E-1060,1062-1064,1067-106D,1071-1074,1082-108D,108F,109A-109D,135D-135F,1712-1714,1732-1734,1752-1753,1772-1773,17B4-17D3,17DD,1885-1886,18A9,1920-192B,1930-193B,1A17-1A1B,1A55-1A5E,1A60-1A7C,1A7F,1AB0-1ABE,1B00-1B04,1B34-1B44,1B6B-1B73,1B80-1B82,1BA1-1BAD,1BE6-1BF3,1C24-1C37,1CD0-1CD2,1CD4-1CE8,1CED,1CF2-1CF4,1CF8-1CF9,1DC0-1DF5,1DFB-1DFF,20D0-20F0,2CEF-2CF1,2D7F,2DE0-2DFF,302A-302F,3099-309A,A66F-A672,A674-A67D,A69E-A69F,A6F0-A6F1,A802,A806,A80B,A823-A827,A880-A881,A8B4-A8C5,A8E0-A8F1,A926-A92D,A947-A953,A980-A983,A9B3-A9C0,A9E5,AA29-AA36,AA43,AA4C-AA4D,AA7B-AA7D,AAB0,AAB2-AAB4,AAB7-AAB8,AABE-AABF,AAC1,AAEB-AAEF,AAF5-AAF6,ABE3-ABEA,ABEC-ABED,FB1E,FE20-FE2F,101FD,102E0,10376-1037A,10A01-10A03,10A05-10A06,10A0C-10A0F,10A38-10A3A,10A3F,10AE5-10AE6,11000-11002,11038-11046,1107F-11082,110B0-110BA,11100-11102,11127-11134,11173,11180-11182,111B3-111C0,111CA-111CC,1122C-11237,1123E,112DF-112EA,11300-11303,1133C,1133E-11344,11347-11348,1134B-1134D,11357,11362-11363,11366-1136C,11370-11374,11435-11446,114B0-114C3,115AF-115B5,115B8-115C0,115DC-115DD,11630-11640,116AB-116B7,1171D-1172B,11C2F-11C36,11C38-11C3F,11C92-11CA7,11CA9-11CB6,16AF0-16AF4,16B30-16B36,16F51-16F7E,16F8F-16F92,1BC9D-1BC9E,1D165-1D169,1D16D-1D172,1D17B-1D182,1D185-1D18B,1D1AA-1D1AD,1D242-1D244,1DA00-1DA36,1DA3B-1DA6C,1DA75,1DA84,1DA9B-1DA9F,1DAA1-1DAAF,1E000-1E006,1E008-1E018,1E01B-1E021,1E023-1E024,1E026-1E02A,1E8D0-1E8D6,1E944-1E94A@N:30-39,B2-B3,B9,BC-BE,660-669,6F0-6F9,7C0-7C9,966-96F,9E6-9EF,9F4-9F9,A66-A6F,AE6-AEF,B66-B6F,B72-B77,BE6-BF2,C66-C6F,C78-C7E,CE6-CEF,D58-D5E,D66-D78,DE6-DEF,E50-E59,ED0-ED9,F20-F33,1040-1049,1090-1099,1369-137C,16EE-16F0,17E0-17E9,17F0-17F9,1810-1819,1946-194F,19D0-19DA,1A80-1A89,1A90-1A99,1B50-1B59,1BB0-1BB9,1C40-1C49,1C50-1C59,2070,2074-2079,2080-2089,2150-2182,2185-2189,2460-249B,24EA-24FF,2776-2793,2CFD,3007,3021-3029,3038-303A,3192-3195,3220-3229,3248-324F,3251-325F,3280-3289,32B1-32BF,A620-A629,A6E6-A6EF,A830-A835,A8D0-A8D9,A900-A909,A9D0-A9D9,A9F0-A9F9,AA50-AA59,ABF0-ABF9,FF10-FF19,10107-10133,10140-10178,1018A-1018B,102E1-102FB,10320-10323,10341,1034A,103D1-103D5,104A0-104A9,10858-1085F,10879-1087F,108A7-108AF,108FB-108FF,10916-1091B,109BC-109BD,109C0-109CF,109D2-109FF,10A40-10A47,10A7D-10A7E,10A9D-10A9F,10AEB-10AEF,10B58-10B5F,10B78-10B7F,10BA9-10BAF,10CFA-10CFF,10E60-10E7E,11052-1106F,110F0-110F9,11136-1113F,111D0-111D9,111E1-111F4,112F0-112F9,11450-11459,114D0-114D9,11650-11659,116C0-116C9,11730-1173B,118E0-118F2,11C50-11C6C,12400-1246E,16A60-16A69,16B50-16B59,16B5B-16B61,1D360-1D371,1D7CE-1D7FF,1E8C7-1E8CF,1E950-1E959,1F100-1F10C@S:24,2B,3C-3E,5E,60,7C,7E,A2-A6,A8-A9,AC,AE-B1,B4,B8,D7,F7,2C2-2C5,2D2-2DF,2E5-2EB,2ED,2EF-2FF,375,384-385,3F6,482,58D-58F,606-608,60B,60E-60F,6DE,6E9,6FD-6FE,7F6,9F2-9F3,9FA-9FB,AF1,B70,BF3-BFA,C7F,D4F,D79,E3F,F01-F03,F13,F15-F17,F1A-F1F,F34,F36,F38,FBE-FC5,FC7-FCC,FCE-FCF,FD5-FD8,109E-109F,1390-1399,17DB,1940,19DE-19FF,1B61-1B6A,1B74-1B7C,1FBD,1FBF-1FC1,1FCD-1FCF,1FDD-1FDF,1FED-1FEF,1FFD-1FFE,2044,2052,207A-207C,208A-208C,20A0-20BE,2100-2101,2103-2106,2108-2109,2114,2116-2118,211E-2123,2125,2127,2129,212E,213A-213B,2140-2144,214A-214D,214F,218A-218B,2190-2307,230C-2328,232B-23FE,2400-2426,2440-244A,249C-24E9,2500-2767,2794-27C4,27C7-27E5,27F0-2982,2999-29D7,29DC-29FB,29FE-2B73,2B76-2B95,2B98-2BB9,2BBD-2BC8,2BCA-2BD1,2BEC-2BEF,2CE5-2CEA,2E80-2E99,2E9B-2EF3,2F00-2FD5,2FF0-2FFB,3004,3012-3013,3020,3036-3037,303E-303F,309B-309C,3190-3191,3196-319F,31C0-31E3,3200-321E,322A-3247,3250,3260-327F,328A-32B0,32C0-32FE,3300-33FF,4DC0-4DFF,A490-A4C6,A700-A716,A720-A721,A789-A78A,A828-A82B,A836-A839,AA77-AA79,AB5B,FB29,FBB2-FBC1,FDFC-FDFD,FE62,FE64-FE66,FE69,FF04,FF0B,FF1C-FF1E,FF3E,FF40,FF5C,FF5E,FFE0-FFE6,FFE8-FFEE,FFFC-FFFD,10137-1013F,10179-10189,1018C-1018E,10190-1019B,101A0,101D0-101FC,10877-10878,10AC8,1173F,16B3C-16B3F,16B45,1BC9C,1D000-1D0F5,1D100-1D126,1D129-1D164,1D16A-1D16C,1D183-1D184,1D18C-1D1A9,1D1AE-1D1E8,1D200-1D241,1D245,1D300-1D356,1D6C1,1D6DB,1D6FB,1D715,1D735,1D74F,1D76F,1D789,1D7A9,1D7C3,1D800-1D9FF,1DA37-1DA3A,1DA6D-1DA74,1DA76-1DA83,1DA85-1DA86,1EEF0-1EEF1,1F000-1F02B,1F030-1F093,1F0A0-1F0AE,1F0B1-1F0BF,1F0C1-1F0CF,1F0D1-1F0F5,1F110-1F12E,1F130-1F16B,1F170-1F1AC,1F1E6-1F202,1F210-1F23B,1F240-1F248,1F250-1F251,1F300-1F6D2,1F6E0-1F6EC,1F6F0-1F6F6,1F700-1F773,1F780-1F7D4,1F800-1F80B,1F810-1F847,1F850-1F859,1F860-1F887,1F890-1F8AD,1F910-1F91E,1F920-1F927,1F930,1F933-1F93E,1F940-1F94B,1F950-1F95E,1F980-1F991,1F9C0@Z:20,A0,1680,2000-200A,2028-2029,202F,205F,3000@"
225
- def self.getCategoriesUnicode()
226
- categoriesUnicode = Hash.new()
227
- categoriesUnicode::set(PUNCTUATION_CATEGORY,"PunctuationUnicodeCategory")
228
- categoriesUnicode::set(LETTER_CATEGORY,"LetterUnicodeCategory")
229
- categoriesUnicode::set(MARK_CATEGORY,"MarkUnicodeCategory")
230
- categoriesUnicode::set(NUMBER_CATEGORY,"NumberUnicodeCategory")
231
- categoriesUnicode::set(SYMBOL_CATEGORY,"SymbolUnicodeCategory")
232
- categoriesUnicode::set(SEPARATOR_CATEGORY,"SeparatorUnicodeCategory")
233
- categoriesUnicode::set(OTHER_CATEGORY,"OtherUnicodeCategory")
234
- return categoriesUnicode
235
- end
236
- def self.getUnicodeCategoryList(category)
237
- indexStart = UNICODES_WITH_CATEGORIES::indexOf(("@"+category)+":")
238
- unicodes = Std::substr(UNICODES_WITH_CATEGORIES,indexStart+3)
239
- indexEnd = unicodes::indexOf("@")
240
- unicodes = Std::substr(unicodes,0,indexEnd)
241
- inputList = Std::split(unicodes,",")
242
- unicodeList = Array.new()
243
- i = 0
244
- while i<inputList::length()
245
- actual_range = inputList::_(i)
246
- if actual_range::indexOf("-")!=-1
247
- firstRangeValueHex = hexStringToUnicode(Std::split(actual_range,"-")::_(0))
248
- lastRangeValueHex = hexStringToUnicode(Std::split(actual_range,"-")::_(1))
249
- actualValue = firstRangeValueHex
250
- while actualValue<=lastRangeValueHex
251
- unicodeList::push(Utf8::uchr(actualValue))
252
- actualValue+=1
253
- end
254
- else
255
- actualValue = hexStringToUnicode(actual_range)
256
- unicodeList::push(Utf8::uchr(actualValue))
257
- end
258
- i+=1
259
- end
260
- return unicodeList
261
- end
262
- def self.hexStringToUnicode(unicode)
263
- return Std::parseInt("0x"+unicode)
264
- end
265
- @@invisible = [8289, 8290, 8291]
266
- def self.invisible
267
- @@invisible
268
- end
269
- def self.invisible=(invisible)
270
- @@invisible = invisible
271
- end
272
- def self.getMirror(str)
273
- mirroredStr = ""
274
- i = 0
275
- while i<str::length()
276
- c = Std::charCodeAt(str,i)
277
- j = 0
278
- while j<WCharacterBase::mirrorDictionary::length
279
- if c==WCharacterBase::mirrorDictionary[j]
280
- c = WCharacterBase::mirrorDictionary[j + 1]
281
- break
282
- end
283
- j+=2
284
- end
285
- mirroredStr+=Std::fromCharCode(c)
286
- i+=1
287
- end
288
- return mirroredStr
289
- end
290
- def self.isStretchyLTR(c)
291
- i = 0
292
- while i<WCharacterBase::horizontalLTRStretchyChars::length
293
- if c==WCharacterBase::horizontalLTRStretchyChars[i]
294
- return true
295
- end
296
- i+=1
297
- end
298
- return false
299
- end
300
- def self.getNegated(c)
301
- i = 0
302
- while i<WCharacterBase::negations::length
303
- if WCharacterBase::negations[i]==c
304
- return WCharacterBase::negations[i + 1]
305
- end
306
- i+=2
307
- end
308
- return -1
309
- end
310
- def self.getNotNegated(c)
311
- i = 1
312
- while i<WCharacterBase::negations::length
313
- if WCharacterBase::negations[i]==c
314
- return WCharacterBase::negations[i - 1]
315
- end
316
- i+=2
317
- end
318
- return -1
319
- end
320
- def self.isLetter(c)
321
- if isDigit(c)
322
- return false
323
- end
324
- if (65<=c)&&(c<=90)
325
- return true
326
- end
327
- if (97<=c)&&(c<=122)
328
- return true
329
- end
330
- if (((192<=c)&&(c<=696))&&(c!=215))&&(c!=247)
331
- return true
332
- end
333
- if (867<=c)&&(c<=1521)
334
- return true
335
- end
336
- if (1552<=c)&&(c<=8188)
337
- return true
338
- end
339
- if ((((c==8472)||(c==8467))||isDoubleStruck(c))||isFraktur(c))||isScript(c)
340
- return true
341
- end
342
- if isChinese(c)
343
- return true
344
- end
345
- if isKorean(c)
346
- return true
347
- end
348
- return false
349
- end
350
- def self.isUnicodeMathvariant(c)
351
- return ((isDoubleStruck(c)||isFraktur(c))||isScript(c))
352
- end
353
- def self.isRequiredByQuizzes(c)
354
- return ((((((((c==120128)||(c==8450))||(c==8461))||(c==8469))||(c==8473))||(c==8474))||(c==8477))||(c==8484))
355
- end
356
- def self.isDoubleStruck(c)
357
- return (((((((((c>=120120)&&(c<=120171))||(c==8450))||(c==8461))||(c==8469))||(c==8473))||(c==8474))||(c==8477))||(c==8484))
358
- end
359
- def self.isFraktur(c)
360
- return (((((((c>=120068)&&(c<=120119))||(c==8493))||(c==8460))||(c==8465))||(c==8476))||(c==8488))
361
- end
362
- def self.isScript(c)
363
- return (((((((((((((c>=119964)&&(c<=120015))||(c==8458))||(c==8459))||(c==8466))||(c==8464))||(c==8499))||(c==8500))||(c==8492))||(c==8495))||(c==8496))||(c==8497))||(c==8475))
364
- end
365
- def self.isLowerCase(c)
366
- return (((((c>=97)&&(c<=122))||((c>=224)&&(c<=255)))||((c>=591)&&(c>=659)))||((c>=661)&&(c<=687)))||((c>=940)&&(c<=974))
367
- end
368
- def self.isWord(c)
369
- if ((((isDevanagari(c)||isChinese(c))||isHebrew(c))||isThai(c))||isGujarati(c))||isKorean(c)
370
- return true
371
- end
372
- return false
373
- end
374
- def self.isArabianString(s)
375
- i = s::length()-1
376
- while i>=0
377
- if !isArabian(Std::charCodeAt(s,i))
378
- return false
379
- end
380
- i-=1
381
- end
382
- return true
383
- end
384
- def self.isArabian(c)
385
- if ((c>=1536)&&(c<=1791))&&!WCharacterBase::isDigit(c)
386
- return true
387
- end
388
- return false
389
- end
390
- def self.isHebrew(c)
391
- if (c>=1424)&&(c<=1535)
392
- return true
393
- end
394
- return false
395
- end
396
- def self.isChinese(c)
397
- if (c>=13312)&&(c<=40959)
398
- return true
399
- end
400
- return false
401
- end
402
- def self.isKorean(c)
403
- if (c>=12593)&&(c<=52044)
404
- return true
405
- end
406
- return false
407
- end
408
- def self.isGreek(c)
409
- if (c>=945)&&(c<=969)
410
- return true
411
- else
412
- if ((c>=913)&&(c<=937))&&(c!=930)
413
- return true
414
- else
415
- if ((c==977)||(c==981))||(c==982)
6
+ def initialize()
7
+ super()
8
+ end
9
+ NEGATIVE_THIN_SPACE = 57344
10
+ LINE = 57345
11
+ SEGMENT = 57346
12
+ ALIGNMENT_MARK = 57358
13
+ ROOT = 61696
14
+ ROOT_VERTICAL = 61727
15
+ ROOT_NO_TAIL = 61728
16
+ ROOT_NO_TAIL_VERTICAL = 61759
17
+ ROOT_LEFT_TAIL = 61760
18
+ ROOT_VERTICAL_LINE = 61761
19
+ LINE_FEED = 10
20
+ ROUND_BRACKET_LEFT = 40
21
+ ROUND_BRACKET_RIGHT = 41
22
+ COMMA = 44
23
+ FULL_STOP = 46
24
+ SQUARE_BRACKET_LEFT = 91
25
+ SQUARE_BRACKET_RIGHT = 93
26
+ CIRCUMFLEX_ACCENT = 94
27
+ LOW_LINE = 95
28
+ CURLY_BRACKET_LEFT = 123
29
+ VERTICAL_BAR = 124
30
+ CURLY_BRACKET_RIGHT = 125
31
+ TILDE = 126
32
+ MACRON = 175
33
+ COMBINING_LOW_LINE = 818
34
+ MODIFIER_LETTER_CIRCUMFLEX_ACCENT = 710
35
+ CARON = 711
36
+ NO_BREAK_SPACE = 160
37
+ EN_QUAD = 8192
38
+ EM_QUAD = 8193
39
+ EN_SPACE = 8194
40
+ EM_SPACE = 8195
41
+ THICK_SPACE = 8196
42
+ MID_SPACE = 8197
43
+ SIX_PER_EM_SPACE = 8198
44
+ FIGIRE_SPACE = 8199
45
+ PUNCTUATION_SPACE = 8200
46
+ THIN_SPACE = 8201
47
+ HAIR_SPACE = 8202
48
+ ZERO_WIDTH_SPACE = 8203
49
+ ZERO_WIDTH_NON_JOINER = 8204
50
+ ZERO_WIDTH_JOINER = 8205
51
+ DOUBLE_VERTICAL_BAR = 8214
52
+ DOUBLE_HORIZONTAL_BAR = 9552
53
+ NARROW_NO_BREAK_SPACE = 8239
54
+ MEDIUM_MATHEMATICAL_SPACE = 8287
55
+ WORD_JOINER = 8288
56
+ PLANCKOVER2PI = 8463
57
+ LEFTWARDS_ARROW = 8592
58
+ UPWARDS_ARROW = 8593
59
+ RIGHTWARDS_ARROW = 8594
60
+ DOWNWARDS_ARROW = 8595
61
+ LEFTRIGHT_ARROW = 8596
62
+ UP_DOWN_ARROW = 8597
63
+ LEFTWARDS_ARROW_FROM_BAR = 8612
64
+ RIGHTWARDS_ARROW_FROM_BAR = 8614
65
+ LEFTWARDS_ARROW_WITH_HOOK = 8617
66
+ RIGHTWARDS_ARROW_WITH_HOOK = 8618
67
+ LEFTWARDS_HARPOON_WITH_BARB_UPWARDS = 8636
68
+ RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS = 8640
69
+ LEFTWARDS_DOUBLE_ARROW = 8656
70
+ RIGHTWARDS_DOUBLE_ARROW = 8658
71
+ LEFT_RIGHT_DOUBLE_ARROW = 8660
72
+ LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW = 8646
73
+ RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW = 8644
74
+ LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON = 8651
75
+ RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON = 8652
76
+ RIGHTWARDS_ARROW_ABOVE_SHORT_LEFTWARDS_ARROW = 10562
77
+ SHORT_RIGHTWARDS_ARROW_ABOVE_LEFTWARDS_ARROW = 10564
78
+ LONG_RIGHTWARDS_ARROW = 10230
79
+ LONG_LEFTWARDS_ARROW = 10229
80
+ LONG_LEFT_RIGHT_ARROW = 10231
81
+ LONG_LEFTWARDS_DOUBLE_ARROW = 10232
82
+ LONG_RIGHTWARDS_DOUBLE_ARROW = 10233
83
+ LONG_LEFT_RIGHT_DOUBLE_ARROW = 10234
84
+ INTEGRAL = 8747
85
+ TOP_HALF_INTEGRAL = 8992
86
+ BOTTOM_HALF_INTEGRAL = 8993
87
+ INTEGRAL_EXTENSION = 9134
88
+ VERTICAL_LINE_EXTENSION = 9168
89
+ TILDE_OPERATOR = 8764
90
+ LEFT_CEILING = 8968
91
+ RIGHT_CEILING = 8969
92
+ LEFT_FLOOR = 8970
93
+ RIGHT_FLOOR = 8971
94
+ TOP_PARENTHESIS = 9180
95
+ BOTTOM_PARENTHESIS = 9181
96
+ TOP_SQUARE_BRACKET = 9140
97
+ BOTTOM_SQUARE_BRACKET = 9141
98
+ TOP_CURLY_BRACKET = 9182
99
+ BOTTOM_CURLY_BRACKET = 9183
100
+ MATHEMATICAL_LEFT_ANGLE_BRACKET = 10216
101
+ MATHEMATICAL_RIGHT_ANGLE_BRACKET = 10217
102
+ DOUBLE_STRUCK_ITALIC_CAPITAL_D = 8517
103
+ DOUBLE_STRUCK_ITALIC_SMALL_D = 8518
104
+ DOUBLE_STRUCK_ITALIC_SMALL_E = 8519
105
+ DOUBLE_STRUCK_ITALIC_SMALL_I = 8520
106
+ EPSILON = 949
107
+ VAREPSILON = 1013
108
+ DIGIT_ZERO = 48
109
+ DIGIT_NINE = 57
110
+ LATIN_CAPITAL_LETTER_A = 65
111
+ LATIN_CAPITAL_LETTER_Z = 90
112
+ LATIN_SMALL_LETTER_A = 97
113
+ LATIN_SMALL_LETTER_Z = 122
114
+ MATHEMATICAL_SCRIPT_CAPITAL_A = 119964
115
+ MATHEMATICAL_SCRIPT_SMALL_A = 119990
116
+ MATHEMATICAL_FRAKTUR_CAPITAL_A = 120068
117
+ MATHEMATICAL_FRAKTUR_SMALL_A = 120094
118
+ MATHEMATICAL_DOUBLE_STRUCK_CAPITAL_A = 120120
119
+ MATHEMATICAL_DOUBLE_STRUCK_SMALL_A = 120146
120
+ MATHEMATICAL_DOUBLE_STRUCK_DIGIT_ZERO = 120792
121
+ MIDDLE_DOT = 183
122
+ DOT_ABOVE = 729
123
+ ARABIC_DECIMAL_SEPARATOR = 1643
124
+ ARABIC_THOUSANDS_SEPARATOR = 1644
125
+ ALIGNMENT_RELATION_OPERATORS = [61, 8801, 8764, 8776, 8771, 8773, 8800, 8802, 8769, 62, 60, 8805, 8804, 10878, 10877, 10887, 10888, 8810, 8811, 8733, 8826, 8827, 8882, 8883]
126
+ def self.isDigit(c)
127
+ if (48 <= c) && (c <= 57)
128
+ return true
129
+ end
130
+ if (1632 <= c) && (c <= 1641)
131
+ return true
132
+ end
133
+ if (1776 <= c) && (c <= 1785)
134
+ return true
135
+ end
136
+ if (2790 <= c) && (c <= 2799)
137
+ return true
138
+ end
139
+ return false
140
+ end
141
+ def self.isIdentifier(c)
142
+ return (WCharacterBase.isLetter(c) || WCharacterBase.isCombiningCharacter(c)) || (c == 95)
143
+ end
144
+ def self.isLarge(c)
145
+ return WCharacterBase.binarySearch(largeOps,c)
146
+ end
147
+ def self.isVeryLarge(c)
148
+ return WCharacterBase.binarySearch(veryLargeOps,c)
149
+ end
150
+ def self.isBinaryOp(c)
151
+ return WCharacterBase.binarySearch(binaryOps,c)
152
+ end
153
+ def self.isRelation(c)
154
+ return WCharacterBase.binarySearch(relations,c)
155
+ end
156
+ def self.binarySearch(v, c)
157
+ min = 0
158
+ max = v::length - 1
159
+ loop do
160
+ mid = ((min + max)/2)
161
+ cc = v[mid]
162
+ if c == cc
163
+ return true
164
+ else
165
+ if c < cc
166
+ max = mid - 1
167
+ else
168
+ min = mid + 1
169
+ end
170
+ end
171
+ break if not min <= max
172
+ end
173
+ return false
174
+ end
175
+ @@binaryOps;
176
+ def self.binaryOps
177
+ @@binaryOps
178
+ end
179
+ def self.binaryOps=(binaryOps)
180
+ @@binaryOps = binaryOps
181
+ end
182
+ @@relations;
183
+ def self.relations
184
+ @@relations
185
+ end
186
+ def self.relations=(relations)
187
+ @@relations = relations
188
+ end
189
+ @@largeOps;
190
+ def self.largeOps
191
+ @@largeOps
192
+ end
193
+ def self.largeOps=(largeOps)
194
+ @@largeOps = largeOps
195
+ end
196
+ @@veryLargeOps;
197
+ def self.veryLargeOps
198
+ @@veryLargeOps
199
+ end
200
+ def self.veryLargeOps=(veryLargeOps)
201
+ @@veryLargeOps = veryLargeOps
202
+ end
203
+ @@tallLetters;
204
+ def self.tallLetters
205
+ @@tallLetters
206
+ end
207
+ def self.tallLetters=(tallLetters)
208
+ @@tallLetters = tallLetters
209
+ end
210
+ @@longLetters;
211
+ def self.longLetters
212
+ @@longLetters
213
+ end
214
+ def self.longLetters=(longLetters)
215
+ @@longLetters = longLetters
216
+ end
217
+ @@negations;
218
+ def self.negations
219
+ @@negations
220
+ end
221
+ def self.negations=(negations)
222
+ @@negations = negations
223
+ end
224
+ @@mirrorDictionary;
225
+ def self.mirrorDictionary
226
+ @@mirrorDictionary
227
+ end
228
+ def self.mirrorDictionary=(mirrorDictionary)
229
+ @@mirrorDictionary = mirrorDictionary
230
+ end
231
+ @@subSuperScriptDictionary;
232
+ def self.subSuperScriptDictionary
233
+ @@subSuperScriptDictionary
234
+ end
235
+ def self.subSuperScriptDictionary=(subSuperScriptDictionary)
236
+ @@subSuperScriptDictionary = subSuperScriptDictionary
237
+ end
238
+ @@accentsDictionary;
239
+ def self.accentsDictionary
240
+ @@accentsDictionary
241
+ end
242
+ def self.accentsDictionary=(accentsDictionary)
243
+ @@accentsDictionary = accentsDictionary
244
+ end
245
+ def self.initAccentsDictionary()
246
+ if @@accentsDictionary != nil
247
+ return
248
+ end
249
+ h = Hash.new()
250
+ h::set("A",[192, 193, 194, 195, 196, 197, 256, 258, 260, 461, 478, 480, 506, 512, 514, 550, 570, 7680, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862, 9398, 11375, 65313])
251
+ h::set("AA",[42802])
252
+ h::set("AE",[198, 482, 508])
253
+ h::set("AO",[42804])
254
+ h::set("AU",[42806])
255
+ h::set("AV",[42808, 42810])
256
+ h::set("AY",[42812])
257
+ h::set("B",[385, 386, 579, 7682, 7684, 7686, 9399, 65314])
258
+ h::set("C",[199, 262, 264, 266, 268, 391, 571, 7688, 9400, 42814, 65315])
259
+ h::set("D",[208, 270, 272, 393, 394, 395, 7690, 7692, 7694, 7696, 7698, 9401, 42873, 65316])
260
+ h::set("DZ",[452, 497])
261
+ h::set("Dz",[453, 498])
262
+ h::set("E",[200, 201, 202, 203, 274, 276, 278, 280, 282, 398, 400, 516, 518, 552, 7700, 7702, 7704, 7706, 7708, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878, 9402, 65317])
263
+ h::set("F",[401, 7710, 9403, 42875, 65318])
264
+ h::set("G",[284, 286, 288, 290, 403, 484, 486, 500, 7712, 9404, 42877, 42878, 42912, 65319])
265
+ h::set("H",[292, 294, 542, 7714, 7716, 7718, 7720, 7722, 9405, 11367, 11381, 42893, 65320])
266
+ h::set("I",[204, 205, 206, 207, 296, 298, 300, 302, 304, 407, 463, 520, 522, 7724, 7726, 7880, 7882, 9406, 65321])
267
+ h::set("J",[308, 584, 9407, 65322])
268
+ h::set("K",[310, 408, 488, 7728, 7730, 7732, 9408, 11369, 42816, 42818, 42820, 42914, 65323])
269
+ h::set("L",[313, 315, 317, 319, 321, 573, 7734, 7736, 7738, 7740, 9409, 11360, 11362, 42822, 42824, 42880, 65324])
270
+ h::set("LJ",[455])
271
+ h::set("Lj",[456])
272
+ h::set("M",[412, 7742, 7744, 7746, 9410, 11374, 65325])
273
+ h::set("N",[209, 323, 325, 327, 413, 504, 544, 7748, 7750, 7752, 7754, 9411, 42896, 42916, 65326])
274
+ h::set("NJ",[458])
275
+ h::set("Nj",[459])
276
+ h::set("O",[210, 211, 212, 213, 214, 216, 332, 334, 336, 390, 415, 416, 465, 490, 492, 510, 524, 526, 554, 556, 558, 560, 7756, 7758, 7760, 7762, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 9412, 42826, 42828, 65327])
277
+ h::set("OI",[418])
278
+ h::set("OO",[42830])
279
+ h::set("OU",[546])
280
+ h::set("OE",[140, 338])
281
+ h::set("oe",[156, 339])
282
+ h::set("P",[420, 7764, 7766, 9413, 11363, 42832, 42834, 42836, 65328])
283
+ h::set("Q",[586, 9414, 42838, 42840, 65329])
284
+ h::set("R",[340, 342, 344, 528, 530, 588, 7768, 7770, 7772, 7774, 9415, 11364, 42842, 42882, 42918, 65330])
285
+ h::set("S",[346, 348, 350, 352, 536, 7776, 7778, 7780, 7782, 7784, 7838, 9416, 11390, 42884, 42920, 65331])
286
+ h::set("T",[354, 356, 358, 428, 430, 538, 574, 7786, 7788, 7790, 7792, 9417, 42886, 65332])
287
+ h::set("TZ",[42792])
288
+ h::set("U",[217, 218, 219, 220, 360, 362, 364, 366, 368, 370, 431, 467, 469, 471, 473, 475, 532, 534, 580, 7794, 7796, 7798, 7800, 7802, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 9418, 65333])
289
+ h::set("V",[434, 581, 7804, 7806, 9419, 42846, 65334])
290
+ h::set("VY",[42848])
291
+ h::set("W",[372, 7808, 7810, 7812, 7814, 7816, 9420, 11378, 65335])
292
+ h::set("X",[7818, 7820, 9421, 65336])
293
+ h::set("Y",[221, 374, 376, 435, 562, 590, 7822, 7922, 7924, 7926, 7928, 7934, 9422, 65337])
294
+ h::set("Z",[377, 379, 381, 437, 548, 7824, 7826, 7828, 9423, 11371, 11391, 42850, 65338])
295
+ h::set("a",[224, 225, 226, 227, 228, 229, 257, 259, 261, 462, 479, 481, 507, 513, 515, 551, 592, 7681, 7834, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863, 9424, 11365, 65345])
296
+ h::set("aa",[42803])
297
+ h::set("ae",[230, 483, 509])
298
+ h::set("ao",[42805])
299
+ h::set("au",[42807])
300
+ h::set("av",[42809, 42811])
301
+ h::set("ay",[42813])
302
+ h::set("b",[384, 387, 595, 7683, 7685, 7687, 9425, 65346])
303
+ h::set("c",[231, 263, 265, 267, 269, 392, 572, 7689, 8580, 9426, 42815, 65347])
304
+ h::set("d",[271, 273, 396, 598, 599, 7691, 7693, 7695, 7697, 7699, 9427, 42874, 65348])
305
+ h::set("dz",[454, 499])
306
+ h::set("e",[232, 233, 234, 235, 275, 277, 279, 281, 283, 477, 517, 519, 553, 583, 603, 7701, 7703, 7705, 7707, 7709, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 9428, 65349])
307
+ h::set("f",[402, 7711, 9429, 42876, 65350])
308
+ h::set("g",[285, 287, 289, 291, 485, 487, 501, 608, 7545, 7713, 9430, 42879, 42913, 65351])
309
+ h::set("h",[293, 295, 543, 613, 7715, 7717, 7719, 7721, 7723, 7830, 9431, 11368, 11382, 65352])
310
+ h::set("hv",[405])
311
+ h::set("i",[236, 237, 238, 239, 297, 299, 301, 303, 305, 464, 521, 523, 616, 7725, 7727, 7881, 7883, 9432, 65353])
312
+ h::set("j",[309, 496, 585, 9433, 65354])
313
+ h::set("k",[311, 409, 489, 7729, 7731, 7733, 9434, 11370, 42817, 42819, 42821, 42915, 65355])
314
+ h::set("l",[314, 316, 318, 320, 322, 383, 410, 619, 7735, 7737, 7739, 7741, 9435, 11361, 42823, 42825, 42881, 65356])
315
+ h::set("lj",[457])
316
+ h::set("m",[623, 625, 7743, 7745, 7747, 9436, 65357])
317
+ h::set("n",[241, 324, 326, 328, 329, 414, 505, 626, 7749, 7751, 7753, 7755, 9437, 42897, 42917, 65358])
318
+ h::set("nj",[460])
319
+ h::set("o",[242, 243, 244, 245, 246, 248, 333, 335, 337, 417, 466, 491, 493, 511, 525, 527, 555, 557, 559, 561, 596, 629, 7757, 7759, 7761, 7763, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 9438, 42827, 42829, 65359])
320
+ h::set("oi",[419])
321
+ h::set("ou",[547])
322
+ h::set("oo",[42831])
323
+ h::set("p",[421, 7549, 7765, 7767, 9439, 42833, 42835, 42837, 65360])
324
+ h::set("q",[587, 9440, 42839, 42841, 65361])
325
+ h::set("r",[341, 343, 345, 529, 531, 589, 637, 7769, 7771, 7773, 7775, 9441, 42843, 42883, 42919, 65362])
326
+ h::set("s",[223, 347, 349, 351, 353, 537, 575, 7777, 7779, 7781, 7783, 7785, 7835, 9442, 42885, 42921, 65363])
327
+ h::set("t",[355, 357, 359, 429, 539, 648, 7787, 7789, 7791, 7793, 7831, 9443, 11366, 42887, 65364])
328
+ h::set("tz",[42793])
329
+ h::set("u",[249, 250, 251, 252, 361, 363, 365, 367, 369, 371, 432, 468, 470, 472, 474, 476, 533, 535, 649, 7795, 7797, 7799, 7801, 7803, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 9444, 65365])
330
+ h::set("v",[651, 652, 7805, 7807, 9445, 42847, 65366])
331
+ h::set("vy",[42849])
332
+ h::set("w",[373, 7809, 7811, 7813, 7815, 7817, 7832, 9446, 11379, 65367])
333
+ h::set("x",[7819, 7821, 9447, 65368])
334
+ h::set("y",[253, 255, 375, 436, 563, 591, 7823, 7833, 7923, 7925, 7927, 7929, 7935, 9448, 65369])
335
+ h::set("z",[378, 380, 382, 438, 549, 576, 7825, 7827, 7829, 9449, 11372, 42851, 65370])
336
+ @@accentsDictionary = h
337
+ end
338
+ @@horizontalLTRStretchyChars;
339
+ def self.horizontalLTRStretchyChars
340
+ @@horizontalLTRStretchyChars
341
+ end
342
+ def self.horizontalLTRStretchyChars=(horizontalLTRStretchyChars)
343
+ @@horizontalLTRStretchyChars = horizontalLTRStretchyChars
344
+ end
345
+ @@tallAccents;
346
+ def self.tallAccents
347
+ @@tallAccents
348
+ end
349
+ def self.tallAccents=(tallAccents)
350
+ @@tallAccents = tallAccents
351
+ end
352
+ PUNCTUATION_CATEGORY = "P"
353
+ OTHER_CATEGORY = "C"
354
+ LETTER_CATEGORY = "L"
355
+ MARK_CATEGORY = "M"
356
+ NUMBER_CATEGORY = "N"
357
+ SYMBOL_CATEGORY = "S"
358
+ PHONETICAL_CATEGORY = "F"
359
+ UNICODES_WITH_CATEGORIES = "@P:21-23,25-2A,2C-2F,3A-3B,3F-40,5B-5D,5F,7B,7D,A1,A7,AB,B6-B7,BB,BF,37E,387,55A-55F,589-58A,5BE,5C0,5C3,5C6,5F3-5F4,609-60A,60C-60D,61B,61E-61F,66A-66D,6D4,E4F,E5A-E5B,2010-2022,2025-2026,2030-203E,2040,2043,2047,204E-2051,2057,205E,2308-230B,2329-232A,2772-2773,27C5-27C6,27E6-27EF,2983-2998,29D8-29DB,29FC-29FD,2E17,3030,FD3E-FD3F@C:AD,600-603,6DD,200B-200F,202A-202E,206A-206F@L:41-5A,61-7A,AA,B5,BA,C0-D6,D8-F6,F8-2C1,2C6-2D1,2E0-2E4,2EC,2EE,370-374,376-377,37A-37D,386,388-38A,38C,38E-3A1,3A3-3F5,3F7-481,48A-527,531-556,559,561-587,5D0-5EA,5F0-5F2,620-64A,66E-66F,671-6D3,6D5,6E5-6E6,6EE-6EF,6FA-6FC,6FF,750-77F,E01-E30,E32-E33,E40-E46,1D00-1DBF,1E00-1F15,1F18-1F1D,1F20-1F45,1F48-1F4D,1F50-1F57,1F59,1F5B,1F5D,1F5F-1F7D,1F80-1FB4,1FB6-1FBC,1FBE,1FC2-1FC4,1FC6-1FCC,1FD0-1FD3,1FD6-1FDB,1FE0-1FEC,1FF2-1FF4,1FF6-1FFC,207F,2090-2094,2102,2107,210A-2113,2115,2119-211D,2124,2126,2128,212B-212D,212F-2138,213C-213F,2145-2149,214E,2184,2C60-2C7F,306E,A717-A71F,A727,A788,A78B-A78C,A792,FB00-FB04,FB13-FB17,FB1D,FB1F-FB28,FB2A-FB36,FB38-FB3C,FB3E,FB40-FB41,FB43-FB44,FB46-FBB1,FBD3-FBE9,FBFC-FBFF,FC5E-FC63,FC6A,FC6D,FC70,FC73,FC91,FC94,FDF2,FE70-FE74,FE76-FEFC,1D400-1D454,1D456-1D49C,1D49E-1D49F,1D4A2,1D4A5-1D4A6,1D4A9-1D4AC,1D4AE-1D4B9,1D4BB,1D4BD-1D4C3,1D4C5-1D505,1D507-1D50A,1D50D-1D514,1D516-1D51C,1D51E-1D539,1D53B-1D53E,1D540-1D544,1D546,1D54A-1D550,1D552-1D6A5,1D6A8-1D6C0,1D6C2-1D6DA,1D6DC-1D6FA,1D6FC-1D714,1D716-1D734,1D736-1D74E,1D750-1D76E,1D770-1D788,1D78A-1D7A8,1D7AA-1D7C2,1D7C4-1D7C9@M:300-36F,483-489,591-5BD,5BF,5C1-5C2,5C4-5C5,5C7,610-61A,64B-65F,670,6D6-6DC,6DF-6E4,6E7-6E8,6EA-6ED,E31,E34-E3A,E47-E4E,1DC0-1DC1,1DC3,1DCA,1DFE-1DFF,20D0-20D2,20D6-20D7,20DB-20DF,20E1,20E4-20F0,FB1E,FE20-FE23@N:30-39,B2-B3,B9,BC-BE,660-669,6F0-6F9,E50-E59,2070,2074-2079,2080-2089,2153-215E,2460-2468,24EA,2780-2793,1D7CE-1D7FF@S:24,2B,3C-3E,5E,60,7C,7E,A2-A6,A8-A9,AC,AE-B1,B4,B8,D7,F7,2C2-2C5,2D2-2DF,2E5-2EB,2ED,2EF-2FF,375,384-385,3F6,482,58F,606-608,60B,60E-60F,6DE,6E9,6FD-6FE,E3F,1FBD,1FBF-1FC1,1FCD-1FCF,1FDD-1FDF,1FED-1FEF,1FFD-1FFE,2044,2052,20A0-20BA,2105,2116-2118,211E,2120,2122,2125,2127,2129,212E,2140-2144,214A-214B,214D,2190-21EA,21F4-2300,2302,2305-2306,230C-2313,2315-231A,231C-2323,232C-232E,2332,2336,233D,233F-2340,2353,2370,237C,2393-2394,23AF,23B4-23B6,23CE,23D0,23DC-23E7,2423,24B6-24E9,2500,2502,2506,2508,250A,250C,2510,2514,2518,251C,2524,252C,2534,253C,2550-256C,2571-2572,2580,2584,2588,258C,2590-2593,25A0-25FF,2605-2606,2609,260C,260E,2612,2621,2639-2644,2646-2649,2660-2667,2669-266B,266D-266F,267E,2680-2689,26A0,26A5,26AA-26AC,26B2,26E2,2702,2709,2713,2720,272A,2736,273D,279B,27C0-27C4,27C7-27C9,27CB-27CD,27D0-27E5,27F0-27FF,2900-2982,2999-29D7,29DC-29FB,29FE-2AFF,2B12-2B4C,2B50-2B54,3012,A720-A721,A789-A78A,FB29,FBB2-FBC1,FDFC,FFFC-FFFD,1D6C1,1D6DB,1D6FB,1D715,1D735,1D74F,1D76F,1D789,1D7A9,1D7C3@F:70,62,74,64,288,256,63,25F,6B,261,71,262,294,6D,271,6E,273,272,14B,274,72,280,27E,27D,278,3B2,66,76,3B8,F0,73,7A,283,292,282,290,E7,29D,78,263,3C7,281,127,295,68,266,26C,26E,28B,279,27B,6A,270,6C,26D,28E,29F,1A5,253,1AD,257,188,284,199,260,2A0,29B,28D,77,265,29C,2A1-2A2,267,298,1C0,1C3,1C2,1C1,27A,255,291,2C71,287,297,296,286,293,27C,2E2,1AB,26B,67,2A6,2A3,2A7,2A4,2A8,2A5,1DBF,1D4A,1D91,1BB,29E,2E3,19E,19B,3BB,17E,161,1F0,10D,69,65,25B,61,251,254,6F,75,79,F8,153,276,252,28C,264,26F,268,289,26A,28F,28A,259,275,250,E6,25C,25A,131,25E,29A,258,277,269,2BC,325,30A,32C,2B0,324,330,33C,32A,33A-33B,339,31C,31F-320,308,33D,318-319,2DE,2B7,2B2,2E0,2E4,303,207F,2E1,31A,334,31D,2D4,31E,2D5,329,32F,361,35C,322,2F9,2C,2BB,307,2D7,2D6,2B8,323,321,32B,2C8,2CC,2D0-2D1,306,2E,7C,2016,203F,2197-2198,30B,301,304,300,30F,A71B-A71C,2E5-2E9,30C,302,1DC4-1DC5,1DC8,311,2C7,2C6,316,2CE,317,2CF,2AD,2A9-2AB,274D,2A,56,46,57,43,4C,4A,152,398,1D191,1D18F,31-33,346,34D,34A-34C,348-349,5C,34E,2193,2191,2EC,1DB9,362,347,2B6,2ED,2F1-2F2,2F7,41-42,44-45,47-49,4B,4D-55,58-5B,5D,2F,28-29,7B,7D@"
360
+ def self.getCategoriesUnicode()
361
+ categoriesUnicode = Hash.new()
362
+ categoriesUnicode::set(SYMBOL_CATEGORY,"SymbolUnicodeCategory")
363
+ categoriesUnicode::set(PUNCTUATION_CATEGORY,"PunctuationUnicodeCategory")
364
+ categoriesUnicode::set(LETTER_CATEGORY,"LetterUnicodeCategory")
365
+ categoriesUnicode::set(MARK_CATEGORY,"MarkUnicodeCategory")
366
+ categoriesUnicode::set(NUMBER_CATEGORY,"NumberUnicodeCategory")
367
+ categoriesUnicode::set(PHONETICAL_CATEGORY,"PhoneticalUnicodeCategory")
368
+ categoriesUnicode::set(OTHER_CATEGORY,"OtherUnicodeCategory")
369
+ return categoriesUnicode
370
+ end
371
+ def self.getUnicodeCategoryList(category)
372
+ indexStart = UNICODES_WITH_CATEGORIES::indexOf(("@" + category) + ":")
373
+ unicodes = Std::substr(UNICODES_WITH_CATEGORIES,indexStart + 3)
374
+ indexEnd = unicodes::indexOf("@")
375
+ unicodes = Std::substr(unicodes,0,indexEnd)
376
+ return WCharacterBase.getUnicodesRangedStringList(unicodes)
377
+ end
378
+ def self.getUnicodesRangedStringList(unicodesRangedList)
379
+ inputList = Std::split(unicodesRangedList,",")
380
+ unicodeList = Array.new()
381
+ i = 0
382
+ while i < inputList::length()
383
+ actual_range = inputList::_(i)
384
+ actual_range = StringTools::replace(actual_range," ","")
385
+ if actual_range::indexOf("-") != -1
386
+ firstRangeValueHex = WCharacterBase.hexStringToUnicode(Std::split(actual_range,"-")::_(0))
387
+ lastRangeValueHex = WCharacterBase.hexStringToUnicode(Std::split(actual_range,"-")::_(1))
388
+ actualValue = firstRangeValueHex
389
+ while actualValue <= lastRangeValueHex
390
+ unicodeList::push(Utf8::uchr(actualValue))
391
+ actualValue+=1
392
+ end
393
+ else
394
+ actualValue = WCharacterBase.hexStringToUnicode(actual_range)
395
+ unicodeList::push(Utf8::uchr(actualValue))
396
+ end
397
+ i+=1
398
+ end
399
+ return unicodeList
400
+ end
401
+ def self.hexStringToUnicode(unicode)
402
+ return Std::parseInt("0x" + unicode)
403
+ end
404
+ @@invisible;
405
+ def self.invisible
406
+ @@invisible
407
+ end
408
+ def self.invisible=(invisible)
409
+ @@invisible = invisible
410
+ end
411
+ def self.getMirror(str)
412
+ mirroredStr = ""
413
+ i = 0
414
+ while i < str::length()
415
+ c = Std::charCodeAt(str,i)
416
+ j = 0
417
+ while j < WCharacterBase::mirrorDictionary::length
418
+ if c == WCharacterBase::mirrorDictionary[j]
419
+ c = WCharacterBase::mirrorDictionary[j + 1]
420
+ break
421
+ end
422
+ j += 2
423
+ end
424
+ mirroredStr += Std::fromCharCode(c)
425
+ i+=1
426
+ end
427
+ return mirroredStr
428
+ end
429
+ def self.isStretchyLTR(c)
430
+ i = 0
431
+ while i < WCharacterBase::horizontalLTRStretchyChars::length
432
+ if c == WCharacterBase::horizontalLTRStretchyChars[i]
433
+ return true
434
+ end
435
+ i+=1
436
+ end
437
+ return false
438
+ end
439
+ def self.getNegated(c)
440
+ i = 0
441
+ while i < WCharacterBase::negations::length
442
+ if WCharacterBase::negations[i] == c
443
+ return WCharacterBase::negations[i + 1]
444
+ end
445
+ i += 2
446
+ end
447
+ return -1
448
+ end
449
+ def self.getNotNegated(c)
450
+ i = 1
451
+ while i < WCharacterBase::negations::length
452
+ if WCharacterBase::negations[i] == c
453
+ return WCharacterBase::negations[i - 1]
454
+ end
455
+ i += 2
456
+ end
457
+ return -1
458
+ end
459
+ def self.isCombining(s)
460
+ it = Utf8::getIterator(s)
461
+ while it::hasNext()
462
+ if !WCharacterBase::isCombiningCharacter(it::next())
463
+ return false
464
+ end
465
+ end
416
466
  return true
417
- end
418
467
  end
419
- end
420
- return false
421
- end
422
- def self.isDevanagari(c)
423
- if (c>=2304)&&(c<2431)
424
- return true
425
- end
426
- return false
427
- end
428
- def self.isGujarati(c)
429
- if (((c>=2689)&&(c<2788))||(c==2800))||(c==2801)
430
- return true
431
- end
432
- return false
433
- end
434
- def self.isThai(c)
435
- if (3585<=c)&&(c<3676)
436
- return true
437
- end
438
- return false
439
- end
440
- def self.isDevanagariString(s)
441
- i = s::length()-1
442
- while i>=0
443
- if !isDevanagari(Std::charCodeAt(s,i))
444
- return false
445
- end
446
- i-=1
447
- end
448
- return true
449
- end
450
- def self.isRTL(c)
451
- if isHebrew(c)||isArabian(c)
452
- return true
453
- end
454
- return false
455
- end
456
- def self.isTallLetter(c)
457
- if ((97<=c)&&(c<=122))||((945<=c)&&(c<=969))
458
- return (WCharacterBase::binarySearch(@@tallLetters,c))
459
- end
460
- return true
461
- end
462
- def self.isLongLetter(c)
463
- if ((97<=c)&&(c<=122))||((945<=c)&&(c<=969))
464
- return (WCharacterBase::binarySearch(@@longLetters,c))
465
- else
466
- if (65<=c)&&(c<=90)
467
- return false
468
- end
469
- end
470
- return true
471
- end
472
- def self.isInvisible(c)
473
- return binarySearch(@@invisible,c)
474
- end
475
- @@horizontalOperators = [175, 818, 8592, 8594, 8596, 8612, 8614, 8617, 8618, 8636, 8637, 8640, 8641, 8644, 8646, 8651, 8652, 8656, 8658, 8660, 8764, 9140, 9141, 9180, 9181, 9182, 9183, 9552, 10562, 10564, 10602, 10605]
476
- def self.horizontalOperators
477
- @@horizontalOperators
478
- end
479
- def self.horizontalOperators=(horizontalOperators)
480
- @@horizontalOperators = horizontalOperators
481
- end
482
- def self.isHorizontalOperator(c)
483
- return binarySearch(@@horizontalOperators,c)
484
- end
485
- @@latinLetters = "@0065@0066@0067@0068@0069@0070@0071@0072@0073@0074@0075@0076@0077@0078@0079@0080@0081@0082@0083@0084@0085@0086@0087@0088@0089@0090@0097@0098@0099@0100@0101@0102@0103@0104@0105@0106@0107@0108@0109@0110@0111@0112@0113@0114@0115@0116@0117@0118@0119@0120@0121@0122@"
486
- def self.latinLetters
487
- @@latinLetters
488
- end
489
- def self.latinLetters=(latinLetters)
490
- @@latinLetters = latinLetters
491
- end
492
- @@greekLetters = "@0913@0914@0935@0916@0917@0934@0915@0919@0921@0977@0922@0923@0924@0925@0927@0928@0920@0929@0931@0932@0933@0962@0937@0926@0936@0918@0945@0946@0967@0948@0949@0966@0947@0951@0953@0966@0954@0955@0956@0957@0959@0960@0952@0961@0963@0964@0965@0982@0969@0958@0968@0950@"
493
- def self.greekLetters
494
- @@greekLetters
495
- end
496
- def self.greekLetters=(greekLetters)
497
- @@greekLetters = greekLetters
498
- end
499
- def self.latin2Greek(l)
500
- index = -1
501
- if l<100
502
- index = WCharacterBase::latinLetters::indexOf(("@00"+l.to_s)+"@")
503
- else
504
- if l<1000
505
- index = WCharacterBase::latinLetters::indexOf(("@0"+l.to_s)+"@")
506
- else
507
- index = WCharacterBase::latinLetters::indexOf(("@"+l.to_s)+"@")
508
- end
509
- end
510
- if index!=-1
511
- s = Std::substr(WCharacterBase::greekLetters,index+1,4)
512
- return Std::parseInt(s)
513
- end
514
- return l
515
- end
516
- def self.greek2Latin(g)
517
- index = -1
518
- if g<100
519
- index = WCharacterBase::greekLetters::indexOf(("@00"+g.to_s)+"@")
520
- else
521
- if g<1000
522
- index = WCharacterBase::greekLetters::indexOf(("@0"+g.to_s)+"@")
523
- else
524
- index = WCharacterBase::greekLetters::indexOf(("@"+g.to_s)+"@")
525
- end
526
- end
527
- if index!=-1
528
- s = Std::substr(WCharacterBase::latinLetters,index+1,4)
529
- return Std::parseInt(s)
530
- end
531
- return g
532
- end
533
- def self.isOp(c)
534
- return (((((isLarge(c)||isVeryLarge(c))||isBinaryOp(c))||isRelation(c))||(c==Std::charCodeAt(".",0)))||(c==Std::charCodeAt(",",0)))||(c==Std::charCodeAt(":",0))
535
- end
536
- def self.isTallAccent(c)
537
- i = 0
538
- while i<WCharacterBase::tallAccents::length
539
- if c==WCharacterBase::tallAccents[i]
540
- return true
541
- end
542
- i+=1
543
- end
544
- return false
545
- end
546
- def self.isDisplayedWithStix(c)
547
- if (c>=592)&&(c<=687)
548
- return true
549
- end
550
- if (c>=688)&&(c<=767)
551
- return true
552
- end
553
- if ((c>=8215)&&(c<=8233))||((c>=8241)&&(c<=8303))
554
- return true
555
- end
556
- if (c>=8304)&&(c<=8351)
557
- return true
558
- end
559
- if (c>=8400)&&(c<=8447)
560
- return true
561
- end
562
- if (c>=8448)&&(c<=8527)
563
- return true
564
- end
565
- if (c>=8528)&&(c<=8591)
566
- return true
567
- end
568
- if (c>=8592)&&(c<=8703)
569
- return true
570
- end
571
- if (c>=8704)&&(c<=8959)
572
- return true
573
- end
574
- if (c>=8960)&&(c<=9215)
575
- return true
576
- end
577
- if (c>=9312)&&(c<=9471)
578
- return true
579
- end
580
- if (c>=9472)&&(c<=9599)
581
- return true
582
- end
583
- if (c>=9600)&&(c<=9631)
584
- return true
585
- end
586
- if (c>=9632)&&(c<=9727)
587
- return true
588
- end
589
- if (c>=9728)&&(c<=9983)
590
- return true
591
- end
592
- if (c>=9984)&&(c<=10175)
593
- return true
594
- end
595
- if (c>=10176)&&(c<=10223)
596
- return true
597
- end
598
- if (c>=10224)&&(c<=10239)
599
- return true
600
- end
601
- if (c>=10240)&&(c<=10495)
602
- return true
603
- end
604
- if (c>=10496)&&(c<=10623)
605
- return true
606
- end
607
- if (c>=10624)&&(c<=10751)
608
- return true
609
- end
610
- if (c>=10752)&&(c<=11007)
611
- return true
612
- end
613
- if (c>=11008)&&(c<=11263)
614
- return true
615
- end
616
- if (c>=12288)&&(c<=12351)
617
- return true
618
- end
619
- if (c>=57344)&&(c<=65535)
620
- return true
621
- end
622
- if ((c>=119808)&&(c<=119963))||((c>=120224)&&(c<=120831))
623
- return true
624
- end
625
- if ((c==12398)||(c==42791))||(c==42898)
626
- return true
627
- end
628
- return false
629
- end
630
- def self.isSupported(c)
631
- return (((((((((isArabian(c)||isDisplayedWithStix(c))||isGreek(c))||isHorizontalOperator(c))||isInvisible(c))||isLetter(c))||isOp(c))||isStretchyLTR(c))||isTallAccent(c))||isWord(c))
468
+ def self.isCombiningCharacter(c)
469
+ return (((c >= 768) && (c <= 879)) || ((c >= 6832) && (c <= 6911))) || ((((c >= 7616) && (c <= 7679)) && ((c >= 8400) && (c <= 8447))) && ((c >= 65056) && (c <= 65071)))
470
+ end
471
+ def self.isLetter(c)
472
+ if WCharacterBase.isDigit(c)
473
+ return false
474
+ end
475
+ if (65 <= c) && (c <= 90)
476
+ return true
477
+ end
478
+ if (97 <= c) && (c <= 122)
479
+ return true
480
+ end
481
+ if (((192 <= c) && (c <= 696)) && (c != 215)) && (c != 247)
482
+ return true
483
+ end
484
+ if (867 <= c) && (c <= 1521)
485
+ return true
486
+ end
487
+ if (1552 <= c) && (c <= 8188)
488
+ return true
489
+ end
490
+ if ((((c == 8472) || (c == 8467)) || WCharacterBase.isDoubleStruck(c)) || WCharacterBase.isFraktur(c)) || WCharacterBase.isScript(c)
491
+ return true
492
+ end
493
+ if WCharacterBase.isChinese(c)
494
+ return true
495
+ end
496
+ if WCharacterBase.isKorean(c)
497
+ return true
498
+ end
499
+ return false
500
+ end
501
+ def self.isUnicodeMathvariant(c)
502
+ return ((WCharacterBase.isDoubleStruck(c) || WCharacterBase.isFraktur(c)) || WCharacterBase.isScript(c))
503
+ end
504
+ def self.isRequiredByQuizzes(c)
505
+ return ((((((((c == 120128) || (c == 8450)) || (c == 8461)) || (c == 8469)) || (c == 8473)) || (c == 8474)) || (c == 8477)) || (c == 8484))
506
+ end
507
+ def self.isDoubleStruck(c)
508
+ return (((((((((c >= 120120) && (c <= 120171)) || (c == 8450)) || (c == 8461)) || (c == 8469)) || (c == 8473)) || (c == 8474)) || (c == 8477)) || (c == 8484))
509
+ end
510
+ def self.isFraktur(c)
511
+ return (((((((c >= 120068) && (c <= 120119)) || (c == 8493)) || (c == 8460)) || (c == 8465)) || (c == 8476)) || (c == 8488))
512
+ end
513
+ def self.isScript(c)
514
+ return (((((((((((((c >= 119964) && (c <= 120015)) || (c == 8458)) || (c == 8459)) || (c == 8466)) || (c == 8464)) || (c == 8499)) || (c == 8500)) || (c == 8492)) || (c == 8495)) || (c == 8496)) || (c == 8497)) || (c == 8475))
515
+ end
516
+ def self.isLowerCase(c)
517
+ return (((((c >= 97) && (c <= 122)) || ((c >= 224) && (c <= 255))) || ((c >= 591) && (c >= 659))) || ((c >= 661) && (c <= 687))) || ((c >= 940) && (c <= 974))
518
+ end
519
+ def self.isWord(c)
520
+ if ((((WCharacterBase.isDevanagari(c) || WCharacterBase.isChinese(c)) || WCharacterBase.isHebrew(c)) || WCharacterBase.isThai(c)) || WCharacterBase.isGujarati(c)) || WCharacterBase.isKorean(c)
521
+ return true
522
+ end
523
+ return false
524
+ end
525
+ def self.isArabianString(s)
526
+ i = s::length() - 1
527
+ while i >= 0
528
+ if !WCharacterBase.isArabian(Std::charCodeAt(s,i))
529
+ return false
530
+ end
531
+ i-=1
532
+ end
533
+ return true
534
+ end
535
+ def self.isArabian(c)
536
+ if ((c >= 1536) && (c <= 1791)) && !WCharacterBase::isDigit(c)
537
+ return true
538
+ end
539
+ return false
540
+ end
541
+ def self.isHebrew(c)
542
+ if (c >= 1424) && (c <= 1535)
543
+ return true
544
+ end
545
+ return false
546
+ end
547
+ def self.isChinese(c)
548
+ if (c >= 13312) && (c <= 40959)
549
+ return true
550
+ end
551
+ return false
552
+ end
553
+ def self.isKorean(c)
554
+ if (c >= 12593) && (c <= 52044)
555
+ return true
556
+ end
557
+ return false
558
+ end
559
+ def self.isGreek(c)
560
+ if (c >= 945) && (c <= 969)
561
+ return true
562
+ else
563
+ if ((c >= 913) && (c <= 937)) && (c != 930)
564
+ return true
565
+ else
566
+ if ((c == 977) || (c == 981)) || (c == 982)
567
+ return true
568
+ end
569
+ end
570
+ end
571
+ return false
572
+ end
573
+ def self.isDevanagari(c)
574
+ if (c >= 2304) && (c < 2431)
575
+ return true
576
+ end
577
+ return false
578
+ end
579
+ def self.isGujarati(c)
580
+ if (((c >= 2689) && (c < 2788)) || (c == 2800)) || (c == 2801)
581
+ return true
582
+ end
583
+ return false
584
+ end
585
+ def self.isThai(c)
586
+ if (3585 <= c) && (c < 3676)
587
+ return true
588
+ end
589
+ return false
590
+ end
591
+ def self.isDevanagariString(s)
592
+ i = s::length() - 1
593
+ while i >= 0
594
+ if !WCharacterBase.isDevanagari(Std::charCodeAt(s,i))
595
+ return false
596
+ end
597
+ i-=1
598
+ end
599
+ return true
600
+ end
601
+ def self.isRTL(c)
602
+ if WCharacterBase.isHebrew(c) || WCharacterBase.isArabian(c)
603
+ return true
604
+ end
605
+ return false
606
+ end
607
+ def self.isTallLetter(c)
608
+ if ((97 <= c) && (c <= 122)) || ((945 <= c) && (c <= 969))
609
+ return (WCharacterBase::binarySearch(@@tallLetters,c))
610
+ end
611
+ return true
612
+ end
613
+ def self.isLongLetter(c)
614
+ if ((97 <= c) && (c <= 122)) || ((945 <= c) && (c <= 969))
615
+ return (WCharacterBase::binarySearch(@@longLetters,c))
616
+ else
617
+ if (65 <= c) && (c <= 90)
618
+ return false
619
+ end
620
+ end
621
+ return true
622
+ end
623
+ def self.isLTRNumber(text)
624
+ i = 0
625
+ n = Utf8::getLength(text)
626
+ while i < n
627
+ if !WCharacterBase::isDigit(Utf8::charCodeAt(text,i))
628
+ return false
629
+ end
630
+ i+=1
631
+ end
632
+ return true
633
+ end
634
+ def self.isSuperscript(c)
635
+ return (((c == 178) || (c == 179)) || (c == 185)) || ((((c >= 8304) && (c <= 8319)) && (c != 8306)) && (c != 8307))
636
+ end
637
+ def self.isSubscript(c)
638
+ return ((c >= 8320) && (c <= 8348)) && (c != 8335)
639
+ end
640
+ def self.isSuperscriptOrSubscript(c)
641
+ return WCharacterBase.isSuperscript(c) || WCharacterBase.isSubscript(c)
642
+ end
643
+ def self.normalizeSubSuperScript(c)
644
+ i = 0
645
+ n = @@subSuperScriptDictionary::length
646
+ while i < n
647
+ if @@subSuperScriptDictionary[i] == c
648
+ return @@subSuperScriptDictionary[i + 1]
649
+ end
650
+ i += 2
651
+ end
652
+ return c
653
+ end
654
+ def self.isInvisible(c)
655
+ return WCharacterBase.binarySearch(@@invisible,c)
656
+ end
657
+ @@horizontalOperators;
658
+ def self.horizontalOperators
659
+ @@horizontalOperators
660
+ end
661
+ def self.horizontalOperators=(horizontalOperators)
662
+ @@horizontalOperators = horizontalOperators
663
+ end
664
+ def self.isHorizontalOperator(c)
665
+ return WCharacterBase.binarySearch(@@horizontalOperators,c)
666
+ end
667
+ @@latinLetters;
668
+ def self.latinLetters
669
+ @@latinLetters
670
+ end
671
+ def self.latinLetters=(latinLetters)
672
+ @@latinLetters = latinLetters
673
+ end
674
+ @@greekLetters;
675
+ def self.greekLetters
676
+ @@greekLetters
677
+ end
678
+ def self.greekLetters=(greekLetters)
679
+ @@greekLetters = greekLetters
680
+ end
681
+ def self.latin2Greek(l)
682
+ index = -1
683
+ if l < 100
684
+ index = WCharacterBase::latinLetters::indexOf(("@00" + l.to_s) + "@")
685
+ else
686
+ if l < 1000
687
+ index = WCharacterBase::latinLetters::indexOf(("@0" + l.to_s) + "@")
688
+ else
689
+ index = WCharacterBase::latinLetters::indexOf(("@" + l.to_s) + "@")
690
+ end
691
+ end
692
+ if index != -1
693
+ s = Std::substr(WCharacterBase::greekLetters,index + 1,4)
694
+ return Std::parseInt(s)
695
+ end
696
+ return l
697
+ end
698
+ def self.greek2Latin(g)
699
+ index = -1
700
+ if g < 100
701
+ index = WCharacterBase::greekLetters::indexOf(("@00" + g.to_s) + "@")
702
+ else
703
+ if g < 1000
704
+ index = WCharacterBase::greekLetters::indexOf(("@0" + g.to_s) + "@")
705
+ else
706
+ index = WCharacterBase::greekLetters::indexOf(("@" + g.to_s) + "@")
707
+ end
708
+ end
709
+ if index != -1
710
+ s = Std::substr(WCharacterBase::latinLetters,index + 1,4)
711
+ return Std::parseInt(s)
712
+ end
713
+ return g
714
+ end
715
+ def self.isOp(c)
716
+ return (((((WCharacterBase.isLarge(c) || WCharacterBase.isVeryLarge(c)) || WCharacterBase.isBinaryOp(c)) || WCharacterBase.isRelation(c)) || (c == Std::charCodeAt(".",0))) || (c == Std::charCodeAt(",",0))) || (c == Std::charCodeAt(":",0))
717
+ end
718
+ def self.isTallAccent(c)
719
+ i = 0
720
+ while i < WCharacterBase::tallAccents::length
721
+ if c == WCharacterBase::tallAccents[i]
722
+ return true
723
+ end
724
+ i+=1
725
+ end
726
+ return false
727
+ end
728
+ def self.isDisplayedWithStix(c)
729
+ if (c >= 592) && (c <= 687)
730
+ return true
731
+ end
732
+ if (c >= 688) && (c <= 767)
733
+ return true
734
+ end
735
+ if ((c >= 8215) && (c <= 8233)) || ((c >= 8241) && (c <= 8303))
736
+ return true
737
+ end
738
+ if (c >= 8304) && (c <= 8351)
739
+ return true
740
+ end
741
+ if (c >= 8400) && (c <= 8447)
742
+ return true
743
+ end
744
+ if (c >= 8448) && (c <= 8527)
745
+ return true
746
+ end
747
+ if (c >= 8528) && (c <= 8591)
748
+ return true
749
+ end
750
+ if (c >= 8592) && (c <= 8703)
751
+ return true
752
+ end
753
+ if (c >= 8704) && (c <= 8959)
754
+ return true
755
+ end
756
+ if (c >= 8960) && (c <= 9215)
757
+ return true
758
+ end
759
+ if (c >= 9312) && (c <= 9471)
760
+ return true
761
+ end
762
+ if (c >= 9472) && (c <= 9599)
763
+ return true
764
+ end
765
+ if (c >= 9600) && (c <= 9631)
766
+ return true
767
+ end
768
+ if (c >= 9632) && (c <= 9727)
769
+ return true
770
+ end
771
+ if (c >= 9728) && (c <= 9983)
772
+ return true
773
+ end
774
+ if (c >= 9984) && (c <= 10175)
775
+ return true
776
+ end
777
+ if (c >= 10176) && (c <= 10223)
778
+ return true
779
+ end
780
+ if (c >= 10224) && (c <= 10239)
781
+ return true
782
+ end
783
+ if (c >= 10240) && (c <= 10495)
784
+ return true
785
+ end
786
+ if (c >= 10496) && (c <= 10623)
787
+ return true
788
+ end
789
+ if (c >= 10624) && (c <= 10751)
790
+ return true
791
+ end
792
+ if (c >= 10752) && (c <= 11007)
793
+ return true
794
+ end
795
+ if (c >= 11008) && (c <= 11263)
796
+ return true
797
+ end
798
+ if (c >= 12288) && (c <= 12351)
799
+ return true
800
+ end
801
+ if (c >= 57344) && (c <= 65535)
802
+ return true
803
+ end
804
+ if ((c >= 119808) && (c <= 119963)) || ((c >= 120224) && (c <= 120831))
805
+ return true
806
+ end
807
+ if ((c == 12398) || (c == 42791)) || (c == 42898)
808
+ return true
809
+ end
810
+ return false
811
+ end
812
+ def self.latinToDoublestruck(codepoint)
813
+ if codepoint == 67
814
+ return 8450
815
+ else
816
+ if codepoint == 72
817
+ return 8461
818
+ else
819
+ if codepoint == 78
820
+ return 8469
821
+ else
822
+ if codepoint == 80
823
+ return 8473
824
+ else
825
+ if codepoint == 81
826
+ return 8474
827
+ else
828
+ if codepoint == 82
829
+ return 8477
830
+ else
831
+ if codepoint == 90
832
+ return 8484
833
+ else
834
+ if (codepoint >= LATIN_CAPITAL_LETTER_A) && (codepoint <= LATIN_CAPITAL_LETTER_Z)
835
+ return codepoint + (MATHEMATICAL_DOUBLE_STRUCK_CAPITAL_A - LATIN_CAPITAL_LETTER_A)
836
+ else
837
+ if (codepoint >= LATIN_SMALL_LETTER_A) && (codepoint <= LATIN_SMALL_LETTER_Z)
838
+ return codepoint + (MATHEMATICAL_DOUBLE_STRUCK_SMALL_A - LATIN_SMALL_LETTER_A)
839
+ else
840
+ if (codepoint >= DIGIT_ZERO) && (codepoint <= DIGIT_NINE)
841
+ return codepoint + (MATHEMATICAL_DOUBLE_STRUCK_DIGIT_ZERO - DIGIT_ZERO)
842
+ else
843
+ return codepoint
844
+ end
845
+ end
846
+ end
847
+ end
848
+ end
849
+ end
850
+ end
851
+ end
852
+ end
853
+ end
854
+ end
855
+ def self.latinToScript(codepoint)
856
+ if codepoint == 66
857
+ return 8492
858
+ else
859
+ if codepoint == 69
860
+ return 8496
861
+ else
862
+ if codepoint == 70
863
+ return 8497
864
+ else
865
+ if codepoint == 72
866
+ return 8459
867
+ else
868
+ if codepoint == 73
869
+ return 8464
870
+ else
871
+ if codepoint == 76
872
+ return 8466
873
+ else
874
+ if codepoint == 77
875
+ return 8499
876
+ else
877
+ if codepoint == 82
878
+ return 8475
879
+ else
880
+ if codepoint == 101
881
+ return 8495
882
+ else
883
+ if codepoint == 103
884
+ return 8458
885
+ else
886
+ if codepoint == 111
887
+ return 8500
888
+ else
889
+ if (codepoint >= LATIN_CAPITAL_LETTER_A) && (codepoint <= LATIN_CAPITAL_LETTER_Z)
890
+ return codepoint + (MATHEMATICAL_SCRIPT_CAPITAL_A - LATIN_CAPITAL_LETTER_A)
891
+ else
892
+ if (codepoint >= LATIN_SMALL_LETTER_A) && (codepoint <= LATIN_SMALL_LETTER_Z)
893
+ return codepoint + (MATHEMATICAL_SCRIPT_SMALL_A - LATIN_SMALL_LETTER_A)
894
+ else
895
+ return codepoint
896
+ end
897
+ end
898
+ end
899
+ end
900
+ end
901
+ end
902
+ end
903
+ end
904
+ end
905
+ end
906
+ end
907
+ end
908
+ end
909
+ end
910
+ def self.latinToFraktur(codepoint)
911
+ if codepoint == 67
912
+ return 8493
913
+ else
914
+ if codepoint == 72
915
+ return 8460
916
+ else
917
+ if codepoint == 73
918
+ return 8465
919
+ else
920
+ if codepoint == 82
921
+ return 8476
922
+ else
923
+ if codepoint == 90
924
+ return 8488
925
+ else
926
+ if (codepoint >= LATIN_CAPITAL_LETTER_A) && (codepoint <= LATIN_CAPITAL_LETTER_Z)
927
+ return codepoint + (MATHEMATICAL_FRAKTUR_CAPITAL_A - LATIN_CAPITAL_LETTER_A)
928
+ else
929
+ if (codepoint >= LATIN_SMALL_LETTER_A) && (codepoint <= LATIN_SMALL_LETTER_Z)
930
+ return codepoint + (MATHEMATICAL_FRAKTUR_SMALL_A - LATIN_SMALL_LETTER_A)
931
+ else
932
+ return codepoint
933
+ end
934
+ end
935
+ end
936
+ end
937
+ end
938
+ end
939
+ end
940
+ end
941
+ def self.stripAccent(c)
942
+ WCharacterBase.initAccentsDictionary()
943
+ if c >= 128
944
+ i = @@accentsDictionary::keys()
945
+ while i::hasNext()
946
+ s = i::next()
947
+ chars = @@accentsDictionary::get(s)
948
+ if WCharacterBase.binarySearch(chars,c)
949
+ return s
950
+ end
951
+ end
952
+ return Utf8::uchr(c)
953
+ else
954
+ return Std::fromCharCode(c)
955
+ end
956
+ end
957
+
958
+ @@binaryOps = [43, 45, 47, 177, 183, 215, 247, 8226, 8722, 8723, 8724, 8726, 8727, 8728, 8743, 8744, 8745, 8746, 8760, 8768, 8846, 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8861, 8862, 8863, 8864, 8865, 8890, 8891, 8900, 8901, 8902, 8903, 8905, 8906, 8907, 8908, 8910, 8911, 8914, 8915, 8966, 9021, 9675, 10678, 10789, 10794, 10797, 10798, 10799, 10804, 10805, 10812, 10815, 10835, 10836, 10837, 10838, 10846, 10847, 10851]
959
+ @@relations = [60, 61, 62, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8608, 8610, 8611, 8614, 8617, 8618, 8619, 8620, 8621, 8622, 8624, 8625, 8627, 8630, 8631, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8666, 8667, 8669, 8693, 8712, 8713, 8715, 8716, 8733, 8739, 8740, 8741, 8742, 8764, 8765, 8769, 8770, 8771, 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8793, 8794, 8795, 8796, 8799, 8800, 8801, 8802, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, 8812, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8847, 8848, 8849, 8850, 8866, 8867, 8869, 8871, 8872, 8873, 8874, 8875, 8876, 8877, 8878, 8879, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8904, 8909, 8912, 8913, 8918, 8919, 8920, 8921, 8922, 8923, 8926, 8927, 8930, 8931, 8934, 8935, 8936, 8937, 8938, 8939, 8940, 8941, 8994, 8995, 9123, 10229, 10230, 10231, 10232, 10233, 10234, 10236, 10239, 10501, 10514, 10515, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10547, 10550, 10551, 10560, 10561, 10562, 10564, 10567, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582, 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, 10606, 10607, 10608, 10620, 10621, 10869, 10877, 10878, 10885, 10886, 10887, 10888, 10889, 10890, 10891, 10892, 10901, 10902, 10909, 10910, 10913, 10914, 10927, 10928, 10933, 10934, 10935, 10936, 10937, 10938, 10949, 10950, 10955, 10956, 10987, 11005]
960
+ @@largeOps = [8719, 8720, 8721, 8896, 8897, 8898, 8899, 10756, 10757, 10758, 10759, 10760]
961
+ @@veryLargeOps = [8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 10763, 10764, 10765, 10766, 10767, 10768, 10774, 10775, 10776, 10777, 10778, 10779, 10780]
962
+ @@tallLetters = [98, 100, 102, 104, 105, 106, 107, 108, 116, 946, 948, 950, 952, 955, 958]
963
+ @@longLetters = [103, 106, 112, 113, 121, 946, 947, 950, 951, 956, 958, 961, 962, 966, 967, 968]
964
+ @@negations = [61, 8800, 8801, 8802, 8764, 8769, 8712, 8713, 8715, 8716, 8834, 8836, 8835, 8837, 8838, 8840, 8839, 8841, 62, 8815, 60, 8814, 8805, 8817, 8804, 8816, 10878, 8817, 10877, 8816, 8776, 8777, 8771, 8772, 8773, 8775, 8849, 8930, 8850, 8931, 8707, 8708, 8741, 8742]
965
+ @@mirrorDictionary = [40, 41, 41, 40, 60, 62, 62, 60, 91, 93, 93, 91, 123, 125, 125, 123, 171, 187, 187, 171, 3898, 3899, 3899, 3898, 3900, 3901, 3901, 3900, 5787, 5788, 5788, 5787, 8249, 8250, 8250, 8249, 8261, 8262, 8262, 8261, 8317, 8318, 8318, 8317, 8333, 8334, 8334, 8333, 8712, 8715, 8713, 8716, 8714, 8717, 8715, 8712, 8716, 8713, 8717, 8714, 8725, 10741, 8764, 8765, 8765, 8764, 8771, 8909, 8786, 8787, 8787, 8786, 8788, 8789, 8789, 8788, 8804, 8805, 8805, 8804, 8806, 8807, 8807, 8806, 8808, 8809, 8809, 8808, 8810, 8811, 8811, 8810, 8814, 8815, 8815, 8814, 8816, 8817, 8817, 8816, 8818, 8819, 8819, 8818, 8820, 8821, 8821, 8820, 8822, 8823, 8823, 8822, 8824, 8825, 8825, 8824, 8826, 8827, 8827, 8826, 8828, 8829, 8829, 8828, 8830, 8831, 8831, 8830, 8832, 8833, 8833, 8832, 8834, 8835, 8835, 8834, 8836, 8837, 8837, 8836, 8838, 8839, 8839, 8838, 8840, 8841, 8841, 8840, 8842, 8843, 8843, 8842, 8847, 8848, 8848, 8847, 8849, 8850, 8850, 8849, 8856, 10680, 8866, 8867, 8867, 8866, 8870, 10974, 8872, 10980, 8873, 10979, 8875, 10981, 8880, 8881, 8881, 8880, 8882, 8883, 8883, 8882, 8884, 8885, 8885, 8884, 8886, 8887, 8887, 8886, 8905, 8906, 8906, 8905, 8907, 8908, 8908, 8907, 8909, 8771, 8912, 8913, 8913, 8912, 8918, 8919, 8919, 8918, 8920, 8921, 8921, 8920, 8922, 8923, 8923, 8922, 8924, 8925, 8925, 8924, 8926, 8927, 8927, 8926, 8928, 8929, 8929, 8928, 8930, 8931, 8931, 8930, 8932, 8933, 8933, 8932, 8934, 8935, 8935, 8934, 8936, 8937, 8937, 8936, 8938, 8939, 8939, 8938, 8940, 8941, 8941, 8940, 8944, 8945, 8945, 8944, 8946, 8954, 8947, 8955, 8948, 8956, 8950, 8957, 8951, 8958, 8954, 8946, 8955, 8947, 8956, 8948, 8957, 8950, 8958, 8951, 8968, 8969, 8969, 8968, 8970, 8971, 8971, 8970, 9001, 9002, 9002, 9001, 10088, 10089, 10089, 10088, 10090, 10091, 10091, 10090, 10092, 10093, 10093, 10092, 10094, 10095, 10095, 10094, 10096, 10097, 10097, 10096, 10098, 10099, 10099, 10098, 10100, 10101, 10101, 10100, 10179, 10180, 10180, 10179, 10181, 10182, 10182, 10181, 10184, 10185, 10185, 10184, 10187, 10189, 10189, 10187, 10197, 10198, 10198, 10197, 10205, 10206, 10206, 10205, 10210, 10211, 10211, 10210, 10212, 10213, 10213, 10212, 10214, 10215, 10215, 10214, 10216, 10217, 10217, 10216, 10218, 10219, 10219, 10218, 10220, 10221, 10221, 10220, 10222, 10223, 10223, 10222, 10627, 10628, 10628, 10627, 10629, 10630, 10630, 10629, 10631, 10632, 10632, 10631, 10633, 10634, 10634, 10633, 10635, 10636, 10636, 10635, 10637, 10640, 10638, 10639, 10639, 10638, 10640, 10637, 10641, 10642, 10642, 10641, 10643, 10644, 10644, 10643, 10645, 10646, 10646, 10645, 10647, 10648, 10648, 10647, 10680, 8856, 10688, 10689, 10689, 10688, 10692, 10693, 10693, 10692, 10703, 10704, 10704, 10703, 10705, 10706, 10706, 10705, 10708, 10709, 10709, 10708, 10712, 10713, 10713, 10712, 10714, 10715, 10715, 10714, 10741, 8725, 10744, 10745, 10745, 10744, 10748, 10749, 10749, 10748, 10795, 10796, 10796, 10795, 10797, 10798, 10798, 10797, 10804, 10805, 10805, 10804, 10812, 10813, 10813, 10812, 10852, 10853, 10853, 10852, 10873, 10874, 10874, 10873, 10877, 10878, 10878, 10877, 10879, 10880, 10880, 10879, 10881, 10882, 10882, 10881, 10883, 10884, 10884, 10883, 10891, 10892, 10892, 10891, 10897, 10898, 10898, 10897, 10899, 10900, 10900, 10899, 10901, 10902, 10902, 10901, 10903, 10904, 10904, 10903, 10905, 10906, 10906, 10905, 10907, 10908, 10908, 10907, 10913, 10914, 10914, 10913, 10918, 10919, 10919, 10918, 10920, 10921, 10921, 10920, 10922, 10923, 10923, 10922, 10924, 10925, 10925, 10924, 10927, 10928, 10928, 10927, 10931, 10932, 10932, 10931, 10939, 10940, 10940, 10939, 10941, 10942, 10942, 10941, 10943, 10944, 10944, 10943, 10945, 10946, 10946, 10945, 10947, 10948, 10948, 10947, 10949, 10950, 10950, 10949, 10957, 10958, 10958, 10957, 10959, 10960, 10960, 10959, 10961, 10962, 10962, 10961, 10963, 10964, 10964, 10963, 10965, 10966, 10966, 10965, 10974, 8870, 10979, 8873, 10980, 8872, 10981, 8875, 10988, 10989, 10989, 10988, 10999, 11000, 11000, 10999, 11001, 11002, 11002, 11001, 11778, 11779, 11779, 11778, 11780, 11781, 11781, 11780, 11785, 11786, 11786, 11785, 11788, 11789, 11789, 11788, 11804, 11805, 11805, 11804, 11808, 11809, 11809, 11808, 11810, 11811, 11811, 11810, 11812, 11813, 11813, 11812, 11814, 11815, 11815, 11814, 11816, 11817, 11817, 11816, 12296, 12297, 12297, 12296, 12298, 12299, 12299, 12298, 12300, 12301, 12301, 12300, 12302, 12303, 12303, 12302, 12304, 12305, 12305, 12304, 12308, 12309, 12309, 12308, 12310, 12311, 12311, 12310, 12312, 12313, 12313, 12312, 12314, 12315, 12315, 12314, 65113, 65114, 65114, 65113, 65115, 65116, 65116, 65115, 65117, 65118, 65118, 65117, 65124, 65125, 65125, 65124, 65288, 65289, 65289, 65288, 65308, 65310, 65310, 65308, 65339, 65341, 65341, 65339, 65371, 65373, 65373, 65371, 65375, 65376, 65376, 65375, 65378, 65379, 65379, 65378, 9115, 9118, 9116, 9119, 9117, 9120, 9118, 9115, 9119, 9116, 9120, 9117, 9121, 9124, 9122, 9125, 9123, 9126, 9124, 9121, 9125, 9122, 9126, 9123, 9127, 9131, 9130, 9134, 9129, 9133, 9131, 9127, 9134, 9130, 9133, 9129, 9128, 9132, 9132, 9128]
966
+ @@subSuperScriptDictionary = [178, 50, 179, 51, 185, 49, 8304, 48, 8305, 105, 8308, 52, 8309, 53, 8310, 54, 8311, 55, 8312, 56, 8313, 57, 8314, 43, 8315, 45, 8316, 61, 8317, 40, 8318, 41, 8319, 110, 8320, 48, 8321, 49, 8322, 50, 8323, 51, 8324, 52, 8325, 53, 8326, 54, 8327, 55, 8328, 56, 8329, 57, 8330, 43, 8331, 45, 8332, 61, 8333, 40, 8334, 41, 8336, 97, 8337, 101, 8338, 111, 8339, 120, 8340, 601, 8341, 104, 8342, 107, 8343, 108, 8344, 109, 8345, 110, 8346, 112, 8347, 115, 8348, 116]
967
+ @@accentsDictionary = nil
968
+ @@horizontalLTRStretchyChars = [WCharacterBase::LEFTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW, WCharacterBase::LEFTRIGHT_ARROW, WCharacterBase::LEFTWARDS_ARROW_FROM_BAR, WCharacterBase::RIGHTWARDS_ARROW_FROM_BAR, WCharacterBase::LEFTWARDS_ARROW_WITH_HOOK, WCharacterBase::RIGHTWARDS_ARROW_WITH_HOOK, WCharacterBase::LEFTWARDS_HARPOON_WITH_BARB_UPWARDS, WCharacterBase::RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS, WCharacterBase::LEFTWARDS_DOUBLE_ARROW, WCharacterBase::RIGHTWARDS_DOUBLE_ARROW, WCharacterBase::TOP_CURLY_BRACKET, WCharacterBase::BOTTOM_CURLY_BRACKET, WCharacterBase::TOP_PARENTHESIS, WCharacterBase::BOTTOM_PARENTHESIS, WCharacterBase::TOP_SQUARE_BRACKET, WCharacterBase::BOTTOM_SQUARE_BRACKET, WCharacterBase::LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW, WCharacterBase::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON, WCharacterBase::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON, WCharacterBase::SEGMENT]
969
+ @@tallAccents = [WCharacterBase::LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW, WCharacterBase::RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW, WCharacterBase::LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON, WCharacterBase::RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON]
970
+ @@invisible = [8289, 8290, 8291]
971
+ @@horizontalOperators = [175, 818, 8592, 8594, 8596, 8612, 8614, 8617, 8618, 8636, 8637, 8640, 8641, 8644, 8646, 8651, 8652, 8656, 8658, 8660, 8764, 9140, 9141, 9180, 9181, 9182, 9183, 9552, 10562, 10564, 10602, 10605, 57345, 57346]
972
+ @@latinLetters = "@0065@0066@0067@0068@0069@0070@0071@0072@0073@0074@0075@0076@0077@0078@0079@0080@0081@0082@0083@0084@0085@0086@0087@0088@0089@0090@0097@0098@0099@0100@0101@0102@0103@0104@0105@0106@0107@0108@0109@0110@0111@0112@0113@0114@0115@0116@0117@0118@0119@0120@0121@0122@"
973
+ @@greekLetters = "@0913@0914@0935@0916@0917@0934@0915@0919@0921@0977@0922@0923@0924@0925@0927@0928@0920@0929@0931@0932@0933@0962@0937@0926@0936@0918@0945@0946@0967@0948@0949@0966@0947@0951@0953@0966@0954@0955@0956@0957@0959@0960@0952@0961@0963@0964@0965@0982@0969@0958@0968@0950@"
632
974
  end
633
- end
634
975
  end