+
+ // Control pictures
+ // FIXME: it should not need to reset level 1, but
+ // it's for easy goal.
+ fillIndex [0x7] = 0xB6;
+ for (int i = 0x2400; i <= 0x2424; i++)
+ AddCharMap ((char) i, 0x7, 1, 0);
+
+ // FIXME: what are they?
+ AddCharMap ('\u3003', 0x7, 1);
+ AddCharMap ('\u3006', 0x7, 1);
+ AddCharMap ('\u02D0', 0x7, 1);
+ AddCharMap ('\u10FB', 0x7, 1);
+ AddCharMap ('\u0950', 0x7, 1);
+ AddCharMap ('\u093D', 0x7, 1);
+ AddCharMap ('\u0964', 0x7, 1);
+ AddCharMap ('\u0965', 0x7, 1);
+ AddCharMap ('\u0970', 0x7, 1);
+
+ #endregion
+
+ #region category 08 - symbols
+ fillIndex [0x8] = 2;
+ // Here Windows mapping is not straightforward. It is
+ // not based on computation but seems manual sorting.
+ AddCharMapGroup ('+', 0x8, 1, 0); // plus
+ AddCharMapGroup ('\u2212', 0x8, 1); // minus
+ AddCharMapGroup ('\u229D', 0x8, 1); // minus
+ AddCharMapGroup ('\u2297', 0x8, 1); // mul
+ AddCharMapGroup ('\u2044', 0x8, 1); // div
+ AddCharMapGroup ('\u2215', 0x8, 0); // div
+ AddCharMapGroup ('\u2298', 0x8, 1); // div slash
+ AddCharMapGroup ('\u2217', 0x8, 0); // mul
+ AddCharMapGroup ('\u229B', 0x8, 1); // asterisk oper
+ AddCharMapGroup ('\u2218', 0x8, 0); // ring
+ AddCharMapGroup ('\u229A', 0x8, 1); // ring
+ AddCharMapGroup ('\u2219', 0x8, 0); // bullet
+ AddCharMapGroup ('\u2299', 0x8, 1); // dot oper
+ AddCharMapGroup ('\u2213', 0x8, 1); // minus-or-plus
+ AddCharMapGroup ('\u003C', 0x8, 1); // <
+ AddCharMapGroup ('\u227A', 0x8, 1); // precedes relation
+ AddCharMapGroup ('\u22B0', 0x8, 1); // precedes under relation
+
+ for (int cp = 0; cp < 0x2300; cp++) {
+ if (cp == 0xAC) // SPECIAL CASE: skip
+ continue;
+ if (cp == 0x200) {
+ cp = 0x2200; // skip to 2200
+ fillIndex [0x8] = 0x21;
+ }
+ if (cp == 0x2295)
+ fillIndex [0x8] = 0x3;
+ if (cp == 0x22A2)
+ fillIndex [0x8] = 0xAB;
+ if (cp == 0x22B2)
+ fillIndex [0x8] = 0xB9;
+ if (!map [cp].Defined &&
+// Char.GetUnicodeCategory ((char) cp) ==
+// UnicodeCategory.MathSymbol)
+ Char.IsSymbol ((char) cp))
+ AddCharMapGroup ((char) cp, 0x8, 1);
+ // SPECIAL CASES: no idea why Windows sorts as such
+ switch (cp) {
+ case 0x3E:
+ AddCharMap ('\u227B', 0x8, 1, 0);
+ AddCharMap ('\u22B1', 0x8, 1, 0);
+ break;
+ case 0xB1:
+ AddCharMapGroup ('\u00AB', 0x8, 1);
+ AddCharMapGroup ('\u226A', 0x8, 1);
+ AddCharMapGroup ('\u00BB', 0x8, 1);
+ AddCharMapGroup ('\u226B', 0x8, 1);
+ break;
+ case 0xF7:
+ AddCharMap ('\u01C0', 0x8, 1, 0);
+ AddCharMap ('\u01C1', 0x8, 1, 0);
+ AddCharMap ('\u01C2', 0x8, 1, 0);
+ break;
+ }
+ }