Subversion Repositories JSX

Compare Revisions

Last modification

Ignore whitespace Rev 508 → Rev 509

/branches/live/test/test.js
0,0 → 1,1028
/**
* <title>PointedEars' JSX: Test Library<title>
* @file $Id$
* @requires object.js
*
* @section Copyright & Disclaimer
*
* @author (C) 2011-2013 Thomas Lahn &lt;js@PointedEars.de&gt;
*
* @partof PointedEars' JavaScript Extensions (JSX)
*
* JSX is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JSX is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JSX. If not, see <http://www.gnu.org/licenses/>.
*/
 
if (typeof jsx == "undefined")
{
var jsx = {};
}
 
if (typeof jsx.test == "undefined")
{
/* (for JSDT only) */
jsx.test = {};
}
 
/**
* @type jsx.test
* @memberOf __jsx.test
* @namespace
*/
jsx.test = (/** @constructor */ function () {
var _isArray = jsx.object.isArray;
var _isObject = jsx.object.isObject;
var _throwThis = jsx.throwThis;
 
/**
* Number of assertions made
* @private
*/
var _assertCount = 0;
 
function _increaseAssertCount ()
{
return ++_assertCount;
}
 
/**
* @constructor
* @namespace __jsx.test.AssertionError
* @type jsx.test.AssertionError
* @extends jsx.Error
*/
var _AssertionError = (
/**
* @param {string} s
*/
function jsx_test_AssertionError (s) {
var _super = jsx_test_AssertionError._super;
if (_super)
{
_super.call(this);
}
 
this.message = "Assertion failed: " + s;
}
).extend(jsx.Error, {
/**
* @memberOf jsx.test.AssertionError#prototype
*/
name: "jsx.test.AssertionError"
});
 
/**
* @constructor
* @namespace __jsx.test.ArrayComparisonFailure
* @type jsx.test.ArrayComparisonFailure
* @extends jsx.InvalidArgumentError
* @private
* @memberOf __jsx.test
*/
var _ArrayComparisonFailure = (
function jsx_test_ArrayComparisonFailure () {
jsx_test_ArrayComparisonFailure._super.call(this, "Arrays expected");
}
).extend(jsx.InvalidArgumentError, {
/**
* @memberOf __jsx.test.ArrayComparisonFailure.prototype
*/
name: "jsx.test.ArrayComparisonFailure"
});
 
/**
* @constructor
* @namespace __jsx.test.ObjectComparisonFailure
* @type jsx.test.ObjectComparisonFailure
* @extends jsx.InvalidArgumentError
* @private
* @memberOf __jsx.test
*/
var _ObjectComparisonFailure = (
function jsx_test_ObjectComparisonFailure () {
jsx_test_ObjectComparisonFailure._super.call(this, "Objects expected");
}
).extend(jsx.InvalidArgumentError, {
/**
* @memberOf __jsx.test.ObjectComparisonFailure.prototype
*/
name: "jsx.test.ObjectComparisonFailure"
});
 
return {
/**
* @version
* @memberOf jsx.test
*/
version: "$Revision$",
 
/**
* Increases the assertion count
*
* @return {Number} The new assertion count
*/
increaseAssertCount: _increaseAssertCount,
 
/**
* Resets the assertion count
*
* @return {Number} <code>0</code>
*/
resetAssertCount: function () {
return (_assertCount = 0);
},
 
/**
* @function
*/
AssertionError: _AssertionError,
 
/**
* Asserts that a condition converts to true. If it does not, it throws
* an {@link #AssertionError} with a default message.
*
* @param {string|any} x
* If a string, it is evaluated as a <i>Program</i>; the assertion
* fails if its result, type-converted to <i>boolean</i>, is
* <code>false</code>.
* If not a string, the value is type-converted to <i>boolean</i>;
* the assertion fails if the result of the conversion is
* <code>false</code>.
* @throws
* {@link #AssertionError} if the assertion fails and this exception
* can be thrown.
* @return {boolean}
* <code>false</code>, if the assertion fails and no exception can be thrown;
* <code>true</code>, if the assertion is met.
* @see Global#eval(String)
*/
assert: function (x) {
_increaseAssertCount();
 
var origX = x;
if (typeof x == "string")
{
x = eval(x);
}
 
if (!x)
{
return _throwThis(jsx.test.AssertionError,
'"assert("' + (typeof origX == "string" ? origX : "...") + '");"');
}
 
return !!x;
},
 
/**
* Asserts that a condition is boolean <code>true</code>. If it isn't,
* it throws an {@link #AssertionError} with a default message.
*
* @param {string|any} x
* If a string, it is evaluated as a <i>Program</i>; the assertion
* fails if its result, type-converted to <i>boolean</i>, is
* <code>false</code>.
* If not a string, the value is type-converted to <i>boolean</i>;
* the assertion fails if the result of the conversion is
* <code>false</code>.
* @throws
* {@link #AssertionError} if the assertion fails and this exception
* can be thrown.
* @return {boolean}
* <code>false</code>, if the assertion fails and no exception can be thrown;
* <code>true</code>, if the assertion is met.
* @see Global#eval(String)
*/
assertTrue: function (x) {
_increaseAssertCount();
 
var origX = x;
if (typeof x == "string")
{
x = eval(x);
}
 
if (typeof x != "boolean" || !x)
{
return _throwThis(_AssertionError,
"assertTrue(" + (typeof origX == "string" ? origX : "...") + ");");
}
 
return !!x;
},
 
/**
* Asserts that a condition is false. If it isn't, it throws
* an {@link #AssertionError} with a default message.
*
* @param {string|any} x
* If a string, it is evaluated as a <i>Program</i>; the assertion
* fails if its result, type-converted to <i>boolean</i>, is
* <code>true</code>.
* If not a string, the value is type-converted to <i>boolean</i>;
* the assertion fails if the result of the conversion is
* <code>true</code>.
* @param {boolean} bThrow = true
* If <code>true</code> (default), an exception will be thrown if
* the assertion fails, otherwise a warning will be issued to the
* error console in that case.
* @param {String} sContext (optional)
* Description of the context in which the assertion was made.
* Ignored if <code><var>bThrow</var> == true</code>.
* @throws
* {@link #AssertionError} if the assertion fails and this exception
* can be thrown.
* @return {boolean}
* <code>false</code>, if the assertion fails and no exception can be thrown;
* <code>true</code>, if the assertion is met.
* @see Global#eval(String)
*/
assertFalse: function (x, bThrow, sContext) {
_increaseAssertCount();
 
var origX = x;
if (typeof x == "string")
{
x = eval(x);
}
 
if (typeof x != "boolean" || x)
{
if (typeof bThrow == "undefined" || bThrow)
{
return _throwThis(_AssertionError,
"assertFalse(" + (typeof origX == "string" ? origX : "...") + ");");
}
 
jsx.dmsg((sContext ? sContext + ": " : "") + "Assertion failed: "
+ (typeof origX == "string" ? origX : "Value") + " must be false.", "warn");
}
 
return !!x;
},
 
/**
* Asserts that a condition is <code>undefined</code>. If it isn't, it throws
* an {@link #AssertionError} with a default message.
*
* @param {string|any} x
* If a string, it is evaluated as a <i>Program</i>; the assertion
* fails if its result, type-converted to <i>boolean</i>, is
* <code>true</code>.
* If not a string, the value is type-converted to <i>boolean</i>;
* the assertion fails if the result of the conversion is
* <code>true</code>.
* @param {boolean} bThrow = true
* If <code>true</code> (default), an exception will be thrown if
* the assertion fails, otherwise a warning will be issued to the
* error console in that case.
* @param {String} sContext (optional)
* Description of the context in which the assertion was made.
* Ignored if <code><var>bThrow</var> == true</code>.
* @throws
* {@link #AssertionError} if the assertion fails and this exception
* can be thrown.
* @return {boolean}
* <code>false</code>, if the assertion fails and no exception can be thrown;
* <code>true</code>, if the assertion is met.
* @see Global#eval(String)
*/
assertUndefined: function (x, bThrow, sContext) {
_increaseAssertCount();
 
var origX = x;
if (typeof x == "string")
{
x = eval(x);
}
 
if (typeof x != "undefined")
{
if (typeof bThrow == "undefined" || bThrow)
{
return _throwThis(_AssertionError,
"assertUndefined(" + (typeof origX == "string" ? origX : "...") + ");");
}
 
jsx.warn((sContext ? sContext + ": " : "") + "Assertion failed: "
+ (typeof origX == "string" ? origX : "Value") + " must be undefined.");
}
 
return !!x;
},
 
/**
* Asserts that two arrays are equal. If they are not,
* an {@link #AssertionError} is thrown with a default message.
* Two arrays are considered equal only if their elements are
* strictly equal (shallow strict comparison).
*
* @function
* @throws
* {@link #ArrayComparisonFailure}
* if either of the given values is not a reference to an
* {@link Array}.
* @throws
* {@link #AssertionError}
* if the assertion fails and either exception can be thrown.
* @see Global#eval()
*/
assertArrayEquals: (function () {
function _thrower (expecteds, actuals)
{
return _throwThis(_AssertionError,
"assertArrayEquals([" + expecteds + "], [" + actuals + "])");
}
 
/**
* @param {string|Array} expecteds
* Expected value; if a string, it is evaluated as a <i>Program</i>.
* @param {string|Array} actuals
* Actual value; if a string, it is evaluated as a <i>Program</i>.
* @return {boolean}
* <code>false</code>, if comparison is not possible
* or the assertion fails, and no exception can be thrown;
* <code>true</code>, if the assertion is met.
*/
return function (expecteds, actuals) {
_increaseAssertCount();
 
if (typeof expecteds == "string")
{
expecteds = eval(expecteds);
}
 
if (typeof actuals == "string")
{
actuals = eval(actuals);
}
 
if (typeof expecteds == typeof actuals
&& expecteds == null && actuals == null)
{
return true;
}
 
if (!_isArray(expecteds) || !_isArray(actuals))
{
return _throwThis(_ArrayComparisonFailure);
}
 
var len = expecteds.length;
var len2 = actuals.length;
 
if (len != len2)
{
return _thrower(expecteds, actuals);
}
 
for (var i = len; i--;)
{
if (expecteds[i] !== actuals[i])
{
return _thrower(expecteds, actuals);
}
}
 
return true;
};
}()),
 
/**
* Asserts that two objects are equal. If they are not,
* an {@link #AssertionError} is thrown with a default message.
* Two object are considered equal only if their keys are
* strictly equal (shallow strict comparison).
*
* @function
* @throws
* {@link #ObjectComparisonFailure}
* if either of the given values is not a reference to an
* object.
* @throws
* {@link #AssertionError}
* if the assertion fails and either exception can be thrown.
* @see Global#eval()
*/
assertObjectEquals: (function () {
function _thrower (expecteds, actuals)
{
return _throwThis(_AssertionError,
"assertObjectEquals(expecteds, actuals)");
}
 
/**
* @param {string|Object} expecteds
* Expected value; if a string, it is evaluated as a <i>Program</i>.
* @param {string|Object} actuals
* Actual value; if a string, it is evaluated as a <i>Program</i>.
* @return {boolean}
* <code>false</code>, if comparison is not possible
* or the assertion fails, and no exception can be thrown;
* <code>true</code>, if the assertion is met.
*/
return function (expecteds, actuals) {
_increaseAssertCount();
 
if (typeof expecteds == "string")
{
expecteds = eval(expecteds);
}
 
if (typeof actuals == "string")
{
actuals = eval(actuals);
}
 
if (typeof expecteds == typeof actuals
&& expecteds == null && actuals == null)
{
return true;
}
 
if (!_isObject(expecteds) || !_isObject(actuals))
{
return _throwThis(_ObjectComparisonFailure);
}
 
var keys = jsx.object.getKeys(expecteds);
for (var i = keys.length; i--;)
{
var key = keys[i];
if (expecteds[key] !== actuals[key])
{
return _thrower(expecteds, actuals);
}
}
 
return true;
};
}()),
 
runner: {
tests: [],
 
_table: null,
 
/**
* @protected
*/
_appendTable: function () {
if (typeof document != "object" || !document)
{
return;
}
 
if (!document.body)
{
this._printMsg(
"No document.body found (at this point)."
+ " Use {updateDocument: false} if not in HTML context,"
+ " or wait until document.body exists (`load' event).",
"warn");
return;
}
 
var id = "test-results" + new Date().getTime();
var context = "table#" + id;
var style = document.createElement("style");
style.type = "text/css";
var styleText =
context + " { border: 2px solid black;"
+ " border-collapse: collapse; }"
+ context + " thead { border-bottom: 1px solid black; }"
+ context + " thead th { vertical-align: baseline; }"
+ context + " tfoot { border-top: 1px solid black; }"
+ context + " thead th { text-align: left; }"
+ context + " thead th:first-child { text-align: right; }"
+ context + " tbody th { text-align: right; }"
+ context + " tbody td.info {"
+ " background-color: green; color: white; }"
+ context + " tbody td.error {"
+ " background-color: red;"
+ " color: white; font-family: monospace; }"
+ context + " thead th,"
+ context + " tbody th,"
+ context + " tbody td,"
+ context + " tfoot td {"
+ " padding: 0 0.5em;"
+ " vertical-align: top;"
+ " vertical-align: baseline; }";
if (typeof style.styleSheet != "undefined")
{
/* Older MSHTML */
style.styleSheet.cssText = styleText;
}
else
{
style.appendChild(document.createTextNode(styleText));
}
 
(document.head || document.getElementsByTagName("head")[0]).appendChild(style);
 
var table = document.createElement("table");
table.id = id;
this._table = table;
 
var thead = document.createElement("thead");
var tr = document.createElement("tr");
 
var th = document.createElement("th");
th.appendChild(document.createTextNode("#"));
tr.appendChild(th);
 
th = document.createElement("th");
th.appendChild(document.createTextNode("Source File"));
tr.appendChild(th);
 
th = document.createElement("th");
th.appendChild(document.createTextNode("Feature"));
tr.appendChild(th);
 
th = document.createElement("th");
th.appendChild(document.createTextNode("Testcase Description"));
tr.appendChild(th);
 
th = document.createElement("th");
th.appendChild(document.createTextNode("Result"));
tr.appendChild(th);
 
thead.appendChild(tr);
table.insertBefore(thead, table.firstChild);
 
var tbody = document.createElement("tbody");
table.appendChild(tbody);
 
var tests = this._tests;
for (var i = 0, len = tests.length; i < len; ++i)
{
var test = tests[i];
var number = i + 1;
var file = this._file;
var feature = this._feature;
var description = "";
 
if (test && typeof test != "function")
{
if (test.file)
{
file = test.file;
}
 
if (test.feature)
{
feature = test.feature;
}
 
description = test.description || test.desc || test.name;
test = test.code;
}
 
this._appendRow(number, file, feature, description);
}
 
document.body.appendChild(table);
},
 
/**
* @protected
* @param {String} text
*/
_htmlEscape: function (text) {
return text.replace(/&/g, "&amp;").replace(/</g, "&lt;")
.replace(/>/g, "&gt;").replace(/ /g, "&nbsp; ");
},
 
/**
* @protected
* @param {int} num
* @param {string} file
* @param {string} feature
* @param {string} desc
*/
_appendRow: function (num, file, feature, desc) {
var table = this._table;
if (!table)
{
return;
}
 
var tbody = table.tBodies[0];
 
var tr = document.createElement("tr");
 
var th = document.createElement("th");
th.appendChild(document.createTextNode(num));
tr.appendChild(th);
 
var td = document.createElement("td");
if (file)
{
var tt = document.createElement("tt");
tt.appendChild(document.createTextNode(this._htmlEscape(file)));
td.appendChild(tt);
}
tr.appendChild(td);
 
td = document.createElement("td");
if (feature)
{
var code = document.createElement("code");
code.appendChild(document.createTextNode(this._htmlEscape(feature)));
td.appendChild(code);
}
tr.appendChild(td);
 
td = document.createElement("td");
if (desc)
{
td.innerHTML = desc;
}
tr.appendChild(td);
 
td = document.createElement("td");
td.id = table.id + "-" + num;
td.innerHTML = "testing…";
 
tr.appendChild(td);
 
tbody.appendChild(tr);
},
 
/**
* Updates a result cell
*
* @protected
* @param {int} rowNum
* Row number
* @param {string} result
* @param {string} msgType
*/
_updateResult: function (rowNum, result, msgType) {
var td = document.getElementById(this._table.id + "-" + rowNum);
if (td)
{
/* FIXME: Use standards-compliant methods instead */
td.innerHTML = this._htmlEscape(result).replace(/\r?\n|\r/g, "<br>");
 
td.className = msgType;
}
},
 
/**
* @protected
*/
_appendSummary: function (text) {
if (this._table)
{
var tbody = this._table.tBodies[0];
 
var tfoot = document.createElement("tfoot");
var tr = document.createElement("tr");
var td = document.createElement("td");
td.colSpan = 5;
td.appendChild(document.createTextNode(text));
tr.appendChild(td);
tfoot.appendChild(tr);
 
this._table.insertBefore(tfoot, tbody);
}
},
 
/**
* @protected
* @param {String} msg
* @param {String} msgType
*/
_printMsg: function (msg, msgType) {
return jsx[msgType]("jsx.test.runner: " + msg);
},
 
/**
* Strips tags from markup and unescapes basic character
* entity references.
*
* @protected
* @param {String} markup
*/
_stripTags: function (markup) {
return markup
.replace(/<\/?[^\s>]+(:[^\s>]+)?(\s+[^\s=>]+(\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)?)?)*\s*>/g, "")
.replace(/&lt;/, "<").replace(/&gt;/, ">").replace(/&amp;/, "&");
},
 
/**
* Prints the result to the error console, and, if supported,
* to the document.
*
* @protected
* @param num
* @param file
* @param feature
* @param desc
* @param result
* @param msgType
*/
_printResult: function (num, file, feature, desc, result, msgType) {
this._updateResult(num, result, msgType);
this._printMsg("Test " + num
+ (file || feature ? ", " : "")
+ file
+ (feature ? ":" + feature : "")
+ (file || feature ? "," : "")
+ (desc ? ' "' + this._stripTags(desc) + '"' : "")
+ (file || feature ? "," : "")
+ " " + result,
msgType);
},
 
/**
* @protected
* @param result
*/
_printSummary: function (result) {
var failed = result.failed;
var passed = result.passed;
var total = failed + passed;
var summary = "Failed: " + failed + " (" + (failed * 100 / total).toFixed(1) + "\xA0%)."
+ " Passed: " + passed + " (" + (passed * 100 / total).toFixed(1) + "\xA0%).";
this._appendSummary(summary);
this._printMsg(summary, "info");
},
 
/**
* Runs test cases.
*
* @param {Object} spec
* Test specification. Supported properties incude:
* <table>
* <thead>
* <th>Property</th>
* <th>Type</th>
* <th>Meaning</th>
* </thead>
* <tbody>
* <tr>
* <th><code>file</code></th>
* <td><code>String</code></td>
* <td>Name of the file that contains the code
* to be tested. The default is the empty string.
* <em>NOTE: This is a purely descriptive value.
* No resources will be accessed based on this
* value.</em></td>
* </tr>
* <tr>
* <th><code>feature</code></th>
* <td><code>String</code></td>
* <td>Code describing the feature that is tested.
* The default is the empty string.</td>
* </tr>
* <tr>
* <th><code>setUp</code></th>
* <td><code>Function</code></td>
* <td>Function that is called before each test case</td>
* </tr>
* <tr>
* <th><code>tearDown</code></th>
* <td><code>Function</code></td>
* <td>Function that is called after each test case</td>
* </tr>
* <tr>
* <th><code>tests</code></th>
* <td><code>Array</code> of <code>Function</code>s or of
* <code>Object</code>s with the following properties:
* <table>
* <thead>
* <th>Property</th>
* <th>Type</th>
* <th>Meaning</th>
* </thead>
* <tbody>
* <tr>
* <th><code>file</code></th>
* <td><code>String</code></td>
* <td>Name of the file that contains the code
* to be tested. The default is the
* value of the specification's
* <code>file</code> property.
* <em>NOTE: This is a purely descriptive value.
* No resources will be accessed based on this
* value.</em></td></td>
* </tr>
* <tr>
* <th><code>feature</code></th>
* <td><code>String</code></td>
* <td>Code describing the feature that is tested.
* The default is the value of the specification's
* <code>feature</code> property.</td>
* </tr>
* <tr>
* <th><code>description</code> | <code>desc</code>
* | <code>name</code></th>
* <td><code>String</code></td>
* <td>Description/name of the test case.
* Use <code>description</code> or
* <code>desc</code> for newer
* test code.</td>
* </tr>
* <tr>
* <th><code>code</code></th>
* <td><code>Function</code></td>
* <td>Test case</td>
* </tr>
* </tbody>
* </table></td>
* <td>Test cases</td>
* </tr>
* <tr>
* <th><code>updateDocument</code></th>
* <td><code>boolean</code></td>
* <td>If <code>false</code>, the (X)HTML document
* containing or including the call is not updated, and
* diagnostics are only written to the error console.
* The default is <code>true</code>. Set to
* <code>false</code> automatically if there is
* no <code>document.body</code> object.</td>
* </tr>
* </tbody>
* </table>
*/
run: function (spec) {
var hasSetUp = false;
var hasTearDown = false;
 
if (spec)
{
this._file = jsx.object.getProperty(spec, "file", "");
this._feature = jsx.object.getProperty(spec, "feature", "");
 
hasSetUp = (typeof spec.setUp == "function");
if (hasSetUp)
{
this._setUp = spec.setUp;
}
 
hasTearDown = (typeof spec.tearDown == "function");
if (hasTearDown)
{
this._tearDown = spec.tearDown;
}
 
var tests = spec.tests;
if (tests)
{
this.setTests(tests);
}
}
 
var tests = this._tests;
if (tests.length == 0)
{
return this._printMsg("No tests defined.", "info");
}
 
this._appendTable();
 
tests.result = {
failed: 0,
passed: 0
};
 
var hasSetTimeout = jsx.object.isMethod(jsx.global, "window", "setTimeout");
var hasClearTimeout = jsx.object.isMethod(jsx.global, "window", "clearTimeout");
var me = this;
for (var i = 0, len = tests.length; i < len; ++i)
{
if (hasSetTimeout)
{
/* Asynchronous testing allows GUI thread to paint table */
(function (i) {
var timeout = window.setTimeout(function () {
me._runTest(i, hasSetUp, hasTearDown);
 
if (hasClearTimeout)
{
window.clearTimeout(timeout);
}
}, 50);
}(i));
}
else
{
this._runTest(i, hasSetUp, hasTearDown);
}
}
},
 
/**
* @protected
*/
_runTest: function (i, hasSetUp, hasTearDown) {
var tests = this._tests;
var test = tests[i];
var number = i + 1;
var file = this._file;
var feature = this._feature;
var description = "";
 
if (test && typeof test != "function")
{
if (test.file)
{
file = test.file;
}
 
if (test.feature)
{
feature = test.feature;
}
 
description = test.description || test.desc || test.name;
test = test.code;
}
 
if (hasSetUp)
{
this._setUp(i, test);
}
 
try
{
test(i);
++tests.result.passed;
this._printResult(number, file, feature, description,
"passed", "info");
}
catch (e)
{
++tests.result.failed;
this._printResult(number, file, feature, description,
"threw " + e + (e.stack ? "\n\n" + e.stack : ""),
"error");
}
 
if (hasTearDown)
{
this._tearDown(i, test);
}
 
if (i == tests.length - 1)
{
this._printSummary(tests.result);
}
},
 
setFile: function (file) {
this._file = file;
return this;
},
 
setFeature: function (feature) {
this._feature = feature;
return this;
},
 
setSetUp: function (f) {
if (typeof f != "function")
{
_throwThis("jsx.InvalidArgumentError",
["", typeof f, "function"], "jsx.test.runner.setSetUp");
}
 
this._setUp = f;
return this;
},
 
setTearDown: function (f) {
if (typeof f != "function")
{
_throwThis("jsx.InvalidArgumentError", ["", typeof f, "function"]);
}
 
this._tearDown = f;
return this;
},
 
setTests: function (tests) {
var _class = jsx.object.getClass(tests);
if (_class != "Array")
{
_throwThis("jsx.InvalidArgumentError", ["", _class, "Array"]);
}
 
this._tests = tests;
return this;
}
}
};
}());
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedRevision Id
\ No newline at end of property
Index: live/test/ani.html
===================================================================
--- live/test/ani.html (nonexistent)
+++ live/test/ani.html (revision 509)
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Script Test Case: Animation Framework (new)</title>
+ <style type="text/css">
+ <!--
+ div {
+ background-color: red;
+ color: white;
+ width: 5px;
+ height: 5px;
+ }
+ -->
+ </style>
+
+ <script src="../object.js" type="text/javascript"></script>
+ <script src="../collection.js" type="text/javascript"></script>
+ <script src="../dom.js" type="text/javascript"></script>
+ <script src="../dom/css.js" type="text/javascript"></script>
+ <script src="../dom/css/color.js" type="text/javascript"></script>
+ <script src="../types.js" type="text/javascript"></script>
+ <script src="../string.js" type="text/javascript"></script>
+ <!-- <script src="../ani.bak.js" type="text/javascript"></script> -->
+ <script src="../dom/ani.js" type="text/javascript"></script>
+ <!-- <script src="firebug/firebug.js" type="text/javascript"></script> -->
+ <script type="text/javascript">
+ /*
+ var anim, anim2;
+ function body_load()
+ {
+ anim = new Animation(
+ 'test-object',
+ [
+ new Timeline({
+ style: {
+ left: { from: 400, to: 0 },
+ top: { from: 200, by: -100 },
+ width: { from: 200, to: 100 },
+ height: { from: 200, to: 100 }
+ },
+ duration: 1000
+ }),
+ {
+ style: {
+ top: { to: 0 }
+ },
+ duration: 1000
+ }
+ ]);
+
+ anim2 = new Animation(
+ 'test-object',
+ new Timeline([
+ new KeyFrame({
+ time: 0,
+ style: {
+ left: 400,
+ top: 200,
+ width: 200,
+ height: 200
+ }
+ }),
+ new KeyFrame({
+ time: 1000,
+ style: {
+ left: 0,
+ top: {by: -100},
+ width: 100,
+ height: 100
+ }
+ }),
+ new Pause(1000),
+ new KeyFrame({
+ style: {
+ top: 1000
+ }
+ })
+ ])
+ );
+ }
+ */
+
+ var anim;
+ function body_load()
+ {
+ var target = document.getElementById("test-object");
+ var Animation = jsx.dom.animation.Animation;
+ var Timeline = jsx.dom.animation.Timeline;
+ var KeyFrame = jsx.dom.animation.KeyFrame;
+ var Color = jsx.dom.css.Color;
+ anim = new Animation({
+ target: target,
+ preferNative: false,
+ timelines: [
+ new Timeline({
+ keyFrames: [
+ new KeyFrame({
+ time: 0,
+ values: {
+ style: {
+ left: 0,
+ top: 0,
+ width: 10,
+ height: 10,
+ opacity: 1,
+ //backgroundColor: new Color(255, 0, 0)
+ }
+ }
+ }),
+ new KeyFrame({
+ time: "50%",
+ values: {
+ style: {
+ left: 100,
+ top: 100,
+ width: 100,
+ height: 100,
+ opacity: 0.5,
+ backgroundColor: new Color(0, 255, 0)
+ }
+ }
+ }),
+ new KeyFrame({
+ time: "4s",
+ values: {
+ style: {
+ left: 200,
+ top: 200,
+ width: 100,
+ height: 100,
+ opacity: 0,
+ backgroundColor: new Color(0, 0, 255)
+ }
+ }
+ })
+ ],
+ autoReverse: true
+ })
+ ]
+ });
+ }
+ </script>
+ </head>
+
+ <body onload="body_load();" debug="true">
+ <input type="button" value="Action!" onclick="anim.play();">
+ <input type="button" value="More Action!" onclick="anim2.play();">
+
+ <div id="test-object">
+ &nbsp;
+ </div>
+ </body>
+</html>
/live/test/ani.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/array-test.js
===================================================================
--- live/test/array-test.js (nonexistent)
+++ live/test/array-test.js (revision 509)
@@ -0,0 +1,309 @@
+function runTests()
+{
+ var _test = jsx.test;
+ var assert = _test.assert;
+ var assertArrayEquals = _test.assertArrayEquals;
+ var _createComparator = jsx.array.createComparator;
+ var BigArray = jsx.array.BigArray;
+
+ _test.runner.run({
+ file: "array.js",
+ tests: [
+ {
+ feature: 'jsx.array.BigArray()',
+ description: 'Return new instance (factory)',
+ code: function () {
+ assert(BigArray() instanceof BigArray);
+ }
+ },
+ {
+ feature: 'new jsx.array.BigArray()',
+ description: 'Return new empty instance (constructor)',
+ code: function () {
+ assert(new BigArray() instanceof BigArray);
+ }
+ },
+ {
+ feature: 'new BigArray(BigArray)',
+ description: 'Clone instance',
+ code: function () {
+ var s = (new BigArray(new BigArray("x"))).toString();
+ assert(s === "x");
+ }
+ },
+ {
+ feature: 'new BigArray("")',
+ description: 'Return one-element array',
+ code: function () {
+ assertArrayEquals([""], new BigArray("").toArray());
+ }
+ },
+ {
+ feature: 'new BigArray("x")',
+ description: 'Convert to <code>BigArray("x")</code>',
+ code: function () {
+ assertArrayEquals(["x"], new BigArray("x").toArray());
+ }
+ },
+ {
+ feature: 'new BigArray(int)',
+ description: 'Create <code>BigArray</code> of specified length',
+ code: function () {
+ var a = [];
+ a.length = 42;
+ assertArrayEquals(a, new BigArray(42).toArray());
+ }
+ },
+
+ {
+ feature: 'BigArray.prototype.toArray()',
+ description: 'Return the correct value',
+ code: function () {
+ assertArrayEquals([], new BigArray().toArray());
+ assertArrayEquals([""], new BigArray("").toArray());
+ assertArrayEquals(["x"], new BigArray("x").toArray());
+ assertArrayEquals([23, 42], new BigArray(23, 42).toArray());
+ }
+ },
+ {
+ feature: 'BigArray.length',
+ description: 'Getter works',
+ code: function () {
+ var i = Math.pow(2, 53);
+ assert(new BigArray(i).length == i);
+ }
+ },
+
+ {
+ feature: 'BigArray.getLength()',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new BigArray().getLength() === 0);
+ assert(new BigArray(42).getLength() === 42);
+ assert(new BigArray("").getLength() === 1);
+ assert(new BigArray("x").getLength() === 1);
+ assert(new BigArray("x", "y").getLength() === 2);
+ }
+ },
+
+ {
+ feature: 'BigArray.prototype.get()',
+ description: 'Throw <code>jsx.InvalidArgumentError</code>',
+ code: function () {
+ var failure = jsx.tryThis(
+ function () {
+ new BigArray().get();
+ return false;
+ },
+ function (e) {
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assert(failure);
+ }
+ },
+ {
+ feature: 'BigArray.prototype.get(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new BigArray("x").get(0) === "x");
+ assert(typeof new BigArray("x").get(1) == "undefined");
+
+ assert(new BigArray("x", "y").get(-2) === "x");
+ assert(new BigArray("x", "y").get(-1) === "y");
+ assert(typeof new BigArray("x", "y").get(-4) == "undefined");
+ }
+ },
+
+ /* TODO: Override and test Array methods that are not MAX_LENGTH-safe */
+
+ {
+ feature: 'BigArray.prototype.toString(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new BigArray().toString() === "");
+ assert(new BigArray(0).toString() === "");
+ assert(new BigArray(1).toString() === "");
+ assert(new BigArray(2).toString() === ",");
+ }
+ },
+
+ {
+ feature: 'BigArray.prototype.valueOf(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var a = new BigArray("x\uD834\uDD1Ey");
+ var v = a.valueOf();
+ assert(v === a);
+ }
+ },
+
+ {
+ feature: 'jsx.array.createComparator(aKeys)',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ var o1 = {x: 2};
+ var o2 = {x: 1};
+ var a = [o1, o2];
+ a.sort(_createComparator(["x"]));
+ assertArrayEquals([o2, o1], a);
+ }
+ },
+ {
+ feature: 'jsx.array.createComparator(aKeys, oOptions)',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ var o1 = {x: 1};
+ var o2 = {x: 2};
+ var a = [o1, o2];
+ a.sort(_createComparator(["x"], {descending: true}));
+ assertArrayEquals([o2, o1], a);
+
+ o1 = {x: "1 "};
+ o2 = {x: 1};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {strict: true}));
+ assertArrayEquals([o2, o1], a);
+
+ o1 = {x: 1};
+ o2 = {x: "1 "};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {descending: true, strict: true}));
+ assertArrayEquals([o2, o1], a);
+
+ o1 = {x: "20"};
+ o2 = {x: "1"};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {numeric: true}));
+ assertArrayEquals([o2, o1], a);
+
+ o1 = {x: "1"};
+ o2 = {x: "1"};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {numeric: true, strict: true}));
+ assertArrayEquals([o1, o2], a);
+
+ o1 = {x: 1};
+ o2 = {x: "1"};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {numeric: true}));
+ assertArrayEquals([o1, o2], a);
+
+ o1 = {x: "1 "};
+ o2 = {x: 1};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {numeric: true, strict: true}));
+ assertArrayEquals([o1, o2], a);
+
+ o1 = {x: 2};
+ o2 = {x: "12"};
+ a = [o1, o2];
+ a.sort(_createComparator(["x"], {
+ descending: true,
+ numeric: true,
+ strict: true
+ }));
+ assertArrayEquals([o2, o1], a);
+ }
+ },
+ {
+ feature: 'jsx.array.createComparator([{key: …, callback: …}])',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ var o1 = {
+ x: "10"
+ };
+ var o2 = {
+ x: "2"
+ };
+ var a = [o1, o2];
+ a.sort(_createComparator([
+ {
+ key: "x",
+ callback: Number
+ }
+ ]));
+ assertArrayEquals([o2, o1], a);
+ }
+ },
+ {
+ feature: 'jsx.array.createComparator([{key: …, constructor: …}])',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ var o1 = {
+ x: "10"
+ };
+ var o2 = {
+ x: "2"
+ };
+ var a = [o1, o2];
+ a.sort(_createComparator([
+ {
+ key: "x",
+ constructor: Number
+ }
+ ]));
+ assertArrayEquals([o2, o1], a);
+ }
+ },
+ {
+ feature: 'jsx.array.createComparator([{key: …, comparator: …}])',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ var o1 = {
+ engine: {
+ liters: 4.0,
+ cylinders: 4
+ },
+ };
+ var o2 = {
+ engine: {
+ liters: 3.0,
+ cylinders: 4
+ },
+ };
+ var a = [o1, o2];
+ a.sort(_createComparator([
+ {
+ key: "engine",
+ comparator: _createComparator(["cylinders", "liters"])
+ }
+ ]));
+ assertArrayEquals([o2, o1], a);
+ }
+ },
+
+ {
+ feature: 'jsx.array.createComparator("…", {callback: …, constructor: …, comparator: …})',
+ description: 'Sort <code>Array</code> as specified',
+ code: function () {
+ function Bar (baz)
+ {
+ this.baz = String(baz);
+ }
+
+ Bar.prototype.toString = function () {
+ return this.baz;
+ };
+
+ function Baz (bla)
+ {
+ this.length = bla.length;
+ }
+
+ var o1 = {"bar": new Bar("burpbarbazbla")};
+ var o2 = {"bar": new Bar("foo")};
+
+ var foo = [o1, o2];
+
+ foo.sort(_createComparator(["bar"], {
+ callback: String,
+ constructor: Baz,
+ comparator: _createComparator(["length"], {numeric: true})
+ }));
+
+ assertArrayEquals([o2, o1], foo);
+ }
+ }
+ ]
+ });
+}
\ No newline at end of file
/live/test/array-test.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/regexp-test.js
===================================================================
--- live/test/regexp-test.js (nonexistent)
+++ live/test/regexp-test.js (revision 509)
@@ -0,0 +1,1003 @@
+var RegExp2 = jsx.regexp.RegExp;
+var String2 = jsx.regexp.String;
+
+function runTests ()
+{
+ var message = document.createElement("p");
+
+ function removeMessage ()
+ {
+ message.parentNode.removeChild(message);
+ message = null;
+ }
+
+ var _runAsync = jsx.dom.timeout.runAsync;
+ _runAsync(function () {
+ message.appendChild(document.createTextNode("Unit test in progress…"));
+
+ var hint = document.createElement("p");
+ var strong = document.createElement("strong");
+ strong.appendChild(document.createTextNode("See error console for details."));
+ hint.appendChild(strong);
+
+ var body = document.body;
+ body.appendChild(message);
+ body.appendChild(hint);
+ });
+
+ _runAsync(function () {
+ var assert = jsx.test.assert;
+ var assertTrue = jsx.test.assertTrue;
+ var assertFalse = jsx.test.assertFalse;
+ var out = [];
+
+ jsx.test.runner.run({
+ file: "regexp.js",
+ feature: "jsx.regexp.RegExp",
+ tests: [
+ {
+ feature: "jsx.regexp.toString2(RegExp),"
+ + " regexp.toString2()",
+ desc: "Return the literal that was used to create"
+ + " the <code>RegExp</code>, without delimiters"
+ + " and flags",
+ code: function () {
+ var s = "\\bfo?o+";
+ var rx = new RegExp(s);
+ assert(jsx.regexp.toString2(rx) === s);
+ assert(rx.toString2() === s);
+ }
+ },
+ {
+ feature: "jsx.regexp.concat(…),"
+ + " RegExp.prototype.concat(…)",
+ desc: "Concat <code>RegExp</code>s",
+ code: function () {
+ assert(jsx.regexp.concat(/foo/, /bar/).source == "foobar");
+ assert(/foo/.concat(/bar/).source == "foobar");
+ }
+ },
+ {
+ feature: "jsx.regexp.concat(…),"
+ + " RegExp.prototype.concat(…)",
+ desc: "Concat <code>RegExp</code>s, merge flags",
+ code: function () {
+ var rx = jsx.regexp.concat(/foo/, /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/m);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/m);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, /bar/);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, /bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/.concat(/bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/.concat(/bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/.concat(/bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/.concat(/bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/.concat(/bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/.concat(/bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/g.concat(/bar/);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/g.concat(/bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/g.concat(/bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/g.concat(/bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/g.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/g.concat(/bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/g.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/i.concat(/bar/);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/i.concat(/bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/i.concat(/bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/i.concat(/bar/m);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/i.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/i.concat(/bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/i.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/m.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gi.concat(/bar/);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/gi.concat(/bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/gi.concat(/bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/gi.concat(/bar/m);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gi.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = /foo/gi.concat(/bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gi.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/i);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gm.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gim.concat(/bar/);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gim.concat(/bar/g);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gim.concat(/bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gim.concat(/bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = /foo/gim.concat(/bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+ }
+ },
+ {
+ feature: "jsx.regexp.concat(…),"
+ + " RegExp.prototype.concat(…)",
+ desc: "Concat <code>RegExp</code>s and <code>String</code>s",
+ code: function () {
+ assert(jsx.regexp.concat(/foo/, "|", /bar/).source == "foo|bar");
+ assert(jsx.regexp.concat(/foo/, "|", "bar").source == "foo|bar");
+ assert(jsx.regexp.concat("foo", "|", "bar").source == "foo|bar");
+
+ assert(/foo/.concat("|", /bar/).source == "foo|bar");
+ assert(/foo/.concat("|", "bar").source == "foo|bar");
+ }
+ },
+ {
+ feature: "jsx.regexp.concat(…),"
+ + " RegExp.prototype.concat(…)",
+ desc: "Concat <code>RegExp</code>s and <code>String</code>s, merge flags",
+ code: function () {
+ var rx = jsx.regexp.concat(/foo/, "|", /bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/g, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/m);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/i, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/i);
+ assertTrue(!rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/m);
+ assertTrue(!rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/m, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/m);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && !rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gi, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/g);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/m);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/gm);
+ assertTrue(rx.global && !rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gm, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/g);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/i);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/m);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/gi);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/gm);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+
+ rx = jsx.regexp.concat(/foo/gim, "|", /bar/gim);
+ assertTrue(rx.global && rx.ignoreCase && rx.multiline);
+ }
+ },
+ {
+ feature: 'jsx.regexp.intersect(), /foo/.intersect(),'
+ + ' jsx.regexp.intersect(…)',
+ desc: "Return <code>null</code>",
+ code: function () {
+ assert(jsx.regexp.intersect() === null);
+ assert(/foo/.intersect() === null);
+ assert(jsx.regexp.intersect("foo") === null);
+ assert(jsx.regexp.intersect(/foo/) === null);
+ }
+ },
+ {
+ feature: "jsx.regexp.intersect(String, …)",
+ desc: "Return <code>null</code>",
+ code: function () {
+ assert(jsx.regexp.intersect("foo", "bar") === null);
+ assert(jsx.regexp.intersect("foo", /bar/) === null);
+ }
+ },
+ {
+ feature: "regexp.intersect(String)",
+ desc: "Return <code>null</code>",
+ code: function () {
+ assert(/foo/.intersect("bar") === null);
+ }
+ },
+ {
+ feature: "jsx.regexp.intersect(/foo/, /bar/),"
+ + " /foo/.intersect(/bar/)",
+ desc: 'Return <code>/()/</code>',
+ code: function () {
+ assert(jsx.regexp.intersect(/foo/, /bar/).source === "()");
+ assert(/foo/.intersect(/bar/).source === "()");
+ }
+ },
+ {
+ feature: "jsx.regexp.intersect(/foo|bar/, /baz|bar/),"
+ + " /foo|bar/.intersect(/baz|bar/)",
+ desc: 'Return <code>/(bar)/</code>',
+ code: function () {
+ assert(jsx.regexp.intersect(/foo|bar/, /baz|bar/).source == "(bar)");
+ assert(/foo|bar/.intersect(/baz|bar/).source == "(bar)");
+ }
+ },
+ {
+ feature: "jsx.regexp.intersect(/foo|bar|baz/, /baz|bla|bar/)",
+ desc: 'Return <code>/(bar|baz)/</code> or <code>/(baz|bar)/</code>',
+ code: function () {
+ var rx = jsx.regexp.intersect(/foo|bar|baz/, /baz|bla|bar/);
+ assert(rx.source == "(bar|baz)" || rx.source == "(baz|bar)");
+ }
+ },
+ {
+ name: 'Use statically loaded'
+ + ' <acronym title="Unicode Character Database"'
+ + '>UCD</acronym> (script)',
+ code: function () {
+ assert(typeof RegExp2.propertyClasses != "undefined");
+
+ var rx = new RegExp2("\\p{Zp}");
+ assert(rx.source == "[\u2029]");
+
+ if (!jsx.info(rx))
+ {
+ out.push(rx);
+ }
+ }
+ },
+ {
+ name: 'Load UCD dynamically with'
+ + ' <acronym title="XMLHttpRequest">XHR</acronym> (script)',
+ code: function () {
+ delete RegExp2.propertyClasses;
+ assert(typeof RegExp2.propertyClasses == "undefined");
+
+ var rx = new RegExp2("\\p{Zp}");
+ assert(rx.source == "[\u2029]");
+
+ if (!jsx.info(rx))
+ {
+ out.push(rx);
+ }
+ }
+ },
+ {
+ name: 'Load UCD dynamically with'
+ + ' <acronym title="XMLHttpRequest">XHR</acronym> (text)',
+ code: function () {
+ var propertyClasses = RegExp2.propertyClasses;
+ delete RegExp2.propertyClasses;
+ assert(typeof RegExp2.propertyClasses == "undefined");
+
+ var ucdScriptPath = RegExp2.ucdScriptPath;
+ delete RegExp2.ucdScriptPath;
+ assert(typeof RegExp2.ucdScriptPath == "undefined");
+ assert(typeof RegExp2.ucdTextPath == "string");
+
+ var rx;
+ jsx.tryThis(
+ function () {
+ rx = new RegExp2("\\p{Ll}");
+ },
+ function (e) {
+ jsx.error(e);
+ });
+
+ var classLl = "[" + RegExp2.propertyClasses["Ll"] + "]";
+ RegExp2.ucdScriptPath = ucdScriptPath;
+ RegExp2.propertyClasses = propertyClasses;
+ assert(rx && (rx.source == classLl));
+
+ if (!jsx.info(rx))
+ {
+ out.push(rx);
+ }
+ }
+ },
+ {
+ name: "Throw exception on undefined property class",
+ code: function () {
+ RegExp2.deletePropertyClass("Zp");
+ var thrown = false;
+ jsx.tryThis(
+ function () {
+ var rx = new RegExp2("\\p{Zp}");
+ if (!jsx.info(rx))
+ {
+ out.push(rx);
+ }
+ },
+ function (e) {
+ if (e.name == "jsx.regexp.UndefinedPropertyClassError")
+ {
+ thrown = true;
+ if (!jsx.info(e))
+ {
+ out.push(e);
+ }
+ }
+ else
+ {
+ jsx.rethrowThis(e);
+ }
+ });
+
+ assertTrue(thrown);
+ }
+ },
+ {
+ name: '<acronym title="Perl-Compatible Regular Expressions"'
+ + '>PCRE</acronym> option flags:'
+ + ' <code>x</code> (PCRE_EXTENDED)'
+ + ' – remove single-line comments'
+ + ' and unescaped whitespace',
+ code: function () {
+ var rx = new RegExp2(" x#foo\n\\ y#bar", "x");
+ assert(rx.source == "x y");
+ }
+ },
+ {
+ name: 'PCRE pattern-match modifiers <code>(?x)</code> and <code>(?-x)</code>',
+ code: function () {
+ var rx = new RegExp2("a b#foo\n(?-x)c d#bar\r\n(?x)d e#baz\r(?-x)f g", "x");
+ assert(rx.source == "abc d#bar\r\ndef g");
+ }
+ },
+ {
+ name: 'PCRE combined pattern-match modifier <code>(?x-x)</code>'
+ + ' (no change)',
+ code: function () {
+ var rx = new RegExp2("(?x-x)a b#foo");
+ assert(rx.source == "a b#foo");
+ }
+ },
+ {
+ name: "PCRE option flags: <code>extended</code> property",
+ code: function () {
+ assertFalse(new RegExp2("\\w", "").extended);
+ assertTrue(new RegExp2("\\w", "x").extended);
+ }
+ },
+ {
+ name: "PCRE option flags: <code>s</code> (PCRE_DOTALL)"
+ + " – <code>.</code> matches newline too",
+ code: function () {
+ var rx = new RegExp2(".", "s");
+ assert(rx.source == "[\\S\\s]");
+
+ assert("\n".match(rx)[0] == "\n");
+ }
+ },
+ {
+ name: 'PCRE pattern-match modifiers <code>(?s)</code> and <code>(?-s)</code>',
+ code: function () {
+ var rx = new RegExp2("a.b(?-s)c.d(?s)e.f", "s");
+ assert(rx.source == "a[\\S\\s]bc.de[\\S\\s]f");
+
+ assert(("a\nbc.de\nf".match(rx) || [])[0] === "a\nbc.de\nf");
+ assert("a\nbc\nde\nf".match(rx) === null);
+ }
+ },
+ {
+ name: 'PCRE combined pattern-match modifier <code>(?s-s)</code>'
+ + ' (no change)',
+ code: function () {
+ var rx = new RegExp2("a.b(?s-s)c.de.f");
+ assert(rx.source == "a.bc.de.f");
+ }
+ },
+ {
+ name: "PCRE option flags: <code>dotAll</code> property",
+ code: function () {
+ assertFalse(new RegExp2("\\w", "").dotAll);
+ assertTrue(new RegExp2("\\w", "s").dotAll);
+ }
+ },
+ {
+ name: "PCRE named subpatterns: <code>?&lt;name&gt;</code>"
+ + "(Perl style)",
+ code: function () {
+ var rx = new RegExp2("(?<foo>bar)");
+ assert(rx.groups[1] === "foo");
+
+ assert(rx.exec("bar").groups.foo === "bar");
+
+ var m = new String2("bar").match(rx);
+ assert(m.groups.foo === "bar");
+ }
+ },
+ {
+ name: "PCRE named subpatterns: <code>?'name'</code>"
+ + " (Perl style)",
+ code: function () {
+ var rx = new RegExp2("(?P'foo'bar)");
+ assert(rx.groups[1] === "foo");
+
+ assert(rx.exec("bar").groups.foo === "bar");
+
+ var s = new String2("bar");
+ var m = s.match(rx);
+ assert(m.groups.foo === "bar");
+ }
+ },
+ {
+ name: "PCRE named subpatterns: <code>?P&lt;name&gt;</code>"
+ + " (Python style)",
+ code: function () {
+ var rx = new RegExp2("(?P<foo>bar)");
+ assert(rx.groups[1] === "foo");
+
+ assert(rx.exec("bar").groups.foo === "bar");
+
+ var s = new String2("bar");
+ var m = s.match(rx);
+ assert(m.groups.foo === "bar");
+ }
+ },
+ {
+ name: "PCRE named subpatterns with modifiers: <code>(?sx'name'…)</code>"
+ + " (Perl style)",
+ code: function () {
+ var rx = new RegExp2("(?s'foo'.)");
+ assert(rx.source === "([\\S\\s])");
+ assert(rx.groups[1] === "foo");
+ assert(rx.names["foo"] === 1);
+ }
+ },
+ {
+ name: "PCRE named subpatterns with modifiers: <code>(?sx<name>…)</code>"
+ + " (Python style)",
+ code: function () {
+ var rx = new RegExp2("(?s<foo>.)");
+ assert(rx.source === "([\\S\\s])");
+ assert(rx.groups[1] === "foo");
+ assert(rx.names["foo"] === 1);
+ }
+ },
+ {
+ name: "Unicode mode: <code>unicodeMode</code> property",
+ code: function () {
+ assertFalse(new RegExp2("\\w", "").unicodeMode);
+ assertTrue(new RegExp2("\\w", "u").unicodeMode);
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\d</code> matches non-ASCII digit",
+ code: function () {
+ var rx = new RegExp2("\\d", "u");
+ assert(rx.exec("\uFF19") != null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>[\\d]</code> matches non-ASCII digit",
+ code: function () {
+ var rx = new RegExp2("[\\d]", "u");
+ assert(rx.exec("\uFF19") != null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\s</code> matches non-ASCII whitespace",
+ code: function () {
+ var rx = new RegExp2("\\s", "u");
+ assert(rx.exec("\u3000") != null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>[\\s]</code> matches non-ASCII whitespace",
+ code: function () {
+ var rx = new RegExp2("[\\s]", "u");
+ assert(rx.exec("\u3000") != null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\w</code> matches non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("\\w", "u");
+ assert(rx.exec("ä") != null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>[\\w]</code> matches"
+ + " non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("[\\w]", "u");
+ assert((rx.exec("ä") || [])[0] == "ä");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\W</code> does not match"
+ + " non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("\\W", "u");
+ assert(rx.exec("ä") === null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>[\\W]</code> does not match"
+ + " non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("[\\W]", "u");
+ assert(rx.exec("ä") === null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>[^\\W]</code> matches"
+ + " non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("[^\\W]", "u");
+ assert((rx.exec("ä") || [])[0] == "ä");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> matches"
+ + " at the start of input",
+ code: function () {
+ var rx = new RegExp2("\\ba", "u");
+ assert((rx.exec("a") || [])[0] === "a");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> matches"
+ + " after initial opening group parenthesis",
+ code: function () {
+ assert(((new RegExp2("(\\ba)", "u")).exec("a") || [])[0] === "a");
+ assert(((new RegExp2("(?:\\ba)", "u")).exec("a") || [])[0] === "a");
+ assert(((new RegExp2("(?<foo>\\ba)", "u")).exec("a") || [])[0] === "a");
+ assert(((new RegExp2("(?'foo'\\ba)", "u")).exec("a") || [])[0] === "a");
+ assert(((new RegExp2("(?P<foo>\\ba)", "u")).exec("a") || [])[0] === "a");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> matches"
+ + " at the end of input",
+ code: function () {
+ var rx = new RegExp2("a\\b", "u");
+ assert((rx.exec("a") || [])[0] === "a");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> does not"
+ + " match after non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("\\ba", "u");
+ assert(rx.exec("äa") === null);
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> does not"
+ + " match before non-ASCII letter",
+ code: function () {
+ var rx = new RegExp2("a\\b", "u");
+ assert(rx.exec("aä") === null);
+ }
+ },
+ {
+ feature: '(new jsx.regex.RegExp(…, "u")).exec(String)',
+ name: "Unicode mode: <code>\\b</code> matches"
+ + " after non-letter, match is trimmed",
+ code: function () {
+ var rx = new RegExp2("\\bä", "u");
+ assert((rx.exec(" ä") || [])[0] === "ä");
+ }
+ },
+ {
+ name: "Unicode mode: <code>\\b</code> matches"
+ + " before non-letter",
+ code: function () {
+ var rx = new RegExp2("ä\\b", "u");
+ assert((rx.exec("ä ") || [])[0] === "ä");
+ }
+ },
+ {
+ feature: 'jsx.regexp.RegExp(…, "su"))',
+ desc: "Unicode mode: <code>.</code> works with PCRE_DOTALL",
+ code: function () {
+ var rx = new RegExp2("x.y", "su");
+ assert(rx.source === "x[\\S\\s]y");
+ }
+ },
+ {
+ feature: "jsx.regexp.RegExp.exec(jsx.regexp.RegExp, String)",
+ desc: "Unicode mode: <code>\\b</code> match"
+ + " before non-ASCII letter is trimmed",
+ code: function () {
+ var rx = new RegExp2("\\bä", "u");
+ assert((RegExp2.exec(" ä", rx) || [])[0] === "ä");
+ }
+ },
+ {
+ feature: 'new jsx.regexp.String(String)',
+ desc: "Convert correctly",
+ code: function () {
+ var s = new jsx.regexp.String("bar");
+ assert(s == "bar");
+ assert("bar" == s);
+ assertFalse(s === "bar");
+ assertFalse("bar" === s);
+ }
+ },
+ {
+ feature: 'jsx.regexp.String.prototype.match(new jsx.regexp.RegExp(…, "u"))',
+ desc: "Unicode mode: <code>\\b</code> match"
+ + " before non-ASCII letter is trimmed (all captures)",
+ code: function () {
+ var rx = new RegExp2("(\\bä)", "u");
+ var m = (new String2(" ä")).match(rx);
+ assertTrue(m[0] === "ä" && m[1] === "ä");
+ }
+ },
+ {
+ feature: 'jsx.regexp.String.prototype.match(new jsx.regexp.RegExp(…, "gu"))',
+ desc: "Unicode mode: <code>\\b</code> match"
+ + " before non-ASCII letter is trimmed (all matches)",
+ code: function () {
+ var rx = new RegExp2("\\b\\w", "gu");
+ var m = new String2(" ä ö").match(rx);
+ assert(m[0] === "ä" && m[1] === "ö");
+ }
+ },
+ {
+ feature: 'jsx.regexp.String.prototype.replace(jsx.regexp.RegExp), String)',
+ desc: "Named backreferences are supported",
+ code: function () {
+ var rx = new RegExp2(" (?'foo'ä) ö", "g");
+ var s = new String2(" ä ö").replace(rx, "${foo}");
+ assert(s === "ä");
+ }
+ },
+ {
+ feature: 'jsx.regexp.String.prototype.replace(jsx.regexp.RegExp, Function)',
+ desc: "Named backreferences are supported",
+ code: function () {
+ var rx = new RegExp2(" (?'foo'ä) ö", "g");
+ var s = new String2(" ä ö").replace(rx, function () {
+ return this.groups["foo"];
+ });
+ assert(s === "ä");
+ }
+ }
+ ]
+ });
+
+ removeMessage();
+
+ if (out.length > 0)
+ {
+ window.alert(out.join("\n"));
+ }
+ });
+}
\ No newline at end of file
/live/test/regexp-test.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/regexp.php
===================================================================
--- live/test/regexp.php (nonexistent)
+++ live/test/regexp.php (revision 509)
@@ -0,0 +1,30 @@
+<?php header('Content-Type: text/html; charset=utf8'); ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>regexp.js Test Case</title>
+ <style type="text/css">
+ <!--
+ [title] {
+ border-bottom: 1px dotted #666;
+ cursor: help;
+ }
+ -->
+ </style>
+ <script type="text/javascript"
+ src="../builder?src=object,string/unicode,dom,dom/timeout,test/test,http&amp;verbose=1"></script>
+ <script type="text/javascript" src="../regexp.js"></script>
+ <script type="text/javascript" src="../UnicodeData.js"></script>
+ <script type="text/javascript" src="regexp-test.js"></script>
+ </head>
+
+ <body>
+ <h1><tt>regexp.js</tt> Unit&nbsp;Test</h1>
+ <div><a href="view-source:http://<?php
+ echo $_SERVER['HTTP_HOST'] . htmlspecialchars($_SERVER['REQUEST_URI']);
+ ?>">View source</a></div>
+ <script type="text/javascript">runTests()</script>
+ </body>
+</html>
\ No newline at end of file
/live/test/regexp.php
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/debug.js
===================================================================
--- live/test/debug.js (nonexistent)
+++ live/test/debug.js (revision 509)
@@ -0,0 +1,2408 @@
+/**
+ * <title>Debug Library<title>
+ *
+ * @filename debug.js
+ * @version $Id$
+ * @requires object.js, types.js, array.js (for #Properties)
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2001‒2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+jsx.debug = {
+ /** @version */
+ version: "0.99.$Revision$",
+ copyright: "Copyright \xA9 1999-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://pointedears.de/scripts/test/",
+ enabled: false
+};
+
+// debug.docURL = debug.path + "../debug.htm";
+
+/* global undefined value (for implementations without it) */
+var undefined;
+
+/** @section Exceptions */
+
+/**
+ * @param msg : string
+ */
+function DebugException(msg)
+{
+ alert(
+ "debug.js "
+ + jsx.debug.version + "\n"
+ + jsx.debug.copyright
+ + " " + jsx.debug.author
+ + " <" + jsx.debug.email + ">\n\n"
+ + msg);
+ return false;
+}
+
+/** @section Features */
+
+/**
+ * Returns a value depending on whether an expression evaluates to
+ * a true-value or a false-value.
+ *
+ * @param expression
+ * Expression to be evaluated. Parsed as a <i>Program</i> if a
+ * <code>String</code>.
+ * @param trueValue
+ * The value to be returned if <var>expression</var> evaluates to
+ * a true-value; the default is the empty string.
+ * @param falseValue
+ * The value to be returned if <var>expression</var> evaluates to
+ * a false-value; the default is the empty string.
+ * @return mixed
+ * <var>trueValue</var> if <var>expression</var> evaluates to
+ * a true-value; <var>falseValue</var> otherwise.
+ * @see Global#eval(String)
+ */
+jsx.debug.test = function (expression, trueValue, falseValue) {
+ var sDefault = "";
+ var result = sDefault;
+
+ jsx.setErrorHandler();
+
+ /* NOTE: Must pass "false" so that any exception is considered failure */
+ if (jsx.tryThis(expression, "false"))
+ {
+ result = (arguments.length > 1 ? trueValue : sDefault);
+ }
+ else
+ {
+ result = (arguments.length > 2 ? falseValue : sDefault);
+ }
+
+ jsx.clearErrorHandler();
+ return result;
+};
+
+if (typeof test2 == "undefined")
+{
+ /**
+ * @param sExpression : string
+ * @param sTest : string
+ * @param expected
+ * @return mixed
+ */
+ var test2 = function (sExpression, sTest, expected)
+ {
+ var out = new Array(), result;
+
+ if (sExpression)
+ {
+ out.push(sExpression);
+ }
+
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' eval(sExpression.replace(/\\bvar\\s+/g, ""));',
+ ' try {',
+ ' result = eval(sTest.replace(/\\bvar\\s+/g, ""));',
+ " out.push('// ' + sTest + ' === ' + result",
+ " + ' (expected: ' + expected + ')');",
+ ' } catch(e) {',
+ " out.push('// ' + sTest + ' \\u21d2 ' + e.name + ': '",
+ " + e.message);",
+ ' }',
+ '} catch(e) {',
+ " out.push('// ' + sExpression + ' \\u21d2 ' + e.name + ': '",
+ " + e.message);",
+ '}').join("\n"));
+ clearErrorHandler();
+
+ document.write(out.join('\n') + '\n\n');
+
+ return result;
+ };
+}
+/*
+var o;
+test('var o = {foo: 23};', 'o.foo', 23);
+test('addProperties({foo: 42}, o);', 'o.foo', 23);
+test('addProperties({foo: 42}, Object.ADD_OVERWRITE, o);', 'o.foo', 42);
+
+var o2;
+test(new Array(
+ 'var o2 = {x: 42};',
+ 'addProperties({bar: o2}, Object.ADD_OVERWRITE, o);').join('\n'),
+ 'o.bar.x', 42);
+test('o2.x = null;', 'o.bar.x', null);
+test(new Array(
+ 'o2 = {x: 42};',
+ 'addProperties({baz: o2}, Object.COPY_ENUM_DEEP, o);').join('\n'),
+ 'o.baz.x', 42);
+test('o2.x = null;', 'o.baz.x', '!= null (TODO)');
+*/
+
+//if (!isMethod("profile"))
+//{
+// /**
+// * @param s
+// * @return
+// */
+// var profile = function (s) {
+// var me = arguments.callee;
+// me.start = new Date();
+// me.description = s || "";
+// };
+//
+// if (!isMethod("profileEnd"))
+// {
+// /**
+// * @return string
+// */
+// var profileEnd = function () {
+// var
+// descr = profile.description,
+// msg = (descr ? (descr + ": ") : "") + (new Date() - profile.start)
+// + " ms";
+//
+// if (isMethod("window", "alert"))
+// {
+// window.alert(msg);
+// }
+//
+// delete profile.start;
+// delete profile.description;
+//
+// return msg;
+// };
+// }
+//}
+
+/**
+ * Returns evaluation statistics.
+ *
+ * @param expr : string|Array
+ * Expression or array of expressions to be evaluated.
+ * @param bPrintResult : optional boolean = false
+ * If <code>true</code>, the method returns a printable result.
+ * @param loops : optional number = 1
+ * Specifies the number of times the expression should be evaluated.
+ * @param repeats : optional number = 1
+ * Specifies the number of times the evaluation loop(s) of the expression
+ * should be repeated. If greater than 1, the method also returns the
+ * minimum, maximum and average of the evaluation time.
+ * @return Array|string
+ * An array containing the number of milliseconds the evaluation of the
+ * expression(s) took if bPrintResult is <code>false</code>;
+ * a human-readable table string to indicate the test results otherwise.
+ * @requires types#isArray()
+ */
+function time(expr, bPrintResult, loops, repeats)
+{
+ if (!isArray(expr))
+ {
+ expr = [expr];
+ }
+
+ if (!loops || loops < 1)
+ {
+ loops = 1;
+ }
+
+ if (!repeats || repeats < 1)
+ {
+ repeats = 1;
+ }
+
+ var
+ result = ["Expressions:\n\n"],
+ stats = [];
+
+ /* loop through expressions */
+ for (var i = 0, cnt = expr.length; i < cnt; i++)
+ {
+ var cur_expr = expr[i];
+ if (bPrintResult)
+ {
+ result.push("[", i + 1, "] ", cur_expr, "\n");
+ }
+
+ /* reset stats for this expression */
+ var repeat_stats = stats[i] = [];
+
+ /* repeat loops */
+ for (var j = 0; j < repeats; j++)
+ {
+ /* reset stats for this repeat */
+ repeat_stats[j] = -1;
+ var eval_loop_start = new Date();
+
+ /* repeat evaluation */
+ for (var k = 0; k < loops; k++)
+ {
+ jsx.tryThis(function () { expr[i]; });
+ }
+
+ repeat_stats[j] = new Date() - eval_loop_start;
+ }
+ }
+
+ if (bPrintResult)
+ {
+ // debugger
+ result.push(
+ "\nEvaluation Results (ms):\n\n\\",
+ pad("n|", cnt.toString().length - 1));
+
+ var col_width = Math.maxN(repeats, stats).toString().length + 1;
+
+ for (j = 0; j < repeats; j++)
+ {
+ result.push(format("%*2$d", j + 1, col_width));
+ }
+
+ var expr_width = (cnt + 1).toString().length;
+
+ result.push(
+ format("\xA0%*4$s\xA0%*4$s\xA0%*4$s\n", "min", "max", "avg", col_width),
+ format("%*2$d\\|", "e", expr_width),
+ strRepeat("_", col_width * repeats),
+ "\n");
+
+ /* loop through expressions */
+ for (i = 0; i < cnt; i++)
+ {
+ result.push(format("%*2$d|", i + 1, expr_width < 2 ? 2 : expr_width));
+
+ for (j = 0; j < repeats; j++)
+ {
+ result.push(format("%*2$d", stats[i][j], col_width));
+ }
+
+ result.push(
+ format(
+ "\xA0%*4$s\xA0%*4$s\xA0%*4$s\n",
+ Math.minN(stats[i]),
+ Math.maxN(stats[i]),
+ Math.avgN(stats[i]).toFixed(1),
+ col_width));
+ }
+
+ result = result.join("");
+ }
+ else
+ {
+ result = stats;
+ }
+
+ return result;
+}
+
+function time2(aFunctions, repeats)
+{
+ if (!aFunctions)
+ {
+ jsx.throwThis(
+ "TypeError",
+ "benchmark: Expected aFunctions : Function|Array, saw " + aFunctions
+ + " : " + typeof aFunctions);
+ }
+
+ if (aFunctions.constructor != Array)
+ {
+ aFunctions = [aFunctions];
+ }
+
+ var results = [];
+
+ for (var i = 0, len = aFunctions.length; i < len; i++)
+ {
+ var
+ f = aFunctions[i],
+ start = new Date();
+
+ for (var j = repeats; j--;)
+ {
+ f();
+ }
+
+ results[i] = {
+ code: f,
+ duration: new Date() - start
+ };
+ }
+
+ return results;
+}
+
+/**
+ * @param e : Error
+ * @return string
+ * Serialization of error properties and stack trance, if available.
+ */
+function getError(e)
+{
+ var sError = e;
+
+ if (typeof e.name != "undefined")
+{
+ sError += "\nName: " + e.name;
+}
+
+if (typeof e.number != "undefined")
+{
+ sError += "\nCode: " + e.number;
+}
+
+if (typeof e.message != "undefined")
+{
+ sError += "\nMessage: " + e.message;
+}
+
+if (typeof e.description != "undefined")
+{
+ sError += "\nDescription: " + e.description;
+}
+
+if (typeof e.fileName != "undefined")
+{
+ sError += "\nFilename: " + e.fileName;
+}
+
+jsx.setErrorHandler();
+eval(new Array(
+ 'try {',
+ ' if (e.lineNumber) {',
+ ' sError += "\\nLine: " + e.lineNumber;',
+ ' }',
+ '} catch (e2) {',
+ ' sError += "\\nLine: " + e2;',
+ '}').join("\n"));
+jsx.clearErrorHandler();
+
+if (typeof e.stack != "undefined")
+{
+ sError += "\nStack:\n" + e.stack;
+ }
+
+ return sError;
+}
+
+/**
+ * Returns the type of a reference and, if possible, of its object properties
+ * (nested only one level deep), and optionally displays that in an alert()
+ * box.
+ *
+ * @param a
+ * Value to be displayed along with its type. If a string or an array of
+ * strings and bDontEval is not provided or false, each string is evaluated
+ * using eval() and that value is used.
+ * @param bDontAlert : boolean = false
+ * If <code>true</code>, returns the value instead of displaying it.
+ * @param bDontEval : boolean
+ * If <code>true</code>, does not evaluate arguments but uses their value.
+ * @requires jsx.types#isArray()
+ * @return string
+ * Serialization of the value(s)
+ */
+function alertValue(a, bDontAlert, bDontEval)
+{
+ if (!isArray(a))
+ {
+ a = [a];
+ }
+
+ for (var as = [], i = 0, len = a.length; i < len; i++)
+ {
+ var
+ o = !bDontEval ? eval(a[i]) : a[i],
+ t = typeof o,
+ delim = (t == "string" ? '"' : ''),
+ s = delim + a[i] + delim + " : " + t + " = " + delim + o + delim;
+
+ if (t == "object" || t == "function")
+ {
+ for (var j in o)
+ {
+ t = typeof o[j];
+ delim = (t == "string" ? '"' : '');
+ s += "\n" + a[i] + '["' + j + '"] : ' + t + " = "
+ + delim + o[j] + delim;
+ }
+ }
+
+ as.push(s);
+}
+
+var result = as.join("\n");
+
+ if (!bDontAlert)
+ {
+ window.alert(result);
+ }
+
+ return result;
+}
+
+
+/*
+ * JavaScript Beautifier and Uglyfier ;-)
+ *
+ * Test input:
+
+javascript:
+ function resizeToHelp()
+ {
+ alert("Usage: resizeTo clientWidth [clientHeight]");
+ };
+
+ if ("%s".length > 0)
+ {
+ var a = "%s".split(" ");
+ if (a[0] && !isNaN(a[0]))
+ {
+ void (window.innerWidth=parseInt('%s'.split(' ')[0]);
+ }
+ else
+ {
+ resizeToHelp();
+ }
+
+ if (a[1] && !isNaN(a[1]))
+ {
+ void (window.innerHeight=parseInt(a[0]));
+ }
+ else
+ {
+ resizeToHelp();
+ }
+ }
+ else
+ {
+ resizeToHelp();
+ }
+
+ */
+/**
+ * @param s : string
+ * @return string
+ * The beautified version of <var>s</var>
+ */
+function beautify(s)
+{
+ return s
+ .replace(/(\s*\{\s*)/g, "\n$1\n ")
+ .replace(/(\s*\}([^,;])\s*)/g, "\n$1\n")
+ .replace(/,([^\s])/g, ", $1")
+ .replace(/([^}]?;\s*)/g, "$1\n");
+}
+
+//alert(beautify('javascript:function resizeToHelp() { alert("Usage: resizeTo clientWidth [clientHeight]"); } if ("%s".length > 0) { var a = "%s".split(" "); if (a[0] && !isNaN(a[0])) { void (window.innerWidth=parseInt(a[0])); if (a[1] && !isNaN(a[1])) { void (window.innerHeight=parseInt(a[1])); } else resizeToHelp(); } else resizeToHelp(); } else resizeToHelp();'));
+
+/**
+ * @param s : string
+ * @return string
+ * <var>s</var> with all whitespace reduced to a single space
+ */
+function uglyfy(s)
+{
+ return s.replace(/\s/g, " "); // .replace
+}
+
+
+// DEBUG
+// var rxCode;
+
+jsx.debug.synhlMatches = [
+ [ 1, 'comm'],
+ [ 4, 'scr'],
+ [ 7, 'regexp'],
+ [ 9, 'tag'],
+ [11, 'str'],
+ // [14, 'entity'],
+ [15, 'rswd'],
+ [18, 'ident'],
+ [21, 'punct'],
+ [22, 'num']
+];
+
+/**
+ * Applies syntax highlighting on contents of <code>code</code>
+ * elements unless their <code>class</code> attribute has the
+ * value "donthl", or on the given context if provided.
+ *
+ * Requires support for the (currently proprietary)
+ * <code>innerHTML</code> property of element objects
+ * if no arguments are provided or if a {@link Node}
+ * argument is provided.
+ *
+ * @param context : Node|String
+ * Reference to the context node or a text string to be
+ * syntax-highlighted. The default is the <code>document</code>
+ * node.
+ * @return string
+ * @see jsx.object#isMethod()
+ */
+var synhl = (function () {
+ var
+ jsx_debug = jsx.debug,
+ jsx_object = jsx.object,
+ _isMethod = jsx_object.isMethod,
+ _getFeature = jsx_object.getFeature,
+ reservedWords = [
+ /* ES5 keywords */
+ "break", "case", "catch", "continue", "debugger", "default", "delete",
+ "do", "else", "finally", "for( +each)?", "function", "if", "in",
+ "instanceof", "new", "return", "switch", "this", "throw", "try",
+ "typeof", "var", "void", "while", "with",
+
+ /* ES5 future reserved words */
+ "class", "const", "enum", "export", "extends", "super",
+
+ /* ES5 future reserved words in strict mode */
+ "implements", "interface", "let", "package", "private", "protected",
+ "public", "static", "yield",
+
+ /* ES5 special words not specified as reserved */
+ "get", "set", "null", "true", "false", "undefined",
+
+ /* ES4 additional keywords */
+ "abstract", "final", "import", "internal",
+
+ /* ES4 additional data types */
+ "boolean", "byte", "char", "decimal", "double", "float", "int",
+ "long", "sbyte", "short",
+
+ /* JScript keywords */
+ "expando", "hide", "override", "endif"
+ ],
+
+ identifiers = [
+ "(encode|decode)URI(Component)?", "undefined",
+ "Object", "prototype", "__defineGetter__", "__defineSetter__",
+ "__iterator__", "__proto__", "constructor", "hasOwnProperty",
+ "isPrototypeOf", "propertyIsEnumerable",
+ "Array", "concat", "every", "indexOf", "join", "length", "pop", "push",
+ "reverse", "shift", "slice", "some", "sort", "splice", "unshift",
+ "Boolean",
+ "Date", "getFullYear", "getMilliseconds", "getUTCDate", "getUTCDay",
+ "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes",
+ "getUTCMonth", "getUTCSeconds", "getVarDate", "setFullYear",
+ "setMilliseconds", "setUTCDate", "setUTCDay", "setUTCFullYear",
+ "setUTCHours", "setUTCMilliseconds", "setUTCMinutes", "setUTCMonth",
+ "setUTCSeconds",
+ "Function", "arguments", "arity", "apply", "call", "callee", "caller",
+ "toSource",
+ "Math", "max", "min",
+ "Number", "MAX_VALUE", "MIN_VALUE", "NEGATIVE_INFINITY",
+ "POSITIVE_INFINITY",
+ "Error", "description", "message", "name", "number", "stack",
+ "RegExp", "compile", "exec", "global", "ignoreCase", "index",
+ "multiline", "source",
+ "String",
+ "close", "next", "send",
+ "Iterator",
+ "ActiveXObject", "Enumerator", "GetObject", "isFinite", "print",
+ "VBArray",
+ "XMLHttpRequest",
+ "document", "write",
+ "window", "clearInterval", "clearTimeout", "setInterval", "setTimeout"
+ ],
+
+ bUnicode = ("\uFFFD".length == 1),
+
+ sElementType = (
+ "[:\\w[UNICODE_START]]"
+ + "[:\\w[UNICODE_START].\\d[UNICODE_NAME]-]*"
+ )
+ .replace(
+ /\[UNICODE_START\]/g,
+ bUnicode
+ ? "\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D"
+ + "\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF"
+ + "\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"
+ : "")
+ .replace(
+ /\[UNICODE_NAME\]/,
+ bUnicode ? "\u00B7\u0300-\u036F\u203F-\u2040" : ""),
+
+ sOptAttr = "(\\s+[^>]+|)",
+
+ rxCode = new RegExp(
+ "(//.*|/\\*([^*/]|\\*[^/]|/)*\\*/)"
+ + "|(&lt;/?script(.|\\r?\\n|\\r)*?&gt;|^script$)"
+ + "|(^|[^<])(/(</[^>]*>|[^/\\\\\\[]|\\\\.|\\[[^\\]]*\\])+/)"
+ + "|</?" + sElementType + sOptAttr + ">"
+ + "|(&lt;/?" + sElementType + sOptAttr + "&gt;)"
+ + "|('([^'\\\\]|\\\\.)*'" + '|"([^"\\\\]|\\\\.)*")'
+ + "|(&amp;#?[0-9A-Za-z]+;)|&#?[0-9A-Za-z]+;"
+ + "|([\\{\\}]|\\b(" + reservedWords.join("|") + ")\\b(?!>))"
+ + "|\\b(" + identifiers.join("|") + ")\\b"
+ + "|([.:\\[\\]\\(\\),;])"
+ + "|\\b(0x[0-9A-Fa-f]+|[0-9]+|Infinity|NaN)\\b",
+ "g"),
+
+ aReplace = jsx.debug.synhlMatches,
+
+ fReplace = (function () {
+ var len = aReplace.length;
+
+ return function (match) {
+ for (var i = 0; i < len; ++i)
+ {
+ var r = aReplace[i];
+
+ if (arguments[r[0]])
+ {
+ return '<span class="' + r[1] + '">' + match + '<\/span>';
+ }
+ }
+
+ return match;
+ };
+ }());
+
+// /**
+// * @param node : Node
+// * @param needle : string
+// * @param replacement : string
+// */
+// var recursiveReplace = function (node, needle, replacement) {
+// if (node.nodeType == Node.ELEMENT_NODE)
+// {
+// for (var i = 0, cs = node.childNodes, len = cs.length; i < len; i++)
+// {
+// arguments.callee(cs[i], needle, replacement);
+// }
+// }
+// else if (node.nodeType == Node.TEXT_NODE)
+// {
+// var v = node.nodeValue;
+// var m = v.match(needle);
+// if (m)
+// {
+// var mLength = m[0].length;
+// var prefix = document.createTextNode(v.substring(0, m.index));
+// var suffix = document.createTextNode(v.slice(m.index + mLength));
+// var infix = document.createTextNode(v.slice(m.index, mLength));
+// var span = document.createElement("span");
+// span.style.color = "red";
+// span.appendChild(infix);
+// var parentNode = node.parentNode;
+// var nextSibling = node.nextSibling;
+// parentNode.removeChild(node);
+// parentNode.insertBefore(suffix, nextSibling);
+// parentNode.insertBefore(span, suffix);
+// parentNode.insertBefore(prefix, span);
+// }
+// }
+// };
+
+ return function (context) {
+ if (jsx_debug.enabled && _isMethod("console", "profile"))
+ {
+ console.profile("synhl()");
+ }
+
+ if (_isMethod(context, "valueOf")
+ && typeof context.valueOf() == "string")
+ {
+ var passedCode = context;
+ context = {
+ getElementsByTagName: function () {
+ return [{innerHTML: passedCode}];
+ }
+ };
+ }
+ else if (!context)
+ {
+ context = document;
+ }
+
+ var jsx_xpath = _getFeature(jsx, "dom", "xpath");
+ if (jsx.object.isNativeMethod(jsx_xpath, "evaluate"))
+ {
+ var collCode = jsx_xpath.evaluate(
+ '//code[not(contains(concat(" ", @class, " "), " donthl "))]',
+ context);
+ }
+
+ var useXPath = false;
+ if ((collCode && (useXPath = true)
+ || (_isMethod(context, "getElementsByTagName")
+ && (collCode = context.getElementsByTagName('code'))))
+ && collCode.length)
+ {
+ var sNew;
+
+ for (var i = collCode.length; i--;)
+ {
+ var o = collCode[i];
+ if (useXPath || !/(^\s*|\s+)donthl(\s*$|\s+)/.test(o.className))
+ {
+ if (typeof o.innerHTML != "undefined")
+ {
+ var s = o.innerHTML;
+ jsx.tryThis(
+ function () {
+ o.innerHTML = sNew = s.replace(rxCode, fReplace);
+ },
+ function () {
+ sNew = s;
+ });
+ }
+ else
+ {
+ // recursiveReplace(o, ...)
+ }
+ }
+ }
+ }
+
+ if (jsx_debug.enabled && _isMethod("console", "profileEnd"))
+ {
+ console.profileEnd();
+ }
+
+ return sNew;
+ };
+}());
+
+/**
+ * Returns a string or the HTML content of a {@link Node}
+ * with all syntax highlighting removed that was added
+ * with <code>synhl</code> before.
+ *
+ * Requires support for the (currently proprietary)
+ * <code>innerHTML</code> property of element objects
+ * if no arguments are provided or if a {@link Node}
+ * argument is provided. Unlike {@link #synhl}, the
+ * content of elements is <em>not</em> modified.
+ *
+ * @param context : Node|String
+ * Reference to the context node or a text string that
+ * contains syntax highlighting. The default is the
+ * <code>document</code> node.
+ * @return string
+ * @see jsx.object#isMethod()
+ */
+var unsynhl = (function () {
+ var _jsx = jsx;
+ var _tryThis = _jsx.tryThis;
+ var _jsx_object = _jsx.object;
+ var _isMethod = _jsx_object.isMethod;
+ var _getFeature = _jsx_object.getFeature;
+ var _jsx_debug = _jsx.debug;
+
+ var synhlClasses = _jsx.array.map(
+ _jsx_debug.synhlMatches, function (e) { return e[1]; });
+ var rxSynhlClasses = new RegExp(
+ '<span class="(' + synhlClasses.join("|") + ')">([^<]+)</span>', 'g');
+
+ return function (context) {
+ if (_jsx_debug.enabled && _isMethod("console", "profile"))
+ {
+ console.profile("unsynhl()");
+ }
+
+ if (_isMethod(context, "valueOf")
+ && typeof context.valueOf() == "string")
+ {
+ var passedCode = context;
+ context = {
+ getElementsByTagName: function () {
+ return [{innerHTML: passedCode}];
+ }
+ };
+ }
+ else if (!context)
+ {
+ context = document;
+ }
+
+ var jsx_xpath = _getFeature(_jsx, "dom", "xpath");
+ if (_jsx_object.isNativeMethod(jsx_xpath, "evaluate"))
+ {
+ var collCode = jsx_xpath.evaluate(
+ '//code[not(contains(concat(" ", @class, " "), " donthl "))]',
+ context);
+ }
+
+ var useXPath = false;
+ if ((collCode && (useXPath = true)
+ || (_isMethod(context, "getElementsByTagName")
+ && (collCode = context.getElementsByTagName('code'))))
+ && collCode.length)
+ {
+ var sNew;
+
+ for (var i = collCode.length; i--;)
+ {
+ var o = collCode[i];
+ if (useXPath || !/(^\s*|\s+)donthl(\s*$|\s+)/.test(o.className))
+ {
+ if (typeof o.innerHTML != "undefined")
+ {
+ var s = o.innerHTML;
+ _tryThis(
+ function () {
+ sNew = s.replace(rxSynhlClasses, "$2");
+ },
+ function () {
+ sNew = s;
+ });
+ }
+ else
+ {
+ // recursiveReplace(o, ...)
+ }
+ }
+ }
+ }
+
+ if (_jsx_debug.enabled && _isMethod("console", "profileEnd"))
+ {
+ console.profileEnd();
+ }
+
+ return sNew;
+ };
+}());
+
+/**
+ * Stores references to objects in an array
+ * to be used for the Property constructor.
+ *
+ * @param aOwners : optional [Object...]
+ * Array of the owner references to store. The
+ * default is an array with <code>null</code> as
+ * sole element.
+ * @property items : Array
+ */
+function Owners(aOwners)
+{
+ this.items = aOwners || new Array(null);
+}
+
+/**
+ * Retrieves type of the object or property specified by the
+ * string <code>sName</code> and its value <code>sValue</code>
+ * and stores that information in an object. You may optionally
+ * provide an identifier for the property with <code>iID</code>
+ * and an array of references to the owner objects with
+ * <code>aoOwners</code>.
+ * <p>
+ * If you provide the latter, the constructor function will
+ * utilize <code>inArray()</code>, trying to determine if the
+ * object/property references one of owners
+ * (<code>referencesOwners</code>; <code>false</code> if
+ * <code>aoOwners</code> is not provided) and how many properties
+ * the object/property has itself (<code>hasProperties</code>;
+ * <code>false</code> if <code>aoOwners</code> is not
+ * provided or if detection fails.) TODO: This is now
+ * achieved through creating a new <code>ObjectInfo</code> object
+ * from either <code>aoOwners[aoOwners.length-1][sName]</code>
+ * or <code>aoOwners[sName]</code>. In order to avoid
+ * infinite recursion when the Property(...) constructor is
+ * called within ObjectInfo(...), it passes its fourth argument
+ * <code>bCalledFromObjectInfo</code> as fifth one to
+ * ObjectInfo(...) if present (<code>true</code> otherwise),
+ * while ObjectInfo(...) passes its fifth argument
+ * (<code>bCalledFromProperty</code>) as fourth to it. (Previous
+ * versions did not call ObjectInfo(...) and thus did not allow
+ * to count non-enumerable properties of a property; it seemed
+ * ineffective to copypaste the ObjectInfo(...) code into this
+ * constructor, thus the cross-calling.)
+ * </p><p>
+ * For reasons of backwards compatibility the object also provides
+ * the `referencesOwner' property to specify if it references
+ * its direct owner and allows for passing an object reference
+ * for <code>aoOwners</code> beside of an Owners object to
+ * specify that owner object. To determine if
+ * <code>aoOwners</code> is an Owners object or not, the
+ * <code>isInstanceOf()</code> method is required.
+ * </p>
+ * @param sName : string
+ * Name of the property.
+ * @param sValue
+ * Value of the property.
+ * @param iID : optional number
+ * (Unique) ID of the property.
+ * @param aoOwners : optional Owners|Object
+ * Reference to an Owners object storing references to the
+ * owner (object) of the property and its owners, where the
+ * last element references the direct owner. Allows also
+ * for a reference to a non-Owners object to specify only
+ * the direct owner.
+ * @param bNonEnum : optional boolean
+ * <code>true</code> specifies that the property is
+ * non-enumerable. Optional. The default <code>false</code>
+ * determines the property to be enumerable.
+ * @param bCalledFromObjectInfo : optional boolean
+ * @see jsx.types#isArray
+ * @see jsx.array#inArray
+ */
+function Property(sName, sValue, iID, aoOwners, bNonEnum,
+ bCalledFromObjectInfo)
+{
+ this.id = iID;
+ this.name = sName;
+ this.type = typeof sValue;
+ this.value = sValue;
+ this.referencesOwner = false;
+ this.referencesOwners = false;
+ this.propertyCount = 0;
+ this.hasProperties = false;
+ this.enumerable = !bNonEnum;
+
+ var oOwner = null;
+ if (isInstanceOf(aoOwners, Owners))
+ {
+ this.owner = aoOwners.items[aoOwners.items.length - 1];
+ }
+ else
+ {
+ this.owner = aoOwners;
+ }
+
+ setErrorHandler();
+
+ eval(new Array(
+ 'try { /* for IE */',
+ ' if (typeof this.owner != "undefined"',
+ ' && typeof this.owner[sName] != "undefined")',
+ ' {',
+ ' setErrorHandler();',
+ ' if (isInstanceOf(this.owner, Owners)) {',
+ ' this.referencesOwners =',
+ ' inArray(this.owner[sName], aoOwners.items);',
+ ' } else {',
+ ' this.referencesOwner = (this.owner[sName] == this.owner);',
+ ' }',
+/*
+ ' if (!bCalledFromObjectInfo)',
+ ' {',
+ ' var propertyInfo = new ObjectInfo(this.owner[sName], sName, false, true);',
+ ' this.hasProperties = propertyInfo.hasProperties;',
+ ' }',
+*/
+ ' try { /* for IE */',
+ ' if (!(sName == "toString" /* for IE6 SP-1 */',
+ ' || (this.owner == location &&',
+ ' inArray(sName, ["assign", "reload", "replace"]))))',
+ ' {',
+ ' for (var p in this.owner[sName]) {',
+ ' this.propertyCount++;',
+ ' }',
+ ' }',
+ ' } catch (e) {',
+
+/*
+ ' alert(sName + "\n"',
+ ' + "for (var p in this.owner[sName])\n\n"',
+ ' + getError(e));',
+*/
+
+ ' try { /* for IE */',
+ ' this.propertyCount = this.owner[sName].length;',
+ ' } catch (e) {',
+
+/*
+ ' alert(sName + "\n"',
+ ' + "for (var j = 0; i < this.owner[sName].length; j++)"',
+ ' + getError(e));',
+*/
+
+ ' }',
+ ' }',
+ ' }',
+ '} catch (e) {',
+ '}').join("\n"));
+
+ clearErrorHandler();
+
+ this.hasProperties = (this.propertyCount > 0);
+}
+
+/**
+ * @param a : optional Array
+ */
+function PropertyArray(a)
+{
+/**
+ * Note that the <code>properties</code> extended
+ * <code>Array</code> object defines properties for
+ * both sort order and sort direction which can be
+ * recognized by their identifier's prefix. These
+ * are:
+ */
+ /* default */
+ this.soNone = -1;
+ this.soByID = this.soNone;
+ this.soByName = 0;
+ this.soByType = 1;
+ this.soByValue = 2;
+ this.sdNone = 0;
+ this.sdAscending = 1;
+ this.sdDescending = -1;
+ /**
+ * The current sort order and direction is stored in the
+ * `sortOrder' and `sortDir' properties of the `properties'
+ * extended Array object.
+ *
+ * For the sort direction constants are the negative opposite
+ * of each other, you may toggle the sort direction easily:
+ *
+ * var p = bar.properties;
+ * p.sortBy(p.sortOrder, -p.sortDir);
+ *
+ * If `sortDir' was `0' (zero) before and therefore the
+ * properties were unsorted (i.e. sorted by ID), the array
+ * will then be sorted ascending by the current criteria.
+ */
+ this.sortOrder = this.soNone;
+ this.sortDir = this.sdNone;
+ this.items = a || new Array();
+ this.length =
+ (typeof this.items.length == "number"
+ ? this.items.length
+ : 0);
+}
+
+/**
+ * Adds the property to the property array.
+ *
+ * @param oProperty : Property
+ * @return number|Property
+ * (implementation-dependent) Either the number of properties added so far,
+ * or the last <code>Property</code> added
+ */
+PropertyArray.prototype.push = function (oProperty) {
+ return this.items.push(oProperty);
+};
+
+/**
+ * With a reference to an ObjectInfo object having a valid
+ * `target' reference, you may sort the property array by
+ * properties of the Property prototype:
+ *
+ * if (bar && bar.properties)
+ * {
+ * bar.properties.unsort();
+ * bar.properties.sortById(...);
+ * bar.properties.sortByName(...);
+ * bar.properties.sortByType(...);
+ * bar.properties.sortByValue(...);
+ * }
+ *
+ * Except for the unsort() method, each specific sort method
+ * takes an optional argument, specifying the sort direction
+ * (ascending or descending.) If the argument is left out,
+ * the properties are sorted in ascending direction by the
+ * selected criteria. unsort() sorts the properties as if
+ * they were retrieved with a `for (property in object)' loop
+ * and is therefore identical to sortById() or
+ * sortById(sdAscending).
+ */
+/* Specific sort methods */
+/** @type Comparator */
+PropertyArray.prototype.cmpSortByIdAsc = function (a, b) {
+ return a.id - b.id;
+};
+
+/** @type Comparator */
+PropertyArray.prototype.cmpSortByIdDesc = function (a, b) {
+ return b.id - a.id;
+};
+
+/**
+ * @param iDir : number
+ */
+PropertyArray.prototype.sortById = function (iDir) {
+ if (iDir && iDir < 0)
+ {
+ this.items.sort(this.cmpSortByIdDesc);
+ }
+ else
+ {
+ this.items.sort(this.cmpSortByIdAsc);
+ }
+
+ this.sortOrder = this.soById;
+ this.sortDir = iDir ? iDir : this.sdAscending;
+};
+
+PropertyArray.prototype.unsort =
+ PropertyArray.prototype.sortById;
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByNameAsc = function (a, b) {
+ if (a && b)
+ {
+ if (a.name < b.name)
+ {
+ return -1;
+ }
+ else if (a.name > b.name)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByNameDesc = function (a, b) {
+ if (a && b)
+
+ {
+ if (a.name > b.name)
+ {
+ return -1;
+ }
+ else if (a.name < b.name)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param iDir : number
+ */
+PropertyArray.prototype.sortByName = function (iDir) {
+ if (iDir && iDir < 0)
+ {
+ this.items.sort(this.cmpSortByNameDesc);
+ }
+ else
+ {
+ this.items.sort(this.cmpSortByNameAsc);
+ }
+
+ this.sortOrder = this.soByName;
+ this.sortDir = iDir ? iDir : this.sdAscending;
+};
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByTypeAsc = function (a, b) {
+ if (a && b)
+ {
+ if (a.type < b.type)
+ {
+ return -1;
+ }
+ else if (a.type > b.type)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByTypeDesc = function (a, b) {
+ if (a && b)
+ {
+ if (a.type > b.type)
+ {
+ return -1;
+ }
+ else if (a.type < b.type)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param iDir : number
+ */
+PropertyArray.prototype.sortByType = function (iDir) {
+ if (iDir && iDir < 0)
+ {
+ this.items.sort(this.cmpSortByTypeDesc);
+ }
+ else
+ {
+ this.items.sort(this.cmpSortByTypeAsc);
+ }
+
+ this.sortOrder = this.soByType;
+ this.sortDir = iDir ? iDir : this.sdAscending;
+};
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByValueAsc = function (a, b) {
+ if (a && b)
+ {
+ if (a.value < b.value)
+ {
+ return -1;
+ }
+ else if (a.value > b.value)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param a : Property
+ * @param b : Property
+ * @type Comparator
+ * @return number
+ * -1 if the name of <var>a</var> is to be sorted before the name of
+ * <var>b</var>; 1 if vice-versa; 0 if the existing order should be kept.
+ */
+PropertyArray.prototype.cmpSortByValueDesc = function (a, b) {
+ if (a && b)
+ {
+ if (a.value > b.value)
+ {
+ return -1;
+ }
+ else if (a.value < b.value)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
+/**
+ * @param iDir : number
+ */
+PropertyArray.prototype.sortByValue = function (iDir) {
+ if (iDir && iDir < 0)
+ {
+ this.items.sort(this.cmpSortByValueDesc);
+ }
+ else
+ {
+ this.items.sort(this.cmpSortByValueAsc);
+ }
+
+ this.sortOrder = this.soByValue;
+ this.sortDir = iDir ? iDir : this.sdAscending;
+};
+
+///**
+// * `properties' also defines a general method for sorting
+// * the array, sortBy(...), which calls the other specific
+// * sort methods. This method takes up to two optional
+// * arguments, the first defining the sort criteria, the
+// * second the sort direction. You are recommended to use
+// * the sort order and direction constants for arguments:
+// *
+// * var p = bar.properties;
+// * p.sortBy(p.soByName, p.sdDescending);
+// *
+// * If the second argument is not provided, `sdAscending' is
+// * assumed. Leaving the first argument out or providing an
+// * invalid value causes no error, but the array not to be
+// * re-sorted.
+// *
+// * @param iSortOrder : optional number
+// * Sort order.
+// * @param iSortDir : optional number
+// * Sort direction.
+// */
+//PropertyArray.prototype.sortBy =
+//function (iSortOrder, iSortDir)
+//{
+// switch (iSortOrder)
+// {
+// case this.soNone:
+// case this.soByID:
+// this.sortById(iSortDir);
+// break;
+//
+// case this.soByName:
+// this.sortByName(iSortDir);
+// break;
+//
+// case this.soByType:
+// this.sortByType(iSortDir);
+// break;
+//
+// case this.soByValue:
+// this.sortByValue(iSortDir);
+// }
+//};
+
+/**
+ * @param sName : string
+ * @param sValue : _
+ * @param iID : optional number
+ * @param oOwner : optional Object
+ * @param bNonEnum : optional boolean
+ * @param bCalledFromProperty : optional boolean
+ */
+PropertyArray.prototype.addProperty =
+function (
+ sName, sValue, iID, oOwner, bNonEnum, bCalledFromProperty)
+{
+ /* avoid dupes */
+ if ((typeof this.items.hasOwnProperty == "function"
+ /* IE does not allow reference shortcut here! */
+ && this.items.hasOwnProperty != null
+ && !this.items.hasOwnProperty(sName))
+ || (!isMethodType(typeof this.items.hasOwnProperty)
+ && typeof this.items[sName] == "undefined"))
+ {
+ this.items[this.items.length] =
+ new Property(
+ sName,
+ sValue,
+ iID,
+ oOwner,
+ bNonEnum,
+ bCalledFromProperty); /* avoid infinite recursion */
+
+ /* BUGFIX: Don't overwrite numeric properties */
+ var bMethod = (typeof this.items.hasOwnProperty == "function");
+ if ((bMethod && !this.items.hasOwnProperty(sName))
+ || (!bMethod && typeof this.items[sName] == "undefined"))
+ {
+ this.items[sName] = sValue;
+ }
+
+ this.length = this.items.length;
+ }
+};
+
+/**
+ * @param rxPattern : RegExp
+ * @param asPropertyNames : [string]
+ * @param sType : optional string
+ * @param fConstructor : optional Object
+ */
+function NonEnumProperties(rxPattern, asPropertyNames, sType, fConstructor)
+{
+ this.pattern = rxPattern || new RegExp(".");
+ this.names = asPropertyNames || new Array();
+ this.type = sType || "";
+ this.fConstructor = fConstructor || null;
+}
+
+/**
+ * Retrieves all properties of an object and stores them
+ * in the `properties' array property. That array can be
+ * sorted by the properties <code>id</code> (by declaration),
+ * <code>name</code>, <code>type</code> and <code>value</code>
+ * of the <code>Property</code> prototype. [See the sort
+ * methods defined in the <code>forObject(...)</code> method.]
+ *
+ * Requires JavaScript 1.5+ for inline <code>function</code>
+ * statement (1.2+) and <code>try...catch</code> statement (1.5+).
+ *
+ * Usage:
+ *
+ * <code>var foo = new ObjectInfo(myObject, sMyObjectName);</code>
+ *
+ * whereas <code>foo</code> is then a reference to the
+ * <code>ObjectInfo</code> object containing property
+ * information about the object referenced by
+ * <code>myObject</code> or the object evaluated from
+ * it (so that the argument can be a string, therefore
+ * <code><strong>s</strong>Object</code>.)
+ *
+ * The <code>foo.name</code> property contains the name of the
+ * string to be evaluated to an object. However, if you pass a
+ * reference for first argument or want to fake the object's
+ * name for some reason, you may pass a string for the second
+ * argument in order to overwrite the default (see below.)
+ *
+ * Note that it is also tried to retrieve known but non-enumerable
+ * properties if either <code>sObject</code> is a string or
+ * <code>sName</code> is a string, matching either value against a
+ * set of known object/property identifiers. If you fake the
+ * object's name in <code>sName</code>, only enumerable properties
+ * can be retrieved.
+ *
+ * If <code>myObject</code> cannot be evaluated to an object,
+ * the resulting <code>ObjectInfo</code> object's
+ * <code>target</code> property ist <code>null</code>:
+ *
+ * <code>
+ * if (! foo.target)
+ * alert("Not an object!");
+ * </code>
+ *
+ * Otherwise, <code>foo.target</code> is a reference to the
+ * object which properties are accessed by <code>foo</code>:
+ *
+ * <code>
+ * if (foo && foo.target && foo.target == anyOtherObject)
+ * alert("anyOtherObject references myObject.");
+ * </code>
+ *
+ * @param sObject : string|Object
+ * Reference to an object or property, or string to be evaluated
+ * to an object or a property.
+ * (TODO: Throws NotAnObjectException if not provided or cannot
+ * be evaluated.)
+ * @param sName : optional string
+ * Name of the object/property.
+ * If this argument is not provided, the value of the
+ * <code>name</code> property depends on <code>sObject</code>.
+ * If the latter is a reference, the default is `_odo', otherwise
+ * the default is the value of <code>sObject</code>.
+ * @param bCalledFromProperty : optional boolean
+ */
+function ObjectInfo(sObject, sName, bCalledFromProperty)
+{
+ this.forObject(sObject, sName, bCalledFromProperty);
+}
+
+/**
+ * Once you have a reference to an <code>ObjectInfo</code>
+ * object, you may use this method to access another object's
+ * properties while the property information of the former
+ * <code>ObjectInfo</code> object will be overwritten:
+ *
+ * <code>
+ * if (foo)
+ * foo.forObject(myOtherObject);
+ * </code>
+ *
+ * The <code>forObject(...)</code> method returns
+ * <code>null</code> as well if <code>myOtherObject</code>
+ * cannot be evaluated to an object, otherwise a reference
+ * to the <code>ObjectInfo</code> object. In the first case
+ * the properties of the former <code>ObjectInfo</code> object
+ * are preserved:
+ *
+ * <code>
+ * var myObject = new Something(...);
+ * ...
+ * var foo = new ObjectInfo(myObject);
+ * if (foo)
+ * {
+ * var myOtherObject = new SomethingElse(...);
+ * ...
+ * var bar = foo.forObject(myOtherObject);
+ * if (! bar)
+ * alert("myOtherObject is not an object!");
+ * else
+ * alert(foo.toString());
+ * }
+ * </code>
+ *
+ * @param sObject: string|Object
+ * See contract of this()
+ * @param sName: optional string
+ * See contract of this()
+ * @param bCalledFromProperty: optional boolean
+ * @property name: string
+ * @property properties: PropertyArray
+ * @property target: object
+ * @property type: string
+ */
+ObjectInfo.prototype.aStringProperties = [
+ "length", "anchor", "big", "blink", "bold", "charAt", "charCodeAt",
+ "concat", "fixed", "fontcolor", "fontsize", "fromCharCode",
+ "indexOf", "italics", "localeCompare", "lastIndexOf", "link",
+ "match", "replace", "search", "slice", "small", "split", "strike",
+ "sub", "substr", "substring", "sup", "toLowerCase",
+ "toLocaleLowerCase", "toUpperCase", "toLocaleUpperCase"
+];
+
+jsx.object.extend(ObjectInfo.prototype, {
+ aNonEnumProperties: [
+ new NonEnumProperties(
+ new RegExp("^\\w"), /* any object */
+ [
+ "NaN", "Infinity", "__proto__", "eval", "prototype", "toSource",
+ "unwatch", "watch", "undefined", "constructor", "toString",
+ "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf",
+ "propertyIsEnumerable",
+ "__defineGetter__", "__defineSetter__",
+ "all"
+ ],
+ 'object',
+ Object),
+ new NonEnumProperties(
+ /jsx\.global/, /* global object */
+ [
+ "NaN", "Infinity", "length", "undefined",
+ "parseInt", "parseFloat", "isNaN", "isFinite",
+ "decodeURI", "decodeURIComponent", "encodeURI",
+ "encodeURIComponent",
+ "Object", "Function", "Array", "String", "Boolean",
+ "Number", "Date", "RegExp", "Error", "EvalError",
+ "RangeError", "ReferenceError", "SyntaxError",
+ "TypeError", "URIError",
+ "Math",
+ "Components", "sidebar"
+ ]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Array(\\.prototype)?$"),
+ [
+ "every", "filter", "forEach", "index", "indexOf", "input",
+ "lastIndexOf", "length", "map", "concat", "join", "pop",
+ "push", "reverse", "shift", "slice", "splice", "some",
+ "sort", "unshift"
+ ],
+ '',
+ typeof Array != "undefined" ? Array : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Date(\\.prototype)?$"),
+ [
+ "getDate", "getDay", "getFullYear", "getHours", "getMilliseconds",
+ "getMinutes", "getMonth", "getSeconds", "getTime",
+ "getTimezoneOffset", "getUTCDate", "getUTCDay", "getUTCFullYear",
+ "getUTCHours", "getUTCMilliseconds", "getUTCMinutes",
+ "getUTCMonth", "getUTCSeconds", "getYear",
+ "parse", "setDate",
+ "setFullYear", "setHours", "setMilliseconds", "setMinutes",
+ "setMonth", "setSeconds", "setTime", "setUTCDate", "setUTCFullYear",
+ "setUTCHours", "setUTCMilliseconds", "setUTCMinutes", "setUTCMonth",
+ "setUTCSeconds", "setYear",
+ "toDateString", "toGMTString", "toLocaleString", "toTimeString",
+ "toLocaleString", "toLocaleDateString", "toLocaleTimeString",
+ "toUTCString", "UTC"
+ ],
+ '',
+ typeof Date != "undefined" ? Date : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Function(\\.prototype)?$"),
+ [
+ "arguments", "arguments.callee", "arguments.caller",
+ "arguments.length", "arity", "length", "apply", "call"
+ ],
+ 'function',
+ typeof Function != "undefined" ? Function : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Math$"),
+ ["E", "LN2", "LN10", "LOG2E", "LOG10E", "PI", "SQRT1_2", "SQRT2",
+ "abs", "acos", "asin", "atan", "atan2", "ceil", "cos", "exp",
+ "floor", "log", "max", "min", "pow", "random", "round", "sin",
+ "sqrt", "tan"]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Number(\\.prototype)?$"),
+ ["MAX_VALUE", "MIN_VALUE", "NaN", "NEGATIVE_INFINITY",
+ "POSITIVE_INFINITY", "toExponential", "toFixed", "toPrecision"],
+ 'number',
+ typeof Number != "undefined" ? Number : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)RegExp(\\.prototype)?$"),
+ [
+ "global", "ignoreCase", "lastIndex", "multiline",
+ "source", "exec", "test"
+ ],
+ '',
+ typeof RegExp != "undefined" ? RegExp : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)String(\\.prototype)?$"),
+ ObjectInfo.prototype.aStringProperties,
+ 'string',
+ typeof String != "undefined" ? String : null),
+ new NonEnumProperties(
+ new RegExp("Error(\\.prototype)?$"),
+ ["message", "name"]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)Packages(\\.prototype)?$"),
+ ["className", "java", "netscape", "sun"]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)location$", "i"),
+ [
+ "assign", "hash", "host", "hostname", "href", "pathname",
+ "port", "protocol", "reload", "replace", "search"
+ ].concat(ObjectInfo.prototype.aStringProperties)),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)history$"),
+ [
+ 'current', 'length', 'next', 'previous',
+ 'back', 'forward', 'go'
+ ]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)screen$"),
+ [
+ "availHeight", "availLeft", "availTop", "availWidth", "colorDepth",
+ "height", "left", "pixelDepth", "top", "width"
+ ]),
+ /* LiveConnect -- Java System Library classes as of version 1.4.2_03 */
+ new NonEnumProperties(
+ new RegExp("(^|\\.)java$"),
+ [
+ "awt", "beans", "io", "lang", "math", "net", "nio", "rmi",
+ "security", "sql", "text", "util"
+ ]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)java\\.awt$"),
+ [
+ "color", "datatransfer", "dnd", "event", "font", "geom", "im",
+ "image", "peer", "print",
+ "ActiveEvent", "Adjustable", "AlphaComposite", "AttributeValue",
+ "AWTError", "AWTEvent", "AWTEventMulticaster", "AWTException",
+ "AWTKeyStroke", "AWTPermission", "BasicStroke", "BorderLayout",
+ "Frame"
+ ]),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)java\\.lang$"),
+ ["System"]),
+ new NonEnumProperties(
+ new RegExp("^StyleSheet(\\.prototype)?$"),
+ [
+ "type", "disabled", "ownerNode", "parentStyleSheet", "href",
+ "title", "media"
+ ],
+ '',
+ typeof StyleSheet != "undefined" ? StyleSheet : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)StyleSheetList(\\.prototype)?$"),
+ ["length", "item"],
+ '',
+ typeof StyleSheetList != "undefined" ? StyleSheetList : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)LinkStyle(\\.prototype)?$"),
+ ["sheet"],
+ '',
+ typeof LinkStyle != "undefined" ? LinkStyle : null),
+ new NonEnumProperties(
+ new RegExp("(^|\\.)DocumentStyle(\\.prototype)?$"),
+ ["styleSheets"],
+ '',
+ typeof DocumentStyle != "undefined" ? DocumentStyle : null)
+ ],
+
+ /**
+ * @param sObject : Object
+ * @param sName : string
+ * @param bCalledFromProperty : boolean
+ * @return ObjectInfo
+ */
+ forObject: function (sObject, sName, bCalledFromProperty) {
+ this.name =
+ (typeof sObject == "string"
+ ? sObject
+ : (sName ? sName : "_odo"));
+
+ this.properties = new PropertyArray();
+
+ if (typeof sObject == "string")
+ {
+ var tc = false;
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' tc = true;',
+ ' this.target = eval(dotsToBrackets(sObject, true));',
+ '} catch (e) {',
+ ' try {',
+ ' this.target = eval(dotsToBrackets(sObject));',
+ ' } catch (e) {',
+ ' try {',
+ ' this.target = jsx.global["' + sObject + '"];',
+ ' } catch (e) {',
+ ' this.target = null;',
+ ' }',
+ ' }',
+ '}').join("\n"));
+ window.onerror = null;
+ if (! tc)
+ {
+ this.target = null;
+ }
+ }
+ else
+ {
+ this.target = sObject;
+ }
+
+ if (this.target)
+ {
+ this.type = typeof this.target;
+ var ti, t, i;
+
+ /* Retrieve enumerable properties */
+ for (i in this.target)
+ {
+ /* Fixes problem with document.config (Mozilla 1.5b) */
+ ti = "";
+ t = null;
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' ti = this.target[i];',
+ ' t = this.target;',
+ '} catch (e) {',
+ ' ti = null;',
+ ' t = null;',
+ '}').join("\n"));
+ clearErrorHandler();
+
+ /* avoid dupes */
+ this.properties.addProperty(
+ i, /* name */
+ ti, /* value */
+ this.properties.length, /* ID */
+ t, /* owner reference */
+ bCalledFromProperty); /* avoid infinity recursion */
+ }
+
+ /* Retrieve non-enumerable properties by guessing them */
+ /** @property boolean */ this.hasNonEnumProperties = false;
+
+ for (i = this.aNonEnumProperties.length; i--; 0)
+ {
+ var j = this.aNonEnumProperties[i];
+ if (j.pattern.test(this.name)
+ || typeof this.target == j.type
+ || (typeof this.target.constructor != "undefined"
+ && this.target.constructor == j.fConstructor))
+ {
+ for (var k = j.names.length; k--; 0)
+ {
+ var p = undefined;
+ eval(new Array(
+ 'try {',
+ ' if (typeof this.target[j.names[k]] != "undefined") {',
+ ' p = this.target[j.names[k]];',
+ ' }',
+ '} catch (e) {',
+ '}').join("\n"));
+
+ /* see object.js */
+ if (typeof this.target._hasOwnProperty == "function"
+ && this.target._hasOwnProperty(j.names[k]))
+ {
+ this.hasNonEnumProperties = true;
+
+ ti = "";
+ t = null;
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' ti = p;',
+ ' t = this.target;',
+ '} catch (e) {',
+ ' ti = null;',
+ ' t = null;',
+ '}').join("\n"));
+ clearErrorHandler();
+
+ /* avoid dupes */
+ this.properties.addProperty(
+ j.names[k], /* name */
+ ti, /* value */
+ this.properties.length, /* ID */
+ t, /* owner reference */
+ true); /* is non-enumerable */
+ }
+ }
+ }
+ }
+ this.hasProperties = (this.properties.length > 0);
+
+ return this;
+ }
+ else
+ {
+ this.type = "undefined";
+ this.hasProperties = false;
+
+ return null;
+ }
+ },
+
+ /**
+ * @param rxName : optional RegExp = .*
+ * @param rxType : optional string = //
+ * @param bInvert : optional boolean = false
+ * @param aValue : optional _ = undefined
+ * @return PropertyArray
+ * An array with the data of all properties that
+ * match the passed conditions as elements.
+ */
+ getProperties: function (rxName, rxType, bInvert, aValue) {
+ if (typeof rxType == "string")
+ {
+ rxType = new RegExp(rxType, "i");
+ }
+
+ if (typeof rxName != "object" || !rxName.test)
+ {
+ rxName = new RegExp(rxName);
+ }
+
+ if (!rxName.test)
+ {
+ rxName = null;
+ }
+
+ var a = new PropertyArray();
+
+ for (var i = 0, len = this.properties.length; i < len; i++)
+ {
+ var p = this.properties.items[i];
+
+ var b = ((rxName && rxName.test(p.name)) || !rxName)
+ && ((rxType && rxType.test(p.type.toLowerCase()))
+ || !rxType)
+ && ((arguments.length >= 4 && aValue == p.value)
+ || arguments.length < 4);
+
+ if (bInvert)
+ {
+ b = !b;
+ }
+
+ if (b)
+ {
+ a.addProperty(p.name, p.value, p.id, p.owner, !p.enumerable);
+ }
+ }
+
+ return a;
+ },
+
+ /**
+ * @return string
+ */
+ toString: function () {
+ var s = "";
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' for (var i = 0; i < this.properties.length; i++) {',
+ ' var p = this.properties[i];',
+ ' s += "[" + p.id + "] "',
+ ' + p.name',
+ ' + " : " + p.type',
+ ' + " = "',
+ ' + (p.type == "string" ? "\\"" : "")',
+ ' + p.value',
+ ' + (p.type == "string" ? "\\"" : "")',
+ ' + "\\n";',
+ ' }',
+ '} catch (e) {',
+ ' s = e;',
+ '}').join("\n"));
+ clearErrorHandler();
+
+ return s;
+ }
+});
+
+var sDefaultInspectorPath = jsx.debug.path + "ObjectInspector/obj-insp.html";
+var sNoObj = "[Not an object]";
+var CH_NBSP = unescape("%A0");
+
+/**
+ * @param sObject : string|Object
+ * @param aWhat : optional string|RegExp
+ * @param sStyle : optional string
+ * @param sHeader : optional string
+ * @param sFooter : optional string
+ * @param sInspectorPath : optional string
+ * @return string
+ */
+function getObjInfo(sObject, aWhat, sStyle, sHeader, sFooter, sInspectorPath)
+{
+ var o, tc;
+
+ // alert("1: " + sObject + "[" + typeof sObject + "]");
+ if (sObject)
+ {
+ // alert("2: " + sObject + "[" + typeof sObject + "]");
+ if (typeof sObject == "string")
+ {
+ tc = false;
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' tc = true;',
+ ' try {',
+ ' var o = eval(sObject);',
+ // alert("3: " + sObject + "[" + typeof sObject + "]");
+ ' } catch (e) {',
+ ' sObject = "jsx.global." + sObject;',
+ // alert("4: " + sObject + "[" + typeof sObject + "]");
+ ' try {',
+ ' var o = eval(sObject);', // TODO
+ // alert("5: " + sObject + "[" + typeof sObject + "]");
+ ' } catch (e) {',
+ // alert("6: " + "[Not an object]");
+ ' return (sNoObj);',
+ ' }',
+ ' }',
+ + '}').join("\n"));
+ clearErrorHandler();
+ if (! tc)
+ {
+ o = eval(sObject);
+ // alert("7: " + "[Not an object]");
+ }
+ }
+ else
+ {
+ o = sObject;
+ // alert("8: " + o);
+ }
+ }
+ else
+ {
+ // alert("9: " + "[Not an object]");
+ return (sNoObj);
+ }
+
+ if (!aWhat)
+ {
+ aWhat = ""; /* v1.29.2002.10b3 bugfix */
+ }
+ var bShowProps =
+ (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("P") > -1));
+ var bShowMethods =
+ (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("M") > -1));
+ var bShowObjects =
+ (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("O") > -1));
+ var bTextLineStyle = (sStyle && (sStyle.toUpperCase().indexOf("L") > -1));
+ var bFormatAsLines = (sStyle && (sStyle.toUpperCase().indexOf("H") > -1));
+ var bFormatAsTable = (sStyle && (sStyle.toUpperCase().indexOf("T") > -1));
+ var bShowType = (sStyle && (sStyle.toUpperCase().indexOf("S") > -1));
+ var bShowConstructor = (sStyle && (sStyle.toUpperCase().indexOf("C") > -1));
+ var bFormatAsHTML = (bFormatAsLines || bFormatAsTable);
+
+ if (sHeader && (sHeader == "-"))
+ {
+ sHeader = "";
+ }
+ else if (!sHeader || (sHeader == ""))
+ {
+ sHeader = "";
+ if (bShowObjects || bShowProps || bShowMethods)
+ {
+ if (bShowProps)
+ {
+ sHeader = "Properties";
+ }
+ else if (bShowObjects)
+ {
+ sHeader = "Composed Objects";
+ }
+
+ if (bShowMethods)
+ {
+ if (bShowObjects || bShowProps)
+ {
+ sHeader += " and ";
+ }
+ sHeader += "Methods";
+ }
+ }
+ else
+ {
+ sHeader = "Attributes";
+ }
+
+ sHeader += " of "
+ + (bFormatAsHTML ? '<code>': '')
+ + sObject
+ + (typeof aWhat.test != "undefined"
+ ? ' matching ' + String(aWhat)
+ : '')
+ + (bFormatAsHTML ? '<\/code>': '');
+ }
+ var sProp =
+ (bFormatAsTable
+ ? '<table border="1" cellpadding="5" cellspacing="0">\n'
+ : '')
+ + (sHeader != ""
+ ? (bFormatAsTable
+ ? '<tr><th align="left" colspan="'
+ + (2 + +(bShowType) + +(bShowConstructor)) + '">'
+ : '')
+ + sHeader
+ + (bFormatAsHTML && bFormatAsLines
+ ? "<br>\n"
+ : (!bFormatAsHTML
+ ? "\n__________________________________________________\n"
+ : ""))
+ + (bFormatAsTable
+ ? ('<\/th><\/tr>\n<tr><th align="left">Name<\/th> '
+ + (bShowType
+ ? '<th align="left">Type<\/th>'
+ : '')
+ + (bShowConstructor
+ ? '<th align="left">Constructor<\/th>'
+ : '')
+ + '<th align="left">Value<\/th><\/tr>\n')
+ : '')
+ : "");
+ var bCondition = false;
+ var aProperties = new Array();
+ var t;
+
+ for (var property in o)
+ {
+ if ((aWhat.constructor == RegExp
+ && ((t = typeof aWhat.test) == "function" || t == "object")
+ && aWhat.test(property)) || true)
+ {
+ aProperties[aProperties.length] = property;
+ }
+ }
+
+ /* sort properties lexically */
+ if (typeof aProperties.sort == "function")
+ {
+ aProperties.sort();
+ }
+
+ var isError;
+ var propValue;
+ var bMethod;
+ var bProperty;
+ var propType;
+ var bObject;
+ var s;
+ var propName;
+ var sPropName;
+ for (var i = 0; i < aProperties.length; i++)
+ {
+ bCondition = false;
+ isError = false;
+
+ tc = false;
+ setErrorHandler();
+ eval(new Array(
+ 'try {',
+ ' tc = true;',
+ ' if (o[aProperties[i]])',
+ ' propValue = o[aProperties[i]];',
+ ' else',
+ ' propValue = eval("o." + aProperties[i]);',
+ ' bMethod =',
+ ' ((t = typeof propValue) == "function" || t == "object");',
+ '} catch (e) {',
+ ' propValue = "[" + e + "]";',
+ ' bMethod = false;',
+ ' isError = true;',
+ '}').join("\n"));
+ clearErrorHandler();
+ if (! tc)
+ {
+ if (o[aProperties[i]])
+ {
+ propValue = o[aProperties[i]];
+ }
+ else
+ {
+ propValue = eval("o." + aProperties[i]);
+ }
+ bMethod = (String(propValue).toLowerCase().indexOf("function ") > -1);
+ }
+
+ bProperty = !bMethod;
+ propType = typeof propValue;
+ var propConstructor =
+ (typeof propValue != "undefined"
+ && propValue != null
+ && propValue.constructor != "undefined")
+ ? propValue.constructor.toString().replace(/function\s+/, "")
+ .replace(/\s*\((.|[\r\n])*/, "")
+ : "";
+ bObject = (propType == "object");
+ if (aWhat && (aWhat != "") && (!aWhat.test))
+ {
+ bCondition =
+ (bProperty && bShowProps)
+ || (bMethod && bShowMethods)
+ || (bObject && bShowObjects);
+ }
+ else
+ {
+ bCondition = true;
+ }
+
+ if (bCondition)
+ {
+ s =
+ ((isNaN(propValue) || String(propValue) == "") && !bObject && !isError)
+ ? '"'
+ : '';
+
+ propName = String(aProperties[i]);
+ sPropName = propName;
+ if (bFormatAsHTML)
+ {
+ sPropName = "<code><b>" + propName + "<\/b><\/code>";
+ propValue =
+ replaceText(replaceText(String(propValue), "<", "&lt;"), ">", "&gt;");
+ }
+ sProp
+ += (bFormatAsTable ? '<tr valign="top"><td> ' : '')
+ + ((bObject && bFormatAsHTML)
+ ? '<a href="javascript:void(ObjectInspector(\''
+ + sObject
+ + '\'))">'
+ : '')
+ + sPropName
+ + (bObject && bFormatAsHTML ? '<\/a>': '')
+ + (bFormatAsTable ? '<\/td>': "")
+ + (bShowType
+ ? bFormatAsTable
+ ? '<td><code>'+propType + '<\/code><\/td>'
+ : CH_NBSP + ":" + CH_NBSP + propType
+ : "")
+ + (bShowConstructor
+ ? (bFormatAsTable
+ ? '<td><code>'+propConstructor + '<\/code><\/td>'
+ : "[" + propConstructor + "]")
+ : "")
+ + (bFormatAsTable
+ ? '<td><code>'
+ : CH_NBSP + "=" + CH_NBSP)
+ + s
+ + propValue
+ + s;
+// ("<a href='javascript:ObjectInspector(\'' + sObject + '[\"' + propName + '\"]\'', \'' + aWhat + '\', \'' + sStyle +'\');"'
+// + ' !onclick="window.open(\''
+// + (sInspectorPath ? escape(sInspectorPath) : sDefaultInspectorPath)
+// + '?obj=' + escape(sObject) + "." + escape(propName)
+// + '&what=' + escape(aWhat)
+// + '&style=' + escape(sStyle)
+// + '\', \'wndObjectInspector\', \'scrollbars=yes,resizable=yes\'); return false;"'
+ if (bFormatAsHTML)
+ {
+ if (bFormatAsTable)
+ {
+ sProp += "<\/code><\/td><\/tr>\n";
+ }
+ else
+ {
+ sProp += "<br>\n";
+ }
+ }
+ else if (bTextLineStyle)
+ {
+ sProp += "; ";
+ }
+ else
+ {
+ sProp += "\n";
+ }
+ }
+ }
+
+ switch (String(sFooter))
+ {
+ case "-":
+ sFooter = "";
+ break;
+
+ case "undefined":
+ case "":
+ case "null":
+ if (bFormatAsHTML)
+ {
+ sFooter =
+ '<code><a href="' + jsx.debug.docURL + '" target="_blank"'
+ + ' title="Show documentation for JSX:objinfo.js."'
+ + '>JSX:objinfo.js<\/a>:<a href="' + jsx.debug.docURL + '#getObjInfo"'
+ + ' target="_blank"'
+ + ' title="Show documentation for JSX:debug.js:getObjInfo(...)"'
+ + '>getObjInfo<\/a>(...)<\/code><br>';
+ }
+ else
+ {
+ sFooter = "JSX:debug.js:getObjInfo(...)\n";
+ }
+ sFooter += "Library version " + jsx.debug.version;
+ sFooter += (bFormatAsHTML ? "<br>" : "\n");
+ sFooter += jsx.debug.copyright
+ + (bFormatAsHTML ? "&nbsp;&nbsp;" : " ")
+ + jsx.debug.author
+ + " ";
+ if (bFormatAsHTML)
+ {
+ sFooter = replaceText(sFooter, "\xA9", "&copy;");
+ sFooter +=
+ '&lt;<a href="mailto:' + jsx.debug.email
+ + '%20%28Thomas%20\'PointedEars\'%20Lahn%20%29"'
+ + ' title="E-mail the author of this fabulous script ;-)'
+ + ' E-mail client required.">' + jsx.debug.email + '<\/a>&gt;';
+ }
+ else
+ {
+ sFooter += "<" + jsx.debug.email + ">";
+ }
+ }
+
+ if (sFooter != "")
+ {
+ sProp
+ += (bFormatAsHTML
+ ? bFormatAsTable
+ ? '<tr>\n<td colspan="'+ (2 + +(bShowType) + +(bShowConstructor))
+ + '">'
+ : ''
+ : "\n__________________________________________________\n")
+ + sFooter
+ + (bFormatAsHTML
+ ? bFormatAsTable
+ ? '<\/td>\n<\/tr>\n'
+ : '<br>'
+ : "");
+ }
+
+ if (bFormatAsTable)
+ {
+ sProp += '<\/table>';
+ }
+
+ return sProp;
+}
+
+/**
+ * Returns an object storing the minimum version required
+ * of the requested implementations in a piece of source code.
+ *
+ * @param s : string
+ * Source code to be analyzed
+ * @param implementations : Object
+ * Dictionary of requested implementations. The following
+ * property names are supported:
+ *
+ * <table>
+ * <tr valign="top">
+ * <th align="left">javascript</th>
+ * <td>Netscape/Mozilla.org JavaScript&trade;<sup>&reg;</sup></td>
+ * </tr>
+ * <tr valign="top">
+ * <th align="left">jscript</th>
+ * <td>Microsoft JScript&trade;</td>
+ * </tr>
+ * <tr valign="top">
+ * <th align="left">es</th>
+ * <td>ECMAScript</td>
+ * </tr>
+ * <table>
+ *
+ * @return Object
+ * An object having the same properties as <var>implementations</var>.
+ * The property values specify the minimum version required of an
+ * implementation in order to run <var>s</var>.
+ */
+function getMinimalVersions(s, implementations)
+{
+ /* TODO: Let this be generated by PHP */
+ var features = {
+ "RegExp": {javascript: 1.2, jscript: "3.0", es: 3},
+
+ /* anonymous function expression */
+ "function\\s*\\(": {javascript: 1.3, jscript: "3.1.3510", es: 3},
+
+ "\\.\\s*constructor": {javascript: 1.1, jscript: "2.0", es: 1},
+ "\\.\\s*source": {jscript: "3.0", es: 3},
+ "\\.\\s*replace": {javascript: 1.2, jscript: "3.0", es: 3},
+ "\\.\\s*split": {javascript: 1.1, jscript: "3.0", es: 1},
+
+ /* Object initializer */
+ "[[(=]\\s*\\{": {javascript: 1.3, jscript: "3.0", es: 3},
+
+ /* Array initializer */
+ "\\[[^]]+\\]": {javascript: 1.3, jscript: "2.0", es: 3},
+
+ "\\.\\s*hasOwnProperty\\s*\\(": {javascript: 1.5, jscript: "5.5", es: 3}
+ };
+
+ var implMap = {
+ javascript: "JavaScript",
+ jscript: "JScript",
+ es: "ECMAScript Edition"
+ };
+
+ var result = {};
+ var lines = s.split(/\r?\n|\n/);
+ var obj = jsx.object;
+
+ for (var f in features)
+ {
+ var rx = new RegExp("\\b" + f + "\\b");
+ if (rx.test(s))
+ {
+ for (var i in implementations)
+ {
+ if (typeof result[i] == "undefined")
+ {
+ result[i] = 0;
+ }
+
+ if (result[i] < features[f][i])
+ {
+ result[i] = features[f][i];
+ dmsg(
+ f + " requires " + obj.getProperty(implMap, i, i)
+ + " " + features[f][i],
+ "warn");
+ }
+ }
+ }
+ }
+
+ return result;
+}
+// var o = getMinimalVersions(e, {javascript: true, jscript: true, es: true});
\ No newline at end of file
/live/test/debug.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/test/object.js
===================================================================
--- live/test/object.js (nonexistent)
+++ live/test/object.js (revision 509)
@@ -0,0 +1,911 @@
+function runTests ()
+{
+ var assert = jsx.test.assert;
+ var assertFalse = jsx.test.assertFalse;
+ var assertTrue = jsx.test.assertTrue;
+
+ jsx.test.runner.run({
+ file: "object.js",
+ tests: [
+ {
+ feature: 'jsx.dmsg(…)',
+ desc: "Callable, generates messages",
+ code: function () {
+ jsx.dmsg("log message");
+ jsx.dmsg("info message", "info");
+ jsx.dmsg("warning", "warn");
+ jsx.dmsg("error message", "error");
+ }
+ },
+ {
+ feature: 'jsx.info(…)',
+ desc: "Callable, generates info message",
+ code: function () {
+ jsx.info("info message");
+ }
+ },
+ {
+ feature: 'jsx.warn(…)',
+ desc: "Callable, generates warning",
+ code: function () {
+ jsx.warn("warning");
+ }
+ },
+ {
+ feature: 'jsx.error(…)',
+ desc: "Callable, generates error message",
+ code: function () {
+ jsx.error("error message");
+ }
+ },
+
+ {
+ feature: "jsx.object.isMethod()",
+ desc: "Missing argument throws exception",
+ code: function () {
+ var ok = true;
+ jsx.tryThis("jsx.object.isMethod()", function() { ok = false; });
+ assertFalse(ok);
+ }
+ },
+ {
+ feature: "jsx.object.isMethod(false)",
+ desc: "Returns <code>false</code>",
+ code: function () {
+ assertFalse("jsx.object.isMethod(false)");
+ }
+ },
+ {
+ feature: "jsx.object.isMethod(…)",
+ desc: "Returns correct values",
+ code: function () {
+ assertTrue("jsx.object.isMethod(eval)");
+ assertFalse("jsx.object.isMethod(this, null)");
+ assertTrue("jsx.object.isMethod(this, 'eval')");
+ assertFalse("jsx.object.isMethod(this, '')");
+ assertTrue("jsx.object.isMethod(window, 'location', 'reload')");
+ assertFalse("jsx.object.isMethod(window, 'location', 'hash')");
+ assertFalse("jsx.object.isMethod('window', 'location', 'hash')");
+ assertFalse("jsx.object.isMethod('window', 'location')");
+ assertTrue("jsx.object.isMethod(window, 'location')");
+ assertFalse("jsx.object.isMethod('foo', 'location')");
+ }
+ },
+ {
+ feature: "jsx.object.areMethods()",
+ desc: "Missing argument throws exception",
+ code: function () {
+ var ok = true;
+ jsx.tryThis("jsx.object.areMethods()", function() { ok = false; });
+ assertFalse(ok);
+ }
+ },
+ {
+ feature: "jsx.object.areMethods(this, [false])",
+ desc: "Returns false",
+ code: function () {
+ assertFalse("jsx.object.areMethods(this, [false])");
+ }
+ },
+ {
+ feature: "jsx.object.areMethods(…)",
+ desc: "Returns correct values",
+ code: function () {
+ assertTrue("jsx.object.areMethods(this, ['eval', 'toString'])");
+ /*assertTrue("jsx.object.isMethod(this, 'eval')");
+ assertFalse("jsx.object.isMethod(this, '')");
+ assertTrue("jsx.object.isMethod(window, 'location', 'reload')");
+ assertFalse("jsx.object.isMethod(window, 'location', 'hash')");
+ assertFalse("jsx.object.isMethod('window', 'location', 'hash')");
+ assertFalse("jsx.object.isMethod('window', 'location')");
+ assertTrue("jsx.object.isMethod(window, 'location')");
+ assertFalse("jsx.object.isMethod('foo', 'location')");
+ */ }
+ },
+ {
+ feature: "jsx.object.isNativeMethod()",
+ desc: "Missing argument throws exception",
+ code: function () {
+ var ok = true;
+ jsx.tryThis("jsx.object.isNativeMethod()", function() { ok = false; });
+ assertFalse(ok);
+ }
+ },
+ {
+ feature: "jsx.object.isNativeMethod(function)",
+ desc: "Returns <code>true</code>",
+ code: function () {
+ assertTrue(jsx.object.isNativeMethod(function () {}));
+ }
+ },
+ {
+ feature: "jsx.object.isNativeMethod(object.toString)",
+ desc: "Returns <code>true</code>",
+ code: function () {
+ assertTrue(jsx.object.isNativeMethod(({}).toString));
+ }
+ },
+ {
+ feature: "jsx.object.isNativeMethod(object)",
+ desc: "Returns <code>false</code>",
+ code: function () {
+ assertFalse(jsx.object.isNativeMethod({}));
+ }
+ },
+ {
+ feature: 'jsx.object.isMethodType(typeof "")',
+ desc: "Returns <code>false</code>",
+ code: function () {
+ assertFalse(jsx.object.isMethodType(typeof ""));
+ }
+ },
+ {
+ feature: 'jsx.object.isMethodType(typeof function () {})',
+ desc: "Returns <code>true</code>",
+ code: function () {
+ assertTrue(jsx.object.isMethodType(typeof function () {}));
+ }
+ },
+ {
+ feature: 'jsx.object._hasOwnProperty("_hasOwnProperty")',
+ desc: "Return <code>true</code>",
+ code: function () {
+ assertTrue(jsx.object._hasOwnProperty("_hasOwnProperty"));
+ }
+ },
+ {
+ feature: 'jsx.object._hasOwnProperty({}, "foo")',
+ desc: "Return <code>false</code>",
+ code: function () {
+ assertFalse(jsx.object._hasOwnProperty({}, "foo"));
+ }
+ },
+ {
+ feature: 'jsx.object._hasOwnProperty({foo: "bar"}, "foo")',
+ desc: "Return <code>true</code>",
+ code: function () {
+ assertTrue(jsx.object._hasOwnProperty({foo: "bar"}, "foo"));
+ }
+ },
+ {
+ feature: 'jsx.object._hasOwnProperty(new Foo(), "bar")',
+ desc: "Return <code>false</code> (inherited)",
+ code: function () {
+ function Foo () {}
+ Foo.prototype.bar = 42;
+
+ /* Inherited, not own property */
+ assertFalse(jsx.object._hasOwnProperty(new Foo(), "bar"));
+
+ /* Simulate unavailable hasOwnProperty() method on Foo instance */
+ Foo.prototype.hasOwnProperty = null;
+ assertFalse(jsx.object._hasOwnProperty(new Foo(), "bar"));
+ }
+ },
+ {
+ feature: 'jsx.object.getKeys()',
+ desc: 'Throw exception',
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.getKeys();
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return false;
+ });
+
+ assertFalse(success);
+
+ /* Simulate missing Object.keys() */
+ var Object_keys = Object.keys;
+ delete Object.keys;
+
+ success = jsx.tryThis(
+ function () {
+ jsx.object.getKeys();
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return false;
+ });
+
+ Object.keys = Object_keys;
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.getKeys({})',
+ desc: 'Return <code>[]</code>',
+ code: function () {
+ var result = jsx.object.getKeys({});
+ assertTrue(result && result.length === 0);
+
+ /* Simulate missing Object.keys() */
+ var Object_keys = Object.keys;
+ delete Object.keys;
+
+ result = jsx.object.getKeys({});
+
+ Object.keys = Object_keys;
+
+ assertTrue(result && result.length === 0);
+ }
+ },
+ {
+ feature: 'jsx.object.getKeys({foo: "bar"})',
+ desc: 'Return <code>["foo"]</code>',
+ code: function () {
+ var result = jsx.object.getKeys({foo: "bar"});
+ assertTrue(result && result.length === 1 && result[0] === "foo");
+
+ /* Simulate missing Object.keys() */
+ var Object_keys = Object.keys;
+ delete Object.keys;
+
+ result = jsx.object.getKeys({foo: "bar"});
+
+ Object.keys = Object_keys;
+
+ assertTrue(result && result.length === 1 && result[0] === "foo");
+ }
+ },
+ {
+ feature: 'jsx.object.getKeys(new Foo("baz"))',
+ desc: 'Return <code>["baz"]</code>',
+ code: function () {
+ function Foo (propertyName)
+ {
+ this[propertyName] = 42;
+ }
+
+ Foo.prototype.bar = 42;
+
+ var foo = new Foo("baz");
+
+ var result = jsx.object.getKeys(foo);
+ assertTrue(result && result.length === 1 && result[0] === "baz");
+
+ /* Simulate missing Object.keys() */
+ var Object_keys = Object.keys;
+ delete Object.keys;
+
+ result = jsx.object.getKeys(foo);
+
+ Object.keys = Object_keys;
+
+ assertTrue(result && result.length === 1 && result[0] === "baz");
+ }
+ },
+ {
+ feature: 'jsx.object.clone()',
+ desc: "Returns a shallow clone of <code>jsx.object</code>",
+ code: function () {
+ var clone1 = jsx.object.clone();
+ assertTrue(clone1.clone == jsx.object.clone);
+ }
+ },
+ {
+ feature: 'jsx.object.clone({foo: {bar: "baz"}})',
+ desc: "Returns a shallow clone",
+ code: function () {
+ var o2 = {bar: "baz"};
+ var o = {foo: o2};
+
+ var clone1 = jsx.object.clone(o);
+ assertTrue(clone1 != o && clone1.foo == o2);
+ }
+ },
+ {
+ feature: 'jsx.object.clone({foo: {bar: "baz"}}, 0)',
+ desc: "Returns a shallow clone",
+ code: function () {
+ var o2 = {bar: "baz"};
+ var o = {foo: o2};
+
+ var clone1 = jsx.object.clone(o, 0);
+ assertTrue(clone1 != o && clone1.foo == o2);
+
+ var clone2 = jsx.object.clone(0, o);
+ assertTrue(clone2 != o && clone2.foo == o2);
+ }
+ },
+ {
+ feature: 'jsx.object.clone({foo: {bar: "baz"}}, jsx.object.COPY_ENUM)',
+ desc: "Returns a shallow clone",
+ code: function () {
+ var o2 = {bar: "baz"};
+ var o = {foo: o2};
+
+ var clone1 = jsx.object.clone(o, jsx.object.COPY_ENUM);
+ assertTrue(clone1 != o && clone1.foo == o2);
+
+ var clone2 = jsx.object.clone(jsx.object.COPY_ENUM, o);
+ assertTrue(clone2 != o && clone2.foo == o2);
+ }
+ },
+ {
+ feature: 'jsx.object.clone({foo: {bar: "baz"}}, jsx.object.COPY_ENUM_DEEP)',
+ desc: "Returns a deep clone",
+ code: function () {
+ var o2 = {bar: "baz"};
+ var o = {foo: o2};
+
+ var clone1 = jsx.object.clone(o, jsx.object.COPY_ENUM_DEEP);
+ assertTrue(clone1 != o && clone1.foo != o2 && clone1.foo.bar === "baz");
+
+ var clone2 = jsx.object.clone(jsx.object.COPY_ENUM_DEEP, o);
+ assertTrue(clone2 != o && clone2.foo != o2 && clone2.foo.bar === "baz");
+ }
+ },
+ {
+ feature: 'jsx.object.clone({foo: {bar: "baz"}}, jsx.object.COPY_INHERIT)',
+ desc: "Returns a new inheriting object",
+ code: function () {
+ var o2 = {bar: "baz"};
+ var o = {foo: o2};
+
+ var clone1 = jsx.object.clone(o, jsx.object.COPY_INHERIT);
+ assertTrue(clone1 != o && !clone1.hasOwnProperty("foo")
+ && clone1.foo == o2 && clone1.foo.bar === "baz");
+
+ var clone2 = jsx.object.clone(jsx.object.COPY_INHERIT, o);
+ assertTrue(clone2 != o && !clone2.hasOwnProperty("foo")
+ && clone2.foo == o2 && clone2.foo.bar === "baz");
+ }
+ },
+
+ {
+ feature: 'jsx.object.extend()',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.extend();
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.extend({})',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.extend({});
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.extend({}, {foo: "bar"})',
+ desc: "Sets property, no cloning",
+ code: function () {
+ var o = {};
+ var o2 = {bar: "baz"};
+ jsx.object.extend(o, {foo: o2});
+
+ assertTrue(o.foo && o.foo == o2 && o.foo.bar === "baz");
+ }
+ },
+ {
+ feature: 'jsx.object.extend({foo: "bar"}, {foo: "baz"})',
+ desc: "Does not modify existing property",
+ code: function () {
+ var o = {foo: "bar"};
+ jsx.object.extend(o, {foo: "baz"});
+
+ assertTrue(o.foo === "bar");
+ }
+ },
+ {
+ feature: 'jsx.object.extend({foo: "bar"}, {foo: "baz"}, jsx.object.ADD_OVERWRITE)',
+ desc: "Modifies existing property",
+ code: function () {
+ var o = {foo: "bar"};
+ jsx.object.extend(o, {foo: "baz"}, jsx.object.ADD_OVERWRITE);
+
+ assertTrue(o.foo === "baz");
+ }
+ },
+ {
+ feature: 'jsx.object.extend({foo: "bar"}, {foo: "baz"}, jsx.object.COPY_ENUM_DEEP)',
+ desc: "Sets property, with cloning",
+ code: function () {
+ var o = {};
+ var o2 = {bar: "baz"};
+ jsx.object.extend(o, {foo: o2}, jsx.object.COPY_ENUM_DEEP);
+
+ assertTrue(o.foo && o.foo != o2 && o.foo.bar === "baz");
+ }
+ },
+ {
+ feature: 'jsx.object.extend({foo: "bar"}, {foo: "baz"}, jsx.object.ADD_OVERWRITE | jsx.object.COPY_ENUM_DEEP)',
+ desc: "Modifies existing property, with cloning",
+ code: function () {
+ var o = {foo: "bar"};
+ var o2 = {bar: "baz"};
+ jsx.object.extend(o, {foo: o2}, jsx.object.ADD_OVERWRITE | jsx.object.COPY_ENUM_DEEP);
+
+ assertTrue(o.foo && o.foo != o2 && o.foo.bar === "baz");
+ }
+ },
+
+ {
+ feature: 'jsx.object.defineProperty()',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty();
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty(42)',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty(42);
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty(null)',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty(null);
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({})',
+ desc: "Missing descriptor throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty({});
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo")',
+ desc: "Missing descriptor throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty({}, "foo");
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", 42)',
+ desc: "Invalid descriptor throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperty({}, "foo", 42);
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", {})',
+ desc: 'Defines read-only <code>foo</code> property'
+ + ' with value <code>undefined</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperty(o, "foo", {});
+
+ assertTrue("foo" in o);
+ o.foo = 42;
+ assertTrue(typeof o.foo == "undefined");
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", {value: 42})',
+ desc: 'Defines read-only <code>foo</code> property'
+ + ' with value <code>42</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperty(o, "foo", {
+ value: 42
+ });
+
+ o.foo = "23";
+ assertTrue(o.foo === 42);
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", {value: 42, writable: true})',
+ desc: 'Defines writable <code>foo</code> property'
+ + ' with initial value <code>42</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true
+ });
+
+ assertTrue(o.foo === 42);
+ o.foo = "23";
+ assertTrue(o.foo === "23");
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", {"get": …})',
+ desc: 'Defines read-only <code>foo</code> property with getter'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperty(o, "foo", {
+ "get": function () { return 42; }
+ });
+
+ assertTrue(o.foo === 42);
+ o.foo = "23";
+ assertTrue(o.foo === 42);
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperty({}, "foo", {"set": …})',
+ desc: 'Defines <code>foo</code> property with setter'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var _x = "23";
+ var result = jsx.object.defineProperty(o, "foo", {
+ "set": function (value) { _x = value; }
+ });
+
+ o.foo = 42;
+ assertTrue(_x === 42);
+ assertTrue(result === o);
+ }
+ },
+
+ {
+ feature: 'jsx.object.defineProperties()',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperties();
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties(42)',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperties(42);
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties(null)',
+ desc: "Throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperties(null);
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({})',
+ desc: "Missing descriptor throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperties({});
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: 42})',
+ desc: "Invalid descriptor throws <code>TypeError</code>",
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ jsx.object.defineProperties({}, {foo: 42});
+ return true;
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: {}})',
+ desc: 'Defines read-only <code>foo</code> property'
+ + ' with value <code>undefined</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperties(o, {foo: {}});
+
+ assertTrue("foo" in o);
+ o.foo = 42;
+ assertTrue(typeof o.foo == "undefined");
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: {value: 42}})',
+ desc: 'Defines read-only <code>foo</code> property'
+ + ' with value <code>42</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperties(o, {
+ foo: {
+ value: 42
+ }
+ });
+
+ o.foo = "23";
+ assertTrue(o.foo === 42);
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: {value: 42, writable: true}})',
+ desc: 'Defines writable <code>foo</code> property'
+ + ' with initial value <code>42</code>'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperties(o, {
+ foo: {
+ value: 42,
+ writable: true
+ }
+ });
+
+ assertTrue(o.foo === 42);
+ o.foo = "23";
+ assertTrue(o.foo === "23");
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: {"get": …}})',
+ desc: 'Defines read-only <code>foo</code> property with getter'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var result = jsx.object.defineProperties(o, {
+ foo: {
+ "get": function () { return 42; }
+ }
+ });
+
+ assertTrue(o.foo === 42);
+ o.foo = "23";
+ assertTrue(o.foo === 42);
+ assertTrue(result === o);
+ }
+ },
+ {
+ feature: 'jsx.object.defineProperties({}, {foo: {"set": …}})',
+ desc: 'Defines <code>foo</code> property with setter'
+ + ' and returns correct value',
+ code: function () {
+ var o = {};
+ var _x = "23";
+ var result = jsx.object.defineProperties(o, {
+ "foo": {
+ "set": function (value) { _x = value; }
+ }
+ });
+
+ o.foo = 42;
+ assertTrue(_x === 42);
+ assertTrue(result === o);
+ },
+ },
+
+ {
+ feature: 'jsx.object._propertyIsEnumerable()',
+ desc: 'Returns <code>false</code>',
+ code: function () {
+ assertFalse(jsx.object._propertyIsEnumerable());
+ }
+ },
+ {
+ feature: 'jsx.object._propertyIsEnumerable("_propertyIsEnumerable")',
+ desc: 'Returns <code>true</code>',
+ code: function () {
+ assertTrue(jsx.object._propertyIsEnumerable("_propertyIsEnumerable"));
+ }
+ },
+ {
+ feature: 'jsx.object._propertyIsEnumerable(object, "…")',
+ desc: 'Returns correct value',
+ code: function () {
+ function MyType () {}
+ MyType.prototype.answer = 42;
+
+ var o = new MyType();
+ o.x = 42;
+
+ assertFalse(jsx.object._propertyIsEnumerable(o, "prototype"));
+ assertFalse(jsx.object._propertyIsEnumerable(o, "answer"));
+ assertTrue(jsx.object._propertyIsEnumerable(o, "x"));
+ }
+ },
+
+ {
+ feature: 'jsx.object.hasPropertyValue()',
+ desc: 'Missing object returns <code>false</code>'
+ + ' or throws <code>TypeError</code>',
+ code: function () {
+ var success = jsx.tryThis(
+ function () {
+ return jsx.object.hasPropertyValue();
+ },
+ function (e) {
+ jsx.error(e);
+ return !(e instanceof TypeError);
+ });
+
+ assertFalse(success);
+ }
+ },
+ {
+ feature: 'jsx.object.hasPropertyValue({x: void 0})',
+ desc: 'Missing needle searches for <code>undefined</code>',
+ code: function () {
+ assertTrue(jsx.object.hasPropertyValue({x: void 0}));
+ }
+ },
+ {
+ feature: 'jsx.object.hasPropertyValue({x: …}, 42)',
+ desc: 'Returns correct value',
+ code: function () {
+ assertFalse(jsx.object.hasPropertyValue({x: 23}, 42));
+ assertTrue(jsx.object.hasPropertyValue({x: 42}, 42));
+ }
+ },
+ {
+ feature: 'jsx.object.hasPropertyValue({x: 42}, 42, {exclude: ["x"]})',
+ desc: 'Returns <code>false</code>',
+ code: function () {
+ assertFalse(jsx.object.hasPropertyValue({x: 42}, 42, {exclude: ["x"]}));
+ }
+ },
+ {
+ feature: 'jsx.object.hasPropertyValue({x: {y: 42}}, 42, {recursive: true}))',
+ desc: 'Returns <code>true</code>',
+ code: function () {
+ assertTrue(jsx.object.hasPropertyValue({x: {y: 42}}, 42, {recursive: true}));
+ }
+ },
+ {
+ feature: 'jsx.object.hasPropertyValue({x: 42}, "42", {strict: true}))',
+ desc: 'Returns <code>false</code>',
+ code: function () {
+ assertFalse(jsx.object.hasPropertyValue({x: 42}, "42", {strict: true}));
+ }
+ },
+
+ {
+ feature: 'jsx.object.findNewProperty(…)',
+ desc: 'Returns the correct value',
+ code: function () {
+ assert(jsx.object.findNewProperty() === "a_");
+ assert(jsx.object.findNewProperty({}) === "a_");
+ assert(jsx.object.findNewProperty({"a_": true}) === "b_");
+ assert(jsx.object.findNewProperty({"a_": true, "b_": true}) === "c_");
+
+ var o = {};
+ for (var i = "a".charCodeAt(0), max = "z".charCodeAt(0); i <= max; ++i)
+ {
+ o[String.fromCharCode(i) + "_"] = true;
+ }
+ assert(jsx.object.findNewProperty(o, 1) === "");
+ }
+ }
+ ]
+ });
+}
\ No newline at end of file
/live/test/object.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/array.html
===================================================================
--- live/test/array.html (nonexistent)
+++ live/test/array.html (revision 509)
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <meta http-equiv="Content-Language" content="en">
+ <title>PointedEars' JSX:array.js Unit Test</title>
+ <script type="text/javascript" src="../builder?src=object,string,test/test"></script>
+ <script type="text/javascript" src="../array.js"></script>
+ <script type="text/javascript" src="array.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1>PointedEars' <a href="/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Farray.js"
+ >JSX:<tt>array.js</tt></a> Unit Test</h1>
+ <p>See error console for details.</p>
+ </body>
+</html>
\ No newline at end of file
/live/test/array.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/unicode.js
===================================================================
--- live/test/unicode.js (nonexistent)
+++ live/test/unicode.js (revision 509)
@@ -0,0 +1,462 @@
+function runTests()
+{
+ var _test = jsx.test;
+ var assert = _test.assert;
+ var assertArrayEquals = _test.assertArrayEquals;
+ var WideString = jsx.string.unicode.WideString;
+
+ _test.runner.run({
+ file: "unicode.js",
+ tests: [
+ {
+ feature: 'jsx.string.unicode.WideString()',
+ description: 'Return new instance (factory)',
+ code: function () {
+ assert(WideString() instanceof WideString);
+ }
+ },
+ {
+ feature: 'new jsx.string.unicode.WideString()',
+ description: 'Return new empty instance',
+ code: function () {
+ var s = new WideString();
+ assert(s instanceof WideString);
+ assertArrayEquals([], s.getChars());
+ }
+ },
+ {
+ feature: 'new WideString(wideString)',
+ description: 'Clone instance',
+ code: function () {
+ var chars = new WideString(new WideString(("x"))).getChars();
+ assertArrayEquals(["x"], chars);
+ }
+ },
+ {
+ feature: 'new WideString("")',
+ description: 'Return new empty instance',
+ code: function () {
+ assertArrayEquals([], new WideString("").getChars());
+ }
+ },
+ {
+ feature: 'new WideString("x")',
+ description: 'Convert to <code>WideString("x")</code>',
+ code: function () {
+ assertArrayEquals(["x"], new WideString("x").getChars());
+ }
+ },
+ {
+ feature: 'new WideString(42)',
+ description: 'Convert to <code>WideString("42")</code>',
+ code: function () {
+ assertArrayEquals(["4", "2"], new WideString(42).getChars());
+ }
+ },
+
+ {
+ feature: 'wideString.getChars()',
+ description: 'Return the correct value',
+ code: function () {
+ assertArrayEquals([], new WideString().getChars());
+ assertArrayEquals([], new WideString("").getChars());
+ assertArrayEquals(["x"], new WideString("x").getChars());
+ assertArrayEquals(["x", "\uD834\uDD1E"], new WideString("x\uD834\uDD1E").getChars());
+ assertArrayEquals(["x", "\uD834\uDD1E", "y"], new WideString("x\uD834\uDD1Ey").getChars());
+ }
+ },
+ {
+ feature: 'wideString.chars',
+ description: 'Getter works',
+ code: function () {
+ assertArrayEquals(["x"], new WideString("x").chars);
+ }
+ },
+
+ {
+ feature: 'wideString.getLength()',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new WideString().getLength() === 0);
+ assert(new WideString("").getLength() === 0);
+ assert(new WideString("x").getLength() === 1);
+ assert(new WideString("x\uD834\uDD1E").getLength() === 2);
+ assert(new WideString("x\uD834\uDD1Ey").getLength() === 3);
+ }
+ },
+ {
+ feature: 'wideString.length',
+ description: 'Inherited getter works',
+ code: function () {
+ assert(new WideString("x").length === 1);
+ }
+ },
+
+ {
+ feature: 'WideString.fromCharCode(0x110000)',
+ description: 'throw <code>jsx.InvalidArgumentError</code>',
+ code: function () {
+ var error = false;
+ jsx.tryThis(
+ function () {
+ WideString.fromCharCode(0x110000);
+ },
+ function (e) {
+ jsx.error(e);
+ if (e instanceof jsx.InvalidArgumentError)
+ {
+ error = true;
+ }
+ }
+ );
+
+ assert(error);
+ }
+ },
+ {
+ feature: 'WideString.fromCharCode(0x1D11E)',
+ description: 'Return <code>WideString("\\uD834\\uDD1E")</code>',
+ code: function () {
+ var chars = WideString.fromCharCode(0x1D11E).getChars();
+ assertArrayEquals(["\uD834\uDD1E"], chars);
+ }
+ },
+ {
+ feature: 'WideString.fromCharCode(0x20AC)',
+ description: 'Return <code>WideString("\\u20AC")</code>',
+ code: function () {
+ var chars = WideString.fromCharCode(0x20AC).getChars();
+ assertArrayEquals(["\u20AC"], chars);
+ }
+ },
+
+ {
+ feature: 'wideString.charAt(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new WideString("x\uD834\uDD1E").charAt(1) === "\uD834\uDD1E");
+ assert(new WideString("\uD834\uDD1Ex").charAt(1) === "x");
+ assert(typeof new WideString("\uD834\uDD1Ex").charAt(2) == "undefined");
+
+ assert(new WideString("xy\uD834\uDD1E").charAt(-1) === "\uD834\uDD1E");
+ assert(new WideString("x\uD834\uDD1Ey").charAt(-1) === "y");
+ assert(typeof new WideString("x\uD834\uDD1Ey").charAt(-4) == "undefined");
+ }
+ },
+
+ {
+ feature: 'wideString.charCodeAt(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new WideString("x\uD834\uDD1E").charCodeAt(1) === 0x1D11E);
+ assert(new WideString("\uD834\uDD1EA").charCodeAt(1) === 65);
+
+ var result = new WideString("\uD834\uDD1EA").charCodeAt(2);
+ assert(typeof result == "number" && isNaN(result));
+
+ assert(new WideString("xy\uD834\uDD1E").charCodeAt(-1) === 0x1D11E);
+ assert(new WideString("A\uD834\uDD1EB").charCodeAt(-1) === 66);
+
+ result = new WideString("A\uD834\uDD1EB").charCodeAt(-4);
+ assert(typeof result == "number" && isNaN(result));
+ }
+ },
+
+ {
+ feature: 'wideString.concat(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x").concat(new WideString("\uD834\uDD1E"));
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834").concat(new WideString("\uDD1E"));
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1E").concat(new WideString(""));
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1E").concat(new WideString());
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x").concat("\uD834\uDD1E");
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834").concat("\uDD1E");
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1E").concat("");
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1E").concat(42);
+ assertArrayEquals(["x", "\uD834\uDD1E", "4", "2"], s.getChars());
+ }
+ },
+
+ {
+ feature: 'wideString.indexOf(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new WideString("x\uD834\uDD1Ez").indexOf(
+ new WideString("\uDD1E")) === -1);
+ assert(new WideString("x\uD834\uDD1Ez").indexOf(
+ new WideString("\uD834\uDD1Ey")) === -1);
+ assert(new WideString("x\uD834\uDD1Ey\uD834\uDD1E").indexOf(
+ new WideString("\uD834\uDD1Ey")) === 1);
+ assert(new WideString("\uD834\uDD1EA\uD834\uDD1EA").indexOf(
+ new WideString("A")) === 1);
+ assert(new WideString("\uD834\uDD1EA\uD834\uDD1EA").indexOf(
+ new WideString("A"), 2) === 3);
+
+ assert(new WideString("x\uD834\uDD1Ez").indexOf("\uDD1E") === -1);
+ assert(new WideString("x\uD834\uDD1Ez").indexOf("\uD834\uDD1Ey") === -1);
+ assert(new WideString("x\uD834\uDD1Ey\uD834\uDD1Ey").indexOf("\uD834\uDD1Ey") === 1);
+ assert(new WideString("\uD834\uDD1EA\uD834\uDD1EA").indexOf("A") === 1);
+ assert(new WideString("\uD834\uDD1EA\uD834\uDD1EA").indexOf("A", 2) === 3);
+ }
+ },
+
+ {
+ feature: 'wideString.lastIndexOf(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert(new WideString("x\uD834\uDD1E").lastIndexOf(
+ new WideString("\uDD1E")) === -1);
+ assert(new WideString("x\uD834\uDD1E\uD834\uDD1E").lastIndexOf(
+ new WideString("\uD834\uDD1E")) === 2);
+ assert(new WideString("A\uD834\uDD1EA").lastIndexOf(
+ new WideString("A")) === 2);
+ assert(new WideString("A\uD834\uDD1EA").lastIndexOf(
+ new WideString("A"), 1) === 0);
+
+ assert(new WideString("x\uD834\uDD1E").lastIndexOf("\uDD1E") === -1);
+ assert(new WideString("\uD834\uDD1Ex\uD834\uDD1E").lastIndexOf("\uD834\uDD1E") === 2);
+ assert(new WideString("A\uD834\uDD1EA").lastIndexOf("A") === 2);
+ assert(new WideString("A\uD834\uDD1EA").lastIndexOf("A", 1) === 0);
+ }
+ },
+
+ {
+ feature: 'wideString.localeCompare("…")',
+ description: 'Return the correct value (inherited generic method)',
+ code: function () {
+ assert(new WideString("x").localeCompare("y") === "x".localeCompare("y"));
+ }
+ },
+
+ {
+ feature: 'wideString.match("…")',
+ description: 'Return the correct value (inherited generic method)',
+ code: function () {
+ assertArrayEquals("x".match("x"), new WideString("x").match("x"));
+ assert(new WideString("x").match("y") === "x".match("y"));
+ }
+ },
+
+ {
+ feature: 'wideString.replace("…")',
+ description: 'Return the correct value (inherited generic method)',
+ code: function () {
+ assert(new WideString("x").replace("x", "y").toString() === "x".replace("x", "y"));
+ assert(new WideString("xx").replace(/x/g, "y").toString() === "xx".replace(/x/g, "y"));
+ }
+ },
+
+ {
+ feature: 'wideString.search("…")',
+ description: 'Return the correct value (inherited generic method)',
+ code: function () {
+ assert(new WideString("x").search(/y/) === "x".search(/y/));
+ assert(new WideString("x").search(/x/) === "x".search(/x/));
+ }
+ },
+
+ {
+ feature: 'wideString.slice(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x\uD834\uDD1Ey").slice(1);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").slice(0, 1);
+ assertArrayEquals(["x"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").slice(0, 2);
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").slice(1, 1);
+ assertArrayEquals([], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").slice(1, 3);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+ }
+ },
+
+ {
+ feature: 'wideString.substr(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x\uD834\uDD1Ey").substr(1);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substr(0, 1);
+ assertArrayEquals(["x"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substr(0, 2);
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substr(1, 1);
+ assertArrayEquals(["\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substr(1, 3);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+ }
+ },
+
+ {
+ feature: 'wideString.substring(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x\uD834\uDD1Ey").substring(1);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substring(0, 1);
+ assertArrayEquals(["x"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substring(0, 2);
+ assertArrayEquals(["x", "\uD834\uDD1E"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substring(1, 1);
+ assertArrayEquals([], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substring(1, 3);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+
+ s = new WideString("x\uD834\uDD1Ey").substring(3, 1);
+ assertArrayEquals(["\uD834\uDD1E", "y"], s.getChars());
+ }
+ },
+
+ {
+ feature: 'wideString.toString(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x\uD834\uDD1Ey").toString();
+ assert(s === "x\uD834\uDD1Ey");
+ }
+ },
+
+ {
+ feature: 'wideString.valueOf(…)',
+ description: 'Return the correct value',
+ code: function () {
+ var s = new WideString("x\uD834\uDD1Ey").valueOf();
+ assert(s === "x\uD834\uDD1Ey");
+ }
+ },
+
+ {
+ feature: 'String.fromCharCode(0x1D11E)',
+ description: 'Return <code>"\\uD834\\uDD1E"</code>',
+ code: function () {
+ assert(String.fromCharCode(0x1D11E) === "\uD834\uDD1E");
+ }
+ },
+
+ {
+ feature: 'string.charAt(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert("x\uD834\uDD1E".charAt(1) === "\uD834\uDD1E");
+ assert("\uD834\uDD1Ex".charAt(1) === "x");
+ assert(typeof "\uD834\uDD1Ex".charAt(2) == "undefined");
+
+ assert("xy\uD834\uDD1E".charAt(-1) === "\uD834\uDD1E");
+ assert("x\uD834\uDD1Ey".charAt(-1) === "y");
+ assert(typeof "x\uD834\uDD1Ey".charAt(-4) == "undefined");
+ }
+ },
+
+ {
+ feature: 'string.charCodeAt(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert("x\uD834\uDD1E".charCodeAt(1) === 0x1D11E);
+ assert("\uD834\uDD1EA".charCodeAt(1) === 65);
+
+ var result = "\uD834\uDD1EA".charCodeAt(2);
+ assert(typeof result == "number" && isNaN(result));
+
+ assert("xy\uD834\uDD1E".charCodeAt(-1) === 0x1D11E);
+ assert("A\uD834\uDD1EB".charCodeAt(-1) === 66);
+
+ result = "A\uD834\uDD1EB".charCodeAt(-4);
+ assert(typeof result == "number" && isNaN(result));
+ }
+ },
+
+ {
+ feature: 'string.getLength()',
+ description: 'Return the correct value (augmented prototype)',
+ code: function () {
+ assert("x\uD834\uDD1Ey".getLength() === 3);
+ }
+ },
+
+ {
+ feature: 'string.slice(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert("xyz".slice(1) === "yz");
+ assert("xyz".slice(0, 1) === "x");
+ assert("xyz".slice(0, 2) === "xy");
+ assert("xyz".slice(1, 1) === "");
+ assert("xyz".slice(1, 3) === "yz");
+
+ assert("x\uD834\uDD1Ey".slice(1) === "\uD834\uDD1Ey");
+ assert("x\uD834\uDD1Ey".slice(0, 1) === "x");
+ assert("x\uD834\uDD1Ey".slice(0, 2) === "x\uD834\uDD1E");
+ assert("x\uD834\uDD1Ey".slice(1, 1) === "");
+ assert("x\uD834\uDD1Ey".slice(1, 3) === "\uD834\uDD1Ey");
+ }
+ },
+
+ {
+ feature: 'string.substr(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert("xyz".substr(1) === "yz");
+ assert("xyz".substr(0, 1) === "x");
+ assert("xyz".substr(0, 2) === "xy");
+ assert("xyz".substr(1, 1) === "y");
+ assert("xyz".substr(1, 3) === "yz");
+
+ assert("x\uD834\uDD1Ey".substr(1) === "\uD834\uDD1Ey");
+ assert("x\uD834\uDD1Ey".substr(0, 1) === "x");
+ assert("x\uD834\uDD1Ey".substr(0, 2) === "x\uD834\uDD1E");
+ assert("x\uD834\uDD1Ey".substr(1, 1) === "\uD834\uDD1E");
+ assert("x\uD834\uDD1Ey".substr(1, 3) === "\uD834\uDD1Ey");
+ }
+ },
+
+ {
+ feature: 'string.substring(…)',
+ description: 'Return the correct value',
+ code: function () {
+ assert("xyz".substring(1) === "yz");
+ assert("xyz".substring(0, 1) === "x");
+ assert("xyz".substring(0, 2) === "xy");
+ assert("xyz".substring(1, 1) === "");
+ assert("xyz".substring(1, 3) === "yz");
+ assert("xyz".substring(3, 1) === "yz");
+
+ assert("x\uD834\uDD1Ey".substring(1) === "\uD834\uDD1Ey");
+ assert("x\uD834\uDD1Ey".substring(0, 1) === "x");
+ assert("x\uD834\uDD1Ey".substring(0, 2) === "x\uD834\uDD1E");
+ assert("x\uD834\uDD1Ey".substring(1, 1) === "");
+ assert("x\uD834\uDD1Ey".substring(1, 3) === "\uD834\uDD1Ey");
+ assert("x\uD834\uDD1Ey".substring(3, 1) === "\uD834\uDD1Ey");
+ }
+ }
+ ]
+ });
+}
\ No newline at end of file
/live/test/unicode.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/unicode.html
===================================================================
--- live/test/unicode.html (nonexistent)
+++ live/test/unicode.html (revision 509)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <meta http-equiv="Content-Language" content="en">
+ <meta name="GENERATOR" content="PHPEclipse 1.0">
+ <title>PointedEars' String Library Test Case: Unicode support</title>
+ <script type="text/javascript" src="../builder?src=object,string,test/test"></script>
+ <script type="text/javascript" src="../string/unicode.js"></script>
+ <script type="text/javascript" src="unicode.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1>PointedEars' String Library Unit Test:
+ <a href="/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fstring%2Funicode.js">Unicode Support</a></h1>
+ <p>See error console for details.</p>
+ </body>
+</html>
\ No newline at end of file
/live/test/unicode.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/date.html
===================================================================
--- live/test/date.html (nonexistent)
+++ live/test/date.html (revision 509)
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>date.js Unit Test</title>
+ <script type="text/javascript" src="../builder?src=object,string,test/test"></script>
+ <script type="text/javascript" src="../date.js"></script>
+ <script type="text/javascript" src="date.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1><tt><a href="/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fdate.js">date.js</tt></a>
+ Unit&nbsp;Test</h1>
+ </body>
+</html>
\ No newline at end of file
/live/test/date.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/date.js
===================================================================
--- live/test/date.js (nonexistent)
+++ live/test/date.js (revision 509)
@@ -0,0 +1,600 @@
+function runTests ()
+{
+ var assertFalse = jsx.test.assertFalse;
+ var assertTrue = jsx.test.assertTrue;
+
+ jsx.test.runner.run({
+ file: "date.js",
+ tests: [
+ {
+ feature: "jsx.date.dayOfYear(new Date(…))",
+ desc: "Return the correct day number",
+ code: function () {
+ assertTrue(jsx.date.dayOfYear(new Date(2013, 0, 31)) === 31);
+ assertTrue(jsx.date.dayOfYear(new Date(2013, 1, 28)) === 59);
+ assertTrue(jsx.date.dayOfYear(new Date(2013, 2, 1)) === 60);
+ assertTrue(jsx.date.dayOfYear(new Date(2013, 2, 31)) === 90);
+
+ /* Leap year has 366 days */
+ assertTrue(jsx.date.dayOfYear(new Date(2016, 11, 31)) === 366);
+ }
+ },
+ {
+ feature: "new Date(…).getDayOfYear()",
+ desc: "Return the correct day number",
+ code: function () {
+ assertTrue(new Date(2013, 0, 31).getDayOfYear() === 31);
+ assertTrue(new Date(2013, 1, 28).getDayOfYear() === 59);
+ assertTrue(new Date(2013, 2, 1).getDayOfYear() === 60);
+ assertTrue(new Date(2013, 2, 31).getDayOfYear() === 90);
+
+ /* Leap year has 366 days */
+ assertTrue(new Date(2016, 11, 31).getDayOfYear() === 366);
+ }
+ },
+ {
+ feature: "jsx.date.isValid()",
+ desc: "Missing <code><var>year</var></code>"
+ + "/<code><var>month</var></code>"
+ + "/<code><var>date</var></code>"
+ + " throws <code>jsx.InvalidArgumentError</code>",
+ code: function () {
+ /* no year */
+ var error = jsx.tryThis("jsx.date.isValid()",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+
+ /* no month */
+ error = jsx.tryThis("jsx.date.isValid(2013)",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+
+ /* no date */
+ error = jsx.tryThis("jsx.date.isValid(2013, 2)",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+ }
+ },
+ {
+ feature: "jsx.date.isValid(…)",
+ desc: "Detect valid and invalid datetimes",
+ code: function () {
+ /* date */
+ assertTrue(jsx.date.isValid(2013, 1, 28));
+ assertFalse(jsx.date.isValid(2013, 1, 0));
+ assertFalse(jsx.date.isValid(2013, 1, 29));
+
+ /* hours */
+ assertTrue(jsx.date.isValid(2013, 1, 1, 0));
+ assertFalse(jsx.date.isValid(2013, 1, 1, -1));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 25));
+
+ /* minutes */
+ assertTrue(jsx.date.isValid(2013, 1, 1, 0, 0));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, -1));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, 60));
+
+ /* seconds */
+ assertTrue(jsx.date.isValid(2013, 1, 1, 0, 0, 0));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, 0, -1));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, 0, 60));
+
+ /* milliseconds */
+ assertTrue(jsx.date.isValid(2013, 1, 1, 0, 0, 0, 0));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, 0, 0, -1));
+ assertFalse(jsx.date.isValid(2013, 1, 1, 0, 0, 0, 1000));
+ }
+ },
+ {
+ feature: "Date.isValid()",
+ desc: "Missing <code><var>year</var></code>"
+ + "/<code><var>month</var></code>"
+ + "/<code><var>date</var></code>"
+ + " throws <code>jsx.InvalidArgumentError</code>",
+ code: function () {
+ /* no year */
+ var error = jsx.tryThis("Date.isValid()",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+
+ /* no month */
+ error = jsx.tryThis("Date.isValid(2013)",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+
+ /* no date */
+ error = jsx.tryThis("Date.isValid(2013, 2)",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+ }
+ },
+ {
+ feature: "Date.isValid(…)",
+ desc: "Detect valid and invalid datetimes",
+ code: function () {
+ /* date */
+ assertTrue(Date.isValid(2013, 1, 28));
+ assertFalse(Date.isValid(2013, 1, 0));
+ assertFalse(Date.isValid(2013, 1, 29));
+
+ /* hours */
+ assertTrue(Date.isValid(2013, 1, 1, 0));
+ assertFalse(Date.isValid(2013, 1, 1, -1));
+ assertFalse(Date.isValid(2013, 1, 1, 25));
+
+ /* minutes */
+ assertTrue(Date.isValid(2013, 1, 1, 0, 0));
+ assertFalse(Date.isValid(2013, 1, 1, 0, -1));
+ assertFalse(Date.isValid(2013, 1, 1, 0, 60));
+
+ /* seconds */
+ assertTrue(Date.isValid(2013, 1, 1, 0, 0, 0));
+ assertFalse(Date.isValid(2013, 1, 1, 0, 0, -1));
+ assertFalse(Date.isValid(2013, 1, 1, 0, 0, 60));
+
+ /* milliseconds */
+ assertTrue(Date.isValid(2013, 1, 1, 0, 0, 0, 0));
+ assertFalse(Date.isValid(2013, 1, 1, 0, 0, 0, -1));
+ assertFalse(Date.isValid(2013, 1, 1, 0, 0, 0, 1000));
+ }
+ },
+
+ {
+ feature: "jsx.date.isLeapYear(…)",
+ desc: "Return the correct value",
+ code: function () {
+ /* not divisible by 4 */
+ assertFalse(jsx.date.isLeapYear(1995));
+
+ /* divisible by 4 */
+ assertTrue(jsx.date.isLeapYear(1996));
+
+ /* divisible by 4, but also by 100 */
+ assertFalse(jsx.date.isLeapYear(2100));
+
+ /* divisible by 4, and by 100, but also by 400 */
+ assertTrue(jsx.date.isLeapYear(2000));
+ }
+ },
+ {
+ feature: "Date.isLeapYear(…)",
+ desc: "Return the correct value",
+ code: function () {
+ /* not divisible by 4 */
+ assertFalse(Date.isLeapYear(1995));
+
+ /* divisible by 4 */
+ assertTrue(Date.isLeapYear(1996));
+
+ /* divisible by 4, but also by 100 */
+ assertFalse(Date.isLeapYear(2100));
+
+ /* divisible by 4, and by 100, but also by 400 */
+ assertTrue(Date.isLeapYear(2000));
+ }
+ },
+
+ {
+ feature: "jsx.date.isoWeekday(new Date(…))",
+ desc: "Return the correct value",
+ code: function () {
+ assertTrue(jsx.date.isoWeekday(new Date(2013, 0, 1)) === 2);
+ assertTrue(jsx.date.isoWeekday(new Date(2013, 0, 7)) === 1);
+ assertTrue(jsx.date.isoWeekday(new Date(2013, 0, 13)) === 7);
+ }
+ },
+ {
+ feature: "new Date(…).getISOWeekday()",
+ desc: "Return the correct value",
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).getISOWeekday() === 2);
+ assertTrue(new Date(2013, 0, 7).getISOWeekday() === 1);
+ assertTrue(new Date(2013, 0, 13).getISOWeekday() === 7);
+ }
+ },
+
+ {
+ feature: "jsx.date.isoWeekNumber(new Date(…))",
+ desc: "Return the correct value",
+ code: function () {
+ assertTrue(jsx.date.isoWeekNumber(new Date(2012, 0, 1)) === 52);
+ assertTrue(jsx.date.isoWeekNumber(new Date(2012, 0, 7)) === 1);
+ assertTrue(jsx.date.isoWeekNumber(new Date(2013, 0, 1)) === 1);
+ assertTrue(jsx.date.isoWeekNumber(new Date(2013, 0, 7)) === 2);
+ }
+ },
+
+ {
+ feature: 'jsx.date.tzOffsetHours(new Date(…))',
+ desc: "Return the correct value (works in CE[S]T only)",
+ code: function () {
+ var d = new Date(2013, 0, 1);
+ var d2 = new Date(2013, 3, 1);
+
+ var o = jsx.date.tzOffsetHours(d);
+ assertTrue(o.hours === 1 && o.minutes === 0);
+
+ var o = jsx.date.tzOffsetHours(d2);
+ assertTrue(o.hours === 2 && o.minutes === 0);
+ }
+ },
+
+ {
+ feature: 'jsx.date.tzOffsetHours(new Date(…), null)',
+ desc: "Return the correct value (works in CE[S]T only)",
+ code: function () {
+ var d = new Date(2013, 0, 1);
+ var d2 = new Date(2013, 3, 1);
+
+ var s = jsx.date.tzOffsetHours(d, null);
+ assertTrue(s === "+1");
+
+ var s = jsx.date.tzOffsetHours(d2, null);
+ assertTrue(s === "+2");
+ }
+ },
+
+ {
+ feature: 'jsx.date.tzOffsetHours(new Date(…), {…})',
+ desc: "Return the correct value (works in CE[S]T only)",
+ code: function () {
+ var d = new Date(2013, 0, 1);
+ var d2 = new Date(2013, 3, 1);
+
+ var options = {leadingZero: true};
+ assertTrue(jsx.date.tzOffsetHours(d, options) === "+01");
+ assertTrue(jsx.date.tzOffsetHours(d2, options) === "+02");
+
+ options = {zeroMinutes: true};
+ assertTrue(jsx.date.tzOffsetHours(d, options) === "+100");
+ assertTrue(jsx.date.tzOffsetHours(d2, options) === "+200");
+
+ options = {leadingZero: true, zeroMinutes: true};
+ assertTrue(jsx.date.tzOffsetHours(d, options) === "+0100");
+ assertTrue(jsx.date.tzOffsetHours(d2, options) === "+0200");
+
+ options = {zeroMinutes: true, delimiter: ":"};
+ assertTrue(jsx.date.tzOffsetHours(d, options) === "+1:00");
+ assertTrue(jsx.date.tzOffsetHours(d2, options) === "+2:00");
+
+ options = {leadingZero: true, zeroMinutes: true, delimiter: ":"};
+ assertTrue(jsx.date.tzOffsetHours(d, options) === "+01:00");
+ assertTrue(jsx.date.tzOffsetHours(d2, options) === "+02:00");
+ }
+ },
+
+ {
+ feature: "new Date().format()",
+ desc: "Missing <code><var>format</var></code>"
+ + " throws <code>jsx.InvalidArgumentError</code>",
+ code: function () {
+ var error = jsx.tryThis("new Date().format()",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+ }
+ },
+ {
+ feature: 'new Date().format("")',
+ desc: 'Return <code>""</code>',
+ code: function () {
+ assertTrue(new Date().format("") === "");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("\\\\W")',
+ desc: 'Return <code>"W"</code> (literal)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("\\W") === "W");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("W|WW|WWW|WWWW")',
+ desc: 'Return <code>"T|Tu|Tue|Tuesday"</code> (weekday)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("W|WW|WWW|WWWW") === "T|Tu|Tue|Tuesday");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("w")',
+ desc: 'Return <code>"2"</code> (ISO 8601 Tuesday)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("w") === "2");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("ww")',
+ desc: 'Return <code>"01"</code> (ISO 8601: 2013W01)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("ww") === "01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("YY|YYYY")',
+ desc: 'Return <code>"13|2013"</code> (year)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("YY|YYYY") === "13|2013");
+ }
+ },
+ {
+ feature: 'new Date(2013, 8, 1).format("M|MM|MMM|MMMM")',
+ desc: 'Return <code>"9|09|Sep|September"</code>',
+ code: function () {
+ assertTrue(new Date(2013, 8, 1).format("M|MM|MMM|MMMM") === "9|09|Sep|September");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).format("D|DD")',
+ desc: 'Return <code>"1|01"</code> (day of month)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).format("D|DD") === "1|01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 2, 1).format("DDD")',
+ desc: 'Return <code>"60"</code> (day of year)',
+ code: function () {
+ assertTrue(new Date(2013, 2, 1).format("DDD") === "60");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).format("H|HH")',
+ desc: 'Return <code>"9|09"</code> (hours)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).format("H|HH") === "9|09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0).format("h")',
+ desc: 'Return <code>"12"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0).format("h") === "12");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).format("h")',
+ desc: 'Return <code>"9"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).format("h") === "9");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 13).format("h")',
+ desc: 'Return <code>"1"</code> (pm)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 13).format("h") === "1");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0).format("hh")',
+ desc: 'Return <code>"12"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0).format("hh") === "12");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).format("hh")',
+ desc: 'Return <code>"09"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).format("hh") === "09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 13).format("hh")',
+ desc: 'Return <code>"01"</code> (pm)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 13).format("hh") === "01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 13, 9).format("m|mm")',
+ desc: 'Return <code>"9|09"</code> (minutes)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 13, 9).format("m|mm") === "9|09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0, 0, 9).format("s|ss")',
+ desc: 'Return <code>"9|09"</code> (seconds)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0, 0, 9).format("s|ss") === "9|09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0, 0, 0, 9).format("sss|ssss")',
+ desc: 'Return <code>"9|009"</code> (milliseconds)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0, 0, 0, 9).format("sss|ssss") === "9|009");
+ }
+ },
+
+ {
+ feature: "new Date().strftime()",
+ desc: "Missing <code><var>format</var></code>"
+ + " throws <code>jsx.InvalidArgumentError</code>",
+ code: function () {
+ var error = jsx.tryThis("new Date().strftime()",
+ function (e) {
+ jsx.dmsg(e);
+ return (e instanceof jsx.InvalidArgumentError);
+ });
+ assertTrue(error);
+ }
+ },
+ {
+ feature: 'new Date().strftime("")',
+ desc: 'Return <code>""</code>',
+ code: function () {
+ assertTrue(new Date().strftime("") === "");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%a|%A")',
+ desc: 'Return <code>"Tue|Tuesday"</code> (weekday)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%a|%A") === "Tue|Tuesday");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%d")',
+ desc: 'Return <code>"01"</code>',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%d") === "01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%e")',
+ desc: 'Return <code>"\\u00A01"</code> (<code>=== "\u00A01"</code>)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%e") === "\u00A01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 2, 1).strftime("%j")',
+ desc: 'Return <code>"060"</code> (day of year)',
+ code: function () {
+ assertTrue(new Date(2013, 2, 1).strftime("%j") === "060");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 6).strftime("%u")',
+ desc: 'Return <code>"7"</code> (ISO&nbsp;8601 Sunday)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 6).strftime("%u") === "7");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 6).strftime("%w")',
+ desc: 'Return <code>"0"</code> (Sunday)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 6).strftime("%w") === "0");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%V")',
+ desc: 'Return <code>"01"</code> (ISO 8601: 2013W01)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%V") === "01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%b")',
+ desc: 'Return <code>"Jan"</code> (January)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%b") === "Jan");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%h")',
+ desc: 'Return <code>"Jan"</code> (January)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%h") === "Jan");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%B")',
+ desc: 'Return <code>"January"</code>',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%B") === "January");
+ }
+ },
+ {
+ feature: 'new Date(2013, 8, 1).strftime("%m")',
+ desc: 'Return <code>"09"</code> (September)',
+ code: function () {
+ assertTrue(new Date(2013, 8, 1).strftime("%m") === "09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%C")',
+ desc: 'Return <code>"20"</code> (21st century)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%C") === "20");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1).strftime("%y|%Y")',
+ desc: 'Return <code>"13|2013"</code> (year)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1).strftime("%y|%Y") === "13|2013");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).strftime("%H")',
+ desc: 'Return <code>"09"</code> (hours)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).strftime("%H") === "09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).strftime("%k")',
+ desc: 'Return <code>"\\u00A09"</code> (<code>=== "\u00A09"</code> hours)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).strftime("%k") === "\u00A09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0).strftime("%I")',
+ desc: 'Return <code>"12"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0).strftime("%I") === "12");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).strftime("%I")',
+ desc: 'Return <code>"09"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).strftime("%I") === "09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 13).strftime("%I")',
+ desc: 'Return <code>"01"</code> (pm)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 13).strftime("%I") === "01");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 0).strftime("%l")',
+ desc: 'Return <code>"12"</code> (am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 0).strftime("%l") === "12");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 9).strftime("%l")',
+ desc: 'Return <code>"\\u00A09"</code> (<code>=== "\u00A09"</code> am)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 9).strftime("%l") === "\u00A09");
+ }
+ },
+ {
+ feature: 'new Date(2013, 0, 1, 13).strftime("%l")',
+ desc: 'Return <code>"\\u00A01"</code> (<code>=== "\u00A01"</code> pm)',
+ code: function () {
+ assertTrue(new Date(2013, 0, 1, 13).strftime("%l") === "\u00A01");
+ }
+ },
+ ]
+ });
+}
\ No newline at end of file
/live/test/date.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/string.js
===================================================================
--- live/test/string.js (nonexistent)
+++ live/test/string.js (revision 509)
@@ -0,0 +1,131 @@
+function runTests()
+{
+ var assert = jsx.test.assert;
+ var sprintf = jsx.string.sprintf;
+ var format = jsx.string.format;
+
+ var tests = [
+ {
+ feature: 'addSlashes("\'\\"")',
+ description: 'return <code>"\\\'\\""</code>',
+ code: function () {
+ assert(addSlashes("'\"") === "\\\'\\\"");
+ }
+ },
+ {
+ feature: 'jsx.string.parseFloat()',
+ description: 'return <code>NaN</code>',
+ code: function () {
+ assert(isNaN(jsx.string.parseFloat()));
+ }
+ },
+ {
+ feature: 'jsx.string.parseFloat("0.25abc")',
+ description: 'return <code>0.25</code>',
+ code: function () {
+ assert(jsx.string.parseFloat("0.25abc") === 0.25);
+ }
+ },
+ {
+ feature: 'jsx.string.parseFloat("0.1abc", 2)',
+ description: 'return <code>0.5</code>',
+ code: function () {
+ assert(jsx.string.parseFloat("0.1abc", 2) === 0.5);
+ }
+ },
+ {
+ feature: 'jsx.string.parseFloat("10.1abc", 8)',
+ description: 'return <code>8.125</code>',
+ code: function () {
+ assert(jsx.string.parseFloat("10.1abc", 8) === 8.125);
+ }
+ },
+ {
+ feature: 'jsx.string.parseFloat("20AC.11", 16)',
+ description: 'return <code>8364.06640625</code>',
+ code: function () {
+ assert(jsx.string.parseFloat("20AC.11", 16) === 8364.06640625);
+ }
+ }
+ ];
+
+ var formats = [
+ ["|%d|%d|", "|12345.2|-12345.2|", ],
+ ["|%9d|%9d|", "|\xA0\xA012345.2|\xA0-12345.2|",
+ "left-padded with NBSPs"],
+ ['|%-9d|%-9d|', "|\xA0\xA012345.2|\xA0-12345.2|"],
+ ['|%+9d|%+9d|', "|\xA0\xA012345.2|\xA0-12345.2|"],
+ ["|%-+9d|%-+9d|", "|\xA0\xA012345.2|\xA0-12345.2|",
+ "second align flag overrides first one"],
+ ['|%09d|%09d|', "|0012345.2|-012345.2|",
+ "left-padded with zeroes"],
+ ['|% 9d|% 9d|', "|\xA0\xA012345.2|\xA0-12345.2|",
+ "left-padded with spaces"],
+ ['|% 09d|% 09d|', "|0012345.2|-012345.2|",
+ "second padding flag overrides first\xA0one"],
+ ['|%+09d|%+09d|', "|0012345.2|-012345.2|"],
+ ['|%10.8f|%10.8f|', "|12345.20000000|-12345.20000000|"],
+ ['|%10.-2f|%10.-2f|', "|\xA0\xA0\xA0\xA0\xA012300|\xA0\xA0\xA0\xA0-12300|",
+ "left-padded with NBSPs, rounded to hundreds"]
+ ];
+
+ for (var j = 0, len = formats.length; j < len; j++)
+ {
+ var f = formats[j];
+ tests.push({
+ feature: 'jsx.string.sprintf("' + f[0] + '", 12345.2, -12345.2)',
+ desc: 'return <code>"' + f[1] + '"</code>' + (f[2] ? " (" + f[2] + ")" : ""),
+ code: (function (f) {
+ return function () {
+ assert(sprintf(f[0], 12345.2, -12345.2) === f[1]);
+ }
+ }(f))
+ });
+ }
+
+ var s = 1235;
+ var i = 12345;
+ var l = 12345678;
+ var u = 65535;
+
+ tests = tests.concat([
+ {
+ feature: 'jsx.string.sprintf("|%*d|", i, 14)',
+ desc: 'return <code>"|\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA012345|"</code>'
+ + ' (left-padded according to next argument)',
+ code: function () {
+ assert(sprintf("|%*d|", i, 14) === "|\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA012345|");
+ }
+ },
+ {
+ feature: 'jsx.string.sprintf("|x%%dy|", i, 1, 9)',
+ desc: 'return <code>"|x%dy|"</code>',
+ code: function () {
+ assert(sprintf("|x%%dy|", i, 1, 9) === "|x%dy|");
+ }
+ },
+ {
+ feature: 'jsx.string.format("|{0}|{1}|", 12345, -12345)',
+ desc: 'return <code>"|12345|-12345|"</code>',
+ code: function () {
+ assert(format("|{0}|{1}|", 12345, -12345) === "|12345|-12345|");
+ }
+ },
+ {
+ feature: 'jsx.string.format("|{x}|{y}|", {x: 12345, y: -12345})',
+ desc: 'return <code>"|12345|-12345|"</code>',
+ code: function () {
+ assert(format("|{x}|{y}|", {x: 12345, y: -12345}) === "|12345|-12345|");
+ }
+ },
+ {
+ feature: '"|{x}|{y}|".format({x: 12345, y: -12345})',
+ desc: 'return <code>"|12345|-12345|"</code>',
+ code: function () {
+ assert("|{x}|{y}|".format({x: 12345, y: -12345}) === "|12345|-12345|");
+ }
+ }
+ ]);
+
+ jsx.test.runner.run({file: "string.js", tests: tests});
+}
\ No newline at end of file
/live/test/string.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/string.html
===================================================================
--- live/test/string.html (nonexistent)
+++ live/test/string.html (revision 509)
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <meta http-equiv="Content-Language" content="en">
+ <meta name="GENERATOR" content="PHPEclipse 1.0">
+ <title>PointedEars' String Library Test Case</title>
+ <script type="text/javascript" src="jsunit/app/jsUnitCore.js"></script>
+ <script type="text/javascript" src="../object.js"></script>
+ <script type="text/javascript" src="../types.js"></script>
+ <script type="text/javascript" src="../string.js"></script>
+<!--
+ <script type="text/javascript" src="../exception.js"></script>
+ <script type="text/javascript" src="debug.js"></script>
+-->
+ <script type="text/javascript" src="test.js"></script>
+ <script type="text/javascript" src="string.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1><a href="../string.js">PointedEars' String Library</a> Unit Test</h1>
+ <p>See error console for details.</p>
+ </body>
+</html>
\ No newline at end of file
/live/test/string.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/object.html
===================================================================
--- live/test/object.html (nonexistent)
+++ live/test/object.html (revision 509)
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>object.js Unit Test</title>
+ <script type="text/javascript" src="../object.js"></script>
+ <script type="text/javascript" src="../test/test.js"></script>
+ <script type="text/javascript" src="object.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1><tt><a href="/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fobject.js">object.js</a></tt> Unit&nbsp;Test</h1>
+ </body>
+</html>
\ No newline at end of file
/live/test/object.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/builder-test.html
===================================================================
--- live/test/builder-test.html (nonexistent)
+++ live/test/builder-test.html (revision 509)
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Builder Test</title>
+ <meta name="author" content="Thomas 'PointedEars' Lahn">
+ <meta name="DC.created" content="2011-08-13">
+ <script type="text/javascript" src="../builder?src=object,types"></script>
+ </head>
+ <body>
+
+ </body>
+</html>
/live/test/builder-test.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/python.html
===================================================================
--- live/test/python.html (nonexistent)
+++ live/test/python.html (revision 509)
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>python.js Test Case</title>
+ <script type="text/javascript" src="../object.js"></script>
+ <script type="text/javascript" src="test.js"></script>
+ <script type="text/javascript" src="../map.js"></script>
+ <script type="text/javascript" src="../python.js"></script>
+ <script type="text/javascript" src="python-test.js"></script>
+ </head>
+
+ <body onload="runTests()">
+ <h1><tt>python.js</tt> Test&nbsp;Case</h1>
+ </body>
+</html>
\ No newline at end of file
Index: live/test/python-test.js
===================================================================
--- live/test/python-test.js (nonexistent)
+++ live/test/python-test.js (revision 509)
@@ -0,0 +1,96 @@
+function runTests ()
+{
+ jsx._import(jsx.test);
+ jsx._import(jsx.python);
+
+ jsx.test.runner.run({
+// setUp: function(i, f) {
+// jsx.info("Setting up test " + (i + 1) + ":\n" + f);
+// },
+
+// tearDown: function(i, f) {
+// jsx.info("Tearing down test " + (i + 1));
+// },
+
+ file: "python.js",
+ tests: [
+ {
+ feature: "jsx.python.list()",
+ desc: "<code>list()<\/code> returns <code>[]<\/code>",
+ code: function () {
+ var obj = list();
+ assert(obj.length == 0);
+ }
+ },
+
+ {
+ feature: "jsx.python.list()",
+ desc: "<code>list([1])<\/code> returns <code>[1]<\/code>",
+ code: function() {
+ var obj = list([1]);
+ assert(obj[0] === 1);
+ }
+ },
+
+ {
+ feature: "jsx.python.list()",
+ desc: '<code>list({foo: "bar"})<\/code> returns'
+ + ' <code>["foo"]</code>',
+ code: function() {
+ var obj = list({foo: "bar"});
+ assert(obj[0] === "foo");
+ }
+ },
+
+ {
+ feature: "jsx.python.dict()",
+ desc: "<code>dict()<\/code> returns <code>{}<\/code>",
+ code: function() {
+ var obj = dict();
+ assert(typeof obj.foo == "undefined");
+ }
+ },
+
+ {
+ feature: "jsx.python.dict()",
+ desc: '<code>dict({"foo": "bar"})<\/code> returns'
+ + ' <code>{foo: "bar"}<\/code>',
+ code: function() {
+ var obj = dict({foo: "bar"});
+ assert(obj.foo === "bar");
+ }
+ },
+
+ {
+ feature: "jsx.python.dict()",
+ desc: '<code>dict(["foo"], ["bar"])<\/code> returns'
+ + ' <code>{foo: "bar"}<\/code>',
+ code: function() {
+ var obj = dict(["foo"], ["bar"]);
+ assert(obj.foo === "bar");
+ }
+ },
+
+ {
+ feature: "jsx.python.set()",
+ desc: '<code>set(["a", "b", "a", "b"])<\/code> returns'
+ + ' <code>new set(["a", "b"])<\/code> or <code>new set(["b", "a"])<\/code>',
+ code: function() {
+ var _map = jsx.map;
+
+ delete jsx.map;
+ var a = set(["a", "b", "a", "b"]).toArray();
+ assert(a.length === 2
+ && ((a[0] === "a" && a[1] === "b")
+ || (a[0] === "b" && a[1] === "a")));
+
+ jsx.map = _map;
+ a = set(["a", "b", "a", "b"]).toArray();
+ assert(a.length === 2
+ && ((a[0] === "a" && a[1] === "b")
+ || (a[0] === "b" && a[1] === "a")));
+ }
+ }
+ ]
+ });
+}
\ No newline at end of file
/live/test/python-test.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom/mailto.html
===================================================================
--- live/test/dom/mailto.html (nonexistent)
+++ live/test/dom/mailto.html (revision 509)
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>mailto: URI scheme triggered with client-side scripting –
+ DOM Test Cases — PointedEars' Website</title>
+ <style type="text/css">
+ <!--
+ th
+ {
+ text-align: left;
+ }
+
+ td input[type="text"],
+ td input[type="email"]
+ {
+ width: 100%;
+ }
+
+ iframe.hidden
+ {
+ display: none;
+ }
+
+ section
+ {
+ display: block;
+ }
+
+ li article {
+ display: inline;
+ }
+ -->
+ </style>
+ <script type="text/javascript">
+ function random ()
+ {
+ var r = Math.random();
+ if (r === 1)
+ {
+ r = 0;
+ }
+
+ return r;
+ }
+
+ function randomIntInRange (leftBound, rightBound)
+ {
+ return (+leftBound) + Math.floor(random() * ((+rightBound) - leftBound));
+ }
+
+ function randomASCIIString (length)
+ {
+ var a = [];
+ a.length = length;
+ var leftBound = "A".charCodeAt(0);
+ var rightBound = "z".charCodeAt(0);
+
+ for (var i = 0, len = a.length; i < len; ++i)
+ {
+ var rnd = randomIntInRange(leftBound, rightBound);
+ a[i] = String.fromCharCode(rnd);
+ }
+
+ return a.join("");
+ }
+
+ function generateMail (form)
+ {
+ var el = form.elements;
+ var subject = el["subject"].value;
+ var uri = "mailto:" + el["to"].value + "?"
+ + (subject ? "subject=" + encodeURIComponent(subject) + "&" : "")
+ + "body="
+ + encodeURIComponent(el["body"].value || randomASCIIString(447));
+
+ var item = document.createElement("li");
+ var article = document.createElement("article");
+ article.appendChild(document.createTextNode(uri));
+ item.appendChild(article);
+
+ var output = document.getElementById("output");
+
+ if (!output.firstChild)
+ {
+ var heading = document.createElement("h2");
+ heading.appendChild(document.createTextNode("Output"));
+ output.appendChild(heading);
+
+ var list = document.createElement("ol");
+ list.id = "list";
+ output.appendChild(list);
+ }
+ else
+ {
+ list = document.getElementById("list");
+ }
+
+ list.appendChild(item);
+
+ try
+ {
+ window.location = uri;
+ return false;
+ }
+ catch (e)
+ {
+ window.alert("location = 'mailto:' not supported."
+ + " Please copy the displayed information to the e-mail"
+ + " window if necessary.");
+ form.action = uri;
+ }
+ }
+
+ function store (form)
+ {
+ var el = form.elements;
+ window.localStorage.setItem('emailgen_to', el['to'].value);
+ window.localStorage.setItem('emailgen_subject', el['subject'].value);
+ window.localStorage.setItem('emailgen_body', el['body'].value);
+ }
+
+ function restore (form)
+ {
+ var el = form.elements;
+ el['to'].value = window.localStorage.getItem('emailgen_to');
+ el['subject'].value = window.localStorage.getItem('emailgen_subject');
+ el['body'].value = window.localStorage.getItem('emailgen_body');
+ }
+ </script>
+ </head>
+
+ <body>
+ <h1>mailto: URI scheme triggered with client-side scripting</h1>
+ <section>
+ <form target="iframe" onsubmit="return generateMail(this)">
+ <table>
+ <tr>
+ <th><label for="to"
+ title="Semicolon-separated list of recipient(s)"
+ >To:</label></th>
+ <td><input name="to" id="to" type="email"
+ value="foo@bar"
+ placeholder="semicolon-separated list of recipient(s)"
+ ></td>
+ </tr>
+ <tr>
+ <th><label for="subject">Subject:</label></th>
+ <td><input name="subject" id="subject" type="text"
+ value="baz" placeholder="e-mail subject"></td>
+ </tr>
+ <tr>
+ <th style="vertical-align: top; vertical-align: baseline"
+ ><label for="body">Body:</label></th>
+ <td><textarea name="body" id="body" cols="30"
+ placeholder="447 random characters if empty"
+ ></textarea></td>
+ </tr>
+ <tr>
+ <td colspan="2" style="text-align: right"><input
+ type="button" value="&#9851; Restore from Local Storage"
+ onclick="restore(this.form)"><input
+ type="button" value="&#9997; Save in Local Storage"
+ onclick="store(this.form)"><br><input
+ type="submit" value="&#9993; Generate E-mail"></td>
+ </tr>
+ </table>
+ </form>
+ <iframe name="iframe" class="hidden"></iframe>
+ </section>
+ <section id="output"></section>
+ </body>
+</html>
\ No newline at end of file
/live/test/dom/mailto.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom/css.html
===================================================================
--- live/test/dom/css.html (nonexistent)
+++ live/test/dom/css.html (revision 509)
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>dom/css.js Test Case</title>
+ <link rel="stylesheet" type="text/css" href="../../style.css">
+ <script type="text/javascript" src="../../object.js"></script>
+ <script type="text/javascript" src="../../types.js"></script>
+ <script type="text/javascript" src="../../dom.js"></script>
+ <script type="text/javascript" src="../../collection.js"></script>
+ <script type="text/javascript" src="../../dom/css.js"></script>
+ <script type="text/javascript" src="../../test/test.js"></script>
+ <script type="text/javascript">
+ var assertFalse = jsx.test.assertFalse;
+ var assertTrue = jsx.test.assertTrue;
+
+ function test()
+ {
+ jsx.test.runner.run({
+ tests: [
+ function () {
+ var list = new jsx.dom.css.RuleList();
+ //debugger;
+ console.log(list.findBySimpleSelector("code"));
+ }
+ ]
+ });
+ }
+ </script>
+ </head>
+
+ <body onload="test()">
+ <h1><tt>dom/css.js</tt> Test&nbsp;Case</h1>
+ </body>
+</html>
\ No newline at end of file
/live/test/dom/css.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom/countdown/index.php
===================================================================
--- live/test/dom/countdown/index.php (nonexistent)
+++ live/test/dom/countdown/index.php (revision 509)
@@ -0,0 +1,81 @@
+<?php header('Content-Type: text/html; charset=UTF-8'); ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+ <head>
+ <title>DOM Test Case: Simple Countdown Timer</title>
+ <link rel="Stylesheet" href="/styles/lcars.css" type="text/css">
+ <style type="text/css">
+ <!--
+ .num {
+ text-align: right;
+ border: 1px solid transparent;
+ width: 1.25em;
+ }
+
+ .num:focus {
+ border: 1px solid white;
+ }
+
+ input {
+ width: 215px;
+ }
+ -->
+ </style>
+
+ <meta http-equiv="Content-Script-Type" content="text/javascript">
+ <script type="text/javascript" src="/scripts/object.js"></script>
+ <script type="text/javascript" src="/scripts/string.js"></script>
+ <script type="text/javascript" src="/scripts/dom.js"></script>
+ <script type="text/javascript" src="/scripts/dom/events.js"></script>
+ <script type="text/javascript" src="/scripts/dom/audio.js"></script>
+ <script type="text/javascript" src="/scripts/dom/widgets.js"></script>
+ <script type="text/javascript" src="/scripts/dom/timer.js"></script>
+ <script type="text/javascript">
+ var timer = new jsx.dom.Timer();
+ var oHours, oMins, oSec;
+
+ function handleLoad()
+ {
+ var f = document.forms[0];
+ var es = f.elements;
+
+ var SpinnerInput = jsx.dom.widgets.SpinnerInput;
+ oHours = new SpinnerInput(es['hours'], null, {
+ minValue: 0
+ });
+
+ oMins = new SpinnerInput(es['minutes'], null, {
+ leadingZero: true,
+ minValue: 0,
+ maxValue: 59
+ });
+
+ oSec = new SpinnerInput(es['seconds'], null, {
+ leadingZero: true,
+ minValue: 0,
+ maxValue: 59
+ });
+ }
+ </script>
+ </head>
+
+ <body onload="handleLoad()">
+ <h1>DOM Test Case: Simple Countdown Timer</h1>
+
+<!-- onkeypress="if (typeof event != 'undefined') handleKeypress(event)"
+ onkeyup="if (typeof event != 'undefined') handleKeypress(event)" -->
+ <form action="">
+ <input name="hours" value="0" maxlength="3" class="num">&nbsp;:
+ <input name="minutes" value="0" maxlength="2" class="num">&nbsp;:
+ <input name="seconds" value="0" maxlength="2" class="num">
+ <input type="button" value="START" class="button"
+ onclick="timer.start(this)">
+ <input type="button" value="STOP" class="button"
+ onclick="timer.stop(this)">
+ <input type="button" value="RESET" class="button"
+ onclick="timer.reset(this)">
+
+ </form>
+ </body>
+</html>
\ No newline at end of file
Index: live/test/dom/LiveEdit/liveedit.js
===================================================================
--- live/test/dom/LiveEdit/liveedit.js (nonexistent)
+++ live/test/dom/LiveEdit/liveedit.js (revision 509)
@@ -0,0 +1,61 @@
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.dom.liveedit = {
+ version: "0.1"
+};
+
+/**
+ * Creates and displays the LiveEdit editor
+ *
+ * @param target : Element
+ * Target element for the editor (optional)
+ * @param parent : Element
+ * Parent element for the editor (optional)
+ */
+jsx.dom.liveedit.LiveEdit = function(target, parent) {
+ this._toolbox = new jsx.dom.Toolbox(target, parent, {
+ style: {
+ position: "fixed",
+ top: "0",
+ right: "0",
+ width: "20%",
+ bottom: "0",
+ backgroundColor: "#ccc"
+ },
+ resizable: true,
+ resizeFlags: {
+ n: true,
+ nw: true,
+ w: true,
+ s: true
+ }
+ });
+
+ this.showToolbox();
+};
+
+jsx.dom.liveedit.LiveEdit.extend();
+
+/**
+* Shows the toolbox of this editor
+*/
+jsx.dom.liveedit.LiveEdit.prototype.showToolbox = function() {
+ this._toolbox.render();
+};
/live/test/dom/LiveEdit/liveedit.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom/LiveEdit/index.html
===================================================================
--- live/test/dom/LiveEdit/index.html (nonexistent)
+++ live/test/dom/LiveEdit/index.html (revision 509)
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <title>LiveEdit</title>
+ <script src="/scripts/object.js"></script>
+ <script src="/scripts/dom.js"></script>
+ <script src="/scripts/dom/events.js"></script>
+ <script src="/scripts/dom/widgets2.js"></script>
+ <script src="liveedit.js"></script>
+ <script>var liveEdit;</script>
+ </head>
+
+ <body onload="liveEdit = new jsx.dom.liveedit.LiveEdit()">
+ <h1>LiveEdit</h1>
+ </body>
+</html>
\ No newline at end of file
/live/test/dom/LiveEdit/index.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom/dom.htm
===================================================================
--- live/test/dom/dom.htm (nonexistent)
+++ live/test/dom/dom.htm (revision 509)
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="expires" content="0">
+<meta name="keywords"
+ content="SGML, HTML, Event, Handler, Character Reference, Script">
+<meta name="DC.Title"
+ content="Referencing Document Elements Utilizing the W3C Document Object Model (DOM)">
+<meta name="DC.Creator" content="Thomas Lahn (PointedEars@gmx.de)">
+<meta name="DC.Subject" content="Test Case">
+<meta name="DC.Description" content="">
+<meta name="DC.Publisher" content="Thomas Lahn (PointedEars@gmx.de)">
+<meta name="DC.Date" content="2002-08-03T22:16:00+02:00">
+<meta name="DC.Type" content="Service">
+<meta name="DC.Format" content="text/html">
+<meta name="DC.Identifier"
+ content="http://pointedears.de.vu/scripts/dom.htm">
+<meta name="DC.Source" content="Discussion in de.comp.lang.javascript">
+<meta name="DC.Language" content="de">
+<meta name="DC.Rights" content="All rights reserved to the author.">
+<meta name="GENERATOR" content="Quanta Plus">
+<title>Referencing Document Elements Utilizing the W3C Document
+Object Model (DOM)</title>
+<style type="text/css">
+<!--
+body {
+ color: black;
+ background-color: white;
+}
+
+a:link,a:visited,a:active,a:focus {
+ text-decoration: none
+}
+
+a:link {
+ color: blue;
+ background-color: white;
+}
+
+a:visited {
+ color: #800080;
+ background-color: #ffffff;
+}
+
+a:link :hover {
+ text-decoration: underline;
+ background-color: white;
+ color: red;
+}
+
+strong.textmarker {
+ color: black;
+ background-color: yellow;
+}
+-->
+</style>
+</head>
+<body>
+<h1>Referencing Document Elements Utilizing the W3C Document Object
+Model (DOM)</h1>
+<p style="font-size: small;">Available online: <a
+ href="http://pointedears.de.vu/scripts/dom.htm">http://pointedears.de.vu/scripts/dom.htm</a><br>
+Copyright &copy; 2002 <img src="../media/mail.gif" width="14"
+ height="15" border="0" alt="@">&nbsp;<a href="mailto:Thomas%20'PointedEars'%20Lahn%20<PointedEars
+ @gmx.de>?subject=dev/js/events">Thomas&nbsp;'PointedEars'&nbsp;Lahn</a>.
+All rights reserved.</p>
+<h2>Source Code</h2>
+<pre>
+[...]
+&lt;a href=&quot;...&quot; ...&gt; ... &lt;/a&gt;
+[...]
+&lt;a href=&quot;...&quot; ...&gt; ... &lt;/a&gt;
+[...]
+&lt;script type=&quot;text/javascript&quot;&gt;
+ function showType() {
+ alert(typeof document.getElementById(&quot;hello1&quot;));
+ alert(typeof document.getElementsByName(&quot;hello2&quot;));
+ alert(typeof document.getElementsByTagName(&quot;a&quot;));
+ alert(document.getElementById(&quot;hello1&quot;).firstChild.nodeValue);
+ alert(document.getElementsByName(&quot;hello2&quot;)[0].firstChild.nodeValue);
+ alert(document.getElementsByTagName(&quot;a&quot;)[2].firstChild.nodeValue);
+ }
+&lt;/script&gt;
+&lt;p&gt;&lt;a href=&quot;#&quot; id=&quot;hello1&quot; name=&quot;hello2&quot; onclick=&quot;showType(); return false;&quot;&gt;Click Me!&lt;/a&gt;&lt;/p&gt;
+ </pre>
+<h2>Example</h2>
+<span style="font-size: small">(requires JavaScript)</span>
+<br>
+<script type="text/javascript">
+ function showType() {
+ alert(typeof document.getElementById("hello1"));
+ alert(typeof document.getElementsByName("hello2"));
+ alert(typeof document.getElementsByTagName("a"));
+ alert(document.getElementById("hello1").firstChild.nodeValue);
+ alert(document.getElementsByName("hello2")[0].firstChild.nodeValue);
+ alert(document.getElementsByTagName("a")[2].firstChild.nodeValue);
+ }
+ </script>
+<p><a href="#" id="hello1" name="hello2"
+ onclick="showType(); return false;">Click Me!</a></p>
+</body>
+</html>
Index: live/test/dom/flash.html
===================================================================
--- live/test/dom/flash.html (nonexistent)
+++ live/test/dom/flash.html (revision 509)
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>DOM Test Case: Cross-browser Flash movies</title>
+ <script type="text/javascript" src="../../object.js"></script>
+ <script type="text/javascript" src="../../types.js"></script>
+ <script type="text/javascript" src="../../dhtml.js"></script>
+ <script type="text/javascript" src="../../flash.js"></script>
+ </head>
+
+ <body onload="jsx.dom.flash.fix()">
+ <h1>DOM Test Case: Cross-browser Flash movies</h1>
+
+ <h2><code>OBJECT</code> with flash.js</h2>
+ <object width="640" height="385"
+ data="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ type="application/x-shockwave-flash">
+ <param
+ name="movie"
+ value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ >
+ <param name="allowFullScreen" value="true">
+ <param name="allowScriptAccess" value="always">
+ </object>
+
+ <h2>YouTube HTML4-compliant: <code>OBJECT</code> with data, no type,
+ no <code>EMBED</code>, no <code>&lt;/param&gt;</code></h2>
+ <object width="640" height="385"
+ data="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1">
+ <param
+ name="movie"
+ value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ >
+ <param name="allowFullScreen" value="true">
+ <param name="allowScriptAccess" value="always">
+ </object>
+
+ <h2>YouTube HTML4-compliant: <code>OBJECT</code> without data, no type,
+ no <code>EMBED</code>, no <code>&lt;/param&gt;</code></h2>
+ <object width="640" height="385">
+ <param
+ name="movie"
+ value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ >
+ <param name="allowFullScreen" value="true">
+ <param name="allowScriptAccess" value="always">
+ </object>
+
+ <h2>YouTube HTML5-compliant: <code>OBJECT</code> without data or type,
+ and <code>EMBED</code>, no <code>&lt;/param&gt;</code>,
+ no <code>&lt;/embed&gt;</code></h2>
+ <object width="640" height="385">
+ <param
+ name="movie"
+ value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ >
+ <param name="allowFullScreen" value="true">
+ <param name="allowScriptAccess" value="always">
+ <embed
+ src="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ type="application/x-shockwave-flash"
+ allowfullscreen="true"
+ allowScriptAccess="always"
+ width="640"
+ height="385">
+ </object>
+
+ <h2>YouTube partially fixed: <code>OBJECT</code> without data or type,
+ and <code>EMBED</code>, no <code>&lt;/param&gt;</code></h2>
+ <object width="640" height="385">
+ <param
+ name="movie"
+ value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ >
+ <param name="allowFullScreen" value="true">
+ <param name="allowScriptAccess" value="always">
+ <embed
+ src="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"
+ type="application/x-shockwave-flash"
+ allowfullscreen="true"
+ allowScriptAccess="always"
+ width="640"
+ height="385"
+ ></embed>
+ </object>
+
+ <h2>YouTube original: <code>OBJECT</code> without data or type,
+ and <code>EMBED</code></h2>
+ <object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/swoOX7vnuv4&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object>
+ </body>
+</html>
\ No newline at end of file
/live/test/dom/flash.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/dom
===================================================================
--- live/test/dom (nonexistent)
+++ live/test/dom (revision 509)
/live/test/dom
Property changes:
Added: svn:ignore
## -0,0 +1,195 ##
+AOP
+
+autocompleter
+
+doc
+
+dragable
+
+events
+
+gecko
+
+Google Video_files
+
+hoverMe
+
+IE7
+
+JSON
+
+loadScript
+
+MSXML
+
+multimedia
+
+cookie-frameset.html
+
+computed-style.php
+
+circular-reference.odp
+
+dom-body.html
+
+dhtml-brute.html
+
+collision.html
+
+close.html
+
+body.html
+
+cookie.html
+
+applet.html
+
+find.html
+
+editItem.html
+
+dom.xhtml.php
+
+dom2.htm
+
+fade-lieb.js
+
+dom.html
+
+fade1.html
+
+outline-horiz.html
+
+text-save.html
+
+insert.html
+
+offsetHeight.xhtml
+
+tagsoup.php
+
+iframe.html
+
+window.html
+
+tabbed-menu.html
+
+form-name.html
+
+random-iframe.html
+
+mono.html
+
+script.xhtml
+
+iframe-scroll.php
+
+Google Video.html
+
+popup.html
+
+layer2.html
+
+scroll-iPhone.html
+
+overflow.html
+
+status.html
+
+Google Local.html
+
+print.html
+
+img-getter.php
+
+opera-style.php
+
+names-and-ids.php
+
+layer1.html
+
+select.php
+
+open.html
+
+referrer.html
+
+opacity.html
+
+frmbustr.html
+
+homepage.html
+
+framebreak.html
+
+Test.class
+
+input-onblur.html
+
+fullscreen.htm
+
+insert2.html
+
+htmlcoll.html
+
+gfx-reset.html
+
+parseReverse.html
+
+password.html
+
+window-name.html
+
+getSelection.html
+
+img-transition.html
+
+removeControl.html
+
+treeview.js
+
+img-refresh.html
+
+reset.html
+
+form-navillus.html
+
+window2.html
+
+selection.html
+
+popup2.html
+
+scrollbars2.html
+
+source.html
+
+menu.htm
+
+select-value.html
+
+mathml.xhtml
+
+scrollbars.html
+
+innerHeight.html
+
+resize.html
+
+resizeable-table.php
+
+stylesheets.html
+
+radioButton.html
+
+treewidget.html
+
+table-hover.html
+
+body-onload-redirect.html
+
+offset.html
+
+treewalker.html
+
+treewalker.js
Index: live/test/cyrillic2.php
===================================================================
--- live/test/cyrillic2.php (nonexistent)
+++ live/test/cyrillic2.php (revision 509)
@@ -0,0 +1,98 @@
+<?php
+ if (isset($_GET['correct']))
+ {
+ header('Content-Type: text/html; charset=UTF-8');
+ }
+
+ // Demonstrates what the wrong default encoding can do to a resource
+ else
+ {
+ header('Content-Type: text/html; charset=Windows-1251');
+ }
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Scripting Test Case: Encoding vs. Document Character Set</title>
+
+ <meta name="DCTERMS.created" content="2006-04-04">
+
+ <script type="text/javascript">
+ function foo()
+ {
+ alert("Понимаешь?");
+ }
+ </script>
+
+ <style type="text/css">
+ body {
+ background-color: white;
+ color: black;
+ }
+
+ div, p {
+ margin: 1em auto;
+ }
+
+ acronym {
+ border-bottom:1px dotted #999;
+ cursor: help;
+ }
+ </style>
+ </head>
+
+ <body>
+ <?php
+ if (!isset($_GET['correct']))
+ {
+ ?>
+ <p>This <a href="http://en.wikipedia.org/wiki/UTF-8"><acronym
+ title="8-bit Unicode Transformation Format">UTF-8</acronym></a>
+ encoded resource is served with the wrong encoding declaration in
+ the <tt>Content-Type</tt> <a
+ href="http://en.wikipedia.org/wiki/HyperText_Transfer_Protocol"
+ ><acronym title="HyperText Transfer Protocol"
+ >HTTP</acronym></a>&nbsp;header (<tt>charset=<a
+ href="http://en.wikipedia.org/wiki/Windows-1251"
+ >Windows-1251</a></tt>). That the included <a
+ href="http://www.w3.org/TR/html4/struct/global.html#edef-META"
+ ><tt>meta</tt></a> element "declares" the correct encoding does
+ not matter; the HTTP&nbsp;header takes precedence.</p>
+
+ <p>Nevertheless, the <a
+ href="http://www.w3.org/TR/html4/charset.html#h-5.1"
+ >Document Character Set for <acronym
+ title="HyperText Markup Language">HTML</acronym>&nbsp;4.01
+ documents</a> is still <a
+ href="http://en.wikipedia.org/wiki/Universal_Character_Set"
+ ><acronym title="the Universal Character Set">UCS</acronym></a>,
+ so character references can be used in <a
+ href="http://en.wikipedia.org/wiki/CDATA"><tt>CDATA</tt></a>
+ attribute values to represent non-<a
+ href="http://en.wikipedia.org/wiki/ASCII"><acronym
+ title="American Standard Code for Information Interchange"
+ >ASCII</acronym></a> characters:</p>
+ <?php
+ }
+ ?>
+
+ <div><input type="button"
+ value="&#1042;&#1099;&#1073;&#1077;&#1088;&#1080; &#1084;&#1077;&#1085;&#1103;!"
+ lang="ru"
+ onclick="foo();"></div>
+
+ <?php
+ if (!isset($_GET['correct']))
+ {
+ ?>
+ <div><a href="?correct=1"
+ >Serve (almost) the same content with the correct encoding declaration
+ (<tt>charset=UTF-8</tt>)</a></div>
+ <?php
+ }
+ ?>
+ </body>
+</html>
\ No newline at end of file
Index: live/test/xpath.html
===================================================================
--- live/test/xpath.html (nonexistent)
+++ live/test/xpath.html (revision 509)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>xpath.js Test Case</title>
+ <script type="text/javascript" src="../object.js"></script>
+ <script type="text/javascript" src="../dom/xpath.js"></script>
+ <script type="text/javascript" src="../test/test.js"></script>
+ <script type="text/javascript">
+ var assertFalse = jsx.test.assertFalse;
+ var assertTrue = jsx.test.assertTrue;
+
+ jsx.test.runner.run({
+ tests: [
+ function() {
+ },
+ ]
+ });
+ </script>
+ </head>
+
+ <body>
+ <h1><tt>xpath.js</tt> Test&nbsp;Case</h1>
+ </body>
+</html>
/live/test/xpath.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/httprequest.html
===================================================================
--- live/test/httprequest.html (nonexistent)
+++ live/test/httprequest.html (revision 509)
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>JSX:HTTPRequest Test Case</title>
+
+ <!-- 1. Include prerequisites and dependencies using Resource Builder (recommended) -->
+ <script type="text/javascript" src="builder.php?src=object,string,http,xpath"></script>
+
+ <script type="text/javascript" src="test.js"></script>
+
+ <script type="text/javascript">
+ function makeRequest(s)
+ {
+ var assert = jsx.test.assert;
+
+ jsx.test.runner.run({
+ tests: [
+ function () {
+ /*
+ * 2. Construct the HTTP request wrapper;
+ * the default is a GET request with asynchronous handling
+ */
+ var req = new jsx.net.http.Request("test.xml");
+
+ /* 3. Prepare processing of the HTTP response */
+ req.setSuccessListener(
+ function (x) {
+ /* 5. Get the reference to the XMLDocument object */
+ var doc = x.responseXML;
+
+ /* 6. Create the namespace resolver that fits your query best */
+ var nsResolver = jsx.dom.xpath.createFullNSResolver(null, doc);
+
+ /* 7. Make the XPath query */
+ var nodes = jsx.dom.xpath.evaluate("//res:UNDO_COUNT/text()", doc, nsResolver);
+
+ assert(nodes);
+ assert(nodes.length == 1);
+ assert(nodes[0].nodeName == "#text");
+ assert(nodes[0].data == "1.0");
+
+ /*
+ * 8. Process the result. jsx.dom.xpath.evaluate() returns a reference
+ * to an Array instance if you do not specify the result type.
+ */
+
+ /* "1.0" */
+ var data = nodes[0].data;
+ if (!jsx.dmsg(data))
+ {
+ window.alert(data);
+ }
+ });
+
+ /* 4. Make the HTTP request */
+ req.send();
+ }
+ ]
+ });
+ }
+ </script>
+ </head>
+
+ <body>
+ <form action="">
+ <input name="URI" />
+ <input type="button"
+ value="Test" onclick="makeRequest(this.form.elements['URI'].value);" />
+ </form>
+ </body>
+</html>
\ No newline at end of file
Index: live/test/compat.js
===================================================================
--- live/test/compat.js (nonexistent)
+++ live/test/compat.js (revision 509)
@@ -0,0 +1,2 @@
+var debug = jsx.debug;
+var sGlobal = "_global";
\ No newline at end of file
/live/test/compat.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/map.php
===================================================================
--- live/test/map.php (nonexistent)
+++ live/test/map.php (revision 509)
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>map.js Test Case</title>
+<!-- <script type="text/javaScript" src="jsunit/app/jsUnitCore.js"></script> -->
+ <script type="text/javascript" src="object.js"></script>
+ <script type="text/javascript" src="../map.js"></script>
+<!-- <script type="text/javascript" src="debug.js"></script>-->
+ <script type="text/javascript" src="test.js"></script>
+ <script type="text/javascript">
+ jsx._import(jsx.object, ["dmsg"]);
+ jsx._import(jsx.map, ["Map", "KeyError"]);
+ jsx._import(jsx.test, ["assert", "assertTrue", "assertFalse",
+ "assertUndefined", "runner"]);
+ function test()
+ {
+ var m;
+ runner.run({
+ setUp: function () {
+ /* Instantiation */
+ m = new Map();
+ },
+ tests: [
+ {
+ name: "put() and get()",
+ code: function() {
+ /* */
+ assertUndefined(m.put("foo", "bar"));
+ assertTrue(m.get("foo") == "bar");
+
+ assertUndefined(m.put("constructor", "a"));
+ assertTrue(m.get("constructor") == "a");
+ }
+ },
+
+ {
+ name: "remove()",
+ code: function () {
+ assertUndefined(m.put("foo", "bar"));
+ assertTrue(m.get("foo") == "bar");
+
+ assertUndefined(m.put("constructor", "a"));
+ assertTrue(m.get("constructor") == "a");
+
+ assertTrue(m.remove("constructor") == "a");
+ assertFalse(m.get("constructor", false));
+ }
+ },
+
+ {
+ name: "_maxAliasLength",
+ code: function () {
+ assertTrue(m.setMaxAliasLength(1));
+ assertTrue(m.getMaxAliasLength() === 1);
+ }
+ },
+
+ {
+ name: "Undefined key, no default --> KeyError",
+ code: function () {
+ var x = 0;
+
+ jsx.tryThis(
+ function () {
+ m.get("constructor");
+ },
+ function (e) {
+ x = e;
+ });
+
+ assertTrue(x.constructor === KeyError);
+ }
+ },
+
+ {
+ name: "size()",
+ code: function () {
+ assertTrue(m.setMaxAliasLength(255));
+ assertTrue(m.size() === 0);
+
+ m.put("baz", "bla");
+ assertTrue(m.size() === 1);
+
+ m.remove("baz");
+ assertTrue(m.size() === 0);
+ }
+ },
+
+ {
+ name: "mappings()",
+ code: function () {
+ var mappings = m.mappings();
+
+ if (typeof dmsg == "function") dmsg(mappings);
+ assertFalse(mappings.length > 0);
+
+ m.put("baz", 42);
+ mappings = m.mappings();
+ if (typeof dmsg == "function") dmsg(mappings);
+ assertTrue(mappings.length > 0);
+ }
+ },
+
+ {
+ name: "isEmpty()",
+ code: function () {
+ m.put("foo");
+ assertFalse(m.isEmpty());
+
+ m.remove("foo");
+ assertTrue(m.isEmpty());
+ }
+ },
+
+ {
+ name: "containsKey()",
+ code: function () {
+ assertFalse(m.containsKey("constructor"));
+ assertFalse(m.containsKey("foo"));
+
+ m.put("foo", "bar");
+ assertFalse(m.containsKey("constructor"));
+ assertTrue(m.containsKey("foo"));
+ }
+ },
+
+ {
+ name: "putAll()",
+ code: function () {
+ m.put("answer", 42);
+ m.put("foo", "bar");
+
+ var m2 = new Map();
+ m2.put("answer", 23);
+ m2.putAll(m);
+ assertTrue(m2.containsKey("answer"));
+ assertTrue(m2.get("answer", false) === 42);
+ assertTrue(m2.containsKey("foo"));
+
+ m2 = new Map(m);
+ assertTrue(m2.containsKey("foo"));
+ assertTrue(m2.get("answer", false) === 42);
+ }
+ },
+
+ {
+ name: "put()ing and get()ing with object key",
+ code: function() {
+ var o = {};
+ assertUndefined(m.put(o, "bar"));
+ assertTrue(m.get(o) == "bar");
+ }
+ },
+
+ {
+ name: "remove() with object key",
+ code: function () {
+ var o = {};
+ assertUndefined(m.put(o, "bar"));
+ assertTrue(m.get(o) == "bar");
+
+ assertTrue(m.remove(o) == "bar");
+ assertFalse(m.get(o, false));
+ }
+ },
+
+ {
+ name: "Undefined object key, no default --> KeyError",
+ code: function () {
+ var x = 0;
+
+ jsx.tryThis(
+ function () {
+ var o = {};
+ m.get(o);
+ },
+ function (e) {
+ x = e;
+ });
+
+ assertTrue(x.constructor === KeyError);
+ }
+ },
+
+ {
+ name: "size() with object key",
+ code: function () {
+ assertTrue(m.setMaxAliasLength(255));
+ assertTrue(m.size() === 0);
+
+ var o = {};
+ m.put(o, "bla");
+ assertTrue(m.size() === 1);
+
+ m.remove(o);
+ assertTrue(m.size() === 0);
+ }
+ },
+
+ {
+ name: "mappings() with object key",
+ code: function () {
+ var mappings = m.mappings();
+
+ if (typeof dmsg == "function") dmsg(mappings);
+ assertFalse(mappings.length > 0);
+
+ var o = {};
+ m.put(o, 42);
+ mappings = m.mappings();
+ if (typeof dmsg == "function") dmsg(mappings);
+ assertTrue(mappings.length > 0);
+ }
+ },
+
+ {
+ name: "isEmpty() with object key",
+ code: function () {
+ var o = {};
+ m.put(o);
+ assertFalse(m.isEmpty());
+
+ m.remove(o);
+ assertTrue(m.isEmpty());
+ }
+ },
+
+ {
+ name: "containsKey() with object key",
+ code: function () {
+ var o = {};
+ assertFalse(m.containsKey("constructor"));
+ assertFalse(m.containsKey(o));
+
+ m.put(o, "bar");
+ assertFalse(m.containsKey("constructor"));
+ assertTrue(m.containsKey(o));
+ }
+ },
+
+ {
+ name: "putAll() with object key",
+ code: function () {
+ m.put("answer", 42);
+ var o = {};
+ m.put(o, "bar");
+
+ var m2 = new Map();
+ m2.put("answer", 23);
+ m2.putAll(m);
+ assertTrue(m2.containsKey("answer"));
+ assertTrue(m2.get("answer", false) === 42);
+ assertTrue(m2.containsKey(o));
+
+ m2 = new Map(m);
+ assertTrue(m2.containsKey(o));
+ assertTrue(m2.get("answer", false) === 42);
+ }
+ }
+ ]
+ });
+ }
+ </script>
+ </head>
+
+ <body onload="test()">
+ <h1><tt>map.js</tt> Test&nbsp;Case</h1>
+ <ul>
+ <li><a href="view-source:http://<?php
+ echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ ?>">View HTML source</a> (uses view-source scheme)</li>
+
+ <li><a href="../map.js">View script source</a>
+ (<a href="view-source:http://<?php
+ echo $_SERVER['HTTP_HOST']
+ . preg_replace('/[^\/]+$/', '', $_SERVER['REQUEST_URI']);
+ ?>../map.js">use view-source scheme</a>)</li>
+
+ <!-- <li><a href="jsunit/testRunner?testPage=<?php
+ echo urlencode(htmlentities($_SERVER['REQUEST_URI']));
+ ?>&amp;autoRun=true"
+ >Run unit test</a></li> -->
+ </ul>
+ </body>
+</html>
\ No newline at end of file
Index: live/test/grammar.html
===================================================================
--- live/test/grammar.html (nonexistent)
+++ live/test/grammar.html (revision 509)
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>grammar.js Test Case</title>
+ <script type="text/javascript" src="../object.js"></script>
+ <script type="text/javascript" src="../grammar.js"></script>
+ <script type="text/javascript" src="test.js"></script>
+ <script type="text/javascript">
+ var Grammar2 = jsx.grammar.Grammar2;
+
+ jsx.test.runner.run({
+ tests: [
+ function () {
+ var g = new Grammar2({
+ ID: "#{nmchar}+",
+ nmchar: "[_a-z0-9-]|{nonascii}|{escape}",
+ nonascii: "[\\xA0-\\xFF]",
+ escape: "{unicode}|\\\\[^\\r\\n\\f0-9a-f]",
+ unicode: "\\\\{h}\\{1,6\\}(\\r\\n|[ \\t\\r\\n\\f])?",
+ h: "[0-9a-f]",
+ CLASS: "\\.{IDENT}",
+ IDENT: "-?{nmstart}{nmchar}*",
+ nmstart: "[_a-z]|{nonascii}|{escape}",
+ ATTRIBUTE: "\\[\\s*({IDENT}\\|)?{IDENT}\\s*((=|{INCLUDES}|{DASHMATCH})\\s*({IDENT}|{STRING})\\s*)?\\]",
+ INCLUDES: "~=",
+ DASHMATCH: "\\|=",
+ STRING: "{string1}|{string2}",
+ string1: '"([^\\n\\r\\f\\\\"]|\\\\{nl}|{escape})*"',
+ string2: "'([^\\n\\r\\f\\\\']|\\\\{nl}|{escape})*'",
+ nl: "(\\n|\\r\n|\\r|\\f)",
+ PSEUDOCLASS: ":(link|visited|hover|active|focus|target|lang"
+ + "|enabled|disabled|checked|indeterminate"
+ + "|root|nth-child|nth-last-child|nth-of-type|nth-last-of-type"
+ + "|first-child|last-child|first-of-type|last-of-type"
+ + "|only-child|only-of-type|empty|not)\\b",
+ ELEMENT: "(^|\\s)(({IDENT}|\\*)\\|)?{IDENT}",
+ PSEUDOELEMENT: "::?(first-line|first-letter|before|after)\\b"
+ },
+ true);
+ }
+ ]
+ })
+ </script>
+ </head>
+
+ <body>
+ <h1>grammar.js Test Case</h1>
+ </body>
+</html>
\ No newline at end of file
/live/test/grammar.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/test/test.xml.php
===================================================================
--- live/test/test.xml.php (nonexistent)
+++ live/test/test.xml.php (revision 509)
@@ -0,0 +1,26 @@
+<?php
+header('Content-Type: text/xml; charset=utf-8');
+echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>';
+?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+ <soap:Body>
+ <res:Response
+ xmlns:res="http://www.ebasetech.com/LADRA_COPYMOVE_TERM_OP/Response"
+ >
+ <res:OUTPUT>
+ <res:UNDO_COUNT>1.0</res:UNDO_COUNT>
+ <res:MSG>Undo complete (No more to undo)</res:MSG>
+ </res:OUTPUT>
+ </res:Response>
+ <res:OUTPUT
+ xmlns:res="http://www.ebasetech.com/LADRA_COPYMOVE_TERM_OP/Response"
+ >foo</res:OUTPUT>
+ </soap:Body>
+ <foo xmlns="bar">
+ <baz/>
+ </foo>
+ <bla/>
+</soap:Envelope>
Index: live/test/.htaccess
===================================================================
--- live/test/.htaccess (nonexistent)
+++ live/test/.htaccess (revision 509)
@@ -0,0 +1,7 @@
+RedirectMatch permanent (.*/)preloadImages(\.html?)?(.*) $1hoverMe/
+RedirectMatch permanent (.*/test/(hoverMe))(-\d.\d\d?)?(\.html?)$ $1/$2/$2$3
+RedirectMatch permanent (.*/test)/(hoverMe.*)$ $1/dom/$2
+RedirectMatch permanent (.*/whatami)-(de)(\.html?)?(.*) $1.html.$2$4
+# RedirectMatch permanent ^(.*)/(liveconn)[^/]+$ $1/$2.html
+
+# RedirectMatch permanent (.*/)obj-?insp(?!\.(css|js)) $1ObjectInspector/nightly/latest/
Index: live/test/datefmt.html
===================================================================
--- live/test/datefmt.html (nonexistent)
+++ live/test/datefmt.html (revision 509)
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="de">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Untitled</title>
+<script src="../string.js" type="text/javascript"></script>
+<script src="debug.js" type="text/javascript"></script>
+<script src="../time.js" type="text/javascript"></script>
+</head>
+
+<body>
+<script type="text/javascript">
+ var d = new Date(2001, 11, 30, 23, 59, 59, 59);
+ alert(
+ getDateFmt(
+ d,
+ "_dddd_, _d_. _MMMM_ _yyyy_ _h_:_mm_:_ss_,_S_ _TTTTT_",
+ oDateNames_de));
+ </script>
+</body>
+</html>
\ No newline at end of file
Index: live/test/close.html
===================================================================
--- live/test/close.html (nonexistent)
+++ live/test/close.html (revision 509)
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="de">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>kuckuck</title>
+</head>
+
+<body>
+hallo
+<script type="text/javascript">
+ <!--
+ function closeMe() {
+ var w = window.open(null, "test_mich", "width=34, height=40");
+ w.document.open("text/plain");
+ w.document.write("bla");
+ w.document.close();
+ self.close();
+ }
+ closeMe();
+ //-->
+ </script>
+</body>
+</html>
\ No newline at end of file
Index: live/test/hexdit.html
===================================================================
--- live/test/hexdit.html (nonexistent)
+++ live/test/hexdit.html (revision 509)
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Untitled Document</title>
+<style type="text/css">
+textarea {
+ border: thin solid black;
+ background-color: #ccc;
+}
+</style>
+<script src="math.js" type="text/javascript"></script>
+<script type="text/javascript">
+ function esrever(s)
+ {
+ if (s && s.length > 1)
+ {
+ var s2 = "";
+ for (var i = s.length -1; i > -1; i--)
+ {
+ s2 += s.charAt(i);
+ }
+ s = s2;
+ }
+
+ return s;
+ }
+
+ function update(o, cbBE)
+ {
+ var oSource = o.what;
+ var oHex = oSource.form.elements['hex'];
+ var oBin = oSource.form.elements['bin'];
+ var oTxt = oSource.form.elements['txt'];
+
+ switch (oSource.name)
+ {
+ case "hex":
+ oSource.value =
+ oSource.value.replace(/([0-9A-F]{2})([0-9A-F]{2,})/ig, "$1 $2");
+ oBin.value = "";
+ oTxt.value = "";
+ var aOctets = oSource.value.split(" ");
+
+ for (var i = 0; i < aOctets.length; i++)
+ {
+ oBin.value
+ += Math.dec2base(parseInt(aOctets[i], 16), 2, 8) + " ";
+ oTxt.value += String.fromCharCode(parseInt(aOctets[i], 16));
+ }
+ break;
+
+ case "bin":
+ oSource.value = oSource.value.replace(/([01]{8})([01]{8,})/g, "$1 $2");
+ /*
+
+ (11111111)(1111111111111111111111111)
+ 11111111 1111111111111111111111111
+ 11111111 (11111111)(11111111111111111)
+ 11111111 11111111 11111111111111111
+
+ */
+
+ oHex.value = "";
+ oTxt.value = "";
+ var aOctets = oSource.value.split(" ");
+
+ for (var i = 0; i < aOctets.length; i++)
+ {
+ oHex.value
+ += Math.dec2base(parseInt(aOctets[i], 2), 16, 2) + " ";
+ oTxt.value += String.fromCharCode(parseInt(aOctets[i], 2));
+ }
+
+ break;
+
+ case "txt":
+ oHex.value = "";
+ oBin.value = "";
+
+ for (var i = 0; i < oSource.value.length; i++)
+ {
+ oHex.value +=
+ Math.dec2base(oSource.value.charCodeAt(i), 16, 2) + " ";
+ oBin.value +=
+ Math.dec2base(oSource.value.charCodeAt(i), 2, 8) + " ";
+ }
+ }
+ o.disabled = true;
+ }
+
+ function change(o)
+ {
+ var o2 = o.form.elements['btUpdate'];
+ o2.what = o;
+ o2.disabled = false;
+ }
+ </script>
+</head>
+<body>
+<div style="text-align: center">
+<form action="" onSubmit="return false"><textarea name="hex"
+ cols="47" rows="10" onKeyPress="change(this);"></textarea> <textarea
+ name="txt" cols="16" rows="10" onKeyPress="change(this);"></textarea><br>
+<textarea name="bin" cols="71" rows="20" onKeyPress="change(this);"></textarea><br>
+<input type="button" name="btUpdate" value="Aktualisieren"
+ onclick="update(this);" disabled></form>
+</div>
+</body>
+</html>
Index: live/test
===================================================================
--- live/test (nonexistent)
+++ live/test (revision 509)
/live/test
Property changes:
Added: svn:ignore
## -0,0 +1,204 ##
+_debug.js
+
+ASP
+
+devel
+
+dom-matrix
+
+dom-testpath
+
+charset2.html
+
+charset.html
+
+all.html
+
+charset.php
+
+mime-types
+
+JS17
+
+XMLHTTP
+
+jslint
+
+jsunit-2.1a-pe
+
+SHL
+
+jsunit
+
+tmpdoc
+
+firebug
+
+E4X
+
+language-extensions
+
+SELFHTML
+
+WSH
+
+whatami
+
+date-dst-algo.txt
+
+compile.html
+
+contexts.html
+
+date2.html
+
+date3.html
+
+
+cyrillic.html
+
+debug-time.html
+
+hashfind.html
+
+dst.html
+
+events.htm
+
+encrypt.htm
+
+hashTable.html
+
+find.html
+
+dst.js
+
+dhtml.html
+
+diegoder.html
+
+Fortu-Net_de Private Nachricht senden.htm
+
+opera-style.phps
+
+liveconn.html
+
+random.html
+
+math.html
+
+plusop.xhtml
+
+js1.html
+
+test.htm
+
+number.txt
+
+jscript-named-functions.html
+
+regexp2.html
+
+menuitems.js
+
+replace.html
+
+strict.htm
+
+test3.html
+
+test5.html
+
+popup.html
+
+test8.html
+
+scope.html
+
+test6.html
+
+Winamp-CDDB.html
+
+whitespace.html
+
+matrix.php
+
+js2.html
+
+test2.html
+
+objref2.html
+
+singleton.js
+
+test.xhtml
+
+objref.html
+
+mixMe.html
+
+ident-replace.html
+
+sum.html
+
+substring.html
+
+syntax-error.html
+
+uri-matcher.html
+
+time.html
+
+plusop.png
+
+linkMe.html
+
+include.html
+
+properties.html
+
+test.html
+
+img-src.html
+
+location.html
+
+scope2.html
+
+object2.html
+
+inline.html
+
+wordlist_2.js
+
+webicq.html
+
+mixed.html
+
+RndInRng.html
+
+test4.html
+
+jscript-blocks.html
+
+index.php
+
+object.php
+
+test7.html
+
+jasmine
+
+jQuery
+
+throw.html
+
+es-matrix
+
+exception.html
+
+es-matrix2
+
+builder.php
+
+array-random.html
Index: live/dom/timeout.js
===================================================================
--- live/dom/timeout.js (nonexistent)
+++ live/dom/timeout.js (revision 509)
@@ -0,0 +1,174 @@
+/**
+ * <title>PointedEars' DOM Library: Timeout</title>
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2002-2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.dom.timeout = (function () {
+ /* Imports */
+ var _isMethod = jsx.object.isMethod;
+
+ /* Private variables */
+ var _Timeout = (
+ /**
+ * Creates a container for code that can be run later.
+ *
+ * @constructor
+ * @param {Function} f
+ * Code to be run later. The default is <code>null</code>.
+ * @param {int} delay
+ * Milliseconds after which the code will be run by default.
+ */
+ function jsx_dom_timeout_Timeout (f, delay) {
+ this.running = false;
+ this.code = f || null;
+ this.delay = parseInt(delay, 10) || 50;
+ }
+ ).extend(null, {
+ /**
+ * Runs the associated code after <var>delay</var> milliseconds;
+ * cancels any planned but not yet performed executions.
+ *
+ * @memberOf jsx.dom.timeout.Timeout.prototype
+ * @param {Function} f
+ * Code to be run later. The default is the value of the
+ * <code>code</code> property as initialized upon construction.
+ * This argument's value will modify that property if the type
+ * is correct.
+ * @param {int} delay
+ * Milliseconds after which the code will be run by default.
+ * The default is the value of the <code>delay</code> property
+ * as initialized upon construction.
+ * This argument's value will modify that property if the type
+ * is correct.
+ * @return {jsx.dom.timeout.Timeout}
+ * This object
+ */
+ run: function(f, delay) {
+ this.unset();
+
+ if (typeof f == "function")
+ {
+ this.code = f;
+ }
+
+ if (delay)
+ {
+ this.delay = parseInt(delay, 10);
+ }
+
+ if (_isMethod(jsx.global, "window", "setTimeout"))
+ {
+ this.running = true;
+ var me = this;
+ this.data = window.setTimeout(function() {
+ me.code();
+ me.unset();
+ }, this.delay);
+ }
+
+ return this;
+ },
+
+ /**
+ * Cancels the execution of the associated code
+ */
+ unset: function() {
+ if (this.running)
+ {
+ if (_isMethod(jsx.global, "window", "clearTimeout"))
+ {
+ window.clearTimeout(this.data);
+ }
+
+ this.running = false;
+ }
+ }
+ });
+
+ return {
+ /**
+ * @memberOf jsx.dom.timeout
+ */
+ Timeout: _Timeout,
+
+ TimeoutList: (
+ /**
+ * Provides a container for {@link #Timeout}s.
+ *
+ * @constructor
+ * @param {Array} timeouts
+ * The list of {@link jsx.dom.timeout#Timeout Timeouts} to be considered
+ */
+ function jsx_dom_timeout_TimeoutList (timeouts) {
+ this.timeouts = timeouts || [];
+ }
+ ).extend(null, {
+ /**
+ * Unsets all {@link #Timeout}s in this container
+ *
+ * @memberOf jsx.dom.timeout.TimeoutList.prototype
+ */
+ unsetAll: function() {
+ for (var i = 0, timeouts = this.timeouts, len = timeouts.length; i < len; ++i)
+ {
+ timeouts[i].unset();
+ }
+ }
+ }),
+
+ /**
+ * Schedules code for later execution.
+ *
+ * @param {String|Function} code
+ * Code to be executed or function to be called.
+ * @param {number} iTimeout
+ * Number of milliseconds after which <var>code</var> should be run.
+ * The time of execution is implementation-dependent, but the timer
+ * will usually not start before control has returned to the caller.
+ * @return {jsx.dom.timeout.Timeout}
+ * The created <code>Timeout</code>
+ */
+ runAsync: function (code, iTimeout) {
+ return (new _Timeout(code, iTimeout)).run();
+ }
+ };
+}());
\ No newline at end of file
/live/dom/timeout.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/widgets.js
===================================================================
--- live/dom/widgets.js (nonexistent)
+++ live/dom/widgets.js (revision 509)
@@ -0,0 +1,1848 @@
+"use strict";
+/**
+ * <title>PointedEars' DOM Library: Widgets</title>
+ *
+ * @version $Id$
+ * @requires dom.js, events.js
+ * @section Copyright & Disclaimer
+ *
+ * @author (C) 2010-2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ * (must be provided by object.js, here for JSDT only)
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ * (must be provided by dom.js, here for JSDT only)
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @type jsx.dom.widgets
+ * @memberOf __jsx.dom.widgets
+ * @namespace
+ */
+jsx.dom.widgets = (/** @constructor */ function () {
+ /* Imports */
+ var _jsx_dom = jsx.dom;
+ var _gEBTN = _jsx_dom.getElemByTagName;
+
+ /* Constant-like private variables */
+ var _AFTER = 1;
+
+ /* Other private variables */
+ /**
+ * Constructor of the abstract prototype for widgets. It provides
+ * shallow copying of the passed properties, stores the reference to the
+ * manipulated DOM object, and applies the given properties to the
+ * display of that object. Widgets should inherit from this prototype,
+ * and this constructor should be called only from the constructors of
+ * prototypes of specialized widgets.
+ *
+ * @function
+ */
+ var _Widget = (
+ /**
+ * @constructor
+ * @param {Element} oTarget
+ * Reference to the DOM object that represents the
+ * element that provides the client area for the widget. Pass a
+ * false-value to create a new element.
+ * @param {jsx.dom.widgets.Container} oParent
+ * Reference to the <code>Container</code> that should contain
+ * this widget. Pass <code>null</code> so that the widget will
+ * not be automatically appended. You can call its
+ * {@link #appendTo()} method later to append it.
+ * @param {Object} oProperties
+ */
+ function (oTarget, oParent, oProperties) {
+ this._target = oTarget || document.createElement(this.elementType);
+
+ if (oParent && !(oParent instanceof _Container))
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ [null, jsx.object.getFunctionName(oParent.constructor), "jsx.dom.widgets.Container"]);
+ }
+
+ this._parent = oParent || null;
+
+ /**
+ * @type Array[Widget]
+ */
+ this.children = [];
+
+ for (var propertyName in oProperties)
+ {
+ /* Do not overwrite methods */
+ if (typeof this[propertyName] != "function")
+ {
+ var setter = this._getSetterFor(propertyName);
+ if (setter)
+ {
+ setter.call(this, oProperties[propertyName]);
+ }
+ else
+ {
+ this[propertyName] = oProperties[propertyName];
+ }
+ }
+ }
+
+ if (this._target)
+ {
+ this.init();
+ this.update();
+ }
+ }
+ ).extend(null, (function () {
+ var _getKeys = jsx.object.getKeys;
+ var _css = _jsx_dom.css;
+
+ return {
+ /**
+ * Widgets are `div' elements by default. Inheriting classes should
+ * override this when appropriate (e. g., a menu should be a `ul').
+ *
+ * @memberOf jsx.dom.widgets.Widget.prototype
+ */
+ elementType: "div",
+
+ /**
+ * @type Element
+ */
+ _target: null,
+
+ /**
+ * Defines actions to be performed when the widget is initialized.
+ * Can be overridden by inheriting types. If it is overridden,
+ * it must also be called.
+ */
+ init: function () {
+ if (this._parent)
+ {
+ /*
+ * Automagically append widget to parent
+ * (without necessarily rendering it)
+ */
+ this.appendTo();
+ }
+ },
+
+ /**
+ * Gets a property of this widget's target object.
+ *
+ * @param {String} name
+ * @return {any}
+ */
+ getTargetProperty: function (name) {
+ return this._target[name];
+ },
+
+ /**
+ * Sets a property of this widget's target object.
+ *
+ * Use {@link #setStyleProperty()}, {@link #resetStyleProperty()}
+ * or {@link #setStyle()} for setting style properties instead.
+ *
+ * @param {String} name
+ * @param value
+ * @return {jsx.dom.widgets.Widget}
+ */
+ setTargetProperty: function (name, value) {
+ this._target[name] = value;
+ return this;
+ },
+
+ /**
+ * Sets several property of this widget's target object.
+ *
+ * Use {@link #setStyleProperty()}, {@link #resetStyleProperty()}
+ * or {@link #setStyle()} for setting style properties instead.
+ *
+ * @param {String} name
+ * @param value
+ * @return {jsx.dom.widgets.Widget}
+ */
+ setTargetProperties: function (properties) {
+ var keys = _getKeys(properties);
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var propertyName = keys[i];
+ this.setTargetProperty(propertyName, properties[propertyName]);
+ }
+
+ return this;
+ },
+
+ /**
+ * Sets a style property of this widget
+ *
+ * @param {String} name
+ * @param value
+ * @return {boolean}
+ * @see jsx.dom.css.setStyleProperty()
+ */
+ setStyleProperty: function (name, value) {
+ return _css.setStyleProperty(this._target, name, value);
+ },
+
+ /**
+ * Resets a style property of this widget to its inherited value
+ *
+ * @param {String} name
+ */
+ resetStyleProperty: function (name) {
+ _css.resetStyleProperty(this._target, name);
+ },
+
+ /**
+ * Sets several style properties of this widget at once
+ *
+ * @param {Object} style
+ */
+ setStyle: function (style) {
+ var result = true;
+
+ for (var propertyName in style)
+ {
+ var resultPart = this.setStyleProperty(propertyName, style[propertyName]);
+ if (result && !resultPart)
+ {
+ result = false;
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Defines actions to be performed when the widget's canvas should be
+ * updated to reflect its current status; should be overridden
+ * and called by inheriting types.
+ */
+ update: function () {
+ this.setStyle(this.style);
+
+ for (var i = 0, len = this.children.length; i < len; ++i)
+ {
+ this.children[i].update();
+ }
+
+ return this;
+ },
+
+ /**
+ * Causes the widget to be rendered.
+ */
+ render: function (parent) {
+ this.update();
+ this._target.style.display = "";
+ return this;
+ },
+
+ /**
+ * Causes the widget not to be rendered, without removing it
+ * from the document tree.
+ */
+ unrender: function () {
+ this._target.style.display = "none";
+ return this;
+ },
+
+ /**
+ * Shows the widget
+ */
+ show: function () {
+ this._target.style.visibility = "visible";
+ return this;
+ },
+
+ /**
+ * Hides the widget, but keeps its box
+ */
+ hide: function () {
+ this._target.style.visibility = "hidden";
+ return this;
+ },
+
+ /**
+ * Appends the widget as a child element
+ *
+ * @param {jsx.dom.widgets.Container} parent (optional)
+ * The widget that this widget should be appended to.
+ * The default is the current parent widget.
+ * @see jsx.dom.widgets.Container.prototype.appendChild()
+ */
+ appendTo: function (parent) {
+ if (typeof parent == "undefined")
+ {
+ parent = this._parent;
+ }
+
+ return parent.appendChild(this);
+ },
+
+ /**
+ * Removes the widget from the document
+ *
+ * @see jsx.dom.widgets.Container.prototype.removeChild()
+ */
+ remove: function () {
+ for (var i = 0, len = this.children.length; i < len; ++i)
+ {
+ this.children[i].remove();
+ }
+
+ /* TODO: Clean-up event listener */
+
+ return this._parent.removeChild(this);
+ },
+
+ _getSetterFor: function (propertyName) {
+ var setterName =
+ "set" + propertyName.charAt(0).toUpperCase() + propertyName.substring(1);
+ var setter = this[setterName];
+ return (typeof setter == "function") ? setter : null;
+ }
+ };
+ }()));
+
+ /**
+ * @function
+ */
+ var _Container = (
+ /**
+ * <code>Container</code>s are collapsible widgets
+ * that may have content, such as other widgets and text.
+ *
+ * @constructor
+ */
+ function jsx_dom_widgets_Container (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Container._super.apply(this, arguments);
+ }
+ ).extend(_Widget, {
+ /**
+ * Defines whether the widget should be collapsed
+ *
+ * @private
+ */
+ _collapsed: false,
+
+ innerHTML: null,
+ _defaultInnerHTML: null,
+ text: null,
+
+ init: function () {
+ _Container._super.prototype.init.call(this);
+
+ this._defaultContent = this.innerHTML || this._target.innerHTML || "";
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widget.Widget.prototype.update
+ */
+ update: (function () {
+ var _isArray = jsx.object.isArray;
+ var _createNodesFromObj = _jsx_dom.createNodesFromObj;
+ var _setTextContent = _jsx_dom.setTextContent;
+
+ return function () {
+ _Container._super.prototype.update.call(this);
+
+ var target = this._target;
+
+ var html = this.innerHTML;
+ if (html !== null)
+ {
+ if (typeof html.valueOf() == "string")
+ {
+ target.innerHTML = html;
+ }
+ else
+ {
+ _jsx_dom.removeChildren(target, target.childNodes);
+
+ if (_isArray(html))
+ {
+ html = _createNodesFromObj(html);
+ }
+
+ if (_isArray(html))
+ {
+ _jsx_dom.appendChildren(target, html);
+ }
+ else
+ {
+ target.appendChild(html);
+ }
+ }
+ }
+ else if (this.text != null)
+ {
+ _setTextContent(target, this.text);
+ }
+
+ target.onclick = this.onclick || null;
+ target.onmouseover = this.onmouseover || null;
+ target.onmousedown = this.onmousedown || null;
+
+ return this;
+ };
+ }()),
+
+ /**
+ * Returns the collapsed state of the <code>Container</code>
+ *
+ * @return {boolean}
+ * <code>true</code> if the widget is collapsed,
+ * <code>false</code> otherwise.
+ */
+ isCollapsed: function () {
+ return !!this._collapsed;
+ },
+
+ /**
+ * Sets the collapsed state of the <code>Container</code>
+ *
+ * @param {boolean} value
+ * @return {jsx.dom.widgets.Container}
+ */
+ setCollapsed: function (value) {
+ var oldValue = this.isCollapsed();
+ var newValue = this._collapsed = !!value;
+
+ if (newValue != oldValue)
+ {
+ if (newValue && typeof this.oncollapse == "function")
+ {
+ this.oncollapse();
+ }
+ else if (!newValue && typeof this.onexpand == "function")
+ {
+ this.onexpand();
+ }
+
+ if (typeof this.oncollapsedchange == "function")
+ {
+ this.oncollapsedchange(newValue);
+ }
+ }
+
+ return this;
+ },
+
+ /**
+ * Collapses the <code>Container</code>
+ */
+ collapse: function () {
+ this.setCollapsed(true);
+ },
+
+ /**
+ * Expands the <code>Container</code>
+ */
+ expand: function () {
+ this.setCollapsed(false);
+ },
+
+ /**
+ * @memberOf jsx.dom.widgets.Container.prototype
+ * @return {string}
+ */
+ getText: function () {
+ this.text = this._target.textContent;
+ return this.text;
+ },
+
+ /**
+ * @param {string} text
+ * @return {jsx.dom.widgets.Container}
+ */
+ setText: function (text) {
+ this.text = text;
+ this.innerHTML = null;
+ return this;
+ },
+
+ /**
+ * @param {string} html
+ * @return {jsx.dom.widgets.Container}
+ */
+ setInnerHTML: function (html) {
+ this.text = "";
+ this.innerHTML = html;
+ return this;
+ },
+
+ resetContent: function () {
+ this.setInnerHTML(this._defaultContent);
+ },
+
+ setChildren: function (children) {
+ for (var i = 0, len = children.length; i < len; ++i)
+ {
+ children[i].appendTo(this);
+ }
+ },
+
+ /**
+ * @param {jsx.dom.widgets.Widget} child
+ * @return {jsx.dom.widgets.Widget}
+ * The appended widget.
+ */
+ appendChild: function (child) {
+ var result = null;
+ var childTarget = child._target;
+ var target = this._target;
+ var success = true;
+
+ /*
+ * If the child widget's element is not in the document tree,
+ * or if it is not already a child of this widget's element …
+ */
+ if (childTarget.parentNode != target)
+ {
+ /*
+ * … append it as child element
+ */
+ target.appendChild(child._target);
+ success = (target.lastChild == childTarget);
+ }
+
+ if (success)
+ {
+ /*
+ * If we already have the widget as a child,
+ * move it to the end of the list
+ */
+ var childIndex = this.children.indexOf(child);
+ if (childIndex >= 0)
+ {
+ this.children.splice(childIndex, 1);
+ }
+
+ this.children.push(child);
+
+ result = child;
+ }
+
+ return result;
+ },
+
+ removeChild: function (child) {
+ var childIndex = this.children.indexOf(child);
+ if (childIndex >= 0)
+ {
+ this._target.removeChild(child._target);
+ this.children.splice(childIndex, 1);
+ }
+ }
+ });
+
+ var _Section = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Section (oTarget, oParent, oProperties) {
+ _Section._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * @memberOf jsx.dom.widgets.Section.prototype
+ */
+ elementType: "section"
+ });
+
+ var _Anchor = (
+ function jsx_dom_widgets_Anchor () {
+ jsx_dom_widgets_Anchor._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ elementType: "a"
+ });
+
+ var _Label = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Label (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Label._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * @memberOf jsx.dom.widgets.Label.prototype
+ */
+ elementType: "label"
+ });
+
+ var _TextArea = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_TextArea (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_TextArea._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * @memberOf jsx.dom.widgets.TextArea.prototype
+ */
+ elementType: "textarea"
+ });
+
+ /**
+ * @function
+ */
+ var _Input = (
+ /**
+ * An <code>Input</code> widget enhances the default
+ * <code>INPUT</code> element text box with a restriction to the
+ * characters that may be typed into it.
+ *
+ * @constructor
+ * @param {Element} oTarget
+ * Reference to the DOM object that represents the
+ * element that provides the client area for the widget. Pass a
+ * false-value to create a new element.
+ * @param {Element} oParent
+ * Reference to the DOM object that represents the parent
+ * element for this widget. Pass <code>null</code> so that the
+ * widget will not be automatically attached to the document
+ * tree. You can call its {@link #appendTo()} method later to
+ * attach it.
+ * @param {Object} oProperties
+ * @see Widget
+ */
+ function jsx_dom_widgets_Input (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Input._super.apply(this, arguments);
+
+ var me = this;
+ _jsx_dom.addEventListener(this._target, "keypress", _jsx_dom.createEventListener(
+ function (e) {
+ var charCode =
+ (typeof e.charCode != "undefined")
+ ? e.charCode
+ : (typeof e.keyCode != "undefined" ? e.keyCode : charCode);
+
+ if (! (charCode < 32
+ || me.allowedChars.test(String.fromCharCode(charCode))
+ && !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey))
+ {
+ return e.preventDefault();
+ }
+ }
+ ));
+ }
+ ).extend(_Widget, {
+ /**
+ * Regular Expression specifying the format allowed to be input into
+ * this widget. CAUTION: Too restrictive an expression could render
+ * the widget unusable.
+ *
+ * @memberOf jsx.dom.widgets.Input.prototype
+ * @type RegExp
+ */
+ allowedChars: /./,
+
+ elementType: "input",
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.update()
+ */
+ update: function () {
+ _Input._super.prototype.update.call(this);
+
+ if (typeof this.value != "undefined")
+ {
+ this._target.value = this.value;
+ }
+
+ if (typeof this.tabIndex != "undefined")
+ {
+ this._target.tabIndex = this.tabIndex;
+ }
+
+ return this;
+ }
+ });
+
+ /**
+ * @function
+ */
+ var _NumberInput = (
+ /**
+ * A <code>NumberInput</code> widget restricts the characters to be
+ * typed into it to decimal digits and the decimal point (".") by default.
+ *
+ * @constructor
+ * @param {Element} oTarget
+ * Reference to the DOM object that represents the element that
+ * provides the client area for the widget. Pass a false-value
+ * to create a new element.
+ * @param {Element} oParent
+ * Reference to the DOM object that represents the parent element
+ * for this widget. Pass <code>null</code> so that the widget will
+ * not be automatically attached to the document tree. You can call
+ * its {@link #appendTo()} method later to attach it.
+ * @param {Object} oProperties
+ * @see jsx.dom.widgets#Input
+ */
+ function jsx_dom_widgets_NumberInput (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_NumberInput._super.apply(this, arguments);
+
+ var me = this;
+
+ var target = this._target;
+ _jsx_dom.addEventListener(target, "blur", function () {
+ me.update();
+ });
+
+ _jsx_dom.addEventListener(target, "focus", function () {
+ if (me.leadingZero)
+ {
+ this.value = parseInt(this.value, 10);
+ }
+ });
+
+ if (typeof this.oninput == "function")
+ {
+ _jsx_dom.addEventListener(target, "input", this.oninput);
+ }
+ }
+ ).extend(_Input, {
+ /**
+ * @memberOf jsx.dom.widgets.NumberInput.prototype
+ * @type RegExp
+ */
+ allowedChars: /[\d.]/,
+
+ leadingZero: false,
+
+ /**
+ * @type Number
+ */
+ minValue: -Infinity,
+
+ /**
+ * @type Number
+ */
+ maxValue: Infinity,
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function () {
+ _NumberInput._super.prototype.init.call(this);
+
+ var target = this._target;
+
+ if (target.type != "number")
+ {
+ jsx.tryThis(function () { target.type = "number"; });
+ }
+
+ if (target.type == "number")
+ {
+ /* HTML5 support */
+ if (this.minValue != -Infinity)
+ {
+ target.min = this.minValue;
+ }
+
+ if (this.maxValue != Infinity)
+ {
+ target.max = this.maxValue;
+ }
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Input.prototype.update()
+ */
+ update: function () {
+ _NumberInput._super.prototype.update.call(this);
+
+ var target = this._target;
+
+ var v = parseFloat(target.value);
+
+ if (isNaN(v))
+ {
+ v = 0;
+ }
+
+ if (this.minValue != -Infinity && v < this.minValue)
+ {
+ v = this.minValue;
+ }
+ else if (this.maxValue != Infinity && v > this.maxValue)
+ {
+ v = this.maxValue;
+ }
+
+ if (this.leadingZero && this.maxValue != Infinity)
+ {
+ v = leadingZero(v, String(this.maxValue).length);
+ }
+
+ v = String(v);
+
+ if (v != target.value)
+ {
+ target.value = v;
+ }
+
+ return this;
+ },
+
+ /**
+ * @protected
+ * @param valueType
+ * @param value
+ * @return {Number}
+ */
+ _setBoundary: function (valueType, value) {
+ value = parseFloat(value);
+
+ if (!isNaN(value))
+ {
+ if (this._target.type == "number")
+ {
+ /* HTML5 support */
+ this._target[valueType] = String(value);
+ }
+
+ this[valueType + "Value"] = value;
+ }
+ else
+ {
+ jsx.throwThis(null, "Invalid boundary: " + valueType + "Value");
+ }
+
+ return this[valueType + "Value"];
+ },
+
+ setMinValue: function (value) {
+ return this._setBoundary("min", value);
+ },
+
+ setMaxValue: function (value) {
+ return this._setBoundary("max", value);
+ }
+ });
+
+ var _ListItem = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_ListItem () {
+ jsx_dom_widgets_ListItem._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * @memberOf jsx.dom.widgets.ListItem.prototype
+ */
+ elementType: "li"
+ });
+
+ /**
+ * @function
+ */
+ var _List = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_List () {
+ jsx_dom_widgets_List._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function () {
+ _List._super.prototype.init.call(this);
+
+ if (!this.items)
+ {
+ var target = this._target;
+ if (target)
+ {
+ var childNodes = target.children || target.childNodes;
+ for (var i = 0, len = childNodes.length; i < len; ++i)
+ {
+ var node = childNodes[i];
+ if (node.nodeType == 1)
+ {
+ var item = new _ListItem(node);
+ item.appendTo(this);
+ this.addItem(item);
+ }
+ }
+ }
+ }
+ },
+
+ /**
+ * @memberOf jsx.dom.widgets.List.prototype
+ * @param {any} listItem
+ */
+ addItem: function (listItem) {
+ if (!this.items)
+ {
+ this.items = [];
+ }
+
+ this.items.push(listItem);
+ },
+
+ /**
+ * @param {any} listItem
+ */
+ removeItem: function (item) {
+ var items = this.items;
+ if (items)
+ {
+ var i = items.indexOf(item);
+ if (i > -1)
+ {
+ items.splice(i, 1);
+ }
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.List.prototype.update()
+ */
+ update: function () {
+ _List._super.prototype.update.call(this);
+
+ var items = this._items;
+ var i;
+ var len = items && items.length || 0;
+
+ for (i = len; i--;)
+ {
+ var item = items[i];
+ if (item._target.tagName.toUpperCase() != "LI")
+ {
+ items[i] = new _ListItem(null, null, {
+ children: [item]
+ });
+ }
+
+ items[i].update();
+ }
+
+ var target = this._target;
+ var listItems = _gEBTN("li", -1, target);
+ var len2 = listItems.length;
+ for (i = 0; i < len && i < len2; ++i)
+ {
+ var listItem = listItems[i];
+ item = items[i];
+
+ if (listItem != item._target)
+ {
+ target.replaceChild(item._target, listItem);
+ }
+ }
+
+ for (var j = listItems.length; j-- > i;)
+ {
+ target.removeChild(listItems[j]);
+ }
+
+ for (++j; j < len; ++j)
+ {
+ items[j].appendTo(this);
+ }
+
+ return this;
+ }
+ });
+
+ var _OrderedList = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_OrderedList () {
+ jsx_dom_widgets_OrderedList._super.apply(this, arguments);
+ }
+ ).extend(_List, {
+ /**
+ * @memberOf jsx.dom.widgets.OrderedList.prototype
+ */
+ elementType: "ol"
+ });
+
+ /**
+ * @function
+ */
+ var _UnorderedList = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_UnorderedList () {
+ jsx_dom_widgets_UnorderedList._super.apply(this, arguments);
+ }
+ ).extend(_List, {
+ /**
+ * @memberOf jsx.dom.widgets.UnorderedList.prototype
+ */
+ elementType: "ul"
+ });
+
+ var _Checkbox = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Checkbox (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Checkbox._super.apply(this, arguments);
+ }
+ ).extend(_Widget, {
+ /**
+ * @memberOf jsx.dom.widgets.Checkbox.prototype
+ */
+ elementType: "input",
+
+ labelPosition: _AFTER,
+
+ /**
+ * Unique ID of this control
+ */
+ _uid: -1,
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function () {
+ _Checkbox._super.prototype.init.call(this);
+
+ this._target.type = "checkbox";
+ this._target.id = "checkbox" + (++this._uid);
+
+ var label = this.label;
+ if (label)
+ {
+ if (typeof label.valueOf() == "string")
+ {
+ this.label = new _jsx_dom.widgets.Label(null, this._parent, {
+ innerHTML: [label]
+ });
+ }
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.render()
+ */
+ render: function () {
+ _Checkbox._super.prototype.render.call(this);
+
+ var label = this.label;
+ if (label)
+ {
+ label._target.htmlFor = this._target.id;
+ label.render();
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.unrender()
+ */
+ unrender: function () {
+ _Checkbox._super.prototype.unrender.call(this);
+
+ if (this.label)
+ {
+ this.label.unrender();
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.show()
+ */
+ show: function () {
+ _Checkbox._super.protoype.show.call(this);
+
+ if (this.label)
+ {
+ this.label.show();
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.hide()
+ */
+ hide: function () {
+ _Checkbox._super.prototype.hide.call(this);
+
+ if (this.label)
+ {
+ this.label.hide();
+ }
+ },
+
+ /**
+ * Appends the widget as a child element
+ *
+ * @param parent
+ * @return {Array[Widget]}
+ * An {@link Array} containing the Checkbox widget and its
+ * label widget, if specified.
+ * @see jsx.dom.widgets.Widget.prototype.appendTo()
+ */
+ appendTo: function (parent) {
+ _Checkbox._super.prototype.appendTo.call(this, parent);
+
+ var label = this.label;
+ if (label)
+ {
+ if (this.labelPosition === _jsx_dom.widgets.position.BEFORE)
+ {
+ parent._target.insertBefore(label._target, this._target);
+ }
+ else
+ {
+ if (this.labelPosition === _jsx_dom.widgets.position.AFTER)
+ {
+ parent._target.insertBefore(label._target, this._target.nextSibling);
+ }
+ }
+
+ label.appendTo(parent);
+ }
+
+ return [this, label];
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.remove()
+ */
+ remove: function () {
+ var CheckboxTarget = _Checkbox._super.prototype.remove.call(this);
+ var labelTarget = this.label.remove();
+ return [CheckboxTarget, labelTarget];
+ }
+ });
+
+ var _Button = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Button (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Button._super.apply(this, arguments);
+ }
+ ).extend(_Container, {
+ /**
+ * @memberOf jsx.dom.widgets.Button.prototype
+ */
+ elementType: "button",
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function jsx_dom_widgets_Button_prototype_init () {
+ _Button._super.prototype.init.call(this);
+
+ var me = this;
+
+ jsx.tryThis(
+ function () {
+ me._target.type = "button";
+ },
+
+ function () {
+ /* IE 7 and other borken UAs that don't support inline-block properly */
+ jsx.throwThis("jsx.dom.widgets.InitError", "jsx.dom.widgets.Button",
+ jsx_dom_widgets_Button_prototype_init);
+ }
+ );
+ }
+ });
+
+ var _SpinnerInput = (
+ /**
+ * @constructor
+ * @param {Element} oTarget
+ * Reference to the DOM object that represents the element that
+ * provides the client area for the widget. Pass a false-value
+ * to create a new element.
+ * @param {Element} oParent
+ * Reference to the DOM object that represents the parent element
+ * for this widget. Pass <code>null</code> so that the widget
+ * will not be automatically attached to the document tree.
+ * You can call its {@link #appendTo()} method later to attach it.
+ * @param {Object} oProperties
+ */
+ function jsx_dom_widgets_SpinnerInput (oTarget, oParent, oProperties) {
+ var me = this;
+
+ jsx_dom_widgets_SpinnerInput._super.apply(this, arguments);
+
+ var target = this._target;
+ if (target.type != "number")
+ {
+ /* If no HTML5 support, try adding arrow controls */
+ jsx.tryThis(
+ function () {
+ me.buttonUp = new _jsx_dom.widgets.Button(null, null, {
+ text: "\u25B4",
+ tabIndex: target.tabIndex,
+ style: {
+ display: "block",
+ margin: "0",
+ width: "1em",
+ minWidth: "0",
+ padding: "0",
+ lineHeight: "1em"
+ },
+ onclick: function () {
+ me.inc();
+
+ if (typeof me._target.onchange == "function")
+ {
+ me._target.onchange();
+ }
+ }
+ });
+
+ me.buttonDown = new _jsx_dom.widgets.Button(null, null, {
+ text: "\u25BE",
+ tabIndex: target.tabIndex,
+ style: {
+ display: "block",
+ margin: "0",
+ width: "1em",
+ minWidth: "0",
+ padding: "0",
+ lineHeight: "1em"
+ },
+ onclick: function () {
+ me.dec();
+
+ if (typeof me._target.onchange == "function")
+ {
+ me._target.onchange();
+ }
+ }
+ });
+
+ var buttonContainer = document.createElement("div");
+ buttonContainer.style.display = "inline-block";
+ buttonContainer.style.lineHeight = "1em";
+ buttonContainer.style.verticalAlign = "middle";
+
+ buttonContainer.appendChild(me.buttonUp._target);
+ buttonContainer.appendChild(me.buttonDown._target);
+ target.parentNode.insertBefore(buttonContainer, target.nextSibling);
+ },
+
+ function (e) {
+ if (!e || e.name !== "jsx.dom.widgets.InitError")
+ {
+ /* Rethrow unhandled exception */
+ jsx.rethrowThis(e);
+ }
+ }
+ );
+
+ /* Add event listeners */
+ _jsx_dom.addEventListener(target, "keydown", _jsx_dom.createEventListener(
+ function (e) {
+ /**
+ * Increases the value of the <code>value</code> property.
+ */
+ // function inc()
+ // {
+ // var v;
+ // if ((me.maxValue == Infinity || this.value < me.maxValue)
+ // && !isNaN(v = parseInt(this.value, 10) + 1)
+ // && (this.maxLength < 1 || v.toString().length <=
+ // this.maxLength))
+ // {
+ // this.value = v;
+ // }
+ // }
+ //
+ // function dec()
+ // {
+ // var v;
+ // if ((me.minValue == -Infinity || this.value > me.minValue)
+ // && !isNaN(v = parseInt(this.value, 10) - 1)
+ // && (this.maxLength < 1 || v.toString().length <=
+ // this.maxLength))
+ // {
+ // this.value = v;
+ // }
+ // } if (me.minValue != -Infinity || me.maxValue != Infinity)
+
+ if (typeof e.keyIdentifier != "undefined")
+ {
+ /* DOM Level 3 Events draft */
+ switch (e.keyIdentifier)
+ {
+ case "Up":
+ me.inc();
+ break;
+
+ case "Down":
+ me.dec();
+ }
+ }
+ else
+ {
+ /* currently proprietary */
+ switch (e.keyCode)
+ {
+ case 38:
+ me.inc();
+ break;
+
+ case 40:
+ me.dec();
+ }
+ }
+
+ me.update();
+ }
+ ));
+
+ _jsx_dom.addEventListener(target, "keyup", function () { me.update(); });
+ }
+ }
+ ).extend(_NumberInput, {
+ /**
+ * Increases the value of the input by 1
+ *
+ * @memberOf jsx.dom.widgets.SpinnerInput.prototype
+ */
+ inc: function () {
+ var v, t = this._target;
+
+ if ( (this.maxValue == Infinity || t.value < this.maxValue)
+ && !isNaN(v = parseInt(t.value, 10) + 1)
+ && (t.maxLength < 1 || v.toString().length <= t.maxLength))
+ {
+ t.value = v;
+ }
+ },
+
+ /**
+ * Decreases the value of the input by 1
+ */
+ dec: function () {
+ var v, t = this._target;
+
+ if ( (this.minValue == -Infinity || t.value > this.minValue)
+ && !isNaN(v = parseInt(t.value, 10) - 1)
+ && (t.maxLength < 1 || v.toString().length <= t.maxLength))
+ {
+ t.value = v;
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.NumberInput.prototype.update()
+ */
+ update: function () {
+ _NumberInput.prototype.update.call(this);
+
+ var target = this._target;
+ if (typeof target.onchange == "function")
+ {
+ target.onchange();
+ }
+
+ return this;
+ }
+ });
+
+ var _CheckboxList = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_CheckboxList () {
+ jsx_dom_widgets_CheckboxList._super.apply(this, arguments);
+ }
+ ).extend(_UnorderedList, {
+ update: function () {
+ /* FIXME: Disabled update for now */
+ },
+
+ /**
+ * Adds a checkbox to this list as child of a {@link ListItem}
+ *
+ * @memberOf jsx.dom.widgets.CheckboxList.prototype
+ * @param {jsx.dom.widget.Checkbox} checkbox
+ * @return {jsx.dom.widget.ListItem}
+ * The added list item
+ */
+ addItem: function (item) {
+ if (!(item instanceof _Checkbox))
+ {
+ if (!(item instanceof _ListItem))
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ [null, jsx.object.getFunctionName(item.constructor),
+ "jsx.dom.widgets.Checkbox or jsx.dom.widgets.ListItem"]);
+ }
+
+ /* Add the contained checkbox as item */
+ var checkbox = _gEBTN("input", 0, item._target);
+ if (!checkbox|| checkbox.type.toLowerCase() != "checkbox")
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ [null, jsx.object.getFunctionName(checkbox.constructor),
+ "jsx.dom.widgets.ListItem containing a checkbox"]);
+ }
+
+ checkbox = new _Checkbox(checkbox);
+ }
+ else
+ {
+ checkbox = item;
+ }
+
+ _CheckboxList._super.prototype.addItem.call(this, checkbox);
+
+ return item;
+ }
+ });
+
+ var _Tree = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Tree (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Tree._super.apply(this, arguments);
+ }
+ ).extend(_Widget, {
+ /**
+ * @memberOf jsx.dom.widgets.Tree.prototype
+ */
+ _list: null,
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function () {
+ _Tree._super.prototype.init.call(this);
+
+ if (!this._list)
+ {
+ this._list = new _UnorderedList();
+ this._list.addItem(new _ListItem());
+ }
+ },
+
+ /**
+ * (non-JSdoc)
+ * @see jsx.dom.widgets.Widget.prototype.update()
+ */
+ update: (function () {
+ var update = _Tree._super.prototype.update;
+
+ return function () {
+ update.call(this);
+
+ return this;
+ };
+ })
+ });
+
+ var _Table = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_Table (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Table._super.apply(this, arguments);
+ }
+ ).extend(_Widget, {
+ filterColumns: [],
+
+ /**
+ * (non-JSdoc)
+ * @memberOf jsx.dom.widgets.Table.prototype
+ * @see jsx.dom.widgets.Widget.prototype.init()
+ */
+ init: function () {
+ _jsx_dom.widgets.Table._super.prototype.init.call(this);
+
+ if (this.addTitles)
+ {
+ var id2title = {};
+ var rxSpace = /[ \t\n\x0C\r]+/;
+
+ for (var rows = this._target.tBodies[0].rows, i = rows.length; i--;)
+ {
+ var row = rows[i];
+ for (var cells = row.cells, j = cells.length; j--;)
+ {
+ var cell = cells[j];
+ var headerIds = cell.headers;
+ if (headerIds)
+ {
+ headerIds = headerIds.split(rxSpace);
+ var titlePrefixes = [];
+
+ for (var k = 0, len3 = headerIds.length; k < len3; ++k)
+ {
+ var headerId = headerIds[k];
+ var titlePrefix = id2title[headerId];
+ if (!titlePrefix)
+ {
+ var header = document.getElementById(headerId);
+ if (header)
+ {
+ titlePrefix = id2title[headerId] =
+ header.abbr
+ || header.title
+ || header.textContent;
+ }
+ }
+
+ if (titlePrefix)
+ {
+ titlePrefixes.push(titlePrefix);
+ }
+ }
+
+ titlePrefixes = titlePrefixes.join("/");
+ cell.title = (cell.title
+ ? titlePrefixes + ": " + cell.title
+ : titlePrefixes);
+ }
+ }
+ }
+ }
+ },
+
+ /**
+ * Filters the rows of the table's first tbody, searching a filter
+ * string in the filter columns.
+ *
+ * @function
+ */
+ applyFilter: (function () {
+ var _getContent = _jsx_dom.getContent;
+
+ /**
+ * @param {String} filterString
+ * The string by which rows should be filtered
+ * @return {boolean}
+ * <code>true</code> if the filter could be applied,
+ * <code>false</code> otherwise. Note that <code>true</code> means only
+ * that the filter could be applied, not that any rows are filtered out.
+ */
+ function _applyFilter (filterString)
+ {
+ /* Imports */
+ var _escape = jsx.regexp.escape;
+
+ var filterColumns = this.filterColumns;
+
+ if (!filterColumns || filterColumns.length < 1)
+ {
+ return false;
+ }
+
+ var expressions = [];
+
+ for (var rows = this._target.tBodies[0].rows, i = rows.length; i--;)
+ {
+ var row = rows[i];
+ row.style.display = "none";
+
+ for (var j = 0, len = filterColumns.length; j < len; ++j)
+ {
+ var column = filterColumns[j];
+
+ if (!expressions[j])
+ {
+ var srx = (column.prefix ? "^" : "") + filterString;
+ jsx.tryThis(
+ function () {
+ expressions[j] = column.ignoreCase ? new RegExp(srx, "i") : new RegExp(srx);
+ },
+ function (e) {
+ if (e.name == "SyntaxError")
+ {
+ srx = (column.prefix ? "^" : "") + _escape(filterString);
+ expressions[j] = column.ignoreCase ? new RegExp(srx, "i") : new RegExp(srx);
+ }
+ else
+ {
+ jsx.rethrowThis(e);
+ }
+ });
+ }
+
+ if (expressions[j].test(_getContent(row.cells[column.index])))
+ {
+ row.style.display = "";
+ break;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ return _applyFilter;
+ }())
+ });
+
+ /**
+ * A <code>Timer</code> widget uses several <code>NumberInput</code>
+ * widgets to implement a digital timer.
+ */
+ var _Timer=(
+ /**
+ * @constructor
+ * @param {Element} oTarget
+ * Reference to the DOM object that represents the
+ * element that provides the client area for the widget. Pass a
+ * false-value to create a new element.
+ * @param {Element} oParent
+ * Reference to the DOM object that represents the parent
+ * element for this widget. Pass <code>null</code> so that the
+ * widget will not be automatically attached to the document
+ * tree. You can call its {@link #appendTo()} method later to
+ * attach it.
+ * @param {Object} oProperties
+ * @base jsx.dom.Widget
+ * @see NumberWidget
+ */
+ function jsx_dom_widgets_Timer (oTarget, oParent, oProperties) {
+ jsx_dom_widgets_Timer._super.apply(this, arguments);
+ }
+ ).extend(_Container);
+
+ var _InitError = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_widgets_InitError (widgetType) {
+ jsx_dom_widgets_InitError._super.call(this, widgetType);
+ }
+ ).extend(jsx.Error, {
+ /**
+ * @memberOf jsx.dom.widgets.InitError.prototype
+ */
+ name: "jsx.dom.widgets.InitError"
+ });
+
+ return {
+ /**
+ * @memberOf jsx.dom.widgets
+ * @version
+ */
+ version: "$Id$",
+
+ /**
+ * @namespace
+ */
+ position: {
+ BEFORE: -1,
+ AFTER: _AFTER
+ },
+
+ Widget: _Widget,
+ Container: _Container,
+
+ /**
+ * @function
+ */
+ Section: _Section,
+
+ /**
+ * @function
+ */
+ Anchor: _Anchor,
+
+ /**
+ * @function
+ */
+ Label: _Label,
+
+ /**
+ * @function
+ */
+ TextArea: _TextArea,
+
+ /**
+ * @function
+ */
+ Checkbox: _Checkbox,
+
+ /**
+ * @function
+ */
+ Input: _Input,
+
+ /**
+ * @function
+ */
+ Button: _Button,
+
+ /**
+ * @function
+ */
+ NumberInput: _NumberInput,
+
+ /**
+ * Input widget that allows the user to increase or decrease its
+ * current value
+ *
+ * <p>A <code>SpinnerInput</code> is a
+ * {@link jsx.dom.widgets#NumberInput NumberInput}
+ * that allows the user to increase or decrease its current value
+ * with the arrow keys or the attached arrow buttons ("to spin" it).
+ * It is possible to define a minimum or maximum value.</p>
+ *
+ * <p>If buttons are generated by JSX, they are accessible as
+ * {@link jsx.dom.widgets#Button Button} instances via the
+ * <code>buttonUp</code> and <code>buttonDown</code> properties
+ * of the widget, respectively.</p>
+ *
+ * @see jsx.dom.widgets#NumberInput
+ */
+ SpinnerInput: _SpinnerInput,
+
+ /**
+ * @function
+ */
+ ListItem: _ListItem,
+
+ /**
+ * @function
+ */
+ List: _List,
+
+ /**
+ * @function
+ */
+ OrderedList: _OrderedList,
+
+ /**
+ * @function
+ */
+ UnorderedList: _UnorderedList,
+
+ CheckboxList: _CheckboxList,
+
+ /**
+ * @type function
+ */
+ Tree: _Tree,
+
+ /**
+ * A <code>Table</code> widget provides a default <code>TABLE</code>
+ * element object with additional features, such as filtering rows.
+ */
+ Table: _Table,
+
+ /**
+ * @function
+ */
+ Timer: _Timer,
+
+ /**
+ * @function
+ */
+ InitError: _InitError
+ };
+}());
+
+function handleKeypress(e)
+{
+ console.log("e = ", e);
+ if (e)
+ {
+ var t = e._target || e.srcElement;
+ console.log("t = ", t);
+ if (t && /^\s*\binput\b\s*$/i.test(t.tagName)
+ && /^\s*\btext\b\s*$/i.test(t.type))
+ {
+ var keyCode =
+ (typeof e.which != "undefined" ? e.which
+ : (typeof e.keyCode != "undefined" ? e.keyCode : 0));
+
+ /* Allow control characters and numbers only */
+ console.log("keyCode = ", keyCode);
+ if (! (keyCode < 32 || (keyCode >= "0".charCodeAt(0) && keyCode <= "9"
+ .charCodeAt(0))))
+ {
+ /* W3C DOM */
+ if (jsx.object.isMethod(e, "stopPropagation"))
+ {
+ e.stopPropagation();
+ }
+
+ /* MSHTML DOM */
+ if (typeof e.cancelBubble != "undefined")
+ {
+ e.cancelBubble = true;
+ }
+
+ /* W3C DOM */
+ /*
+ * Order is important for Firefox 2: cancelBubble exists after
+ * preventDefault() and changes DOM behavior (event is NOT
+ * canceled then if cancelBubble is assigned `true')
+ */
+ if (jsx.object.isMethod(e, "preventDefault"))
+ {
+ e.preventDefault();
+ }
+ else
+ {
+ e.returnValue = false;
+ }
+
+ /* DEBUG */
+ // console.log(e);
+ }
+ }
+ }
+}
\ No newline at end of file
/live/dom/widgets.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/ani.js
===================================================================
--- live/dom/ani.js (nonexistent)
+++ live/dom/ani.js (revision 509)
@@ -0,0 +1,1225 @@
+"use strict";
+/**
+ * @author PointedEars
+ * @requires dom.js
+ * @requires dom/css.js
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+/**
+ * Retrieves an {@link Array} element as if by the expression
+ * <code><var>a</var>.slice(<var>index</var>,
+ * <var>index</var> + 1)[0]</code>.
+ *
+ * If <var>index</var> is negative, its absolute is counted
+ * from the end of <var>a</var>.
+ *
+ * @param {Array} a
+ * @param {Number} index
+ * @return {any}
+ */
+Array.get = function (a, index) {
+ if (isNaN(index))
+ {
+ jsx.throwThis("jsx.InvalidArgumentError", ["",
+ "(" + typeof a + ", " + typeof index + ")",
+ "(object[Array], number)"]);
+ }
+
+ index = +index;
+
+ if (index >= 0)
+ {
+ return a[index];
+ }
+
+ return a[a.length + index];
+};
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.dom.animation = (/** @constructor */ function () {
+ /* Imports */
+ var _jsx = jsx;
+ var _jsx_object = _jsx.object;
+ var _getKeys = _jsx_object.getKeys;
+ var _getProperty = _jsx_object.getProperty;
+ var _jsx_dom = _jsx.dom;
+ var _jsx_dom_css = _jsx_dom.css;
+ var _Color = _jsx_dom_css.Color;
+ var _types = _jsx_dom_css.types;
+
+ /**
+ * @type jsx.dom.animation.NoTimelineError
+ * @function
+ */
+ var _NoTimelineError = (
+ /**
+ * @constructor
+ */
+ function jsx_dom_animation_NoTimelineError () {
+ jsx_dom_animation_NoTimelineError._super.call(
+ this, "Need at least one Timeline for an Animation");
+ }
+ ).extend(jsx.Error, {
+ /**
+ * @memberOf jsx.dom.animation.NoTimelineError.prototype
+ */
+ name: "jsx.dom.animation.NoTimelineError"
+ });
+
+ /**
+ * Built-in interpolator that provides linear time interpolation.
+ *
+ * @function
+ */
+ var _interpolator_LINEAR = (function () {
+ var _isInstanceOf = _jsx_object.isInstanceOf;
+
+ /**
+ * @param startValue
+ * @param endValue
+ * @param {Number} fraction
+ * @return
+ * <var>startValue</var>
+ * + (<var>endValue</var> − <var>startValue</var>)
+ * × <var>fraction</var>
+ */
+ function jsx_dom_animation_interpolator_LINEAR
+ (startValue, endValue, fraction) {
+ if (_isInstanceOf(startValue, _Color)
+ && _isInstanceOf(endValue, _Color))
+ {
+ return new _Color(
+ startValue.red + (endValue.red - startValue.red) * fraction,
+ startValue.green + (endValue.green - startValue.green) * fraction,
+ startValue.blue + (endValue.blue - startValue.blue) * fraction,
+ startValue.opacity + (endValue.opacity - startValue.opacity) * fraction
+ );
+ }
+
+ return startValue + (endValue - startValue) * fraction;
+ }
+
+ return jsx_dom_animation_interpolator_LINEAR;
+ }());
+
+ var keyFrameComparator = function (a, b) {
+ return a.compareTo(b);
+ };
+
+ var _MIN_TIMEOUT = 10;
+ var _MIN_FRAME_LENGTH = _MIN_TIMEOUT + 1;
+
+ /**
+ * A <code>Timeline</code> consists of {@link #KeyFrame KeyFrames}
+ * and can have subordered timelines ("child timelines"). Unless
+ * specified otherwise, the time offset of an item in one timeline
+ * depends on the previous item in that timeline.
+ *
+ * <pre>
+ * Timeline: ---Action0------Action1------Action2-----Action3->
+ * </pre>
+ * <p>
+ * A <code>Timeline</code> may be standalone or part an
+ * {@link #Animation}, specified by the <code>Animation</code>'s
+ * <code>timelines</code> property, which allows it to be played
+ * parallel to other timelines:
+ * </p>
+ * <pre>
+ * Animation ---.
+ * Timeline 1: :--Action0------Action1------Action2-----Action3->
+ * Timeline 2: `----------Action0------Action1-------Action2---->
+ * </pre>
+ * <p>
+ * An item in a timeline can also be a <code>Timeline</code> itself
+ * ("child timeline"), in which case the time offset of the child
+ * timeline depends on the previous action in the parent timeline,
+ * however the time offset of the next action in the parent is
+ * independent of the child.
+ * In that case, the child timeline affects the same target object
+ * as its parent unless specified otherwise.
+ * </p>
+ * <pre>
+ * Animation ---.
+ * Timeline 1: :---Action0------+----------Action1a------------->
+ * Timeline 1a: | `---Action1a:0---Action1a:1----->
+ * Timeline 2: `-------Action0------Action1-------Action2------->
+ * </pre>
+ * <p>
+ * There is no explicit limit as to how deep timelines may be nested.
+ * However, for playing the frames of the animation each timeline's
+ * play() method must call the play() method of its child timelines.
+ * As a result, nesting depth is limited implicitly by the available
+ * stack space or limits imposed by the ECMAScript implementation,
+ * whichever comes first. Further, the more timelines are nested,
+ * the more operations need be performed at approximately the same
+ * time; this can slow down the entire animation considerably and
+ * lead to considerably higher CPU load.
+ * </p>
+ * @type jsx.dom.animation.Timeline
+ */
+ var _Timeline = jsx.object.extend(
+ /**
+ * @constructor
+ * @param {Object} oParams
+ * @throws jsx.InvalidArgumentError if no parameters were specified
+ */
+ function jsx_dom_animation_Timeline (oParams) {
+ if (!oParams)
+ {
+ jsx.throwThis("jsx.InvalidArgumentError",
+ ["Not enough arguments", typeof oParams, "Object"]);
+ }
+
+ var uid = (new Date()).getTime();
+ this.id = uid;
+
+ _jsx_object.defineProperties(this, {
+ currentRate: {
+ get: function () {
+ return this.getCurrentRate();
+ }
+ },
+
+ frameRate: {
+ get: function () {
+ return this.getFrameRate();
+ },
+
+ set: function (frameRate) {
+ return this.setFrameRate(frameRate);
+ }
+ },
+
+ id: {
+ value: uid
+ }
+ }, "jsx.dom.animation.Timelime");
+
+ for (var param in this)
+ {
+ var paramValue = oParams[param];
+
+ if (typeof paramValue != "undefined")
+ {
+ if (param == "frameLength" && paramValue < 11)
+ {
+ paramValue = 11;
+ jsx.warn("Normalizing frameLength to 11");
+ }
+
+ this[param] = paramValue;
+ }
+ }
+
+ /* Sort keyFrames by time */
+ var keyFrames = this.keyFrames;
+ var duration = Array.get(keyFrames, -1).time;
+
+ /* Compute keyframe times that are percentages of the duration */
+ var rxTimePercentage = /^\s*\+?(\d+|\d*\.\d+)\s*%\s*$/;
+ for (var i = 0, len = keyFrames.length; i < len; ++i)
+ {
+ var keyFrame = keyFrames[i];
+
+ if (!(keyFrame instanceof _Frame))
+ {
+ keyFrame = new _KeyFrame(keyFrame);
+ keyFrames[i] = keyFrame;
+ }
+
+ keyFrame._timeline = this;
+
+// if (len < keyFrames.length - 1)
+// {
+ var time = keyFrame.time;
+ if (typeof time == "string")
+ {
+ var match = time.match(rxTimePercentage);
+ if (match)
+ {
+ keyFrame.time = Math.floor(duration * (match[1] / 100));
+ }
+ }
+// }
+ }
+
+ keyFrames.sort(keyFrameComparator);
+
+// if (this.autoReverse)
+// {
+// if (keyFrames.length > 0)
+// {
+// /* Add mirrored keyframes */
+// var lastKeyFrame = Array.get(keyFrames, -1);
+// for (var i = keyFrames.length - 2; i > -1; --i)
+// {
+// var keyFrameToClone = keyFrames[i];
+// var keyFrameClone = jsx_object.clone(
+// jsx_object.COPY_ENUM_DEEP, keyFrameToClone);
+// keyFrameClone.time =
+// 2 * lastKeyFrame.time - keyFrameToClone.time;
+// keyFrames.push(keyFrameClone);
+// }
+// }
+// }
+ },
+ {
+ INDEFINITE: Number.POSITIVE_INFINITY,
+ MIN_TIMEOUT: _MIN_TIMEOUT,
+ MIN_FRAME_LENGTH: _MIN_FRAME_LENGTH,
+
+ /**
+ * Sets the <code>position</code> property of the target
+ * so that it can be animated.
+ *
+ * Sets the <code>position</code> property of the target
+ * to <code>relative</code> if it has been declated to be
+ * <code>static</code> or not declared at all.
+ *
+ * @function
+ */
+ _setPosition: (function () {
+ var _getComputedStyle = jsx.dom.css.getComputedStyle;
+
+ /**
+ * @param {Element} target
+ */
+ function jsx_dom_animation_Timeline_setPosition (target)
+ {
+ if (_getComputedStyle(target, null, "position") == "static")
+ {
+ target.style.position = "relative";
+ }
+ }
+
+ return jsx_dom_animation_Timeline_setPosition;
+ }())
+ }).extend(null, {
+ /**
+ * @memberOf jsx.dom.animation.Timeline.prototype
+ * @type Object
+ */
+ target: null,
+
+ /**
+ * @type Array[#KeyFrame]
+ */
+ keyFrames: [],
+
+ /**
+ * Defines whether this animation reverses direction on
+ * alternating cycles.
+ *
+ * If <code>true</code>, the animation will proceed forward
+ * on the first cycle, then* reverses on the second cycle,
+ * and so on. Otherwise, animation will loop such that each
+ * cycle proceeds forward from the initial {@link #KeyFrame}.
+ */
+ autoReverse: false,
+
+ /**
+ * Length of a frame in milliseconds (ms). The default value
+ * is MIN_FRAME_LENGTH so that frames at 0 ms normalized
+ * to MIN_TIMEOUT are played before the second frame.
+ */
+ frameLength: _MIN_FRAME_LENGTH,
+
+ /**
+ * If <code>true</code> (default), native (CSS3) animations
+ * are preferred. Overridden by the <code>preferNative</code>
+ * property of an enclosing {@link #Animation}.
+ */
+ preferNative: true,
+
+ /**
+ * Defines the number of cycles in this animation. The
+ * repeatCount may be <code>INDEFINITE</code> for animations
+ * that repeat indefinitely, but must otherwise be &gte; 0.
+ */
+ repeatCount: 1,
+
+ /**
+ * Indicates the current direction/speed at which the
+ * <code>Timeline</code> is being played, in frames per second.
+ *
+ * @return {Number}
+ */
+ getCurrentRate: function () {
+ return (this._playing) ? this.getFrameRate() : 0.0;
+ },
+
+ /**
+ * Indicates the total duration of this <code>Timeline</code>,
+ * including repeats. A <code>Timeline</code> with a
+ * <code>repeatCount</code> of <code>Timeline.INDEFINITE</code>
+ * will have a <code>totalDuration</code> of
+ * <code>Duration.INDEFINITE</code>.
+ *
+ * @return {Number}
+ */
+ getTotalDuration: function () {
+ return Array.get(this.keyFrames, -1).time
+ * (this.autoReverse ? 2 : 1) * this.repeatCount;
+ },
+
+ /**
+ * Retrieves the maximum frame rate at which this
+ * <code>Timeline</code> will play, in frames per second.
+ *
+ * @return {Number}
+ */
+ getFrameRate: function () {
+ return 1000 / this.frameLength;
+ },
+
+ /**
+ * Sets the maximum frame rate at which this
+ * <code>Timeline</code> will play, in frames per second.
+ *
+ * This can be used, for example, to keep particularly complex
+ * <code>Timelines</code> from over-consuming system resources.
+ * By default a <code>Timeline</code>'s frame rate is not
+ * explicitly limited, meaning the <code>Timeline</code> will
+ * play at an optimal frame rate for the underlying platform.
+ *
+ * @param {Number} frameRate
+ * The maximum frame rate at which this <code>Timeline</code>
+ * will play, in frames per second. Frame rates above 90 fps
+ * that result in a frame length shorter than 11 ms are
+ * normalized.
+ * @return {Number}
+ * The effective maximum frame rate, in frames per second
+ */
+ setFrameRate: function (frameRate) {
+ if (this._playing)
+ {
+ jsx.info("Cannot change frame rate while playing");
+ return false;
+ }
+
+ /*
+ * NOTE: Rounding down the frame length up and number of frames
+ * should help with odd frame lengths/times; frame length not
+ * rounded down (faster) to avoid animtion stall.
+ */
+ var frameLength = Math.ceil(1000 / frameRate);
+ if (frameLength < _Timeline.MIN_FRAME_LENGTH)
+ {
+ jsx.info("Requested frame rate of " + frameRate
+ + " fps (frame length of " + frameLength + " ms)"
+ + " was normalized to ca. "
+ + (1000 / _Timeline.MIN_FRAME_LENGTH) + " fps"
+ + " (" + _Timeline.MIN_FRAME_LENGTH + " ms)");
+ frameLength = _Timeline.MIN_FRAME_LENGTH;
+ }
+
+ this.frameLength = frameLength;
+
+ return frameLength;
+ },
+
+ /**
+ * Instructs the <code>Timeline</code> to evaluate all
+ * <code>KeyValue.value</code>s in the <code>Timeline</code>.
+ *
+ * @function
+ */
+ evaluateKeyValues: function () {
+ var keyFrames = this.keyFrames;
+
+ for (var i = 1, len = keyFrames.length; i < len; ++i)
+ {
+ var nextValues = keyFrames[i].values;
+ var previousValues = keyFrames[i - 1].values;
+
+ for (var propertyName in nextValues)
+ {
+ var newPropertyValue = nextValues[propertyName];
+ var oldPropertyValue = previousValues[propertyName];
+
+ if (propertyName == "style")
+ {
+ /* Compute the original values if not given */
+ for (var stylePropertyName in newPropertyValue)
+ {
+ var oldStylePropertyValue = oldPropertyValue[stylePropertyName];
+ if (typeof oldStylePropertyValue == "undefined")
+ {
+ oldStylePropertyValue = _jsx_dom_css.getComputedStyle(
+ this.target, null, stylePropertyName);
+ }
+
+ var propertyType = _getProperty(
+ _jsx_dom_css.propertyInfo, stylePropertyName,
+ {type: null}).type;
+ switch (propertyType)
+ {
+ case _types.LENGTH:
+ if (isNaN(oldStylePropertyValue))
+ {
+ oldStylePropertyValue = parseFloat(oldStylePropertyValue);
+
+ if (isNaN(oldStylePropertyValue))
+ {
+ switch (stylePropertyName)
+ {
+ case "width":
+ oldStylePropertyValue = this.target.offsetWidth;
+ break;
+
+ case "height":
+ oldStylePropertyValue = this.target.offsetHeight;
+ break;
+ }
+ }
+ }
+ break;
+
+ case _types.COLOR:
+ if (!_jsx_object.isInstanceOf(oldStylePropertyValue, _Color))
+ {
+ oldStylePropertyValue = new _Color(oldStylePropertyValue);
+ }
+ break;
+ }
+
+ if (typeof oldPropertyValue[stylePropertyName] == "undefined")
+ {
+ oldPropertyValue[stylePropertyName] = oldStylePropertyValue;
+ }
+ }
+
+ /*
+ * Set the old style value if the new one was not given.
+ * NOTE: Objects are _not_ cloned here, but this
+ * should not matter.
+ */
+ for (stylePropertyName in oldPropertyValue)
+ {
+ if (typeof newPropertyValue[stylePropertyName] == "undefined")
+ {
+ newPropertyValue[stylePropertyName] =
+ oldPropertyValue[stylePropertyName];
+ }
+ }
+ }
+ else
+ {
+ if (typeof oldPropertyValue == "undefined")
+ {
+ previousValues[propertyName] = this.target[propertyName];
+ }
+ }
+ }
+
+ /* Set old value if the new one was not given */
+ for (var propertyName in previousValues)
+ {
+ if (typeof nextValues[propertyName] == "undefined")
+ {
+ nextValues[propertyName] = oldPropertyValue[propertyName];
+ }
+ }
+ }
+ },
+
+ /**
+ * Returns the name of the CSS property for native animation.
+ *
+ * @function
+ */
+ _getNativeProperty: (function () {
+ var _camelize = jsx.dom.css.camelize;
+
+ /**
+ * @return {string}
+ * Returns the first CSS property available for native
+ * animation, preferring the unprefixed name, or
+ * the empty string if no such property is available.
+ */
+ function _getNativeProperty ()
+ {
+ var result = "";
+ var cssPropertyNames = [
+ "animation-name",
+ "-moz-animation-name",
+ "-webkit-animation-name"
+ ];
+ var style = this.target.style;
+
+ for (var i = 0, len = cssPropertyNames.length; i < len; ++i)
+ {
+ var cssPropertyName = cssPropertyNames[i];
+ var propertyName = _camelize(cssPropertyName);
+ if (typeof style[propertyName] != "undefined")
+ {
+ return cssPropertyName;
+ }
+ }
+
+ return result;
+ }
+
+ return _getNativeProperty;
+ }()),
+
+ /**
+ * Defines a native (CSS3) animation
+ *
+ * @param {String} animationPropertyName
+ * Name of the animation property, with optional
+ * vendor-specific prefix.
+ * @returns {Boolean}
+ * <code>true</code> if the definition is successful,
+ * <code>false</code> otherwise.
+ */
+ _playNative: function (animationNameProperty) {
+ var target = this.target;
+ var timelineId = this.id;
+ if (typeof target.id == "undefined")
+ {
+ target.id = "timeline-" + timelineId + "-target";
+ }
+
+ var targetId = target.id;
+
+ _Timeline._setPosition(target);
+
+ /* FIXME: Reset _here_ has no effect */
+ var styleId = "jsx-style-" + timelineId;
+ var style = document.getElementById(styleId);
+ if (style)
+ {
+ style.parentNode.removeChild(style);
+ }
+
+ style = document.createElement("style");
+ style.type = "text/css";
+ style.id = styleId;
+ var prefix = (animationNameProperty.match(/^-[^-]+/) || [""])[0];
+ if (prefix)
+ {
+ prefix += "-";
+ }
+
+ style.appendChild(document.createTextNode([
+ "@" + prefix + "keyframes jsx-timeline-" + timelineId + " {",
+ this.keyFrames.join("\n"),
+ "}",
+ "#" + targetId + " {",
+ " " + animationNameProperty + ": jsx-timeline-" + timelineId + ";",
+ " " + prefix + "animation-duration: "
+ + Array.get(this.keyFrames, -1).time + "ms;",
+ " " + prefix + "animation-fill-mode: forwards;",
+ " " + prefix + "animation-timing-function: linear;",
+ "}"
+ ].join("\n")));
+
+ var head = document.head || document.getElementsByTagName("head")[0];
+ head.appendChild(style);
+
+ return true;
+ },
+
+ /**
+ * Plays this <code>Timeline</code>
+ *
+ * @function
+ */
+ play: (function () {
+ var
+ getPropertySetter = function (target, values, bDontPlay, oTimeline) {
+ function _propertySetter ()
+ {
+ var setToRelative = false;
+
+ for (var property in values)
+ {
+ if (property == "style")
+ {
+ var style = values.style;
+ for (var styleProperty in style)
+ {
+ var thisPropertyInfo = _jsx_dom_css.propertyInfo[styleProperty];
+ if (thisPropertyInfo && thisPropertyInfo.type == _types.LENGTH)
+ {
+ if (!setToRelative && typeof style.position == "undefined")
+ {
+ _Timeline._setPosition(target);
+ setToRelative = true;
+ }
+
+ _jsx_dom_css.setStyleProperty(
+ target, styleProperty, style[styleProperty] + "px");
+ }
+ else
+ {
+ _jsx_dom_css.setStyleProperty(
+ target, styleProperty, style[styleProperty]);
+ }
+ }
+ }
+ else
+ {
+ target[property] = values[property];
+ }
+ }
+
+ if (bDontPlay)
+ {
+ oTimeline._playing = false;
+ }
+ }
+
+ return _propertySetter;
+ };
+
+ function jsx_animation_Timeline_play ()
+ {
+ /* First clear all remaining timeouts */
+ this.stop();
+
+ if (this.preferNative)
+ {
+ var nativeProperty = this._getNativeProperty();
+ if (nativeProperty)
+ {
+ return this._playNative(nativeProperty);
+ }
+ }
+
+ if (!this._keyValuesEvaluated)
+ {
+ this.evaluateKeyValues();
+ this._keyValuesEvaluated = true;
+ }
+
+ /* Fix frame length to be integer and long enough */
+ this.setFrameRate(this.getFrameRate());
+ var dt = this.frameLength;
+
+ this._playing = true;
+
+ for (var i = 1, len = this.keyFrames.length; i < len; ++i)
+ {
+ var nextKeyFrame = this.keyFrames[i];
+ var previousKeyFrame = this.keyFrames[i - 1];
+ var previousValues = previousKeyFrame.values;
+ var nextValues = nextKeyFrame.values;
+
+ /* Display the previous keyframe, then play the tween */
+
+ /*
+ * NOTE: Rounding the frame length up (see above) and the number
+ * of frames down should help with odd frame lengths/times;
+ * frame length not rounded down (faster) to avoid animation stall.
+ */
+ var numFrames = Math.floor(
+ (nextKeyFrame.time - previousKeyFrame.time) / dt);
+
+ var frameValues = _jsx_object.clone(
+ _jsx_object.COPY_ENUM_DEEP, previousValues);
+ var t = previousKeyFrame.time;
+
+ var lastFrameIndex = numFrames - 1;
+ for (var currentFrameIndex = 0;
+ currentFrameIndex < lastFrameIndex;
+ ++currentFrameIndex)
+ {
+ for (var property in frameValues)
+ {
+ var interpolate = nextKeyFrame.interpolate;
+ if (property == "style")
+ {
+ var previousStyle = previousValues.style;
+ var frameStyle = frameValues.style;
+ var nextStyle = nextValues.style;
+
+ for (var styleProperty in frameStyle)
+ {
+ interpolate = nextKeyFrame.interpolate;
+ var nextStyleValue = nextStyle[styleProperty];
+ if (_jsx_object.isInstanceOf(nextStyleValue, _KeyValue))
+ {
+ nextStyleValue = nextStyleValue.value;
+ interpolate = nextStyleValue.interpolate;
+ }
+
+ frameStyle[styleProperty] = interpolate(
+ previousStyle[styleProperty],
+ nextStyleValue,
+ currentFrameIndex / numFrames);
+ }
+ }
+ else
+ {
+ var nextValue = nextValues[property];
+
+ if (_jsx_object.isInstanceOf(nextValue, _KeyValue))
+ {
+ nextValue = nextValue.value;
+ interpolate = nextValue.interpolate;
+ }
+
+ frameValues[property] = interpolate(
+ previousValues[property],
+ nextValue,
+ currentFrameIndex / numFrames);
+ }
+ }
+
+ this._timeouts.push(
+ window.setTimeout(
+ getPropertySetter(this.target,
+ _jsx_object.clone(_jsx_object.COPY_ENUM_DEEP, frameValues),
+ false, this),
+ t));
+
+ t += dt;
+ }
+
+ /* Display the last keyframe */
+ if (i == this.keyFrames.length - 1)
+ {
+ this._timeouts.push(
+ window.setTimeout(
+ getPropertySetter(this.target, nextValues, true, this),
+ t));
+ }
+ }
+ }
+
+ return jsx_animation_Timeline_play;
+ }()),
+
+ /**
+ * Prevents the <code>Timeline</code> from continuing to play.
+ */
+ stop: function () {
+ var timeouts = this._timeouts;
+ for (var i = 0, len = timeouts && timeouts.length; i < len; ++i)
+ {
+ window.clearTimeout(timeouts[i]);
+ }
+
+ /**
+ * @private
+ */
+ this._timeouts = [];
+ }
+ });
+
+ /**
+ * A <code>Frame</code> defines target values at a specified point
+ * in time for a set of properties of the target object of
+ * a {@link #Timeline Timeline}.
+ *
+ * <p>
+ * This type is usually used only internally to compute the frames
+ * between a set of given {@link #KeyFrame KeyFrame}s.
+ * </p><p>
+ * By contrast to <code>KeyFrame</code>s, inserting a
+ * <code>Frame</code> into a <code>Timeline</code> does not cause
+ * computation of additional <code>Frame</code>s with regard to
+ * adjacent <code>Keyframe</code>s. You can do so if you need
+ * full control over the <code>Timeline</code>, for example
+ * if you want an object to "jump" from one screen area to a
+ * more distant one instead of producing a gradual change of
+ * its coordinates, or if you want to use a set of
+ * <code>Frame</code>s or <code>Frame</code>-compatible objects
+ * that are the result of computation by another framework.
+ * </p>
+ *
+ * @type jsx.dom.animation.Frame
+ */
+ var _Frame = (
+ /**
+ * @constructor
+ * @param {Object} oParams
+ * @throws jsx.InvalidArgumentError if no parameters were specified
+ */
+ function (oParams) {
+ if (!oParams)
+ {
+ jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", typeof oParams, "Object"]);
+ }
+
+ var keys = _getKeys(oParams);
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var paramName = keys[i];
+ var param = oParams[paramName];
+
+ if (typeof param != "undefined")
+ {
+ if (paramName == "time" && typeof param != "number")
+ {
+ /*
+ * Convert duration to milliseconds
+ */
+ var rxTime = /^\s*\+?(\d+|\d*\.\d+)\s*(ms|s|m(in)?|h|%)\s*$/;
+ var match = param.match(rxTime);
+ if (match)
+ {
+ /*
+ * NOTE: Percentages are supported but can only
+ * be resolved later in jsx.dom.animation.Timeline().
+ */
+ switch (match[2])
+ {
+ case "ms":
+ param = +match[1];
+ break;
+
+ case "s":
+ param = +match[1] * 1000;
+ break;
+
+ case "m":
+ case "min":
+ param = +match[1] * 60000;
+ break;
+
+ case "h":
+ param = +match[1] * 3600000;
+ break;
+ }
+ }
+ else
+ {
+ return jsx.throwThis("jsx.InvalidArgumentError",
+ ["Invalid time", "'" + param + "'",
+ "one matching " + rxTime.source]);
+ }
+ }
+
+ this[paramName] = param;
+ }
+ }
+ }
+ ).extend(null, {
+ /**
+ * @memberOf jsx.dom.animation.Frame.prototype
+ */
+ time: 0,
+ values: {}
+ });
+
+ /**
+ * A <code>KeyFrame</code> is a special {@link #Frame Frame} that
+ * defines target values at a specified point in time for a set
+ * of properties that are interpolated along a {@link #Timeline}.
+ *
+ * The developer controls the interpolation of a set of properties
+ * for the interval between successive key frames by providing
+ * a target value and an {@link #interpolator} associated with
+ * each property, or that of the KeyFrame itself which is used
+ * for all properties defined for the <code>KeyFrame</code> unless
+ * specified otherwise. The properties are interpolated such that
+ * they will reach their target value at the specified time.
+ * An <var>action</var> function is invoked on each
+ * <code>KeyFrame</code> if one is specified.
+ *
+ * @type jsx.dom.animation.KeyFrame
+ */
+ var _KeyFrame = (
+ /**
+ * @constructor
+ * @param oParams
+ * @throws jsx.InvalidArgumentError if no parameters were specified
+ */
+ function jsx_dom_animation_KeyFrame (oParams) {
+ jsx_dom_animation_KeyFrame._super.call(this, oParams);
+ }
+ ).extend(_Frame, {
+ /**
+ * A comparison function used to sort <code>KeyFrames</code>
+ * by their specified reference time.
+ *
+ * @memberOf jsx.dom.animation.KeyFrame.prototype
+ * @param {KeyFrame} targetFrame
+ * @return {number}
+ * An integer value <var>i</var> where
+ * <ul>
+ * <li><var>i</var> > 0 if <var>targetFrame</var>'s
+ * timing is ahead of this one's</li>
+ * <li><var>i</var> = 0 if they have the same timing</li>
+ * <li><var>i</var> &lt; 0 if <var>targetFrame</var>'s
+ * timing is behind this one's</li>
+ * </ul>
+ */
+ compareTo: function (targetFrame) {
+ return this.time - targetFrame.time;
+ },
+
+ /**
+ * {@link #interpolator} to be used for calculating the
+ * key values along the particular interval. By default,
+ * {@link #interpolator.LINEAR} is used.
+ */
+ interpolate: _interpolator_LINEAR,
+
+ toString: function () {
+ var style = this.values.style;
+ var keys = _getKeys(style);
+ var aValues = [];
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var stylePropertyName = keys[i];
+ var propertyValue = style[stylePropertyName];
+
+ var propertyType = _getProperty(
+ _jsx_dom_css.propertyInfo, stylePropertyName, {type: null}).type;
+ switch (propertyType)
+ {
+ case _types.LENGTH:
+ propertyValue += "px";
+ break;
+ }
+
+ var cssPropertyName = _jsx_dom_css.uncamelize(stylePropertyName);
+
+ aValues.push(" " + cssPropertyName + ": " + propertyValue + ";");
+ }
+
+ var time = this.time + "ms";
+ if (this._timeline)
+ {
+ time = (this.time / Array.get(this._timeline.keyFrames, -1).time * 100)
+ + "%";
+ }
+
+ return " " + time + " {\n"
+ + aValues.join("\n")
+ + "\n }";
+ }
+ });
+
+ /**
+ * @type jsx.dom.animation.KeyValue
+ */
+ var _KeyValue = (
+ /**
+ * @constructor
+ * @param {Object} oParams
+ */
+ function (oParams) {
+ if (!oParams)
+ {
+ jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", typeof oParams, "Object"]);
+ }
+
+ for (var paramName in this)
+ {
+ var param = oParams[paramName];
+ if (typeof param != "undefined")
+ {
+ this[paramName] = param;
+ }
+ }
+ }
+ ).extend(null, {
+ /**
+ * {@link #interpolator} to be used for calculating the
+ * key value along the particular interval. By default,
+ * {@link #interpolator.LINEAR} is used.
+ *
+ * @memberOf jsx.dom.animation.KeyValue.prototype
+ */
+ interpolate: _interpolator_LINEAR,
+
+ value: null
+ });
+
+ return {
+ /**
+ * @memberOf jsx.dom.animation
+ */
+ version: "0.1.$Revision$",
+
+ NoTimelineError: _NoTimelineError,
+
+ /**
+ * An <code>Animation</code> is a set of one or more
+ * {@link #Timeline Timelines} being played in parallel
+ * when the animation is played. Each <code>Timeline</code>
+ * is supposed to animate another target object (but that
+ * is not required).
+ *
+ * @type jsx.dom.animation.Animation
+ */
+ Animation: (
+ /**
+ * @constructor
+ * @param {Object} oParams
+ * The parameters of this animation. Supported parameters,
+ * to be specified as properties of <var>oParams</var>,
+ * include:
+ * <dl>
+ * <dt><code><var>target</var> : Object</code></dt>
+ * <dd>Reference specifying the object to animate.
+ * If specified, the timelines of this animation
+ * automatically inherit its target; if not specified
+ * for the animation, each timeline of an animation
+ * MUST specify its target.</dd>
+ * <dt><code><var>timelines</var> : Array</code></dt>
+ * <dd>{@link #Timeline Timelines} of this animation
+ * (required)</dd>
+ * </dl>
+ * @throws jsx.InvalidArgumentError if no parameters were specified
+ */
+ function jsx_dom_animation_Animation (oParams) {
+ if (!oParams)
+ {
+ jsx.throwThis("jsx.InvalidArgumentError",
+ ["Not enough arguments", typeof oParams, "Object"]);
+ }
+
+ for (var param in this)
+ {
+ if (typeof oParams[param] != "undefined")
+ {
+ this[param] = oParams[param];
+ }
+ }
+
+ var timelines = this.timelines;
+ for (var i = timelines.length; i--;)
+ {
+ var timeline = timelines[i];
+
+ if (timeline.constructor != _Timeline)
+ {
+ timeline = new _Timeline(timeline);
+ timelines[i] = timeline;
+ }
+
+ timeline.preferNative = this.preferNative;
+
+ if (!timeline.target)
+ {
+ timeline.target = this.target;
+ }
+ }
+ }
+ ).extend(null, {
+ /**
+ * If <code>true</code> (default), native (CSS3) animations
+ * are preferred. Overridden by the <code>preferNative</code>
+ * property of an enclosing {@link #Animation}.
+ *
+ * @memberOf jsx.dom.animation.Animation.prototype
+ */
+ preferNative: true,
+
+ /**
+ * @type Object
+ */
+ target: null,
+ timelines: [],
+
+ /**
+ * Plays the animation by playing all of its
+ * {@link #Timeline Timelines}.
+ *
+ * @throws #NoTimelineError
+ * if no <code>Timelines</code> have been defined
+ */
+ play: function () {
+ var timelines = this.timelines;
+ if (!timelines || timelines.length < 1)
+ {
+ jsx.throwThis(_NoTimelineError);
+ }
+
+ for (var i = 0, len = timelines.length; i < len; ++i)
+ {
+ timelines[i].play();
+ }
+ },
+
+ /**
+ * Stops the animation by stopping all of its
+ * {@link #Timeline Timelines}.
+ *
+ * @throws #NoTimelineError
+ * if no <code>Timelines</code> have been defined
+ */
+ stop: function () {
+ var timelines = this.timelines;
+ if (!timelines || timelines.length < 1)
+ {
+ jsx.throwThis(_NoTimelineError);
+ }
+
+ for (var i = 0, len = timelines.length; i < len; ++i)
+ {
+ timelines[i].stop();
+ }
+ }
+ }),
+
+ /**
+ * @type jsx.dom.animation.NoKeyFramesError
+ * @todo currently unused
+ */
+ NoKeyFramesError: (
+ /**
+ * @constructor
+ */
+ function jsx_dom_animation_NoKeyFramesError () {
+ jsx_dom_animation_NoKeyFramesError._super.call(
+ this, "Need at least two KeyFrames in a Timeline");
+ }
+ ).extend(jsx.Error, {
+ /**
+ * @memberOf jsx.dom.animation.NoKeyFramesError.prototype
+ */
+ name: "jsx.dom.animation.NoKeyFramesError"
+ }),
+
+ Timeline: _Timeline,
+ Frame: _Frame,
+
+ /**
+ * Namespace for a set of functions that take a
+ * <var>startValue</var> and an <var>endValue</var> together
+ * with a <var>fraction</var> between 0.0 and 1.0, and return
+ * a value that corresponds to the <var>fraction</var> with
+ * regard to <var>startValue</var> and <var>endValue</var>.
+ *
+ * The purpose of those functions is to define how time
+ * (represented as a 0.0 to 1.0 fraction of the duration
+ * of an animation) is altered to derive different value
+ * calculations during an animation.
+ *
+ * @namespace
+ */
+ interpolator: {
+ LINEAR: _interpolator_LINEAR
+ },
+
+ KeyFrame: _KeyFrame,
+ KeyValue: _KeyValue
+ };
+}());
\ No newline at end of file
/live/dom/ani.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/dom/forms.js
===================================================================
--- live/dom/forms.js (nonexistent)
+++ live/dom/forms.js (revision 509)
@@ -0,0 +1,464 @@
+/**
+ * <title>PointedEars' DOM Library: Forms</title>
+ * @version $Id$
+ * @requires dom.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2004-2011, 2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ jsx.dom = {};
+}
+
+/**
+ * Sets the <code>value</code> property of an <code>HTMLInputElement</code>
+ * object, and its <code>title</code> property accordingly if specified.
+ *
+ * @author
+ * (C) 2004 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLInputElement} oInput
+ * Required. Reference to an HTMLInputElement object.
+ * @param {string} sValue
+ * New value of the <code>value</code> property of the
+ * HTMLInputElement object.
+ * @param {boolean} bSetTitle = false
+ * Specifies if the <code>title</code> property should be set to
+ * the same value as the <code>value</code> property. The default
+ * is <code>false</code>.
+ * @return {boolean}
+ * If <var>bSetTitle</var> evaluates to <code>false</code>
+ * or omitted:
+ *
+ * <code>true</code> if the <code>value</code> property could be set
+ * properly, <code>false</code> otherwise.
+ *
+ * If <var>bSetTitle</var> is <code>true</code>:
+ *
+ * <code>true</code> if <em>both</em> the <code>value</code> and
+ * <code>title</code> properties could be set properly,
+ * <code>false</code> otherwise.
+ */
+jsx.dom.setValue = function(oInput, sValue, bSetTitle) {
+ if (oInput && typeof oInput.value != "undefined")
+ {
+ oInput.value = sValue;
+ if (bSetTitle && typeof oInput.title != "undefined")
+ {
+ oInput.title = sValue;
+ return (oInput.value == sValue && oInput.title == sValue);
+ }
+ return (oInput.value == sValue);
+ }
+
+ return false;
+};
+
+/**
+ * Retrieves the checked radio button of a radio button group.
+ *
+ * @author
+ * Copyright (C) 2004, 2007 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLFormElement} oForm
+ * Required. Reference to an HTMLFormElement object to contain
+ * the radio button group.
+ * @param {string} sGroup
+ * Name of the radio button group from which the
+ * checked radio button should be retrieved.
+ * @return {Object|boolean|HTMLInputElement}
+ * <code>null</code> if <var>oForm</var> is invalid or there is no such
+ * <var>sGroup</var>;
+ * <code>false</code> if no radio button of <var>sGroup</var> is checked;
+ * a reference to the checked radio button otherwise
+ */
+jsx.dom.getCheckedRadio = function(oForm, sGroup) {
+ var result = null, e, ig;
+ if (oForm && (e = oForm.elements) && (ig = e[sGroup]))
+ {
+ result = false;
+ for (var i = ig.length; i--;)
+ {
+ if (ig[i].checked)
+ {
+ result = ig[i];
+ break;
+ }
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Removes all options from a HTMLSelectElement object.
+ *
+ * @author
+ * (C) 2003 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLSelectElement} oSelect
+ * Reference to a HTMLSelectElement object.
+ * @param {boolean} bAllowReload
+ * If <code>true</code>, reloads the document.
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code>
+ * otherwise.
+ */
+jsx.dom.removeOptions = function(oSelect, bAllowReload) {
+ if (oSelect
+ && oSelect.tagName
+ && oSelect.tagName.toLowerCase() == "select")
+ {
+ var o = oSelect.options;
+ if (o && o.length > 0)
+ {
+ /* shortcut if "length" property is not read-only */
+ o.length = 0;
+ while (o.length > 0)
+ {
+ if (jsx.object.isMethod(o, "remove"))
+ {
+ o.remove(o.length - 1);
+ }
+ else
+ {
+ o[o.length - 1] = null;
+ if (bAllowReload)
+ {
+ history.go(0);
+ }
+ }
+ }
+ return true;
+ }
+ }
+
+ return false;
+};
+
+/**
+ * Adds an option to an HTMLSelectElement object.
+ *
+ * @author
+ * (C) 2003, 2012 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLSelectElement} oSelect
+ * Required reference to an HTMLSelectElement object.
+ * @param {string} sText
+ * Required text of the new HTMLOptionElement object.
+ * @param {string} sValue (optional)
+ * Optional value of the new HTMLOptionElement object.
+ * @return {Option|HTMLOptionElement}
+ * A reference to the new option if successful,
+ * <code>null</code> otherwise.
+ */
+jsx.dom.addOption = function (oSelect, sText, sValue) {
+ if (!(oSelect
+ && oSelect.tagName
+ && typeof oSelect.tagName == "string"
+ && oSelect.tagName.toLowerCase
+ && oSelect.tagName.toLowerCase() == "select"
+ && oSelect.options))
+ {
+ return null;
+ }
+
+ var oNew = new Option(sText, (arguments.length < 3) ? "" : sValue);
+
+ var o = oSelect.options;
+ o[o.length] = oNew;
+
+ return oNew;
+};
+
+/**
+ * Select a radio button depending on its value and, optionally,
+ * its name.
+ *
+ * @author
+ * (C) 2003 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLFormElement} oForm
+ * Reference to the <code>HTMLFormElement</code> object
+ * which contains the <code>HTMLInputElement</code> object.
+ * @param aName
+ * Name of the radio button, i.e. the value of the
+ * <code>name</code> attribute of the respective
+ * <code>input</code> (X)HTML element or the value
+ * of the <code>name</code> property of the respective
+ * <code>HTMLInputElement</code> object. Use an expression
+ * that is evaluated to <code>false</code> for the argument
+ * to be ignored.
+ * @param {string} sValue
+ * Value of the radio button, i.e. the value of the
+ * <code>value</code> attribute of the respective
+ * <code>input</code> (X)HTML element or the value
+ * of the <code>value</code> property of the respective
+ * <code>HTMLInputElement</code> object.
+ */
+jsx.dom.selectRadioBtn = function(oForm, aName, sValue) {
+ for (var i = 0; i < oForm.elements.length; i++)
+ {
+ var curEl = oForm.elements[i];
+
+ if (!curEl.disabled
+ && curEl.type == "radio"
+ && (!sName || curEl.name == sName)
+ && curEl.value == sValue)
+ {
+ curEl.checked = true;
+ }
+ }
+};
+
+/**
+ * Disables a form element or a collection of form elements.
+ *
+ * @author
+ * (C) 2003, 2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLElement|HTML(Options)Collection} oElementGroup
+ * Reference to the <code>HTMLElement</code> or to
+ * the <code>HTML(Options)Collection</code> object.
+ * @param {Number|String} index (optional)
+ * Optional number or string to specify
+ * one element within the collection.
+ */
+jsx.dom.disableElementGroup = function(oElementGroup, index) {
+ if (oElementGroup)
+ {
+ if (oElementGroup[index]
+ && typeof oElementGroup[index].disabled != "undefined")
+ {
+ oElementGroup[index].disabled = true;
+ }
+ else if (typeof oElementGroup.disabled != "undefined")
+ {
+ oElementGroup.disabled = true;
+ }
+ }
+};
+
+/**
+ * Disables or enables form controls by name/ID.
+ *
+ * @param {HTMLFormElement} oForm
+ * Reference to the <code>form</code> element object.
+ * @params String|HTMLElement
+ * Names/IDs of the elements or references
+ * to the element objects to disable/enable.
+ * @param {boolean} bDisable (optional)
+ * If <code>false</code>, elements will be
+ * enabled, otherwise disabled.
+ */
+jsx.dom.disableElements = function(oForm) {
+ if (oForm)
+ {
+ var len = arguments.length - 1, bDisable = arguments[len];
+ if (bDisable && typeof bDisable == "boolean")
+ {
+ len = arguments.length - 2;
+ }
+
+ for (var i = 1; i < len; i++)
+ {
+ var a = arguments[i], o;
+ if (typeof a != "object")
+ {
+ o = oForm.elements[a];
+ }
+ else
+ {
+ o = a;
+ }
+
+ var len2;
+ if (typeof o.disabled != "undefined")
+ {
+ o.disabled = bDisable;
+ }
+ else if (typeof (len2 = o.length) != "undefined")
+ {
+ for (var j = len2; j--; 0)
+ {
+ var o2;
+ if (typeof (o2 = o[j]).disabled != "undefined")
+ {
+ o2.disabled = bDisable;
+ }
+ }
+ }
+ }
+ }
+};
+
+/**
+ * @function
+ */
+jsx.dom.serializeForm = (function() {
+ var _getFeature = jsx.object.getFeature;
+ var
+ rxSubmit = /(^|\s)(submit|image)(\s|$)/i,
+ rxSelect = /(^|\s)(select(-one)?|undefined)(\s|$)/i,
+ rxFileReset = /^\s*(file|reset)\s*$/i,
+ rxObject = /^\s*object\s*$/i;
+
+ /**
+ * @param {HTMLFormElement} form
+ * @param {HTMLInputElement} submitButton (optional)
+ * Reference to the submit button that should be successful.
+ * By default, only the first submit button is successful.
+ * @return {string}
+ * The serialization of this form
+ */
+ return function(form, submitButton) {
+ /**
+ * @param {HTMLSelectElement|HTMLInputElement|HTMLTextAreaElement|HTMLButtonElement} control
+ */
+ function serializeControl(control)
+ {
+ /* HTML 4.01: Controls that are disabled cannot be successful. */
+ if (control.disabled)
+ {
+ return;
+ }
+
+ /*
+ * If a form contains more than one submit button,
+ * only the activated submit button is successful.
+ * (here: the first one or the specified one)
+ */
+ var isSubmit = rxSubmit.test(control.type);
+ if ((!gotSubmit && !submitButton || control != submitButton) || !isSubmit)
+ {
+ if (isSubmit)
+ {
+ gotSubmit = true;
+ }
+
+ /*
+ * For menus, the control name is provided by a SELECT element
+ * and values are provided by OPTION elements. Only selected
+ * options may be successful. When no options are selected,
+ * the control is not successful and neither the name nor any
+ * values are submitted to the server when the form is submitted.
+ */
+ var m = rxSelect.exec(control.type);
+ if (m)
+ {
+ /* select-one */
+ if (m[3])
+ {
+ if (control.selectedIndex > -1)
+ {
+ /*
+ * MSHTML 6 is buggy with <option>foo</option>;
+ * always provide a `value' attribute!
+ */
+ items.add(control.name, control.options[control.selectedIndex].value);
+ }
+ }
+
+ /* select */
+ else if (m[2])
+ {
+ for (var i = 0, opts = control.options, len = opts && opts.length; i < len; i++)
+ {
+ var opt = opts[i];
+ if (opt.selected)
+ {
+ /*
+ * MSHTML 6 is buggy with <option>foo</option>;
+ * always provide a `value' attribute!
+ */
+ items.add(control.name, opt.value);
+ }
+ }
+ }
+ }
+
+ /*
+ * All "on" checkboxes may be successful.
+ * For radio buttons that share the same value of the
+ * name attribute, only the "on" radio button may be successful.
+ */
+ else if (!rxFileReset.test(control.type)
+ && !(rxObject.test(control.tagName) && control.declare)
+ && !/^\s*(checkbox|radio)\s*$/i.test(control.type)
+ || control.checked)
+ {
+ items.add(control.name, control.value);
+ }
+ }
+ }
+
+ var es = _getFeature(form, "elements");
+ if (!es)
+ {
+ return "";
+ }
+
+ var items = [];
+
+ items.add = function(sName, sValue) {
+ var s = encodeURIComponent(sName) + "=" + encodeURIComponent(sValue);
+ this.push(s);
+ };
+
+ if (!jsx.object.isMethod(items, "push"))
+ {
+ items.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++)
+ {
+ this[this.length] = arguments[i];
+ }
+ };
+ }
+
+ var gotSubmit = false;
+
+ for (var i = 0, len = es.length; i < len; i++)
+ {
+ var e = es[i];
+
+ /*
+ * Elements with the same name create a NodeList object,
+ * however options of select objects are also indexable in Gecko.
+ */
+ if (typeof e[0] != "undefined" && typeof e.options == "undefined")
+ {
+ for (var j = 0, len2 = e.length; j < len2; j++)
+ {
+ serializeControl(e[j]);
+ }
+ }
+ else
+ {
+ serializeControl(e);
+ }
+ }
+
+ return items.join("&");
+ };
+})();
\ No newline at end of file
/live/dom/forms.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/geocoding.js
===================================================================
--- live/dom/geocoding.js (nonexistent)
+++ live/dom/geocoding.js (revision 509)
@@ -0,0 +1,257 @@
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ * @type jsx.dom.geocoding
+ */
+jsx.dom.geocoding = {
+ /**
+ * @function
+ */
+ Geocoder: (/** @constructor */ function () {
+ /* stub */
+ }).extend(null, {
+ /**
+ * @memberOf jsx.dom.geocoding.Geocoder#prototype
+ * @param {GeocoderRequest} request
+ * @param {Callable(Array[GeocoderResult], GeocoderStatus)} callback
+ */
+ geocode: function (request, callback) {
+ /* stub */
+ }
+ }),
+
+ /**
+ * @constructor
+ * @property {string} street
+ * @property {string} zip
+ * @property {string} place
+ * @property {string} region
+ * @property {string} country
+ * @property {number} latitude
+ * @property {number} longitude
+ */
+ GeocodingInput: function (properties) {
+ jsx.object.extend(this, properties);
+ },
+
+ /**
+ * @namespace
+ */
+ GeocoderStatus: {
+ /**
+ * There was a problem contacting the geocoding service.
+ */
+ ERROR: "ERROR",
+
+ /**
+ * This GeocoderRequest was invalid.
+ */
+ INVALID_REQUEST: "INVALID_REQUEST",
+
+ /**
+ * The response contains a valid GeocoderResponse.
+ */
+ OK: "OK",
+
+ /**
+ * The client application has gone over the requests limit
+ * in too short a period of time.
+ */
+ OVER_QUERY_LIMIT: "OVER_QUERY_LIMIT",
+
+ /**
+ * The client application is not allowed to use the geocoder.
+ */
+ REQUEST_DENIED: "REQUEST_DENIED",
+
+ /**
+ * A geocoding request could not be processed due to a
+ * server error. The request may succeed if you try again.
+ */
+ UNKNOWN_ERROR: "UNKNOWN_ERROR",
+
+ /**
+ * No result was found for this GeocoderRequest.
+ */
+ ZERO_RESULTS: "ZERO_RESULTS",
+
+ setProperties: function (source) {
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+ var keys = jsx.object.getKeys(this);
+ for (var i = keys.length; i--;)
+ {
+ var key = keys[i];
+ if (_hasOwnProperty(this, key) && typeof this[key] != "function")
+ {
+ this[key] = source[key];
+ }
+ }
+ }
+ },
+
+ /**
+ * @constructor
+ * @property {boolean} continueFromLast = false
+ * @property {boolean} dontOverwrite = false
+ * @property {Callable(Array[GeocodingInput], int)} onbeforecode = null
+ * @property {Callable(Array[GeocodingInput], int)} onaftercode = null
+ * @property {Callable(Array[GeocodingInput])} oncomplete = null
+ * @property {Callable(Array[GeocodingInput], GeocoderStatus)} onerror = null
+ * @property {int} timeout
+ */
+ GeocodingOptions: function (properties) {
+ jsx.object.extend(this, properties);
+ },
+
+ /**
+ * @function
+ */
+ geocode: (function () {
+ var _runAsync = jsx.object.getFeature(jsx, "dom", "timeout", "runAsync");
+ var haveWarned = false;
+ var lastData = null;
+ var lastIndex = -1;
+
+ /**
+ * @param {Geocoder} geocoder
+ * @param {Array[GeocodingInput]} data
+ * @param {GeocodingOptions} options
+ * @param {int} index = 0
+ * Start index
+ * @return {boolean}
+ */
+ return function _geocode (geocoder, data, options, index) {
+ function runNext (quick)
+ {
+ if (!_runAsync && !haveWarned)
+ {
+ jsx.warn(
+ "You should provide jsx.dom.timeout.runAsync"
+ + "in order to avoid server hammering");
+ haveWarned = true;
+ }
+
+ (_runAsync || function (f) { f(); })(
+ function () {
+ _geocode(geocoder, data, options, index + 1);
+ },
+ quick ? null : (options.timeout || 200)
+ );
+ }
+
+ if (!options)
+ {
+ options = {};
+ }
+
+ if (!index)
+ {
+ if (data != lastData || lastIndex < 0)
+ {
+ index = 0;
+ }
+ else if (options.continueFromLast)
+ {
+ index = lastIndex + 1;
+ }
+ }
+
+ if (index >= data.length)
+ {
+ return false;
+ }
+
+ lastData = data;
+ lastIndex = index;
+
+ var location = data[index];
+
+ var street = location.street;
+ var zip = location.zip;
+ var place = location.place;
+ var region = location.region;
+ var country = location.country;
+ var address = (street || "")
+ + (zip ? (street ? ", " : "") + zip : "")
+ + (place ? ((street && !zip) ? ", " : " ") + place : "")
+ + (region ? ((street || zip || place) ? ", " : "") + region : "")
+ + (country ? ((street || zip || place || region) ? ", " : "") + country : "");
+
+ if (location.latitude !== null
+ && location.longitude !== null
+ && options.dontOverwrite)
+ {
+ jsx.info('Ignoring already geocoded "' + address + '"');
+ runNext(true);
+ return true;
+ }
+
+ var GeocoderStatus = jsx.dom.geocoding.GeocoderStatus;
+ if (options.statusPropertySource)
+ {
+ GeocoderStatus.setProperties(options.statusPropertySource);
+ }
+
+ if (typeof options.onbeforecode == "function")
+ {
+ options.onbeforecode(data, index);
+ }
+
+ jsx.info("jsx.dom.geocoding.geocode: " + address);
+
+ geocoder.geocode(
+ {
+ 'address': address
+ },
+ function (results, status) {
+ switch (status)
+ {
+ case GeocoderStatus.OK:
+ var loc = results[0].geometry.location;
+ location.latitude = String(loc.lat());
+ location.longitude = String(loc.lng());
+
+ if (typeof options.onaftercode == "function")
+ {
+ options.onaftercode(data, index);
+ }
+
+ if (index < data.length - 1)
+ {
+ runNext();
+ }
+ else if (typeof options.oncomplete == "function")
+ {
+ options.oncomplete(data);
+ }
+ break;
+
+ default:
+ if (typeof options.onerror == "function")
+ {
+ return options.onerror(data, index, status);
+ }
+ break;
+ }
+ }
+ );
+
+ return true;
+ };
+ }())
+};
\ No newline at end of file
/live/dom/geocoding.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/compat.js
===================================================================
--- live/dom/compat.js (nonexistent)
+++ live/dom/compat.js (revision 509)
@@ -0,0 +1,5 @@
+var dhtml = jsx.dom;
+var getElem = jsx.dom.getElem;
+var setCont = jsx.dom.setCont;
+jsx.dom.css.removeClassName = jsx.dom.removeClassName;
+jsx.dom.css.addClassName = jsx.dom.addClassName;
\ No newline at end of file
/live/dom/compat.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/css.js
===================================================================
--- live/dom/css.js (nonexistent)
+++ live/dom/css.js (revision 509)
@@ -0,0 +1,1234 @@
+/**
+ * <title>PointedEars' DOM Library: CSS</title>
+ * @version $Id$
+ * @requires dom.js
+ * @recommends collection.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2005-2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ if (typeof jsx.importFrom == "function")
+ {
+ jsx.importFrom(jsx.absPath("../dom.js", jsx.importFrom.lastImport));
+ }
+ else
+ {
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+ }
+}
+
+/* for JSDT only */
+/**
+ * @namespace
+ */
+jsx.dom.css = {};
+
+/**
+ * @type jsx.dom.css
+ * @memberOf __jsx.dom.css
+ * @namespace
+ */
+jsx.dom.css = (/** @constructor */ function () {
+ var _jsx_object = jsx.object;
+
+ var _LENGTH = 1;
+ var _COLOR = 5;
+ var _FLOAT = 7;
+ var _TRANSFORM = 8;
+
+ return {
+ /**
+ * @memberOf jsx.dom.css
+ */
+ version: "0.1.$Revision$",
+
+ /**
+ * Supported CSS data types. Properties include:
+ * <dl>
+ * <dt><code>NUMBER</code></dt>
+ * <dd></dd>
+ *
+ * <dt><code>LENGTH</code></dt>
+ * <dd></dd>
+ *
+ * <dt><code>PERCENTAGE</code></dt>
+ * <dd></dd>
+ *
+ * <dt><code>URI</code></dt>
+ * <dd>Uniform Resource Identifier or URI-reference (see RFC 3986),
+ * enclosed in <code>url(…)</code></dd>
+ *
+ * <dt><code>COUNTER</code></dt>
+ * <dd>CSS counter</dd>
+ *
+ * <dt><code>COLOR</code></dt>
+ * <dd>Color in RGB(A) or HSV format</dd>
+ *
+ * <dt><code>STRING</code></dt>
+ * <dd>Unicode string</dd>
+ * </dl>
+ *
+ * @namespace
+ */
+ types: {
+ /**
+ * Numeric scalar value
+ */
+ NUMBER: 0,
+
+ /**
+ * Length given relative in <code>em</code> (width of the
+ * M&nbsp;square) or <code>ex</code> (height of the x square),
+ * or absolute in <code>in</code> (inches), <code>cm</code>
+ * (centimeters), <code>mm</code> (millimeters), <code>pt</code>
+ * (points), <code>pc</code> (picas), or <code>px</code>
+ * (pixels).
+ */
+ LENGTH: _LENGTH,
+
+ /**
+ * Length given in percentage of the parent
+ */
+ PERCENTAGE: 2,
+
+ /**
+ * Uniform Resource Identifier or URI-reference (see RFC 3986),
+ * enclosed in <code>url(…)</code>.
+ */
+ URI: 3,
+
+ /**
+ * CSS counter
+ */
+ COUNTER: 4,
+
+ /**
+ * Color given in RGB(A) or HSV format
+ */
+ COLOR: _COLOR,
+
+ /**
+ * String of Unicode characters
+ */
+ STRING: 6,
+
+ /**
+ * List of transformations
+ */
+ FLOAT: _FLOAT,
+
+ /**
+ * List of transformations
+ */
+ TRANSFORM: _TRANSFORM
+ },
+
+ prefixedProperties: {
+ transition: true,
+ animation: true
+ },
+
+ /**
+ * Property name prefixes
+ */
+ prefixes: {
+ camelized: ["Moz", "Ms", "O", "Webkit", ""],
+ uncamelized: ["-moz-", "-ms-", "-o-", "-webkit-", ""]
+ },
+
+ /**
+ * Provides information about the type of a CSS property and its relation
+ * to other CSS properties
+ *
+ * @namespace
+ */
+ propertyInfo: {
+ "float": {
+ type: _FLOAT,
+ aliases: ["cssFloat", "styleFloat"]
+ },
+ left: {
+ type: _LENGTH,
+ correspondsTo: "top"
+ },
+ top: {
+ type: _LENGTH,
+ correspondsTo: "left"
+ },
+ right: {
+ type: _LENGTH,
+ correspondsTo: "bottom"
+ },
+ bottom: {
+ type: _LENGTH,
+ correspondsTo: "right"
+ },
+ width: {
+ type: _LENGTH,
+ correspondsTo: "height"
+ },
+ height: {
+ type: _LENGTH,
+ correspondsTo: "width"
+ },
+ color: {
+ type: _COLOR
+ },
+
+ /* FIXME */
+ backgroundColor: {
+ type: _COLOR
+ },
+ "background-color": {
+ type: _COLOR
+ },
+
+ transform: {
+ type: _TRANSFORM
+ }
+ },
+
+ /**
+ * @function
+ */
+ camelize: (function () {
+ if (typeof jsx.map != "undefined" && typeof jsx.map.Map == "function")
+ {
+ var cache = new jsx.map.Map();
+ }
+ else
+ {
+ var prefix = " ", suffix = "";
+
+ cache = _jsx_object.getDataObject();
+ cache.get = function (s) {
+ return _jsx_object.getProperty(this, prefix + s + suffix, false);
+ };
+
+ cache.put = function (s, v) {
+ this[prefix + s + suffix] = v;
+ };
+ }
+
+ function f (match, p1)
+ {
+ return p1.toUpperCase();
+ }
+
+ var rxHyphenated = /-([a-z])/gi;
+
+ /**
+ * @param {String} sProperty
+ * @return {string}
+ * <var>sProperty</var> with all hyphen-minuses followed by an
+ * ASCII letter replaced by the letter's uppercase counterpart
+ */
+ return function (sProperty) {
+ var p;
+ if ((p = cache.get(sProperty, false)))
+ {
+ return p;
+ }
+
+ var s2 = sProperty.replace(rxHyphenated, f);
+ cache.put(sProperty, s2);
+ return s2;
+ };
+ })(),
+
+ /**
+ * @function
+ */
+ uncamelize: (function () {
+ if (typeof jsx.map != "undefined" && typeof jsx.map.Map == "function")
+ {
+ var cache = new jsx.map.Map();
+ }
+ else
+ {
+ var prefix = " ", suffix = "";
+
+ cache = _jsx_object.getDataObject();
+ cache.get = function (s) {
+ return _jsx_object.getProperty(this, prefix + s + suffix, false);
+ };
+
+ cache.put = function (s, v) {
+ this[prefix + s + suffix] = v;
+ };
+ }
+
+ function f (match)
+ {
+ return "-" + match.toLowerCase();
+ }
+
+ var rxUppercase = /[A-Z]/g;
+
+ /**
+ * @param {String} sProperty
+ * @return {string}
+ * <var>sProperty</var> with all capital ASCII letters replaced
+ * by the letter's lowercase counterpart, and preceded by a
+ * hyphen-minus.
+ */
+ return function (sProperty) {
+ var p;
+ if ((p = cache.get(sProperty, false)))
+ {
+ return p;
+ }
+
+ var s2 = sProperty.replace(rxUppercase, f);
+ cache.put(sProperty, s2);
+ return s2;
+ };
+ })(),
+
+ /**
+ * Returns the computed style of an {@link Element} or the
+ * computed value of an <code>Element</code>'s style property.
+ *
+ * @function
+ */
+ getComputedStyle: (function () {
+ var _isMethod = _jsx_object.isMethod;
+ var _defaultView;
+
+ /**
+ * @param {Element} oElement
+ * Element for which the computed style should be retrieved.
+ * @param {string} sPseudoEl
+ * The name of the pseudo-element, such as ":first-child".
+ * Use <code>null</code> (default) for the element itself.
+ * @param {string} sProperty
+ * The property name in CSS or script syntax (names are mapped
+ * automatically according to the feature used). If not passed
+ * or empty, the entire computed style is returned.
+ * @return {CSSStyleDeclaration|currentStyle|string|null}
+ * The return value depends on both the passed arguments
+ * and the capabilities of the user agent:
+ *
+ * If the UA supports either ViewCSS::getComputedStyle()
+ * from W3C DOM Level 2 CSS or MSHTML's currentStyle
+ * property, then
+ * a) if <var>sProperty</var> was passed, the value of the
+ * CSS property with name <var>sProperty</vr> is returned;
+ * it is a string if the property is supported;
+ * b) if <var>cssProperty</var> was not passed, the corresponding
+ * style object is returned
+ *
+ * However, MSHTML's currentStyle does not support pseudo-elements.
+ * If you attempt to retrieve pseudo-element's computed style,
+ * <code>null</code> is returned (without error).
+ *
+ * If the UA supports neither of the above, <code>null</code>
+ * is returned.
+ */
+ function _getComputedStyle (oElement, sPseudoEl, sProperty)
+ {
+ var computedStyle;
+
+ if (_isMethod(document, "defaultView", "getComputedStyle")
+ && (typeof _defaultView != "undefined" || (_defaultView = document.defaultView)))
+ {
+ computedStyle = _defaultView.getComputedStyle(oElement, sPseudoEl || null);
+ }
+ else
+ {
+ if (sPseudoEl)
+ {
+ return null;
+ }
+
+ computedStyle = obj.currentStyle;
+ }
+
+ if (typeof computedStyle != "undefined")
+ {
+ if (!sProperty)
+ {
+ return computedStyle;
+ }
+
+ return jsx.dom.css.getStyleProperty({style: computedStyle}, sProperty);
+ }
+
+ return null;
+ }
+
+ return _getComputedStyle;
+ }())
+ };
+})();
+
+/**
+ * Retrieves the value of a style property of an {@link Element}.
+ *
+ * @author
+ * (C) 2005, 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dom/css.js
+ */
+jsx.dom.css.getStyleProperty = (function () {
+ var _isHostMethod = jsx.object.isHostMethod;
+ var _camelize = jsx.dom.css.camelize;
+ var _uncamelize = jsx.dom.css.uncamelize;
+
+ var _prefixedProperties = jsx.dom.css.prefixedProperties;
+ var _prefixes = jsx.dom.css.prefixes;
+ var _propertyInfo = jsx.dom.css.propertyInfo;
+
+ /**
+ * @param {Element} oElement
+ * Reference to the element object whose style is to be retrieved.
+ * @param {String} sPropertyName
+ * Name of the style property whose value is to be retrieved.
+ * Both camelCased and dash-property names are supported.
+ * Mapping to supported prefix properties is done automatically,
+ * i. e. <code>"transition"</code> would cause
+ * <code>"-webkit-transition"</code> to be retrieved if
+ * the former but not <code>"transition"</code> was available.
+ * If the <code>style</code> property is available on the element,
+ * the faster property-accessor approach is attempted first,
+ * then the slower setProperty() call.
+ * Otherwise <code>"visibility"</code> is used instead
+ * (fallback for the NN4 DOM).
+ * @return {string|null}
+ * <code>null</code> if no matching object exists or if the
+ * DOM does not provide for retrieval of the property value.
+ */
+ function _getStyleProperty (oElement, sPropertyName)
+ {
+ if (oElement)
+ {
+ /* TODO: Needed for NN4 DOM as well? */
+ var camelized_name = _camelize(sPropertyName);
+
+ if (typeof oElement.style != "undefined")
+ {
+ var style = oElement.style;
+
+ var thisPropertyInfo = _propertyInfo[camelized_name];
+ var thisAliases = thisPropertyInfo && thisPropertyInfo.aliases;
+ if (thisAliases)
+ {
+ for (var i = thisAliases.length; i--;)
+ {
+ var alias = thisAliases[i];
+ if (typeof style[alias] != "undefined")
+ {
+ return style[alias];
+ }
+ }
+
+ return null;
+ }
+
+ if (_prefixedProperties[sPropertyName])
+ {
+ for (i = _prefixes.camelized.length; i--;)
+ {
+ var prefix = _prefixes.camelized[i];
+ var prefixed_name = (prefix
+ ? prefix
+ + camelized_name.charAt(0).toUpperCase()
+ + camelized_name.substring(1)
+ : camelized_name);
+ if (typeof style[prefixed_name] != "undefined")
+ {
+ return style[prefixed_name];
+ }
+ }
+
+ return null;
+ }
+
+ if (typeof style[camelized_name] != "undefined")
+ {
+ return style[camelized_name];
+ }
+
+ /* If the quick, backwards-compatible method failed for some reason */
+ if (_isHostMethod(style, "getPropertyValue"))
+ {
+ var uncamelized_name = _uncamelize(sPropertyName);
+
+ /* NOTE: Works because of no dash-properties in _prefixedProperties */
+ if (_prefixedProperties[sPropertyName])
+ {
+ for (i = _prefixes.uncamelized.length; i--;)
+ {
+ var value = style.getPropertyValue(
+ _prefixes.uncamelized[i] + uncamelized_name);
+ if (value)
+ {
+ return value;
+ }
+ }
+
+ return null;
+ }
+
+ return style.getPropertyValue(uncamelized_name);
+ }
+ }
+ else
+ {
+ if (camelized_name == "display")
+ {
+ camelized_name = "visibility";
+ }
+
+ if (typeof oElement[camelized_name] != "undefined")
+ {
+ return oElement[camelized_name];
+ }
+ }
+ }
+
+ return null;
+ }
+
+ return _getStyleProperty;
+}());
+
+/**
+ * Determines whether an {@link Element} has a style property.
+ *
+ * @author
+ * (C) 2006 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dom/css.js
+ * @param {HTMLElement} oElement
+ * Reference to the element object which style property is to be retrieved.
+ * @param {string} sPropertyName
+ * Name of the style property which is to be checked.
+ * If "display", and there is no
+ * <code>style[<var>sPropertyName</var>]</code> property,
+ * "visibility" is used instead (fallback for the NN4 DOM).
+ * @return {boolean}
+ * <code>false</code> if no matching object exists or if the
+ * DOM does not provide for retrieval of the property value;
+ * <code>true</code> otherwise.
+ */
+jsx.dom.hasStyleProperty = function (oElement, sPropertyName) {
+ return (jsx.dom.css.getStyleProperty(oElement, sPropertyName) != null);
+};
+
+/**
+ * Sets the value of a style property of an {@link Element}.
+ *
+ * @function
+ * @author
+ * (C) 2003-2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dom/css.js
+ */
+jsx.dom.css.setStyleProperty = (function () {
+ var _isHostMethod = jsx.object.isHostMethod;
+ var _camelize = jsx.dom.css.camelize;
+ var _uncamelize = jsx.dom.css.uncamelize;
+
+ var _prefixedProperties = jsx.dom.css.prefixedProperties;
+ var _prefixes = jsx.dom.css.prefixes;
+ var _propertyInfo = jsx.dom.css.propertyInfo;
+
+ /**
+ * @param {Element} oElement
+ * Reference to the element object whose style is to be modified.
+ * @param {string} sPropertyName
+ * Name of the style property whose value should be set.
+ * Both camelCased and dash-property names are supported.
+ * Mapping to supported prefix properties is done automatically,
+ * i. e. <code>"transition"</code> would cause only
+ * <code>"-webkit-transition"</code> to be set if the former
+ * but not <code>"transition"</code> was available.
+ * If the <code>style</code> property is available on the element,
+ * the faster property-accessor approach is attempted first,
+ * then the slower setProperty() call.
+ * If <code>"display"</code>, and there is no <code>style</code>
+ * property, and <code>altValue</code> was provided, "visibility"
+ * is used instead (fallback for the NN4 DOM).
+ * @param propValue
+ * Value of the style property to be set.
+ * @param {_} altValue (optional)
+ * Alternative value to be set if the the style property is a
+ * property of the object itself instead of its `style' property.
+ * Fallback for the NN4 DOM.
+ * @return {boolean}
+ * <code>false</code> if no such object exists, the
+ * DOM does not provide for setting the property value,
+ * or if the assignment failed (invalid value).
+ * CAVEAT: Some property values are normalized by the DOM API
+ * when read; test before using the return value as a discriminator.
+ */
+ function _setStyleProperty (oElement, sPropertyName, propValue, altValue)
+ {
+ if (oElement)
+ {
+ /* TODO: Needed for NN4 DOM as well? */
+ var camelized_name = _camelize(sPropertyName);
+
+ if (typeof oElement.style != "undefined")
+ {
+ var style = oElement.style;
+
+ var thisPropertyInfo = _propertyInfo[camelized_name];
+ var thisAliases = thisPropertyInfo && thisPropertyInfo.aliases;
+ if (thisAliases)
+ {
+ for (var i = thisAliases.length; i--;)
+ {
+ var alias = thisAliases[i];
+ if (typeof style[alias] != "undefined")
+ {
+ style[alias] = propValue;
+ return (String(style[alias]).toLowerCase()
+ == String(propValue).toLowerCase());
+ }
+ }
+
+ return false;
+ }
+
+ if (_prefixedProperties[sPropertyName])
+ {
+ var len;
+ for (i = 0, len = _prefixes.camelized.length; i < len; ++i)
+ {
+ var prefix = _prefixes.camelized[i];
+ var prefixed_name = (prefix
+ ? prefix
+ + camelized_name.charAt(0).toUpperCase()
+ + camelized_name.substring(1)
+ : camelized_name);
+ if (typeof style[prefixed_name] != "undefined")
+ {
+ style[prefixed_name] = propValue;
+ }
+ }
+
+ return (String(style[prefixed_name]).toLowerCase()
+ == String(propValue).toLowerCase());
+ }
+
+ if (typeof style[camelized_name] != "undefined")
+ {
+ style[camelized_name] = propValue;
+ return (String(style[camelized_name]).toLowerCase()
+ == String(propValue).toLowerCase());
+ }
+
+ /* If the quick, backwards-compatible method failed for some reason */
+ if (_isHostMethod(style, "setProperty"))
+ {
+ var uncamelized_name = _uncamelize(sPropertyName);
+
+ /* NOTE: Works because of no dash-properties in _prefixedProperties */
+ if (_prefixedProperties[sPropertyName])
+ {
+ for (i = 0, len = _prefixes.uncamelized.length; i < len; ++i)
+ {
+ style.setProperty(
+ _prefixes.uncamelized[i] + uncamelized_name,
+ propValue);
+ }
+
+ if (!_isHostMethod(style, "getPropertyValue"))
+ {
+ return true;
+ }
+
+ return (String(style.getPropertyValue(sPropertyName)).toLowerCase()
+ == String(propValue).toLowerCase());
+ }
+
+ style.setProperty(uncamelized_name, propValue);
+ return (String(style.getPropertyValue(uncamelized_name)).toLowerCase()
+ == String(propValue).toLowerCase());
+ }
+ }
+ else
+ {
+ /* NN4 DOM */
+ if (camelized_name == "display" && altValue)
+ {
+ camelized_name = "visibility";
+ }
+
+ if (typeof oElement[camelized_name] != "undefined")
+ {
+ var newValue = (altValue || propValue);
+ oElement[camelized_name] = newValue;
+ return (String(oElement[camelized_name]).toLowerCase()
+ == String(newValue).toLowerCase());
+ }
+ }
+ }
+
+ return false;
+ }
+
+ return _setStyleProperty;
+}());
+
+/**
+ * Resets a style property to its inherited value
+ *
+ * @param {Element} oElement
+ * @param {String} sPropertyName
+ * @return {boolean}
+ * @see jsx.dom.css.setStyleProperty()
+ */
+jsx.dom.css.resetStyleProperty = function (oElement, sPropertyName) {
+ return jsx.dom.css.setStyleProperty(oElement, sPropertyName, "");
+};
+
+/**
+ * Retrieves the rendering state or (dis)allows rendering of a DOM object.
+ *
+ * @author
+ * (C) 2004-2006 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dhtml.js
+ * @param {HTMLElement} oElement
+ * Reference to the DOM object to be rendered or not.
+ * @param {boolean} bShow
+ * Renders the object referenced by <code>o</code> if
+ * <code>true</code>, does not render it if <code>false</code>.
+ * Note that not to render an element is different from
+ * hiding it, as the space it would take up is then no
+ * longer reserved.
+ *
+ * If this argument is omitted, the current property value is returned.
+ * @return {boolean}
+ * When retrieving: <code>true</code> if visible, <code>false</code>
+ * otherwise; when setting: <code>true</code> if successful,
+ * <code>false</code> otherwise.
+ * @see #visible
+ */
+jsx.dom.display = function (oElement, bShow) {
+ var result;
+
+ if (oElement)
+ {
+ if (arguments.length > 1)
+ {
+ result = jsx.dom.css.setStyleProperty(oElement, "display",
+ bShow ? "" : "none",
+ bShow ? "show" : "hide");
+ }
+ else
+ {
+ result = /^(\s*|show)$/.test(jsx.dom.css.getStyleProperty(oElement, "display"));
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Retrieves or sets the visibility of a DOM object.
+ *
+ * @author
+ * (C) 2004-2006 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dhtml.js
+ * @param {HTMLElement} oElement
+ * Reference to the DOM object to be either shown or hidden.
+ * @param {Boolean} bVisible (optional)
+ * Shows the object referenced by <code>o</code> if <code>true</code>,
+ * hides it if <code>false</code>. Note that hiding an element is
+ * different from not rendering it, as the space it takes up is still
+ * reserved.
+ *
+ * If this argument is omitted, the current property value is returned.
+ * @return {boolean}
+ * When retrieving: <code>true</code> if visible, <code>false</code>
+ * otherwise; when setting: <code>true</code> if successful,
+ * <code>false</code> otherwise.
+ * @see #display
+ */
+jsx.dom.visibility = jsx.dom.visible = function (oElement, bVisible) {
+ var result;
+
+ if (oElement)
+ {
+ if (arguments.length > 1)
+ {
+ result = jsx.dom.css.setStyleProperty(oElement, "visibility",
+ bVisible ? "visible" : "hidden",
+ bVisible ? "show" : "hide");
+ }
+ else
+ {
+ result = /^(visible|show)$/.test(
+ jsx.dom.css.getStyleProperty(oElement, "visibility"));
+ }
+ }
+
+ return result;
+};
+
+/**
+ * @param {Number|String} imgID
+ * @param {Number} state (optional)
+ * @return {boolean}
+ * The return value of {@link #setStyleProperty} for setting the
+ * borderColor of the image
+ */
+jsx.dom.hoverImg = function (imgID, state) {
+ var img = null;
+
+ if (document.images)
+ {
+ img = document.images[imgID];
+ }
+
+ var me = arguments.callee;
+ return jsx.dom.css.setStyleProperty(img, "borderColor",
+ (state == 0 ? me.clMouseout : me.clMouseover));
+};
+jsx.dom.hoverImg.clMouseout = "#000";
+jsx.dom.hoverImg.clMouseover = "#fff";
+
+jsx.dom.getAbsPos = function (oNode) {
+ /* TODO: One initialization for all properties? */
+ var result = {};
+ result.x = result.y = 0;
+ result.toString = function () {
+ return "{x: " + this.x + ", y: " + this.y + "}";
+ };
+
+ if (oNode.offsetParent)
+ {
+ while (oNode.offsetParent)
+ {
+ result.x += oNode.offsetLeft;
+ result.y += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+ }
+ else if (typeof oNode.x != "undefined"
+ && typeof oNode.y != "undefined")
+ {
+ result.x += oNode.x;
+ result.y += oNode.y;
+ }
+
+ return result;
+};
+
+/**
+ * @namespace
+ */
+jsx.dom.css.selectors = {
+ ID: "#{nmchar}+"
+ .replace(/\{nmchar\}/, "[_a-z0-9-]|{nonascii}|{escape}")
+ .replace(/\{nonascii\}/g, "[\\xA0-\\xFF]")
+ .replace(/\{escape\}/g, "{unicode}|\\\\[^\\r\\n\\f0-9a-f]")
+ .replace(/\{unicode\}/g, "\\\\{h}{1,6}(\\r\\n|[ \\t\\r\\n\\f])?")
+ .replace(/\{h\}/g, "[0-9a-f]"),
+ CLASS: "\\.IDENT"
+ .replace(/IDENT/, "-?{nmstart}{nmchar}*")
+ .replace(/\{nmstart\}/, "[_a-z]|{nonascii}|{escape}")
+ .replace(/\{nmchar\}/, "[_a-z0-9-]|{nonascii}|{escape}")
+ .replace(/\{nonascii\}/g, "[\\xA0-\\xFF]")
+ .replace(/\{escape\}/g, "{unicode}|\\\\[^\\r\\n\\f0-9a-f]")
+ .replace(/\{unicode\}/g, "\\\\{h}{1,6}(\\r\\n|[ \\t\\r\\n\\f])?")
+ .replace(/\{h\}/g, "[0-9a-f]"),
+ ATTRIBUTE: "\\[\\s*(IDENT\\|)?IDENT\\s*((=|INCLUDES|DASHMATCH)\\s*(IDENT|STRING)\\s*)?\\]"
+ .replace(/IDENT/g, "-?{nmstart}{nmchar}*")
+ .replace(/INCLUDES/, "~=")
+ .replace(/DASHMATCH/, "\\|=")
+ .replace(/STRING/, "{string1}|{string2}")
+ .replace(/\{string1\}/, '"([^\\n\\r\\f\\\\"]|\\\\{nl}|{escape})*"')
+ .replace(/\{string2\}/, "'([^\\n\\r\\f\\\\']|\\\\{nl}|{escape})*'")
+ .replace(/\{nl\}/g, "(\\n|\\r\n|\\r|\\f)")
+ .replace(/\{nmstart\}/g, "[_a-z]|{nonascii}|{escape}")
+ .replace(/\{nmchar\}/g, "[_a-z0-9-]|{nonascii}|{escape}")
+ .replace(/\{nonascii\}/g, "[\\xA0-\\xFF]")
+ .replace(/\{escape\}/g, "{unicode}|\\\\[^\\r\\n\\f0-9a-f]")
+ .replace(/\{unicode\}/g, "\\\\{h}{1,6}(\\r\\n|[ \\t\\r\\n\\f])?")
+ .replace(/\{h\}/g, "[0-9a-f]"),
+ PSEUDOCLASS: ":(link|visited|hover|active|focus|target|lang"
+ + "|enabled|disabled|checked|indeterminate"
+ + "|root|nth-child|nth-last-child|nth-of-type|nth-last-of-type"
+ + "|first-child|last-child|first-of-type|last-of-type"
+ + "|only-child|only-of-type|empty|not)\\b",
+ ELEMENT: "(^|\\s)((IDENT|\\*)\\|)?IDENT"
+ .replace(/IDENT/g, "-?{nmstart}{nmchar}*")
+ .replace(/\{nmstart\}/g, "[_a-z]|{nonascii}|{escape}")
+ .replace(/\{nmchar\}/g, "[_a-z0-9-]|{nonascii}|{escape}")
+ .replace(/\{nonascii\}/g, "[\\xA0-\\xFF]")
+ .replace(/\{escape\}/g, "{unicode}|\\\\[^\\r\\n\\f0-9a-f]")
+ .replace(/\{escape\}/g, "{unicode}|\\\\[^\\r\\n\\f0-9a-f]")
+ .replace(/\{unicode\}/g, "\\\\{h}{1,6}(\\r\\n|[ \\t\\r\\n\\f])?")
+ .replace(/\{h\}/g, "[0-9a-f]"),
+ PSEUDOELEMENT: "::?(first-line|first-letter|before|after)\\b"
+};
+
+/**
+ * A <code>RuleList</code> object encapsulates
+ * all CSS selectors linked to from a document in a
+ * {@link Collection}.
+ *
+ * @constructor
+ * @param {Object} oDocument (optional)
+ * Object reference to override the default
+ * <code>document</code> object reference.
+ * @return {jsx.dom.css.RuleList}
+ */
+jsx.dom.css.RuleList = function (oDocument) {
+ arguments.callee._super.call(this);
+ this.document = oDocument || document;
+ this.get();
+};
+
+jsx.dom.css.RuleList.extend(jsx.Collection, {
+ /**
+ * @type Document
+ */
+ document: null,
+
+ /**
+ * Populates the collection with the selectors
+ * of the document.
+ *
+ * @memberOf jsx.dom.css.RuleList#prototype
+ * @param {Object} oDocument (optional)
+ * Object reference to override the default
+ * <code>document</code> object reference.
+ * @return {boolean}
+ */
+ get: function (oDocument) {
+ if (oDocument)
+ {
+ this.document = oDocument;
+ }
+
+ this.clear();
+
+ var d, oSheets;
+ if ((d = this.document) && (oSheets = d.styleSheets))
+ {
+ for (var i = 0, oRules; i < oSheets.length; i++)
+ {
+ var oSheet = oSheets[i];
+ if ((oRules = oSheet.cssRules || oSheet.rules))
+ {
+ for (var j = 0; j < oRules.length; j++)
+ {
+ this.add(oRules[j], oRules[j].selectorText);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+ },
+
+ /**
+ * Returns a reference to the first rule
+ * with a simple selector.
+ *
+ * @param {String} sSelector
+ * Simple selector
+ * @return {CSSStyleRule|Null}
+ */
+ findBySimpleSelector: function (sSelector) {
+ var i = this.iterator();
+ while ((s = i.next()) != null)
+ {
+ if ((new RegExp("(^|\\s)" + sSelector + "([+>\\s]|$)")).test(s.value.selectorText))
+ {
+ return s.value;
+ }
+ }
+
+ return null;
+ }
+});
+
+jsx.dom.css.findRules = (function () {
+ var a = [];
+ var _slice = a.slice;
+ var _concat = a.concat;
+
+ function toArray (obj)
+ {
+ return _slice.call(obj || a);
+ }
+
+ return function (selector, exactMatch) {
+ var prefix = "(^|\\s)";
+ if (exactMatch)
+ {
+ prefix = "^\\s*";
+ }
+
+ var rxSelector = new RegExp(
+ prefix + selector.replace(/[$.(){}\[\]^]/g, "\\$&") + "\\s*$");
+
+ var hits = toArray(document.styleSheets).map(function (styleSheet) {
+ return toArray(styleSheet.cssRules || styleSheet.rules).filter(
+ function (rule) {
+ return rxSelector.test(rule.selectorText);
+ });
+ }).filter(function (hit) {
+ return hit.length > 0;
+ });
+
+ return _concat.apply([], hits);
+ };
+}());
+
+/**
+ * Calculate the specificity of a CSS3 selector
+ *
+ * @see http://www.w3.org/TR/css3-selectors/#specificity
+ */
+jsx.dom.css.getSpecificity = (function () {
+ var selectors = jsx.dom.css.selectors;
+ var rxID = new RegExp(selectors.ID, "g");
+ var rxAttr = new RegExp(
+ selectors.CLASS + "|" + selectors.ATTRIBUTE + "|" + selectors.PSEUDOCLASS,
+ "g");
+ var rxElem = new RegExp(
+ selectors.ELEMENT + "|" + selectors.PSEUDOELEMENT, "g");
+
+ /**
+ * @param {String} selector
+ * @return {Number}
+ * The specificity of <var>selector</var> where the value modulo 100
+ * is the number of ID selectors, the value modulo 10 is the number of
+ * class selectors, attributes selectors, and pseudo-classes, and the
+ * value modulo 1 is the number of element names and pseudo-elements
+ * in the selector.
+ */
+ return function (selector) {
+ selector = String(selector || "");
+ var idNum = (selector.match(rxID) || []).length;
+ var attrNum = (selector.match(rxAttr) || []).length;
+ var elemNum = (selector.match(rxElem) || []).length;
+
+ return (idNum * 100) + (attrNum * 10) + elemNum;
+ };
+}());
+
+/**
+ * Retrieves all elements matching all specified CSS class names
+ */
+jsx.dom.css.getElemByClassName = jsx.dom.css.gEBCN = (function () {
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+ var _getElemByTagName = jsx.dom.getElemByTagName;
+ var sWhiteSpace = "[ \\t\\f\\u200B\\r\\n]+";
+ var rxWhiteSpace = new RegExp(sWhiteSpace);
+
+ /**
+ * @param {Array|String} sClassNames
+ * @param {Element} contextNode (optional)
+ * @return {Array}
+ * An <code>Array</code> of references to objects representing
+ * matching elements
+ */
+ return function (sClassNames, contextNode) {
+ var
+ result = [],
+ classNames = !Array.isArray(sClassNames)
+ ? String(sClassNames || "").split(rxWhiteSpace)
+ : sClassNames,
+ classNameSet = {};
+
+ if (classNames.length > 0)
+ {
+ /* Remove duplicates */
+ for (var i = classNames.length; i--;)
+ {
+ classNameSet[classNames[i]] = true;
+ }
+
+ classNames = [];
+ if (typeof Object.keys == "function")
+ {
+ classNames = Object.keys(classNameSet);
+ }
+ else
+ {
+ for (var className in classNameSet)
+ {
+ if (_hasOwnProperty(classNameSet, className))
+ {
+ classNames.push(className);
+ }
+ }
+ }
+
+ var aElements = _getElemByTagName("*", -1, contextNode || document);
+ }
+
+ if (aElements)
+ {
+ /*
+ * NOTE: There are many more elements than potential class names, so loop
+ * through those only once
+ */
+ outer: for (var i = 0, len = aElements.length; i < len; ++i)
+ {
+ var element = aElements[i];
+ var elementClassName = element.className;
+
+ for (var j = classNames.length; j--;)
+ {
+ if (!new RegExp("(^|" + sWhiteSpace + ")" + classNames[j]
+ + "($|" + sWhiteSpace + ")")
+ .test(elementClassName))
+ {
+ continue outer;
+ }
+ }
+
+ result[result.length] = element;
+ }
+ }
+
+ return result;
+ };
+}());
+
+jsx.dom.css.showByClassName = (function () {
+ var _getEBCN = jsx.dom.css.getElemByClassName;
+
+ /**
+ * Shows or hides elements with a certain class name.
+ *
+ * @param {string} sClassName
+ * Class name of the elements to be hidden/shown.
+ * @param {boolean} bShow (optional)
+ * If <code>false</code> (default), elements will be
+ * hidden, otherwise shown.
+ * @requires dhtml.js
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code> otherwise.
+ */
+ return function (sClassName, bShow) {
+ var newDisplay = bShow ? "" : "none";
+ var ruleList, selector;
+ if (typeof jsx.dom.css != "undefined"
+ && typeof jsx.dom.css.RuleList == "function"
+ && (ruleList = new jsx.dom.css.RuleList())
+ && (selector =
+ ruleList.findBySimpleSelector("\\." + sClassName)))
+ {
+ selector.display = newDisplay;
+ return (selector.display == newDisplay);
+ }
+
+ var es = _getEBCN(sClassName);
+
+ for (var i = es.length; i--; 0)
+ {
+ var o = es[i];
+ if (typeof o.display != "undefined")
+ {
+ o.display = newDisplay;
+ }
+ }
+
+ return true;
+ };
+}());
+
+/**
+ * Makes all non-default stylesheet declarations for an element inline
+ */
+jsx.dom.css.makeInline = (function () {
+ var defaultValues = {
+ "background-image": "none"
+ };
+
+ /**
+ * @param {Element} obj
+ */
+ return function (obj) {
+ var computedStyle = jsx.dom.css.getComputedStyle(obj);
+ if (!computedStyle)
+ {
+ return;
+ }
+
+ for (var i = 0, len = computedStyle.length; i < len; ++i)
+ {
+ var propertyName = computedStyle[i];
+ var propertyValue = computedStyle.getPropertyValue(propertyName);
+
+ if (propertyValue != defaultValues[propertyName])
+ {
+ obj.style.setProperty(propertyName, propertyValue);
+ }
+ }
+ };
+}());
+
+jsx.dom.css.isHidden = (function () {
+ var _getComputedStyle = jsx.dom.css.getComputedStyle;
+
+ return function (o) {
+ while (o)
+ {
+ if (typeof o.style == "undefined"
+ || typeof o.style.visibility != "undefined"
+ && /hidden/i.test(o.style.visibility)
+ || /hidden/i.test(_getComputedStyle(o, "visibility")))
+ {
+ return true;
+ }
+
+ o = o.parentNode;
+ }
+
+ return false;
+ };
+}());
+
+jsx.dom.css.focusElement = function (s) {
+ var o = document.getElementById(s);
+ if (o && jsx.object.isMethod(o, "focus") && !jsx.dom.css.isHidden(o))
+ {
+ o.focus();
+ }
+};
\ No newline at end of file
/live/dom/css.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/dom/geolocation.js
===================================================================
--- live/dom/geolocation.js (nonexistent)
+++ live/dom/geolocation.js (revision 509)
@@ -0,0 +1,300 @@
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ * @type jsx.dom.geolocation
+ */
+jsx.dom.geolocation = {
+ /**
+ * Character used to separate a number from a unit of length.
+ *
+ * The default is U+2009 THIN SPACE.
+ */
+ TEXT_THIN_SPACE: "\u2009",
+
+ TEXT_LATITUDE: "Latitude",
+
+ /**
+ * Abbreviation used for latitudes at the equator or in the
+ * Northern hemisphere
+ */
+ TEXT_NORTH_ABBR: "N",
+
+ /**
+ * Abbreviation used for latitudes in the Southern hemisphere.
+ */
+ TEXT_SOUTH_ABBR: "S",
+
+ TEXT_LONGITUDE: "Longitude",
+
+ /**
+ * Abbreviation used for longitudes at or west of
+ * the IERS Reference Meridian.
+ */
+ TEXT_WEST_ABBR: "W",
+
+ /**
+ * Abbreviation used for longitudes east of
+ * the IERS Reference Meridian.
+ */
+ TEXT_EAST_ABBR: "E",
+ TEXT_LAT_LNG_ACCURACY: "Lat/Lng Accuracy",
+ TEXT_ALTITUDE: "Altitude",
+
+ /**
+ * Text to use for altitude accuracy
+ */
+ TEXT_ALT_ACCURACY: "Alt. Accuracy",
+
+ TEXT_SPEED: "Speed",
+ TEXT_HEADING: "Heading",
+ TEXT_NOT_AVAILABLE: "N/A",
+
+ /**
+ * @return {Position}
+ * The <code>Position</code> stored in this object.
+ */
+ getPosition: function () {
+ return this._position;
+ },
+
+ /**
+ * Sets the {Position} stored in this object.
+ *
+ * Automatically called from {@link #runAsync()} when
+ * geolocation is successful. Can be manually called
+ * to ease calling several methods of this object that
+ * return human-readable string representations of that
+ * <code>Position</code>.
+ *
+ * @param {Position} value
+ * @return {jsx.dom.geolocation}
+ */
+ setPosition: function (value) {
+ this._position = value;
+ return this;
+ },
+
+ /**
+ * @return {boolean}
+ * <code>true</code> if geolocation is available,
+ * <code>false</code> otherwise.
+ */
+ isAvailable: function () {
+ return jsx.object.isHostMethod(navigator, "geolocation", "getCurrentPosition");
+ },
+
+ /**
+ * Runs geolocation asynchronously.
+ *
+ * @param {Callable} callback
+ * Called when geolocation was completed
+ * @return {boolean}
+ * <code>true</code> if geolocation is supported,
+ * <code>false</code> otherwise.
+ */
+ runAsync: function (callback) {
+ if (this.isAvailable())
+ {
+ var me = this;
+ navigator.geolocation.getCurrentPosition(function (position) {
+ me.setPosition(position);
+ me = null;
+ callback(position);
+ });
+
+ return true;
+ }
+
+ return false;
+ },
+
+ /**
+ * Sets the texts used for human-readable string representations
+ * of a {Position} as returned by methods of this object.
+ *
+ * @param {Object} texts
+ * Object whose keys identify the keys of this object to be
+ * set. Usually an external i18n provider would define the
+ * values.
+ * @return {jsx.dom.geolocation}
+ */
+ setTexts: function (texts) {
+ var keys = jsx.object.getKeys(texts);
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var key = keys[i];
+ if (typeof this[key] == "string")
+ {
+ this[key] = texts[key];
+ }
+ }
+
+ return this;
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s latitude
+ * in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getLatitudeString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var latitude = position.coords.latitude;
+ return (latitude != null
+ ? Math.abs(latitude) + "°\xA0"
+ + (latitude < 0 ? this.TEXT_SOUTH_ABBR : this.TEXT_NORTH_ABBR)
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s longitude
+ * in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getLongitudeString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var longitude = position.coords.longitude;
+ return (longitude != null
+ ? Math.abs(longitude) + "°\xA0"
+ + (longitude < 0 ? this.TEXT_WEST_ABBR : this.TEXT_EAST_ABBR)
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s
+ * latitude/longitude accuracy in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getLatLngAccuracyString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ return position.coords.accuracy + this.TEXT_THIN_SPACE + "m";
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s altitude
+ * in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getAltitudeString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var altitude = position.coords.altitude;
+ return (altitude != null
+ ? altitude + this.TEXT_THIN_SPACE + "m"
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s altitude
+ * accuracy in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getAltAccuracyString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var altitudeAccuracy = position.coords.altitudeAccuracy;
+ return (altitudeAccuracy != null
+ ? altitudeAccuracy + this.TEXT_THIN_SPACE + "m"
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s speed
+ * in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getSpeedString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var speed = position.coords.speed;
+ return (speed != null && !isNaN(speed)
+ ? speed + " m/s"
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position}'s heading
+ * in human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getHeadingString: function (position) {
+ if (!position)
+ {
+ position = this.getPosition();
+ }
+
+ var heading = position.coords.heading;
+ return (heading != null && !isNaN(heading)
+ ? heading + "°"
+ : this.TEXT_NOT_AVAILABLE);
+ },
+
+ /**
+ * Returns the string representation of a {Position} in
+ * human-readable form.
+ *
+ * @param {Position} position = this.getPosition()
+ * @return {string}
+ */
+ getText: function (position) {
+ return [
+ this.TEXT_LATITUDE + ": " + this.getLatitudeString(position),
+ this.TEXT_LONGITUDE + ": " + this.getLongitudeString(position),
+ this.TEXT_LAT_LNG_ACCURACY + ": " + this.getLatLngAccuracyString(position),
+ this.TEXT_ALTITUDE + ": " + this.getAltitudeString(position),
+ this.TEXT_ALT_ACCURACY + ": " + this.getAltAccuracyString(position),
+ this.TEXT_SPEED + ": " + this.getSpeedString(position),
+ this.TEXT_HEADING + ": " + this.getHeadingString(position)
+ ].join("\n");
+ }
+};
\ No newline at end of file
/live/dom/geolocation.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/css/compat.js
===================================================================
--- live/dom/css/compat.js (nonexistent)
+++ live/dom/css/compat.js (revision 509)
@@ -0,0 +1,29 @@
+/**
+ * <title>PointedEars' DOM Library: CSS Compatibility Layer</title>
+ * @version $Id$
+ * @requires dom.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2011, 2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+var CSS = jsx.dom.css;
+var setStyleProperty = jsx.dom.setStyleProperty = jsx.dom.css.setStyleProperty;
+jsx.dom.getElemByClassName = jsx.dom.css.getElemByClassName;
\ No newline at end of file
/live/dom/css/compat.js
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/css/color.js
===================================================================
--- live/dom/css/color.js (nonexistent)
+++ live/dom/css/color.js (revision 509)
@@ -0,0 +1,1172 @@
+"use strict";
+/**
+ * <title>PointedEars' DOM Library: CSS Colors</title>
+ * @version $Id$
+ * @requires dom/css.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2011-2013 Thomas Lahn &lt;js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+if (typeof jsx.dom.css == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom.css = {};
+}
+
+/**
+ * The <code>Color</code> prototype encapsulates
+ * color data given in RGB format.
+ *
+ * @param {Number|Color|String} iRed
+ * Red value or RGB color. Supported formats for RGB color are:
+ * <code>rgb(<var>r</var>, <var>g</var>, <var>b</var>)</code>,
+ * <code>#rgb</code> and <code>#rrggbb</code>. If a <code>Color</code>,
+ * its red component is used.
+ * @param {Number|Color} iGreen
+ * Green value (optional). If both <code>iRed</code> and this argument
+ * are <code>Color</code>s, this arguments's green component is used.
+ * @param {Number|Color} iBlue
+ * Blue value (optional). If both <code>iRed</code> and this argument
+ * are <code>Color</code>s, this arguments's blue component is used.
+ * @param {Number|Color} fOpacity
+ * Opacity value (optional). If both <code>iRed</code> and this argument
+ * are <code>Color</code>s, this arguments's opacity value is used.
+ * @property red : Number
+ * Red value
+ * @property green : Number
+ * Green value.
+ * @property blue : Number
+ * Blue value.
+ * @property opacity : Number
+ * Opacity value
+ * @return {jsx.dom.css.Color}
+ */
+jsx.dom.css.Color = function (iRed, iGreen, iBlue, fOpacity) {
+ return this.set(iRed, iGreen, iBlue, fOpacity);
+};
+
+jsx.dom.css.Color.MIN_VALUE = 0;
+jsx.dom.css.Color.MAX_VALUE = 255;
+
+/**
+ * Returns the difference between two colors.
+ *
+ * @param {jsx.dom.css.Color|String} color1
+ * @param {jsx.dom.css.Color|String} color2
+ * @returns {red, green, blue, opacity}
+ * @see jsx.dom.css.Color.prototype.diff()
+ */
+jsx.dom.css.Color.diff = function (color1, color2) {
+ return (new jsx.dom.css.Color(color1)).diff(color2);
+};
+
+/**
+ * Returns a <code>Color</code> object, identifying a color in the
+ * sRGB color space, defined by given coordinates for that color
+ * in the HSV (Hue, Saturation, Value) color space.
+ * If any of the coordinates is not provided, it is assumed to be
+ * 0 (zero).
+ *
+ * @param {number} iHue
+ * Hue, from 0 to 360 (degrees).
+ * @param {number} fSaturation
+ * Saturation, from 0.0 to 1.0 (0 to 100%).
+ * @param {number} fValue
+ * Brightness value, from 0.0 to 1.0 (0 to 100%).
+ * @return {jsx.dom.css.Color}
+ */
+jsx.dom.css.Color.hsv2rgb = function (iHue, fSaturation, fValue) {
+ return (new jsx.dom.css.HSVColor(iHue, fSaturation, fValue)).toRGB();
+};
+
+jsx.dom.css.Color.extend(null, {
+ /**
+ * Sets the color values from Red, Green, Blue and Opacity values or a
+ * RGB(A) value.
+ *
+ * @memberOf jsx.dom.css.Color.prototype
+ * @param iRed {number|Color|string}
+ * Red value or RGB color. Supported formats
+ * for RGB color are the same as for {@link #Color}.
+ * @param iGreen {number|Color}
+ * Green value (optional)
+ * @param iBlue {number|Color}
+ * Blue value (optional)
+ * @param fOpacity : {number|Color}
+ * Opacity value (optional)
+ * @return {jsx.dom.css#Color}
+ */
+ set: function (iRed, iGreen, iBlue, fOpacity) {
+ if (typeof iRed != "undefined")
+ {
+ /* rgb(...) or /#xxx(xxx)?/ */
+ if (typeof iRed == "string")
+ {
+ this.setRGB(iRed);
+ }
+ else
+ {
+ if (jsx.object.isInstanceOf(iRed, this.constructor))
+ {
+ this.setRed(iRed.red);
+
+ var argc = arguments.length;
+ if (jsx.object.isInstanceOf(iGreen, this.constructor)
+ && jsx.object.isInstanceOf(iBlue, this.constructor)
+ && (jsx.object.isInstanceOf(fOpacity, this.constructor)
+ || argc < 4))
+ {
+ this.setGreen(iGreen.green);
+ this.setBlue(iBlue.blue);
+ if (argc < 4)
+ {
+ this.setOpacity(fOpacity.opacity);
+ }
+ }
+ else
+ {
+ this.setGreen(iRed.green);
+ this.setBlue(iRed.blue);
+ this.setOpacity(iRed.opacity);
+ }
+ }
+ else
+ {
+ this.setRed(iRed);
+ this.setGreen(iGreen);
+ this.setBlue(iBlue);
+ this.setOpacity(typeof fOpacity == "undefined" ? 1.0 : fOpacity);
+ }
+ }
+ }
+
+ this.fix();
+
+ return this;
+ },
+
+ /**
+ * @private
+ * @param {String} sComponent
+ * @param {Number} value
+ */
+ _setComponent: function (sComponent, value) {
+ if (String(value).indexOf("%") > -1)
+ {
+ value = this.constructor.MAX_VALUE * (parseFloat(value, 10) / 100);
+ }
+
+ if (isNaN(value))
+ {
+ return jsx.throwThis("jsx.InvalidArgumentError",
+ ["Invalid component value", String(value), "number"]);
+ }
+
+ this[sComponent] = parseFloat(value, 10);
+ },
+
+ setRed: function (value) {
+ this._setComponent("red", value);
+ },
+
+ setGreen: function (value) {
+ this._setComponent("green", value);
+ },
+
+ setBlue: function (value) {
+ this._setComponent("blue", value);
+ },
+
+ setOpacity: function (value) {
+ if (isNaN(value))
+ {
+ return jsx.throwThis("jsx.InvalidArgumentError",
+ ["Invalid opacity value", String(value), "number"]);
+ }
+
+ this.opacity = parseFloat(value);
+ },
+
+ /**
+ * Returns the difference between two colors.
+ *
+ * @param {jsx.dom.css.Color} color2
+ * @return {Object}
+ * The difference between the current color (A)
+ * and another color (B) as a tuple (Object) consisting
+ * of the differences between each RGB color component and
+ * the opacity of each color. That is, if A := (r1, g1, b1, o1)
+ * and B := (r2, g2, b2, o2) then <code>A.diff(B)</code>
+ * returns B - A := (r2 - r1, g2 - g1, b2 - b1, o2 - o1).
+ *
+ * Note that since each component value of the result
+ * may be negative, the result is normalized through
+ * {@link jsx.dom.css.Color.prototype#fix} if its properties
+ * are used for creating a <code>Color</code> object.
+ * @type {red, green, blue, opacity}
+ */
+ diff: function (color2) {
+ var _Color = jsx.dom.css.Color;
+ if (color2.constructor != _Color)
+ {
+ color2 = new _Color(color2);
+ }
+
+ return {
+ red: color2.red - this.red,
+ green: color2.green - this.green,
+ blue: color2.blue - this.blue,
+ opacity: color2.opacity - this.opacity
+ };
+ },
+
+ /**
+ * Fixes RGB values, i.e. brings them into range
+ * if they are out of range, and returns the new value.
+ * NOTE: Disregards brightness and contrast.
+ *
+ * @return {jsx.dom.css#Color}
+ */
+ fix: function () {
+ var rgbMin = this.constructor.MIN_VALUE;
+ var rgbMax = this.constructor.MAX_VALUE;
+
+ for (var component in {red: 1, green: 1, blue: 1})
+ {
+ this[component] = Math.round(this[component]);
+
+ if (isNaN(this[component]) || this[component] < rgbMin)
+ {
+ this[component] = rgbMin;
+ }
+ else
+ {
+ if (this[component] > rgbMax)
+ {
+ this[component] = rgbMax;
+ }
+ }
+ }
+
+ if (typeof this.opacity == "undefined" || this.opacity > 1)
+ {
+ this.opacity = 1;
+ }
+ else if (this.opacity < 0)
+ {
+ this.opacity = 0;
+ }
+
+ return this;
+ },
+
+ /**
+ * Increase/decrease one or more RGB components of a color.
+ *
+ * @param iRed
+ * @param iGreen
+ * @param iBlue
+ * @return {jsx.dom.css#Color}
+ */
+ inc: function (iRed, iGreen, iBlue) {
+ switch (iRed.constructor)
+ {
+ case String:
+ iRed = new jsx.dom.css.Color(iRed);
+ break;
+
+ case Object:
+ case this.constructor:
+ if (typeof iRed.green != "undefined")
+ {
+ iGreen = iRed.green;
+ }
+
+ if (typeof iRed.blue != "undefined")
+ {
+ iBlue = iRed.blue;
+ }
+
+ iRed = iRed.red;
+ break;
+
+ case Array:
+ if (typeof iRed[1] != "undefined")
+ {
+ iGreen = iRed[1];
+ }
+
+ if (typeof iRed[2] != "undefined")
+ {
+ iBlue = iRed[2];
+ }
+
+ iRed = iRed[0];
+ break;
+ }
+
+ this.red += (parseFloat(iRed, 10) || 0);
+ this.green += (parseFloat(iGreen, 10) || 0);
+ this.blue += (parseFloat(iBlue, 10) || 0);
+
+ return this.fix();
+ },
+
+ /**
+ * Sets the color values from an RGB(A) value.
+ *
+ * @param {string} v
+ * RGB(A) value as supported by @{#Color()}.
+ * @return {jsx.dom.css#Color}
+ */
+ setRGB: function (v) {
+ /*
+ * <http://www.w3.org/TR/css3-values/#percentages>:
+ * "A percentage value is denoted by <percentage>, consists of
+ * a <number> immediately followed by a percent sign ‘%’."
+ * "A number is either an integer, or zero or more decimal
+ * digits followed by a dot (.) followed by one or more
+ * decimal digits."
+ */
+ var
+ integer = "\\d+",
+ number = "(" + integer + "|\\d*\\.\\d+)",
+ percentage_opt = number + "%?";
+
+ var rx = new RegExp(
+ "rgb(a)?\\(\\s*(" + percentage_opt + ")"
+ + "\\s*,\\s*(" + percentage_opt + ")"
+ + "\\s*,\\s*(" + percentage_opt + ")"
+ + "(\\s*,\\s*("+ number + "))?\\s*\\)"
+ + "|#([0-9a-f]{3})([0-9a-f]{3})?",
+ "i");
+
+ var m;
+ if ((m = rx.exec(v)))
+ {
+ /* rgb(...) */
+ var
+ rgba = m[1],
+ red = m[2],
+ green = m[4],
+ blue = m[6],
+ opacity = m[9],
+ hex3 = m[11],
+ hex6 = m[12];
+
+ if (red)
+ {
+ this.setRed(red);
+ this.setGreen(green);
+ this.setBlue(blue);
+
+ if (rgba)
+ {
+ this.setOpacity(opacity);
+ }
+ }
+ else
+ {
+ /* #xxx(xxx)? */
+ if (hex6)
+ {
+ /* #xxxxxx */
+ if ((m =
+ /([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i.exec(hex3 + hex6)))
+ {
+ this.setRed(parseInt(m[1], 16));
+ this.setGreen(parseInt(m[2], 16));
+ this.setBlue(parseInt(m[3], 16));
+ }
+ }
+ else
+ {
+ /* #xxx */
+ var ch;
+ this.setRed(parseInt((ch = hex3.charAt(0)) + ch, 16));
+ this.setGreen(parseInt((ch = hex3.charAt(1)) + ch, 16));
+ this.setBlue(parseInt((ch = hex3.charAt(2)) + ch, 16));
+ }
+ }
+ }
+
+ this.fix();
+
+ return this;
+ },
+
+ /**
+ * Returns the monochrome version of a color as an object.
+ *
+ * @return {jsx.dom.css#Color}
+ */
+ getMono: function () {
+ var v = this.toHSV().getValue();
+ return new this.constructor(v, v, v);
+ },
+
+ /**
+ * Sets the color values from Red, Green and Blue values or
+ * an RGB value and returns a monochrome version of the color
+ * as an object.
+ *
+ * @param {number|string} iRed
+ * Red value or RGB color. Supported formats
+ * for RGB color are the same as for @{#Color()}.
+ * @param {number} iGreen (optional)
+ * Green value.
+ * @param {number} iBlue (optional)
+ * Blue value.
+ * @return {jsx.dom.css.Color}
+ */
+ setMono: function (iRed, iGreen, iBlue) {
+ this.set(iRed, iGreen, iBlue);
+
+ var c = this.getMono();
+ this.red = c.red;
+ this.green = c.green;
+ this.blue = c.blue;
+
+ return this;
+ },
+
+ /**
+ * Returns the next similar color to the represented color on the
+ * 214-color Web-safe palette, i.e. a color where each sRGB component
+ * is one of the hexadecimal values 0x00 (0), 0x33 (51), 0x66 (102),
+ * 0x99 (153), 0xCC (204), and 0xFF (255).
+ *
+ * @return {jsx.dom.css.Color}
+ */
+ getWebSafe: function () {
+ function getNearestSafeValue (value)
+ {
+ if (value >= 0xFF)
+ {
+ return 0xFF;
+ }
+
+ if (value <= 0)
+ {
+ return 0;
+ }
+
+ for (var safeValues = [0, 0x33, 0x66, 0x99, 0xCC, 0xFF],
+ i = safeValues.length - 1;
+ i--;)
+ {
+ var item = safeValues[i];
+
+ if (value >= item)
+ {
+ if (value == item)
+ {
+ return value;
+ }
+
+ var nextItem = safeValues[i + 1];
+ if (value - item < nextItem - value)
+ {
+ return item;
+ }
+
+ return nextItem;
+ }
+ }
+ return -1;
+ }
+
+ return new this.constructor(
+ getNearestSafeValue(this.red),
+ getNearestSafeValue(this.green),
+ getNearestSafeValue(this.blue));
+ },
+
+ setWebSafe: function (iRed, iGreen, iBlue) {
+ this.set(iRed, iGreen, iBlue);
+
+ var c = this.getWebSafe();
+ this.red = c.red;
+ this.green = c.green;
+ this.blue = c.blue;
+
+ return this;
+ },
+
+ /**
+ * Returns the color in the sRGB color space as an object
+ * identifying the coordinates of that color in the
+ * HSL (Hue, Saturation, Lightness) color space.
+ *
+ * @requires jsx.math.max(), jsx.math.min() from <tt>math/float.js</tt>
+ * @return {jsx.dom.css.HSLColor}
+ */
+ toHSL: function () {
+ /* Cf. <http://www5.informatik.tu-muenchen.de/lehre/vorlesungen/graphik/info/csc/COL_26.htm#topic25> */
+
+ jsx.importOnce(jsx.absPath("../../math/float.js", jsx.importFrom.lastImport));
+
+ var
+ red = this.red,
+ green = this.green,
+ blue = this.blue,
+ min = jsx.math.min(red, green, blue),
+ max = jsx.math.max(red, green, blue),
+ hue = 0,
+ saturation,
+ lightness = ((max + min) / 2) / this.constructor.MAX_VALUE;
+
+ if (max == min)
+ {
+ saturation = 0;
+ }
+ else
+ {
+ if (lightness <= 0.5)
+ {
+ saturation = (max - min) / (max + min);
+ }
+ else
+ {
+ saturation = (max - min) / (2 - max - min);
+ }
+ }
+
+ var delta = max - min;
+
+ if (red == max)
+ {
+ hue = (green - blue) / delta;
+ }
+ else if (green == max)
+ {
+ hue = 2 + (blue - red) / delta;
+ }
+ else if (blue == max)
+ {
+ hue = 4 + (red - green) / delta;
+ }
+
+ hue *= 60;
+
+ if (hue < 0)
+ {
+ hue += 360;
+ }
+
+ return new jsx.dom.css.HSLColor(hue, saturation * 100, lightness * 100, this.opacity);
+ },
+
+ /**
+ * Returns the color in the sRGB color space as an object
+ * identifying the coordinates of that color in the
+ * HSV (Hue, Saturation, Value) color space.
+ *
+ * @requires jsx.math.max(), jsx.math.min() from <tt>math/float.js</tt>
+ * @return {jsx.dom.css.HSVColor}
+ */
+ toHSV: function () {
+ /* Cf. http://en.wikipedia.org/wiki/HSV_color_space#Transformation_between_HSV_and_RGB */
+ var
+ rgbMax = this.constructor.MAX_VALUE,
+ red = this.red / rgbMax,
+ green = this.green / rgbMax,
+ blue = this.blue / rgbMax,
+ max = jsx.math.max(red, green, blue),
+ min = jsx.math.min(red, green, blue),
+ hue = 0,
+ saturation = 0,
+ value,
+ delta = max - min;
+
+ if (max != min)
+ {
+ if (red == max)
+ {
+ hue = (green - blue) / delta * 60;
+ }
+ else if (green == max)
+ {
+ hue = (2 + (blue - red) / delta) * 60;
+ }
+ else if (blue == max)
+ {
+ hue = (4 + (red - green) / delta) * 60;
+ }
+ }
+
+ if (hue < 0)
+ {
+ hue += 360;
+ }
+
+ if (max == 0)
+ {
+ saturation = 0;
+ }
+ else
+ {
+ saturation = 100 * (delta / max);
+ }
+
+ value = 100 * max;
+
+ return new jsx.dom.css.HSVColor(hue, saturation, value, this.opacity);
+ },
+
+ /**
+ * @requires jsx.string.leadingZero() from string.js
+ * @return {string}
+ */
+ toHex: function () {
+ var _leadingZero = jsx.string.leadingZero;
+ var
+ red = _leadingZero(this.red.toString(16), 2),
+ green = _leadingZero(this.green.toString(16), 2),
+ blue = _leadingZero(this.blue.toString(16), 2),
+ rx = /([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/i,
+ m;
+
+ if ((m = rx.exec(red + green + blue)))
+ {
+ red = m[1];
+ green = m[2];
+ blue = m[3];
+ }
+
+ return '#' + red + green + blue;
+ },
+
+ /**
+ * Returns the color as a string
+ * <code>rgb(<var>red</var>,<var>green</var>,<var>blue</var>)</code>
+ * representation supported by CSS.
+ *
+ * @function
+ * @return {string}
+ */
+ toRGBString: function () {
+ return 'rgb(' + this.red + ',' + this.green + ',' + this.blue + ')';
+ },
+
+ /**
+ * Returns the JavaScript Object Notation for the instance.
+ *
+ * Returns
+ * <code>{"red": <var>r</var>, "green": <var>g</var>, "blue": <var>b</var>,
+ * "opacity": <var>op</var>}</code>
+ * as supported by e.g. JSON.
+ *
+ * @return {string}
+ */
+ toJSON: function () {
+ return '{'
+ + '"red": ' + this.red
+ + ', "green": ' + this.green
+ + ', "blue": '+ this.blue
+ + ', "opacity": ' + this.opacity
+ + '}';
+ }
+});
+
+/**
+ * Revives a <code>Color</code> instance from its JavaScript Object Notation.
+ *
+ * Pass as second argument to {@link JSON#parse()} or call in another reviver:
+ * <pre><code> var Color = jsx.dom.css.Color;
+ * var myColor = JSON.parse(new Color("#f00"), Color.reviver);</code></pre>
+ *
+ * @see jsx.dom.css.Color#fromJSON
+ * @return {number|jsx.dom.css.Color}
+ */
+jsx.dom.css.Color.reviver = function (property, value) {
+ return (typeof value == "object")
+ ? new this(value.red, value.green, value.blue, value.opacity)
+ : value;
+};
+
+/**
+ * Creates a <code>Color</code> instance from JavaScript Object Notation.
+ *
+ * @param {String} sJSON
+ * @return {jsx.dom.css.Color|null}
+ * The <code>Color</code> if successful, <code>null</code> otherwise.
+ */
+jsx.dom.css.Color.fromJSON = function (sJSON) {
+ if (jsx.isNativeMethod(jsx.tryThis("JSON"), "parse"))
+ {
+ return JSON.parse(sJSON, this.reviver);
+ }
+
+ var
+ color = null,
+ error = null;
+
+ jsx.tryThis(
+ function () { color = eval("(" + sJSON + ")"); },
+ function (e) { error = e; }
+ );
+
+ if (!color || error && error.name == "SyntaxError")
+ {
+ return null;
+ }
+
+ return new this(color.red, color.green, color.blue, color.opacity);
+};
+
+/**
+ * Returns the color as a string
+ * <code>rgba(<var>red</var>,<var>green</var>,<var>blue</var>, <var>opacity</var>)</code>
+ * representation supported by CSS.
+ *
+ * @function
+ * @return {string}
+ */
+jsx.dom.css.Color.prototype.toString =
+jsx.dom.css.Color.prototype.toRGBAString = function () {
+ return ('rgba(' + this.red + ',' + this.green + ',' + this.blue
+ + ',' + this.opacity + ')');
+};
+
+/**
+ * Creates a HSV color value (not to be confused with
+ * {@link jsx.dom.css#HSLColor}).
+ *
+ * If any of the coordinates is not provided, it is assumed to be
+ * 0 (zero).
+ *
+ * @param {int} iHue
+ * @param {float} fSaturation
+ * @param {float} fValue
+ * @constructor
+ * @property hue : int
+ * Hue value
+ * @property saturation : float
+ * Saturation value
+ * @property value : float
+ * Value component
+ * @property opacity : float
+ * Opacity value
+ */
+jsx.dom.css.HSVColor = function (iHue, fSaturation, fValue, fOpacity) {
+ this.setHue(iHue);
+ this.setSaturation(fSaturation);
+ this.setValue(fValue);
+ this.setOpacity(fOpacity);
+};
+
+jsx.dom.css.HSVColor.extend(null, {
+ /**
+ * @memberOf jsx.dom.css.HSVColor.prototype
+ * @param {int} value
+ */
+ setHue: function (value) {
+ this.hue = value || 0;
+ },
+
+ /**
+ * @param {float} value
+ */
+ setSaturation: function (value) {
+ this.saturation = value || 0;
+ },
+
+ /**
+ * @param {float} value
+ */
+ setValue: function (value) {
+ this.value = value || 0;
+ },
+
+ setOpacity: (function () {
+ var _setOpacity = jsx.dom.css.Color.prototype.setOpacity;
+
+ return function (value) {
+ return _setOpacity.call(this, value);
+ };
+ }()),
+
+ /**
+ * @return {number}
+ */
+ getValue: function () {
+ return this.value;
+ },
+
+ /**
+ * Returns the RGB color for the HSV color
+ */
+ toRGB: (function () {
+ var _Color = jsx.dom.css.Color;
+
+ /**
+ * @return {jsx.dom.css.Color}
+ */
+ return function () {
+ /* Cf. http://en.wikipedia.org/wiki/HSV_color_space#Transformation_between_HSV_and_RGB */
+ var
+ v = this.value,
+ rgbMax = _Color.MAX_VALUE;
+
+ if (this.saturation == 0.0)
+ {
+ return new _Color(v * rgbMax, v * rgbMax, v * rgbMax);
+ }
+
+ var
+ h_i = Math.floor(this.hue / 60) % 6,
+ f = (this.hue / 60) - h_i,
+ p = v * (1 - this.saturation),
+ q = v * (1 - f * this.saturation),
+ t = v * (1 - (1 - f) * this.saturation),
+ red, green, blue;
+
+ switch (h_i)
+ {
+ case 0:
+ red = v; green = t; blue = p;
+ break;
+
+ case 1:
+ red = q; green = v; blue = p;
+ break;
+
+ case 2:
+ red = p; green = v; blue = t;
+ break;
+
+ case 3:
+ red = p; green = q; blue = v;
+ break;
+
+ case 4:
+ red = t; green = p; blue = v;
+ break;
+
+ case 5:
+ red = v; green = p; blue = q;
+ break;
+
+ default:
+ return null;
+ }
+
+ return new _Color(red * rgbMax, green * rgbMax, blue * rgbMax, this.opacity);
+ };
+ }())
+});
+
+/**
+ * Creates a HSL color value (not to be confused with
+ * {@link jsx.dom.css#HSVColor}).
+ *
+ * If any of the coordinates is not provided, it is assumed to be
+ * 0 (zero).
+ *
+ * @param {int} iHue
+ * Hue in degrees
+ * @param {float} fSaturation
+ * Saturation per cent
+ * @param {float} fLightness
+ * Lightness per cent
+ * @param {float} fOpacity
+ * Opacity between 0 (0%) and 1 (100%) inclusive
+ * @constructor
+ * @property hue : int
+ * Hue value
+ * @property saturation : float
+ * Saturation value
+ * @property lightness : float
+ * Lightness value
+ * @property opacity : float
+ * Opacity value
+ */
+jsx.dom.css.HSLColor = function (iHue, fSaturation, fLightness, fOpacity) {
+ this.setHue(iHue);
+ this.setSaturation(fSaturation);
+ this.setLightness(fLightness);
+ this.setOpacity(fOpacity);
+};
+
+/**
+ * Revives a <code>Color</code> instance from its JavaScript Object Notation.
+ *
+ * Pass as second argument to {@link JSON#parse()} or call in another reviver:
+ * <pre><code> var Color = jsx.dom.css.Color;
+ * var myColor = JSON.parse(new Color("#f00"), Color.reviver);</code></pre>
+ *
+ * @see jsx.dom.css.Color#fromJSON
+ * @return {number|jsx.dom.css.Color}
+ */
+jsx.dom.css.HSLColor.reviver = function (property, value) {
+ return (typeof value == "object")
+ ? new this(value.hue, value.saturation, value.lightness, value.opacity)
+ : value;
+};
+
+/**
+ * Creates a <code>HSLColor</code> instance from JavaScript Object Notation.
+ *
+ * @param {String} sJSON
+ * @return {jsx.dom.css.HSLColor|null}
+ * The <code>HSLColor</code> if successful,
+ * <code>null</code> otherwise.
+ * @see JSON#parse(String, Function)
+ */
+jsx.dom.css.HSLColor.fromJSON = function (sJSON) {
+ if (jsx.isNativeMethod(jsx.tryThis("JSON"), "parse"))
+ {
+ return JSON.parse(sJSON, this.reviver);
+ }
+
+ var
+ color = null,
+ error = null;
+
+ jsx.tryThis(
+ function () { color = eval("(" + sJSON + ")"); },
+ function (e) { error = e; }
+ );
+
+ if (!color || error && error.name == "SyntaxError")
+ {
+ return null;
+ }
+
+ return new this(color.hue, color.saturation, color.lightness, color.opacity);
+};
+
+
+jsx.dom.css.HSLColor.extend(null, {
+ /**
+ * @memberOf jsx.dom.css.HSLColor.prototype
+ * @param {int} value
+ */
+ setHue: function (value) {
+ this.hue = value || 0;
+ },
+
+ /**
+ * @param {float} value
+ */
+ setSaturation: function (value) {
+ this.saturation = value || 0;
+ },
+
+ /**
+ * @param {float} value
+ */
+ setLightness: function (value) {
+ this.lightness = value || 0;
+ },
+
+ /**
+ * @function
+ */
+ setOpacity: (function () {
+ var _setOpacity = jsx.dom.css.Color.prototype.setOpacity;
+
+ /**
+ * @param {float} value
+ */
+ return function (value) {
+ return _setOpacity.call(this, value);
+ };
+ }()),
+
+ /**
+ * Returns the RGB color for the HSL color
+ *
+ * @function
+ */
+ toRGB: (function () {
+ var _Color = jsx.dom.css.Color;
+
+ /**
+ * @return {jsx.dom.css.Color}
+ */
+ return function () {
+ /* Cf. <http://www5.informatik.tu-muenchen.de/lehre/vorlesungen/graphik/info/csc/COL_26.htm#topic25> */
+ function getRGBValue(n1, n2, hue)
+ {
+ if (hue > 360)
+ {
+ hue = hue - 360;
+ }
+ else if (hue < 0)
+ {
+ hue = hue + 360;
+ }
+
+ var value;
+
+ if (hue < 60)
+ {
+ value = n1 + (n2 - n1) * hue / 60;
+ }
+ else if (hue < 180)
+ {
+ value = n2;
+ }
+ else if (hue < 240)
+ {
+ value = n1 + (n2 - n1) * (240 - hue) / 60;
+ }
+ else
+ {
+ value = n1;
+ }
+
+ return value;
+ }
+
+ var
+ hue = this.hue,
+ saturation = this.saturation / 100,
+ lightness = this.lightness / 100,
+ m2, red, green, blue;
+
+ if (lightness <= 0.5)
+ {
+ m2 = lightness * (1 + saturation);
+ }
+ else
+ {
+ m2 = lightness + saturation - lightness * saturation;
+ }
+
+ var m1 = 2 * lightness - m2;
+
+ if (saturation == 0)
+ {
+ red = green = blue = lightness;
+ }
+ else
+ {
+ red = getRGBValue(m1, m2, hue + 120);
+ green = getRGBValue(m1, m2, hue);
+ blue = getRGBValue(m1, m2, hue - 120);
+ }
+
+ var rgbMax = _Color.MAX_VALUE;
+
+ return new _Color(red * rgbMax, green * rgbMax, blue * rgbMax, this.opacity);
+ };
+ }()),
+
+ toHSLString: function () {
+ return ('hsl(' + this.hue
+ + ', ' + this.saturation + '%'
+ + ', ' + this.lightness + '%)');
+ },
+
+ /**
+ * Returns the JavaScript Object Notation for the instance.
+ *
+ * Returns
+ * <code>{"red": <var>r</var>, "green": <var>g</var>, "blue": <var>b</var>,
+ * "opacity": <var>op</var>}</code>
+ * as supported by e.g. JSON.
+ *
+ * @return {string}
+ */
+ toJSON: function () {
+ return '{'
+ + '"hue": ' + this.hue
+ + ', "saturation": ' + this.saturation
+ + ', "lightness": '+ this.lightness
+ + ', "opacity": ' + this.opacity
+ + '}';
+ }
+});
+
+jsx.dom.css.HSLColor.prototype.toString =
+jsx.dom.css.HSLColor.prototype.toHSLAString = function () {
+ return ('hsla(' + this.hue
+ + ', ' + this.saturation + '%'
+ + ', ' + this.lightness + '%'
+ + ', ' + this.opacity + ')');
+};
+
+/**
+ * Changes the current document into a monochrome version of itself.
+ *
+ * @function
+ */
+jsx.dom.css.makeMono = (function () {
+ var _Color = new jsx.dom.css.Color();
+
+ return function () {
+ var
+ ruleList = new jsx.dom.css.RuleList(),
+ iter = ruleList.iterator(),
+ rule,
+ colorProperties = [
+ 'backgroundColor', 'borderColor', 'borderTopColor',
+ 'borderRightColor', 'borderBottomColor', 'borderLeftColor',
+ 'outlineColor', 'color'
+ ],
+ j, propertyValue;
+
+ while ((rule = iter.next()))
+ {
+ for (j = colorProperties.length; j--;)
+ {
+ propertyValue = rule[colorProperties[j]];
+ if (propertyValue)
+ {
+ rule[colorProperties[j]] = _Color.setMono(propertyValue).toString();
+ }
+ }
+ }
+
+ for (var elems = dhtml.getElemByTagName('*'), i = elems && elems.length; i--;)
+ {
+ var elem = elems[i];
+ for (j = colorProperties.length; j--;)
+ {
+ if ((propertyValue = elem.style[colorProperties[j]]))
+ {
+ elem.style[colorProperties[j]] = _Color.setMono(propertyValue).toString();
+ }
+ }
+ }
+ };
+}());
\ No newline at end of file
/live/dom/css/color.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/events.js
===================================================================
--- live/dom/events.js (nonexistent)
+++ live/dom/events.js (revision 509)
@@ -0,0 +1,496 @@
+/**
+ * <title>PointedEars' DOM Library: Events</title>
+ * @version $Id$
+ * @requires dom.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2004-2012 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ jsx.dom = {};
+}
+
+/**
+ * Adds an event-handling function (event listener) for a
+ * DOM object as event target. The following methods are
+ * used (in order of preference):
+ *
+ * <ul>
+ * <li>addEventListener(...) method (W3C-DOM Level 2 Events)</li>
+ * <li>Assignment to event-handling property (MSIE 4+ and others)</li>
+ * </ul>
+ *
+ * The attachEvent(...) method (proprietary to MSIE 5+) is not
+ * used anymore because of the arbitrary execution order of
+ * event listeners attached with it and because of `this' in
+ * the event listener not referring to the event target then.
+ *
+ * @author
+ * (C) 2004-2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @partof
+ * <a href="http://pointedears.de/scripts/dhtml.js">dhtml.js</a>
+ * @param {Object} oNode
+ * Reference to the DOM object.
+ * @param {string} sEvent
+ * Required string to be used as event identifier.
+ * If the addEventListener(...) method is not available,
+ * `on' is used as its prefix to reference the respective
+ * proprietary event-handling property.
+ * @param {Function} fListener
+ * Reference to the Function object that provides
+ * event-handling code. Use <code>null</code> to
+ * detach the event listener if, and only if, the
+ * proprietary event handler property is available.
+ * @return {Object}
+ * A reference to the added listener on success,
+ * <code>null</code> otherwise.
+ * Since addEventListener(...) returns no value and throws
+ * no exceptions (what a bad design!), it is considered to be
+ * successful always, while the new value of the proprietary
+ * event-handling property must match the assigned value for
+ * the method to be successful.
+ * @see <a href="http://www.quirksmode.org/blog/archives/2005/08/addevent_consid.html">QuirksBlog: addEvent() considered harmful (2005-08 CE)</a>
+ * @see <a href="dom2-events#Events-EventTarget-addEventListener">W3C DOM Level 2 Events: EventTarget::addEventListener</a>
+ * @see <a href="msdn#workshop/author/dhtml/reference/methods/attachevent.asp">MSDN Library: attachEvent()</a>
+ */
+jsx.dom.addEventListener = function(oNode, sEvent, fListener) {
+ var
+ jsx_object = jsx.object,
+ result = null,
+ sHandler = "on" + sEvent;
+
+ if (oNode && sEvent && jsx_object.isNativeMethod(fListener))
+ {
+ if (jsx_object.isMethod(oNode, "addEventListener"))
+ {
+ jsx.tryThis(
+ function() {
+ oNode.addEventListener(sEvent, fListener, false);
+ result = fListener;
+ },
+ function() {
+ result = null;
+ });
+ }
+ else
+ {
+ /*
+ * NOTE:
+ * No more bogus feature tests here; MSHTML yields `null' for unset
+ * listeners, Gecko yields `undefined'.
+ *
+ * We also don't attempt to use MSHTML's buggy attachEvent() anymore;
+ * thanks to Peter-Paul Koch for insight:
+ * http://www.quirksmode.org/blog/archives/2005/08/addevent_consid.html
+ */
+
+ var oldListener = oNode[sHandler];
+
+ if (!oldListener || typeof oldListener._listeners == "undefined")
+ {
+ var newListener = function(e) {
+ if (!e)
+ {
+ e = (typeof window != "undefined" && window
+ && typeof window.event != "undefined"
+ && window.event);
+ }
+
+ var
+ listeners = arguments.callee._listeners,
+ fpCall = Function.prototype.call;
+
+ for (var i = 0, len = listeners.length; i < len; i++)
+ {
+ /* May be undefined because _replaceEventListener() was applied */
+ if (jsx_object.isMethod(listeners[i]))
+ {
+ /* Host object's methods need not implement call() */
+ fpCall.call(listeners[i], this, e);
+ }
+ }
+ };
+
+ newListener._listeners = [];
+
+ if (oldListener)
+ {
+ /* Avoid dependencies, so no Array.prototype.push() call */
+ listeners = newListener._listeners;
+ listeners[listeners.length] = oldListener;
+ }
+
+ oldListener = newListener;
+ }
+
+ listeners = oldListener._listeners;
+ listeners[listeners.length] = fListener;
+
+ /* TODO: Why this way? */
+ oNode[sHandler] = oldListener;
+
+ result = (oNode[sHandler] == oldListener) && oldListener || null;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Adds a capturing event-handling function (event listener) for
+ * a DOM object as event target. Capturing means that the event
+ * target receives the event before all other targets, before
+ * event bubbling. The following methods are used (in order of
+ * preference):
+ *
+ * <ul>
+ * <li>addEventListener(...) method (W3C DOM Level 2 Events)</li>
+ * <li>TODO: captureEvent(...) method (NS 4)</li>
+ * </ul>
+ *
+ * @author
+ * (C) 2007-2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dhtml.js
+ * @param {Node} oNode
+ * Reference to the DOM object.
+ * @param {string} sEvent
+ * Required string to be used as event identifier.
+ * If the addEventListener(...) method is not available,
+ * `on' is used as its prefix to reference the respective
+ * proprietary event-handling property.
+ * @param {Function} fListener
+ * Reference to the Function object that provides
+ * event-handling code. Use <code>null</code> to
+ * remove the event handler if, and only if, the
+ * proprietary event-handling property is available.
+ * @return {boolean}
+ * <code>true</code> on success, <code>false</code> otherwise.
+ * @see <a href="dom2-events#Events-EventTarget-addEventListener">W3C DOM Level 2 Events: EventTarget::addEventListener()</a>
+ */
+jsx.dom.addEventListenerCapture = function(oNode, sEvent, fListener) {
+ if (oNode && sEvent && jsx.object.isMethod(fListener))
+ {
+ oNode.addEventListener(sEvent, fListener, true);
+ return true;
+ }
+
+ return false;
+};
+
+/**
+ * Replaces the event-handling function (event listener) for a
+ * DOM object as event target. The following methods are
+ * used (in order of preference):
+ *
+ * <ul>
+ * <li>removeEventListener() and addEventListener(...) methods
+ * (W3C-DOM Level 2)</li>
+ * <li>Assignment to event-handling property (MSIE 4+ and others)</li>
+ * </ul>
+ *
+ * Note that this still relies on the existence of the proprietary
+ * event-handling property that yields a reference to the (first added)
+ * event listener for the respective event.
+ *
+ * @author
+ * (C) 2007-2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/dhtml.js
+ * @param {Node} oNode
+ * Reference to the DOM object.
+ * @param {string} sEvent
+ * Required string to be used as event identifier.
+ * `on' is used as its prefix to reference the respective
+ * proprietary event-handling property.
+ * @param {Function} fListener
+ * Reference to the Function object that provides
+ * event-handling code. Use <code>null</code> to
+ * remove the event handler if, and only if, the
+ * proprietary event-handling property is available.
+ * @param {boolean} bUseCapture (optional)
+ * Optional. If <code>true</code>, the argument indicates that
+ * the user wishes to initiate capture. Corresponds to the
+ * third parameter of the addEventListener(...) method, is
+ * ignored if that method is not supported by the DOM (object).
+ * @return {boolean}
+ * <code>true</code> on success, <code>false</code> otherwise.
+ * Since addEventListener(...) returns no value and throws
+ * no exceptions, it is considered to be
+ * successful always, while the new value of the proprietary
+ * event-handling property must match the assigned value for
+ * the method to be successful.
+ * @see <a href="dom2-events#Events-EventTarget-removeEventListener">W3C DOM Level 2 Events: EventTarget::removeEventListener()</a>
+ * @see <a href="dom2-events#Events-EventTarget-addEventListener">W3C DOM Level 2 Events: EventTarget::addEventListener()</a>
+ */
+jsx.dom.replaceEventListener = function(oNode, sEvent, fListener, bUseCapture) {
+ var
+ jsx_object = jsx.object,
+ result = false,
+ sHandler = "on" + sEvent;
+
+ if (oNode && sEvent && jsx_object.isMethod(fListener))
+ {
+ if (jsx_object.areMethods(oNode, ["removeEventListener", "addEventListener"]))
+ {
+ if (jsx_object.isMethod(oNode[sHandler]))
+ {
+ var fOldListener = oNode[sHandler];
+ oNode.removeEventListener(sEvent, fOldListener, !!bUseCapture);
+ }
+
+ oNode.addEventListener(sEvent, fListener, !!bUseCapture);
+ result = true;
+ }
+ else
+ {
+ oNode[sHandler] = fListener;
+ result = (oNode[sHandler] == fListener);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Removes an event-handling function (event listener) for a
+ * DOM object as event target.
+ * <ul>
+ * <li>removeEventListener() and addEventListener(...) methods
+ * (W3C-DOM Level 2)</li>
+ * <li>Assignment to event-handling property (MSIE 4+ and others)</li>
+ * </ul>
+ *
+ * Note that this still relies on the existence of the proprietary
+ * event-handling property that yields a reference to the (first added)
+ * event listener for the respective event.
+ *
+ * @author
+ * (C) 2010, 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @param {Node} oNode
+ * Reference to the DOM object.
+ * @param {string} sEvent
+ * Required string to be used as event identifier.
+ * `on' is used as its prefix to reference the respective
+ * proprietary event-handling property.
+ * @param {Function} fListener
+ * Reference to the Function object that provides
+ * event-handling code. Is ignored to (re)set the
+ * proprietary event-handling property if available.
+ * @param {boolean} bUseCapture (optional)
+ * Optional. If <code>true</code>, the argument indicates that
+ * the user wished to initiate capture. Corresponds to the
+ * third parameter of the removeEventListener(...) method, is
+ * ignored if that method is not supported by the DOM (object).
+ * @return {boolean}
+ * <code>true</code> on success, <code>false</code> otherwise.
+ * Since removeEventListener(...) returns no value and throws
+ * no exceptions (what a bad design!), it is considered to be
+ * successful always, while attachEvent(...) returns success
+ * or failure, and the new value of the proprietary
+ * event-handling property must be <code>null</code> for
+ * the method to be successful.
+ * @see <a href="dom2-events#Events-EventTarget-removeEventListener">W3C DOM Level 2 Events: EventTarget::removeEventListener()</a>
+ * @see <a href="msdn#workshop/author/dhtml/reference/methods/detachevent.asp">MSDN Library: detachEvent()</a>
+ */
+jsx.dom.removeEventListener = function(oNode, sEvent, fListener, bUseCapture) {
+ var
+ result = false,
+ jsx_object = jsx.object,
+ sHandler = "on" + sEvent;
+
+ if (oNode && sEvent)
+ {
+ if (jsx_object.isMethod(fListener))
+ {
+ if (jsx_object.isMethod(oNode, "removeEventListener"))
+ {
+ oNode.removeEventListener(sEvent, fListener, bUseCapture);
+ return true;
+ }
+ }
+
+ if (jsx_object.isMethod(oNode, sHandler))
+ {
+ var
+ handler = oNode[sHandler],
+ listeners = handler._listeners;
+
+ if (listeners)
+ {
+ for (var i = listeners.length; i--;)
+ {
+ if (listeners[i] == fListener)
+ {
+ delete listeners[i];
+ result = (typeof listeners[i] == "undefined");
+ }
+ }
+ }
+ else
+ {
+ handler = oNode[sHandler] = null;
+ result = (handler == null);
+ }
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Returns a reference to a <code>Function</code> that can be used as event listener.
+ * Differences between DOM implementations are smoothed out as much as
+ * possible (e.g., the first argument of that function will be a reference
+ * to the <code>Event</code> instance regardless if the DOM implementation passes it,
+ * and you can use the <code>target</code> property even if
+ * the DOM implementation supports <code>srcElement</code> instead.)
+ *
+ * @param {Callable} f
+ * Reference to the object that contains the actual listener code
+ * @return {Function}
+ * A reference to a <code>Function</code> that can be used as event listener.
+ */
+jsx.dom.createEventListener = function(f) {
+ var jsx_object = jsx.object;
+
+ function listener(e)
+ {
+ if (typeof e == "undefined"
+ && typeof window != "undefined"
+ && typeof window.event != "undefined"
+ && window.event)
+ {
+ e = window.event;
+ }
+
+ /*
+ * NOTE: Should not augment host objects, and cannot inherit from Events,
+ * so values need to be copied
+ */
+ var e2 = {originalEvent: e};
+ var properties = ["type", "charCode", "keyCode", "which", "keyIdentifier",
+ "clientX", "clientY", "offsetX", "offsetY",
+ "shiftKey", "ctrlKey", "altKey", "metaKey"];
+ for (var i = properties.length; i--;)
+ {
+ var property = properties[i];
+ e2[property] = e[property];
+ }
+
+ /* FIXME: jsx.object.extend() does not work well with host objects */
+ e2.getProperty = function(p) {
+ return e[p];
+ };
+
+ e2.target = (typeof e.target != "undefined")
+ ? e.target
+ : (typeof e.srcElement != "undefined")
+ ? e.srcElement
+ : null,
+
+ e2.stopPropagation = (function(e) {
+ if (jsx_object.isMethod(e, "stopPropagation"))
+ {
+ return function() {
+ e.stopPropagation();
+ };
+ }
+
+ if (typeof e.cancelBubble != "undefined")
+ {
+ return function() {
+ e.cancelBubble = true;
+ };
+ }
+ })(e);
+
+ e2.preventDefault = (function(e) {
+ if (jsx_object.isMethod(e, "preventDefault"))
+ {
+ return function() {
+ return e.preventDefault();
+ };
+ }
+
+ return function() {
+ e.returnValue = false;
+ };
+ })(e);
+
+ e2.initEvent = (function() {
+ if (jsx_object.isMethod(e, "initEvent"))
+ {
+ return function(eventTypeArg, canBubbleArg, cancelableArg) {
+ return e.initEvent(eventTypeArg, canBubbleArg, cancelableArg);
+ };
+ }
+
+ return function() {};
+ })();
+
+ return f.call(this, e2);
+ }
+
+ /* Strict W3C DOM Level 2 Events compatibility */
+ listener.handleEvent = function(e) {
+ return this(e);
+ };
+
+ return listener;
+};
+
+/**
+ * Prevents the default action for an event.
+ *
+ * @param {Event} e
+ * @return {boolean}
+ * <code>true</code> if <var>e</var> is not a valid value,
+ * <code>false</code> otherwise. The return value of this
+ * method can be used to return a value to the event-handler.
+ */
+jsx.dom.preventDefault = function(e) {
+ if (!e)
+ {
+ return true;
+ }
+
+ if (jsx.object.isMethod(e, "preventDefault"))
+ {
+ e.preventDefault();
+ }
+
+ if (typeof e.returnValue != "undefined")
+ {
+ e.returnValue = false;
+ }
+
+ return false;
+};
\ No newline at end of file
/live/dom/events.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/flash.js
===================================================================
--- live/dom/flash.js (nonexistent)
+++ live/dom/flash.js (revision 509)
@@ -0,0 +1,76 @@
+/**
+ * <title>Flash Support Library</title>
+ * @file flash.js
+ * @requires dhtml.js
+ * @author
+ * (C) 2010, 2011 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+jsx.dom.flash = {
+ /** @version */
+ version: "0.1.0.2010070915",
+ copyright: "Copyright \xA9 2010",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+
+ /**
+ * Fixes Shockwave Flash movies embedded with the <code>object</code>
+ * element (having type="application/x-shockwave-flash" specified)
+ * so that they work in ActiveX/COM-supporting browsers (most notably
+ * IE/MSHTML).
+ *
+ * @return boolean
+ * <code>true</code> if successful, <code>false</code> otherwise.
+ */
+ fix: (function () {
+ var
+ jsx_object = jsx.object,
+ jsx_global = jsx.global,
+ jsx_dom = jsx.dom;
+
+ return function () {
+ if (!jsx_object.isMethod(jsx_global, "ActiveXObject"))
+ {
+ return false;
+ }
+
+ var objs = jsx_dom.getElemByTagName("object");
+ if (objs && objs.length)
+ {
+ for (var i = objs.length; i--;)
+ {
+ var o = objs[i];
+ if (o.type == "application/x-shockwave-flash")
+ {
+ if (jsx_object.isMethod(o, "removeAttribute"))
+ {
+ o.removeAttribute("data");
+ }
+
+ o.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540001";
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+ };
+ }())
+};
\ No newline at end of file
/live/dom/flash.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/window.js
===================================================================
--- live/dom/window.js (nonexistent)
+++ live/dom/window.js (revision 509)
@@ -0,0 +1,582 @@
+/**
+ * <title>Window Function Library</title>
+ * @file window.js
+ * @author
+ * (C) 1999‒2013 Thomas Lahn &lt;window.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+/*
+ * Refer window.htm file for general documentation.
+ *
+ * This document contains JavaScriptDoc. Refer
+ * http://pointedears.de/scripts/JSDoc/
+ * for details.
+ */
+
+if (typeof jsx == "undefined")
+{
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ jsx.dom = {};
+}
+
+jsx.dom.window = {
+ version: "1.29.$Revision$",
+ copyright: "Copyright \xA9 1999-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://pointedears.de/scripts/",
+
+ screenInfo: {
+ getDim: function () {
+ return {
+ width: screen.width,
+ height: screen.height
+ };
+ },
+
+ getAvailDim: function () {
+ return {
+ width: screen.availWidth,
+ height: screen.availHeight
+ };
+ },
+
+ getInnerDim: function () {
+ return {
+ width: window.innerWidth,
+ height: window.innerHeight
+ };
+ },
+
+ getColorDepth: function () {
+ return (screen.colorDepth || screen.pixelDepth);
+ }
+ }
+};
+
+var windowVersion = jsx.dom.window.version;
+var windowCopyright = jsx.dom.window.copyright;
+var windowAuthor = jsx.dom.window.author;
+var windowEmail = jsx.dom.window.email;
+var windowPath = jsx.dom.window.path;
+// var windowDocURL = windowPath + "window.htm";
+
+/* Script exceptions */
+
+/**
+ * @param Msg : string
+ * @type boolean
+ * @return false
+ */
+function windowException(Msg)
+{
+ alert(
+ "window.js "
+ + windowVersion
+ + "\n"
+ + windowCopyright
+ + " "
+ + windowAuthor
+ + " <"
+ + windowEmail
+ + ">\n\n"
+ + Msg);
+ return false;
+}
+
+/**
+ * @param sFunctionName : string
+ * @param iArg : number
+ * @return boolean
+ */
+function EInvalidArgNum(sFunctionName, iArg)
+{
+ // if (arguments.length < 2) iArg = "?";
+ return windowException(
+ sFunctionName
+ + ": The user script did not pass the required number of arguments ("
+ + iArg
+ + ").\nRefer documentation in script file for correct function call.");
+}
+
+/* Script features */
+
+/**
+ * @param sCaption : string
+ * @type boolean
+ * @return true
+ */
+function setStatus (sCaption)
+{
+ window.status = String(sCaption);
+ return true;
+}
+
+/**
+ * @type boolean
+ * @return true
+ */
+function resetStatus ()
+{
+ window.status = window.defaultStatus;
+ return true;
+}
+
+var sLinkOutMsg_de =
+ "Dieser Link ist offline nicht verfügbar.\n\n"
+ + "Wenn Sie mit dem Internet verbunden sind, steht Ihnen die Seite online"
+ + " zur Verfügung.\n\n"
+ + "Möchten Sie jetzt eine Verbindung zu dieser Seite herstellen?";
+var sLinkOutMsg_us =
+ "This link is not available offline.\n\n"
+ + "If you are connected to the Internet, the website is available online.\n\n"
+ + "Do you wish to connect to this website now?';";
+var sLinkOutMsg = sLinkOutMsg_de;
+
+/**
+ * @param sURL : string
+ * @param sLink : string
+ * @param bShowURL : optional boolean
+ * @param aTarget : optional string|number
+ * @param iWidth : optional number
+ * @param iHeight : optional number
+ * @param sOptions : optional string
+ */
+function linkOut(sURL, sLink, bShowURL, aTarget, iWidth, iHeight, sOptions)
+{
+ if (arguments.length < 1)
+ {
+ EInvalidArgNum("linkOut", 1);
+ return false;
+ }
+
+ var arg = sLinkOutMsg;
+ /*
+ * version 1.05.2000.3 update, formerly bShowURL as 2nd argument;
+ * fixed problem with websites created earlier
+ */
+ if (arguments.length < 3)
+ {
+ bShowURL = true;
+ }
+
+ var oldArg;
+ if ((sURL != "" && bShowURL == true)
+ || (arguments.length >= 2 && sLink != ""))
+ {
+ oldArg = arg;
+ arg = "\n\n" + oldArg;
+ }
+
+ if (sURL != "" && bShowURL)
+ {
+ oldArg = arg;
+ arg = sURL + oldArg;
+ }
+
+ if (arguments.length >= 2 && sLink != "")
+ {
+ if (sURL != "" && bShowURL)
+ {
+ oldArg = arg;
+ arg = sLink + "\n" + oldArg;
+ }
+ else
+ {
+ oldArg = arg;
+ arg = sLink + oldArg;
+ }
+ }
+
+ if (window.confirm(arg))
+ {
+ var oTarget = document;
+ if (arguments.length >= 4
+ && aTarget != ""
+ && aTarget.toLowerCase() != "_self")
+ {
+ /*
+ * version 1.05.2000.3 update, formerly neither empty strings
+ * nor "_self" supported
+ */
+ if (isNaN(aTarget))
+ {
+ if (aTarget.toLowerCase() == "_new"
+ || aTarget.toLowerCase() == "_blank")
+ {
+ popUp(sURL, iWidth, iHeight, sOptions);
+ return false;
+ }
+ oTarget = parent.frames[aTarget].document;
+ /* and below: v1.09.2000.3 bugfix */
+ }
+ else
+ {
+ oTarget = parent.frames[aTarget].document;
+ }
+ }
+ oTarget.location = "";
+ oTarget.location.href = sURL;
+ }
+
+ /* version 1.15.2000.11 update */
+ return false;
+}
+
+/**
+ * @param sURL : string
+ * @param iWidth : number
+ * @param iHeight : number
+ * @param sOptions : string
+ * @type boolean
+ * @return false
+ */
+function popUp(sURL, iWidth, iHeight, sOptions)
+{
+ var sFeatures = "height=" + iHeight + ",width=" + iWidth;
+ if (arguments.length > 3)
+ {
+ sFeatures += "," + sOptions;
+ }
+ var wndChild = window.open(sURL, null, sFeatures);
+ return false;
+}
+
+/*
+ * OpenChildWin(...) call redirected to popUp(...) for compatibility to
+ * previous versions
+ */
+var OpenChildWin = popUp;
+
+/**
+ * @param sURL : string
+ * @param targetFrame : number|string
+ * @return Window
+ */
+function LoadFrame(sURL, targetFrame)
+{
+ if (arguments.length < 2)
+ {
+ /* Raise exception if required arguments are missing */
+ return EInvalidArgNum("LoadFrame", 2);
+ }
+
+ if (parent.frames[targetFrame])
+ {
+ parent.frames[targetFrame].location.href = sURL;
+ return sURL;
+ }
+
+ return targetFrame;
+}
+var sEnlargeImgTitle_en = "Click to close window";
+var sEnlargeImgTitle_de = "Klicken, um Fenster zu schliessen";
+var sEnlargeImgTitle = sEnlargeImgTitle_en;
+
+/**
+ * Opens a dependent browser child window containing an (enlarged)
+ * image. A primary mouse button click on the image or the window
+ * closes the window.
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ * @author
+ * (c) 2000-2005 Thomas Lahn &lt;PointedEars@gmx.de&gt;
+ * Protected under the terms of the GNU General Public License.
+ * See http://www.fsf.org/copyleft/gpl.html for details.
+ * @param sImageURL : string
+ * Required. URL of the (enlarged) image.
+ * @param sCaption : optional string
+ * Optional. Caption of the browser child window.
+ * If not provided, sImageURL will be used as caption.
+ * @param iWidth : optional number
+ * Optional. Width of the browser child window in pixels.
+ * If not provided or 0, the window will be resized to fit
+ * image width.
+ * @param iHeight : optional number
+ * Height of the browser child window in pixels.
+ * If not provided or 0, the window will be resized to fit
+ * image height.
+ * @param bCenter : optional boolean
+ * Optional. If <code>true</code>, the window will be centered
+ * on the desktop. Note: Use with caution! Not all desktops
+ * return the correct/viable position for the centered window.
+ * @return type boolean
+ * Always <code>false</code> which allows for
+ * <a href="..." ... onclick="return enlargeImg(...);">
+ */
+function enlargeImg(sImageURL, sCaption, iWidth, iHeight, bCenter)
+{
+ var ident = enlargeImg;
+ var argnum = ident.arguments.length;
+ if (sImageURL.charAt(0) != "/")
+ {
+ /*
+ * Version 1.17.2002.2 bugfix:
+ * Calculates absolute image file paths of relative ones
+ * Fixes bug with Mozilla 0.9.7 and above (includes Netscape 6.1+)
+ * that generated pages have no path except about:blank which causes
+ * relative paths for their resources to fail
+ */
+ /* Windows local path */
+ var iPathEnd = window.location.pathname.lastIndexOf('\\');
+ if (iPathEnd < 0)
+ {
+ iPathEnd = window.location.pathname.lastIndexOf('/');
+ }
+
+ /* URL */
+ if (iPathEnd > -1)
+ {
+ /* Extend filename to full path */
+ sImageURL = window.location.pathname.substring(0, iPathEnd)
+ + "/" + sImageURL;
+ }
+ }
+
+ if (argnum < 1)
+ {
+ return (EInvalidArgNum("Level 2: enlargeImg", 1));
+ }
+
+ /* preset also window position and size in the case the temporary script below fails */
+ var sOptions =
+ "toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=yes"
+ + ((argnum > 2) && !isNaN(iWidth)) ? (",width=" + iWidth + 12) : ""
+ + ((argnum > 3) && !isNaN(iHeight)) ? (",height=" + iHeight + 32) : ""
+ + ",left="
+ + parseInt(screen.width / 2 - (argnum > 2
+ && !isNaN(iWidth) ? iWidth / 2 : 0))
+ + ",top="
+ + parseInt(screen.height / 2 - (argnum > 3
+ && !isNaN(iHeight) ? iHeight / 2 : 0));
+
+ var w = window.open("", "wndZoom", sOptions);
+ if (w)
+ {
+ var d = w.document;
+ if (d)
+ {
+ d.open("text/html");
+ var s = [
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"',
+ ' "http://www.w3.org/TR/html4/loose.dtd">',
+ '<html>',
+ ' <head>',
+ ' <meta http-equiv="Content-Type" content="text/html;'
+ + ' charset=UTF-8">',
+
+ ' <meta name="generator" value="JSX:window.js{',
+ + windowVersion + '}:enlargeImg(...) ' + windowCopyright
+ + ' ' + windowAuthor + ' &lt;' + windowEmail + '&gt;">',
+
+ ' <title>' + ((argnum > 1 && sCaption != "") ? sCaption : sImageURL)
+ + '<\/title>',
+
+ /*
+ * temporary script and updated inline code to fix
+ * BUG_Enlarge:ALWAYS_FIT-TO-IMAGE
+ */
+ ' <script type="text/javascript">',
+ ' var orig = {};\n',
+
+ ' function fitWindowToImage()',
+ ' {',
+ ' var imgWidth = '
+ + (argnum > 2 && iWidth != 0 ? iWidth : "document.images[0].width + 12")
+ + ';',
+ ' var imgHeight = '
+ + (argnum > 3 && iHeight != 0 ? iHeight : "document.images[0].height + 32")
+ + ';\n',
+
+ /* MSHTML */
+ ' if (typeof window.resizeTo == "object")',
+ ' {',
+ ' orig.left = window.screenLeft;',
+ ' orig.top = window.screenTop;',
+ ' orig.width = window.width;',
+ ' orig.height = window.height;',
+ ' window.resizeTo(imgWidth, imgHeight);',
+ ' }',
+ /* Gecko */
+ ' else if (typeof window.sizeToContent == "function")',
+ ' {',
+ ' orig.left = window.screenX;',
+ ' orig.top = window.screenY;',
+ ' orig.width = window.innerWidth;',
+ ' orig.height = window.innerHeight;',
+ ' window.sizeToContent();',
+ ' }',
+ /* NN4 */
+ ' else if (typeof document.layers == "object")',
+ ' {',
+ ' orig.left = window.screenX;',
+ ' orig.top = window.screenY;',
+ ' orig.width = window.innerWidth;',
+ ' orig.height = window.innerHeight;',
+ ' window.innerWidth = document.width;',
+ ' window.innerHeight = document.height;',
+ ' }',
+
+ (argnum < 5 || argnum > 4 && bCenter && window.moveTo)
+ ? (' window.moveTo(\n'
+ + ' screen.width/2 - imgWidth/2,\n'
+ + ' screen.height/2 - imgHeight/2);\n')
+ : '',
+ ' }\n',
+
+ ' function restoreWindowSize()',
+ ' {',
+ ' if (typeof orig.left != "undefined"',
+ ' && typeof orig.top != "undefined"',
+ ' && typeof window.resizeTo != "undefined")',
+ ' window.resizeTo(orig.left, orig.top);\n',
+ ' if (document.all && window.resizeTo)',
+ ' {',
+ ' try',
+ ' {',
+ ' window.screenLeft = orig.left;',
+ ' window.screenTop = orig.top;',
+ ' }',
+ ' catch (e)',
+ ' {}',
+ ' }',
+ ' else if (typeof window.sizeToContent == "function"',
+ ' || typeof document.layers == "object")',
+ ' {',
+ ' window.screenX = orig.left;',
+ ' window.screenY = orig.top;',
+ ' window.innerWidth = orig.width;',
+ ' window.innerHeight = orig.height;',
+ ' }',
+ ' }',
+ ' <\/script>',
+ ' <\/head>\n',
+ ' <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"'
+ + ' style="margin: 0 !important">',
+ ' <a href="javascript:restoreWindowSize();window.close();"',
+ ' title="' + sEnlargeImgTitle + '"',
+ ' onclick="restoreWindowSize(); window.close(); return false;">'
+ + '<img',
+ ' src="' + sImageURL + '" border="0"',
+ ' onload="fitWindowToImage(this);"><\/a>',
+ ' <\/body>',
+ '<\/html>'
+ ].join("\n");
+ d.write(s);
+ d.close();
+ w.focus();
+ }
+ else
+ {
+ w.close();
+ return true;
+ }
+ }
+
+ return false;
+}
+/*
+ * Enlarge(...) call redirects to enlargeImg(...) for
+ * compatibility with previous versions
+ */
+var Enlarge = enlargeImg;
+
+jsx.dom.window.fullscreen = (function () {
+ var _isHostMethod = jsx.object.isHostMethod;
+
+ return {
+ getSupportedPropertyName: function (base, names, test) {
+ for (var i = 0, len = names.length; i < len; ++i)
+ {
+ var name = names[i];
+ if (test.call(null, base, name))
+ {
+ return name;
+ }
+ }
+
+ return null;
+ },
+
+ getCancelMethodName: (function () {
+ var _supportedCancel;
+
+ return function () {
+ if (typeof _supportedCancel == "undefined")
+ {
+ var properties = ["cancelFullScreen", "mozCancelFullScreen",
+ "webkitCancelFullScreen"];
+
+ _supportedCancel = this.getSupportedPropertyName(document, properties, _isHostMethod);
+ }
+
+ return _supportedCancel;
+ };
+ }()),
+
+ getElementPropertyName: (function () {
+ var _supportedElement;
+
+ return function () {
+ if (typeof _supportedElement == "undefined")
+ {
+ var properties = ["fullscreenElement", "mozFullScreenElement",
+ "webkitFullscreenElement"];
+
+ _supportedElement = this.getSupportedPropertyName(document, properties,
+ function (base, name) {
+ return typeof base[name] != "undefined";
+ });
+ }
+
+ return _supportedElement;
+ };
+ }()),
+
+ isSupportedBy: function (elem) {
+ var methods = ["requestFullscreen", "mozRequestFullScreen",
+ "webkitRequestFullscreen"];
+ return this.getSupportedPropertyName(elem, methods, _isHostMethod);
+ },
+
+ isFullscreen: function () {
+ var supportedProperty = this.getElementPropertyName();
+ return supportedProperty && document[supportedProperty] != null;
+ },
+
+ cancel: function () {
+ var supportedCancel = this.getCancelMethodName();
+ if (supportedCancel)
+ {
+ document[supportedCancel]();
+ }
+ },
+
+ requestOn: function (elem) {
+ var requestMethodName;
+
+ if (elem && (requestMethodName = this.isSupportedBy(elem)))
+ {
+ elem[requestMethodName]();
+ }
+ }
+ };
+}());
/live/dom/window.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/dom/storage.js
===================================================================
--- live/dom/storage.js (nonexistent)
+++ live/dom/storage.js (revision 509)
@@ -0,0 +1,209 @@
+/**
+ * <title>PointedEars' DOM Library: Web Storage</title>
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2012, 2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+if (typeof jsx.dom.storage == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom.storage = {};
+}
+
+/**
+ * @param storageName : string (optional) Storage name ("local" and "session" are supported)
+ * @returns
+ * <code>true</code> if any or the specified Storage is supported,
+ * <code>false</code> otherwise.
+ */
+jsx.dom.storage.isSupported = function (storageName) {
+ if (storageName)
+ {
+ return jsx.tryThis(
+ function () {
+ return (typeof window[storageName + "Storage"] != "undefined");
+ },
+ function () {
+ return false;
+ }
+ );
+ }
+
+ var _storage = jsx.dom.storage;
+ return _storage.localStorage.isSupported() || _storage.sessionStorage.isSupported();
+};
+
+/**
+ * Sets an item in a {@link Storage}. Used internally.
+ *
+ * @param storage : Storage
+ * @param key : string
+ * @param value
+ */
+jsx.dom.storage.setItem = function (storage, key, value) {
+ storage.setItem(key, JSON.stringify(value));
+};
+
+/**
+ * Retrieves an item from a {@link Storage}. Used internally.
+ *
+ * @param storage : Storage
+ * @param key : string
+ * @return any item value
+ */
+jsx.dom.storage.getItem = function (storage, key) {
+ var value = storage.getItem(key);
+
+ /*
+ * NOTE: Shortcut evaluation for handling "" only
+ */
+ return value && JSON.parse(value);
+};
+
+if (typeof jsx.dom.storage.localStorage == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom.storage.localStorage = {};
+}
+
+/**
+ * @returns
+ * <code>true</code> if Local Storage is supported,
+ * <code>false</code> otherwise.
+ * @function
+ */
+jsx.dom.storage.localStorage.isSupported = (function () {
+ var _storage = jsx.dom.storage;
+
+ return function () {
+ return _storage.isSupported("local");
+ };
+}());
+
+/**
+ * Sets an item in the Local {@link Storage}
+ *
+ * @function
+ */
+jsx.dom.storage.localStorage.setItem = (function () {
+ var _storage = jsx.dom.storage;
+
+ /**
+ * @param key : string
+ * @param value
+ */
+ return function (key, value) {
+ _storage.setItem(window.localStorage, key, value);
+ };
+}());
+
+/**
+ * Retrieves an item from the Local {@link Storage}
+ *
+ * @function
+ */
+jsx.dom.storage.localStorage.getItem = (function () {
+ var _storage= jsx.dom.storage;
+
+ /**
+ * @param key : string
+ * @return any item value
+ */
+ return function (key) {
+ return _storage.getItem(window.localStorage, key);
+ };
+}());
+
+if (typeof jsx.dom.storage.sessionStorage == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom.storage.sessionStorage = {};
+}
+
+/**
+ * @returns
+ * <code>true</code> if Session {@link Storage} is supported
+ * <code>false</code> otherwise.
+ * @function
+ */
+jsx.dom.storage.sessionStorage.isSupported = (function () {
+ var _storage = jsx.dom.storage;
+
+ return function () {
+ return _storage.isSupported("session");
+ };
+}());
+
+/**
+ * Sets an item in the Session {@link Storage}
+ *
+ * @function
+ */
+jsx.dom.storage.sessionStorage.setItem = (function () {
+ var _storage = jsx.dom.storage;
+
+ /**
+ * @param key : string
+ * @param value
+ */
+ return function (key, value) {
+ _storage.setItem(window.sessionStorage, key, value);
+ };
+}());
+
+/**
+ * Retrieves an item from the Session {@link Storage}
+ *
+ * @function
+ */
+jsx.dom.storage.sessionStorage.getItem = (function () {
+ var _storage= jsx.dom.storage;
+
+ /**
+ * @param key : string
+ * @return any item value
+ */
+ return function (key) {
+ return _storage.getItem(window.sessionStorage, key);
+ };
+}());
\ No newline at end of file
/live/dom/storage.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/ani.bak.js
===================================================================
--- live/dom/ani.bak.js (nonexistent)
+++ live/dom/ani.bak.js (revision 509)
@@ -0,0 +1,364 @@
+/**
+ * @author PointedEars
+ * @depends dhtml.js
+ */
+
+function InitializedObject() {}
+InitializedObject.prototype = {
+ setParameters: function(oParams) {
+ for (var p in oParams)
+ {
+ this[p] = oParams[p];
+ }
+ }
+};
+
+/**
+ * This framework implements animation of objects as a set of one or more
+ * {@link #Timeline}s, starting in parallel when the animation is played.
+ * Each timeline is supposed to animate another target object (although
+ * that is not required).
+ *
+ * @param aTarget
+ * @param aTimelines
+ * @returns {Animation}
+ */
+var Animation = function(aTarget, aTimelines) {
+ this.setTarget(aTarget);
+ this.timelines = aTimelines;
+}.extend(InitializedObject, {
+ setTarget: function(aTarget) {
+ this.target =
+ typeof aTarget == "string"
+ ? dhtml.getElemById(aTarget)
+ : aTarget;
+ },
+
+ play: function() {
+ var
+ types = {
+ NUMBER: 0,
+ LENGTH: 1,
+ PERCENTAGE: 2,
+ URI: 3,
+ COUNTER: 4,
+ COLOR: 5,
+ STRING: 6
+ },
+
+ /*
+ * TODO:
+ * The `correspondsTo' property helps to identify the corresponding
+ * property in order to determine the optimum animation frame length
+ * (see below).
+ */
+ propertyInfo = {
+ left: { type: types.LENGTH, correspondsTo: "top" },
+ top: { type: types.LENGTH, correspondsTo: "left" },
+ right: { type: types.LENGTH, correspondsTo: "bottom" },
+ bottom: { type: types.LENGTH, correspondsTo: "right" },
+ width: { type: types.LENGTH, correspondsTo: "height" },
+ height: { type: types.LENGTH, correspondsTo: "width" },
+ color: { type: types.COLOR },
+ backgroundColor: { type: types.COLOR },
+ "background-color": { type: types.COLOR }
+ };
+
+ function getCurrentStyle(oTarget, oStyle)
+ {
+ for (var p in oStyle)
+ {
+ if (typeof oStyle[p] != "undefined")
+ {
+ var oProperty = oStyle[p];
+
+ oProperty.current =
+ typeof oProperty.from != "undefined"
+ ? oProperty.from
+ : currentStyle(oTarget, p);
+
+ if (typeof oProperty.unit == "undefined")
+ {
+ switch (propertyInfo[p].type)
+ {
+ case types.LENGTH:
+ oProperty.unit = "px";
+ }
+ }
+ }
+ }
+ }
+
+ /* FIXME: Array change workaround */
+ this.timeline = this.timelines[0];
+
+ /*
+ * 1. Determine the current style (position, color etc.) of the
+ * target object
+ */
+ getCurrentStyle(this.target, this.timeline.style);
+
+ var
+ s = this.timeline.style,
+ duration = this.timeline.duration,
+ dt = 10,
+ steps = Math.floor(duration / dt),
+ timeout = [];
+
+ /*
+ * 2. For each set property, calculate the value difference for
+ * each step
+ */
+ // var lengthProperties = new Object();
+ for (var p in s)
+ {
+ /* TODO: Handle unsupported/untyped properties */
+ switch (propertyInfo[p].type)
+ {
+ case types.LENGTH:
+ // lengthProperties[p] = true;
+
+ s[p].current = parseFloat(s[p].current) || 0;
+
+ if (typeof s[p].by != "undefined")
+ {
+ s[p].to = (parseFloat(s[p].from) || 0)
+ + (parseFloat(s[p].by) || 0);
+ }
+
+ s[p].difference =
+ ((parseFloat(s[p].to) || 0) - s[p].current)
+ / steps;
+
+ /* DEBUG */
+ // window.alert([dx, dy, dt]);
+
+ break;
+
+ case types.COLOR:
+ s[p].current = new Color(s[p].current);
+ var diffCol = s[p].difference = s[p].current.diff(new Color(s[p].to));
+
+ for (var i in diffCol)
+ {
+ diffCol[i] /= steps;
+ }
+
+ break;
+
+ default:
+ }
+
+ if (typeof s[p].from != "undefined")
+ {
+ dhtml.setStyleProperty(
+ this.target,
+ p,
+ s[p].from
+ + (typeof s[p].unit != "undefined"
+ ? s[p].unit
+ : ""));
+ }
+ }
+
+ /*
+ * TODO
+ * 2b. For all properties of type `length' that are given in the
+ * unit `px', calculate the optimum number of pixel-wise steps.
+ */
+// if (dx < 1 || dy < 1)
+// {
+// if (dx < dy)
+// {
+// dx = 1;
+// steps = x_new - x;
+// dy = (y_new - y) / steps;
+// }
+// else
+// {
+// dy = 1;
+// steps = y_new - y;
+// dx = (x_new - x) / steps;
+// }
+//
+// dt = duration / steps;
+// }
+
+ /* DEBUG */
+ // window.alert([dx, dy, dt]);
+
+ /*
+ * 3. If there is a property to be set that requires positioning,
+ * and no positioning mode was defined, set "relative"
+ * FIXME: *Iff*, not always!
+ */
+ if (currentStyle(this.target).position == "static")
+ {
+ dhtml.setStyleProperty(this.target, "position", "relative");
+ }
+
+ /*
+ * 4. Set the timeouts required for each property change in the
+ * animation, thereby starting the animation after the last
+ * loop.
+ */
+ for (var t = 0, i = steps; i--;)
+ {
+ for (var p in s)
+ {
+ /* TODO: Handle unsupported/untyped properties */
+ switch (propertyInfo[p].type)
+ {
+ case types.LENGTH:
+ s[p].current += s[p].difference;
+ break;
+
+ case types.COLOR:
+ var curCol = s[p].current;
+ /* TODO: Have a Color.prototype.inc() do the computation */
+ s[p].current = curCol.inc(s[p].difference).toString();
+ }
+ }
+
+ var f = (
+ function(oTarget, oStyle, t)
+ {
+ var s2 = new Object();
+ for (var p in oStyle)
+ {
+ s2[p] = oStyle[p].current;
+ s2[p + "_unit"] = oStyle[p].unit;
+ }
+
+ return (
+ function()
+ {
+ // DEBUG
+ if (typeof console != "undefined")
+ {
+ console.log("t = " + t);
+ }
+
+ for (var p in oStyle)
+ {
+ // DEBUG
+ if (typeof console != "undefined")
+ {
+ console.log("s2['" + p + "'] = " + s2[p]);
+ }
+
+ // TODO: units
+ var unit = s2[p + "_unit"];
+ dhtml.setStyleProperty(
+ oTarget,
+ p,
+ s2[p] + (unit ? unit : ""));
+ }
+
+// oTarget.style.left = x + "px";
+// oTarget.styl
+// e.top = y + "px";
+ }
+ );
+ }
+ )(this.target, s, t += dt);
+
+ timeout[i] = window.setTimeout(f, t);
+
+ f = null;
+ }
+
+ /* DEBUG */
+// window.setTimeout(
+// function() { window.alert(new Date() - dStart); },
+// t + dt);
+ }
+});
+
+/**
+ * A <code>Timeline</code> of an {@link Animation} consists of
+ * {@link Keyframe}s or delays, property changes, and subordered timelines
+ * ("child timelines"). Unless specified otherwise, the time offset of an
+ * item in one timeline depends on the previous item in that timeline:
+ *
+ * <pre>
+ * Animation ---.
+ * Timeline 1: :--Action0------Action1------Action2-----Action3->
+ * Timeline 2: `----------Action0------Action1-------Action2---->
+ * </pre>
+ *
+ * An item can also be a <code>Timeline</code> ("child timeline"), in which
+ * case the time offset of the child timeline depends on the previous action
+ * in the parent timeline, however the time offset of the next action in the
+ * parent is independent of the child. In that case, the child timeline
+ * affects the same target object as its parent unless specified otherwise.
+ *
+ * <pre>
+ * Animation ---.
+ * Timeline 1: :---Action0------+----------Action1a------------->
+ * Timeline 1a: | `---Action1a:0---Action1a:1----->
+ * Timeline 2: `-------Action0------Action1-------Action2------->
+ * </pre>
+ *
+ * There is no explicit limit as to how deep timelines may be nested.
+ * However, for computing the frames of the animation each timeline's
+ * render() method must call the render() method of its child timelines,
+ * if it has any, so that its animation frames can be prepared, and the
+ * timeline played. As a result, nesting depth is limited implicitly
+ * by the available stack space or limits imposed by the ECMAScript
+ * implementation, whichever comes first. Further, the more timelines
+ * are nested, the more operations need be performed at approximately
+ * the same time; this can slow down the entire animation considerably
+ * and lead to considerably higher CPU load.
+ *
+ * @param {Object} oParams
+ * Parameters of this timeline. Supported properties include:
+ * <table>
+ * <th>
+ * </table>
+ */
+function Timeline(oParams)
+{
+ for (var p in oParams)
+ {
+ this[p] = oParams[p];
+ }
+}
+
+Timeline.prototype = {
+ constructor: Timeline,
+
+ toString: function() {
+ return serialize(this, {depth: -1});
+ }
+};
+
+/**
+ * A <code>KeyFrame</code> defines which properties an animated object
+ * should have relative to the {@link Timeline} it is defined for. It is
+ * used as a reference point to compute the frames of the animation between
+ * it and other <code>Keyframe</code>s or {@link Pause}s.
+ *
+ * @param {Object} oParams
+ *
+ */
+function KeyFrame(oParams)
+{
+ for (var p in oParams)
+ {
+ this[p] = oParams[p];
+ }
+}
+
+/**
+ * A <code>Pause</code> is a deliberate temporary stop of animation in a
+ * {@link Timeline}. Whenever a <code>Pause</code> is inserted as an
+ * item of a timeline, no tween will be computed between adjacent
+ * {@link KeyFrame}s.
+ *
+ * @param {Object} oParams
+ */
+function Pause(oParams)
+{
+
+}
\ No newline at end of file
Index: live/dom/xpath.js
===================================================================
--- live/dom/xpath.js (nonexistent)
+++ live/dom/xpath.js (revision 509)
@@ -0,0 +1,512 @@
+"use strict";
+/**
+ * <title>PointedEars' XPath Library</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author (C) 2008‒2012 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+/*
+ * Refer xpath.js.diff for changes to the last version,
+ * and xpath.htm file for a printable documentation.
+ *
+ * This document contains JavaScriptDoc. See
+ * http://pointedears.de/scripts/JSdoc/
+ * for details.
+ */
+
+if (typeof XPathResult == "undefined")
+{
+ var XPathResult = {
+ ANY_TYPE: 0,
+ NUMBER_TYPE: 1,
+ STRING_TYPE: 2,
+ BOOLEAN_TYPE: 3,
+ UNORDERED_NODE_ITERATOR_TYPE: 4,
+ ORDERED_NODE_ITERATOR_TYPE: 5,
+ UNORDERED_NODE_SNAPSHOT_TYPE: 6,
+ ORDERED_NODE_SNAPSHOT_TYPE: 7,
+ ANY_UNORDERED_NODE_TYPE: 8,
+ FIRST_ORDERED_NODE_TYPE: 9
+ };
+}
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.dom.xpath = {
+ version: "0.1.$Revision$ ($Date$)",
+ copyright: "Copyright \xA9 2008-2011",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+
+ /**
+ * Returns the result of evaluating an XPath expression against a context node
+ *
+ * @function
+ * @param expression : String
+ * XPath expression. You may use a namespace prefix starting with "_"
+ * to indicate a default namespace of the context node (that XPath
+ * usually cannot resolve directly). You then need to provide a custom
+ * namespace resolver, like one created with
+ * {@link jsx.dom.xpath#createCustomNSResolver}, to return the namespace
+ * URI for those prefixes. This workaround is necessary because MSXML
+ * XPath for JScript does not require or support a custom namespace
+ * resolver for elements in the default namespace, and those virtual
+ * prefixes must be trimmed from the expression by this method beforehand.
+ * @param contextNode : Node
+ * Context node
+ * @param namespaceResolver : Function
+ * Namespace resolver. If not provided, a default namespace
+ * resolver will be created using {@link jsx.dom.xpath#createDefaultNSResolver}.
+ * Is ignored if MSXML is used, as MSXML for JScript supports only
+ * the default namespace resolver. See the section
+ * {@ref "Namespace Resolvers"} for details.
+ * @param resultType : Number
+ * Expected XPath result type. Should be one of the XPathResult.* constants.
+ * Is ignored if MSXML is used, as MSXML only supports the equivalent of
+ * {@link XPathResult#ORDERED_NODE_ITERATOR_TYPE}.
+ * @param oResult : XPathResult
+ * Optional XPathResult. For backwards compatibility only.
+ * @return Result of the XPath expression,
+ * or <code>null</code> on recoverable error
+ * @type Null|number|string|boolean|Array
+ * @throws DOMException on unrecoverable XPath error
+ */
+ evaluate:
+ (function () {
+ var isMethod = jsx.object.isMethod;
+ var _XPathResult = XPathResult;
+ var createDefaultNSResolver = null;
+
+ return function (expression, contextNode, namespaceResolver,
+ resultType, oResult) {
+ var result = null;
+
+ if (!contextNode)
+ {
+ contextNode = document;
+ var documentNode = contextNode;
+ }
+ else
+ {
+ documentNode = contextNode.ownerDocument || contextNode;
+ }
+
+ if (isMethod(documentNode, "evaluate"))
+ {
+ var nsResolver = namespaceResolver
+ || (
+ createDefaultNSResolver
+ || (createDefaultNSResolver = jsx.dom.xpath.createDefaultNSResolver)
+ )(contextNode, documentNode);
+ var iResultType = resultType || 0;
+ var objResult = oResult || null;
+
+ /* Make DOM exception recoverable in WebCore */
+ jsx.tryThis(
+ function () {
+ result = documentNode.evaluate(expression, contextNode, nsResolver,
+ iResultType, objResult);
+ },
+ function (e) {
+ jsx.rethrowThis(e);
+ }
+ );
+ }
+ else if (isMethod(contextNode, "selectNodes"))
+ {
+ result = contextNode.selectNodes(expression.replace(/_\w*:/g, ""));
+ resultType = _XPathResult.ORDERED_NODE_ITERATOR_TYPE;
+ }
+
+ if (result)
+ {
+ var found = [];
+
+ switch (typeof result.resultType != "undefined"
+ ? result.resultType
+ : resultType)
+ {
+ case _XPathResult.NUMBER_TYPE:
+ if (typeof result.numberValue != "undefined")
+ {
+ result = result.numberValue;
+ }
+ break;
+
+ case _XPathResult.STRING_TYPE:
+ if (typeof result.stringValue != "undefined")
+ {
+ result = result.stringValue;
+ }
+ break;
+
+ case _XPathResult.BOOLEAN_TYPE:
+ if (typeof result.booleanValue != "undefined")
+ {
+ result = result.booleanValue;
+ }
+ break;
+
+ case _XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+ case _XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+ if (isMethod(result, "iterateNext"))
+ {
+ /* DOM Level 3 XPath: NodeIterator */
+ var res;
+ while ((res = result.iterateNext()))
+ {
+ found.push(res);
+ }
+
+ result = found;
+ }
+ else if (typeof result.length != "undefined")
+ {
+ /* MSXML DOM: NodeList */
+ for (var i = 0, len = result.length; i < len; ++i)
+ {
+ found.push(result[i]);
+ }
+
+ result = found;
+ }
+ break;
+
+ case _XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+ case _XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+ if (typeof result.snapshotLength != "undefined"
+ && isMethod(result, "snapshotItem"))
+ {
+ for (var i = 0, len = result.snapshotLength; i < len; i++)
+ {
+ found.push(result.snapshotItem(i));
+ }
+
+ result = found;
+ }
+ break;
+
+ case _XPathResult.ANY_UNORDERED_NODE_TYPE:
+ case _XPathResult.FIRST_ORDERED_NODE_TYPE:
+ if (typeof result.singleNodeValue != "undefined")
+ {
+ result = result.singleNodeValue;
+ }
+ break;
+
+ default:
+ jsx.throwThis("jsx.dom.xpath.InvalidImplementationError");
+ result = null;
+ }
+ }
+
+ return result;
+ };
+ }()),
+
+/**
+ * @section Namespace Resolvers
+ *
+ * To facilitate matching of elements and attributes in namespaces
+ * with XPath, a namespace resolver is required. A namespace resolver
+ * is a function that returns the namespace URI for a given namespace
+ * prefix found in an XPath expression.
+ *
+ * JSX:xpath.js provides three ways to create a namespace resolver:
+ * <ul>
+ * <li>{@link jsx.dom.xpath#createDefaultNSResolver} creates a built-in
+ * namespace resolver (if available) that can resolve elements
+ * and attributes in the document in the null namespace (in no
+ * namespace) or in namespaces with prefixes (declared with
+ * <code>xmlns:<var>prefix</var>="<var>URI</var>"</code>.
+ * It cannot resolve elements and attributes in a default
+ * namespace (declared with <code>xmlns="<var>URI</var>"</code>).
+ * </li>
+ * <li>{@link jsx.dom.xpath#createCustomNSResolver} creates a custom
+ * namespace resolver that can resolve only namespace prefixes
+ * that you specify. You can use this kind of resolver
+ * to select elements and attributes in known default namespaces,
+ * by giving those prefixes starting with <code>_</code>, and
+ * namespaces with other prefixes.</li>
+ * <li>{@link jsx.dom.xpath#createFullNSResolver} gives you the
+ * best of both worlds. It creates a customizable namespace
+ * resolver that scans the document starting from a given context
+ * node (the document element node by default) for the first
+ * default namespace declaracation and for declarations of
+ * namespaces with a prefix.
+ * </ul>
+ */
+
+ /**
+ * Creates and returns a default namespace resolver, as created and
+ * returned by <code>Document::createNSResolver()</code>, if available,
+ * or <code>null</code>.
+ *
+ * Note that despite its name a default namespace resolver cannot
+ * resolve elements in a default namespace. Use
+ * {@link jsx.dom.xpath#createCustomNSResolver()} to create such a resolver
+ * instead.
+ *
+ * @param contextNode : Node
+ * Context node for which the default namespace resolver should be
+ * created.
+ * @param documentNode : Document
+ * Document node, required for calling the <code>createNSResolver()</code>
+ * method. If not specified, <code>document</code> is used.
+ * @return NSResolver|null
+ */
+ createDefaultNSResolver: function (contextNode, documentNode) {
+ if (!documentNode)
+ {
+ documentNode = document;
+ }
+
+ return (jsx.object.isMethod(documentNode, "createNSResolver")
+ ? documentNode.createNSResolver(
+ (contextNode.ownerDocument == null
+ ? contextNode.documentElement
+ : contextNode.ownerDocument.documentElement))
+ : null);
+ },
+
+ /**
+ * Collects and returns the namespaces of a node and its descendants.
+ *
+ * Collects the namespace prefixes and URIs of <var>contextNode</var> and
+ * its descendant element nodes. Duplicate prefixes with different namespace
+ * URI are ignored and must be resolved manually using the <var>namespaces</var>
+ * argument of {@link jsx.dom.xpath#createFullNSResolver()}.
+ *
+ * @param namespaces : Object
+ * Contains the collected namespace declarations. Existing properties
+ * are preserved.
+ * @param contextNode : Document|Element
+ * The parent node from where to start searching for namespace
+ * declarations. If it is a Document node, the document element node
+ * is used instead. The default is the document element node.
+ * @return {Object}
+ * The resulting value of <var>namespaces</var> if successful,
+ * <code>null</code> otherwise.
+ * @throws jsx.dom.xpath.InvalidNodeError if a value has been specified
+ * for <var>contextNode</var> that is not a reference to a Document
+ * node or an Element node.
+ * @see jsx.dom.xpath#createFullNSResolver()
+ */
+ collectNamespaces: function jsx_xpath_collectNamespaces (namespaces, contextNode) {
+ if (!namespaces)
+ {
+ jsx.warn("`namespaces' is not convertible to an Object; argument is not modified.");
+ namespaces = {};
+ }
+
+ /* Scan entire document by default */
+ if (!contextNode)
+ {
+ contextNode = document.documentElement;
+ }
+
+ /* if DOCUMENT_NODE, use root element */
+ if (contextNode.nodeType == 9)
+ {
+ contextNode = contextNode.documentElement;
+ }
+
+ if (!contextNode || contextNode.nodeType != 1)
+ {
+ jsx.throwThis("jsx.dom.xpath.InvalidNodeError", contextNode);
+ return null;
+ }
+
+ for (var i = 0, attribs = contextNode.attributes, len = attribs && attribs.length;
+ i < len;
+ ++i)
+ {
+ var attr = attribs[i];
+ var attrName = attr.name;
+ var matches;
+
+ if ((matches = String(attrName).match(/^xmlns($|:(.+))/)))
+ {
+ var originalPrefix = matches[2];
+ var prefix = originalPrefix || "_";
+
+ if (typeof namespaces[prefix] == "undefined")
+ {
+ var attrValue = attr.value;
+
+ /*
+ * Default NS declaration with empty value means _no_ namespace,
+ * see <http://www.w3.org/TR/REC-xml-names/#defaulting>
+ */
+ if (!originalPrefix && attrValue == "")
+ {
+ attrValue = null;
+ }
+
+ namespaces[prefix] = attrValue;
+ }
+ }
+ }
+
+ for (var i = 0, childNodes = contextNode.childNodes, len = childNodes && childNodes.length;
+ i < len;
+ ++i)
+ {
+ var childNode = childNodes[i];
+
+ /* If ELEMENT_NODE, recurse */
+ if (childNode.nodeType == 1)
+ {
+ jsx.tryThis(
+ function() {
+ jsx_xpath_collectNamespaces(namespaces, childNode);
+ },
+ function (e) {
+ if (e.name === "jsx.dom.xpath.InvalidArgumentError")
+ {
+ jsx.throwThis(e);
+ }
+ });
+ }
+ }
+
+ return namespaces;
+ },
+
+ /**
+ * Creates and returns a custom namespace resolver.
+ *
+ * This method exists primarily to facilitate the matching of elements
+ * that are in the default namespace as XPath defines <tt>QNames</tt>
+ * without prefix to match only elements in the null namespace. Use it
+ * instead of {@link jsx.dom.xpath#createFullNSResolver} if you only want
+ * to match elements in custom default namespaces.
+ *
+ * See also the description of the <var>expression</var> argument of
+ * {@link jsx.dom.xpath#evaluate} for details.
+ *
+ * @param namespaces : Object
+ * Namespace declarations. The property names are the namespace
+ * prefixes, the property values are the namespace URIs.
+ * @return {Function} A namespace resolver that can resolve the
+ * declared namespaces. A selector in an undeclared namespace is
+ * considered to be in the null namespace.
+ */
+ createCustomNSResolver: function (namespaces) {
+ return function (prefix) {
+ return namespaces[prefix] || null;
+ };
+ },
+
+ /**
+ * Creates and returns a customizable full namespace resolver.
+ *
+ * Creates and returns a customizable namespace resolver that
+ * considers the namespaces already declared in the document first.
+ *
+ * Like {@link jsx.dom.xpath#createCustomNSResolver}, this method exists
+ * primarily to facilitate the matching of elements that are in a
+ * default namespace. Use it instead of
+ * {@link jsx.dom.xpath#createCustomNSResolver} if you need to match elements
+ * in the context node's default namespace, or in one of the namespaces
+ * with prefix declared in the context node or its descendant elements.
+ *
+ * See also the description of the <var>expression</var> argument of
+ * {@link jsx.dom.xpath#evaluate} for details.
+ *
+ * @param namespaces : Object
+ * Namespace declarations. The property names are the namespace
+ * prefixes, the property values are the namespace URIs.
+ * @param contextNode : Document|Element
+ * The parent node from where to start searching for namespace
+ * declarations. If it is a Document node, the document element node
+ * is used instead. The default is the document element node.
+ * @return {Function} A namespace resolver that can resolve the
+ * declared namespaces. A selector in an undeclared namespace is
+ * considered to be in the null namespace.
+ * @throws jsx.dom.xpath#InvalidNodeError if a value has been specified
+ * for <var>contextNode</var> that is not a reference to a Document
+ * node or an Element node.
+ * @see jsx.dom.xpath#collectNamespaces(string, Element|Document)
+ * @function
+ */
+ createFullNSResolver: (function () {
+ var collectNamespaces = null;
+
+ return function (namespaces, contextNode) {
+ if (contextNode)
+ {
+ if (!namespaces)
+ {
+ namespaces = {};
+ }
+
+ (
+ collectNamespaces || (collectNamespaces = jsx.dom.xpath.collectNamespaces)
+ )(namespaces, contextNode);
+ }
+
+ return function (prefix) {
+ return namespaces[prefix] || null;
+ };
+ };
+ }()),
+
+ /**
+ * Exception thrown if an unsupported XPath implementation is encountered
+ *
+ * @function
+ */
+ InvalidImplementationError: (function () {
+ jsx.Error.call(this);
+ }).extend(jsx.Error, {
+ name: "jsx.dom.xpath.InvalidImplementationError"
+ }),
+
+ /**
+ * Exception thrown if an invalid Node reference is passed
+ *
+ * @function
+ */
+ InvalidNodeError: (function (contextNode) {
+ jsx.Error.call(this, contextNode);
+ }).extend(jsx.Error, {
+ name: "jsx.dom.xpath.InvalidNodeError"
+ })
+};
\ No newline at end of file
/live/dom/xpath.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/dom/timer.js
===================================================================
--- live/dom/timer.js (nonexistent)
+++ live/dom/timer.js (revision 509)
@@ -0,0 +1,105 @@
+
+
+jsx.dom.Timer = function(f, oProperties) {
+ if (f){this.form = f;}
+ this.message = "";
+
+ if (typeof Object.keys == "function")
+ {
+ var keys = Object.keys(oProperties);
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var p = keys[i];
+ this[p] = oProperties[p];
+ }
+ }
+ else
+ {
+ for (p in oProperties)
+ {
+ this[p] = oProperties[p];
+ }
+ }
+};
+
+jsx.dom.Timer.prototype = {
+ constructor: jsx.dom.Timer,
+
+ start: function(o)
+ {
+ if (o){this.form = o.form;}
+
+ // clear the previous timeout
+ this.stop();
+
+ if (jsx.object.isMethod(window, "setTimeout"))
+ {
+ var me = this;
+ this.timeout = window.setTimeout(
+ function() { me.tick(1000); me = null; },
+ 1000);
+ }
+ },
+
+ tick: function(interval)
+ {
+ var
+ es = this.form.elements,
+ hours = +es["hours"].value,
+ mins = +es["minutes"].value,
+ secs = +es["seconds"].value;
+
+ if (--secs < 0)
+ {
+ secs = 59;
+ mins--;
+ }
+
+ if (mins < 0)
+ {
+ mins = 59;
+ hours--;
+ }
+
+ if (hours < 0)
+ {
+ this.ring();
+ }
+ else
+ {
+ es["hours"].value = hours;
+ es["minutes"].value = leadingZero(mins, 2);
+ es["seconds"].value = leadingZero(secs, 2);
+
+ var me = this;
+ this.timeout = window.setTimeout(
+ function() { me.tick(interval); me = null; },
+ interval);
+ }
+ },
+
+ ring: function()
+ {
+ this.stop();
+ playSound('/media/audio/sound/display.wav');
+ window.alert(this.message || "RING!");
+ },
+
+ stop: function(o)
+ {
+ if (!this.form && o){this.form = o.form;}
+
+ if (typeof this.timeout != "undefined"
+ && jsx.object.isMethod(window, "clearTimeout"))
+ {
+ window.clearTimeout(this.timeout);
+ delete this.timeout;
+ }
+ },
+
+ reset: function(o)
+ {
+ this.stop();
+ if (this.form){this.form.reset();}
+ }
+};
/live/dom/timer.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/audio.js
===================================================================
--- live/dom/audio.js (nonexistent)
+++ live/dom/audio.js (revision 509)
@@ -0,0 +1,80 @@
+function playSound(sSoundFile, Loop, sAttrib)
+{
+ var b = document.body, o;
+ if (b
+ && jsx.object.isMethod(b, "appendChild")
+ && (o = b.appendChild(jsx.dom.createElement("object"))))
+ {
+ o.data = sSoundFile;
+/*
+ var p = dhtml.createElement("param");
+ if (p)
+ {
+ p.name = "FileName";
+ p.value = sSoundFile;
+ o.appendChild(p);
+ }
+
+ p = dhtml.createElement("param");
+ if (p)
+ {
+ p.name = "AutoPlay";
+ p.value = "1";
+ o.appendChild(p);
+ }
+
+ p = dhtml.createElement("param");
+ if (p)
+ {
+ p.name = "EnableJavaScript";
+ p.value = "true";
+ o.appendChild(p);
+ }
+*/
+ var me = arguments.callee;
+
+ if (typeof me.sounds == "undefined")
+ {
+ me.sounds = new Array();
+ }
+
+ me.sounds.push(o);
+
+ if (typeof me.handlerAdded == "undefined")
+ {
+ jsx.dom.addEventListener(
+ b,
+ "unload",
+ function() {
+ for (var i = me.sounds && me.sounds.length; i--;)
+ {
+ b.removeChild(me.sounds[i]);
+ }
+
+ b = null;
+ });
+
+ me.handlerAdded = true;
+ }
+ }
+/*
+ if (document.all)
+ {
+ var sAdjacent = "<bgsound ";
+ if ((playSound.arguments.length == 3) && (sAttrib.length != ""))
+ {
+ sAdjacent += sAttrib;
+ sAdjacent += " ";
+ }
+ sAdjacent += "src=\"";
+ sAdjacent += sSoundFile;
+ sAdjacent += "\" loop=\"";
+ if (isNaN(Loop))
+ sAdjacent += Loop;
+ else
+ sAdjacent += String(Loop);
+ sAdjacent += "\">";
+ document.all.tags("head")[0].insertAdjacentHTML("BeforeEnd", sAdjacent);
+ }
+*/
+}
\ No newline at end of file
/live/dom/audio.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/dom/widgets2.js
===================================================================
--- live/dom/widgets2.js (nonexistent)
+++ live/dom/widgets2.js (revision 509)
@@ -0,0 +1,323 @@
+/**
+ * @requires dom.js, events.js
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.dom == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.dom = {};
+}
+
+/**
+ * Constructor of the abstract prototype for widgets. It provides shallow
+ * copying of the passed properties, stores the reference to the manipulated DOM
+ * object, and applies the given properties to the display of that object.
+ * Widgets should inherit from this prototype, and this constructor should be
+ * called only from the constructors of prototypes of specialized widgets.
+ *
+ * @param oTarget : Element
+ * Reference to the DOM object that provides the client area
+ * for the widget (optional)
+ * @param oParent : Element
+ * Parent element (optional)
+ * @param oProperties
+ * Properties to initialize this object with (optional)
+ */
+jsx.dom.Widget = function(oTarget, oParent, oProperties) {
+ this.target = oTarget || document.createElement(this.elementType);
+ this._parent = oParent || document.body;
+
+ if (!this.target)
+ {
+ jsx.throwThis("TypeError", "No or invalid target");
+ }
+
+ for (var property in oProperties)
+ {
+ var propertyValue = oProperties[property];
+ if (property == "style")
+ {
+ for (var styleProperty in propertyValue)
+ {
+ this.target.style[styleProperty] = propertyValue[styleProperty];
+ }
+ }
+ else
+ {
+ this[property] = propertyValue;
+ }
+ }
+
+ if (oProperties.resizable)
+ {
+ this.makeResizeable();
+ }
+
+ var me = this;
+ document.body.addEventListener("unload", function() {
+ /* break circular reference */
+ me.target = null;
+ }, false);
+};
+
+jsx.dom.Widget.prototype = {
+ /**
+ * @type Function
+ */
+ constructor: jsx.dom.Widget,
+
+ /**
+ * Widgets are `div' elements by default. Inheriting classes should
+ * override this when appropriate (e. g., a menu should be a `ul')
+ */
+ elementType: "div",
+
+ /**
+ * @type Element
+ */
+ target: null,
+
+ /* Move to Resizeable type? */
+ resizeable: false,
+ resizeFlags: {
+ n: false,
+ ne: false,
+ e: false,
+ se: false,
+ s: false,
+ sw: false,
+ w: false,
+ nw: false
+ },
+
+ /*
+ * The height/width in pixels of the edges of the widget
+ * where the resize handles are located
+ */
+ resizeEdges: {
+ top: 4,
+ right: 4,
+ bottom: 4,
+ left: 4
+ },
+
+ /**
+ * Causes the widget to be rendered, and attached to the document tree
+ * if not already attached.
+ *
+ * @param parent
+ * Reference to the object representing the parent element to which
+ * the widget should be appended as child. The default is document.body.
+ */
+ render: function(parent) {
+ this.appendTo(parent);
+ this.target.style.display = "";
+ },
+
+ /**
+ * Causes the widget not to be rendered, without removing it from
+ * the document tree.
+ */
+ unrender: function() {
+ this.target.style.display = "none";
+ },
+
+ /**
+ * Shows the widget
+ */
+ show: function() {
+ target.style.display.visibility = "visible";
+ },
+
+ /**
+ * Hides the widget, but keeps its box
+ */
+ hide: function() {
+ this.target.style.display.visibility = "hidden";
+ },
+
+ /**
+ * Appends the widget as a child element
+ *
+ * @param parent
+ * @returns
+ */
+ appendTo: function(parent) {
+ var result = null;
+
+ if (typeof parent == "undefined")
+ {
+ parent = this._parent;
+ }
+
+ var target = this.target;
+ if (!target.parentNode || (parent != target.parentNode))
+ {
+ result = parent.appendChild(target);
+ }
+
+ return result;
+ },
+
+ remove: function() {
+ return this.target.parentNode.removeChild(this.target);
+ },
+
+ /**
+ * @protected
+ * @param properties : Object
+ * @param propertyName : String
+ * @param defaultValue : mixed
+ */
+ _setStylePropertyOrDefault: function(properties, propertyName, defaultValue) {
+ if (typeof properties.style == "undefined"
+ || typeof properties.style[propertyName] == "undefined")
+ {
+ properties.style[propertyName] = defaultValue;
+ }
+ },
+
+ /**
+ * Makes this widget resizeable
+ */
+ makeResizeable: function() {
+ var
+ _jsx_dom = jsx.dom,
+ _addEventListener = _jsx_dom.addEventListener,
+ _createEventListener = _jsx_dom.createEventListener;
+
+ var defaultCursor = this.target.style.cursor;
+
+ var me = this;
+ _addEventListener(this.target, "mousemove",
+ _createEventListener(function(e) {
+ var resizeEdges = me.resizeEdges;
+ var inLeftMargin = (e.offsetX <= resizeEdges.left);
+ var inTopMargin = (e.offsetY <= resizeEdges.top);
+ if (inLeftMargin || inTopMargin)
+ {
+ var resizeFlags = me.resizeFlags;
+ if (inLeftMargin && inTopMargin)
+ {
+ if (resizeFlags.nw)
+ {
+ this.style.cursor = "nw-resize";
+ }
+ }
+ else if (inLeftMargin)
+ {
+ if (resizeFlags.w)
+ {
+ this.style.cursor = "w-resize";
+ }
+ }
+ else
+ {
+ if (resizeFlags.n)
+ {
+ this.style.cursor = "n-resize";
+ }
+ }
+ }
+ else
+ {
+ this.style.cursor = defaultCursor;
+ }
+ }));
+
+ _addEventListener(this.target, "mouseout",
+ _createEventListener(function() {
+ this.style.cursor = defaultCursor;
+ }));
+ }
+};
+
+/**
+ * Creates a window
+ *
+ * @param target : Element
+ * Target element (optional)
+ * @param parent : Element
+ * Parent element (optional)
+ * @param properties
+ * Properties to initialize this object with (optional)
+ */
+jsx.dom.Window = function(target, parent, properties) {
+ this._setStylePropertyOrDefault(properties, "backgroundColor", this.defaultBackground);
+ arguments.callee._super.call(this, target, parent, properties);
+};
+
+jsx.dom.Window.extend(jsx.dom.Widget);
+jsx.dom.Window.prototype.defaultBackgroundColor = "ButtonFace";
+
+/**
+ * Creates a toolbox
+ *
+ * @param target : Element
+ * Target element (optional)
+ * @param parent : Element
+ * Parent element (optional)
+ * @param properties
+ * Properties to initialize this object with (optional)
+ */
+jsx.dom.Toolbox = function(target, parent, properties) {
+ this._setStylePropertyOrDefault(properties, "border", this.defaultBorder);
+
+ arguments.callee._super.call(this, target, parent, properties);
+};
+
+jsx.dom.Toolbox.extend(jsx.dom.Window);
+jsx.dom.Toolbox.prototype.defaultBorder = "2px outset";
+
+/**
+ * @namespace
+ */
+jsx.dom.liveedit = {
+ version: "0.1"
+};
+
+/**
+ * Creates and displays the LiveEdit editor
+ *
+ * @param target : Element
+ * Target element for the editor (optional)
+ * @param parent : Element
+ * Parent element for the editor (optional)
+ */
+jsx.dom.liveedit.LiveEdit = function(target, parent) {
+ this._toolbox = new jsx.dom.Toolbox(target, parent, {
+ style: {
+ position: "fixed",
+ top: "0",
+ right: "0",
+ width: "20%",
+ bottom: "0",
+ backgroundColor: "#ccc"
+ },
+ resizable: true,
+ resizeFlags: {
+ w: true
+ }
+ });
+
+ this.showToolbox();
+};
+
+jsx.dom.liveedit.LiveEdit.extend();
+
+/**
+ * Shows the toolbox of this editor
+ */
+jsx.dom.liveedit.LiveEdit.prototype.showToolbox = function() {
+ this._toolbox.render();
+};
/live/dom/widgets2.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/engine.js
===================================================================
--- live/engine.js (nonexistent)
+++ live/engine.js (revision 509)
@@ -0,0 +1,348 @@
+/**
+ * <title>Script Engine Detection Library</title>
+ * @file $Id$
+ *
+ * @author (C) 2004, 2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = new Object();
+}
+
+if (typeof jsx.engine == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.engine = new Object();
+}
+
+/** @version */
+jsx.engine.version = "$Revision$";
+
+jsx.engine.copyright = "Copyright \xA9 2004, 2013";
+jsx.engine.author = "Thomas Lahn";
+
+/**
+ * Contact address of the author
+ */
+jsx.engine.email = "js@PointedEars.de";
+
+/**
+ * Base path of the script file resource
+ */
+jsx.engine.path = "http://PointedEars.de/scripts/";
+// jsx.engine.docURL = this.path + "global.htm";
+
+/**
+ * Encapsulates information about the used script engine.
+ */
+function _EngineInfo ()
+{
+ /**
+ * @param {string} version
+ * @param {Array} versionMap
+ * @param {string} fallback
+ * @return {string|boolean}
+ */
+ function _inferVersion (version, versionMap, fallback)
+ {
+ function gte (v1, v2)
+ {
+ v1 = v1.split(".");
+ v2 = v2.split(".");
+ for (var i = 0, len = v1.length; i < len; ++i)
+ {
+ if (parseInt(v1[i], 10) < parseInt(v2[i], 10))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ var s = "";
+
+ for (var i = versionMap.length; i--;)
+ {
+ var mapping = versionMap[i];
+ if (gte(version, mapping[0]))
+ {
+ s = mapping[1];
+ break;
+ }
+ }
+
+ if (!s && fallback)
+ {
+ s = fallback;
+ }
+
+ return s;
+ }
+
+ if (typeof ScriptEngine == "function")
+ {
+ /* JScript */
+
+ /**
+ * @type string
+ */
+ var _vendor = "Microsoft";
+
+ /**
+ * @type string
+ */
+ var _name = ScriptEngine();
+
+ /**
+ * @type string
+ */
+ var _majorVersion =
+ typeof ScriptEngineMajorVersion == "function"
+ ? ScriptEngineMajorVersion()
+ : 'x';
+
+ /**
+ * @type string
+ */
+ var _minorVersion =
+ typeof ScriptEngineMinorVersion == "function"
+ ? ScriptEngineMinorVersion()
+ : 'xx';
+
+ /**
+ * @type string
+ */
+ var _buildVersion =
+ typeof ScriptEngineBuildVersion == "function"
+ ? ScriptEngineBuildVersion()
+ : 'xxxx';
+
+ /**
+ * @type string
+ */
+ var _version =
+ (_majorVersion != 'x'
+ ? _majorVersion
+ + (_minorVersion != 'xx'
+ ? '.' + _minorVersion
+ + (_buildVersion != 'xxxx' ? '.' + _buildVersion : '')
+ : '')
+ : '');
+ }
+ else
+ {
+ var _inferred = true;
+
+ if (typeof navigator != "undefined")
+ {
+ var ua = navigator.userAgent || "";
+
+ if (typeof window != "undefined"
+ && jsx.object.getFeature(window, "opera"))
+ {
+ _vendor = "Opera";
+ _name = "ECMAScript";
+ }
+ else if (ua.indexOf("Konqueror") > -1)
+ {
+ _vendor = "KDE";
+ _name = "JavaScript";
+ }
+ else if (ua.indexOf("WebKit") > -1)
+ {
+ var m = null;
+
+ if (jsx.object.isMethod(ua, "match"))
+ {
+ if (ua.indexOf("Chrome") > -1)
+ {
+ m = ua.match(/\bChrome\/(\d+\.\d+(\.\d+)?)\b/);
+
+ _vendor = "Google";
+ _name = "V8";
+
+ if (m)
+ {
+ var _minVersion = true;
+ var s = _inferVersion(m[1],
+ [
+ [ "2.0.172", "0.4"],
+ [ "3.0.195", "1.2"],
+ [ "4.0.249", "1.3"],
+ [ "5.0.375", "2.1"],
+ [ "6.0.472", "2.2"],
+ [ "7.0.517", "2.3.11.22"],
+ [ "8.0.552", "2.4.9.19"],
+ [ "9.0.597", "2.5.9.6"],
+ ["10.0.648", "3.0.12.30"],
+ ["11.0.696", "3.1.8.16"],
+ ["12.0.742", "3.2.10.21"],
+ ["13.0.782", "3.3.10.17"],
+ ["14.0.835", "3.4.14.2"],
+ ["15.0.874", "3.5.10.9"],
+ ["16.0.891", "3.6.4"],
+ ["17.0.963", "3.7.12.29"],
+ ["18.0.1025", "3.8.9.19"],
+ ["19.0.1084", "3.9.24.7"],
+ ["20.0.1132", "3.10.6.0"],
+ ["21.0.1180", "3.11.10.6"],
+ ["22.0.1229", "3.12.19.4"],
+ ["23.0.1271", "3.13.7.1"],
+ ["24.0.1297", "3.14.4.1"],
+ ["25.0.1364", "3.15.11.5"],
+ ["26.0.1410", "3.16.14.9"],
+ ["27.0.1453", "3.17.6.14"],
+ ["28.0.1500", "3.18.5.5"],
+ ["29.0.1530", "3.19.9"]
+ ],
+ "0.3");
+
+ if (s)
+ {
+ _version = s;
+ }
+ }
+ }
+ else
+ {
+ _vendor = "Apple";
+ _name = "JavaScriptCore";
+
+ m = ua.match(/\bAppleWebKit\/(\d+\.\d+(\.\d+)*)\b/);
+
+ if (m)
+ {
+ _version = m[1];
+ }
+ }
+ }
+ }
+ else if (typeof netscape != "undefined" || ua.indexOf("Gecko") > -1)
+ {
+ m = null;
+
+ if (jsx.object.isNativeMethod(ua, "match"))
+ {
+ m = ua.match(/\brv:((\d+)\.\d+(\.\d+)*)\b/);
+ }
+
+ _vendor = "Netscape/Mozilla";
+ _name = "JavaScript";
+
+ if (m)
+ {
+ _minVersion = true;
+
+ if (parseInt(m[2], 10) >= 5)
+ {
+ s = m[2];
+ }
+ else
+ {
+ s = _inferVersion(m[1],
+ [
+ ["0.6", "1.5"],
+ ["1.8", "1.6"],
+ ["1.8.1", "1.7"],
+ ["1.9", "1.8"],
+ ["1.9.1", "1.8.1"],
+ ["1.9.2", "1.8.2"],
+ ["1.9.3", "1.8.5"]
+ ]);
+ }
+
+ if (s)
+ {
+ _version = s;
+ }
+ }
+ }
+ }
+ }
+
+ function _getVendor ()
+ {
+ return _vendor;
+ }
+ this.getVendor = _getVendor;
+
+ function _getName ()
+ {
+ return _name;
+ }
+ this.getName = _getName;
+
+ function _getFullName ()
+ {
+ var vendor = _getVendor();
+ return (vendor ? vendor + " " : "") + _getName();
+ }
+ this.getFullName = _getFullName;
+
+ function _getMajorVersion ()
+ {
+ return _majorVersion;
+ }
+ this.getMajorVersion = _getMajorVersion;
+
+ function _getMinorVersion ()
+ {
+ return _minorVersion;
+ }
+ this.getMinorVersion = _getMinorVersion;
+
+ function _getVersion ()
+ {
+ return _version;
+ }
+ this.getVersion = _getVersion;
+
+ function _isInferred ()
+ {
+ return !!_inferred;
+ }
+ this.isInferred = _isInferred;
+
+ function _isMinVersion ()
+ {
+ return !!_minVersion;
+ }
+ this.isMinVersion = _isMinVersion;
+}
+
+/**
+ * Returns name and version of the used script engine,
+ * if available.
+ *
+ * @return {string}
+ */
+function _EngineInfo_prototype_toString ()
+{
+ var name = this.getName();
+ return (name ? name + ' ' : '') + this.getVersion();
+}
+_EngineInfo.prototype.toString = _EngineInfo_prototype_toString;
+
+jsx.engine.EngineInfo = _EngineInfo;
\ No newline at end of file
/live/engine.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/string/parser-old.js
===================================================================
--- live/string/parser-old.js (nonexistent)
+++ live/string/parser-old.js (revision 509)
@@ -0,0 +1,414 @@
+/**
+ * Generic parser implementation
+ *
+ * @author
+ * Copyright (c) 2010 Thomas 'PointedEars' Lahn &lt;js@PointedEars.de&gt;
+ */
+
+if (typeof jsx.string.parser == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.string.parser = {};
+}
+
+/**
+ * A token as recognized by a {@link #Lexer}.
+ *
+ * @param pattern : RegExp|String
+ * The pattern to match the token. <strong>Parenthesized subexpressions
+ * must be marked as <em>non-capturing</em> (<code>(?:&#8230;)</code>) for
+ * the correct token to be returned by the lexer.</strong>
+ * @param type : optional any
+ * A value to set the object's <code>type</code> property which can be used
+ * for recognizing the type of the matched token in the parser's
+ * {@link Parser.prototype#parseToken parseToken()} method. Using
+ * a constant value is recommended, the default is the constructor
+ * identifier or <code>"Token"</code> if the identifier is unavailable.
+ * However, whenever a token requires further parsing, it is recommended
+ * to use an object which constructor calls {@link Token Token()}, and
+ * to compare against its <code>constructor</code> property instead.
+ * @property pattern : RegExp|String
+ * See the constructor's <var>pattern</var> argument
+ * @property type
+ * See the constructor's <var>type</var> argument
+ * @property match : Array
+ * The text and substrings that the token matched. If the {@link #Lexer}'s
+ * {@link #Lexer.keepHistory keepHistory} property is <code>false</code>,
+ * the text and substrings that the token matched last.
+ * @method parse(lexer : Lexer)
+ * When this method is defined, a {@link #Parser} calls it instead of
+ * the parser's {@link Parser.prototype#parseToken parseToken(Token)} method.
+ * A <code>Token</code> may implement this method to parse the token using
+ * a specialized {@link #Lexer}. An implementation may
+ * {@link jsx.object#clone clone()} the referred lexer to create a lexer
+ * that can find more or less tokens than the suggested one.
+ */
+jsx.string.parser.Token = function (pattern, type) {
+ this.pattern = pattern;
+ this.type = type || jsx.object.getFunctionName(this.constructor) || "Token";
+};
+
+/**
+ * A <code>Lexer</code> (lexical analyzer) converts a sequence
+ * of characters in an input string into a sequence of
+ * {@link #Token Tokens} which can be used by a {@link Parser}.
+ *
+ * <p>The list of patterns to match the tokens can be built with calling
+ * {@link Lexer.prototype#addToken addToken()}, whereas the calls
+ * for the preferred matches must come first, or with
+ * {@link Lexer.prototype#addTokens addTokens()}, whereas the arguments
+ * for the preferred matches must come first.</p>
+ *
+ * @param text : optional String
+ * The text to be analyzed by this lexer; the default is the empty string.
+ * @property text : string
+ * The text to be analyzed
+ * @property _tokens : Array[Token]
+ * The list of {@link #Token Tokens}
+ * @property keepHistory : boolean = false
+ * If <code>true</code>, each match initializes and returns a new {@link #Token};
+ * use this if you need to retain a history of tokens. Otherwise the
+ * existing {@link #Token Tokens} are reused which requires less memory.
+ */
+jsx.string.parser.Lexer = function (text) {
+ /**
+ * @type String
+ */
+ this.text = text ? String(text) : "";
+
+ this._tokens = [];
+ this.keepHistory = false;
+};
+
+jsx.string.parser.Lexer.extend(null, {
+ /**
+ * <code>true</code> if the tokens have been compiled into a
+ * single regular expression. Always false if the longest match
+ * should win.
+ *
+ * @see _longestMatchWins
+ */
+ _compiled: false,
+
+ /**
+ * <code>true</code> if character case should not matter
+ */
+ _ignoreCase: false,
+
+ /**
+ * <code>true</code> if newline should be included in `.' matches
+ */
+ _dotAll: false,
+
+ /**
+ * <code>true</code> if the longest match, not the first one
+ * in the list of token expressions, should be used. This is
+ * important where there is ambiguity in token prefixes, but
+ * wasteful in runtime complexity where there is not, because
+ * the length of the matches for each token need to be compared
+ * against one another then. Use with caution.
+ */
+ _longestMatchWins: false,
+
+ /**
+ * Text position where to continue scanning
+ */
+ _offset: 0,
+
+ /**
+ * Appends a {@link #Token} to the list of tokens.
+ *
+ * @memberOf jsx.string.parser.Lexer#prototype
+ * @param token : RegExp|String|Token
+ * If a reference to a <code>RegExp</code> or a <code>String</code>,
+ * the value is used for the token pattern;<br>
+ * if a reference to a <code>Token</code>, the reference is used and
+ * <var>tokenType</var> is ignored.
+ *
+ * <p><strong>NOTE: Parenthesized subexpressions must be marked as
+ * <em>non-capturing</em> (<code>(?:&#8230;)</code>) for the correct
+ * token to be returned by the lexer.</strong></p>
+ * @param tokenType : optional String|Function
+ * If a <code>String</code>, passed for the the type name to {@link #Token Token()};<br>
+ * if a reference to a <code>Function</code>, the function is used as
+ * constructor to which <var>token</var> is passed.
+ * @return {Lexer}
+ * This object
+ */
+ addToken: function (token, tokenType) {
+ if (!token)
+ {
+ jsx.throwThis("jsx.InvalidArgumentError",
+ ["Invalid token", token + " : " + typeof token
+ + (token ? "[" + token.constructor + "]" : ""),
+ "(token: RegExp|String)"]);
+ }
+
+ if (token.constructor == RegExp
+ || typeof token == "string")
+ {
+ if (typeof tokenType == "function")
+ {
+ token = new tokenType(token);
+ }
+ else
+ {
+ token = new jsx.string.parser.Token(token, tokenType);
+ }
+ }
+
+ this._tokens.push(token);
+ this._compiled = false;
+
+ return this;
+ },
+
+ /**
+ * Appends one or more {@link #Token Tokens} to the list of tokens.
+ *
+ * @params : [RegExp|String|Token, optional String|Function]
+ * @return {Lexer}
+ * This object
+ */
+ addTokens: function () {
+ for (var i = 0, len = arguments.length; i < len; ++i)
+ {
+ var arg = arguments[i];
+ this.addToken(arg[0], arg[1]);
+ }
+
+ return this;
+ },
+
+ _jsx_RegExp: jsx.object.getFeature(jsx, "regexp", "RegExp"),
+
+ _RegExp: jsx.object.getFeature(jsx, "regexp", "RegExp") || RegExp,
+
+ /**
+ * Compiles <code>_expression</code> from token patterns
+ *
+ * @protected
+ */
+ _compile: (function () {
+ var _jsx_RegExp;
+ var _RegExp;
+
+ return function () {
+ var pattern = this._tokens.map(function (e) {
+ return e.pattern.source ? e.pattern.source : e.pattern;
+ });
+
+ this._expression = new this._RegExp(
+ "(" + pattern.join(")|(") + ")",
+ "g" + (this._ignoreCase ? 'i' : '')
+ + ((this._RegExp == this._jsx_RegExp && this._dotAll) ? 's' : ''));
+
+ this._compiled = true;
+
+ return this._expression;
+ };
+ }()),
+
+ /**
+ * Returns the next token in an input string.
+ *
+ * @return Token
+ * The next token in the text assigned with this lexer
+ */
+ nextToken: function () {
+ var tokens = this._tokens;
+ var keepHistory = this.keepHistory;
+ var match;
+
+ if (this._longestMatchWins)
+ {
+ var token_matches = [];
+ var max_match_len = 0;
+ var max_index = -1;
+ for (var index = tokens.length; index--;)
+ {
+ var token = tokens[index];
+
+ /* match from where we left */
+ match = this._jsx_RegExp
+ ? this._jsx_RegExp.exec(token, this._text.substring(this._offset))
+ : token.exec(this._text.substring(this._offset));
+
+ if (match)
+ {
+ var token_match = token_matches[index] = match[0];
+ var token_match_len = token_match.length;
+ if (token_match_len > max_match_len)
+ {
+ max_match_len = token_match_len;
+ max_index = index;
+ }
+ }
+ }
+
+ if (max_index > -1)
+ {
+ token = token_matches[max_index];
+
+ if (token.match && keepHistory)
+ {
+ token = new token.constructor(token.pattern, token.type);
+ }
+
+ /* correct for offsetted search */
+ match.index += this._offset;
+ match.input = this._text;
+
+ token.match = match;
+ }
+ }
+ else
+ {
+ var expression = this._expression;
+
+ if (!this._compiled)
+ {
+ expression = this._compile();
+ }
+
+ if (expression.source == "()")
+ {
+ jsx.throwThis(jsx.Error, "No tokens added");
+ return null;
+ }
+
+ match = this._jsx_RegExp
+ ? this._jsx_RegExp.exec(expression, this.text)
+ : expression.exec(this.text);
+
+ if (match)
+ {
+ for (var i = 1, len = match.length; i < len; ++i)
+ {
+ if (match[i])
+ {
+ token = tokens[i - 1];
+
+ if (token.match && keepHistory)
+ {
+ token = new token.constructor(token.pattern, token.type);
+ }
+
+ token.match = match;
+ break;
+ }
+ }
+ }
+ }
+
+ if (match)
+ {
+ /* advance offset for next _longestMatchWins search */
+ this._offset += match[0].length;
+ }
+
+ return token;
+ },
+
+ getIgnoreCase: function () {
+ return this._ignoreCase;
+ },
+
+ setIgnoreCase: function (value) {
+ value = !!value;
+ if (value !== this._ignoreCase)
+ {
+ this._compiled = false;
+ }
+
+ this._ignoreCase = value;
+ },
+
+ getDotAll: function () {
+ return this._dotAll;
+ },
+
+ setDotAll: function (value) {
+ value = !!value;
+ if (value !== this._dotAll)
+ {
+ this._compiled = false;
+ }
+
+ this._dotAll = value;
+ },
+
+ getExpression: function () {
+ return this._expression;
+ },
+
+ getOffset: function () {
+ return this._offset;
+ },
+
+ getTokens: function () {
+ return this._tokens;
+ }
+});
+
+/**
+ * A <code>Parser</code> handles {@link #Token Tokens} in an input string
+ * as provided by a {@link #Lexer}.
+ *
+ * @param lexer : Lexer
+ * The lexer to be used by this parser
+ * @property _lexer : Lexer
+ * The lexer used by this parser
+ */
+jsx.string.parser.Parser = function Parser (lexer) {
+ if (!jsx.object.isInstanceOf(lexer, jsx.string.parser.Lexer))
+ {
+ jsx.warn("jsx.string.parser.Parser: saw " + lexer + ", expected jsx.string.parser.Lexer");
+ }
+
+ this._lexer = lexer;
+};
+
+jsx.string.parser.Parser.extend(null, {
+ /**
+ * Request the next token from the {@link #Lexer}.
+ *
+ * @memberOf jsx.string.parser.Parser#prototype
+ * @return jsx.string.parser#Token
+ */
+ nextToken: function () {
+ return this._lexer.nextToken();
+ },
+
+ /**
+ * Parses an input string requesting the next token from a {@link #Lexer}.
+ */
+ parse: function () {
+ var
+ token,
+ oLexer = this._lexer;
+
+ while ((token = oLexer.nextToken()))
+ {
+ if (typeof token.parse == "function")
+ {
+ token.parse(oLexer);
+ }
+ else
+ {
+ this.parseToken(token);
+ }
+ }
+ },
+
+ /**
+ * Parses an input token as provided by a {@link #Lexer}.
+ *
+ * @param token : Token
+ */
+ parseToken: function (token) {
+ /* stub */
+ }
+});
\ No newline at end of file
/live/string/parser-old.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/string/compat.js
===================================================================
--- live/string/compat.js (nonexistent)
+++ live/string/compat.js (revision 509)
@@ -0,0 +1,65 @@
+/**
+ * <title>PointedEars' JSX: String Compatibility Layer</title>
+ * @version $Id$
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2002-2012 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Fix String.prototype.replace(..., Function) for Safari <= 2.0.2;
+ * thanks to kangax <kangax@gmail.com>
+ */
+if ("x".replace(/x/, function () { return "u"; }) != "u")
+{
+ var jsx_string_compat_origReplace = String.prototype.replace;
+ String.prototype.replace = function (searchValue, replaceValue) {
+ if (jsx_object.isMethod(replaceValue))
+ {
+ if (searchValue.constructor == RegExp)
+ {
+ var
+ result = this,
+ m,
+ i = searchValue.global ? -1 : 1;
+
+ while (i-- && (m = searchValue.exec(result)))
+ {
+ result = result.replace(
+ m[0],
+ String(replaceValue.apply(null, m.concat(m.index, this))));
+ }
+
+ return result;
+ }
+
+ i = this.indexOf(searchValue);
+ if (i > -1)
+ {
+ return replaceValue(String(searchValue), i, this);
+ }
+
+ return this;
+ }
+
+ return jsx_string_compat_origReplace.apply(this, arguments);
+ };
+}
\ No newline at end of file
/live/string/compat.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/string/unicode.js
===================================================================
--- live/string/unicode.js (nonexistent)
+++ live/string/unicode.js (revision 509)
@@ -0,0 +1,767 @@
+/* vim:set fileencoding=utf-8 tabstop=2 shiftwidth=2 softtabstop=2 expandtab: */
+/**
+ * @fileOverview <title>PointedEars' JSX: String Library -- Unicode Support</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @section {Abstract}
+ *
+ * A value of the primitive type {@link String} is defined in
+ * ECMAScript, Editions 1 to 5.1 inclusive, as a sequence of 16-bit
+ * units. Each unit is assumed, unless specified otherwise, to be
+ * the UTF-16 code sequence for a Unicode character. The length
+ * of a String is defined as the number of 16-bit units in the
+ * value, and the position of a character is defined as the position
+ * of the corresponding 16-bit unit in the String value.
+ *
+ * However, Unicode characters with code points beyond the Basic
+ * Multilingual Plane (BMP) require two UTF-16 code units, thus two
+ * 16-bit units, to be encoded. This makes it hard to use them
+ * in ECMAScript because they are not considered by ECMAScript's
+ * string-related algorithms. For example, for a string value that
+ * contains only one character but that has a code point beyond
+ * the multilingual plane (non-BMP character), the specified length
+ * and the value of the <code>length</code> property is
+ * <code>2</code>. Retrieving the (code point of the) first
+ * character from a string with
+ * <code>{@link String.prototype#charAt}(0)</code>.
+ * where the character has a code point beyond the multilingual
+ * plane, returns the (code point of the) (non-)character for its
+ * <em>lead surrogate</em>. Retrieving with
+ * <code>{@link String.prototype#charAt}(1)</code>
+ * the (code point of) the second character from a string that
+ * contains a first non-BMP character returns the first character's
+ * <em>trail surrogate</em> instead.
+ * {@link String.fromCharCode()} returns the character for the
+ * normalized code point value for arguments that are code point
+ * values beyond the BMP (e.g., <code>String.fromCharCode(0x1DD1E)
+ * === "\uDD1E"</code>).
+ *
+ * This library provides a new object type, <code>WideString</code>,
+ * whose prototype object inherits from the <code>String</code>
+ * prototype object, that is intended to be used as a drop-in
+ * replacement for <code>String</code> values that may contain
+ * Unicode characters from both inside and beyond the BMP, from
+ * code points U+0000 to U+10FFFF inclusive.
+ *
+ * It also replaces by default the values of certain built-in
+ * properties of the <code>String</code> constructor and
+ * <code>String</code> prototype object such as the ones mentioned
+ * above, and add others to the prototype object, so as to
+ * support non-BMP characters as well in implementations of those
+ * ECMAScript Editions almost seamlessly. However, non-callable
+ * built-in own and inherited properties of <code>String</code>
+ * values, like <code>length</code>, <em>cannot</em> be modified.
+ * (In case of <code>length</code>, you would need to use
+ * <code>getLength()</code> instead.) Whether and to what extent
+ * built-in objects are modified, can be controlled with
+ * {@link jsx#options}. (See {@link "object.js"} for details.)
+ *
+ * Your feedback is appreciated.
+ *
+ * <em>NOTE: Due to {@link Array} limitations, the maximum
+ * supported string length is 2³²−1 characters.</em>
+ *
+ * @section {Copyright & Disclaimer}
+ *
+ * @author (C) 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.string == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.string = {};
+}
+
+/**
+ * @type jsx.string.unicode
+ * @memberOf __jsx.string.unicode
+ * @namespace
+ */
+jsx.string.unicode = (/** @constructor */ function () {
+ var String_prototype_charCodeAt = "".charCodeAt;
+
+ var _isArray = jsx.object.isArray;
+
+ /* Handles characters in UTF-16 encoding from U+0000 to U+10FFFF */
+ var _rxWideString = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
+ var _rxString = /[\uD800-\uDBFF][\uDC00-\uDFFF]|[\S\s]/g;
+
+ /**
+ * @private
+ * @param {String} s
+ * String to be split into an array of characters
+ * @return {Array}
+ */
+ function _toCharArray (s)
+ {
+ return (s ? (String(s).match(_rxString) || []) : []);
+ }
+
+ /**
+ * Converts a {@link String} value to a wide string.
+ * <p>
+ * A <code>WideString</code> supports all operations and methods
+ * supported on <code>String</code> values also for Unicode
+ * characters outside the Basic Multilingual Plane (BMP), that
+ * is, code points from U+0000 to U+10FFFF inclusive. Because
+ * strings of characters are stored as an {@link Array} of
+ * <code>String</code>s, operations where such characters are
+ * more common are faster than with the <code>String</code>
+ * prototype augmentation. In other cases you should use
+ * the augmentation instead.
+ * </p><p>
+ * You may call a <code>WideString</code>'s
+ * {@link WideString#prototype.toString toString()} method
+ * (implicitly called in string context, like concatenation)
+ * to convert it back to a <code>String</code> value.
+ * </p><p>
+ * <em>NOTE: Due to <code>Array</code> limitations, a
+ * <code>WideString</code> may not contain more than
+ * 2³²−1 Unicode characters. Also note that normalization
+ * is <strong>not</strong> performed at the moment.</em>
+ * </p>
+ * @type jsx.string.unicode.WideString
+ * @extends String
+ * @constructor
+ */
+ var _WideString = (
+ /**
+ * @param {String} s
+ * @return {jsx.string.unicode.WideString}
+ */
+ function _jsx_string_unicode_WideString (s) {
+ /* Factory support */
+ if (!(this instanceof _jsx_string_unicode_WideString))
+ {
+ return new _jsx_string_unicode_WideString(s);
+ }
+
+ /**
+ * @private
+ * @type Array
+ */
+ var _chars =
+ _isArray(s)
+ ? s
+ : (s instanceof _jsx_string_unicode_WideString
+ ? s.getChars()
+ : _toCharArray(s));
+
+ /**
+ * Returns the characters in this object as an {@link Array}
+ * of {@link String}s.
+ *
+ * @protected
+ * @return {Array}
+ */
+ this.getChars = function () {
+ return _chars;
+ },
+
+ /**
+ * @field
+ * @name chars
+ * @type Array
+ * @memberOf jsx.string.unicode.WideString
+ * @see #getChars()
+ */
+ jsx.object.defineProperty(this, "chars", {"get": this.getChars});
+ }
+ ).extend(String, {
+ /**
+ * Returns the character at the specified position.
+ *
+ * <em>NOTE: A single Unicode character may be composed out of
+ * several other characters. Normalization is not performed.</em>
+ *
+ * @memberOf jsx.string.unicode.WideString#prototype
+ * @param {int} position
+ * If not an integer, replaced with the closest integer.
+ * @return {string}
+ * If <code><var>position</var></code> is greater than or
+ * equal to zero, the character at that position, counted
+ * from zero.
+ * If <code><var>position</var></code> is less than zero,
+ * it is treated as the number of characters in this object
+ * + <code><var>position</var></code>; that is,
+ * <code><var>position</var> === -1</code>
+ * returns the last character.
+ * If <code><var>position</var></code> is replaceable with
+ * an integer out of this range, <code>undefined</code>
+ * is returned.
+ * By contrast, if <code><var>position</var></code> is
+ * not a <code>Number</code>, the return value is
+ * <strong>not defined</strong>.
+ */
+ charAt: function (position) {
+ var chars = this.getChars();
+ position = (position < 0 ? Math.ceil(position) : Math.floor(position));
+ return (position < 0
+ ? chars[chars.length + position]
+ : chars[position]);
+ },
+
+ /**
+ * Returns the Unicode code point value of the character
+ * in this object at the specified position.
+ *
+ * <em>NOTE: A single Unicode character may be composed out of
+ * several other characters. Normalization is not performed.</em>
+ *
+ * @memberOf jsx.string.unicode.WideString#prototype
+ * @param {Number} position
+ * If not an integer, replaced with the closest integer.
+ * @return {number}
+ * If <code><var>position</var></code> is greater than or
+ * equal to zero, the code point value of the character
+ * at that position, counted from zero.
+ * If <code><var>position</var></code> is less than zero,
+ * it is treated as the number of characters in this object
+ * + <code><var>position</var></code>; that is,
+ * <code><var>position</var> === -1</code>
+ * returns the code point value of the last character.
+ * If <code><var>position</var></code> is replacable with
+ * an integer value out of this range, <code>NaN</code>
+ * is returned.
+ * By contrast, if <code><var>position</var></code> is
+ * not a <code>Number</code>, the return value is
+ * <strong>not defined</strong>.
+ * @see #charAt()
+ */
+ charCodeAt: function (position) {
+ var ch = this.charAt(position);
+ if (typeof ch == "undefined")
+ {
+ return NaN;
+ }
+
+ if (/^[\uD800-\uDBFF]/.test(ch))
+ {
+ var leadSurrogate = String_prototype_charCodeAt.call(ch, 0);
+ var trailSurrogate = String_prototype_charCodeAt.call(ch, 1);
+
+ var leadBits = (leadSurrogate - 0xD800) << 10;
+ var trailBits = trailSurrogate - 0xDC00;
+ var bmpOffset = 0x10000;
+
+ return leadBits + trailBits + bmpOffset;
+ }
+
+ return String_prototype_charCodeAt.call(ch, 0);
+ },
+
+ /**
+ * Concatenates this string with other strings
+ * and returns the result.
+ *
+ * Returns the <code>WideString</code> resulting from
+ * concatenating the list of characters in this object with
+ * the list of the arguments' characters.
+ *
+ * @function
+ */
+ concat: (function () {
+ var _slice = [].slice;
+
+ /**
+ * @params {WideString|String}
+ * @return {WideString}
+ */
+ function _concat ()
+ {
+ return new this.constructor(this.toString()
+ + _slice.call(arguments).join(""));
+ }
+
+ return _concat;
+ }()),
+
+ /**
+ * Returns the number of characters in this string
+ *
+ * @return {int}
+ * @see #length
+ */
+ getLength: function () {
+ return this.getChars().length;
+ },
+
+ /**
+ * Returns the index of the first position of a substring
+ * in this string.
+ *
+ * @param {jsx.string.unicode.WideString|String} searchString
+ * Substring to look for.
+ * @param {int} position
+ * Position from where to start searching. The default is
+ * <code>0</code>.
+ * @return {number}
+ */
+ indexOf: function (searchString, position) {
+ var needleChars = searchString instanceof this.constructor
+ ? searchString.getChars()
+ : _toCharArray(searchString);
+ var needleLen = needleChars.length;
+ var needleString = needleChars.join("");
+ var chars = this.getChars();
+ for (var i = (typeof position == "undefined"
+ ? 0
+ : (position < 0 ? 0 : Math.floor(position))),
+ len = chars.length - needleLen + 1;
+ i < len; ++i)
+ {
+ if (chars.slice(i, i + needleLen).join("") == needleString)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ /**
+ * Returns the index of the last position of a substring
+ * in this string.
+ *
+ * @param {jsx.string.unicode.WideString|String} searchString
+ * Substring to look for.
+ * @param {int} position
+ * Position from where to start searching backwards.
+ * The default is the position of the last character.
+ * @return {number}
+ */
+ lastIndexOf: function (searchString, position) {
+ var needleChars = searchString instanceof this.constructor
+ ? searchString.getChars()
+ : _toCharArray(searchString);
+ var needleLen = needleChars.length;
+ var needleString = needleChars.join("");
+ var chars = this.getChars();
+ for (var i = (typeof position == "undefined"
+ ? chars.length - needleLen
+ : (position < 0 ? 0 : Math.floor(position)))
+ + 1;
+ i--;)
+ {
+ if (chars.slice(i, i + needleLen).join("") == needleString)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ /**
+ * Returns a slice (substring) of this string.
+ *
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} end
+ * Position of the first Unicode character that should not be
+ * included in the slice.
+ * @return {jsx.string.unicode.WideString}
+ * @see String.prototype#slice()
+ */
+ slice: function (start, end) {
+ return new this.constructor(
+ this.getChars().slice(start, end).join(""));
+ },
+
+ /**
+ * Returns a substring of this string.
+ *
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} length
+ * Number of Unicode characters in the substring.
+ * If omitted or <code>undefined</code>, the substring
+ * contains all characters from <code>start</code>
+ * to the end of this string.
+ * @return {jsx.string.unicode.WideString}
+ * @see #slice()
+ * @see String.prototype#substr()
+ */
+ substr: function (start, length) {
+ return this.slice(start,
+ typeof length == "undefined"
+ ? length
+ : start + length);
+ },
+
+ /**
+ * Returns a substring of this string.
+ *
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} end (optional)
+ * Position of the first Unicode character that should not be
+ * included in the slice. If <code><var>start</var></code>
+ * is larger than <code><var>end</var></code>, they are swapped.
+ * @return {jsx.string.unicode.WideString}
+ * @see String.prototype#substring()
+ */
+ substring: function (start, end) {
+ if (start > end)
+ {
+ var tmp = start;
+ start = end;
+ end = tmp;
+ }
+
+ return new this.constructor(
+ this.getChars().slice(start, end).join(""));
+ },
+
+ /**
+ * Returns the characters in this object as a primitive
+ * string value.
+ *
+ * @return {string}
+ */
+ toString: function () {
+ return this.getChars().join("");
+ },
+
+ /**
+ * @see #toString()
+ */
+ valueOf: function () {
+ return this.toString();
+ }
+ });
+
+ /**
+ * @name length
+ * @type int
+ * @memberOf jsx.string.unicode.WideString#prototype
+ * @see #getLength()
+ */
+ jsx.object.defineProperty(_WideString.prototype, "length", {
+ "get": function () {
+ return this.getLength();
+ }
+ });
+
+ /**
+ * Returns the <code>string</code> value consisting of the
+ * characters specified by their code point values.
+ *
+ * @function
+ * @name jsx.string.unicode.WideString.fromCharCode
+ */
+ _WideString.fromCharCode = (function () {
+ var String_fromCharCode = String.fromCharCode;
+
+ /**
+ * @params {int}
+ * @return {jsx.string.unicode.WideString}
+ */
+ function _fromCharCode ()
+ {
+ var chars = [];
+
+ for (var i = 0, len = arguments.length; i < len; ++i)
+ {
+ var arg = Math.floor(arguments[i]);
+ var ch;
+
+ if (arg > 0x10FFFF)
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Unsupported Unicode code point value",
+ "0x" + arg.toString(16).toUpperCase(),
+ "0x0000..0x10FFFF"]);
+ }
+
+ if (arg > 0xFFFF)
+ {
+ var bmpOffset = arg - 0x10000;
+ var leadSurrogate = 0xD800 + ((bmpOffset >> 10) & 0x3FF);
+ var trailSurrogate = 0xDC00 + (bmpOffset & 0x3FF);
+
+ ch = String_fromCharCode(leadSurrogate, trailSurrogate);
+ }
+ else
+ {
+ ch = String_fromCharCode(arg);
+ }
+
+ chars.push(ch);
+ }
+
+ return new _WideString(chars);
+ }
+
+ return _fromCharCode;
+ }());
+
+ if (jsx.options.augmentBuiltins)
+ {
+ if (jsx.options.augmentPrototypes)
+ {
+ jsx.object.extend(String.prototype, (function () {
+ /**
+ * @type jsx.string.unicode.WideString
+ */
+ var _prevWideString = null;
+
+ /**
+ * Returns the {@link jsx.string.unicode.WideString WideString}
+ * created from this <code>String</code>.
+ * <p>
+ * NOTE: The previously created <code>WideString</code> is
+ * retained in <code><var>prevWideString</var></code>, which
+ * increases runtime efficiency with subsequent method calls
+ * on the same string. Caching <em>all</em> previous values
+ * would also increase runtime efficiency, but decrease memory
+ * efficiency at the same time, as unused <code>WideString</code>s
+ * could not be garbage-collected.<br>
+ * Calling <code>toString</code> is required so that primitive
+ * values, not object references, are compared (the latter
+ * would always be <code>false</code> with internal wrapper
+ * <code>String</code> objects created from primitive
+ * string values).
+ * </p>
+ * @param {String} s
+ * @return {jsx.string.unicode.WideString}
+ */
+ function _createWideString (s)
+ {
+ return (_prevWideString && _prevWideString.toString() == s
+ ? _prevWideString
+ : (_prevWideString = new _WideString(s)));
+ }
+
+ return {
+ /**
+ * Returns the character in this string
+ * at the specified position.
+ * <p>
+ * Differs from the built-in {@link String.prototype#charAt}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units,
+ * and that the position may be negative, counting from
+ * the end of the string.
+ * </p>
+ * @memberOf String.prototype
+ * @param {Number} position
+ * @return {string}
+ * @see String.prototype#charAt()
+ * @see jsx.string.unicode.WideString.prototype#charAt()
+ */
+ charAt: function (position) {
+ return _createWideString(this).charAt(position);
+ },
+
+ /**
+ * Returns the Unicode code point value of the character
+ * in this string at the specified position.
+ * <p>
+ * Differs from the built-in {@link String.prototype#charCodeAt}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units,
+ * and that the position may be negative, counting from
+ * the end of the string.
+ * </p>
+ * @param {Number} position
+ * @return {number}
+ * @see String.prototype#charCodeAt()
+ * @see jsx.string.unicode.WideString.prototype#charCodeAt()
+ */
+ charCodeAt: function (position) {
+ return _createWideString(this).charCodeAt(position);
+ },
+
+ /**
+ * Returns the number of Unicode characters in this string.
+ * <p>
+ * Differs from the built-in {@link string#length length}
+ * property in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @return {number}
+ * @see string#length
+ */
+ getLength: function () {
+ return _createWideString(this).getLength();
+ },
+
+ /**
+ * Returns the index of the first position of a substring
+ * in this string.
+ * <p>
+ * Differs from the built-in {@link String.prototype#indexOf}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @param {jsx.string.unicode.WideString|String} searchString
+ * Substring to look for.
+ * @param {int} position
+ * Position from where to start searching. The default is
+ * <code>0</code>.
+ * @return {number}
+ * @see String.prototype#indexOf()
+ */
+ indexOf: function (searchString, position) {
+ return _createWideString(this).indexOf(searchString, position);
+ },
+
+ /**
+ * Returns the index of the last position of a substring
+ * in this string.
+ * <p>
+ * Differs from the built-in {@link String.prototype#lastIndexOf}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @param {jsx.string.unicode.WideString|String} searchString
+ * Substring to look for.
+ * @param {int} position
+ * Position from where to start searching backwards.
+ * The default is the position of the last character.
+ * @return {number}
+ * @see String.prototype#lastIndexOf()
+ */
+ lastIndexOf: function (searchString, position) {
+ return _createWideString(this).lastIndexOf(searchString, position);
+ },
+
+ /**
+ * Returns a slice (substring) of this string.
+ * <p>
+ * Differs from the built-in {@link String.prototype#slice}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @see String.prototype#slice()
+ */
+ slice: (function () {
+ var String_prototype_slice = "".slice;
+
+ /**
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} end
+ * Position of the first Unicode character that should not be
+ * included in the slice.
+ * @return {string}
+ */
+ return function (start, end) {
+ return _rxWideString.test(this)
+ ? _createWideString(this).slice(start, end).toString()
+ : String_prototype_slice.apply(this, arguments);
+ };
+ }()),
+
+ /**
+ * Returns a substring of this string.
+ * <p>
+ * Differs from the built-in (non-standard)
+ * {@link String.prototype#substr} method in that it
+ * considers characters with code points beyond U+FFFF
+ * that require several UTF-16 code units.
+ * </p>
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} length
+ * Number of Unicode characters in the substring.
+ * If omitted or <code>undefined</code>, the substring
+ * contains all characters from <code>start</code>
+ * to the end of this string.
+ * @return {string}
+ * @see String.prototype#substr()
+ * @see jsx.string.unicode.WideString.prototype#substr()
+ */
+ substr: function (start, length) {
+ return _createWideString(this).substr(start, length).toString();
+ },
+
+ /**
+ * Returns a substring of this string.
+ * <p>
+ * Differs from the built-in {@link String.prototype#substring}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @see String.prototype#substring()
+ */
+ substring: (function () {
+ var String_prototype_substring = "".substring;
+
+ /**
+ * @param {int} start
+ * Position of the Unicode character from where to start slicing.
+ * @param {int} end (optional)
+ * Position of the first Unicode character that should not be
+ * included in the slice. If <code><var>start</var></code>
+ * is larger than <code><var>end</var></code>, they are swapped.
+ * @return {string}
+ */
+ return function (start, end) {
+ return _rxWideString.test(this)
+ ? _createWideString(this).substring(start, end).toString()
+ : String_prototype_substring.apply(this, arguments);
+ };
+ }())
+ };
+ }()), jsx.object.ADD_OVERWRITE);
+ }
+ }
+
+ if (jsx.options.replaceBuiltins)
+ {
+ jsx.object.extend(String, {
+ /**
+ * Returns a {@link String} containing the Unicode characters
+ * specified by the code point arguments.
+ * <p>
+ * Differs from the built-in {@link String#fromCharCode}
+ * method in that it considers characters with code points
+ * beyond U+FFFF that require several UTF-16 code units.
+ * </p>
+ * @memberOf String
+ * @params {Number}
+ * Code points of the characters from <code>0</code> to
+ * <code>0x10FFFF</code> inclusive.
+ * @return {string}
+ */
+ fromCharCode: function () {
+ return _WideString.fromCharCode.apply(this, arguments).toString();
+ }
+ }, jsx.object.ADD_OVERWRITE);
+ }
+
+ return {
+ /**
+ * @memberOf jsx.string.unicode
+ */
+ WideString: _WideString
+ };
+}());
\ No newline at end of file
/live/string/unicode.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/string/hyphenation.js
===================================================================
--- live/string/hyphenation.js (nonexistent)
+++ live/string/hyphenation.js (revision 509)
@@ -0,0 +1,192 @@
+/**
+ * @fileOverview <title>PointedEars' JSX: String Library -- Hyphenation</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author (C) 2012, 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.string == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.string = {};
+};
+
+jsx.string.hyphenation = (function () {
+ "use strict";
+ var _jsx = jsx;
+ var _jsx_object = _jsx.object;
+ var _getDataObject = _jsx_object.getDataObject;
+ var _getKeys = _jsx_object.getKeys;
+ var _map = _jsx.array.map;
+
+ var _dictionary = _getDataObject();
+ var _hyphenateAll = false;
+ var _rxWord = /(^|\s)(\S+)([\s,;:.?!\)\]]|$)/g;
+ var _rxWords;
+
+ /* U+00B7 MIDDLE DOT (often found in online dictionaries) */
+ var _rxHyphen = /[-\u00b7]/g;
+
+ var _chShy = "\u00ad";
+ var _rxShy = new RegExp(_chShy, "g");
+
+ var _compiled = false;
+ var _compile = function () {
+ _rxWords = new RegExp("(^|\\s)("
+ + _getKeys(_dictionary).join("|")
+ + ")([\\s,;:.?!\\)\\]]|$)", "g");
+ _compiled = true;
+ };
+
+ var hyphenation = {
+ /**
+ * Loads a dictionary. The dictionary should contain at least
+ * one {@link jsx.string.hyphenation#addRule} or
+ * {@link jsx.string.hyphenation#addRules} call.
+ *
+ * @param {String} dictionary
+ * URI of the dictionary
+ * @return {boolean}
+ * <code>true</code> if the dictionary could be successfully
+ * <em>loaded</em> (not: included), <code>false</code> otherwise.
+ * @requires jsx.net.http#Request
+ * @see jsx#importFrom
+ */
+ loadDictionary: function (dictionary) {
+ return jsx.importFrom(dictionary);
+ },
+
+ /**
+ * Loads several dictionaries. A dictionary should contain
+ * at least one {@link jsx.string.hyphenation#addRule} or
+ * {@link jsx.string.hyphenation#addRules} call.
+ *
+ * @param {Array} dictionaries
+ * URIs of the dictionaries
+ * @param {Boolean} returnEarly (optional)
+ * If <code>true</code>, return as soon as loading one
+ * dictionary fails. The default is <code>false</code>.
+ * @return {boolean}
+ * <code>true</code> if all dictionaries could be successfully
+ * <em>loaded</em> (not: included), <code>false</code> otherwise.
+ * @requires jsx.net.http#Request
+ * @see jsx#importFrom
+ */
+ loadDictionaries: function (dictionaries, returnEarly) {
+ var success = true;
+
+ for (var i = 0, len = dictionaries.length; i < len; ++i)
+ {
+ if (!this.addDictionary(dictionaries[i]))
+ {
+ success = false;
+ }
+
+ if (returnEarly && !success)
+ {
+ return success;
+ }
+ }
+
+ return success;
+ },
+
+ /**
+ * @memberOf jsx.string.hyphenation
+ * @param rule
+ * @returns
+ */
+ addRule: function (rule) {
+ _dictionary[rule.replace(_rxHyphen, "")] = rule.replace(_rxHyphen, _chShy);
+ _compiled = false;
+ },
+
+ addRules: function (rules) {
+ for (var i = 0, len = rules.length; i < len; ++i)
+ {
+ this.addRule(rules[i]);
+ }
+ },
+
+ getRules: function () {
+ return _map(
+ _getKeys(_dictionary),
+ function (key) {
+ return _dictionary[key].replace(_rxShy, "-");
+ });
+ },
+
+ removeRule: function (rule) {
+ delete _dictionary[rule];
+ _compiled = false;
+ },
+
+ reset: function () {
+ _dictionary = _getDataObject();
+ _compiled = false;
+ },
+
+ getHyphenateAll: function () {
+ return _hyphenateAll;
+ },
+
+ setHyphenateAll: function (hyphenateAll) {
+ _hyphenateAll = !!hyphenateAll;
+ },
+
+ hyphenate: function (s) {
+ if (!_compiled)
+ {
+ _compile();
+ }
+
+ return s.replace(_hyphenateAll ? _rxWord : _rxWords,
+ function (match, wsp1, word, wsp2) {
+ if (_hyphenateAll && !_dictionary[word])
+ {
+ return match;
+ }
+
+ return wsp1 + _dictionary[word] + wsp2;
+ });
+ }
+ };
+
+ _jsx_object.defineProperties(hyphenation, {
+ rules: {
+ "get": function () {
+ return this.getRules();
+ }
+ }
+ });
+
+ return hyphenation;
+}());
\ No newline at end of file
/live/string/hyphenation.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/array.js
===================================================================
--- live/array.js (nonexistent)
+++ live/array.js (revision 509)
@@ -0,0 +1,1508 @@
+/**
+ * @fileOverview <title>Array Library</title>
+ * @file $Id$
+ *
+ * @author (C) 2004-2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ * <pre>
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ * </pre>
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.array == "undefined")
+{
+ jsx.array = {};
+}
+
+/**
+ * @type jsx.array
+ * @memberOf __jsx.array
+ * @namespace
+ */
+jsx.array = (/** @constructor */ function () {
+ /* Imports */
+ var _jsx = jsx;
+ var _jsx_object = _jsx.object;
+ var _defineProperty = _jsx_object.defineProperty;
+ var _getClass = _jsx_object.getClass;
+ var _getKeys = _jsx_object.getKeys;
+ var _hasOwnProperty = _jsx_object._hasOwnProperty;
+ var _isArray = _jsx_object.isArray;
+ var _isNativeObject = _jsx_object.isNativeObject;
+
+ /* Constant-like variables */
+ var _MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+ var _isNativeMethod = _jsx_object.isNativeMethod;
+
+ /**
+ * @param {Array} a (optional)
+ * Array to which an element should be appended. Is used instead
+ * of the <code>Array</code> object the function is applied to.
+ * @param value (optional)
+ * @return {Array}
+ * The changed array.
+ */
+ function _array_push (a, value)
+ {
+ if (!_isArray(a) && _isArray(this))
+ {
+ value = a;
+ a = this;
+ }
+
+ for (var i = 0, len = arguments.length; i < len; i++)
+ {
+ a[a.length] = arguments[i];
+ }
+
+ return a;
+ }
+
+ /**
+ * Takes input array <code>a</code> or the <code>Array</code> object
+ * it is applied to as method and returns a new <code>Array</code>
+ * object with all string elements (optionally all elements regardless
+ * of their type) either lowercased or uppercased.
+ *
+ * @param {Array} a (optional)
+ * Array which elements should be changed. Is used instead
+ * of the Array object the function is applied to.
+ * @param {boolean} bUppercase = false
+ * If <code>false</code> (default), changes the elements to
+ * be all lowercase. If <code>true</code>, changes them to
+ * be all uppercase.
+ * @param {boolean} bConvertNonStrings = false
+ * If <code>false</code> default, changes only the case of
+ * string elements. If <code>true</code>, converts non-string
+ * elements to <code>string</code> and changes their case.
+ * @return {Array}
+ * A copy of <code>a</code> or the Array object with its
+ * elements' value uppercased or lowercased. If <code>a</code>
+ * has no elements, an empty array is returned.
+ */
+ function _changeCase (a, bUppercase, bConvertNonStrings) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ bConvertNonStrings = bUppercase;
+ bUpperCase = a;
+ a = this;
+ }
+
+ if (_isArray(a))
+ {
+ for (var i = 0; i < a.length; i++)
+ {
+ if (bConvertNonStrings || typeof a[i] == "string")
+ {
+ if (bUppercase)
+ {
+ a[i] = String(a[i]).toUpperCase();
+ }
+ else
+ {
+ a[i] = String(a[i]).toLowerCase();
+ }
+ }
+ }
+
+ return a;
+ }
+
+ return [];
+ }
+
+ /**
+ * Array index out of range
+ *
+ * @type jsx.array.RangeError
+ * @extends RangeError|jsx.InvalidArgumentError
+ * @constructor
+ */
+ var _RangeError = (
+ function (sReason, sGot, sExpected) {
+ _jsx.InvalidArgumentError.apply(this, arguments);
+ }
+ ).extend(
+ typeof RangeError == "function"
+ ? RangeError
+ : _jsx.InvalidArgumentError,
+ {
+ name: "jsx.array.RangeError"
+ });
+
+ /**
+ * Array-like object which can hold up to 2<sup>53</sup> elements
+ *
+ * @function
+ * @type jsx.array.BigArray
+ * @extends Array
+ * @constructor
+ */
+ var _BigArray = jsx.object.extend(
+ /**
+ * @type __jsx.array.BigArray
+ * @param {Array|Object} src (optional)
+ * Array-like object to be converted
+ * @return {jsx.arrayBigArray}
+ */
+ function jsx_array_BigArray (src) {
+ if (!(this instanceof jsx_array_BigArray))
+ {
+ return jsx_array_BigArray.construct(arguments);
+ }
+
+ /**
+ * @memberOf __jsx.array.BigArray
+ * @private
+ */
+ var _length = 0;
+
+ /**
+ * Sets the real length of this array
+ *
+ * @param {int} value
+ * @throws jsx.array.RangeError
+ * if the value is less than <code>0</code> or
+ * greater than {@link BigArray.MAX_LENGTH}
+ */
+ this.setLength = function BigArray_setLength (value) {
+ if (value < 0 || value > _BigArray.MAX_LENGTH)
+ {
+ return _jsx.throwThis(_RangeError,
+ ["Invalid length", value,
+ "0.." + _BigArray.MAX_LENGTH
+ + " (2^" + Math.floor(Math.log(_BigArray.MAX_LENGTH) / Math.log(2)) + ")"],
+ BigArray_setLength);
+ }
+
+ _length = Math.floor(value);
+
+ return this;
+ };
+
+ /**
+ * Returns the real length of this array
+ *
+ * @return {int}
+ */
+ this.getLength = function () {
+ return _length;
+ };
+
+ /**
+ * @memberOf jsx.array.BigArray
+ * @name length
+ */
+ _defineProperty(this, "length", {
+ "get": this.getLength,
+ "set": this.setLength
+ }, "jsx.array.BigArray");
+
+ this.clear();
+
+ var arglen = arguments.length;
+ if (arglen > 1)
+ {
+ for (var i = arglen; i--;)
+ {
+ this.set(i, arguments[i]);
+ }
+ }
+ else if (arglen == 1)
+ {
+ var t = typeof src;
+ if (t == "number")
+ {
+ this.setLength(src);
+ }
+ else
+ {
+ if (!_isArray(src) && _isNativeObject(src)
+ && _getClass(src) != "Object")
+ {
+ this.set(0, src);
+ }
+ else
+ {
+ this.setAll(src);
+ }
+ }
+ }
+ },
+ {
+ /**
+ * Maximum number of elements that can be stored in
+ * a <code>BigArray</code>. Successor of the greatest
+ * integer value that can be used as index.
+ *
+ * @memberOf jsx.array.BigArray
+ */
+ MAX_LENGTH: Math.pow(2, 53),
+
+ /**
+ * Determines if a value can be used as <code>BigArray</code>
+ * index.
+ *
+ * @param {any} i
+ */
+ isIndex: function (i) {
+ return parseInt(i, 10).toString() == i
+ && i > -1 && i < _BigArray.MAX_LENGTH;
+ },
+
+ /**
+ * Determines if an object is a <code>BigArray</code>.
+ *
+ * @param {Object} o
+ * @return {boolean}
+ */
+ isInstance: function (o) {
+ return o.constructor == _BigArray;
+ }
+ }
+ ).extend(Array, {
+ /**
+ * Removes all elements from the array
+ *
+ * @memberOf jsx.array.BigArray.prototype
+ */
+ clear: function () {
+ for (var i in this)
+ {
+ if (_BigArray.isIndex(i))
+ {
+ delete this[i];
+ }
+ }
+
+ this.setLength(0);
+ },
+
+ /**
+ * @param {int} index
+ * @return {any} the element of this array at <var>index</var>
+ */
+ get: function BigArray_get (index) {
+ if (arguments.length < 1)
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", "", "(int)"],
+ BigArray_get);
+ }
+
+ if (index < 0)
+ {
+ index = this.getLength() + Math.ceil(index);
+ }
+ else
+ {
+ index = Math.floor(index);
+ }
+
+ return this[index];
+ },
+
+ /**
+ * Sets the element at <var>index</var> to <var>value</var>
+ *
+ * @param {int} index
+ * @param {any} value
+ */
+ set: function (index, value) {
+ var length = this.getLength();
+
+ if (index < 0)
+ {
+ index = length + Math.ceil(index);
+ }
+ else
+ {
+ index = Math.floor(index);
+ }
+
+ if (length < index + 1)
+ {
+ this.setLength(index + 1);
+ }
+
+ this[index] = value;
+
+ return this;
+ },
+
+ /**
+ * Sets all elements based on another object.
+ *
+ * @param {Object} src
+ * If an <code>Array</code> or </code>BigArray</code>,
+ * copies all array elements (enumerable properties whose
+ * name is an array index) to this array.
+ * Otherwise, copies all properties with numeric name, from
+ * 0 to the name specified by the value of the object's
+ * <code>length</code> property, to this array.
+ */
+ setAll: function (src) {
+ if (_isArray(src) || src instanceof _BigArray)
+ {
+ for (var i in src)
+ {
+ if (_BigArray.isIndex(i))
+ {
+ this.set(i, src[i]);
+ }
+ }
+ }
+ else
+ {
+ for (i = src.length; i--;)
+ {
+ if (_BigArray.isIndex(i))
+ {
+ this.set(i, src[i]);
+ }
+ }
+ }
+ },
+
+ /**
+ * Returns the string representations of this array's
+ * elements, separated by another string (representation).
+ *
+ * @param {String} glue
+ * The separator between the string representations
+ * @return {string}
+ */
+ join: function (glue) {
+ var len = this.getLength();
+ var _join = [].join;
+
+ if (len <= _MAX_ARRAY_LENGTH)
+ {
+ return _join.apply(this, arguments);
+ }
+
+ if (arguments.length < 1)
+ {
+ glue = ",";
+ }
+
+ var chunks = [];
+ var chunk_index = 0;
+
+ for (var i = 0; i < len; ++i)
+ {
+ var chunk = chunks[chunk_index];
+ if (typeof chunk == "undefined")
+ {
+ chunk = chunks[chunk_index] = [];
+ }
+
+ if (chunk.length < _MAX_ARRAY_LENGTH)
+ {
+ chunk.push(this.get(i))
+ }
+ else
+ {
+ chunks[chunk_index++] = _join.apply(chunk, arguments);
+ }
+ }
+
+ return _join.apply(chunks, arguments);
+ },
+
+ /**
+ * Returns this <code>BigArray</code> as an {@link Array},
+ * with extra indexes if necessary.
+ *
+ * <em>Note that the returned <code>Array</code>'s {@link Array#length}
+ * property does not reflect the highest index in the array if
+ * it is greater than the one supported by the implementation
+ * for <code>Array</code>s (ES 5.x: 2³²−1). However, the extra
+ * indexes are enumerable.</em>
+ *
+ * <strong>There is no point in calling this method unless you
+ * really need an <code>Array</code>. The original object
+ * inherits from <code>Array.prototype</code>, known methods are
+ * overridden if necessary, and all its indexes are enumerable.</strong>
+ *
+ * @return {Array}
+ */
+ toArray: function () {
+ var a = [];
+
+ /* Speed up addition of elements */
+ a.length = Math.min(_MAX_ARRAY_LENGTH, this.getLength());
+
+ for (var i in this)
+ {
+ if (_BigArray.isIndex(i))
+ {
+ a[i] = this.get(i);
+ }
+ }
+
+ return a;
+ },
+
+ /**
+ * Returns the string representation of this array
+ * as a comma-separated list.
+ */
+ toString: function () {
+ return this.join(",");
+ }
+ });
+
+ return {
+ /**
+ * @memberOf jsx.array
+ */
+ version: "0.1.$Rev$",
+ copyright: "Copyright \xA9 2004-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://pointedears.de/scripts/",
+
+ /**
+ * @param {string} sMsg (optional)
+ * @return {boolean} false
+ */
+ ArrayError: function(sMsg) {
+ alert(
+ "array.js "
+ + Array.version
+ + "\n"
+ + Array.copyright
+ + " "
+ + Array.author
+ + " <"
+ + Array.Email
+ + ">\n\n"
+ + sMsg);
+ return false;
+ },
+
+ BigArray: _BigArray,
+ RangeError: _RangeError,
+
+ /**
+ * Splits the array <code>a</code> into several arrays with
+ * <code>iSize</code> values in them.
+ *
+ * @param {Array} a
+ * (optional) Array which should be split. Is used instead of
+ * the <code>Array</code> instance the function is applied to.
+ * @param {Number} iSize
+ * Maximum size of the resulting arrays.
+ * An array of arrays indexed with numbers starting from zero.
+ */
+ chunk: function (a, iSize) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ iSize = a;
+ a = this;
+ }
+
+ var arrays = new Array([]);
+
+ var i = 0;
+ if (_jsx_object.isMethod(a, "slice"))
+ {
+ while (i < a.length)
+ {
+ arrays[arrays.length] = a.slice(i, i + iSize);
+ i += iSize;
+ }
+ }
+ else
+ {
+ var index;
+ for (i = 0, index = 0; i < a.length; i++)
+ {
+ if (arrays[index].length == iSize)
+ {
+ arrays[++index] = [];
+ }
+
+ _array_push(arrays[index], a[i]);
+ }
+ }
+ },
+
+ /**
+ * Returns an object using the values of the array <code>a</code>
+ * as properties and their frequency in <code>a</code> as values.
+ *
+ * @param {Array} a
+ * (optional) Array which values should be counted. Is used
+ * instead of the <code>Array</code> instance the function is
+ * applied to.
+ * @return {Object}
+ */
+ countValues: function (a) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ a = this;
+ }
+
+ var o = {};
+
+ for (var i = 0; i < a.length; i++)
+ {
+ if (typeof o[a[i]] != "undefined")
+ {
+ o[a[i]]++;
+ }
+ else
+ {
+ o[a[i]] = 1;
+ }
+ }
+
+ return o;
+ },
+
+ /**
+ * Fills an array with <code>iNumber</code> entries of the value
+ * of the <code>value</code> argument, indexes starting at the
+ * value of the <code>iStart</code> argument.
+ *
+ * @param {Array} a
+ * (optional) Array which should be filled. Is used instead
+ * of the {@link Array} object the function is applied to.
+ * @param {Number} iStart
+ * Index where to start filling
+ * @param {Number} iNumber
+ * Number of elements to be filled, starting from <code>iStart</code>
+ * @param value (optional)
+ * The value the array should be filled with
+ * @return {Array} The filled array
+ */
+ fill: function (a, iStart, iNumber, value) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ a = this;
+ }
+
+ if (!_isArray(a))
+ {
+ a = [];
+ }
+
+ for (var i = iStart; i < iStart + iNumber; i++)
+ {
+ a[i] = value;
+ }
+
+ return a;
+ },
+
+ /**
+ * Returns an array containing all the elements of another
+ * array filtered according to a callback function.
+ *
+ * @param {Function} fCallback
+ * A function accepting a single argument that returns
+ * a value to be interpreted either as <code>true</code>
+ * or <code>false</code>. If it returns <code>true</code>
+ * for the element of <code>a</code>, that element is
+ * included in the resulting array, otherwise it is not.
+ * @param {Array} a (optional)
+ * Array which should be filtered. Is used instead of the
+ * <code>Array</code> object the function is applied to.
+ * @return Array
+ */
+ filter: function (fCallback, a) {
+ if (a)
+ {
+ /* support for old-style calls */
+ if (typeof a == "function")
+ {
+ if (_isArray(fCallback))
+ {
+ var tmp = a;
+ fCallback = a;
+ a = tmp;
+ }
+ else
+ {
+ _jsx.throwThis('TypeError');
+ }
+ }
+ else
+ {
+ /* intentionally generic */
+ a = this;
+ }
+ }
+
+ var len = this.length;
+
+ if (typeof fCallback != "function")
+ {
+ _jsx.throwThis('TypeError');
+ }
+
+ var res = [];
+
+ for (var i = 0; i < len; i++)
+ {
+ if (i in this)
+ {
+ /* mozilla.org: in case fCallback mutates `this'(?) */
+ var val = this[i];
+
+ if (fCallback.call(a, val, i, this))
+ {
+ res.push(val);
+ }
+ }
+ }
+
+ return res;
+ },
+
+ /**
+ * Returns a function that can be used for filtering an {@link Array}
+ * by the property values of its elements.
+ *
+ * @param {Object} filter
+ * Object whose property names are the elements' property
+ * names, and whose property values are the element's property
+ * values to compare against
+ * @param {boolean} bStrict = false
+ * If <code>true</code>, perform strict comparison.
+ * @return {Function}
+ * The filter function
+ * @see jsx.array.filter
+ */
+ createFilter: function (filter, bStrict) {
+ var keys = _getKeys(filter);
+
+ /**
+ * @param {any} element
+ * @return {boolean}
+ */
+ return function (element) {
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var key = keys[i];
+ if (bStrict)
+ {
+ if (element[key] === filter[key])
+ {
+ return true;
+ }
+ }
+ else
+ {
+ if (element[key] == filter[key])
+ {
+ return true;
+ }
+ }
+ }
+ };
+ },
+
+ /**
+ * Removes the last element from an array and returns that
+ * element. This method changes the length of the array, if
+ * applied directly to an array object.
+ *
+ * @param {Array} a (optional)
+ * Array from which the last element should be removed. Is used
+ * instead of the {@link Array} object the function is
+ * applied to.
+ * @return {any}
+ * The element removed from the array changed array.
+ */
+ pop: function (a) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ a = this;
+ }
+
+ var result = null;
+
+ if (a.length > 0)
+ {
+ result = a[a.length - 1];
+ if (_isArray(this))
+ {
+ this.length = this.length - 1;
+ }
+ }
+
+ return result;
+ },
+
+ push: _array_push,
+
+ /**
+ * Takes input array <code>a</code> or the calling <code>Array</code>
+ * object and returns a new <code>Array</code> object with the
+ * order of the elements reversed.
+ *
+ * @param {Array} a (optional)
+ * <code>Array</code> object which order of elements should be
+ * reversed. Is used instead of the calling <code>Array</code>
+ * object.
+ * @return {Array}
+ * A copy of <code>a</code> or the calling <code>Array</code>
+ * object with its elements in reverse order. If <code>a</code>
+ * has no elements, an empty array is returned.
+ */
+ reverse: function (a) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ a = this;
+ }
+
+ var result = [];
+
+ if (_isArray(a))
+ {
+ for (var i = a.length - 1; i > -1; i--) {result[result.length] = a[i];}
+ }
+
+ return result;
+ },
+
+ /**
+ * Searches an array for a given value and returns
+ * the corresponding index or vector if successful.
+ *
+ * @param needle
+ * Value to be searched for.
+ * @param {Array} aHaystack
+ * <code>Array</code> to be searched for. Is used instead of
+ * the calling <code>Array</code> object.
+ * @param {boolean} bStrict (optional)
+ * If <code>true</code> then the function will also check the
+ * types of the <code>needle</code> in the <code>aHaystack</code>.
+ * @param {boolean} bDeepSearch (optional)
+ * If <code>true</code>, a deep search, if necessary, will be
+ * performed, i.e. also elements of the array are searched if
+ * they refer to <code>Array</code> objects. (Note that this
+ * method pays attention to the possibility that an element may
+ * refer to one of its parents, so that infinite recursion is
+ * not performed in this case. However, this additional check
+ * reduces efficiency as another {@link jsx.array#search()}
+ * must be invoked for every ancestor relationship. Also
+ * note that this compares only references, not content.
+ * If <code>needle</code> is a reference to an <code>Array</code>
+ * object, it is compared as reference with every single
+ * element, not its content with the content of elements
+ * [that refer to <code>Array</code> objects].)
+ * @param {Array} aAncestors (optional)
+ * Used internally by {@linkplain (bDeepSearch) deep search} to refer
+ * to an <code>Array</code> object storing the ancestors of a
+ * "child" array element that refers to an <code>Array</code>
+ * object itself. Usage prevents infinite recursion, see
+ * <code>bDeepSearch</code>.
+ * @param {Array} aResultVector (optional)
+ * Used internally by {@linkplain (bDeepSearch) deep search}
+ * to refer to an <code>Array</code> object storing the
+ * vector of a matching array element that refers to an
+ * <code>Array</code> object itself.
+ * @param {number} iLevel (optional)
+ * Used internally by {@linkplain (bDeepSearch) deep search}
+ * to specify the level for index of the coordinate of
+ * <code>aResultVector</code> if there is a match. The default
+ * level (also used for non-deep searches) is 0 for the
+ * first coordinate of <code>aResultVector</code>.
+ * @param {number} index (optional)
+ * Used internally by {@linkplain (bDeepSearch) deep search}
+ * to specify the current index for the coordinate of
+ * <code>aResultVector</code> if there is a match.
+ * @return {number}
+ * Without {@linkplain (bDeepSearch) deep search}:
+ * The zero-based index of the first matching element
+ * if <code>needle</code> is found in the array,
+ * -1
+ * otherwise.
+ *
+ * With {@linkplain (bDeepSearch) deep search}:
+ * A reference to an Array object indicating the vector of
+ * the first matching element (i.e. its coordinates)
+ * if <code>needle</code> is found in the array,
+ * <code>null</code>
+ * otherwise.
+ *
+ * If neither the calling object is an <code>Array</code>
+ * object nor <code>aHaystack</code> is a reference to such:
+ * 0 or <code>index</code>
+ * if <code>needle</code> is equal to <code>aHaystack</code>
+ * (<code>bStrict</code> is noted),
+ * -1
+ * otherwise.
+ */
+ search: function array_search (needle, aHaystack, bStrict, bDeepSearch,
+ aAncestors, aResultVector, iLevel, index) {
+ var result = -1;
+
+ if (typeof index == "undefined" || index < 0)
+ {
+ index = 0;
+ }
+
+ /*
+ array_search(4, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], true, true);
+
+ {0: {0: 1,
+ 1: 2,
+ 2: 3},
+ 1: {0: 4,
+ 1: 5,
+ 2: 6},
+ 2: {0: 7,
+ 1: 8,
+ 2: 9}}
+
+ array_search(4, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], true, true) == [1, 0]
+ array_search(4, [1, 2, 3], true, true) == null
+ array_search(4, [4, 5, 6], true, true) == 0
+ array_search(4, [7, 8, 9], true, true) == null
+ */
+
+ if (_isArray(aHaystack))
+ {
+ for (var i = 0; i < aHaystack.length; i++)
+ {
+ if (bDeepSearch)
+ {
+ result = null;
+
+ if (!aAncestors)
+ {
+ aAncestors = [];
+ }
+
+ /* avoid dupes */
+ if (aAncestors.length == 0
+ || aAncestors[aAncestors.length - 1] != aHaystack)
+ {
+ _array_push(aAncestors, aHaystack);
+ }
+
+ if (!aResultVector)
+ {
+ aResultVector = [];
+ }
+
+ if (typeof iLevel == "undefined")
+ {
+ iLevel = 0;
+ }
+
+ /* avoid inf. recursion */
+ if (!inArray(aHaystack[i], aAncestors, false))
+ {
+ var res =
+ array_search(
+ needle,
+ aHaystack[i],
+ bStrict,
+ bDeepSearch,
+ aAncestors,
+ aResultVector,
+ iLevel + 1,
+ i);
+
+ if (res != null && res > -1)
+ {
+ result = aResultVector;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (bStrict)
+ {
+ eval(
+ 'if (aHaystack[i] === needle) {'
+ + ' result = i;'
+ + ' break;'
+ + '}');
+ }
+
+ if (aHaystack[i] == needle)
+ {
+ result = i;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (bStrict)
+ {
+ eval(
+ 'if (aHaystack === needle) {'
+ + ' if (bDeepSearch) {'
+ + ' aResultVector[iLevel - 1] = index;'
+ + ' }'
+ + ' result = index;'
+ + '}');
+ }
+
+ if (aHaystack == needle)
+ {
+ if (bDeepSearch)
+ {
+ aResultVector[iLevel - 1] = index;
+ }
+ result = index;
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * @param value
+ * @param {Array} a
+ * Array which should be searched. Is used instead of the
+ * <code>Array</code> object the function is applied to.
+ * @param {boolean} bExactMatch
+ * If <code>true</code> then the function will also check the
+ * types of the <code>needle</code> in the <code>aHaystack</code>
+ * (optional).
+ * @param {boolean} bDeepSearch = false
+ * If <code>true</code>, a {@linkplain #array_search(bDeepSearch)
+ * deep search}, if necessary, will be performed.
+ * @return {boolean}
+ * <code>true</code> if <code>value</code> is an element of
+ * <code>a</code>, <code>false</code> otherwise.
+ */
+ contains: function (value, a, bExactMatch, bDeepSearch) {
+ var result = null;
+
+ if (bDeepSearch)
+ {
+ result = !!array_search(value, a, bExactMatch, true);
+ }
+ else
+ {
+ result = array_search(value, a, bExactMatch, false) > -1;
+ }
+
+ return result;
+ },
+
+ /**
+ * @function
+ */
+ changeCase: _changeCase,
+
+ /**
+ * Takes input array <code>a</code> or the Array object it is
+ * applied to as method and returns a new Array object with all
+ * string elements (optionally all elements regardless of their
+ * type) lowercased.
+ *
+ * @param {Array} a (optional)
+ * Array which elements should be converted. Is used instead
+ * of the Array object the function is applied to.
+ * @param {boolean} bConvertNonStrings = false
+ * If <code>false</code> (default), changes only the case of
+ * string elements. If <code>true</code>, converts non-string
+ * elements to <code>string</code> and changes their case.
+ * @return {Array}
+ * A copy of <code>a</code> or the Array object with its
+ * elements' value lowercased. If <code>a</code> has no
+ * elements, an empty array is returned.
+ */
+ toLowerCase: function (a, bConvertNonStrings) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ bConvertNonStrings = a;
+ a = this;
+ }
+
+ return _changeCase.call(a, a, false, bConvertNonStrings);
+ },
+
+ /**
+ * Takes input array <code>a</code> or the Array object it is
+ * applied to as method and returns a new Array object with all
+ * string elements (optionally all elements regardless of their
+ * type) uppercased.
+ *
+ * @param {Array} a (optional)
+ * Array which elements should be converted. Is used instead
+ * of the Array object the function is applied to.
+ * @param {boolean} bConvertNonStrings = false
+ * If <code>false</code> default, changes only the case of
+ * string elements. If <code>true</code>, converts non-string
+ * elements to <code>string</code> and changes their case.
+ * @return {Array}
+ * A copy of <code>a</code> or the Array object with its
+ * elements' value uppercased. If <code>a</code> has no
+ * elements, an empty array is returned.
+ */
+ toUpperCase: function (a, bConvertNonStrings) {
+ if (!_isArray(a) && _isArray(this))
+ {
+ bConvertNonStrings = a;
+ a = this;
+ }
+
+ return _changeCase.call(a, a, true, bConvertNonStrings);
+ },
+
+ /**
+ * @function
+ */
+ splice: (function() {
+ if (typeof _jsx.global.array_splice != "undefined")
+ {
+ return _jsx.global.array_splice;
+ }
+ else if (typeof Array != "undefined"
+ && _jsx_object.isNativeMethod(Array, "prototype", "splice"))
+ {
+ return function(a, start, del, ins) {
+ var proto = Array.prototype;
+ ins = proto.slice.call(arguments, 3);
+ return proto.splice.apply(a, [start, del].concat(ins));
+ };
+ }
+
+ return function(a, start, del, ins) {
+ var aDeleted = [];
+
+ for (var i = start + del, len = a.length; i < len; i++)
+ {
+ aDeleted[aDeleted.length] = a[i - del];
+ a[i - del] = a[i];
+ }
+
+ a.length = len - del;
+
+ for (i = 3, len = arguments.length; i < len; i++)
+ {
+ a[a.length] = arguments[i];
+ }
+
+ return aDeleted;
+ };
+ }()),
+
+ every: function (callback, thisObject) {
+ /* NOTE: Checks for null or undefined */
+ if (thisObject == null && _isArray(this))
+ {
+ thisObject = this;
+ }
+
+ if (_isNativeMethod(thisObject, "every"))
+ {
+ return thisObject.every(callback);
+ }
+
+ for (var i = 0, len = thisObject.length; i < len; i++)
+ {
+ if (!callback(thisObject[i]))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ equals: function (otherObject, thisObject, strict) {
+ /* NOTE: Check for null or undefined */
+ if (thisObject == null && _isArray(this))
+ {
+ thisObject = this;
+ }
+
+ if (thisObject.length != otherObject.length)
+ {
+ return false;
+ }
+
+ for (var i = 0, len = thisObject.length; i < len; ++i)
+ {
+ if (strict)
+ {
+ if (thisObject[i] !== otherObject[i])
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if (thisObject[i] != otherObject[i])
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ },
+
+ /**
+ * Returns an {@link Array} from which all duplicates
+ * have been removed.
+ *
+ * NOTE: Warns and falls back to {@link #uniqStr()} if
+ * {@link jsx.map.Map()} is unavailable.
+ *
+ * @function
+ */
+ uniq: (function () {
+ var _Map;
+
+ /**
+ * @param {Object} thisObject
+ * The object to operate on. Is used instead of the calling
+ * object if this method is called as a method of an
+ * {@link Array}.
+ */
+ return function (thisObject) {
+ /* NOTE: Check for null or undefined */
+ if (thisObject == null && _isArray(this))
+ {
+ thisObject = this;
+ }
+
+ if (!_Map)
+ {
+ _Map = jsx.object.getFeature(jsx, "map", "Map");
+ if (!_Map)
+ {
+ jsx.warn("jsx.array.uniq(): jsx.map.Map N/A, falling back to jsx.array.uniqStr()");
+ return jsx.array.uniqStr(thisObject);
+ }
+ }
+
+ var condensed = new _Map();
+
+ for (var i = 0, len = thisObject.length; i < len; ++i)
+ {
+ if (_hasOwnProperty(thisObject, i))
+ {
+ condensed.put(thisObject[i], true);
+ }
+ }
+
+ return condensed.getKeys();
+ };
+ }()),
+
+ /**
+ * Returns an {@link Array} from which all {@link String}
+ * duplicates have been removed.
+ *
+ * This method is more efficient than {@link #uniq} if you
+ * can be sure that either all elements are string values
+ * or their string representations can be compared. However,
+ * different to <code>uniq()</code>, the order of the
+ * resulting elements is implementation-dependent.
+ *
+ * @param {Object} thisObject
+ * The object to operate on. Is used instead of the calling
+ * object if this method is called as a method of an
+ * {@link Array}.
+ */
+ uniqStr: function (thisObject) {
+ /* NOTE: Check for null or undefined */
+ if (thisObject == null && _isArray(this))
+ {
+ thisObject = this;
+ }
+
+ var condensed = jsx.object.getDataObject();
+
+ for (var i = 0, len = thisObject.length; i < len; ++i)
+ {
+ if (_hasOwnProperty(thisObject, i))
+ {
+ condensed[thisObject[i]] = true;
+ }
+ }
+
+ return _getKeys(condensed);
+ },
+
+ /**
+ * Returns a function that can be used for sorting an {@link Array}.
+ *
+ * @author (C) 2013 Thomas 'PointedEars' Lahn &lt;js@PointedEars.de&gt;
+ */
+ createComparator: (function () {
+ var _isObject = _jsx_object.isObject;
+
+ /**
+ * @param {Array} aKeys
+ * Array of keys that should be sorted by, in order.
+ * A key may be a {@link string} value or a native object.
+ * If it is a <code>string</code>, it specifies the property name
+ * of the sort key. If it is another native object, the following
+ * of its properties are used as options. See the <var>options</var>
+ * parameter for the default values of these options.
+ * <table>
+ * <tr>
+ * <th><code>key</code></th>
+ * <td>The name of the property of the elements whose values
+ * should be sorted by (sort values). If this option is
+ * not present or a false-value, the element values are
+ * used as sort values.</td>
+ * </tr>
+ * <tr>
+ * <th><code>callback</code></th>
+ * <td>A reference to the <code>Function</code> whose
+ * return value, when passed the current sort value,
+ * defines the new sort value.</td>
+ * </tr>
+ * <tr>
+ * <th><code>constructor</code></th>
+ * <td>A reference to the <code>Function</code> whose
+ * return value when passed the current sort value
+ * and called as a constructor, defines the new
+ * sort value. This is useful if data can be converted
+ * to an object whose <code>toString</code> or
+ * <code>valueOf</code> methods can return a
+ * valid sort value. If both <code>callback</code>
+ * and <code>constructor</code> are specified, the
+ * return value of the callback is passed to
+ * the constructor.</td>
+ * </tr>
+ * <tr>
+ * <th><code>comparator</code></th>
+ * <td>A reference to the <code>Function</code> that
+ * should be passed the first and second current
+ * sort values and whose return value defines
+ * the relation between the first and second sort
+ * value. If the return value is not (loosely) equal
+ * to 0 or if the key is the last key, its return
+ * value is returned. Otherwise the subsequent
+ * sort values are compared.</td>
+ * </tr>
+ * <tr>
+ * <th><code>descending</code></th>
+ * <td>If a true-value, the sort order for this key
+ * is descending.</td>
+ * </tr>
+ * <tr>
+ * <th><code>numeric</code></th>
+ * <td>If a true-value, the sort values are compared as if
+ * both of them were <code>Number</code> values.</td>
+ * </tr>
+ * <tr>
+ * <th><code>strict</code></th>
+ * <td>If a true-value, the sort values are sorted
+ * using the <code>===</code> operator.</td>
+ * </tr>
+ * </table>
+ * @param {Object} options (optional)
+ * Default sort options. The following properties are used:
+ * <table>
+ * <tr>
+ * <th><code>callback</code></th>
+ * <td>A reference to the <code>Function</code> whose
+ * return value, when passed the current sort value,
+ * defines the new sort value. The factory default
+ * is not to use a callback.</td>
+ * </tr>
+ * <tr>
+ * <th><code>constructor</code></th>
+ * <td>A reference to the <code>Function</code> whose
+ * return value when passed the current sort value
+ * and called as a constructor, defines the new
+ * sort value. The factory default is not to use
+ * a constructor.</td>
+ * </tr>
+ * <tr>
+ * <th><code>comparator</code></th>
+ * <td>A reference to the <code>Function</code> that
+ * should be passed the first and second current
+ * sort values and whose return value defines
+ * the relation between the first and second sort
+ * value. The factory default is not to use a
+ * special sort value comparator.</td>
+ * </tr>
+ * <tr>
+ * <th><code>descending</code></th>
+ * <td>If a true-value, the default sort order is
+ * descending. The factory default is ascending.</td>
+ * </tr>
+ * <tr>
+ * <th><code>numeric</code></th>
+ * <td>If a true-value, by default the sort values are compared
+ * as if they were <code>Number</code> values. The factory
+ * default is a generic comparison that uses the operators
+ * <code>==</code> (non-strict) or <code>===</code>
+ * (strict), and <code>&lt;</code>, and <code>></code>.</td>
+ * </tr>
+ * <tr>
+ * <th><code>strict</code></th>
+ * <td>If a true-value, use strict comparison by default.
+ * The factory default is non-strict comparison.</td>
+ * </tr>
+ * </table>
+ * @return {Function}
+ */
+ function _createComparator (aKeys, options)
+ {
+ if (aKeys == null || !_isArray(aKeys))
+ {
+ aKeys = [aKeys];
+ }
+
+ if (options == null || !_isObject(options))
+ {
+ options = {};
+ }
+
+ return function (el1, el2) {
+ for (var i = 0, len = aKeys.length; i < len; ++i)
+ {
+ var key = aKeys[i];
+ var propertyName = ((key == null || typeof key.valueOf() == "string")
+ ? key
+ : key.key);
+
+ var el1Value = (propertyName != null ? el1[propertyName] : el1);
+ var el2Value = (propertyName != null ? el2[propertyName] : el2);
+
+ if (key && typeof key.callback == "function")
+ {
+ el1Value = key.callback(el1Value);
+ el2Value = key.callback(el2Value);
+ }
+ else if (typeof options.callback == "function")
+ {
+ el1Value = options.callback(el1Value);
+ el2Value = options.callback(el2Value);
+ }
+
+ if (key && _hasOwnProperty(key, "constructor"))
+ {
+ el1Value = new key.constructor(el1Value);
+ el2Value = new key.constructor(el2Value);
+ }
+ else if (_hasOwnProperty(options, "constructor"))
+ {
+ el1Value = new options.constructor(el1Value);
+ el2Value = new options.constructor(el2Value);
+ }
+
+ var isLastKey = (i == len - 1);
+ var hasKeySpecificComparator = (typeof key.comparator == "function");
+ if (hasKeySpecificComparator
+ || (typeof options.comparator == "function"))
+ {
+ var comparatorResult = (hasKeySpecificComparator
+ ? key.comparator(el1Value, el2Value)
+ : options.comparator(el1Value, el2Value));
+
+ if (isLastKey || comparatorResult != 0)
+ {
+ return comparatorResult;
+ }
+
+ continue;
+ }
+
+ equals = ((key && key.strict) || (options.strict)
+ ? (el1Value === el2Value)
+ : (el1Value == el2Value));
+
+ if (equals)
+ {
+ if (isLastKey)
+ {
+ /* last key, same value */
+ return 0;
+ }
+ }
+ else
+ {
+ var descending = ((key && key.descending) || options.descending);
+
+ return ((key && key.numeric) || options.numeric
+ ? (descending
+ ? el2Value - el1Value
+ : el1Value - el2Value)
+ : (descending
+ ? (el1Value > el2Value ? -1 : 1)
+ : (el1Value < el2Value ? -1 : 1)));
+ }
+ }
+ };
+ }
+
+ return _createComparator;
+ }())
+ };
+}());
+
+//jsx.array.docURL = jsx.array.path + "array.htm";
+
+if (jsx.options.augmentPrototypes)
+{
+ jsx.object.extend(Array.prototype, {
+ /**
+ * @memberOf Array.prototype
+ */
+ chunk: jsx.array.chunk,
+ changeCase: jsx.array.changeCase,
+ contains: jsx.array.contains,
+ countValues: jsx.array.countValues,
+ equals: jsx.array.equals,
+ fill: jsx.array.fill,
+ filter: jsx.array.filter,
+ pop: jsx.array.pop,
+ push: jsx.array.push,
+ reverse: jsx.array.reverse,
+ search: jsx.array.search,
+ splice: jsx.array.splice,
+ toLowerCase: jsx.array.toLowerCase,
+ toUpperCase: jsx.array.toUpperCase,
+ uniq: jsx.array.uniq,
+ uniqStr: jsx.array.uniqStr,
+
+ /* JavaScript 1.6 (1.5 in Gecko 1.8b2 and later) emulation */
+ every: jsx.array.every,
+
+ /* TODO */
+ iterate: function () {
+ var a = [];
+
+ for (var i = 0, len = this.length; i < len; i++)
+ {
+ a.push(this[i]);
+ }
+
+ return a;
+ }
+ });
+}
\ No newline at end of file
/live/array.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/UniCalc/unicalc.js
===================================================================
--- live/UniCalc/unicalc.js (nonexistent)
+++ live/UniCalc/unicalc.js (revision 509)
@@ -0,0 +1,150 @@
+function toASCII (unicode)
+{
+ var ascii = new jsx.regexp.String(unicode.value).replace(
+ jsx.regexp.RegExp(
+ "(?<operand>[−×∕])|(?<root>[√])|(?<delim>'+)"
+ + "|(?<exponent>[⁰¹²³\u2074-\u2079⁺⁻⁽⁾]+)"
+ + "|\\b(?<const>g)\\b",
+ "g"),
+ function (match) {
+ var groups = this.groups;
+ if (groups["operand"])
+ {
+ switch (match)
+ {
+ case "−": return "-";
+ case "×": return "*";
+ case "∕": return "/";
+ }
+ }
+
+ if (groups["root"])
+ {
+ switch (match)
+ {
+ case "√": return "sqrt";
+ default:
+ return match;
+ }
+ }
+
+ if (groups["delim"])
+ {
+ return "";
+ }
+
+ if (groups["exponent"])
+ {
+ var exponent = match.replace(
+ /./g,
+ function (match) {
+ switch (match)
+ {
+ case "⁰": return "0";
+ case "¹": return "1";
+ case "²": return "2";
+ case "³": return "3";
+ case "⁺": return "+";
+ case "⁻": return "-";
+ case "⁼": return "=";
+ case "⁽": return "(";
+ case "⁾": return ")";
+ default:
+ if (/[\u2074-\u2079]/.test(match))
+ {
+ return String.fromCharCode(
+ 0x30 + (match.charCodeAt(0) - 0x2070));
+ }
+
+ return match;
+ }
+ });
+
+ return "^(" + exponent + ")";
+ }
+
+ if (groups["const"])
+ {
+ switch (match)
+ {
+ case "g": return "9.81 m/s^2";
+ }
+ }
+
+ return match;
+ });
+
+ unicode.form.elements["q"].value = ascii;
+}
+
+function toUnicode (ascii)
+{
+ var unicode = new jsx.regexp.String(ascii.value).replace(
+ jsx.regexp.RegExp(
+ "(?<operand>[-*/])|\\b(?<root>(sq|cub)rt)\\b|\\^(?<exponent>[\\d()]+)",
+ "g"),
+ function (match) {
+ var groups = this.groups;
+ if (groups["operand"])
+ {
+ return jsx.object.getProperty({
+ "-": "−",
+ "*": "×",
+ "/": "∕"
+ }, match);
+ }
+
+ if (groups["root"])
+ {
+ switch (match)
+ {
+ case "cubrt": return "∛";
+ case "sqrt": return "√";
+ default:
+ return match;
+ }
+ }
+
+ if (groups["exponent"])
+ {
+ var exponent = groups["exponent"].replace(
+ /./g,
+ function (match) {
+ switch (match)
+ {
+ case "0": return "⁰";
+ case "1": return "¹";
+ case "2": return "²";
+ case "3": return "³";
+ case "+": return "⁺";
+ case "-": return "⁻";
+ case "=": return "⁼";
+ case "(": return "⁽";
+ case ")": return "⁾";
+ default:
+ if (/[4-9]/.test(match))
+ {
+ return String.fromCharCode(
+ match.charCodeAt(0) - 0x30 + 0x2070);
+ }
+
+ return match;
+ }
+ });
+
+ return exponent;
+ }
+
+ return match;
+ });
+
+ ascii.form.elements["unicode"].value = unicode;
+}
+
+function calc (form)
+{
+ return !window.open(
+ form.action + "?q=" + encodeURIComponent(form.elements["q"].value),
+ form.target,
+ "width=720,height=630,resizable");
+}
\ No newline at end of file
/live/UniCalc/unicalc.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/UniCalc/index.html
===================================================================
--- live/UniCalc/index.html (nonexistent)
+++ live/UniCalc/index.html (revision 509)
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <title>UniCalc (Unicode Calculator) — PointedEars’ Website</title>
+ <style type="text/css">
+ <!--
+ table {
+ width: 100%;
+ }
+
+ th {
+ width: 8em;
+ text-align: right;
+ }
+
+ th:after {
+ content: ":";
+ }
+
+ [lang^="fr"] th:after {
+ content: "\00A0 :";
+ }
+
+ .td3 {
+ width: 8em;
+ }
+
+ input {
+ width: 100%;
+ }
+ -->
+ </style>
+ <script type="text/javascript" src="../builder?src=object,regexp"></script>
+ <script type="text/javascript" src="unicalc.js"></script>
+ </head>
+ <body>
+ <h1>UniCalc – Unicode Calculator</h1>
+ <form action="http://www.google.com/search" target="result"
+ onsubmit="return calc(this)">
+ <table>
+ <tr>
+ <th><label for="unicode">Unicode <u>f</u>ormula</label></th>
+ <td><input type="search" id="unicode" name="unicode" accesskey="f"
+ onkeyup="toASCII(this)"
+ oninput="toASCII(this)"
+ ></td>
+ </tr>
+ <tr>
+ <th><label for="ascii"><u>A</u>SCII formula</label></th>
+ <td><input type="search" id="ascii" name="q" accesskey="a"
+ onkeyup="toUnicode(this)"
+ oninput="toUnicode(this)"
+ ></td>
+ <td class="td3"><input type="submit" value="Calculate (Google)"></td>
+ </tr>
+ </table>
+ </form>
+ </body>
+</html>
/live/UniCalc/index.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/object.js
===================================================================
--- live/object.js (nonexistent)
+++ live/object.js (revision 509)
@@ -0,0 +1,3188 @@
+/**
+ * @fileOverview <title>Basic Object Library</title>
+ * @file $Id$
+ *
+ * @author (C) 2004-2013 Thomas Lahn <js@PointedEars.de>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+/* allows for de.pointedears.jsx.object */
+if (typeof de == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var de = {};
+}
+
+if (typeof de.pointedears == "undefined")
+{
+ /**
+ * @namespace
+ */
+ de.pointedears = {};
+}
+
+/**
+ * @namespace
+ */
+de.pointedears.jsx = jsx;
+
+/**
+ * Reference to the ECMAScript Global Object
+ * @type Global
+ * @field
+ */
+jsx.global = this;
+
+/*
+ * NOTE: Cannot use jsx.object.extend() for the following
+ * because values have not been defined yet!
+ *
+ * TODO: Should syntactic sugar be provided to work around
+ * this issue? See Function.prototype.extend().
+ */
+
+jsx.MSG_INFO = "info";
+jsx.MSG_WARN = "warn";
+jsx.MSG_ERROR = "error";
+jsx.MSG_DEBUG = "debug";
+
+if (typeof jsx.options == "undefined")
+{
+ /**
+ * Holds the runtime options for JSX.
+ *
+ * Due to the dynamic nature of ECMAScript, it is very flexible.
+ * Built-in objects can be augmented and built-in methods can be
+ * overwritten to allow for "syntactic sugar" that make programs
+ * easier to write and to read, should the implementation not
+ * already provide suitable features. However, augmentation
+ * and replacement do have disadvantages if you are not aware
+ * of the fact. Allowing for a maximum of flexibility, JSX
+ * uses options that govern to which degree JSX components may
+ * modify built-in objects. Options include, with increasing
+ * degree of flexibility and side-effects by nesting level:
+ *
+ * <table>
+ * <thead>
+ * <tr>
+ * <td></td>
+ * <th>mod. builtins</th>
+ * <th>augment</th>
+ * <th>augmentproto</th>
+ * <th>augmentobjectproto</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <th><code>augmentBuiltins</code></th>
+ * <td>yes</td>
+ * <td>yes</td>
+ * <td>no</td>
+ * <td>no</td>
+ * </tr>
+ * <tr>
+ * <th><code>augmentPrototypes</code></th>
+ * <td>yes</td>
+ * <td>yes</td>
+ * <td>yes</td>
+ * <td>no</td>
+ * </tr>
+ * <tr>
+ * <th><code>augmentObjectPrototype</code></th>
+ * <td>yes</td>
+ * <td>yes</td>
+ * <td>yes</td>
+ * <td>yes</td>
+ * </tr>
+ * <tr>
+ * <th><code>replaceBuiltins</code></th>
+ * <td>yes</td>
+ * <td>depends</td>
+ * <td>depends</td>
+ * <td>depends</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * <dl>
+ * <dt><code>augmentBuiltins</code></dt>
+ * <dd>Allow built-ins to be augmented with new
+ * properties. This allows new properties on
+ * the built-in constructors, but not on
+ * prototype objects of built-in objects.
+ * See <code>augmentPrototypes</code>.
+ * Since there usually is no harm in that,
+ * the default is <code>true</code>.
+ * Set to <code>false</code> if you are testing features
+ * of ECMAScript implementations with JSX,
+ * like with the ECMAScript Support Matrix.
+ * <dl>
+ * <dt><code>augmentPrototypes</code></dt>
+ * <dd>Allow prototype objects to be augmented,
+ * except <code>Object.prototype</code>.
+ * This allows for new, inherited methods for
+ * <code>String</code>s, for example.
+ * Since there usually is no harm in that, the
+ * default is <code>true</code>.
+ * <dl>
+ * <dt><code>augmentObjectPrototype</code></dt>
+ * <dd>Allow <code>Object.prototype</code>
+ * to be augmented. <em>CAUTION:
+ * The new properties are inherited
+ * to all native objects, and
+ * host objects that have
+ * <code>Object.prototype</code>
+ * in their prototype chain. The new
+ * properties will show up everywhere,
+ * including <code>for-in</code>
+ * iteration. If you do not know
+ * what this is all about, leave it
+ * at the default <code>false</code>.</em></dd>
+ * </dl>
+ * </dd>
+ * <dt><code>replaceBuiltins</code></dt>
+ * <dd>Allow built-ins to be replaced with native user-defined
+ * implementations.</dd>
+ * </dl>
+ * @namespace
+ */
+ jsx.options = {};
+}
+
+if (typeof jsx.options.augmentBuiltins == "undefined")
+{
+ /**
+ * If <code>false</code>, built-ins are not modified.
+ * The default is <code>true</code>.
+ *
+ * @type boolean
+ */
+ jsx.options.augmentBuiltins = true;
+}
+
+if (typeof jsx.options.augmentPrototypes == "undefined")
+{
+ /**
+ * If <code>false</code>, built-in prototypes are not modified.
+ * The default is <code>true</code>.
+ *
+ * @type boolean
+ */
+ jsx.options.augmentPrototypes = true;
+}
+
+if (typeof jsx.options.augmentObjectPrototype == "undefined")
+{
+ /**
+ * If <code>false</code> (default), the Object prototype object is
+ * not modified. The default is <code>false</code>.
+ *
+ * @type boolean
+ */
+ jsx.options.augmentObjectPrototype = false;
+}
+
+if (typeof jsx.options.replaceBuiltins == "undefined")
+{
+ /**
+ * If <code>false</code>, built-ins are not replaced.
+ * The default is <code>true</code>.
+ *
+ * @type boolean
+ */
+ jsx.options.replaceBuiltins = true;
+}
+
+if (typeof jsx.options.emulate == "undefined")
+{
+ /**
+ * If <code>false</code>, missing language features are not emulated.
+ * The default is <code>true</code>.
+ * <p>
+ * WARNING: JSX features may depend on emulation; intended for
+ * testing only.
+ * </p>
+ * @type boolean
+ */
+ jsx.options.emulate = true;
+}
+
+if (jsx.options.emulate)
+{
+ jsx.options.augmentBuiltins = true;
+ jsx.options.augmentPrototypes = true;
+ jsx.options.replaceBuiltins = true;
+}
+
+/**
+ * Wrapper for a safer <code>try</code>...<code>catch</code>.
+ *
+ * Attempts to evaluate a value as a <i>StatementList</i>, and attempts
+ * to evaluate another value as a <i>StatementList</i> if an exception
+ * is thrown in the process. The following words may be used within:
+ *
+ * <table>
+ * <thead>
+ * <tr>
+ * <th align="left">Word</th>
+ * <th align="left">Refers to</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr valign="top">
+ * <td><code>statements</code><br>
+ * <code>errorHandlers</code></td>
+ * <td>the passed values</td>
+ * </tr>
+ * <tr valign="top">
+ * <td>code</td>
+ * <td>the entire constructed <code>try</code>...<code>catch</code>
+ * string that is evaluated as a <i>Program</i></td>
+ * </tr>
+ * <tr valign="top">
+ * <td>e</td>
+ * <td>Only within <var>errorHandlers</var>:
+ * the value thrown in case of an exception</td>
+ * </tr>
+ * <tr valign="top">
+ * <td>result</td>
+ * <td>Only within <var>finalizer</var>:
+ * the previous evaluation value</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * NOTE: This method has previously been provided by {@link exception.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @function
+ * @param {Function|string|any} statements
+ * Value to be evaluated as a <i>StatementList</i>.
+ * Called if a <code>Function</code>, used as-is otherwise.
+ * @param {Function|string|any} errorHandler
+ * Value to be evaluated as a <i>StatementList</i> in case of an
+ * exception. Called if a <code>Function</code>,
+ * used as-is otherwise.
+ * @param {Function|string|any} finalizer
+ * Value to be evaluated as a <i>StatementList</i> in any case,
+ * after the statements and error handler. Called if a
+ * <code>Function</code>, used as-is otherwise.
+ * @return {any}
+ * The result of <code>statements</code>, or the result
+ * of <code>errorHandlers</code> if an error occurred,
+ * unless <var>finalizer</var> is provided; if it is,
+ * the evaluation result of <var>finalizer</var>.
+ */
+jsx.tryThis =
+// (function () {
+// /**
+// * @param s Value to be stringified
+// * @param {String} sCall
+// * CallStatement that should be used instead of the value
+// * @return {string} Stringified version of <code>s</code>
+// */
+// function stringify(s, sCall)
+// {
+// if (typeof s == "function")
+// {
+// s = sCall;
+// }
+// else if (typeof s == "undefined")
+// {
+// s = "";
+// }
+//
+// return s;
+// }
+
+ /*return*/ function (statements, errorHandler, finalizer) {
+ /*
+ * Replaced because eval() performs magnitudes worse;
+ * TODO: Backwards compatibility (branching for NN4 & friends?)
+ */
+// var sStatements = stringify(statements, "statements();");
+// var sErrorHandlers = stringify(errorHandlers, "errorHandlers(e);");
+//
+// var code = 'try {\n ' + sStatements + '\n}\n'
+// + 'catch (e) {\n ' + sErrorHandlers + '\n}';
+//
+// return eval(code);
+ var t = typeof statements;
+ var result;
+ try
+ {
+ result = (t == "function"
+ ? statements()
+ : eval(statements));
+ }
+ catch (e)
+ {
+ t = typeof errorHandler;
+ result = (t == "function"
+ ? errorHandler(e)
+ : eval(errorHandler));
+ }
+ finally
+ {
+ if (finalizer != null)
+ {
+ t = typeof finalizer;
+ result = (t == "function"
+ ? finalizer()
+ : eval(finalizer));
+ }
+ }
+
+ return result;
+ };
+//}());
+
+/* only for JSDT JSDoc */
+jsx.object = {};
+
+/**
+ * @type jsx.object
+ * @memberOf __jsx.object
+ * @namespace
+ */
+jsx.object = (/** @constructor */ function () {
+ var
+ rxUnknown = /^unknown$/,
+ rxMethod = /^(function|object)$/;
+
+ /**
+ * Determines whether an object is, or several objects are,
+ * likely to be callable.
+ *
+ * @author (C) 2003-2010 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ * @param {Object} obj
+ * Object which should be tested for a method, or checked
+ * for being a method if no further arguments are provided.
+ * <p>
+ * <em>NOTE: If you pass a primitive value for this argument,
+ * the properties of the object created from that value are considered.
+ * In particular, if you pass a string value containing
+ * a <i>MemberExpression</i>, the properties of the corresponding
+ * <code>String</code> instance are considered, not of the object that
+ * the <i>MemberExpression</i> might refer to. If you need to use such
+ * a string to refer to an object (e.g., if you do not know whether it
+ * is safe to refer to the object), use the return value of
+ * {@link jsx#tryThis jsx.tryThis("<var>MemberExpression</var>")}
+ * as argument to this method instead.</em>
+ * </p>
+ * @param {string|Array} prop (optional)
+ * Path of the property to be determined a method, i.e. a reference to
+ * a callable object assigned as property of another object.
+ * Use a string argument for each component of the path, e.g.
+ * the argument list <code>(o, "foo", "bar")</code> for testing whether
+ * <code>o.foo.bar</code> is a method.
+ * If the last argument is an {@link Array}, all elements of
+ * this array are used for property names; e.g.
+ * <code>(o, "foo", ["bar", "baz"])</code>. This allows for testing
+ * several properties of the same object with one call.
+ * @return {boolean}
+ * <code>true</code> if all arguments refer to methods,
+ * <code>false</code> otherwise.
+ */
+ function _isMethod (obj, prop)
+ {
+ var len = arguments.length;
+ if (len < 1)
+ {
+ jsx.throwThis("jsx.InvalidArgumentError",
+ ["Not enough arguments", "saw 0", "(obj : Object[, prop : string])"]);
+ return false;
+ }
+
+ /*
+ * Determine if we were apply'd by jsx.object.isNativeMethod;
+ */
+ var checkNative = (this == _isNativeMethod);
+
+ var t = typeof obj;
+
+ /* When no property names are provided, test if the first argument is a method */
+ if (len < 2)
+ {
+ if (checkNative)
+ {
+ return t == "function" && obj && true || false;
+ }
+
+ return rxUnknown.test(t) || rxMethod.test(t) && obj && true || false;
+ }
+
+ /* otherwise the first argument must refer to a suitable object */
+ /* FIXME: Does not recognize the zero-length string as convertible */
+ if (rxUnknown.test(t) || !obj)
+ {
+ return false;
+ }
+
+ for (var i = 1; i < len; i++)
+ {
+ prop = arguments[i];
+
+ /* NOTE: Handle null _and_ undefined */
+ if (prop == null)
+ {
+ return false;
+ }
+
+ var isLastSeg = (i == len - 1);
+ if (isLastSeg)
+ {
+ if (typeof prop.valueOf() == "string")
+ {
+ prop = [prop];
+ }
+
+ var aProp = prop;
+ }
+
+ for (var j = (isLastSeg && aProp.length || 1); j--;)
+ {
+ if (isLastSeg)
+ {
+ prop = aProp[j];
+ }
+
+ t = typeof obj[prop];
+
+ /*
+ * NOTE: Test for "unknown" required in any case;
+ * this order speeds up evaluation
+ */
+ if (rxUnknown.test(t) || (rxMethod.test(t) && obj[prop]))
+ {
+ if (i < len - 1)
+ {
+ obj = obj[prop];
+ if (!(rxUnknown.test(typeof obj) || obj))
+ {
+ return false;
+ }
+ }
+ else if (checkNative && t != "function")
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Determines whether an object is, or several objects are,
+ * likely to be a native method.
+ *
+ * @author (C) 2011 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ * @param {Object} obj
+ * Object which should be tested for a method, or checked
+ * for being a method if no further arguments are provided.
+ * <p>
+ * <em>NOTE: If you pass a primitive value for this argument,
+ * the properties of the object created from that value are considered.
+ * In particular, if you pass a string value containing
+ * a <i>MemberExpression</i>, the properties of the corresponding
+ * <code>String</code> instance are considered, not of the object that
+ * the <i>MemberExpression</i> might refer to. If you need to use such
+ * a string to refer to an object (e.g., if you do not know whether it
+ * is safe to refer to the object), use the return value of
+ * {@link jsx#tryThis jsx.tryThis("<var>MemberExpression</var>")}
+ * as argument to this method instead.</em>
+ * </p>
+ * @param {string|Array} prop (optional)
+ * Path of the property to be determined a method, i.e. a reference to
+ * a callable object assigned as property of another object.
+ * Use a string argument for each component of the path, e.g.
+ * the argument list <code>(o, "foo", "bar")</code> for testing whether
+ * <code>o.foo.bar</code> is a method.
+ * If the last argument is an {@link Array}, all elements of
+ * this array are used for property names; e.g.
+ * <code>(o, "foo", ["bar", "baz"])</code>. This allows for testing
+ * several properties of the same object with one call.
+ * @return {boolean}
+ * <code>true</code> if all arguments refer to methods,
+ * <code>false</code> otherwise.
+ */
+ function _isNativeMethod (obj, prop)
+ {
+ /* NOTE: Thread-safe, argument-safe code reuse -- `this' is our ID */
+ return _isMethod.apply(_isNativeMethod, arguments);
+ }
+
+ /**
+ * Determines if an object has a (non-inherited) property
+ *
+ * @param {Object} obj (optional)
+ * Object which property should be checked for existence.
+ * @param {string} sProperty
+ * Name of the property to check.
+ * @return {boolean}
+ * <code>true</code> if there is such a property;
+ * <code>false</code> otherwise.
+ */
+ function _hasOwnProperty (obj, sProperty)
+ {
+ if (arguments.length < 2 && obj)
+ {
+ sProperty = obj;
+ obj = jsx_object;
+ }
+
+ var proto;
+
+ return (_isMethod(obj, "hasOwnProperty")
+ ? obj.hasOwnProperty(sProperty)
+ : (typeof obj[sProperty] != "undefined"
+ && (null == obj.constructor
+ || ((proto = obj.constructor.prototype)
+ && typeof proto[sProperty] == "undefined"))));
+ }
+
+ /**
+ * Determines if a value refers to an object.
+ *
+ * <p>Returns <code>true</code> if the value is a reference
+ * to an object; <code>false</code> otherwise.</p>
+ *
+ * <p>An value "is an object" if it is a function or
+ * <code>typeof "object"</code> but not <code>null</code>.
+ *
+ * @return {boolean}
+ */
+ function _isObject (a)
+ {
+ var t = typeof a;
+ return t == "function" || t == "object" && a !== null;
+ }
+
+ /**
+ * Returns the own enumerable properties of an object
+ *
+ * @param {Object} obj
+ * Object from which to get the keys
+ * @return {Array}
+ * Own enumerable properties of <var>obj</var>
+ * @see Object#keys
+ */
+ function _getKeys (obj)
+ {
+ if (typeof Object.keys == "function" && !Object.keys._emulated)
+ {
+ return Object.keys(obj);
+ }
+
+ if (!_isObject(obj))
+ {
+ return jsx.throwThis("TypeError",
+ "jsx.object.getKeys() called on non-object");
+ }
+
+ var names = new Array();
+
+ for (var p in obj)
+ {
+ if (_hasOwnProperty(obj, p))
+ {
+ names.push(p);
+ }
+ }
+
+ return names;
+ }
+
+ function Dummy () {}
+
+ /**
+ * Lets one object inherit from another
+ *
+ * @param {Object} obj = Object.prototype
+ * Object from which to inherit. The default is
+ * <code>Object.prototype</code>.
+ * @return {Object}
+ * Inheriting (child) object
+ */
+ function _inheritFrom (obj)
+ {
+ if (typeof obj == "object" && obj == null)
+ {
+ if (typeof Object.create == "function" && !Object.create._emulated)
+ {
+ return Object.create(null);
+ }
+
+ var result = new Object();
+ result.__proto__ = null;
+ return result;
+ }
+
+ Dummy.prototype = (typeof obj == "undefined"
+ ? Object.prototype
+ : (obj || null));
+ return new Dummy();
+ }
+
+ /**
+ * Returns the value of an object's internal <code>[[Class]]</code>
+ * property.
+ *
+ * Calls the <code>Object.prototype.toString()</code> method on
+ * the object and returns the result of matching against
+ * the specified return value, which includes the value of
+ * the object's internal <code>[[Class]]</code> property. Although
+ * implementations use prototype-based inheritance, the property
+ * value is useful for determining the type of an object regardless
+ * of the current value of its <code>constructor</code> property.
+ * For example, that makes it possible to recognize <code>Array</code>
+ * instances independent of the global context in which they were
+ * constructed.
+ *
+ * @function
+ * Determines if a value refers to an {@link Array}.
+ * <p>
+ * Returns <code>true</code> if the value is a reference to an object
+ * whose <code>[[Class]]</code> internal property is <code>"Array"</code>;
+ * <code>false</code> otherwise.
+ * </p>
+ *
+ * @function
+ * @param obj
+ * @return {string|Undefined}
+ * The value of an object's internal [[Class]] property, or
+ * <code>undefined</code> if the property value cannot be determined.
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.3.2
+ */
+ var _getClass = (function () {
+ var _toString = ({}).toString;
+
+ /**
+ * @return {string}
+ */
+ function getClass (obj)
+ {
+ return (_toString.call(obj)
+ .match(/^\s*\[object\s+(\S+)\s*\]\s*$/) || [, ""])[1];
+ }
+
+ return getClass;
+ }());
+
+ /**
+ * Determines if an object is an {@link Array}.
+ *
+ * @param a
+ * Potential <code>Array</code>
+ * @return {boolean}
+ */
+ function _isArray (a)
+ {
+ return (typeof Array.isArray == "function" && !Array.isArray._emulated
+ ? Array.isArray(a)
+ : (a && a.constructor == Array) || _getClass(a) == "Array");
+ }
+
+ var _rxPrimitive = /^(boolean|function|number|object|string)$/;
+
+ /**
+ * Determines if a value is a primitive value convertible to
+ * an object or a reference to a native object.
+ *
+ * @param value
+ * @return {boolean}
+ */
+ function _isNativeObject (value)
+ {
+ var t = (typeof value != "undefined" && value !== null
+ && typeof value.valueOf == "function"
+ && typeof value.valueOf());
+
+ return (t
+ && (_rxPrimitive.test(t)
+ || _isArray(value)
+ || /^(Date|Error|RegExp)$/.test(_getClass(value))
+ || (typeof Math != "undefined" && value == Math)
+ || (typeof JSON != "undefined" && value == JSON))
+ );
+ }
+
+ /**
+ * Used by {@link #extend()} and {@link #setProperties()}
+ * to overwrite existing properties.
+ */
+ var _ADD_OVERWRITE = 1;
+
+ /**
+ * Used by {@link #extend()} and {@link #clone()}
+ * to make a shallow copy of all enumerable properties (default).
+ */
+ var _COPY_ENUM = 0;
+
+ /**
+ * Used by {@link #extend()} and {@link #clone()}
+ * to make a deep copy of all enumerable properties.
+ */
+ var _COPY_ENUM_DEEP = 2;
+
+ /**
+ * Used by {@link #extend()} and {@link #clone()}
+ * to copy a property by inheritance.
+ */
+ var _COPY_INHERIT = 4;
+
+ function _createTypedObject (oOriginal)
+ {
+ if (oOriginal.constructor)
+ {
+ return _inheritFrom(oOriginal.constructor.prototype);
+ }
+
+ return new Object();
+ }
+
+ /**
+ * Creates a duplicate (clone) of an object
+ *
+ * @param {Object} oSource (optional)
+ * Object to be cloned. If omitted or <code>null</code>,
+ * the calling object is cloned.
+ * @param {Number} iLevel (optional)
+ * Use the {@link #COPY_ENUM jsx.object.COPY_*}
+ * properties to specify the level of cloning.
+ * The default is {@link #COPY_ENUM}.
+ * @return {Object}
+ * A reference to the clone.
+ */
+ function _clone (oSource, iLevel)
+ {
+ if (typeof oSource == "number")
+ {
+ var tmp = oSource;
+ oSource = iLevel;
+ iLevel = tmp;
+ }
+
+ if (!oSource)
+ {
+ oSource = jsx_object;
+ }
+
+ if (typeof iLevel == "undefined")
+ {
+ iLevel = _COPY_ENUM;
+ }
+
+ var me = _clone;
+
+ if (!iLevel || (iLevel & _COPY_ENUM_DEEP))
+ {
+ /*
+ * NOTE: For objects, valueOf() only copies the object reference,
+ * so we are creating an instance that inherits from the
+ * original's prototype, if possible.
+ */
+ var o2 = (typeof oSource == "object" && oSource
+ ? _createTypedObject(oSource)
+ : oSource.valueOf());
+
+ /* if "var p in ..." does not copy the array elements */
+ if (_isArray(o2))
+ {
+ for (var i = e.length; i--;)
+ {
+ if (iLevel && typeof oSource[i] == "object" && null != oSource[i])
+ {
+ jsx.tryThis(function () { o2[i] = me(oSource[i], iLevel); });
+ }
+ else
+ {
+ jsx.tryThis(function () { o2[i] = oSource[i]; });
+ }
+ }
+ }
+
+ for (var p in oSource)
+ {
+ if (iLevel && typeof oSource[p] == "object" && null != oSource[p])
+ {
+ jsx.tryThis(function () { o2[p] = me(oSource[p], iLevel); });
+ }
+ else
+ {
+ jsx.tryThis(function () { o2[p] = oSource[p]; });
+ }
+ }
+
+ return o2;
+ }
+
+ if (iLevel & _COPY_INHERIT)
+ {
+ return _inheritFrom(oSource);
+ }
+
+ return null;
+ }
+
+ /**
+ * Defines a property of an object.
+ *
+ * Emulation of the Object.defineProperty() method from ES 5.1,
+ * section 15.2.3.6.
+ *
+ * Uses {@link Object.prototype#__defineGetter__} and
+ * {@link Object.prototype#__defineSetter__} (JavaScript only) as fallback.
+ *
+ * @function
+ * @return {Object} Reference to the object
+ */
+ var _defineProperty = (function () {
+ function _toPropertyDescriptor (obj)
+ {
+ if (!_isObject(obj))
+ {
+ jsx.throwThis("TypeError", "Object expected");
+ }
+
+ var desc = {};
+
+ if (_hasOwnProperty(obj, "enumerable"))
+ {
+ desc.enumerable = !!obj.enumerable;
+ }
+
+ if (_hasOwnProperty(obj, "configurable"))
+ {
+ desc.configurable = !!obj.configurable;
+ }
+
+ var hasValue = obj.hasOwnProperty("value");
+ if (hasValue)
+ {
+ desc.value = obj.value;
+ }
+
+ var hasWritable = _hasOwnProperty(obj, "writable");
+ if (hasWritable)
+ {
+ desc.writable = !!obj.writable;
+ }
+
+ var hasGetter = _hasOwnProperty(obj, "get");
+ if (hasGetter)
+ {
+ if (typeof obj.get != "function")
+ {
+ return jsx.throwThis("TypeError", "Function expected for getter");
+ }
+
+ desc.get = obj.get;
+ }
+
+ var hasSetter = _hasOwnProperty(obj, "set");
+ if (hasSetter)
+ {
+ if (typeof obj.set != "function")
+ {
+ return jsx.throwThis("TypeError", "Function expected for setter");
+ }
+
+ desc.set = obj.set;
+ }
+
+ if ((hasGetter || hasSetter) && (hasValue || hasWritable))
+ {
+ return jsx.throwThis("TypeError", "Cannot define getter/setter and value/writable");
+ }
+
+ return desc;
+ }
+
+ function _defineOwnProperty (obj, propertyName, descriptor, _throw, context)
+ {
+ function _isAccessorDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return _hasOwnProperty(desc, "get") || _hasOwnProperty(desc, "set");
+ }
+
+ function _isDataDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return desc.hasOwnProperty("value") || _hasOwnProperty(desc, "writable");
+ }
+
+ function _isGenericDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return !_isAccessorDescriptor(desc) && !_isDataDescriptor(desc);
+ }
+
+// var current = obj.hasOwnProperty(propertyName);
+// var extensible = obj[propertyName].[[Extensible]]
+
+ if (_isGenericDescriptor(descriptor) || _isDataDescriptor(descriptor))
+ {
+ var value = descriptor.value;
+ obj[propertyName] = value;
+
+ if (!descriptor.writable)
+ {
+ jsx.tryThis(
+ function () {
+ /* NOTE: Need getter because __defineSetter__() undefines value */
+ obj.__defineGetter__(propertyName, function () {
+ return value;
+ });
+
+ obj.__defineSetter__(propertyName, function () {});
+ },
+ function () {
+ obj[propertyName] = value;
+
+ jsx.warn((context ? context + ": " : "")
+ + "Could not define property `" + propertyName
+ + "' as read-only");
+ });
+ }
+ }
+ else
+ {
+ /* accessor property descriptor */
+ jsx.tryThis(
+ function () {
+ if (descriptor["get"])
+ {
+ obj.__defineGetter__(propertyName, descriptor["get"]);
+ }
+
+ if (descriptor["set"])
+ {
+ obj.__defineSetter__(propertyName, descriptor["set"]);
+ }
+ },
+ function () {
+ jsx.warn((context ? context + ": " : "")
+ + "Could not define special property `" + propertyName + "'."
+ + " Please use explicit getters and setters instead.");
+ });
+ }
+
+ return false;
+ }
+
+ /**
+ * @function
+ */
+ var _defineProperty = _extend(
+ /**
+ * @param {Object} o
+ * @param {Object} descriptor (optional)
+ * Property descriptor, a reference to an object that defines
+ * the attributes of the property. Must be of the form
+ * <code><pre>{
+ * propertyName: {
+ * configurable: …,
+ * enumerable: …,
+ * value: …,
+ * writable: …,
+ * get: function () {…},
+ * set: function (newValue) {…}
+ * },
+ * …
+ * }
+ * </pre></code> as specified in the ECMAScript Language Specification,
+ * Edition 5 Final, section 15.2.3.7. Note that the
+ * <code>[[Configurable]]</code> and <code>[[Enumerable]]</code>
+ * attributes cannot be emulated. The [[Writable]] attribute,
+ * and getter and setter can only be emulated if the
+ * <code>__defineGetter__()</code> and <code>__defineSetter__()</code>
+ * methods are available, respectively.
+ * @param {string} sContext (optional)
+ * The context in which the property definition was attempted.
+ * Included in the info message in case getters and setters
+ * could not be defined.
+ */
+ function (o, propertyName, descriptor, sContext) {
+ var done = false;
+
+ if (typeof Object.defineProperty == "function"
+ && !Object.defineProperty._emulated)
+ {
+ jsx.tryThis(function () {
+ Object.defineProperty(o, propertyName, descriptor);
+ done = true;
+ });
+ }
+
+ if (!done)
+ {
+ if (!/^(object|function)$/.test(typeof o) || !o)
+ {
+ return jsx.throwThis("TypeError", "Object expected");
+ }
+
+ var name = String(propertyName);
+ var desc = _toPropertyDescriptor(descriptor);
+ _defineOwnProperty(o, name, desc, true, sContext);
+ }
+
+ return o;
+ },
+ {
+ _emulated: true
+ });
+
+ return _defineProperty;
+ }());
+
+ /**
+ * Adds/replaces properties of an object.
+ *
+ * <p>
+ * <em>Not to be confused with {@link Function.prototype.extend}.</em>
+ * </p>
+ *
+ * @param {Object} oTarget
+ * Target object whose properties should be set.
+ * @param {Object} oSource
+ * Object specifying the properties to be set.
+ * The name of each property serves as the name for the
+ * property of the target object, its value as the value
+ * of that property.
+ * @param {Number} iFlags = 0
+ * Flags for the modification, see {@link #ADD_OVERWRITE}
+ * and {@link #COPY_ENUM jsx.object.COPY_*}.
+ * @return {Object}
+ * The extended object
+ */
+ function _extend (oTarget, oSource, iFlags)
+ {
+ if (typeof iFlags == "undefined")
+ {
+ iFlags = 0;
+ }
+
+ var cloneLevel = (iFlags & (_COPY_ENUM_DEEP | _COPY_INHERIT));
+
+ for (var i = 0, keys = _getKeys(oSource), len = keys.length;
+ i < len; ++i)
+ {
+ var p = keys[i];
+
+ if (typeof oTarget[p] == "undefined" || (iFlags & _ADD_OVERWRITE))
+ {
+ jsx.tryThis(function () {
+ oTarget[p] = (cloneLevel
+ ? _clone(oSource[p], cloneLevel)
+ : oSource[p]);
+ oTarget[p]._userDefined = true;
+ });
+ }
+ }
+
+ return oTarget;
+ }
+
+ var jsx_object = {
+ /**
+ * @memberOf jsx.object
+ * @version
+ */
+ version: "$Revision$ ($Date$)",
+
+ copyright: "Copyright \xA9 2004-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+// docURL: jsx.object.path + "object.htm",
+
+ ADD_OVERWRITE: _ADD_OVERWRITE,
+ COPY_ENUM: _COPY_ENUM,
+ COPY_ENUM_DEEP: _COPY_ENUM_DEEP,
+ COPY_INHERIT: _COPY_INHERIT,
+
+ isMethod: _isMethod,
+ areMethods: _isMethod,
+ isHostMethod: _isMethod,
+ areHostMethods: _isMethod,
+
+ isNativeMethod: _isNativeMethod,
+ areNativeMethods: _isNativeMethod,
+
+ /**
+ * Determines if the passed value could be the result of
+ * <code>typeof <var>callable</var></code>.
+ * <p>
+ * NOTE: This method has previously been provided by {@link types.js};
+ * optimizations in code reuse moved it here.
+ * </p>
+ * @param {string} s
+ * String to be determined a method type, i.e. "object" or "unknown" in
+ * MSHTML, "function" otherwise. The type must have been retrieved with
+ * the `typeof' operator. Note that this method may also return
+ * <code>true</code> if the value of the <code>typeof</code> operand is
+ * <code>null</code>; to be sure that the operand is a method reference,
+ * you have to && (AND)-combine the <code>isMethodType(...)</code>
+ * expression with the method reference identifier unless `typeof' yielded
+ * `unknown' for <var>s</var>.
+ * @return {boolean}
+ * <code>true</code> if <var>s</var> is a method type,
+ * <code>false</code> otherwise.
+ * @author
+ * (C) 2003-2008 Thomas Lahn &lt;types.js@PointedEars.de&gt;
+ * Distributed under the GNU GPL v3 and later.
+ * @partof http://pointedears.de/scripts/types.js
+ * @deprecated since version 0.1.5a.2009070204
+ * in favor of {@link #isMethod(Object)}
+ */
+ isMethodType: function (s) {
+ return /^\s*(function|object|unknown)\s*$/i.test(s);
+ },
+
+ _hasOwnProperty: _hasOwnProperty,
+ isObject: _isObject,
+ getKeys: _getKeys,
+ inheritFrom: _inheritFrom,
+ getClass: _getClass,
+ isArray: _isArray,
+ isNativeObject: _isNativeObject,
+
+ isHostObject: function (value) {
+ return !_isNativeObject(value);
+ },
+
+ clone: _clone,
+
+ /**
+ * @deprecated in favor of {@link #extend}
+ */
+ setProperties: _extend,
+
+ extend: _extend,
+ defineProperty: _defineProperty,
+
+ /**
+ * Defines properties of an object, if possible.
+ *
+ * Emulation of the Object.defineProperties() method from ES 5.1,
+ * section 15.2.3.7.
+ *
+ * @function
+ * @param {Object} o
+ * The object for which properties getters and setters should be defined.
+ * @param {Object} descriptor (optional)
+ * Properties descriptor, where each own property name
+ * is a property name of the new object, and each corresponding
+ * property value is a reference to an object that defines the
+ * attributes of that property.
+ * @return {Object} Reference to the object
+ * @see #defineProperty
+ */
+ defineProperties: _extend(
+ function (o, descriptor, sContext) {
+ var done = false;
+
+ if (typeof Object.defineProperties == "function"
+ && !Object.defineProperties._emulated)
+ {
+ jsx.tryThis(function () {
+ Object.defineProperties(o, descriptor);
+ done = true;
+ });
+ }
+
+ if (!done)
+ {
+ for (var i = 0, keys = _getKeys(descriptor), len = keys.length;
+ i < len; ++i)
+ {
+ var propertyName = keys[i];
+ _defineProperty(o, propertyName, descriptor[propertyName],
+ sContext);
+ }
+ }
+
+ return o;
+ },
+ {
+ _emulated: true
+ }),
+
+ /**
+ * Determines if a (non-inherited) property of an object is enumerable
+ *
+ * @param {Object} obj (optional)
+ * Object which property should be checked for enumerability.
+ * @param {string} sProperty
+ * Name of the property to check.
+ * @return {boolean}
+ * <code>true</code> if there is such a property;
+ * <code>false</code> otherwise.
+ */
+ _propertyIsEnumerable: function (obj, sProperty) {
+ if (arguments.length < 2 && obj)
+ {
+ sProperty = obj;
+ obj = jsx_object;
+ }
+
+ if (_isMethod(obj, "propertyIsEnumerable"))
+ {
+ return obj.propertyIsEnumerable(sProperty);
+ }
+
+ for (var propertyName in obj)
+ {
+ if (propertyName == name && _hasOwnProperty(obj, propertyName))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * Determines if an object, or the objects it refers to,
+ * has an enumerable property with a certain value
+ *
+ * @param {Object} obj
+ * @param needle
+ * The value to be searched for
+ * @param {Object} params
+ * Search parameters. The following properties are supported:
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Property</th>
+ * <th>Meaning</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <th><code><var>exclude</var> :&nbsp;Array</code></th>
+ * <td><code>Array</code> containing the names of the
+ * properties that should not be searched</td>
+ * </tr>
+ * <tr>
+ * <th><code><var>recursive</var> :&nbsp;boolean</code></th>
+ * <td>If a true-value, search recursively.</td>
+ * </tr>
+ * <tr>
+ * <th><code><var>strict</var> :&nbsp;boolean</code></th>
+ * <td>If a true-value, perform a strict comparison
+ * without type conversion.</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ */
+ hasPropertyValue:
+ function jsx_object_hasPropertyValue (obj, needle, params) {
+ for (var property in obj)
+ {
+ if (params && params.exclude && params.exclude.indexOf(property) > -1)
+ {
+ continue;
+ }
+
+ var propertyValue = obj[property];
+ if (params && params.recursive)
+ {
+ if (typeof propertyValue == "object" && propertyValue !== null)
+ {
+ if (jsx_object_hasPropertyValue(propertyValue, needle, params))
+ {
+ return true;
+ }
+ }
+ }
+
+ if (params && params.strict)
+ {
+ if (propertyValue === needle)
+ {
+ return true;
+ }
+ }
+ else
+ {
+ /* Switch operands because of JScript quirk */
+ if (needle == propertyValue)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * Returns the name of an unused property for an object.
+ *
+ * @param {Object} obj
+ * @param {Number} iLength
+ * Maximum property name length up to which an unused name
+ * is searched. The default is 256.
+ * @return {string}
+ * The name of a non-existing property of <code>o</code> if
+ * {@link Object#prototype.hasOwnProperty()} is supported, or
+ * the name of a property with value <code>undefined</code>
+ * if it is not supported; the empty string
+ * if there is no such property.
+ */
+ findNewProperty: function (obj, iLength) {
+ if (!obj)
+ {
+ obj = jsx_object;
+ }
+
+ if (arguments.length < 2)
+ {
+ iLength = 256;
+ }
+ else
+ {
+ iLength = parseInt(iLength, 10);
+ }
+
+ var prefix = "";
+
+ while (prefix.length < iLength)
+ {
+ for (var i = "a".charCodeAt(0), max = "z".charCodeAt(0); i <= max; ++i)
+ {
+ var ch = String.fromCharCode(i);
+ var newName = prefix + ch + "_";
+ if (!_hasOwnProperty(obj, newName))
+ {
+ return newName;
+ }
+ }
+
+ prefix += "a";
+ }
+
+ return "";
+ },
+
+ /**
+ * Returns a new object that can serve as data container.
+ *
+ * Returns a new object that, if supported, does not inherit or
+ * have any properties. This is accomplished by either cutting
+ * off its existing prototype chain or not creating one for it
+ * in the first place.
+ *
+ * @return {Object}
+ * @see Object.create
+ */
+ getDataObject: function () {
+ return _inheritFrom(null);
+ },
+
+ /**
+ * Returns a feature of an object
+ *
+ * @param {Object} obj
+ * Object which provides the feature
+ * @params {string}
+ * Property names on the feature path, including the property
+ * for the feature itself. For example, use
+ * <code>jsx.object.getFeature("foo", "bar", "baz")</code> for
+ * safe access to <code>foo.bar.baz</code>.
+ * @return {any}
+ * <code>undefined</code> if <var>obj</var> does not have such
+ * a feature. Note that features whose value can be
+ * <code>undefined</code> cannot be detected with this method.
+ */
+ getFeature: function (obj) {
+ for (var i = 1, len = arguments.length; i < len; i++)
+ {
+ var arg = arguments[i];
+ if (typeof obj != "undefined" && typeof obj[arg] != "undefined" && obj[arg])
+ {
+ obj = obj[arg];
+ }
+ else
+ {
+ return void 0;
+ }
+ }
+
+ return obj;
+ }
+ };
+
+ return jsx_object;
+}());
+
+/**
+ * Prints debug messages to the script console.
+ *
+ * NOTE: This method has previously been provided by
+ * {@link debug.js}; optimizations in code reuse
+ * moved it here.
+ *
+ * @function
+ */
+jsx.dmsg = (function () {
+ var
+ _isMethod = jsx.object.isMethod,
+ msgMap = {
+ data: {
+ info: "INFO",
+ warn: "WARNING",
+ debug: "DEBUG"
+ },
+
+ getString: function (s) {
+ var data = this.data;
+
+ if (typeof data[s] != "undefined")
+ {
+ return data[s] + ": ";
+ }
+
+ return "";
+ }
+ };
+
+ /**
+ * @param {string} sMsg
+ * Message to be printed
+ * @param {string} sType = "log"
+ * Type of the message. Supported values include
+ * <code>"log"</code> (default), <code>"info"</code>, <code>"warn"</code>,
+ * and <code>"debug"</code>. If a script console does not support
+ * a message type, the default value is used.
+ * @return {boolean}
+ * <code>true</code> if it was possible to cause the message to be printed;
+ * <code>false</code> otherwise.
+ */
+ return function (sMsg, sType) {
+ /* Firebug 0.4+ and others */
+ if (typeof console != "undefined")
+ {
+ if (!sType || !_isMethod(console, sType) && sType != "log")
+ {
+ sMsg = msgMap.getString(sType) + sMsg;
+ sType = "log";
+ }
+
+ if (sType != "info")
+ {
+ sMsg += "\n" + jsx.getStackTrace();
+ }
+
+ if (_isMethod(console, sType))
+ {
+ /* MSHTML's console methods do not implement call() */
+ Function.prototype.call.call(console[sType], console, sMsg);
+ return true;
+ }
+ }
+ else if (typeof opera != "undefined"
+ && _isMethod(opera, "postError"))
+ {
+ opera.postError(msgMap.getString(sType) + sMsg);
+ return true;
+ }
+
+ return false;
+ };
+}());
+
+/**
+ * Issues an info message, if possible.
+ *
+ * @param {String} sMsg
+ * Message
+ * @see jsx#dmsg
+ */
+jsx.info = function (sMsg) {
+ return jsx.dmsg(sMsg, jsx.MSG_INFO);
+};
+
+/**
+ * Issues a warning, if possible.
+ *
+ * @param {String} sMsg
+ * Message
+ * @see jsx#dmsg
+ */
+jsx.warn = function (sMsg) {
+ return jsx.dmsg(sMsg, jsx.MSG_WARN);
+};
+
+/**
+ * Issues an error message, if possible.
+ *
+ * @param {string} sMsg Message
+ * @see jsx#dmsg
+ */
+jsx.error = function (sMsg) {
+ return jsx.dmsg(sMsg, jsx.MSG_ERROR);
+};
+
+/**
+ * Clears the handler for the proprietary <code>error</code> event.
+ *
+ * NOTE: This method has previously been provided by {@link debug.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @return {boolean} <code>true</code>
+ */
+/*
+ * NOTE: Initialization must come before the initialization of
+ * setErrorHandler() as it is used in a closure there,
+ * see Message-ID <2152411.FhMhkbZ0Pk@PointedEars.de>
+ */
+jsx.clearErrorHandler = function () {
+ if (typeof window != "undefined")
+ {
+ /*
+ * debug.js 0.99.5.2006041101 BUGFIX:
+ * onerror is defined as a property of window, not of the Global Object
+ */
+ window.onerror = null;
+ }
+
+ return true;
+};
+
+/**
+ * Sets the handler for the proprietary <code>error</code> event.
+ *
+ * NOTE: This method has previously been provided by {@link debug.js};
+ * and {@link types.js}; optimizations in code reuse moved it here.
+ *
+ * @function
+ */
+jsx.setErrorHandler = (function () {
+ var
+ jsx_object = jsx.object,
+ jsx_clearErrorHandler = jsx.clearErrorHandler;
+
+ /**
+ * @param {Callable} fHandler
+ * @return {boolean}
+ * <code>true</code> if the error handler could be assigned to
+ * successfully, <code>false</code> otherwise. Note that one reason
+ * for failure can be that an event handler is no longer supported
+ * by the UA's DOM due to efforts towards adherence to Web standards.
+ */
+ return function (fHandler) {
+ /*
+ * NOTE: There is no deadlock here because even if `fHandler' is a string,
+ * `isMethod(fHandler)' will call `setErrorHandler()' without arguments;
+ * so fHandler in that call will be `undefined' and `setErrorHandler()'
+ * is not called again.
+ */
+ if (!jsx_object.isMethod(fHandler))
+ {
+ fHandler = jsx_clearErrorHandler;
+ }
+
+ if (typeof assertFalse == "function")
+ {
+ assertFalse(typeof fHandler == "undefined", false,
+ "jsx.setErrorHandler(fHandler)");
+ }
+
+ if (typeof window != "undefined"
+ && typeof fHandler != "undefined")
+ {
+ /*
+ * debug.js 0.99.5.2006041101 BUGFIX:
+ * onerror is defined as a property of window, not of the Global Object
+ */
+ window.onerror = fHandler;
+ }
+
+ return (typeof window.onerror != "undefined"
+ && window.onerror == fHandler);
+ };
+}());
+
+/**
+ * Throws an exception, including an execution context hint if provided,
+ * followed by an error message.
+ *
+ * NOTE: This method has previously been provided by {@link exception.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @function
+ * @author
+ * Copyright (c) 2008, 2013 Thomas 'PointedEars' Lahn <cljs@PointedEars.de>.
+ * Distributed under the GNU GPL v3 and later.
+ * @partof JSX:object.js
+ */
+jsx.throwThis = (function () {
+ var
+ _jsx_object = jsx.object,
+ _addslashes = function (e) {
+ return (typeof e == "string"
+ ? e.replace(/["'\\]/g, "\\$&").replace(/\r?\n|\r/g, "\\n")
+ : e);
+ };
+
+ /**
+ * @param {string|Function|Error} errorType
+ * Expression for the constructor of the error type, or a reference
+ * to an object inheriting from <code>Error.prototype</code>.
+ * Use a false-value (e.g., <code>""</code> or <code>null</code>)
+ * to throw an unqualified exception.
+ * @param {string|Array} message
+ * Error message to be displayed. If an <code>Array</code>,
+ * it is passed as argument list to the constructor for the error type
+ * @param {Callable|string} context
+ * Optional callable object to specify the context
+ * where the exception occurred.
+ */
+ return function (errorType, message, context) {
+ var sErrorType = errorType;
+ var isError = false;
+
+ var messageIsArray =_jsx_object.isArray(message);
+ if (typeof Error == "function"
+ && Error.prototype.isPrototypeOf(errorType))
+ {
+ isError = true;
+ sErrorType = "errorType";
+ }
+ else
+ {
+ var t = typeof errorType;
+
+ if (t == "function" || t == "string")
+ {
+ if (t == "function")
+ {
+ sErrorType = "errorType";
+ }
+ else if (t == "string")
+ {
+ sErrorType = errorType;
+ }
+
+ if (!messageIsArray)
+ {
+ sErrorType = "new " + sErrorType;
+ }
+ }
+ }
+
+ var sContext = "";
+
+ var stack = jsx.getStackTrace();
+ if (stack)
+ {
+ sContext = "\n\n" + stack;
+ }
+
+ /* DEBUG: set breakpoint here */
+ if (!sContext)
+ {
+ if (_jsx_object.isMethod(context))
+ {
+ sContext = (String(context).match(/^\s*(function.+\))/)
+ || [, null])[1];
+ sContext = (sContext ? sContext + ': ' : '');
+ }
+ }
+
+ /*
+ * Array or array-like object for exception constructor's
+ * argument list
+ */
+ if (_jsx_object.isMethod(message, "map"))
+ {
+ message = message.map(_addslashes);
+ }
+ else
+ {
+ message = (message || "") + (sContext || "");
+ message = '"' + _addslashes(message) + '"';
+ }
+
+ /* DEBUG */
+ var throwStmt = 'throw ' + (sErrorType ? sErrorType : '')
+ + (isError
+ ? ''
+ : (messageIsArray
+ ? '.construct(message)'
+ : '(' + (message || '') + ')'))
+ + ';';
+
+ eval(throwStmt);
+ };
+}());
+
+/**
+ * Rethrows arbitrary exceptions
+ *
+ * @param {Error} exception
+ */
+jsx.rethrowThis = function (exception) {
+ eval("throw exception");
+};
+
+if (jsx.options.augmentBuiltins)
+{
+ jsx.object.extend(Object, {
+ /**
+ * @see jsx.object.defineProperty
+ */
+ defineProperty: jsx.object.defineProperty,
+
+ /**
+ * @see jsx.object.defineProperties
+ */
+ defineProperties: jsx.object.defineProperties
+ });
+
+ if (typeof Object.create != "function")
+ {
+ /**
+ * Creates a new object and initializes its properties.
+ *
+ * Emulation of the Object.create() method from ES 5.1,
+ * section 15.2.3.5.
+ *
+ * @param {Object|Null} prototype
+ * @param {Object} descriptor (optional)
+ * Properties descriptor, where each own property name
+ * is a property name of the new object, and each corresponding
+ * property value is a reference to an object that defines the
+ * attributes of that property. Supported properties of
+ * that defining object include <code>value</code> only
+ * at this time.
+ * @return {Object} Reference to the new object
+ */
+ Object.create = jsx.object.extend(
+ function (prototype, descriptor) {
+ var o = jsx.object.inheritFrom(prototype);
+
+ if (typeof descriptor != "undefined")
+ {
+ Object.defineProperties(o, descriptor);
+ }
+
+ return o;
+ },
+ {
+ /**
+ * @memberOf Object.create
+ */
+ _emulated: true
+ }
+ );
+ }
+
+ if (typeof Object.keys != "function")
+ {
+ /**
+ * @param {Object} obj
+ */
+ Object.keys = function (obj) {
+ return jsx.object.getKeys(obj);
+ };
+
+ Object.keys._emulated = true;
+ }
+}
+
+/**
+ * Emulates the <code>instanceof</code> operator (JavaScript 1.5)
+ * compatible to JavaScript 1.1 for <strong>one</strong>
+ * inheritance level.
+ *
+ * Example:
+ * <pre><code>
+ * var o = new Object();
+ * o instanceof Object; // yields `true'
+ *
+ * function Foo()
+ * {
+ * }
+ * var o = new Foo();
+ * o instanceof Object; // yields `true'
+ * o instanceof Foo; // yields `true' also
+ *
+ * var _isInstanceOf = jsx.object.isInstanceOf;
+ * _isInstanceOf(o, Object); // yields `false'
+ * _isInstanceOf(o, Foo); // yields `true'
+ * </code></pre>
+ *
+ * NOTE: This method has previously been provided by {@link types.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @author (C) 2003, 2011, 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @param {Object} obj
+ * Expression to be determined a <var>Prototype</var> object.
+ * @param {Function} Constructor
+ * Object to be determined the constructor of a.
+ * @return {boolean}
+ * <code>true</code> if <code>obj</code> is an object derived
+ * from <var>Prototype</var>, <code>false</code> otherwise.
+ */
+jsx.object.isInstanceOf = //(function () {
+// var jsx_object = jsx.object;
+//
+// return
+ function (obj, Constructor) {
+ return !!(obj && Constructor
+ && typeof obj.constructor != "undefined"
+ && obj.constructor == Constructor
+
+ /*
+ * For a built-in type T, T.prototype often has the same
+ * [[Class]] like instances (exception: RegExp);
+ * BUT error-prone for native user-defined objects (Color "==" KeyValue)!
+ */
+// || jsx_object.getClass(obj) == jsx_object.getClass(Prototype.prototype)
+ );
+ };
+//}());
+
+/**
+ * Returns the name of a function
+ *
+ * @param {Function|String} aFunction
+ * @return {string}
+ * The name of a function if it has one; the empty string otherwise.
+ */
+jsx.object.getFunctionName = function (aFunction) {
+ /* Return the empty string for null or undefined */
+ return (aFunction != null
+ && typeof aFunction.name != "undefined" && aFunction.name)
+ || (String(aFunction).match(/\s*function\s+([A-Za-z_]\w*)/) || [, ""])[1];
+};
+
+/**
+ * Returns minimum documentation for a function
+ *
+ * @param {Function|String} aFunction
+ * @return {string}
+ */
+jsx.object.getDoc = function (aFunction) {
+ return (String(aFunction).match(
+ /^\s*(function(\s+[A-Za-z_]\w*)?\s*\([^\)]*\))/) || [, ""])[1];
+};
+
+/**
+ * Gets the stack trace of the calling execution context.
+ *
+ * Based on getStackTrace() from jsUnit 2.2alpha of 2006-03-24.
+ *
+ * @return {string}
+ * The stack trace of the calling execution context, if available.
+ */
+jsx.getStackTrace = function () {
+ /**
+ * @private
+ * @param {Error} excp
+ */
+ function parseErrorStack(excp)
+ {
+ var stack = [];
+
+ if (excp && excp.stack)
+ {
+ var stacklist = excp.stack.split('\n');
+
+// for (var i = 0; i < stacklist.length - 1; i++)
+// {
+// var framedata = stacklist[i];
+//
+// var name = framedata.match(/^\s*(at\s+)?(\w*)/)[2];
+// if (!name)
+// {
+// name = 'anonymous';
+// }
+//
+// stack.push(name);
+// }
+ stack = stacklist;
+
+ /* remove top level anonymous functions to match JScript */
+// while (stack.length && stack[stack.length - 1] == 'anonymous')
+// {
+// stack.length = stack.length - 1;
+// }
+ }
+
+ return stack;
+ }
+
+ var result = '';
+
+ if (typeof arguments.caller != 'undefined')
+ {
+ /* JScript and older JavaScript */
+ for (var a = arguments.caller; a != null; a = a.caller)
+ {
+ result += '> ' + (jsx.object.getFunctionName(a.callee) || "anonymous")
+ + '\n';
+ if (a.caller == a)
+ {
+ result += '*';
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* other */
+ if (typeof Error != "function")
+ {
+ return result;
+ }
+
+ var stack = parseErrorStack(new Error());
+ result = stack.slice(2).join("\n");
+// for (var i = 1; i < stack.length; i++)
+// {
+// result += '> ' + stack[i] + '\n';
+// }
+ }
+
+ return result;
+};
+
+/**
+ * Retrieves the value of a property of an object
+ *
+ * @param {Object} obj
+ * @param {string} sProperty
+ * @param aDefault
+ * @return {any}
+ * @throws {@link #PropertyError} if the property
+ * does not exist or has the <code>undefined</code> value, and
+ * <var>aDefault</var> was not provided
+ */
+jsx.object.getProperty = function (obj, sProperty, aDefault) {
+ if (typeof obj[sProperty] != "undefined")
+ {
+ return obj[sProperty];
+ }
+
+ /* default value not passed */
+ if (arguments.length < 3)
+ {
+ return jsx.throwThis("jsx.object.PropertyError", sProperty);
+ }
+
+ return aDefault;
+};
+
+/**
+ * Returns the absolute path for a URI-reference
+ *
+ * @param {string} relativePath
+ * @param {string} basePath
+ * @return {string}
+ */
+jsx.absPath = function (relativePath, basePath) {
+ var uri = (basePath || document.URL).replace(/[?#].*$/, "").split("/");
+ relativePath = relativePath.split("/");
+
+ if (uri[uri.length - 1] != "")
+ {
+ uri.pop();
+ }
+
+ for (var i = 0, len = relativePath.length; i < len; ++i)
+ {
+ var component = relativePath[i];
+ if (component == "..")
+ {
+ uri.pop();
+ }
+ else if (component != ".")
+ {
+ uri.push(component);
+ }
+ }
+
+ return uri.join("/");
+};
+
+/**
+ * Imports object properties into the global namespace.
+ *
+ * Convenience method, also for backwards compatibility to versions before
+ * strict namespacing. Does not load script files dynamically; use
+ * jsx.importFrom() for that and include jsx.net.http.
+ *
+ * @function
+ * @return {boolean}
+ * <code>false</code> if <var>properties</var> is provided and not
+ * all properties could be imported; <code>true</code> otherwise.
+ * @throws TypeError, if <var>obj</var> is not an iterable object
+ */
+jsx._import = (function () {
+ var _jsx_object = jsx.object;
+ var _getKeys = _jsx_object.getKeys;
+ var _hasOwnProperty = _jsx_object._hasOwnProperty;
+ var _isArray = _jsx_object.isArray;
+
+ /**
+ * @param {Object} obj
+ * @param {string|Array|Null} properties (optional)
+ * Name or list of names of properties to import. If not
+ * provided or <code>null</code>, all own enumerable properties
+ * of <var>obj</var> are imported.
+ * @param {string} objAlias (optional)
+ * The alias property on the Global object that should be used
+ * instead of the Global Object. Helps to avoid spoiling
+ * the global namespace.
+ * @param {string|Array} propertyAliases (optional)
+ * The alias(es) that should be used for each property, in order,
+ * that is specified in <var>properties</var>. Helps to avoid
+ * overwriting property values.
+ * There must be specified as many aliases as properties were
+ * specified. Ignored if <var>properties</var> is
+ * <code>null</code>.
+ */
+ return function (obj, properties, objAlias, propertyAliases) {
+ if (!obj)
+ {
+ return jsx.throwThis("TypeError",
+ "expected iterable object, saw " + obj + " : " + (obj === null ? "Null" : typeof obj),
+ "jsx._import");
+ }
+
+ var result = true;
+
+ var root = jsx.global;
+ if (objAlias != null)
+ {
+ root[objAlias] = {};
+ root = root[objAlias];
+ }
+
+ var propertiesArg = properties;
+ if (properties == null)
+ {
+ properties = _getKeys(obj);
+ }
+ else if (!_isArray(properties))
+ {
+ properties = [properties];
+ }
+
+ var len = properties.length;
+ if (propertiesArg != null && propertyAliases != null)
+ {
+ if (!_isArray(propertyAliases))
+ {
+ propertyAliases = [propertyAliases];
+ }
+
+ if (len != propertyAliases.length)
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Different number of property names and aliases",
+ len, propertyAliases.length],
+ "jsx._import");
+ }
+ }
+
+ for (var i = 0; i < len; ++i)
+ {
+ var sourceProperty = properties[i];
+ if (propertiesArg == null || _hasOwnProperty(obj, sourceProperty))
+ {
+ var targetProperty = sourceProperty;
+ if (propertiesArg != null && propertyAliases != null)
+ {
+ targetProperty = propertyAliases[i];
+ }
+
+ root[targetProperty] = obj[sourceProperty];
+ }
+ else
+ {
+ result = false;
+ }
+ }
+
+ return result;
+ };
+}());
+
+/* ES 5: Reserved words may be used in MemberExpression */
+jsx["import"] = jsx._import;
+
+/**
+ * Imports a script, and optionally the object it defines, or some of their
+ * properties, into the global namespace.
+ *
+ * NOTE: Issues a synchronously-handled HTTP request which blocks all script
+ * execution until a response is received or the request times out.
+ * Can therefore not be used to import jsx.net.http.
+ *
+ * @function
+ * @requires jsx.net.http#Request
+ * @return {boolean}
+ * <code>true</code> if the script could be successfully <em>loaded</em>
+ * (not: included).
+ */
+jsx.importFrom = (function () {
+ /* Imports */
+ var _import = jsx._import;
+ var _Request;
+
+ /**
+ * @param {string} uri
+ * URI of the script to be imported
+ * @param {Object} obj
+ * Object from the script to be imported (optional)
+ * @param {Array} properties (optional)
+ * Properties of the object from the script to be imported (optional).
+ * See {@link jsx#_import}.
+ * @param {string} objAlias (optional)
+ * See {@link jsx#_import}.
+ * @param {Array} propertyAliases (optional)
+ * See {@link jsx#_import}.
+ */
+ return function jsx_importFrom (uri, obj, properties, objAlias, propertyAliases) {
+ /* One-time import */
+ if (!_Request)
+ {
+ _Request = jsx.net.http.Request;
+ }
+
+ jsx_importFrom.lastImport = uri;
+ var req = new _Request(uri, "GET", false, function (response) {
+ /*
+ * NOTE: Passing response.responseText to eval() is not ES5-compatible;
+ * conforming implementations create a new execution context with
+ * EMPTY scope chain.
+ */
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+
+ if (typeof script.text == "undefined")
+ {
+ script.appendChild(document.createTextNode(response.responseText));
+ }
+ else
+ {
+ script.text = response.responseText;
+ }
+
+ /* NOTE: document.head was introduced with HTML5 WD */
+ (document.head || document.getElementsByTagName("head")[0]).appendChild(script);
+
+ if (arguments.length > 1)
+ {
+ return _import(obj, properties, objAlias, propertyAliases);
+ }
+
+ return true;
+ });
+
+ return req.send();
+ };
+}());
+
+/**
+ * Imports once an object or some of its properties
+ * from a script resource into the global namespace.
+ *
+ * @function
+ * @return {boolean}
+ * <code>true</code> if the script specified by <var>uri</var>
+ * has already been included; <code>false</code> otherwise.
+ * @see jsx#importFrom
+ */
+jsx.importOnce = (function () {
+ var _getProperty = jsx.object.getProperty;
+ var _absPath = jsx.absPath;
+ var _importFrom = jsx.importFrom;
+
+ /**
+ * @param {string} uri
+ * URI of the resource to be imported
+ * @param {Object} obj
+ * Object to import
+ * @param {Array} properties (optional)
+ * Properties of the object from the script to be imported.
+ * See {@link jsx#_import}.
+ * @param {string} objAlias (optional)
+ * See {@link jsx#_import}.
+ * @param {Array} propertyAliases (optional)
+ * See {@link jsx#_import}.
+ */
+ function importOnce (uri, obj, properties, objAlias, propertyAliases)
+ {
+ /**
+ * @param {string} uri
+ */
+ function scriptIncluded (uri)
+ {
+ var scripts = document.getElementsByTagName("script");
+ if (scripts)
+ {
+ var uriAbsPath = _absPath(uri);
+ for (var i = 0, len = scripts.length; i < len; ++i)
+ {
+ var script = scripts[i];
+ if (_absPath(script.src) == uriAbsPath)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ var result = false;
+
+ if (uri
+ && !scriptIncluded(uri)
+ && !_getProperty(importOnce.imports, uri, null))
+ {
+ result = _importFrom(uri, obj, properties, objAlias, propertyAliases);
+ if (result)
+ {
+ importOnce.imports[uri] = true;
+ }
+ }
+
+ return result;
+ }
+
+ importOnce.imports = {};
+
+ return importOnce;
+}());
+
+/**
+ * Executes a function if and once its requirements are fulfilled.
+ *
+ * @function
+ * @return {any}
+ * The return value of <var>callback</var>,
+ * <code>undefined</code> otherwise.
+ */
+jsx.require = (function () {
+ var _importOnce = jsx.importOnce;
+ var _isArray = jsx.object.isArray;
+
+ /**
+ * @param {string|Array} uri
+ * URI-reference or <code>Array</code> of URI-references
+ * specifying the requirement(s)
+ * @param {Function} callback
+ * Function to be executed
+ * @return {mixed}
+ * The return value of <var>callback</var>,
+ * <code>false</code> otherwise.
+ */
+ return function (uri, callback) {
+ if (!_isArray(uri))
+ {
+ uri = [uri];
+ }
+
+ var success = true;
+ for (var i = 0, len = uri.length; i < len; ++i)
+ {
+ if (!_importOnce(uri[i]))
+ {
+ success = false;
+ break;
+ }
+ }
+
+ if (success)
+ {
+ return callback();
+ }
+ };
+}());
+
+if (jsx.options.augmentPrototypes)
+{
+/* Disabled until ECMAScript allows to hide properties from iteration */
+//jsx.object.extend(Object.prototype, {
+// extend : extend,
+// clone : clone,
+// findNewProperty: findNewProperty,
+// _hasOwnProperty: _hasOwnProperty
+// });
+
+ /*
+ * KJS 3.5.1 does not support named FunctionExpressions within Object
+ * literals if the literal is an AssignmentExpression (right-hand side
+ * of an assignment or a passed function argument).
+ * fixed since <http://bugs.kde.org/show_bug.cgi?id=123529>
+ */
+
+ jsx.object.extend(Function.prototype, {
+ /**
+ * Applies a method of another object in the context
+ * of a different object (the calling object).
+ *
+ * @memberOf Function#prototype
+ * @function
+ * @return {any}
+ */
+ apply: (function () {
+ var
+ jsx_object = jsx.object,
+ jsx_global = jsx.global;
+
+ /**
+ * @param {Object} thisArg
+ * Reference to the calling object
+ * @param {Array} argArray
+ * Arguments for the object
+ */
+ return function (thisArg, argArray) {
+ if (!thisArg)
+ {
+ thisArg = jsx_global;
+ }
+
+ var
+ o = {},
+ p = jsx_object.findNewProperty(o);
+
+ if (p)
+ {
+ o[p] = thisArg || this;
+
+ var a = new Array();
+ for (var i = 0, len = argArray.length; i < len; i++)
+ {
+ a[i] = "argArray[" + i + "]";
+ }
+
+ eval("o[p](" + a + ")");
+
+ delete o[p];
+ }
+ };
+ }()),
+
+ /**
+ * Calls (executes) a method of another object in the
+ * context of a different object (the calling object).
+ *
+ * @memberOf Function#prototype
+ * @param {Object} thisArg
+ * Reference to the calling object. SHOULD NOT
+ * be a host object, since augmentation is required.
+ * @params {_}
+ * Arguments for the object.
+ */
+ call: function (thisArg) {
+ var a = new Array();
+
+ for (var i = 1, len = arguments.length; i < len; i++)
+ {
+ a[i] = "arguments[" + i + "]";
+ }
+
+ if (!thisArg)
+ {
+ thisArg = jsx.global;
+ }
+
+ var
+ o = {},
+ p = jsx.object.findNewProperty(o);
+
+ if (p)
+ {
+ o[p] = this;
+ eval("o[p](" + a + ")");
+ delete o[p];
+ o = null;
+ }
+ },
+
+ /**
+ * Returns a <code>Function</code> that has a defined
+ * <code>this</code> value and calls the calling
+ * <code>Function</code> with default parameters.
+ *
+ * @function
+ * @return {Function}
+ * @see 15.3.4.5 Function.prototype.bind (thisArg [, arg1 [, arg2, ...]])
+ */
+ bind: (function () {
+ var _slice;
+ var _getClass = jsx.object.getClass;
+
+ /**
+ * @param {Object} thisArg
+ * <code>this</code> value of the returned
+ * <code>Function</code>
+ * @params Default parameters
+ */
+ return function (thisArg) {
+ var target = this;
+ if (typeof target != "function")
+ {
+ return jsx.throwThis("TypeError");
+ }
+
+ if (!_slice)
+ {
+ _slice = Array.prototype.slice;
+ }
+
+ var boundArgs = _slice.call(arguments, 1);
+ var f = function () {
+ return target.apply(thisArg, boundArgs.concat(_slice.call(arguments)));
+ };
+
+ if (_getClass(target) == "Function")
+ {
+ f.length = target.length + boundArgs.length;
+ }
+ else
+ {
+ if (typeof Object.defineProperty == "function")
+ {
+ /*
+ * [[Writable]]: false, [[Enumerable]]: false,
+ * [[Configurable]]: false
+ */
+ Object.defineProperty(f, "length");
+ }
+ else
+ {
+ f.length = 0;
+ }
+ }
+
+ return f;
+ };
+ }()),
+
+ /**
+ * Constructs a new object using the calling object as constructor
+ * and elements of the referred array as items of the arguments list.
+ * <p>
+ * Example:
+ * <pre><code>var d = Date.construct([2009, 8, 1]);</code></pre>
+ * is equivalent to
+ * <pre><code>var d = new Date(2009, 8, 1);</code></pre>
+ * but, by contrast, allows for passing an arbitrary number of
+ * arguments per the array's elements.
+ * </p>
+ * @memberOf Function#prototype
+ * @param {Array} argArray
+ * @return {Object} Reference to the new instance
+ */
+ construct: function (argArray) {
+ var a = new Array();
+ for (var i = 0, len = argArray.length; i < len; ++i)
+ {
+ a[i] = "argArray[" + i + "]";
+ }
+
+ return eval("new this(" + a + ")");
+ },
+
+ /**
+ * @author Courtesy of Asen Bozhilov, slightly adapted
+ * @function
+ * @memberOf Function#prototype
+ * @return {Object} Reference to the new instance
+ */
+ construct2: (function () {
+ function Dummy(constructor, argArray) {
+ constructor.apply(this, argArray);
+ }
+
+ /**
+ * @param {Array} argArray
+ */
+ return function (argArray) {
+ Dummy.prototype = this.prototype;
+ return new Dummy(this, argArray);
+ };
+ }())
+ });
+}
+
+/**
+ * Includes the prototype object of another object in the prototype
+ * chain of objects created with the calling Function object.
+ * <p>
+ * Used with constructors to establish multi-level prototype-based
+ * inheritance (much like class-based inheritance in Java). To that end,
+ * this method adds a <code>_super</code> property to the function to refer
+ * to <var>Constructor</var>, the constructor of the parent prototype.
+ * Likewise, instances constructed with the resulting function have a
+ * <code>_super</code> property to refer to their constructor.
+ * </p><p>
+ * NOTE: Because of this, you need to use the constructor's
+ * <code>_super</code> property if you want to refer to the parent's
+ * constructor in the instance's constructor; using the instance's
+ * <code>_super</code> property would result in infinite recursion,
+ * and ultimately a stack overflow. You may call the parent's
+ * constructor explicitly within the constructor of the child, using
+ * the (equivalent of the) <code>arguments.callee._super.call()</code>
+ * method (or calling it explicitly as a method of the inheriting
+ * prototype); in prototype methods, use
+ * <code><var>Constructor</var>._super.prototype.method.call()</code>
+ * or refer to the parent constructor directly.
+ * </p>
+ * <p><em>Not to be confused with {@link jsx.object#extend}.</em></p>
+ *
+ * @function
+ * @return {Function}
+ * A reference to the constructor of the extended prototype object
+ * if successful; <code>null</code> otherwise.
+ */
+Function.prototype.extend = (function () {
+ var _jsx = jsx;
+ var _jsx_object = _jsx.object;
+
+ /**
+ * @private
+ * @function
+ * @return {Object}
+ */
+ var _iterator = (function () {
+ /* Optimize if ECMAScript 5 features were available */
+ if (typeof Object.defineProperties == "function")
+ {
+ return function () {
+ return this;
+ };
+ }
+
+ return function () {
+ _jsx.warn("for (var p in o.iterator()) { f(); } is inefficient,"
+ + " consider using o.forEach(f, ...) instead");
+
+ var o = new Object();
+
+ for (var p2 in this)
+ {
+ switch (p2)
+ {
+ case "_super":
+ case "constructor":
+ case "iterator":
+ case "forEach":
+ break;
+
+ default:
+ o[p2] = true;
+ }
+ }
+
+ return o;
+ };
+ }());
+
+ function _forEach(fCallback, thisObj)
+ {
+ var t = typeof fCallback;
+ if (!_jsx_object.isMethod(fCallback))
+ {
+ return _jsx.throwThis(
+ "TypeError",
+ (!/^\s*unknown\s*$/i.test(t) ? fCallback : "arguments[0]")
+ + " is not a function",
+ this + ".forEach");
+ }
+
+ for (var p in this)
+ {
+ switch (p)
+ {
+ case "_super":
+ case "constructor":
+ case "iterator":
+ case "forEach":
+ break;
+
+ default:
+ /* also supports host object's methods */
+ Function.prototype.call.call(fCallback, thisObj, this[p], p, this);
+ }
+ }
+ }
+
+ /**
+ * @param {Function} fConstructor
+ * Constructor from which prototype object should be
+ * inherited.
+ * @param {Object} oProtoProps
+ * Object from which to shallow-copy properties as prototype
+ * properties. Of those, the <code>_super</code>,
+ * <code>constructor</code>, and <code>_userDefined</code>
+ * properties are ignored as they are used internally.
+ */
+ return function (fConstructor, oProtoProps) {
+ var me = this;
+
+ /*
+ * Allows constructor to be null or undefined to inherit from
+ * Object.prototype by default (see below)
+ */
+ if (fConstructor == null)
+ {
+ if (typeof fConstructor == "undefined")
+ {
+ /* Passing undefined is probably unintentional, so warn about it */
+ _jsx.warn((_jsx_object.getFunctionName(me) || "[anonymous Function]")
+ + ".extend(" + "undefined, " + oProtoProps + "):"
+ + " Parent constructor is undefined, using Object");
+ }
+
+ fConstructor = "Object";
+ }
+
+ /*
+ * Supports strings being passed that denote properties of the
+ * Global Object.
+ *
+ * TODO: An API that only registers strings as references to features
+ * defined later, and implements inheritance using this registry
+ * on user call only, might be useful for constructors defined
+ * in Object initializers.
+ */
+ if (typeof fConstructor.valueOf() == "string")
+ {
+ fConstructor = _jsx.global[fConstructor];
+ }
+
+ var t = typeof fConstructor;
+ if (t != "function")
+ {
+ _jsx.throwThis("TypeError",
+ (/\s*unknown\s*/i.test(t) ? "Unknown" : t) + " is not a function");
+ return null;
+ }
+
+ this.prototype = _jsx_object.inheritFrom(fConstructor.prototype);
+
+ if (oProtoProps)
+ {
+ for (var p in oProtoProps)
+ {
+ this.prototype[p] = oProtoProps[p];
+ }
+ }
+
+ this._super = fConstructor;
+ this.prototype._super = fConstructor.prototype;
+ this.prototype.constructor = this;
+ this._userDefined = true;
+
+ /* PERF: for (var p in o.iterator()) is rather inefficient */
+ /**
+ * @deprecated
+ * @return {Object}
+ */
+ if (typeof this.prototype.iterator != "function")
+ {
+ this.prototype.iterator = _iterator;
+ }
+
+ /* Optimize iteration if ECMAScript 5 features are available */
+ if (typeof Object.defineProperties == "function")
+ {
+ var
+ userDefProtoProps = ["_super", "constructor", "iterator"],
+ oDescriptors = {},
+ proto = this.prototype;
+
+ for (var i = userDefProtoProps.length; i--;)
+ {
+ p = userDefProtoProps[i];
+ oDescriptors[p] = {
+ value: proto[p],
+ enumerable: false
+ };
+ }
+
+ _jsx.tryThis(
+ function () {
+ Object.defineProperties(proto, oDescriptors);
+ },
+ function (e) {
+ _jsx.warn(_jsx_object.getFunctionName(me) + ".extend("
+ + _jsx_object.getFunctionName(fConstructor) + ", "
+ + oProtoProps + "): " + e.name + ': ' + e.message);
+ });
+ }
+
+ if (typeof this.prototype.forEach != "function")
+ {
+ /**
+ * Calls a function for each real property of the object
+ * in arbitrary order. Workaround for for-in iteration
+ * on objects with augmented prototype object.
+ *
+ * @param {Function} fCallback
+ * @param {Object} thisObj (optional)
+ * @throws TypeError
+ */
+ this.prototype.forEach = _forEach;
+
+ /* Optimize iteration if ECMAScript 5 features are available */
+ if (typeof Object.defineProperty == "function")
+ {
+ _jsx.tryThis(
+ function () {
+ Object.defineProperty(me.prototype, "forEach", {
+ value: me.prototype.forEach,
+ enumerable: false
+ });
+ },
+ function (e) {
+ /* IE 8 goes here */
+ _jsx.warn(
+ 'Borken implementation: Object.defineProperty is a method'
+ + ' but [[Call]](this.prototype, "forEach") throws exception ("'
+ + e.name + ': ' + e.message + '")');
+ }
+ );
+ }
+ }
+
+ return this;
+ };
+}());
+
+jsx.array = {
+ version: jsx.object.version,
+
+ /**
+ * Maps elements of an <code>Array</code>-like object
+ * to named properties of another object.
+ *
+ * <p>NOTE: Equivalent to Array destructuring (JavaScript 1.7+):</p>
+ * <pre><code>var o = Array.destructure(["bar", "foo"], ["foo", "bar"]);</code></pre>
+ * is equivalent to
+ * <pre><code>var o = {};
+ * [o.foo, o.bar] = ["bar", "foo"];</code></pre>
+ *
+ * @param {Object} a
+ * <code>Array</code>-like object whose elements should be mapped.
+ * @param {Array} properties
+ * Names of the properties that array elements should be mapped to.
+ * If an element of this <code>Array</code> is <code>undefined</code>
+ * or <code>null</code> (the former can be facilitated with
+ * simply omitting the element value in an <code>Array</code>
+ * Initialiser when not the last element of this <code>Array</code>),
+ * the corresponding element of <var>a</var> is not mapped.
+ * @param {Object} oTarget
+ * Target object. If a false-value, a new <code>Object</code>
+ * instance is being created.
+ * @returns {Object}
+ * <var>oTarget</var> or a new <code>Object</code> instance
+ * augmented with the specified properties and values.
+ */
+ destructure: function (a, properties, oTarget) {
+ var o = oTarget || {};
+
+ for (var i = 0, len = properties.length; i < len; ++i)
+ {
+ var propertyName = properties[i];
+ if (propertyName != null)
+ {
+ o[propertyName] = a[i];
+ }
+ }
+
+ return o;
+ },
+
+ /**
+ * Maps one array to another
+ *
+ * @function
+ * @return {Array}
+ * <var>array</var> with <var>callback</var> applied to each element.
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.19
+ */
+ map: (function () {
+ var _isMethod = jsx.object.isMethod;
+
+ /**
+ * @param {Array} array
+ * Array to be mapped
+ * @param {Callable} callback
+ * @param {Object} oThis (optional)
+ */
+ function _map (array, callback, oThis)
+ {
+ if (!_isMethod(callback))
+ {
+ return jsx.throwThis("TypeError",
+ (_isMethod(callback, "toSource") ? callback.toSource() : callback)
+ + " is not callable",
+ this + ".map");
+ }
+
+ var
+ len = array.length >>> 0,
+ res = [];
+
+ for (var i = 0; i < len; ++i)
+ {
+ if (i in array)
+ {
+ res[i] = callback.call(oThis, array[i], i, array);
+ }
+ }
+
+ return res;
+ }
+
+ return _map;
+ }())
+};
+
+/**
+ * Returns an <code>Array</code> created from mapping items
+ * of an Array-like object.
+ *
+ * @param {Object} iterable
+ * <code>Array</code>-like object
+ * @param {Function} builder (optional)
+ * Mapping function whose return value specifies the
+ * mapped value in the new <code>Array</code>.
+ * Pass <code>null</code> for no mapping.
+ * @param {Object} oThis (optional)
+ * <code>this</code> value in the mapping function
+ * @return {Array}
+ * @see Array.prototype#map
+ */
+jsx.array.from = function (iterable, builder, oThis) {
+ if (arguments.length < 2)
+ {
+ builder = null;
+ }
+
+ if (arguments.length > 1 && builder && typeof builder != "function")
+ {
+ return jsx.throwThis("TypeError",
+ (_isMethod(builder, "toSource") ? builder.toSource() : builder)
+ + " is not callable",
+ this + ".map");
+ }
+
+ if (arguments.length < 3)
+ {
+ oThis = iterable;
+ }
+
+ var
+ len = iterable.length >>> 0,
+ res = [];
+
+ for (var i = 0; i < len; ++i)
+ {
+ res[i] = (builder
+ ? builder.call(oThis, iterable[i], i, iterable)
+ : oThis[i]);
+ }
+
+ return res;
+};
+
+if (jsx.options.augmentBuiltins)
+{
+ /* Defines Array.isArray() if not already defined */
+ jsx.object.extend(Array, {
+ destructure: jsx.array.destructure,
+ from: jsx.array.from,
+ isArray: jsx.object.isArray
+ });
+}
+
+if (jsx.options.augmentPrototypes)
+{
+ /*
+ * Defines Array.prototype.indexOf(), .map() and .slice()
+ * if not already defined
+ */
+ jsx.object.extend(Array.prototype, {
+ /**
+ * Returns the first index at which a given element can be found in
+ * the array, or -1 if it is not present.
+ *
+ * @param searchElement
+ * Element to locate in the array.
+ * @param {Number} fromIndex
+ * The index at which to begin the search. Defaults to 0, i.e.
+ * the whole array will be searched. If the index is greater than
+ * or equal to the length of the array, -1 is returned, i.e.
+ * the array will not be searched. If negative, it is taken as
+ * the offset from the end of the array. Note that even when
+ * the index is negative, the array is still searched from front
+ * to back. If the calculated index is less than 0, the whole array
+ * will be searched.
+ * @return {number}
+ * The first index at which a given element can be found in
+ * the array, or -1 if it is not present.
+ * @author Courtesy of developer.mozilla.org, unverified
+ * @memberOf Array.prototype
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.14
+ */
+ indexOf: function (searchElement, fromIndex) {
+ "use strict";
+ if (this === void 0 || this === null)
+ {
+ throw new TypeError();
+ }
+
+ var t = Object(this);
+
+ var len = t.length >>> 0;
+ if (len === 0) {
+ return -1;
+ }
+
+ var n = 0;
+ if (arguments.length > 0)
+ {
+ n = Number(fromIndex);
+ if (n !== n) {
+ /* shortcut for verifying if it's NaN */
+ n = 0;
+ }
+ else if (n !== 0 && n !== Infinity && n !== -Infinity)
+ {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ }
+
+ if (n >= len)
+ {
+ return -1;
+ }
+
+ var k = (n >= 0 ? n : Math.max(len - Math.abs(n), 0));
+ for (; k < len; k++)
+ {
+ if (k in t && t[k] === searchElement)
+ {
+ return k;
+ }
+ }
+
+ return -1;
+ },
+
+ /**
+ * Maps one array to another
+ *
+ * @param {Callable} callback
+ * @param {Object} oThis (optional)
+ * @return {Array}
+ * The original array with <var>callback</var> applied to each element.
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.19
+ */
+ map: function (callback, oThis) {
+ return jsx.array.map(this, callback, oThis);
+ },
+
+ slice: function (start, end) {
+ var a = [];
+ var len = this.length >>> 0;
+ var relativeStart = parseInt(start, 10);
+ var k = (relativeStart < 0
+ ? Math.max(len + relativeStart, 0)
+ : Math.min(relativeStart, len));
+ var relativeEnd = (typeof end == "undefined"
+ ? len
+ : parseInt(end, 10));
+ var final = (relativeEnd < 0
+ ? Math.max(len + relativeEnd, 0)
+ : Math.min(relativeEnd, len));
+ var n = 0;
+ while (k < final)
+ {
+ if ((k in this))
+ {
+ a[n] = this[k];
+ }
+
+ ++k;
+ ++n;
+ }
+
+ return a;
+ }
+ });
+}
+
+/**
+ * General exception
+ *
+ * @constructor
+ * @extends Error
+ * @param {string} sMsg
+ */
+jsx.Error = function jsx_Error (sMsg) {
+ var msg = (sMsg || "Unspecified error");
+ var _super = jsx_Error._super;
+ var e = null;
+
+ if (typeof _super == "function")
+ {
+ _super.call(this, msg);
+
+ jsx.tryThis(function () { e = new _super(); });
+ }
+
+ if (!this.message)
+ {
+ /**
+ * @type string
+ */
+ this.message = msg;
+ }
+
+ if (!this.lineNumber && e)
+ {
+ /**
+ * @type number
+ */
+ this.lineNumber = e.lineNumber || e.line;
+ }
+
+ if (!this.stack && e && e.stack)
+ {
+ var stack = String(e.stack).split(/\r?\n|\r/).slice(2);
+ this.stack = stack.join("\n");
+ }
+};
+
+jsx.Error.extend(
+ (typeof Error != "undefined" ? Error : function () {}),
+ {
+ /**
+ * @memberOf jsx.Error#prototype
+ */
+ name: "jsx.Error",
+ getMessage: function () { return this.message; },
+ getStackTrace: function () { return this.stack; },
+ printStackTrace: function () {
+ var s = this.getStackTrace();
+ jsx.dmsg(s) || window.alert(s);
+ }
+});
+
+/**
+ * Invalid argument
+ *
+ * @constructor
+ * @extends jsx#Error
+ * @param {string} sReason
+ * @param sGot
+ * @param sExpected
+ */
+jsx.InvalidArgumentError =
+ function jsx_InvalidArgumentError (sReason, sGot, sExpected) {
+ jsx_InvalidArgumentError._super.call(this,
+ (sReason || "Invalid argument(s)")
+ + (sGot && sGot.length > 0 ? ": " + sGot : "")
+ + (sExpected ? (sGot ? ";" : ":") + " expected " + sExpected : ""));
+ };
+
+jsx.InvalidArgumentError.extend(jsx.Error, {
+ /**
+ * @memberOf jsx.InvalidArgumentError#prototype
+ */
+ name: "jsx.InvalidArgumentError"
+});
+
+/**
+ * Object-related exception
+ *
+ * @constructor
+ * @param {string} sMsg
+ * @extends jsx#Error
+ */
+jsx.object.ObjectError = function jsx_object_ObjectError (sMsg) {
+ jsx_object_ObjectError._super.call(this, sMsg);
+};
+
+jsx.object.ObjectError.extend(jsx.Error, {
+ /**
+ * @memberOf jsx.object.ObjectError#prototype
+ */
+ name: "jsx.object.ObjectError"
+});
+
+/**
+ * Property-related exception
+ *
+ * @constructor
+ * @param {string} sMsg
+ * @extends #ObjectError
+ */
+jsx.object.PropertyError = function jsx_object_PropertyError (sMsg) {
+ jsx_object_PropertyError._super.call(
+ this, "No such property" + (arguments.length > 0 ? (": " + sMsg) : ""));
+};
+
+jsx.object.PropertyError.extend(jsx.object.ObjectError, {
+ /**
+ * @memberOf jsx.object.PropertyError#prototype
+ */
+ name: "jsx.object.PropertyError"
+});
\ No newline at end of file
/live/object.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/regexp.js
===================================================================
--- live/regexp.js (nonexistent)
+++ live/regexp.js (revision 509)
@@ -0,0 +1,1413 @@
+"use strict";
+/* vim:set fileencoding=utf-8 tabstop=2 shiftwidth=2 softtabstop=2 expandtab: */
+/**
+ * <title>PointedEars' JSX: RegExp Library</title>
+ * @filename regexp.js
+ * @version $Id$
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2005-2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx != "object")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.regexp == "undefined")
+{
+ /* (for JSDT only) */
+ jsx.regexp = {};
+}
+
+/**
+ * @type jsx.regexp
+ * @memberOf __jsx.regexp
+ * @namespace
+ */
+jsx.regexp = (/** @constructor */ function () {
+ var _jsx_object = jsx.object;
+ var _getClass = _jsx_object.getClass;
+ var _getDataObject = _jsx_object.getDataObject;
+
+ /**
+ * @type jsx.regexp.RegExp
+ * @memberOf __jsx.regexp.RegExp
+ * @namespace
+ * @property pattern : String
+ * The original pattern string, including pattern-match
+ * modifiers.
+ * @property _patternGroups : Array
+ * The part of the pattern string from the opening parenthesis
+ * of each pattern group to the end of the pattern, before
+ * character class expansion, and without pattern-match
+ * modifiers. The first item (index 0) holds the complete
+ * pattern without modifiers. Used internally; do not modify.
+ * <em>NOTE: For efficiency, the pattern groups are not isolated;
+ * further parsing on your part may very well be necessary.</em>
+ * @property groups : Object
+ * An Array-like object mapping group indexes to group names.
+ * Its <code>length</code> property yields the number of grouped
+ * subpatterns in the original pattern, including named groups.
+ * @property names : Object
+ * An object mapping group names to group indexes.
+ * @property flags : String
+ * The original flags string
+ * @property dotAll : boolean
+ * Flag specifying whether the used expression was built from
+ * a pattern where the dot matches newline as well (PCRE_DOTALL).
+ * @property extended : boolean
+ * Flag specifying whether the used expression was built from
+ * an extended pattern (PCRE_EXTENDED).
+ * @property unicodeMode : boolean
+ * Flag specifying whether the used expression was built using
+ * Unicode mode.
+ * @method exec
+ * A variant of the built-in {@link RegExp.prototype#exec()}
+ * to support named groups and Unicode mode transparently.
+ * @method _oldExec
+ * The original inherited exec() method. Used internally.
+ * @method _realExec
+ * The used exec() method. Used internally.
+ * @function
+ */
+ var _RegExp2 = jsx.object.extend(
+ (/** @constructor */function () {
+ var
+ _destructure = jsx.array.destructure,
+ _WideString = _jsx_object.getFeature(
+ jsx, "string", "unicode", "WideString"),
+ _fromCharCode = function (codePoint) {
+ if (codePoint > 0xFFFF)
+ {
+ return _WideString.fromCharCode(codePoint);
+ }
+
+ return String.fromCharCode(codePoint);
+ },
+
+ propertyClasses,
+ ucdFields = ["codePoint",, "propertyClass"],
+
+ _parseUCDText = function () {
+ (new jsx.net.http.Request(
+ _RegExp2.ucdTextPath, "GET", false,
+ function (xhr) {
+ var lines = xhr.responseText.split(/\r?\n|\r/).map(
+ function (e) {
+ var entry = _destructure(e.split(";"), ucdFields);
+ entry.codePoint = parseInt(entry.codePoint, 16);
+ return entry;
+ });
+
+ lines.sort(function (a, b) {
+ if (a.propertyClass < b.propertyClass)
+ {
+ return -1;
+ }
+
+ if (a.propertyClass > b.propertyClass)
+ {
+ return 1;
+ }
+
+ if (a.codePoint < b.codePoint)
+ {
+ return -1;
+ }
+
+ if (a.codePoint > b.codePoint)
+ {
+ return 1;
+ }
+
+ return 0;
+ });
+
+ propertyClasses = _RegExp2.propertyClasses = {};
+
+ for (var i = 0, len = lines.length; i < len; ++i)
+ {
+ var
+ line = lines[i],
+ propertyClass = line.propertyClass,
+ prevClass,
+ codePoint = line.codePoint,
+ prevCodePoint;
+
+ if (isNaN(codePoint) || (codePoint > 0xFFFF && !_WideString))
+ {
+ continue;
+ }
+
+ if (propertyClass != prevClass)
+ {
+ if (codePoint != prevCodePoint + 1)
+ {
+ if (startRange)
+ {
+ propertyClasses[prevClass] +=
+ "-" + _fromCharCode(prevCodePoint);
+ }
+ }
+
+ propertyClasses[propertyClass] =
+ _fromCharCode(codePoint);
+
+ var startRange = false;
+ }
+ else
+ {
+ if (codePoint != prevCodePoint + 1)
+ {
+ if (startRange)
+ {
+ propertyClasses[prevClass] +=
+ "-" + _fromCharCode(prevCodePoint);
+
+ startRange = false;
+ }
+
+ propertyClasses[propertyClass] +=
+ _fromCharCode(codePoint);
+ }
+ else
+ {
+ startRange = true;
+ }
+ }
+
+ prevClass = propertyClass,
+ prevCodePoint = codePoint;
+ }
+
+ if (startRange)
+ {
+ propertyClasses[prevClass] +=
+ "-" + _fromCharCode(prevCodePoint);
+ }
+ }
+ )).send();
+ },
+
+ /**
+ * @param {String} charClassContent
+ * @param {boolean} bUnicodeMode
+ * @return {string}
+ */
+ _normalizeCharClass = function (charClassContent, bUnicodeMode) {
+ var negEscapes = [];
+
+ if (charClassContent == "")
+ {
+ return "[]";
+ }
+
+ if (charClassContent == "^")
+ {
+ return "[^]";
+ }
+
+ var reduced = charClassContent.replace(
+ /\\((P)\{([^\}]+)\}|(W))/g,
+ function (m, p1, cP, charProperty, cW) {
+ var escapeChar = cP || cW;
+ if (escapeChar == "P" || bUnicodeMode)
+ {
+ negEscapes.push("\\" + escapeChar.toLowerCase()
+ + (charProperty ? "{" + charProperty + "}" : ""));
+ return "";
+ }
+
+ return m;
+ });
+
+ if (negEscapes.length > 0)
+ {
+ /* Do not let negated empty class from reduction match everything */
+ if (reduced == "^")
+ {
+ reduced = "";
+ }
+
+ if (reduced != "")
+ {
+ jsx.warn(
+ "jsx.regexp.RegExp: Combined negative escapes in character classes"
+ + " require support for non-capturing parentheses");
+ }
+
+ return (reduced ? "(?:[" + reduced + "]|" : "")
+ + "[" + (charClassContent.charAt(0) == "^" ? "" : "^")
+ + negEscapes.join("") + "]"
+ + (reduced ? ")" : "");
+ }
+
+ return "[" + reduced + "]";
+ },
+
+ sPropertyEscapes = "\\\\(p)\\{([^\\}]+)\\}",
+ rxPropertyEscapes = new RegExp(sPropertyEscapes, "gi"),
+ sNonPropEscInRange = "([^\\]\\\\]|\\\\[^p])*",
+ sEscapes =
+ "\\[(\\^?(" + sNonPropEscInRange + "(" + sPropertyEscapes
+ + ")+" + sNonPropEscInRange + ")+)\\]"
+ + "|" + sPropertyEscapes + "",
+ rxEscapes = new RegExp(sEscapes, "gi"),
+
+ fEscapeMapper = function (match, classRanges, p2, p3, p4, p5, p6, p7,
+ standalonePropSpec, standaloneClass) {
+ propertyClasses = _RegExp2.propertyClasses;
+
+ /* If the Unicode Character Database (UCD) is not statically loaded */
+ if (!propertyClasses)
+ {
+ /* load it dynamically, ignore exceptions */
+ var ucdScriptPath = _RegExp2.ucdScriptPath;
+ if (ucdScriptPath)
+ {
+ jsx.tryThis(function () { jsx.importFrom(ucdScriptPath); });
+
+ propertyClasses = _RegExp2.propertyClasses;
+ }
+
+ /* if this failed */
+ if (!propertyClasses)
+ {
+ if (!jsx.net || !jsx.net.http
+ || typeof jsx.net.http.Request != "function")
+ {
+ jsx.throwThis("jsx.regexp.UCDLoadError",
+ ['"' + _RegExp2.ucdScriptPath + '" (jsx.regexp.RegExp.ucdScriptPath)',
+ "http.js"]);
+ }
+
+ /* parse the text version of the UCD */
+ _parseUCDText();
+ }
+
+ /*
+ * Define property classes required for Unicode mode
+ * if not already defined (not available from text version
+ * of UCD)
+ */
+ _jsx_object.extend(propertyClasses, {
+ L: "\\p{Ll}\\p{Lm}\\p{Lo}\\p{Lt}\\p{Lu}",
+ M: "\\p{Mc}\\p{Me}\\p{Mn}",
+ N: "\\p{Nd}\\p{Nl}\\p{No}",
+ Digit: "\\p{Nd}",
+ Space: "\u0009\u000a\u000c\u000d\u0020\u0085\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000",
+ Word: "\\p{L}\\p{M}\\p{N}\\p{Pc}"
+ });
+ }
+
+ var _rangesStack = [];
+ /**
+ * @return {string}
+ */
+ _rangesStack.toString = function () {
+ return this.join(" --> ");
+ };
+
+ var _propertyClassReplacer = function (match, propertySpecifier, propertyClass) {
+ if (propertySpecifier === "P")
+ {
+ jsx.throwThis("jsx.regexp.InvalidPropertyClassError",
+ _rangesStack.pop()
+ + " contains the negative property specifier \\P{" + propertyClass + "}");
+ return;
+ }
+
+ return _getRanges(propertyClass);
+ };
+
+ var _getRanges =
+ /**
+ * Retrieves class ranges by property class, and throws a specialized
+ * exception if this fails.
+
+ * @param {String} propertyClass
+ * @throws jsx.regexp#UndefinedPropertyClassError
+ */
+ function (propertyClass) {
+ return jsx.tryThis(
+ function () {
+ if (_rangesStack.indexOf(propertyClass) > -1)
+ {
+ jsx.throwThis("jsx.regexp.InvalidPropertyClassError",
+ propertyClass + " is cyclically defined ("
+ + _rangesStack + " --> " + propertyClass
+ + ")");
+ return;
+ }
+
+ _rangesStack.push(propertyClass);
+
+ var escapedRange = _jsx_object.getProperty(propertyClasses, propertyClass);
+
+ /*
+ * Resolve property class references in property class values,
+ * watch for cyclic structures.
+ */
+ var rxPropertyEscapes = new RegExp(sPropertyEscapes, "gi");
+ var unescapedRange = escapedRange.replace(rxPropertyEscapes, _propertyClassReplacer);
+
+ _rangesStack.pop();
+
+ return unescapedRange;
+ },
+ function (e) {
+ if (e.name == "jsx.object.PropertyError")
+ {
+ jsx.throwThis("jsx.regexp.UndefinedPropertyClassError",
+ propertyClass + (_rangesStack.length > 1 ? " in " + _rangesStack : ""));
+ }
+ else
+ {
+ jsx.rethrowThis(e);
+ }
+ });
+ };
+
+ /* We can handle standalone class references … */
+ if (standaloneClass)
+ {
+ var result = _getRanges(standaloneClass);
+ result = "[" + (standalonePropSpec == "P" ? "^" : "") + result + "]";
+ }
+ else
+ {
+ /* … and class references in character classes */
+ result = _normalizeCharClass(classRanges);
+
+ result = result.replace(
+ rxPropertyEscapes,
+ function (match, propertySpecifier, propertyClass) {
+ var ranges = _getRanges(propertyClass);
+ return ranges;
+ });
+ }
+
+ return result;
+ };
+
+ /**
+ * Creates and returns an extended {@link RegExp} object.
+ *
+ * This constructor accepts pattern and flags arguments where you
+ * can use some features of Perl and Perl-compatible regular
+ * expressions (PCRE); like {@link RegExp()}, it can also be called
+ * as a function to do the same. The {@link RegExp} instance it
+ * returns is augmented with properties to support those features
+ * when matching it against a string.
+ *
+ * The following additional features are currently supported:
+ * <ul>
+ * <li>Flags:
+ * <ul>
+ * <li><tt>s</tt> (PCRE_DOTALL) – the <tt>.</tt> metacharacter
+ * matches newline as well.</li>
+ * <li><tt>u</tt> (Unicode mode) – the meaning of
+ * character class escape sequences <tt>\b</tt>, <tt>\w</tt>,
+ * and <tt>\W</tt> is extended to include Unicode character
+ * properties.</li>
+ * <li><tt>x</tt> (PCRE_EXTENDED) – whitespace within
+ * the pattern is ignored, so that it is easier
+ * human-readable.</li>
+ * </ul><p>
+ * Flags except for Unicode mode can be set and unset for
+ * parts of the expression outside of character classes using
+ * the <tt>(?…)</tt> and <tt>(?-…)</tt> notations.
+ * </li>
+ * <li>Unicode property classes using e.g. the \p{…} notation</li>
+ * <li>Named capturing groups by passing strings with the
+ * <tt>(?P&lt;name>…)</tt> or <tt>(?P'name'…)</tt> notation,
+ * where the <tt>P</tt> is optional, respectively.</li>
+ * </ul><p>
+ * This is facilitated through the following steps:
+ * </p><ol>
+ * <li>The flags <code>x</code>, <code>s</code> and <code>u</code>
+ * in the optional <var>sFlags</var> argument set the initial
+ * state of the pattern-match modifiers; the extended
+ * {@link RegExp}'s <code>extended</code>, <code>dotAll</code>,
+ * and <code>unicodeMode</code> properties are set accordingly.
+ * These flags are removed from the <var>sFlags</var>
+ * argument subsequently, as it is reused to create the
+ * {@link RegExp} instance. [Conforming implementations of
+ * ECMA-262-5.1 MUST throw a <code>SyntaxError</code>
+ * exception on flags other than <code>g</code>, <code>i</code>,
+ * and <code>m</code> (section 15.10.4.1); Mozilla JavaScript
+ * may also support the <code>y</code> (sticky) flag,
+ * but nothing else.]</li>
+ * <li>The pattern is run through several passes, where in each
+ * one it is scanned from left to right using another
+ * {@link RegExp}:
+ * <ol style="margin-bottom: 1em; list-style-type: lower-roman">
+ * <li><p>Capturing groups and pattern-match modifiers in the
+ * pattern are matched and replaced.
+ * <p>Capturing groups are replaced with the opening
+ * parenthesis if they were assigned a name. The
+ * extended {@link RegExp}'s <code>groups</code>,
+ * <code>names</code>, and <code>_patternGroups</code>
+ * properties are set accordingly. They are used in an
+ * overwritten <code>exec()</code> method and when matching
+ * against a <code>jsx.regexp.String</code> using its
+ * <tt>match(…)</tt> method.</p>
+ * <p style="margin-bottom: 0">
+ * Pattern-match modifiers are set and unset as they
+ * are scanned. The corresponding substrings are
+ * removed from the pattern. If the group is otherwise
+ * empty, and therefore is not a group at all,
+ * the entire pseudo-group is removed.</p>
+ * <ol style="margin-top: 0; list-style-type: lower-latin">
+ * <li>With PCRE_EXTENDED set, single-line
+ * comments starting with <tt>#</tt> and unescaped
+ * whitespace are removed from the pattern. The backslash
+ * is removed from the pattern when in front of
+ * whitespace.</li>
+ * <li>With PCRE_DOTALL set, unescaped <tt>.</tt>
+ * (period) characters are replaced with the character class
+ * <tt>[\S\s]</tt> which matches all Unicode characters.</li>
+ * </ol>
+ * <p><em>NOTE: Unlike in Perl and PCRE, a pattern-match
+ * modifier affects all of the pattern that follows,
+ * even outside the group in which the modifier was
+ * set/unset. This will be fixed in a later version.</em>
+ * </p></li>
+ * <li>When in Unicode mode,
+ * <ol style="list-style-type: lower-latin">
+ * <li>in the second pass, character class escape sequences
+ * <tt>\w</tt> and <tt>\W</tt> are replaced with
+ * corresponding uses of <tt>\p{Word}</tt>.</li>
+ * <li>in the third pass, <tt>\b</tt> is replaced with
+ * corresponding uses of character classes and negative
+ * lookahead.
+ * </ol></li>
+ * <li style="margin-top: 1em">The <tt>\p{…}</tt> and <tt>\P{…}</tt>
+ * escape sequences are replaced with the corresponding
+ * character classes.</li>
+ * </ol></li>
+ * <li>The resulting expression and remaining flags are passed
+ * to the {@link RegExp} constructor.</li>
+ * <li>The created {@link RegExp} instance is augmented with
+ * properties and returned.</li>
+ * </ol><p>
+ * There are the following possibilities to make Unicode property
+ * classes known to this constructor:
+ * </p><ol>
+ * <li>Provide the Unicode Character Database, or parts thereof,
+ * as an Object;</li>
+ * <li>Provide the Unicode Character Database, or parts thereof,
+ * as a plain text resource that is accessed with
+ * XMLHttpRequest;</li>
+ * <li>Define property classes manually</li>
+ * </ol>
+ * <p>
+ * Variant #1 requires you to define a mapping object with
+ * the following namespace and structure:
+ * </p>
+ * <pre><code>
+ * jsx.regexp.RegExp.propertyClasses = {
+ * ...,
+ * Sc: "\u20AC...",
+ * ...
+ * };
+ * </code></pre>
+ * <p>
+ * The property name is the name of the Unicode property class
+ * (here: <tt>Sc</tt>). The property value (a string) defines
+ * which characters belong to that class. You may use "-"
+ * to specify character ranges, i.e., the range of characters
+ * including the characters having the boundaries as code point
+ * value, and all characters that have a code point value
+ * in-between. (For a literal "-", you may use "\\-".)
+ * An example file to mirror the Unicode 5.0 Character Database,
+ * UnicodeData.js, is distributed with this file. Include it
+ * <em>after</em> the file that declares the constructor (this
+ * file) to use it. If you do not include it, but use the
+ * <code>\p{...}</code> notation, an attempt will be made to load
+ * the file specified by the <code>ucdScriptPath</code> property
+ * (default: <code>"/scripts/UnicodeData.js"</code>) using
+ * synchronous XHR (see below).
+ * </p>
+ * <p>
+ * Variant #2 is going to support two different methods:
+ * Synchronous and asynchronous request-response handling.
+ * Synchronous request-response handling requests the (partial)
+ * Unicode Character Database from the resource specified by
+ * the <code>ucdTextPath</code> property (default:
+ * <code>"/scripts/UnicodeData.txt"</code>) and halts execution
+ * until a response has been received or the connection timed out.
+ * Asynchronous request-response handling allows script execution
+ * to continue while the request and response are in progress, but
+ * you need to provide a callback as third argument where actions
+ * related to the regular expression must be performed.
+ * Asynchronous handling is recommended for applications that need
+ * to be responsive to user input. <strong>Currently, only
+ * synchronous handling is implemented.</strong>
+ * </p>
+ * <p>
+ * Variant #3 can be combined with the other variants.
+ * The constructor has a definePropertyClasses() method which can
+ * be used to define and redefine property classes. This allows
+ * an extended RegExp object to support only a subset of Unicode
+ * property classes, and to support user-defined character
+ * property classes.
+ * </p>
+ *
+ * The returned {@link RegExp} has additional properties to
+ * accomodate syntax extensions in the pattern string:
+ *
+ * @param {String|RegExp} expression
+ * A regular expression pattern string that may use the features
+ * described above. If it is a {@link RegExp}, its
+ * <code>source</code> property is used and combined with
+ * <var>sFlags</var>. That is, <code>jsx.regexp.RegExp(/foo/, "i")</code>
+ * returns the same as <code>jsx.regexp.RegExp(/foo/i)</code>.
+ * @param {String} sFlags
+ * Optional string containing none, one or more of the standard
+ * {@link RegExp} modifiers and the flags described above.
+ * Unsupported flags are ignored, but passed on to {@link RegExp}.
+ * Note that modifiers in <var>expression</var> can temporarily
+ * unset and set the "s" and "x" flags. Following Perl, the "u"
+ * flag (Unicode mode) can only be enabled, but not disabled.
+ * @return {RegExp}
+ * A regular expression with the property class escape sequences
+ * expanded according to the specified data, with the specified
+ * flags set if they are natively supported.
+ */
+ function jsx_regexp_RegExp (expression, sFlags)
+ {
+ if (expression && _getClass(expression) == "RegExp")
+ {
+ expression = expression.source;
+ }
+
+ var t = typeof expression;
+ if (t != "string")
+ {
+ if (arguments.length < 1)
+ {
+ expression = "";
+ }
+ else
+ {
+ expression = String(expression);
+ }
+ }
+
+ var pattern = expression;
+ var flags = sFlags || "";
+
+ var extended = false;
+ var dotAll = false;
+ var unicodeMode = false;
+
+ if (sFlags)
+ {
+ if (sFlags.indexOf("x") > -1)
+ {
+ var originalExtended = extended = true;
+ }
+
+ if (sFlags.indexOf("s") > -1)
+ {
+ var originalDotAll = dotAll = true;
+ }
+
+ if (sFlags.indexOf("u") > -1)
+ {
+ unicodeMode = true;
+ }
+
+ sFlags = sFlags.replace(/[xsu]/g, "");
+ }
+
+ /* Support for capturing and special groups */
+ var groupCount = 0;
+ var groups = _getDataObject();
+ var names = _getDataObject();
+ var patternGroups = [expression];
+
+ expression = expression.replace(
+ /(\\\()/.concat(
+ "|",
+ /(\((\?P?(([adlupimsx]+)?(-([imsx]+))?)(<([^>]+)>|'([^']+)'|([:!]))?(\))?)?)/g,
+ "|",
+ /(#.*(\r?\n|\r|$))|\\(\s)/,
+ "|",
+ /\[([^\\\]]|\\.)*\]|(\s+)|\\\.|(\.)/g
+ ),
+ function (match, escapedLParen,
+ group, specialGroup, modifierGroup,
+ positiveModifiers, negativeModifiers_opt, negativeModifiers,
+ namedGroup, bracketedName, quotedName,
+ nonCapturingGroup, emptyGroup,
+ comment, newline,
+ escapedWS, charClassContent, whitespace,
+ plainDot,
+ index, all) {
+ if (group)
+ {
+ var capturingGroup = (!nonCapturingGroup && !(modifierGroup && emptyGroup));
+ if (capturingGroup)
+ {
+ ++groupCount;
+ }
+
+ if (positiveModifiers)
+ {
+ var
+ rxPosModifiers = /[sx]/g,
+ m;
+
+ while ((m = rxPosModifiers.exec(positiveModifiers)))
+ {
+ switch (m[0])
+ {
+ case "s":
+ dotAll = true;
+ break;
+
+ case "x":
+ extended = true;
+ }
+ }
+ }
+
+ if (negativeModifiers)
+ {
+ var rxNegModifiers = /[sx]/g;
+
+ while ((m = rxNegModifiers.exec(negativeModifiers)))
+ {
+ switch (m[0])
+ {
+ case "s":
+ dotAll = false;
+ break;
+
+ case "x":
+ extended = false;
+ }
+ }
+ }
+
+ if (capturingGroup)
+ {
+ /* Support for named capturing groups (PCRE-compliant) */
+ var name = bracketedName || quotedName;
+ if (name)
+ {
+ if (names[name])
+ {
+ jsx.throwThis("SyntaxError", "Duplicate symbolic name");
+ }
+
+ groups[groupCount] = name;
+ names[name] = groupCount;
+ }
+
+ /*
+ * NOTE: Helps with determining in exec() and match()
+ * whether \b matched at beginning and \Ws need to be
+ * ltrimmed from match
+ */
+ patternGroups.push(all.substring(index));
+
+ return "(";
+ }
+
+ return emptyGroup ? "" : "(?" + nonCapturingGroup;
+ }
+
+ /* PCRE_EXTENDED */
+ if (extended)
+ {
+ /* Remove comments */
+ if (comment)
+ {
+ return "";
+ }
+
+ /* Keep escaped whitespace, remove escape */
+ if (escapedWS)
+ {
+ return escapedWS;
+ }
+
+ /* Remove unescaped whitespace */
+ if (whitespace)
+ {
+ return "";
+ }
+ }
+
+ /* PCRE_DOTALL */
+ if (dotAll && plainDot)
+ {
+ return "[\\S\\s]";
+ }
+
+ return match;
+ });
+
+ groups.length = groupCount;
+
+ /* Unicode mode */
+ if (unicodeMode)
+ {
+ var characterEscapes = {
+ "d": "\\p{Digit}",
+ "s": "\\p{Space}",
+ "w": "\\p{Word}"
+ };
+
+ expression = expression.replace(
+ /\[(([^\]\\]|\\.)*)\]|(\\([dsw]))/gi,
+ function (match, charClassContent, p2, classCharacter, escapeLetter) {
+ if (charClassContent)
+ {
+ var normalized = _normalizeCharClass(charClassContent, true);
+
+ return normalized.replace(
+ /\\\\|(\\([dsw]))/gi,
+ function (match, classCharacter, escapeLetter) {
+ if (classCharacter)
+ {
+ if (escapeLetter >= "A" && escapeLetter <= "Z")
+ {
+ if (charClassContent.charAt(0) != "^")
+ {
+ jsx.warn("jsx.regexp.RegExp: Negative character"
+ + " class escape sequences in character"
+ + " class not yet supported in Unicode mode."
+ + " Use positive escape sequences in negated"
+ + " character classes in the meantime.");
+
+ return classCharacter;
+ }
+ }
+
+ return characterEscapes[escapeLetter.toLowerCase()];
+ }
+
+ return match;
+ });
+ }
+
+ if (classCharacter)
+ {
+ return "["
+ + (escapeLetter >= "A" && escapeLetter <= "Z" ? "^" : "")
+ + characterEscapes[escapeLetter.toLowerCase()] + "]";
+ }
+
+ return match;
+ });
+
+ /* Replace \b */
+ var firstGroup = expression.match(/\((\?(P?(<([^>]+)>|'([^']+)')|[:!]))?/);
+ var afterFirstGroup = (firstGroup && (firstGroup.index + firstGroup[0].length) || 0);
+ var wordEscape = characterEscapes.w;
+ expression = expression.replace(
+ /\\\\|(\\b)/g,
+ function (match, wordBorder, index, all) {
+ if (wordBorder)
+ {
+ /* Handle \b in leading groups properly */
+ if (index > afterFirstGroup)
+ {
+ return "(?!" + wordEscape + ")";
+ }
+
+ return "(?:^|[^" + wordEscape + "])";
+ }
+
+ return match;
+ });
+ }
+
+ /* Support for Unicode character property classes (PCRE-compliant) */
+ expression = expression.replace(rxEscapes, fEscapeMapper);
+
+ var rx = new RegExp(expression, sFlags);
+
+ /* Augmented properties */
+ rx.pattern = pattern;
+ rx._patternGroups = patternGroups;
+ rx.groups = groups;
+ rx.names = names;
+ rx.flags = flags;
+ rx.dotAll = !!originalDotAll;
+ rx.extended = !!originalExtended;
+ rx.unicodeMode = unicodeMode;
+
+ rx._oldExec = rx.exec;
+ rx.exec = jsx_regexp_RegExp.exec;
+
+ return rx;
+ }
+
+ return jsx_regexp_RegExp;
+ }()),
+ {
+ ucdScriptPath: "/scripts/UnicodeData.js",
+ ucdTextPath: "/scripts/UnicodeData.txt",
+
+ /**
+ * Determines if an object has been constructed using this constructor
+ * @memberOf jsx.regexp.RegExp
+ */
+ isInstance: function (rx) {
+ return !!rx.pattern;
+ },
+
+ /**
+ * @function
+ */
+ exec: (function () {
+ var rx2;
+
+ /**
+ * @param {string} s
+ * @param {jsx.regexp.RegExp} rx
+ * @return {Object|null}
+ * @see RegExp.prototype.exec()
+ */
+ function _exec (s, rx)
+ {
+ /* NOTE: Use passed expression only when called statically */
+ if (_getClass(this) == "RegExp")
+ {
+ rx = this;
+ }
+
+ rx._realExec = (rx._oldExec || rx.exec);
+
+ var matches = rx._realExec(s);
+
+ if (matches && _RegExp2.isInstance(rx))
+ {
+ matches.groups = _getDataObject();
+
+ if (rx.unicodeMode && !rx2)
+ {
+ rx2 = new _RegExp2("^\\W+", "u");
+ }
+
+ for (var i = 0, len = matches.length; i < len; ++i)
+ {
+ /* Trim leading \b matches */
+ var patternGroup = rx._patternGroups[i];
+ if (rx.unicodeMode
+ && patternGroup
+ && patternGroup.match(
+ /^(\((\?P?(<([^>]+)>|'([^']+)'))?)*\\b/))
+ {
+ matches[i] = matches[i].replace(rx2, "");
+ }
+
+ matches.groups[rx.groups[i] || i] = matches[i];
+ }
+ }
+
+ return matches;
+ }
+
+ return _exec;
+ }()),
+
+ definePropertyClasses: function (o) {
+ for (var keys = _jsx_object.getKeys(o), i = 0, len = keys.length;
+ i < len; ++i)
+ {
+ var p = keys[i];
+ this.propertyClasses[p] = o[p];
+ }
+ },
+
+ deletePropertyClass: function (p) {
+ return (delete this.propertyClasses[p]);
+ }
+ }
+ );
+
+ return {
+ /**
+ * @version
+ * @memberOf jsx.regexp
+ */
+ version: "0.1.$Revision$",
+ copyright: "Copyright \xA9 2005-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://pointedears.de/scripts/",
+
+ /**
+ * Exception thrown if a character property class is referenced,
+ * but the Unicode Character Database (UCD) cannot be loaded
+ *
+ * @constructor
+ * @param {String} sUCDScript
+ * The script that contains the UCD in the specified form
+ * @param {String} sHTTPScript
+ * The script that contains the HTTP request type to load the UCD
+ * dynamically
+ * @type jsx.regexp.UCDLoadError
+ * @extends jsx#Error
+ */
+ UCDLoadError:
+ function jsx_regexp_UCDLoadError (sUCDScript, sHTTPScript) {
+ jsx_regexp_UCDLoadError._super.call(this,
+ "Unable to load the Unicode Character Database."
+ + " Please include " + sUCDScript + " or " + sHTTPScript + ".");
+ }.extend(jsx.Error, {
+ /**
+ * @memberOf jsx.regexp.UCDLoadError#prototype
+ */
+ name: "jsx.regexp.UCDLoadError"
+ }),
+
+ /**
+ * Exception thrown if a referred character property class
+ * cannot be resolved
+ *
+ * @type jsx.regexp.UndefinedPropertyClassError
+ * @extends jsx.object#PropertyError
+ */
+ UndefinedPropertyClassError:
+ /**
+ * @constructor
+ * @param sMsg
+ */
+ function jsx_regexp_UndefinedPropertyClassError (sMsg) {
+ jsx_regexp_UndefinedPropertyClassError._super.call(this);
+ this.message = "Undefined property class"
+ + (arguments.length > 0 ? (": " + sMsg) : "");
+ }.extend(jsx.object.PropertyError, {
+ /**
+ * @memberOf jsx.regexp.UndefinedPropertyClassError#prototype
+ */
+ name: "jsx.regexp.UndefinedPropertyClassError"
+ }),
+
+ /**
+ * Exception thrown if a property class value can not be expanded
+ *
+ * @constructor
+ * @param sMsg
+ * @extends jsx.object#ObjectError
+ */
+ InvalidPropertyClassError:
+ function jsx_regexp_InvalidPropertyClassError (sMsg) {
+ jsx_regexp_InvalidPropertyClassError._super.call(this);
+ this.message = "Invalid property class value"
+ + (arguments.length > 0 ? (": " + sMsg) : "");
+ }.extend(jsx.object.ObjectError, {
+ name: "jsx.regexp.InvalidPropertyClassError"
+ }),
+
+ RegExp: _RegExp2,
+
+ /**
+ * @type jsx.regexp.String
+ * @memberOf __jsx.regexp.String
+ * @constructor
+ */
+ String: function jsx_regexp_String (s) {
+ if (this.constructor != jsx_regexp_String)
+ {
+ jsx.throwThis("jsx.Error", "Must be called as constructor",
+ "jsx.regexp.String");
+ }
+
+ this.value = String(s);
+ }.extend(String, (function () {
+ var _replace = String.prototype.replace;
+ var _getDataObject = jsx.object.getDataObject;
+
+ function _toString ()
+ {
+ return this.value;
+ }
+
+ return {
+ /**
+ * Matches a string against a regular expression, using special features
+ * of jsx.regexp.RegExp if possible
+ *
+ * @function
+ */
+ match: (function () {
+ var rxLeadingGroups, rxNonWordChars;
+
+ /**
+ * @param {RegExp|jsx.regexp.RegExp} rx
+ * @return {Array}
+ * The Array as if returned by String.prototype.match.call(this, rx)
+ */
+ return function (rx) {
+ var matches = this.value.match(rx);
+
+ if (matches && _RegExp2.isInstance(rx))
+ {
+ if (rx.unicodeMode)
+ {
+ if (!rxNonWordChars)
+ {
+ rxLeadingGroups = /^(\((\?P?(<([^>]+)>|'([^']+)'))?)*\\b/;
+ rxNonWordChars = new _RegExp2("^\\W+", "u");
+ }
+ }
+
+ if (rx.global)
+ {
+ /* Trim \b matches */
+ if (rx.unicodeMode)
+ {
+ var patternGroup = rx._patternGroups[0];
+ if (patternGroup.match(rxLeadingGroups))
+ {
+ for (var i = 0, len = matches.length; i < len; ++i)
+ {
+ matches[i] = matches[i].replace(rxNonWordChars, "");
+ }
+ }
+ }
+ }
+ else
+ {
+ matches.groups = _getDataObject();
+
+ for (var i = 0, len = matches.length; i < len; ++i)
+ {
+ if (rx.unicodeMode)
+ {
+ patternGroup = rx._patternGroups[i];
+ if (patternGroup.match(rxLeadingGroups))
+ {
+ matches[i] = matches[i].replace(rxNonWordChars, "");
+ }
+ }
+
+ matches.groups[rx.groups[i] || i] = matches[i];
+ }
+ }
+ }
+
+ return matches;
+ };
+ }()),
+
+ /**
+ * Replaces matches in a string, and returns the new string.
+ *
+ * Different to {@link String.prototype.replace()},
+ * this methods also allows you to refer to backreferences
+ * by name. In a String-like object, you may use
+ * <code>"${name}"</code>, and in a replacement function
+ * you may use <code>this.groups["name"]</code>.
+ *
+ * NOTE: Because of the latter the replacement function
+ * is called as a method of this object, not of
+ * the Global Object anymore. The <code>groups</code>
+ * property of this object is retained; that is, the last
+ * arguments to this method can be found in there.
+ * (Arguments and return value of the replacement function
+ * still work as specified in ECMAScript.)
+ *
+ * @memberOf jsx.regexp.String.prototype
+ * @param {jsx.regexp.RegExp|RegExp|String} expression
+ * @param {String|Function} replacement
+ * @return {string}
+ * @see String.prototype.replace
+ */
+ replace: function (expression, replacement) {
+ if (jsx.regexp.RegExp.isInstance(expression))
+ {
+ var groups = expression.groups;
+ var len = groups.length;
+
+ if ((typeof replacement) == "function")
+ {
+ var me = this;
+ return _replace.call(this, expression, function () {
+ me.groups = _getDataObject();
+ for (var i = 1; i <= len; ++i)
+ {
+ me.groups[groups[i]] = arguments[i];
+ }
+
+ return replacement.apply(me, arguments);
+ });
+ }
+
+ for (var i = 1; i <= len; ++i)
+ {
+ /* replace "${name}" with "${index}" */
+ replacement = _replace.call(
+ replacement,
+ new RegExp("\\$\\{" + groups[i] + "\\}", "g"),
+ "$" + i);
+ }
+ }
+
+ return _replace.call(this, expression, replacement);
+ },
+
+ /**
+ * Returns this object's encapsulated string value
+ */
+ toString: _toString,
+ valueOf: _toString
+ };
+ }())),
+
+ /**
+ * Concatenates strings or regular expressions ({@link RegExp})
+ * and returns the resulting <code>RegExp</code>.
+ *
+ * If flags are used with either <code>RegExp</code> argument, the
+ * resulting <code>RegExp</code> has all of those flags set.
+ *
+ * @author Copyright (c) 2005
+ * Thomas Lahn &lt;regexp.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/regexp.js
+ * @params
+ * Expressions to be concatenated. If a not a {@link RegExp},
+ * the argument is converted to {@link String}; this allows
+ * for expressions to be grouped and used in alternation.
+ * For characters to lose their special meaning, escape them in
+ * a <code>RegExp</code> argument or escape them twice in
+ * a converted (e.g. string) argument.
+ *
+ * If this function is called as method of a <code>RegExp</code>,
+ * the expressions given are concatenated beginning with the
+ * <code>this</code> value.
+ * @return {RegExp}
+ * The resulting <code>RegExp</code>
+ */
+ concat: function () {
+ var aParts = [];
+
+ var oFlags = {
+ flags: {
+ g: "global",
+ i: "ignoreCase",
+ m: "multiline",
+ y: "sticky"
+ },
+ g: false,
+ i: false,
+ m: false,
+ y: false,
+
+ setFromTemplate: function (template) {
+ var flags = this.flags;
+ for (var flag in flags)
+ {
+ if (!this[flag] && template[flags[flag]])
+ {
+ this[flag] = true;
+ }
+ }
+ },
+
+ toString:
+ /**
+ * @return {string}
+ */
+ function () {
+ var a = [];
+
+ for (var flag in this.flags)
+ {
+ if (this[flag] === true)
+ {
+ a.push(flag);
+ }
+ }
+
+ return a.join("");
+ }
+ };
+
+ var regexp2str = jsx.regexp.toString2;
+
+ if (_getClass(this) == "RegExp")
+ {
+ aParts.push(regexp2str(this));
+ oFlags.setFromTemplate(this);
+ }
+
+ for (var i = 0, iArgnum = arguments.length; i < iArgnum; i++)
+ {
+ var a = arguments[i];
+ if (_getClass(a) == "RegExp")
+ {
+ aParts.push(regexp2str(a));
+ oFlags.setFromTemplate(a);
+ }
+ else
+ {
+ aParts.push(String(a));
+ }
+ }
+
+ return new RegExp(aParts.join(""), oFlags.toString());
+ },
+
+ /**
+ * Returns a {@link RegExp} that is an intersection of two
+ * regular expressions.
+ *
+ * @param pattern2
+ * @param pattern1
+ * @return {RegExp}
+ * A regular expression which matches the strings that both
+ * <var>pattern1</var> (or this object) and <var>pattern2</var>
+ * would match.
+ */
+ intersect: function (pattern2, pattern1) {
+ if (!pattern1 || _getClass(pattern1) != "RegExp")
+ {
+ if (_getClass(this) == "RegExp")
+ {
+ pattern1 = this;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /* Rule out invalid values */
+ if (!pattern2 || _getClass(pattern2) != "RegExp")
+ {
+ return null;
+ }
+
+ var
+ s = pattern1.source.replace(/^\(?([^)]*)\)?$/, "$1"),
+ s2 = pattern2.source.replace(/^\(?([^)]*)\)?$/, "$1");
+
+ /* Register all parts within alternation of this pattern */
+ var
+ a = s.split("|"),
+ o = {};
+ for (var i = 0, len = a.length; i < len; i++)
+ {
+ o[a[i]] = true;
+ }
+
+ /* Register all parts within alternation of pattern2 */
+ var
+ a2 = s2.split("|"),
+ o2 = {};
+ for (i = 0, len = a2.length; i < len; i++)
+ {
+ o2[a2[i]] = true;
+ }
+
+ /* Compose the new alternation out of common parts */
+ var hOP = (
+ function () {
+ if (typeof Object.prototype.hasOwnProperty == "function")
+ {
+ return function (o, p) {
+ return o.hasOwnProperty(p);
+ };
+ }
+
+ /* suffices *here* */
+ return function (o, p) {
+ return typeof o[p] != "undefined"
+ && typeof o.constructor.prototype[p] == "undefined";
+ };
+ }
+ )();
+
+ a = [];
+ for (var p in o)
+ {
+ if (hOP(o2, p))
+ {
+ a.push(p);
+ }
+ }
+
+ return new RegExp("(" + a.join("|") + ")");
+ },
+
+ /**
+ * Returns an escaped version of the string that can be passed
+ * as an argument to {@link Global#RegExp(string, string) RegExp()}
+ * to match that string.
+ *
+ * @param {string} s
+ * @return {string}
+ */
+ escape: function (s) {
+ if (arguments.length == 0 && this.constructor == String)
+ {
+ s = this;
+ }
+
+ return s.replace(/[\]\\^$*+?.(){}|[]/g, "\\$&");
+ },
+
+ /**
+ * Returns the string representation of a {@link RegExp}
+ * without delimiters.
+ *
+ * @param {RegExp} rx
+ * @return {string}
+ * The string representation of <var>rx</var>
+ */
+ toString2: function (rx) {
+ // return rx.toString().replace(/[^\/]*\/((\\\/|[^\/])+)\/[^\/]*/, "$1");
+ if (!rx)
+ {
+ rx = this;
+ }
+
+ return rx.source || rx.toString().replace(/[^\/]*\/(.+)\/[^\/]*/, "$1");
+ }
+ };
+}());
+
+// jsx.regexp.docURL = jsx.regexp.path + "regexp.htm";
+
+var regexp2str = jsx.regexp.toString2;
+RegExp.prototype.toString2 = regexp2str;
+
+var regexp_concat = jsx.regexp.concat;
+RegExp.prototype.concat = regexp_concat;
+
+var regexp_intersect = jsx.regexp.intersect;
+RegExp.prototype.intersect = regexp_intersect;
+
+var strRegExpEscape = jsx.regexp.escape;
+String.prototype.regExpEscape = strRegExpEscape;
/live/regexp.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/dom.js
===================================================================
--- live/dom.js (nonexistent)
+++ live/dom.js (revision 509)
@@ -0,0 +1,1847 @@
+/**
+ * @fileOverview <title>PointedEars' DOM Library</title>
+ * @file $Id$
+ *
+ * @partof PointedEars JavaScript Extensions (JSX)
+ * @requires object.js
+ * @recommends types.js, dom/xpath.js
+ * @source Based upon
+ * @link{
+ * selfhtml#dhtml/beispiele/dhtml_bibliothek.htm,
+ * dhtml.js from SELFHTML (8.0)
+ * }
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2001 SELFHTML e.V. <stefan.muenz@selfhtml.org> et al.,
+ * 2002-2013 Thomas Lahn <js@PointedEars.de>,
+ * 2004 Ulrich Kritzner <droeppez@web.de> (loadScript),
+ * 2005 MozillaZine Knowledge Base contributors (DOM XPath):
+ * Eric H. Jung <grimholtz@yahoo.com> et al.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License (GPL) for more details.
+ *
+ * You should have received a copy of the GNU GPL along with this
+ * program (COPYING file); if not, go to [1] or write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * [1] <http://www.gnu.org/licenses/licenses.html#GPL>
+ *
+ * @section Enhancements
+ *
+ * - New features:
+ * + getElem("tagname", "$TAGNAME") : HTML(Options)Collection
+ * + setAttr(...)
+ * + radioChkdVal(...)
+ * + removeOptions(...)
+ * + addOption(...)
+ * + selectRadioBtn(...)
+ * + disableElementGroup(...)
+ *
+ * - Pretty printing and detailed documentation
+ * - Removed unnecessary variables and DHTML_init() function
+ * - Use references and initialization wherever possible
+ * - Introducing @link{#DHTML()} prototype and @link{#dhtml}
+ * instance, using boolean properties instead of numeric
+ * global variables.
+ * Note: This enhancement makes this library incompatible to
+ * the source code it is based upon and to previous versions
+ * of this library (if you used the global variables that
+ * were defined herein, otherwise _not_.)
+ *
+ * - Argument renaming and checking
+ * - if...else if...else --> switch...case...default
+ * - Calling exception function on invalid arguments
+ * - Do not try to access undefined properties (prevents
+ * warnings), use the "typeof" operator instead
+ *
+ * @section Bugfixes
+ *
+ * - When the result is an object, return `null' instead of
+ * `void (0)'. Otherwise return a null-string (`""') or
+ * true/false on success/failure, so that each function
+ * has a defined return value.
+ */
+/*
+ * Refer the repository changelog at http://PointedEars.de/websvn/
+ * for changes to the last version.
+ *
+ * This document contains JavaScriptDoc.
+ * See http://pointedears.de/scripts/JSdoc/ for details.
+ */
+
+/**
+ * @deprecated
+ */
+function DHTML()
+{
+ this.allowExceptionMsg = true;
+}
+
+/* a more compatible approach */
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+jsx.dom = {
+ version: "$Id$",
+ //var dhtmlDocURL = dhtmlPath + "dhtml.htm";
+ copyright: "Copyright \xA9 2002-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://pointedears.de/scripts/"
+};
+jsx.dom.URI = jsx.dom.path + "dom.js";
+//this.docURI = this.path + "dhtml.htm";
+
+if (typeof document != "undefined")
+{
+ jsx.dom.hasDocumentAll = false;
+
+ jsx.dom.getElementById = jsx.dom.getElemById = jsx.dom.getEBI = jsx.dom.gEBI = (
+ function () {
+ if (typeof document == "undefined")
+ {
+ return function () {
+ return null;
+ };
+ }
+
+ var jsx_object = jsx.object;
+
+ if (jsx_object.isMethod(document, "getElementById"))
+ {
+ /**
+ * @param {string} sId
+ * @return {Element|Null}
+ * Reference to an {@link Element} object representing
+ * the element with the given ID, <code>null</code> or
+ * <code>undefined</code> if there is no such element.
+ * The return value varies among DOM implementations
+ * if there is more than one matching element (invalid markup).
+ */
+ return function (sId) {
+ /* wrapper method required to avoid "invalid op. on prototype" exception */
+ return document.getElementById(sId);
+ };
+ }
+
+ if ((jsx.dom.hasDocumentAll = jsx_object.isMethod(document, "all")))
+ {
+ return function (sId) {
+ return document.all(sId);
+ };
+ }
+
+ return function (sId) {
+ return document[sId];
+ };
+ }
+ )();
+
+ jsx.dom.hasDocumentLayers = false;
+
+ jsx.dom.getElementsByName = jsx.dom.getElemByName = jsx.dom.gEBN = (
+ function () {
+ function dummy()
+ {
+ return null;
+ }
+
+ if (typeof document == "undefined")
+ {
+ return dummy;
+ }
+
+ if (jsx.object.isMethod(document, "getElementsByName"))
+ {
+ /* W3C DOM Level 2 HTML */
+ /**
+ * @param {string} sName
+ * @param {number} index (optional)
+ * @return Element|Layer|Null|Undefined
+ */
+ return function (sName, index) {
+ var result = document.getElementsByName(sName);
+ if (result && !isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+
+ return result;
+ };
+ }
+ else if (jsx.dom.hasDocumentAll)
+ {
+ /* IE4 DOM */
+ return function (sName, index) {
+ var result = document.all(sName);
+ if (result && !isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+
+ return result;
+ };
+ }
+ else if ((jsx.dom.hasDocumentLayers = (typeof document.layers == "object")))
+ {
+ /* NN4 DOM */
+ return function (sName, index) {
+ var result = document.layers[sName];
+ if (result && !isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+
+ return result;
+ };
+ }
+
+ return dummy;
+ }()
+ );
+
+ jsx.dom.hasGetElementsByTagName = false;
+
+ jsx.dom.getElementsByTagName = jsx.dom.getElemByTagName = jsx.dom.gEBTN = (
+ function () {
+ var jsx_object = jsx.object;
+
+ if (jsx_object.isNativeMethod(jsx, "xpath", "evaluate"))
+ {
+ /* W3C DOM Level 3 XPath */
+ /**
+ * @param {string} sTagName
+ * @param {number} index (optional)
+ * @param {Element} oContextNode (optional)
+ * @return {Array|Element}
+ * An <code>Array</code> of references to objects representing
+ * matching elements, or one reference to such an object if
+ * <var>index</var> was provided.
+ */
+ return function (sTagName, index, oContextNode) {
+ if (!sTagName)
+ {
+ sTagName = '*';
+ }
+
+ if (arguments.length > 2 && typeof index != "number")
+ {
+ var tmp = oContextNode;
+ oContextNode = index;
+ index = tmp;
+ }
+
+ var result = jsx.dom.xpath.evaluate('.//' + sTagName, oContextNode || null,
+ null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
+
+ if (result)
+ {
+ if (!isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+ }
+
+ return result;
+ };
+ }
+
+ if ((jsx.dom.hasGetElementsByTagName =
+ (typeof document != "undefined"
+ && jsx_object.isMethod(document, "getElementsByTagName"))))
+ {
+ /* W3C DOM Level 2 Core */
+ /**
+ * @param {string} sTagName
+ * @param {number} index (optional)
+ * @param {Element} oContextNode (optional)
+ * @return {NodeList|Element|Null}
+ * An <code>NodeList</code> of references to objects representing
+ * matching elements, or one reference to such an object if
+ * <var>index</var> was provided; <code>null</code> if there
+ * is no matching element.
+ */
+ return function (sTagName, index, oContextNode) {
+ if (!sTagName)
+ {
+ sTagName = '*';
+ }
+
+ if (arguments.length > 2 && typeof index != "number")
+ {
+ var tmp = oContextNode;
+ oContextNode = index;
+ index = tmp;
+ }
+
+ if (!oContextNode)
+ {
+ oContextNode = document;
+ }
+
+ if (!jsx_object.isMethod(oContextNode, "getElementsByTagName"))
+ {
+ return null;
+ }
+
+ var result = oContextNode.getElementsByTagName(sTagName);
+ if (result && !isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+
+ return result;
+ };
+ }
+
+ if (jsx.dom.hasDocumentAll && isMethod(document.all, "tags"))
+ {
+ /**
+ * @param {string} sTagName
+ * @param {number} index (optional)
+ * @param {Element} oContextNode (optional)
+ * @return {NodeList|Element|Undefined}
+ * An <code>NodeList</code> of references to objects representing
+ * matching elements, or one reference to such an object if
+ * <var>index</var> was provided; <code>null</code>
+ * if there is no matching element.
+ */
+ return function (sTagName, index, oContextNode) {
+ if (arguments.length > 2 && typeof index != "number")
+ {
+ var tmp = oContextNode;
+ oContextNode = index;
+ index = tmp;
+ }
+
+ if (!oContextNode)
+ {
+ oContextNode = document;
+ }
+
+ if (!jsx.object.isMethod(oContextNode, "all", "tags"))
+ {
+ return null;
+ }
+
+ var result = oContextNode.all.tags(sTagName);
+ if (result && !isNaN(index) && index > -1)
+ {
+ result = result[index];
+ }
+
+ return result;
+ };
+ }
+
+ return function () {
+ return null;
+ };
+ }()
+ );
+
+ jsx.dom.getElementByIndex = jsx.dom.getElemByIndex = jsx.dom.gEBIdx = (function () {
+ function dummy()
+ {
+ return null;
+ }
+
+ if (typeof document == "undefined")
+ {
+ return dummy;
+ }
+
+ if (jsx.dom.hasGetElementsByTagName)
+ {
+ /**
+ * @param {number} index
+ * @return Element|Null|Undefined
+ */
+ return function (index) {
+ return (result = document.getElementsByTagName('*')[index]);
+ };
+ }
+
+ if (jsx.dom.hasDocumentAll)
+ {
+ /**
+ * @param {number} index
+ * @return Element|Null|Undefined
+ */
+ return function (index) {
+ return document.all(index);
+ };
+ }
+
+ if (jsx.dom.hasDocumentLayers)
+ {
+ /**
+ * @param {number} index
+ * @return Layer|Null|Undefined
+ */
+ return function (index) {
+ return document.layers[index];
+ };
+ }
+
+ return dummy;
+ }());
+}
+
+/*
+ * Apart from isNS4DOM, none of these object-inference properties is used
+ * anymore; they are still here for backwards compatibility only
+ */
+//this.isW3CDOM = jsx.object.isMethod(document, "getElementById");
+//this.isOpera = typeof window.opera != "undefined";
+jsx.dom.isNS4DOM = typeof document.layers != "undefined";
+//this.isIE4DOM = typeof document.all == "object" && !this.isOpera;
+//this.supported = this.isW3CDOM || this.isNS4DOM || this.isOpera
+// || this.isIE4DOM;
+
+/* DOM preselection (why?) */
+//this.W3CDOM = 3;
+//this.IE4DOM = 2;
+//this.NS4DOM = 1;
+//this.DOM = this.supported
+// && (this.isW3CDOM && this.W3CDOM)
+// || (this.isIE4DOM && this.IE4DOM)
+// || (this.isNS4DOM && this.NS4DOM);
+
+/* allows for de.pointedears.jsx.dom */
+if (typeof de == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var de = {};
+}
+
+if (typeof de.pointedears == "undefined")
+{
+ /**
+ * @namespace
+ */
+ de.pointedears = {};
+}
+
+if (typeof de.pointedears.jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ de.pointedears.jsx = jsx;
+}
+
+/**
+ * Shows an exception alert and allows for
+ * displaying a stack trace.
+ *
+ * @param {string} sMessage = ""
+ * Error message to be displayed.
+ * @return {boolean}
+ * Always <code>false</code>
+ */
+jsx.dom.DHTMLException = function (sMessage) {
+ /* Prevent exceptions from "bubbling" on (keyboard) event */
+ if (!jsx.dom.allowExceptionMsg)
+ {
+ return false;
+ }
+
+ jsx.dom.allowExceptionMsg = false;
+
+ jsx.setErrorHandler();
+ var stackTrace =
+ jsx.object.isMethod(_global, "Error") && (new Error()).stack || "";
+
+ jsx.clearErrorHandler();
+
+ alert(
+ "dhtml.js "
+ + jsx.dom.version + "\n"
+ + jsx.dom.copyright + " "
+ + jsx.dom.author + " <" + jsx.dom.email + ">\n"
+ + 'The latest version can be obtained from:\n'
+ + "<" + jsx.dom.URI + ">\n\n"
+ + sMessage + "\n"
+ + "__________________________________________________________\n"
+ + "Stack trace"
+ + (stackTrace
+ ? ":\n\n" + stackTrace
+ : " not available in this DOM."));
+
+ jsx.dom.allowExceptionMsg = true;
+ return false;
+};
+
+jsx.dom.write = function (s) {
+ var result = jsx.tryThis(
+ function () {
+ document.write(s);
+
+ return true;
+ },
+ function () {
+ return jsx.tryThis(
+ function () {
+ var result2 = false;
+ var ns = document.documentElement.getAttribute("xmlns");
+ var scripts;
+ if (ns)
+ {
+ scripts = document.getElementsByTagNameNS(ns, "script");
+ }
+ else
+ {
+ scripts = document.getElementsByTagName("script");
+ }
+
+ if (scripts && scripts.length > 0)
+ {
+ var lastScript = scripts[scripts.length - 1];
+ result2 = !!lastScript.parentNode.insertBefore(
+ document.createTextNode(s), lastScript.nextSibling);
+ }
+
+ return result2;
+ });
+ });
+
+ /* fix circular reference */
+ s = null;
+
+ return result;
+};
+
+/**
+ * Retrieves an HTMLElement object or a collection of such
+ * objects that match certain criteria.
+ *
+ * @author
+ * (C) 2003, 2004 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {string} sType
+ * Defines the type of <code>sValue</code>. Valid values are
+ * "id", "name", "tagname", "index" and "classname". The
+ * argument is case-insensitive.
+ * @param {string} sValue (optional)
+ * Case-sensitive ID, name or tag name of object (collection).
+ * @param {number} index (optional)
+ * Numeric index of an element of the selected
+ * collection. For IDs must be unique throughout a document,
+ * this argument is ignored if <code>sType</code> is "id".
+ * @return {HTMLElement|NodeList|Null}
+ * A reference to an object if <code>sType</code> is "id", or
+ * if it is "name" or "tagname" and <code>index</code> is
+ * specified; otherwise a collection of objects matching the
+ * specified criteria; <code>null</code> if no matching object
+ * exists.
+ */
+jsx.dom.getElem = function (sType, sValue, index) {
+ /**
+ * Calls DHTMLException() for an invalid type.
+ */
+ function invalidType()
+ {
+ jsx.dom.DHTMLException(
+ 'getElem: Invalid type "' + sType + '"\n'
+ + 'Must be one of "id", "name", "tagname", "index" or "classname"'
+ + ' (case-insensitive).');
+ }
+
+ if (!sType || typeof sType != "string" || !sType.toLowerCase)
+ {
+ jsx.dom.DHTMLException(
+ "getElem: Invalid type: " + sType + "\n"
+ + "Must be string.");
+ }
+
+ if (!sValue || typeof sValue != "string")
+ {
+ jsx.dom.DHTMLException(
+ "getElem: Invalid value: " + sValue + "\n"
+ + "Must be string.");
+ }
+
+ var o = null;
+
+ switch ((sType = sType.toLowerCase()))
+ {
+ case 'id':
+ case 'index':
+ case 'classname':
+ o = jsx.dom["getElemBy" + {
+ id: "Id",
+ index: "Index",
+ classname: "ClassName"
+ }[sType]](sValue);
+ break;
+
+ case 'name':
+ case 'tagname':
+ o = jsx.dom["getElemBy" + {
+ name: "Name",
+ tagname: "TagName"
+ }[sType]](sValue, index);
+ break;
+
+ default:
+ invalidType();
+ }
+
+ return o;
+};
+
+/**
+ * Retrieves the content of an HTMLElement object.
+ *
+ * @author (C) 2003-2005, 2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLElement} oElement
+ * Element which content is to be retrieved.
+ * @param {boolean} bHTML (optional)
+ * If <code>true</code>, returns the HTML content instead of
+ * the text content in case the latter cannot be retrieved.
+ * @return {string}
+ * A string with the content of the element; a null-string if
+ * no such element object exists or if the DOM does not provide
+ * retrieval of the element's content.
+ */
+jsx.dom.getCont = function (oElement, bHTML) {
+ var sResult = "";
+
+ if (oElement)
+ {
+ /* W3C DOM Level 2 Core */
+ if (typeof oElement.firstChild != "undefined")
+ {
+ if (typeof oElement.firstChild.nodeType != "undefined"
+ && oElement.firstChild.nodeType ==
+ /* W3C-DOM 2 o.firstChild.TEXT_NODE constant is N/A in IE and O7 */
+ ((typeof oElement.firstChild.TEXT_NODE != "undefined"
+ && oElement.firstChild.TEXT_NODE)
+ || 3))
+ {
+ sResult = oElement.firstChild.nodeValue;
+ }
+ }
+ else
+ {
+ if (typeof oElement.innerText != "undefined")
+ {
+ sResult = oElement.innerText;
+ }
+
+ if ((bHTML || typeof oElement.innerText == "undefined")
+ && typeof oElement.innerHTML != "undefined")
+ {
+ sResult = oElement.innerHTML;
+ }
+ }
+ }
+
+ return sResult;
+};
+
+/**
+ * Specifies the content of an HTMLElement object.
+ *
+ * @author (C) 2003-2005, 2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLElement} oElement
+ * Element which content is to be changed.
+ * @param {string} sNodeValue
+ * New content of the element.
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code>
+ * otherwise.
+ */
+jsx.dom.setCont = function (oElement, sNodeValue) {
+ if (oElement)
+ {
+ /* DOM Level 2 Core */
+ if (typeof oElement.firstChild != "undefined")
+ {
+ oElement.firstChild.nodeValue = sNodeValue;
+ return true;
+ }
+ else if (typeof oElement.nodeValue != "undefined")
+ {
+ oElement.nodeValue = sNodeValue;
+ return true;
+ }
+
+ /* IE4 DOM */
+ else if (typeof oElement.innerText != "undefined")
+ {
+ oElement.innerText = sNodeValue;
+ return true;
+ }
+
+ /* NS4 DOM */
+ else if (jsx.dom.isNS4DOM
+ && oElement.document
+ && oElement.document.open
+ && oElement.document.write
+ && oElement.document.close)
+ {
+ oElement.document.open();
+ oElement.document.write(sNodeValue);
+ oElement.document.close();
+ return true;
+ }
+ }
+
+ return false;
+};
+
+/**
+ * Returns the text content of a document node.
+ *
+ * @author
+ * (C) 2005 Thomas Lahn <dhtml.js@PointedEars.de>
+ * @param {Node} oNode
+ * Reference to the document node.
+ * @param {boolean} bGetHTML (optional)
+ * If <code>true</code>, returns the HTML content instead of
+ * the text content in case the latter cannot be retrieved.
+ * @return {string}
+ * The text content of @{(oNode)}.
+ * @todo Duplicate of getCont(..., false)?
+ */
+jsx.dom.getContent = function (oNode, bGetHTML) {
+ var text = "";
+
+ if (oNode)
+ {
+ /* W3C DOM Level 3 */
+ if (typeof oNode.textContent != "undefined")
+ {
+ text = oNode.textContent;
+ }
+
+ /* W3C DOM Level 2 */
+ else if (oNode.childNodes && oNode.childNodes.length)
+ {
+ for (var i = oNode.childNodes.length; i--;)
+ {
+ var o = oNode.childNodes[i];
+ if (o.nodeType == ((typeof Node != "undefined" && Node.TEXT_NODE)
+ || 3))
+ {
+ text = o.nodeValue + text;
+ }
+ else
+ {
+ text = arguments.callee(o) + text;
+ }
+ }
+ }
+
+ /* proprietary: IE4+ */
+ else if (typeof oNode.innerText != "undefined")
+ {
+ text = oNode.innerText;
+ }
+ }
+
+ return text;
+};
+
+/**
+ * Sets the text content of a document node.
+ *
+ * @author
+ * (C) 2005 Thomas Lahn <dhtml.js@PointedEars.de>
+ * @param {Node} oNode
+ * Reference to the document node.
+ * @param {string} sContent
+ * @return {boolean}
+ * <code>true</code> if successful, <code<false</code> otherwise.
+ */
+jsx.dom.setTextContent = function (oNode, sContent) {
+ var result = false;
+
+ if (oNode)
+ {
+ /* W3C DOM Level 3 */
+ if (typeof oNode.textContent != "undefined")
+ {
+ oNode.textContent = sContent;
+ result = (oNode.textContent == sContent);
+ }
+
+ /* W3C DOM Level 2 */
+ else if (oNode.removeChild && oNode.firstChild)
+ {
+ while (oNode.firstChild)
+ {
+ oNode.removeChild(oNode.firstChild);
+ }
+
+ result = !!oNode.appendChild(document.createTextNode(sContent));
+ }
+
+ /* proprietary: IE4+ */
+ else if (typeof oNode.innerText != "undefined")
+ {
+ oNode.innerText = sContent;
+ result = (oNode.innerText == sContent);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Retrieves the value of an attribute of an HTMLElement object
+ * that matches certain criteria.
+ *
+ * @author
+ * (C) 2003, 2008, 2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param {HTMLElement} oElement
+ * @param {string} sAttrName
+ * Name of the attribute from which the value
+ * should be retrieved.
+ * @return {any}
+ * The value of the object if <code>sType</code> is "id",
+ * or if it is "name" or "tagname" and <code>index</code>
+ * is specified;
+ * a null-string if no matching object exists or if the DOM
+ * does not provide retrieval of the attribute's values.
+ */
+jsx.dom.getAttr = function (oElement, sAttrName) {
+ var result = "";
+
+ if (oElement)
+ {
+ if (jsx.object.isMethod(oElement, "getAttribute"))
+ {
+ result = oElement.getAttribute(sAttrName);
+ }
+ else if (jsx.dom.isNS4DOM)
+ {
+ result = oElement[sAttrName];
+ }
+ }
+
+ return result;
+};
+
+jsx.dom.attrMap = {
+ alink: "aLink",
+ accesskey: "accessKey",
+ bgcolor: "bgColor",
+ cellpadding: "cellPadding",
+ cellspacing: "cellSpacing",
+ "char": "ch",
+ charoff: "chOff",
+ "class": "className",
+ codebase: "codeBase",
+ codetype: "codeType",
+ colspan: "colSpan",
+ datetime: "dateTime",
+ frameborder: "frameBorder",
+ "for": "htmlFor",
+ ismap: "isMap",
+ longdesc: "longDesc",
+ maxlength: "maxLength",
+ marginheight: "marginHeight",
+ marginwidth: "marginWidth",
+ nohref: "noHref",
+ noresize: "noResize",
+ noshade: "noShade",
+ nowrap: "noWrap",
+ readonly: "readOnly",
+ rowspan: "rowSpan",
+ tabindex: "tabIndex",
+ usemap: "useMap",
+ valuetype: "valueType",
+ vlink: "vLink"
+};
+
+
+/**
+ * Sets the value of an attribute of an HTMLElement object.
+ *
+ * @author
+ * (C) 2003, 2006 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @param o
+ * @param {string} sAttrName
+ * Name of the attribute for which the value should be set.
+ * Attribute names for which an ECMAScript language binding
+ * is defined in W3C DOM Level 2 HTML, are automatically
+ * mapped to the corresponding element object property.
+ * All attribute names are automatically mapped to their
+ * camelCased equivalent.
+ *
+ * Semicolon-separated style property declarations (in
+ * form of colon-separated name-value pairs each) of a
+ * <code>style</code> attribute value are mapped to the
+ * corresponding properties of the object referenced by
+ * the <code>style</code> property of the element object.
+ * Declarations are evaluated from left to right, where
+ * property values complement or replace the previously
+ * defined ones.
+ * @param attrValue
+ * Value of the attribute to be set. The value is
+ * converted to number if it can be interpreted as such.
+ * @return {any}
+ * The value of the attribute of the element object;
+ * a null-string if no matching object exists or if the DOM
+ * does not provide retrieval of the attribute's values.
+ */
+jsx.dom.setAttr = function (o, sAttrName, attrValue) {
+ var result = "";
+
+ if (o && sAttrName)
+ {
+ var attrMap = jsx.dom.attrMap;
+
+ /* camel-case specific attribute names */
+ if (typeof attrMap[sAttrName] != "undefined")
+ {
+ sAttrName = attrMap[sAttrName];
+ }
+
+ var strToValue =
+ /**
+ * Converts a string, if possible, to a number
+ *
+ * @param {string} s
+ * @return {string|number}
+ * The converted value
+ */
+ function (s) {
+ s = s.replace(/^["']|["']$/g, "");
+ return isNaN(s) ? s : +s;
+ };
+
+ if (typeof attrValue != "undefined")
+ {
+ attrValue = strToValue(attrValue);
+ if (sAttrName == "style" && typeof attrValue == "string")
+ {
+ var styleProps = attrValue.split(/\s*;\s*/);
+ for (var i = 0, len = styleProps.length; i < len; i++)
+ {
+ var
+ stylePair = styleProps[i].split(/\s*:\s*/),
+ stylePropName = stylePair[0].toLowerCase();
+
+ jsx.dom.css.setStyleProperty(o, stylePropName,
+ strToValue(stylePair[1]));
+ result = jsx.dom.css.getStyleProperty(o, stylePropName);
+ }
+ }
+ else
+ {
+ result = o[sAttrName] = attrValue;
+ }
+ }
+ else if (!(o[sAttrName] = true))
+ {
+ result = o[sAttrName] = sAttrName;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Creates an element of the type specified, using the
+ * <code>document.createElement()</code> method if supported.
+ * This method works with MSIE, too, for if JScript is used,
+ * it is tried to use the start tag as is instead of passing
+ * only the element type, and adding properties later.
+ *
+ * @function
+ * @author
+ * &copy; 2004, 2006, 2010 Thomas Lahn &lt;dhtml.js@PointedEars.de&gt;
+ * @see <a href="dom2-core#ID-2141741547">DOM Level 2 Core: Document::createElement()</a>
+ * @see <a href="msdn#workshop/author/dhtml/reference/methods/createelement.asp">MSDN Library: createElement()</a>
+ */
+jsx.dom.createElement = (function () {
+ var _setAttr = jsx.dom.setAttr;
+
+ /**
+ * @param {string} sTag
+ * Start tag or element type of the element to be created.
+ * Passing a start tag even works if the UA is not MSIE,
+ * as attributes and values given are parsed from left to
+ * right into the corresponding element object properties.
+ * @return {Element}
+ * A reference to a new <code>Element</code> object with the
+ * <code>nodeName</code> property set to <code>sTagName</code>,
+ * and the <code>localName</code>, <code>prefix</code>,
+ * and <code>namespaceURI</code> properties set to
+ * <code>null</code>.
+ */
+ return function (sTag) {
+ var o = null;
+
+ if (sTag
+ && typeof document != "undefined"
+ && jsx.object.isMethod(document, "createElement"))
+ {
+ /*@cc_on @*/
+ /*@if (@_jscript)
+ o = document.createElement(sTag);
+ @end @*/
+
+ if (!o)
+ {
+ /* NOTE: Uses RegExp() to work around misconfigured PHP (short_open_tag=1) */
+ var aTagComponents = sTag.replace(new RegExp("^<\?\\s*|\\s*>?$", "g"), "")
+ .replace(/\s*=\s*/g, "=").split(/\s+/);
+ o = document.createElement(aTagComponents[0]);
+ if (o)
+ {
+ aTagComponents.shift();
+ var attrs = aTagComponents.join(" ");
+ var m;
+ while ((m = /([^\s=]+)\s*(=\s*(\S+)\s*)?/g.exec(attrs)))
+ {
+ _setAttr(o, m[1].toLowerCase(), m[3]);
+ }
+ }
+ }
+ }
+
+ return o;
+ };
+}());
+
+/**
+ * Creates a node or several nodes from an object.
+ *
+ * Creates a DOM {@link Node} or an {@link Array} of several
+ * <code>Node</code>s from the argument, depending on its type:
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Type</th>
+ * <th>Return value</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <th>{@link String}</th>
+ * <td>{@link Text}</td>
+ * </tr>
+ * <tr>
+ * <th><code>Array</code> of {@link Object} or <code>String</code></th>
+ * <td><code>Array</code> of <code>Node</code>. The input
+ * <code>Array</code>'s elements are processed recursively.</td>
+ * </tr>
+ * <tr>
+ * <th><code>Object</code></th>
+ * <td>{@link Element}. The following of the input
+ * <code>Object</code>'s properties are considered:
+ * <table>
+ * <thead>
+ * <th>Property</th>
+ * <th>Expected type</th>
+ * <th>Meaning</th>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <th><code><var>elementType</var></code> or
+ * <code><var>type</var></code></th>
+ * <td><code>String</code></td>
+ * <td>Element type (case-sensitivity depends on
+ * the document type)</td>
+ * </tr>
+ * <!--<tr>
+ * <th><code><var>attributes</var></code></th>
+ * <td><code>Object</code></td>
+ * <td>Attributes of the element. All attributes
+ * are created in the <code>null</code> namespace.</td>
+ * </tr>-->
+ * <tr>
+ * <th><code><var>properties</var></code></th>
+ * <td><code>Object</code></td>
+ * <td>Properties of the element object. The property
+ * <code>style</code> is handled specially: Its
+ * value should be an <code>Object</code> whose
+ * property names are <code>style</code> property
+ * names and whose property values are the
+ * corresponding values, as supported by
+ * {@link jsx.dom.css#setStyleProperty()}.
+ * <!--Note that some properties may overwrite
+ * attributes.-->
+ * </tr>
+ * <tr>
+ * <th><code><var>childNodes</var></code></th>
+ * <td><code>Array</code> of <code>Object</code>
+ * or <code>String</code></td>
+ * <td>Child nodes of the element node.
+ * The elements of the <code>Array</code>
+ * are processed recursively.
+ * </tr>
+ * </tbody>
+ * </table></td>
+ * </tr>
+ * </tbody>
+ * </table>
+ * @function
+ */
+jsx.dom.createElementFromObj = jsx.dom.createNodeFromObj =
+jsx.dom.createNodesFromObj = (function () {
+ var _getKeys = jsx.object.getKeys;
+ var _isArray = jsx.object.isArray;
+ var _isHostMethod = jsx.object.isHostMethod;
+
+ /**
+ * @param {Array|Object} data
+ * @return TextNode|Array[Node]|Element
+ */
+ return function (data) {
+ if (typeof data.valueOf() == "string")
+ {
+ return document.createTextNode(data);
+ }
+
+ /* Support ES5 strict mode */
+ var me = jsx.dom.createNodeFromObj;
+
+ /* If input is an Array, output is an Array of Nodes */
+ if (_isArray(data))
+ {
+ var a = [];
+
+ for (var i = 0, len = data.length; i < len; ++i)
+ {
+ a[i] = me(data[i]);
+ }
+
+ return a;
+ }
+
+ var el = document.createElement(data.elementType || data.type);
+ if (!el)
+ {
+ return null;
+ }
+
+// var attributes = data.attributes;
+// if (attributes && _isHostMethod(el, "setAttribute"))
+// {
+// var keys = _getKeys(attributes);
+//
+// for (var i = 0, len = keys.length; i < len; ++i)
+// {
+// var attrName = keys[i];
+// el.setAttribute(attrName, attributes[attrName]);
+// }
+// }
+
+ var properties = data.properties;
+ if (properties)
+ {
+ keys = _getKeys(properties);
+
+ for (i = 0, len = keys.length; i < len; ++i)
+ {
+ var propName = keys[i];
+
+ if (propName == "style")
+ {
+ var style = properties[propName];
+ var _setStyleProperty = jsx.object.getFeature(jsx.dom, "css", "setStyleProperty");
+ if (typeof style != "string" && typeof _setStyleProperty != "function")
+ {
+ jsx.warn("JSX:dom/css.js:jsx.dom.css.setStyleProperty()"
+ + " is recommended for setting style object properties");
+ el[propName] = style;
+ }
+ else
+ {
+ var styleKeys = _getKeys(style);
+ for (var i = 0, len = styleKeys.length; i < len; ++i)
+ {
+ var stylePropName = styleKeys[i];
+ _setStyleProperty(el, stylePropName, style[stylePropName]);
+ }
+ }
+ }
+ else
+ {
+ el[propName] = properties[propName];
+ }
+ }
+ }
+
+ var nodes = data.childNodes;
+ for (var i = 0, len = nodes && nodes.length; i < len; ++i)
+ {
+ el.appendChild(me(nodes[i]));
+ }
+
+ return el;
+ };
+}());
+
+/**
+ * Removes all occurences of a class name from the
+ * <code>class</code> attribute of an {@link Element}.
+ *
+ * For compatibility, if possible removes the <code>class</code>
+ * attribute if it is empty afterwards.
+ *
+ * @param {Element} o
+ * @param {string} sClassName
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code> otherwise.
+ */
+jsx.dom.removeClassName = function (o, sClassName) {
+ var sRxClassName = "(^\\s*|\\s+)" + sClassName + "(\\s*$|(\\s))";
+
+ if (jsx.object.isHostMethod(o, "classList", "remove"))
+ {
+ /* W3C DOM Level 4 */
+ o.classList.remove(sClassName);
+ }
+ else
+ {
+ var curClassNames = o.className;
+ var newClassNames = curClassNames.replace(
+ new RegExp(sRxClassName, "g"),
+ "$3");
+ o.className = newClassNames;
+
+ if (!newClassNames && jsx.object.isMethod(o, "removeAttribute"))
+ {
+ o.removeAttribute("class");
+ }
+ }
+
+ return !((new RegExp(sRxClassName)).test(o.className));
+};
+
+jsx.dom.addClassName = (function () {
+ var _removeClassName = jsx.dom.removeClassName;
+
+ /**
+ * Adds a class name to the <code>class</code> attribute of
+ * an {@link Element}.
+ *
+ * @param {Element} o
+ * @param {string} sClassName
+ * @param {boolean} bRemove
+ * If the class name is already there, and this argument is
+ * <code>true</code>, all instances of it are removed first.
+ * If the class is there and this argument is <code>false</code>,
+ * exit without changing anything. The default is <code>false</code>,
+ * which is more efficient.
+ * @return {boolean}
+ * <code>true</code> if the class name could be added successfully or
+ * was already there, <code>false</code> otherwise.
+ */
+ function _addClassName (o, sClassName, bRemove)
+ {
+ var rx = new RegExp("(^\\s*|\\s+)" + sClassName + "(\\s*$|\\s)");
+
+ if (bRemove)
+ {
+ _removeClassName(o, sClassName);
+ }
+ else if (rx.test(o.className))
+ {
+ return true;
+ }
+
+ if (sClassName)
+ {
+ if (jsx.object.isHostMethod(o, "classList", "add"))
+ {
+ /* W3C DOM Level 4 */
+ o.classList.add(sClassName);
+ }
+ else
+ {
+ if (/\S/.test(o.className))
+ {
+ o.className += " " + sClassName;
+ }
+ else
+ {
+ o.className = sClassName;
+ }
+ }
+
+ return rx.test(o.className);
+ }
+ }
+
+ return _addClassName;
+}());
+
+/**
+ * Appends several child nodes to a parent node in the specified order.
+ *
+ * @param {Node} parentNode
+ * @param {NodeList|Array} childNodes
+ * @return {boolean}
+ * <code>true</code> on success, <code>false</code> otherwise.
+ */
+jsx.dom.appendChildren = function (parentNode, childNodes) {
+ if (parentNode)
+ {
+ for (var i = 0, len = childNodes.length; i < len; ++i)
+ {
+ parentNode.appendChild(childNodes[i]);
+ }
+
+ return true;
+ }
+
+ return false;
+};
+
+/**
+ * Removes several child nodes of a parent node in reverse order.
+ *
+ * @param {Node} parentNode
+ * @param {NodeList|Array} childNodes (optional)
+ * The child nodes to be deleted. If not provided,
+ * all child nodes of <var>parentNode</var> are deleted,
+ * the table-safe equivalent to
+ * <code><var>parentNode</var>.innerHTML = "";</code>
+ * @return {boolean}
+ * <code>true</code> on success, <code>false</code> otherwise.
+ */
+jsx.dom.removeChildren = function (parentNode, childNodes) {
+ if (parentNode)
+ {
+ if (arguments.length < 2)
+ {
+ childNodes = parentNode.childNodes;
+ }
+
+ for (var i = childNodes.length; i--;)
+ {
+ parentNode.removeChild(childNodes[i]);
+ }
+
+ return true;
+ }
+
+ return false;
+};
+
+jsx.dom.html2nodes = function (sHTML) {
+ var m,
+ rx = /(<([^\s>]+)(\s+[^>]*)?>)|([^<]+)/g,
+ node = document.createElement("html");
+
+ while ((m = rx.exec(sHTML)))
+ {
+ if (m[1])
+ {
+ if (m[2].charAt(0) !== "/")
+ {
+ var newNode = document.createElement(m[2]);
+ node.appendChild(newNode);
+ node = newNode;
+ }
+ else
+ {
+ node = node.parentNode;
+ }
+ }
+ else
+ {
+ node.appendChild(document.createTextNode(m[4]));
+ }
+ }
+
+ return node;
+};
+
+jsx.dom.HTMLSerializer = (
+ function () {
+
+ }
+).extend("Object", {
+ serializeToString: (function () {
+ var elemInfo = {
+ 'a': {
+ attribs: ["name", "href", "hreflang", "type", "rel", "rev", "charset",
+ "id", "class", "lang", "title", "style", "shape", "coords",
+ "onfocus", "onblur", "onclick", "ondblclick", "onmousedown",
+ "onmouseup", "onmouseover", "onmousemove", "onmouseout",
+ "onkeypress", "onkeydown", "onkeyup",
+ "target", "tabindex", "accesskey"]
+ },
+ 'area': {
+ empty: false
+ },
+ 'base': {
+ empty: false
+ },
+ 'basefont': {
+ empty: false
+ },
+ 'br': {
+ empty: false
+ },
+ 'col': {
+ empty: false
+ },
+ 'frame': {
+ empty: false
+ },
+ 'hr': {
+ empty: false
+ },
+ 'img': {
+ empty: true
+ },
+ 'input': {
+ empty: false
+ },
+ 'isindex': {
+ empty: false
+ },
+ 'link': {
+ empty: false
+ },
+ 'meta': {
+ empty: false
+ },
+ 'param': {
+ empty: true
+ }
+ };
+
+ return function (oNode, bIncludeProprietary) {
+ var me = arguments.callee;
+
+ if (oNode.tagName)
+ {
+ var
+ t = oNode.tagName.toLowerCase(),
+ startTag = "<" + t,
+ content = [],
+ endTag = "";
+
+ for (var i = 0, c = oNode.childNodes, len = c && c.length; i < len; i++)
+ {
+ content.push(me(oNode, bIncludeProprietary));
+ }
+
+ if (typeof elemInfo[t] != "undefined" && !elemInfo[t].empty)
+ {
+ endTag = "</" + t + ">";
+ }
+
+ return startTag + content.join("") + endTag;
+ }
+
+ return oNode.textContent;
+ };
+ })()
+});
+
+/**
+ * Returns the first child node of another node.
+ * <p>
+ * NOTE: This method was written to support the MSHTML 4 DOM as well as
+ * newer DOMs. It is <em>NOT</em> intended to work around the issue that
+ * MSHTML removes white-space text nodes from the document tree, while
+ * standards-compliant DOMs do not. In particular, it does <em>NOT</em>
+ * return the first child <em>element</em> node, and return values do vary
+ * across DOMs.
+ * </p>
+ * @param {Node} oNode
+ * @return {Node} The first child node of another node.
+ */
+jsx.dom.getFirstChild = function (oNode) {
+ var result = null;
+
+ if (oNode)
+ {
+ if (oNode.firstChild)
+ {
+ result = oNode.firstChild;
+ }
+ else if (oNode.document && oNode.document.all)
+ {
+ result = oNode.document.all(0);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Returns the parent node of a node
+ *
+ * @param {Node} oNode
+ * @return {Node} The parent node of <var>oNode</var>
+ */
+jsx.dom.getParent = function (oNode) {
+ var result = null;
+
+ if (oNode)
+ {
+ if (oNode.parentNode)
+ {
+ result = oNode.parentNode;
+ }
+ else if (oNode.parentElement)
+ {
+ result = oNode.parentElement;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Loads a script resource asynchonrously by appending
+ * a <code>script</code> element to the current (X)HTML document.
+ *
+ * A <code>script</code> element is being created and appended as
+ * child to the <code>body</code> element or the <code>head</code>
+ * element of the document, whichever is available first. In a
+ * frameset document, <code>document.body</code> refers to the
+ * topmost <code>frameset</code> element object; in that case,
+ * it is attempted to find a <code>body</code> element by other
+ * means. If that fails, it means that there either is no such
+ * element, or that the element object is inaccessible because
+ * it is disabled by the frameset. In that case the
+ * <code>script</code> element is appended to the <code>head</code>
+ * element instead.
+ *
+ * Note that previous versions of this method appended to the
+ * <code>head</code> element only. However, this limited its use
+ * to scripts that did not modify the body content. You may still
+ * not load such scripts with this method if the document has
+ * been loaded and the script resource uses
+ * <code>document.write()</code>. This method intentionally does
+ * not use <code>document.write()</code> to avoid the possibility
+ * that a loaded document could be overwritten.
+ *
+ * NOTE: Tested successfully with MSIE and Mozilla/5.0; however,
+ * do not rely on that the script was included, but <em>test</em>
+ * for it.
+ *
+ * @author
+ * (C) 2004-2009, 2013 Thomas Lahn <dhtml.js@PointedEars.de>,
+ * 2004 Ulrich Kritzner <droeppez@web.de>
+ *
+ * @requires jsx.object#isMethod()
+ * @param {string} sURI
+ * URI of the script resource to be loaded.
+ * @param {string} sType = "text/javascript"
+ * MIME type of the script to be loaded. Used as value of the
+ * <code>type</code> attribute.
+ * @param {string} sLanguage (optional)
+ * Value of the <code>language</code> attribute (deprecated in
+ * HTML 4.01 and XHTML 1.0, absent from XHTML 1.1 and later
+ * versions) to specify the version of the script language.
+ * Unused by default.
+ * @param {boolean} bReload = false
+ * If <code>true</code>Force an already loaded script to be reloaded,
+ * i.e. another <code>script</code> element with the same URI
+ * in the <code>src</code> attribute to be added;
+ * if <code>false</code> (default), the attempt to load a script
+ * that has already been loaded fails silently.
+ * @return {boolean}
+ * <code>false</code> if the script could not be loaded,
+ * <code>true</code> otherwise.
+ */
+jsx.dom.loadScript =
+ function jsx_dom_loadScript (sURI, sType, sLanguage, bReload) {
+ var
+ jsx_object = jsx.object,
+ result = false;
+
+ if (typeof jsx_dom_loadScript.registry != "undefined"
+ && jsx_object.getProperty(jsx_dom_loadScript.registry, sURI, false)
+ && !bReload)
+ {
+ return true;
+ }
+
+ var parent = document.body;
+ if (!parent || parent.tagName.toLowerCase() === "frameset")
+ {
+ parent = jsx.dom.getElemByTagName("script", 0);
+ if (!parent)
+ {
+ parent = document.head || jsx.dom.getElemByTagName("head", 0);
+ }
+
+ if (!parent)
+ {
+ return false;
+ }
+ }
+
+ if (!jsx_object.isHostMethod(document, "createElement"))
+ {
+ return false;
+ }
+
+ var oScript = document.createElement("script");
+ if (!oScript)
+ {
+ return false;
+ }
+
+ /* no exception handling for backwards compatibility reasons */
+ if (typeof oScript.src != "undefined")
+ {
+ oScript.src = sURI;
+ }
+
+ if (typeof oScript.type != "undefined")
+ {
+ oScript.type = sType || "text/javascript";
+ }
+
+ if (sLanguage)
+ {
+ oScript.language = sLanguage;
+ }
+
+ if (typeof oScript.defer != "undefined")
+ {
+ oScript.defer = true;
+ }
+
+ if (jsx_object.isHostMethod(parent, "appendChild"))
+ {
+ parent.appendChild(oScript);
+ result = (
+ typeof parent.lastChild != "undefined"
+ && parent.lastChild == oScript);
+ }
+ else if (jsx_object.isHostMethod(parent, "insertAdjacentElement"))
+ {
+ parent.insertAdjacentElement("beforeEnd", oScript);
+ result = true;
+ }
+
+ if (result)
+ {
+ if (typeof jsx_dom_loadScript.registry == "undefined")
+ {
+ jsx_dom_loadScript.registry = {};
+ }
+
+ jsx_dom_loadScript.registry[sURI] = true;
+ }
+
+ return result;
+ };
+
+/**
+ * Retrieves descendant focusable elements in order of their
+ * "tabindex" attribute.
+ *
+ * @author
+ * (C) 2004 Thomas Lahn <dhtml.js@PointedEars.de>
+ * @requires
+ * http://pointedears.de/scripts/collection.js
+ * @param {Document|Element} o (optional)
+ * Reference to a {@link dom2-core#Document Document} or
+ * {@link dom2-core#Element Element} object from which to retrieve
+ * descendant elements. If omitted or evaluated to
+ * <code>false</code>, it is tried to use the calling object.
+ * @return {Collection}
+ * A reference to a {@link #Collection} object containing
+ * the descendant elements of <var>o</var> or the calling
+ * {@link dom2-core#Document Document}/{@link dom2-core#Element Element}
+ * object in "tabindex" order: Elements with "tabindex" > 0 come first,
+ * followed by elements with "tabindex" == 0 or where either
+ * "tabindex" is not set or not applicable. Note: An element
+ * with a "tabindex" of 1 will will be the first element
+ * in the resulting collection but for design reasons will
+ * have an index of 0 (but since the Collection prototype
+ * provides an iterator, this does not need to disturb you).
+ * Additional note: Unlike specified, disabled elements will
+ * participate in the tabbing order (so they can be enabled
+ * later without this method to be re-called.)
+ */
+jsx.dom.getElementsByTabIndex = function (o) {
+ var aIndexedElements = new Array();
+ var aUnindexedElements = new Array();
+
+ /* makes the method applicable to Document and Element objects */
+ if (!o
+ && typeof this.constructor != "undefined"
+ && /Document|Element/.test(this.constructor))
+ {
+ o = this;
+ }
+
+ if (jsx.object.isMethod(o, "getElementsByTagName"))
+ {
+ var es = o.getElementsByTagName("*");
+
+ if (es && typeof es.length != "undefined")
+ {
+ var l = es.length;
+
+ for (var i = 0, e; i < l; i++)
+ {
+ e = es[i];
+
+ if (typeof e.tabIndex != "undefined")
+ {
+ /* !null && !0 */
+ if (e.tabIndex)
+ {
+ /*
+ * tabindex="1" --> index == 0; use e.tabIndex
+ * and a "zero dummy" if you do not like this
+ */
+ aIndexedElements[e.tabIndex - 1] = e;
+ }
+ else
+ {
+ aUnindexedElements[aUnindexedElements.length] = e;
+ }
+ }
+ }
+ }
+ }
+
+ return new Collection(aIndexedElements.concat(aUnindexedElements));
+};
+
+if (typeof jsx.types != "undefined"
+ && jsx.types.isFeature("HTMLDocument", "prototype")
+ && !jsx.object.isMethod(HTMLDocument.prototype, "getElementsByTabIndex"))
+{
+ HTMLDocument.prototype.getElementsByTabIndex = jsx.dom.getElementsByTabIndex;
+}
+
+if (typeof jsx.types != "undefined"
+ && jsx.types.isFeature("HTMLElement", "prototype")
+ && !jsx.object.isMethod(HTMLElement.prototype, "getElementsByTabIndex"))
+{
+ HTMLElement.prototype.getElementsByTabIndex = jsx.dom.getElementsByTabIndex;
+}
+
+jsx.dom.isDescendantOfOrSelf = function (node, ancestor) {
+ if (arguments.length < 2)
+ {
+ jsx.throwThis(null, "No ancestor provided");
+ }
+
+ do
+ {
+ if (node == ancestor)
+ {
+ return true;
+ }
+ }
+ while ((node = node.parentNode));
+
+ return false;
+};
+
+/**
+ * Applies hyphenation to the context node.
+ *
+ * Improves the readability of text by inserting soft hyphens
+ * in text nodes as specified by the {@link jsx.string#hyphenation}
+ * dictionary.
+ *
+ * @function
+ * @requires jsx.string.hyphenation#hyphenate()
+ */
+jsx.dom.hyphenate = (function () {
+ var _isArray = jsx.object.isArray;
+ var _hyphenation, _hyphenate, _me;
+
+ /**
+ * @param {Array} contextNodes = document
+ * Hyphenation is applied to these {@link Node}s and their
+ * descendant text nodes. The default is the <code>Document</code>
+ * node referred by the <code>document</code> property of the
+ * next fitting object in the scope chain (usually the Global
+ * Object).
+ * @param {boolean} hyphenateAll
+ * If a true-value,
+ */
+ return function (contextNodes, hyphenateAll) {
+ /* imports */
+ if (!_hyphenate)
+ {
+ _hyphenation = jsx.string.hyphenation;
+ _hyphenate = _hyphenation.hyphenate;
+ }
+
+ _hyphenation.setHyphenateAll(hyphenateAll);
+
+ if (!_me)
+ {
+ _me = jsx.dom.hyphenate;
+ }
+
+ /* optional arguments */
+ if (typeof contextNodes == "undefined")
+ {
+ contextNodes = document;
+ }
+
+ if (!contextNodes)
+ {
+ return jsx.warn("jsx.dom.hyphenate: Invalid context node: " + contextNodes);
+ }
+
+ if (!_isArray(contextNodes))
+ {
+ contextNodes = [contextNodes];
+ }
+
+ for (var i = 0, len = contextNodes.length; i < len; ++i)
+ {
+ var contextNode = contextNodes[i];
+
+ if (!contextNode)
+ {
+ jsx.warn("jsx.dom.hyphenate: Invalid context node " + (i + 1) + ": " + contextNode);
+ continue;
+ }
+
+ for (var j = 0,
+ nodes = contextNode.childNodes,
+ len2 = nodes && nodes.length;
+ j < len2;
+ ++j)
+ {
+ var node = nodes[j];
+
+ if (node.nodeType == 1)
+ {
+ _me(node, hyphenateAll);
+ }
+ else
+ {
+ node.nodeValue = _hyphenate(node.nodeValue, hyphenateAll);
+ }
+ }
+ }
+ };
+}());
\ No newline at end of file
/live/dom.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/python.js
===================================================================
--- live/python.js (nonexistent)
+++ live/python.js (revision 509)
@@ -0,0 +1,423 @@
+"use strict";
+/**
+ * @fileOverview <title>Pythonic functions for ECMAScript implementations</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @author (C) 2011-2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+/* for JSDT only */
+if (typeof jsx.python == "undefined")
+{
+ /** @namespace */
+ jsx.python = {};
+}
+
+/**
+ * @type jsx.python
+ * @memberOf __jsx.python
+ * @namespace
+ */
+jsx.python = (/** @constructor */ function () {
+ var _jsx_object = jsx.object;
+ var _getKeys = _jsx_object.getKeys;
+ var _isArray = _jsx_object.isArray;
+ var _isObject = _jsx_object.isObject;
+
+ return {
+ /**
+ * @version
+ * @memberOf jsx.python
+ */
+ version: "$Revision$ ($Date$)",
+ copyright: "Copyright \xA9 2011-2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+
+ /**
+ * Returns a reference to an <code>Array</code> whose
+ * items are the numbers from <var>start</var> inclusive to
+ * <var>end</var> exclusive using step width <var>step</var>
+ * (may be negative).
+ *
+ * @param {number} start
+ * @param {number} end
+ * @param {number} step = 1
+ * @return {Array}
+ */
+ range: function (start, end, step) {
+ var result = [];
+
+ if (!step)
+ {
+ if (step === 0)
+ {
+ jsx.throwThis(
+ "jsx.InvalidArgumentError", "step argument must not be zero");
+ }
+
+ step = 1;
+ }
+
+ end = +end;
+ step = +step;
+
+ for (var i = +start; (step > 0) ? (i < end) : (i > end); i += step)
+ {
+ result.push(i);
+ }
+
+ return result;
+ },
+
+ /**
+ * Returns a reference to an Array instance containing
+ * the names of the enumerable properties of another object;
+ * returns a reference to a passed Array.
+ *
+ * @function
+ */
+ list: jsx.object.extend((
+ /**
+ * @factory
+ */
+ function () {
+ var _hasOwnProperty = _jsx_object._hasOwnProperty;
+
+ /**
+ * @param {Object} iterable
+ * @return {Array}
+ */
+ return function (iterable) {
+ var result = [];
+
+ if (_isArray(iterable))
+ {
+ return iterable;
+ }
+
+ for (var property in iterable)
+ {
+ if (_hasOwnProperty(iterable, property))
+ {
+ result.push(property);
+ }
+ }
+
+ return result;
+ };
+ }()), {
+ /**
+ * List comprehension.
+ *
+ * Returns a reference to an <code>Array</code>
+ * instance containing the result of passing each item
+ * of <var>list</var> to <var>mapper</var> (or <var>mapper</var>
+ * itself if <var>mapper</var> is not a function) for which
+ * <var>condition</var> returns a true-value (or all items
+ * if <var>condition</var> is a <code>true-value</code> or
+ * <code>undefined</code>, and no items if it is another
+ * false-value).
+ *
+ * @memberOf jsx.python.list
+ * @param {Function|any} mapper
+ * @param {Object} iterable
+ * @param {Function|boolean} condition
+ * @return {Array}
+ */
+ from: function (mapper, iterable, condition) {
+ var result = [];
+
+ var iterableIsArray = _isArray(iterable);
+ var _range = jsx.python.range;
+ if (iterableIsArray)
+ {
+ var len = iterable.length;
+ var keys = _range(0, len);
+ }
+ else
+ {
+ keys = _isObject(iterable) && _getKeys(iterable);
+ len = keys.length;
+ }
+
+ var hasCondition = (typeof condition == "function");
+ for (var i = 0; i < len; ++i)
+ {
+ if (iterableIsArray && !(i in iterable))
+ {
+ continue;
+ }
+
+ var key = keys[i];
+ var item = iterable[key];
+
+ if (hasCondition)
+ {
+ var conditionMet = condition(item, key, iterable);
+ }
+ else
+ {
+ conditionMet = condition;
+ }
+
+ if (!hasCondition || conditionMet)
+ {
+ if (typeof mapper == "function")
+ {
+ var value = mapper(item, key, iterable);
+ }
+ else
+ {
+ value = mapper;
+ }
+
+ result.push(value);
+ }
+ }
+
+ return result;
+ }
+ }
+ ),
+
+ /**
+ * Returns a reference to an object
+ *
+ * @param mapping
+ * @return {Object}
+ */
+ dict: function (mapping, values) {
+ var result = {};
+
+ if (typeof mapping == "undefined")
+ {
+ return result;
+ }
+
+ if (mapping.length)
+ {
+ if (arguments.length > 1)
+ {
+ for (var index in mapping)
+ {
+ result[mapping[index]] = values[index];
+ }
+
+ return result;
+ }
+
+ var props = mapping[0];
+ var vals = mapping[1];
+ for (var index2 in props)
+ {
+ result[props[index2]] = vals[index2];
+ }
+ }
+ else
+ {
+ for (var name in mapping)
+ {
+ result[name] = mapping[name];
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Build an unordered collection of unique elements.
+ *
+ * @type jsx.python.set
+ * @function
+ */
+ set: (
+ /**
+ * @constructor
+ * @factory
+ */
+ function () {
+ var _jsx = jsx;
+ var _jsx_object = _jsx.object;
+ var _Map;
+ var _getKeys = _jsx_object.getKeys;
+ var _isMethod = _jsx_object.isMethod;
+
+ /**
+ * @param {Object} iterable
+ * @return {Array}
+ */
+ return function jsx_python_set (iterable) {
+ if (!(this instanceof jsx_python_set))
+ {
+ return new jsx_python_set(iterable);
+ }
+
+ if (_isMethod(iterable, "slice"))
+ {
+ var result = iterable.slice();
+ }
+ else
+ {
+ result = [];
+
+ for (var i = 0, keys = _getKeys(iterable), len = keys.length;
+ i < len;
+ ++i)
+ {
+ result.push(iterable[keys[i]]);
+ }
+ }
+
+ /* Prefer more efficient (best case: O(n)) Map approach if possible */
+ if (_Map || typeof _jsx.map != "undefined")
+ {
+ if (!_Map)
+ {
+ _Map = _jsx.map.Map;
+ }
+
+ var map = new _Map();
+ for (i = 0, len = result.length; i < len; ++i)
+ {
+ map.put(result[i], true);
+ }
+
+ result = map.keys();
+ }
+ else
+ {
+ /* comparisons(n) = (n^2 - n)/2 ~ O(n^2) */
+ for (var i = 0, len = result.length; i < len; ++i)
+ {
+ for (var j = i + 1; j < len; ++j)
+ {
+ if (result[i] === result[j])
+ {
+ result.splice(j, 1);
+ --j;
+ --len;
+ }
+ }
+ }
+ }
+
+ this._elements = result;
+ this.length = this._elements.length;
+ };
+ }()
+ ).extend(null, {
+ /**
+ * @memberOf jsx.python.set.prototype
+ */
+ intersection: function (other) {
+ if (!(other instanceof jsx.python.set))
+ {
+ other = new jsx.python.set(other);
+ }
+
+ var elements = this._elements;
+ elements.sort();
+ other.sort();
+
+ var intersection = [];
+
+ /* FIXME: Identical elements need not sort to the same position */
+ for (var i = 0, len = elements.length; i < len; ++i)
+ {
+ var element = elements[i];
+ if (element === other[i])
+ {
+ intersection.push(element);
+ }
+ }
+
+ return new jsx.python.set(intersection);
+ },
+
+ isDisjoint: function (other) {
+ return (this.intersection(other).length === 0);
+ },
+
+ toArray: function () {
+ return this._elements;
+ }
+ }),
+
+ /**
+ * Return an {@link Array} of <code>Array</code>s, where each
+ * inner array contains the i-th element from each of the
+ * argument arrays.
+ * The returned <code>Array</code> is truncated in length
+ * to the length of the shortest argument array.
+ *
+ * @params {Array}
+ * @return {Array}
+ */
+ zip: function () {
+ var result = [];
+
+ for (var i = 0, len = arguments[0].length; i < len; ++i)
+ {
+ result[i] = [];
+
+ for (var j = 0, len2 = arguments.length; j < len2; ++j)
+ {
+ if (arguments[j].length - 1 < i)
+ {
+ delete result[i];
+ break;
+ }
+
+ result[i][j] = arguments[j][i];
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Extends an Array with elements from another Array.
+ *
+ * Different from Array.prototype.concat() in that the first Array is modified.
+ * To emphasize this, there is no explicit return value (i.e. returns
+ * <code>undefined</code>).
+ *
+ * @param {Array} list1
+ * Array which is to be extended
+ * @param {Array} list2
+ * Array which elements should be appended to <var>list1</var>
+ */
+ extend: function (list1, list2) {
+ for (var i = 0, len = list2.length; i < len; ++i)
+ {
+ Array.prototype.push.call(list1, list2[i]);
+ }
+ }
+ };
+}());
\ No newline at end of file
/live/python.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/map.js
===================================================================
--- live/map.js (nonexistent)
+++ live/map.js (revision 509)
@@ -0,0 +1,723 @@
+"use strict";
+/**
+ * @fileOverview <title>Thread-unsafe map implementations</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @author (C) 2009-2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namepspace
+ */
+ var jsx = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.map = {
+ version: "$Id$",
+
+ /**
+ * An object that maps keys to values.
+ *
+ * A map cannot contain duplicate keys; each key can map to at most
+ * one value. Keys may be object references.
+ *
+ * @function
+ */
+ Map: jsx.object.extend((
+ /**
+ * @return {jsx.map.Map}
+ */
+ function () {
+ /**
+ * A value in the map, to distinguish it from built-in types
+ *
+ * @param value Value to be stored
+ * @param key Optional key for the value. Used by {@link _Bucket}.
+ * @private
+ */
+ function _ValueContainer(value, key)
+ {
+ this.putValue(value, key);
+ }
+
+ /**
+ * @param value
+ * @return {boolean}
+ * <code>true</code> if <var>v</var> was created using
+ * {@link _ValueContainer}, otherwise <code>false</code>
+ */
+ _ValueContainer.isInstance = function (value) {
+ return !!value && value.constructor === this;
+ };
+
+ _ValueContainer.prototype.putValue = function (value, key) {
+ this._value = value;
+ this._key = key;
+ };
+
+ _ValueContainer.prototype.getValue = function () {
+ return this._value;
+ };
+
+ _ValueContainer.prototype.getKey = function () {
+ return this._key;
+ };
+
+ var _getDataObject = jsx.object.getDataObject;
+
+ /**
+ * In order not to overwrite or shadow built-in properties, if a key is
+ * the name of such a property, an alias property name is used instead.
+ * A maximum length of the alias property name is necessary to avoid
+ * infinite iteration for finding an alias if the previously computed
+ * alias is already used as name of a built-in property.
+ */
+ var _maxAliasLength = 255;
+
+ var _isObjectRef = jsx.object.isObject;
+
+ /**
+ * Returns a safe key, that is, a property name that is not yet used
+ * by the ECMAScript implementation.
+ *
+ * @param unsafeKey
+ * Potentially unsafe key, that is, a property name that may be
+ * already used by the ECMAScript implementation.
+ * @return {string}
+ * @throws jsx.map#KeyError if the user-defined maximum key length
+ * does not suffice to satisfy a safe key.
+ * @private
+ */
+ function _getSafeKey (obj, unsafeKey)
+ {
+ var
+ safeKey = unsafeKey,
+ constructor = obj.constructor,
+ proto = (constructor ? constructor.prototype : null);
+
+ if (_isObjectRef(unsafeKey))
+ {
+ var _class = jsx.object.getClass(unsafeKey);
+ var constructorName = jsx.object.getFunctionName(unsafeKey.constructor);
+ safeKey = (_class ? "[" + _class + "]" : "")
+ + (constructorName ? constructorName + "()" : "")
+ + (typeof unsafeKey.nodeName != "undefined"
+ ? unsafeKey.nodeName
+ : "")
+ + (typeof unsafeKey.id != "undefined"
+ ? "#" + unsafeKey.id
+ : "")
+ + (typeof unsafeKey.className != "undefined"
+ && /\S/.test(unsafeKey.className)
+ ? "." + unsafeKey.className.replace(/\s+/, ".")
+ : "");
+ }
+
+ /*
+ * Try until an unused (not inherited and not own non-_ValueContainer) property
+ * was found or the maximum alias key length has been reached
+ */
+ while (proto && (_hasOwnProperty(proto, safeKey)
+ || (_hasOwnProperty(obj, safeKey)
+ && !_ValueContainer.isInstance(obj[safeKey]))))
+ {
+ if (safeKey.length > _maxAliasLength)
+ {
+ jsx.throwThis("jsx.map.KeyError", unsafeKey);
+ }
+
+ safeKey += "_";
+ }
+
+ return safeKey;
+ }
+
+ function _Bucket()
+ {
+ this._items = _getDataObject();
+ }
+
+ /**
+ * @param value
+ * @return {boolean}
+ * <code>true</code> if <var>v</var> was created using
+ * {@link _Bucket}, otherwise <code>false</code>
+ */
+ _Bucket.isInstance = function (value) {
+ return !!value && value.constructor === this;
+ };
+
+ _Bucket._nextId = 1;
+
+ _Bucket.extend(null, {
+ /**
+ * Returns the next string key for this bucket
+ *
+ * @memberOf _Bucket.prototype
+ * @private
+ * @return {string}
+ */
+ _getNextId: function () {
+ return "key" + (_Bucket._nextId++) + "_";
+ },
+
+ /**
+ * Puts a value in the bucket
+ *
+ * @param oKey
+ * @return {string}
+ * The string key for the object key
+ */
+ put: function (oKey, value) {
+ var sKey = this.find(oKey);
+ if (!sKey)
+ {
+ sKey = _getSafeKey(this._items, this._getNextId());
+ }
+
+ this._items[sKey] = new _ValueContainer(value, oKey);
+
+ return sKey;
+ },
+
+ /**
+ * Gets a value from the bucket
+ *
+ * @param oKey
+ * @return {string}
+ * The value for the object key
+ */
+ get: function (oKey) {
+ var sKey = this.find(oKey);
+ if (!sKey)
+ {
+ return void 0;
+ }
+
+ return this._items[sKey];
+ },
+
+ /**
+ * Returns the string key of an object
+ *
+ * @param oKey
+ * @return {string|boolean}
+ * The string key of <var>oKey</var> if it is in the bucket,
+ * <code>false</code> otherwise.
+ */
+ find: function (oKey) {
+ var items = this._items;
+ for (var sKey in items)
+ {
+ var value = items[sKey];
+ if (_ValueContainer.isInstance(value) && value.getKey() == oKey)
+ {
+ return sKey;
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * Removes an object key from the bucket
+ *
+ * @param oKey
+ * @return {string|boolean}
+ * The removed value for the object key,
+ * or <code>false</code> if it was not in the bucket.
+ */
+ remove: function (oKey) {
+ var sKey = this.find(oKey);
+ if (sKey)
+ {
+ var value = this._items[sKey];
+ delete this._items[sKey];
+ }
+
+ return value;
+ },
+
+ keys: function () {
+ var a = [];
+
+ var items = this._items;
+ for (var key in items)
+ {
+ var o = items[key];
+ if (_ValueContainer.isInstance(o))
+ {
+ a.push(o.getKey());
+ }
+ }
+
+ return a;
+ },
+
+ mappings: function () {
+ var a = [];
+
+ var items = this._items;
+ for (var p in items)
+ {
+ var o = items[p];
+
+ if (_ValueContainer.isInstance(o))
+ {
+ a.push([o.getKey(), o.getValue()]);
+ }
+ }
+
+ return a;
+ }
+ });
+
+ /* Imports */
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ /**
+ * @param {jsx.map.Map} map
+ * The map whose mappings are to be placed in this map
+ * @constructor
+ */
+ function _Map (map)
+ {
+// var Map = arguments.callee;
+
+ /* Allows to use this as a factory */
+ if (!this || this.constructor != _Map)
+ {
+ return new Map(map);
+ }
+
+ var _items = _getDataObject();
+ var _size = 0;
+
+ /**
+ * Gets the maximum alias property name length
+ * for further storage and retrieval operations. The default is 255.
+ *
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code> otherwise.
+ * @public
+ */
+ this.getMaxAliasLength = function () {
+ return _maxAliasLength;
+ };
+
+ /**
+ * Sets the maximum alias property name length
+ * for further storage and retrieval operations.
+ *
+ * @param {number} len
+ * Integer greater than 0 to define the maximum alias property name
+ * length. The default maximum is 255.
+ * @return {boolean}
+ * <code>true</code> if successful, <code>false</code> otherwise.
+ * @throws jsx.map#InvalidLengthError
+ * @public
+ */
+ this.setMaxAliasLength = function (len) {
+ if (typeof len != "number")
+ {
+ len = parseInt(len, 10);
+ }
+
+ if (isNaN(len) || len < 1)
+ {
+ jsx.throwThis("jsx.map.InvalidLengthError");
+ }
+
+ _maxAliasLength = len;
+
+ return _maxAliasLength === len;
+ };
+
+ /**
+ * Returns the number of key-value mappings in this map
+ *
+ * @return {number}
+ * The number of key-value mappings in this map
+ * @public
+ */
+ this.size = function () {
+ return _size;
+ };
+
+ /**
+ * Returns <code>true</code> if this map contains no key-value mappings
+ *
+ * @return {boolean}
+ * <code>true</code> if this map contains no key-value mappings
+ * @public
+ */
+ this.isEmpty = function () {
+ return _size === 0;
+ };
+
+ /**
+ * Returns the value to which the specified key is mapped in this map
+ *
+ * @param key
+ * @param defaultValue
+ * @throws jsx.map#KeyError
+ * If there is no such key and no default value has been passed.
+ * @public
+ */
+ this.get = function (key, defaultValue) {
+ var v = _items[_getSafeKey(_items, key)];
+
+ if (_isObjectRef(key))
+ {
+ if (_Bucket.isInstance(v))
+ {
+ v = v.get(key);
+ }
+ }
+
+ if (!v)
+ {
+ if (arguments.length > 1)
+ {
+ return defaultValue;
+ }
+
+ jsx.throwThis("jsx.map.KeyError", key);
+ }
+
+ return v.getValue();
+ };
+
+ /**
+ * Returns <code>true</code> if this map contains a mapping for the specified key
+ *
+ * @param key
+ * @return {boolean}
+ * @public
+ */
+ this.containsKey = function (key) {
+ var value = _items[_getSafeKey(_items, key)];
+ return _ValueContainer.isInstance(value)
+ || (_Bucket.isInstance(value) && !!value.find(key));
+ };
+
+ /**
+ * Associates the specified value with the specified key in this map
+ *
+ * @param key
+ * @param value
+ * @return {boolean}
+ * Previous value associated with specified key,
+ * or <code>undefined</code> if there was no mapping for <var>key</var>.
+ * An <code>undefined</code> return can also indicate that the Map
+ * previously associated <code>undefined</code> with the specified key.
+ * @throws jsx.map#KeyError
+ * @public
+ */
+ this.put = function (key, value) {
+ var k = _getSafeKey(_items, key);
+ var v;
+ var prevValue = _items[k];
+
+ if (_isObjectRef(key))
+ {
+ var bucket = prevValue;
+ if (_Bucket.isInstance(bucket))
+ {
+ if (!bucket.find(key))
+ {
+ ++_size;
+ }
+ }
+ else
+ {
+ bucket = new _Bucket();
+ ++_size;
+ }
+
+ bucket.put(key, value);
+ v = bucket;
+ }
+ else
+ {
+ v = new _ValueContainer(value);
+ if (!prevValue)
+ {
+ ++_size;
+ }
+ }
+
+ _items[k] = v;
+
+ return prevValue && prevValue.getValue();
+ };
+
+ /**
+ * Removes the mapping for the specified key from this map if present
+ *
+ * @param key
+ * Key whose mapping is to be removed from the map
+ * @return {any}
+ * The previous value associated with <var>key</var>,_value
+ * or <code>undefined</code> if there was no mapping for <var>key</var>.
+ * (An <code>undefined</code> return can also indicate that the map
+ * previously associated <code>undefined</code> with <var>key</var>.)
+ * @throws jsx.map#KeyError
+ * @public
+ */
+ this.remove = function (key) {
+ var k = _getSafeKey(_items, key);
+ var prevValue = _items[k];
+
+ if (prevValue)
+ {
+ if (_isObjectRef(key))
+ {
+ if (_Bucket.isInstance(prevValue))
+ {
+ var prevValue = prevValue.remove(key);
+ if (_ValueContainer.isInstance(prevValue))
+ {
+ --_size;
+ return prevValue.getValue();
+ }
+
+ return prevValue;
+ }
+
+ return void 0;
+ }
+
+ delete _items[k];
+ --_size;
+ return prevValue && prevValue.getValue();
+ }
+
+ return prevValue;
+ };
+
+ /**
+ * Removes all of the mappings from this map.
+ * The map will be empty after this call returns.
+ *
+ * @public
+ */
+ this.clear = function () {
+ _items = _getDataObject();
+ _size = 0;
+ };
+
+ /**
+ * Returns <code>true</code> if this map maps one or more keys to the specified value.
+ *
+ * @param value
+ * Value whose presence in this map is to be tested
+ * @return {boolean}
+ * <code>true</code> if this map maps one or more keys
+ * to the specified value
+ * @public
+ */
+ this.containsValue = function (value) {
+ for (var p in _items)
+ {
+ var o = _items[p];
+
+ if (_ValueContainer.isInstance(o) && o.getValue() === value)
+ {
+ return true;
+ }
+
+ if (_Bucket.isInstance(o) && o.containsValue(value))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ /**
+ * Returns a list of the keys contained in this map
+ *
+ * @return {Array}
+ * @public
+ */
+ this.keys = function () {
+ var a = [];
+
+ for (var p in _items)
+ {
+ var o = _items[p];
+ if (_ValueContainer.isInstance(o))
+ {
+ a.push(p);
+ }
+ else if (_Bucket.isInstance(o))
+ {
+ a.push.apply(a, o.keys());
+ }
+ }
+
+ return a;
+ };
+
+ /**
+ * Returns a list of the values contained in this map
+ *
+ * @return {Array}
+ * @public
+ */
+ this.values = function () {
+ var a = [];
+
+ for (var p in _items)
+ {
+ var o = _items[p];
+
+ if (_ValueContainer.isInstance(o))
+ {
+ a.push(o.getValue());
+ }
+ else if (_Bucket.isInstance(o))
+ {
+ a.push.apply(a, o.values());
+ }
+ }
+
+ return a;
+ };
+
+ /**
+ * Returns a list of the mappings contained in this map
+ * as an {@link Array} of Arrays of key-value pairs.
+ * The inner Arrays consist of two elements each, the key
+ * and its associated value.
+ *
+ * @return {Array}
+ * @public
+ */
+ this.mappings = function () {
+ var a = [];
+
+ for (var p in _items)
+ {
+ var o = _items[p];
+
+ if (_ValueContainer.isInstance(o))
+ {
+ a.push([p, o.getValue()]);
+ }
+ else if (_Bucket.isInstance(o))
+ {
+ var bucketMappings = o.mappings();
+ for (var i = 0, len = bucketMappings.length; i < len; ++i)
+ {
+ a.push(a, bucketMappings[i]);
+ }
+ }
+ }
+
+ return a;
+ };
+
+ /**
+ * Destructs the map so that all closures are released.
+ *
+ * @public
+ */
+ this.destruct = function () {
+ _items = null;
+ };
+
+ if (arguments.length > 0)
+ {
+ this.putAll(map);
+ }
+ }
+
+ return _Map;
+ }()
+ ).extend(null, {
+ /**
+ * Returns a shallow copy of this map
+ *
+ * @memberOf jsx.map.Map.prototype
+ * @return {jsx.map.Map}
+ * @public
+ */
+ clone: function () {
+ return new this.constructor(this);
+ },
+
+ /**
+ * Copies all of the mappings from the specified map to this map.
+ * These mappings will replace any mappings that this map had
+ * for any of the keys currently in the specified map.
+ *
+ * @param {jsx.map.Map} map
+ * @public
+ */
+ putAll: function (map) {
+ if (!this.constructor.isInstance(map))
+ {
+ jsx.throwThis("jsx.InvalidArgumentError");
+ }
+
+ this.setMaxAliasLength(map.getMaxAliasLength());
+
+ for (var a = map.mappings(), i = a.length; i--;)
+ {
+ var o = a[i];
+
+ this.put(o[0], o[1]);
+ }
+ }
+ }), {
+ /**
+ * Returns <code>true</code> if the argument is a {@link jsx.map#Map Map}
+ *
+ * @memberOf jsx.map.Map
+ * @param {Object} o
+ * @return {boolean}
+ */
+ isInstance: function (o) {
+ return !!o && o.constructor === this;
+ }
+ }),
+
+ KeyError: (
+ function (key) {
+ jsx.object.PropertyError.call(this);
+ this.message = "No such key: " + key;
+ }
+ ).extend(jsx.object.PropertyError, {
+ name: "jsx.map.KeyError"
+ }),
+
+ InvalidLengthError: (
+ function () {
+ jsx.object.PropertyError.call(this, "InvalidLengthError");
+ }
+ ).extend(jsx.object.PropertyError)
+};
\ No newline at end of file
/live/map.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: live/UnicodeData.txt
===================================================================
--- live/UnicodeData.txt (nonexistent)
+++ live/UnicodeData.txt (revision 509)
@@ -0,0 +1,24429 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Lo;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
+0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
+0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
+0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
+0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
+0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
+0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
+0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
+0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
+0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
+0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
+0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
+024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
+024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
+024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
+024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
+024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
+024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
+02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
+02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
+02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
+02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
+02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
+0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
+0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
+0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
+035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
+035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
+0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
+0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
+0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
+0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
+0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
+0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
+036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
+036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
+036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
+036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
+036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
+036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
+0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;
+0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370
+0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;
+0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372
+0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;;
+0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;
+0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
+037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
+037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF
+03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9;
+03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
+03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
+03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
+03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
+03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
+03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
+03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
+03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
+048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
+04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
+04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
+04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
+04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
+04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
+04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
+04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
+04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
+04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
+0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
+0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
+0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
+0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
+0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
+0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
+0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
+0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
+0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
+0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
+050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
+050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
+050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
+050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
+050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
+050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
+0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
+0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
+0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
+0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
+0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;
+0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514
+0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;
+0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516
+0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;
+0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518
+051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;
+051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A
+051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;
+051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C
+051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;
+051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E
+0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;
+0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520
+0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;
+0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522
+0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525;
+0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524
+0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527;
+0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;;
+05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
+0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;;
+0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
+0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
+0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
+0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;
+0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;
+0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;
+0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;
+061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
+065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
+072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
+072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
+074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
+074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;
+076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
+0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
+077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
+077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
+077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;
+077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
+07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
+07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
+07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
+07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
+07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
+07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
+07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
+07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
+07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
+07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
+07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
+07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
+07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
+07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
+07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
+07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
+07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
+07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
+07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
+07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
+07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
+07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
+07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
+07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
+07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
+07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
+07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
+07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
+07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
+07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
+07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
+07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
+07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
+07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
+07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
+07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;;
+0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;;
+0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;;
+0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;;
+0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;;
+0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;;
+0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;;
+0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;;
+0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;;
+0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;;
+080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;;
+080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;;
+080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;;
+080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;;
+080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;;
+0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;;
+0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;;
+0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;;
+0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;;
+0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;;
+0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;;
+0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;;
+0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;;
+0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;;
+0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;;
+081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;;
+081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;;
+081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;;
+081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;;
+081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;;
+081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;;
+0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;;
+0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;;
+0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;;
+0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;;
+0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;;
+0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;;
+0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;;
+0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;;
+0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;;
+0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;;
+082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;;
+082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;;
+082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;;
+0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;;
+0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;;
+0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;;
+0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;;
+0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;;
+0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;;
+0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;;
+0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;;
+0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;;
+0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;;
+083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;;
+083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;;
+083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;;
+083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;;
+083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;;
+0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;;
+0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;;
+0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;;
+0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;;
+0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;;
+0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;;
+0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;;
+0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;;
+0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;;
+0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;;
+084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;;
+084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;;
+084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;;
+084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;;
+084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;;
+084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;;
+0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;;
+0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;;
+0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;;
+0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;;
+0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;;
+0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;;
+0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;;
+0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;;
+0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;;
+0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;;
+085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;;
+085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;;
+08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;;
+08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;;
+08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;;
+08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;;
+08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;
+08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;
+08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;;
+08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;;
+08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;;
+08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;;
+08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;;
+08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;;
+08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;;
+08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;;
+08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;;
+08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;;
+08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;;
+0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
+094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;;
+0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;
+0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;
+0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;;
+0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;;
+0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;;
+0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;;
+0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;;
+0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;;
+097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;;
+097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
+097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
+0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;
+0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
+0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
+0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
+0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;;
+0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;
+0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
+0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
+0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
+0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;
+0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
+0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
+0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;;
+0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;;
+0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;;
+0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;
+0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;;
+0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;;
+0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;;
+0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;;
+0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;;
+0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;;
+0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;;
+0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;;
+0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;
+0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;
+0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;
+0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;
+0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;
+0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;;
+0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;
+1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;
+1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;
+103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
+103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
+103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;
+103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;
+105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;
+105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;
+105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;
+105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;
+105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;
+1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;
+1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
+1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
+1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
+1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;
+1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;
+1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
+1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
+1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
+106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
+106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
+106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
+106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
+106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;
+106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;
+1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;
+1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;
+1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;
+1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;
+1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;
+1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;
+1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;
+1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;
+1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;
+1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;
+107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;
+107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;
+107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;
+107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;
+107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;
+107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;
+1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;
+1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;
+1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
+1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
+1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
+1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;
+1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;
+1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
+1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
+1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
+108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
+108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
+108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
+108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;
+108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;
+108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
+1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;;
+109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;;
+109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;;
+109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;;
+109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;
+109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;
+10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
+10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
+10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
+10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
+10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
+10FD;GEORGIAN LETTER AEN;Lo;0;L;;;;;N;;;;;
+10FE;GEORGIAN LETTER HARD SIGN;Lo;0;L;;;;;N;;;;;
+10FF;GEORGIAN LETTER LABIAL SIGN;Lo;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;;
+115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;
+115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;
+115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;;
+11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;;
+11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;;
+11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;;
+11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;;
+11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;;
+11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;
+11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
+135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;;
+1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;;
+1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;;
+167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;;
+167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;;
+167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;;
+167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;;
+167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;;
+167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;;
+16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;;
+16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;;
+1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
+1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
+1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
+1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
+1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
+1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
+1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
+1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
+1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
+1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
+170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
+170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
+170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
+170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
+1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
+1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
+1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
+1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
+1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
+1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
+1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
+1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
+1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
+1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
+1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
+172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
+172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
+172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
+172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
+172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
+172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
+1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
+1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
+1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
+1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
+1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
+1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
+1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
+1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
+1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
+1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
+1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
+1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
+174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
+174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
+174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
+174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
+174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
+174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
+1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
+1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
+1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
+1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
+1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
+1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
+1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
+1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
+1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
+1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
+176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
+176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
+176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
+176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
+176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
+1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
+1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
+17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
+17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
+17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
+17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
+17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
+17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
+17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
+17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
+17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
+17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;
+18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;;
+18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;;
+18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;;
+18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;;
+18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;;
+18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;;
+18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;;
+18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;;
+18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;;
+18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;;
+18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;;
+18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;;
+18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;;
+18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;;
+18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;;
+18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;;
+18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;;
+18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;;
+18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;;
+18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;;
+18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;;
+18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;;
+18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;;
+18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;;
+18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;;
+18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;;
+18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;;
+18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;;
+18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;;
+18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;;
+18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;;
+18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;;
+18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;;
+18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;;
+18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;;
+18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;;
+18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;;
+18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;;
+18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;;
+18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;;
+18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;;
+18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;;
+18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;;
+18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;;
+18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;;
+18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;;
+18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;;
+18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;;
+18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;;
+18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;;
+18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;;
+18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;;
+18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;;
+18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;;
+18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;;
+18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;;
+18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;;
+18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;;
+18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;;
+18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;;
+18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;;
+18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;;
+18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;;
+18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;;
+18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;;
+18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;;
+18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;;
+18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;;
+18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;;
+18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;;
+1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
+1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
+1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
+1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
+1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
+1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
+1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
+1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
+1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
+190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
+190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
+190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
+190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
+190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
+190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
+1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
+1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
+1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
+1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
+1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
+1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
+1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
+1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
+1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
+1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
+191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
+191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
+191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
+1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
+1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
+1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
+1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
+1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
+1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
+1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
+1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
+1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
+1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
+193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
+193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
+1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
+1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
+1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
+1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
+1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
+1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
+1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
+1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
+1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
+1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
+1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
+195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
+195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
+195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
+195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
+195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
+195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
+1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
+1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
+1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
+1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
+1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
+1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
+1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
+1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
+196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
+196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
+196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
+196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
+1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
+1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
+1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
+1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
+1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;;
+19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;;
+19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
+19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
+19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
+19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
+19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
+19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
+19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
+19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
+19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
+19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
+19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
+19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
+19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
+19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
+19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
+19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
+19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
+19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
+19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
+19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
+19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
+19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
+19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
+19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
+19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
+19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
+19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
+19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
+19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
+19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
+19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
+19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
+1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;;
+1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;;
+1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;;
+1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;;
+1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;;
+1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;;
+1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;;
+1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;;
+1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;;
+1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;;
+1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;;
+1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;;
+1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;;
+1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;;
+1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;;
+1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;;
+1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;;
+1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;;
+1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;;
+1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;;
+1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;;
+1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;;
+1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;;
+1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;;
+1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;;
+1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;;
+1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;;
+1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;;
+1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;;
+1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;;
+1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;;
+1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
+1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
+1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
+1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;;
+1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;;
+1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;;
+1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;;
+1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;;
+1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;;
+1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;;
+1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;;
+1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;;
+1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;;
+1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
+1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;
+1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;;
+1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;;
+1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;;
+1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;;
+1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;;
+1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;;
+1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;;
+1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;;
+1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;;
+1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;;
+1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;;
+1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;;
+1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;;
+1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;;
+1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;;
+1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;;
+1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;;
+1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;;
+1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;;
+1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;;
+1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;;
+1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;;
+1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;;
+1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;;
+1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;;
+1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;;
+1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;;
+1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
+1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
+1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
+1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;;
+1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;;
+1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;;
+1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;;
+1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;;
+1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;;
+1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;;
+1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;;
+1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;;
+1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;;
+1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;;
+1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;;
+1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;;
+1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;;
+1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;;
+1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;;
+1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;;
+1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;;
+1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;;
+1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;;
+1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;;
+1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;;
+1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;;
+1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;;
+1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;;
+1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;;
+1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;;
+1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;;
+1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;;
+1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;;
+1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;;
+1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;;
+1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;
+1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;;
+1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;;
+1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;;
+1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;;
+1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;;
+1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
+1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;;
+1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;;
+1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;;
+1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;
+1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;;
+1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;;
+1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
+1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
+1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
+1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
+1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
+1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
+1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;;
+1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;;
+1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;;
+1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;;
+1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;;
+1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;;
+1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;;
+1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
+1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
+1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
+1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
+1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
+1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
+1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
+1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
+1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
+1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
+1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
+1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
+1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
+1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
+1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
+1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
+1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
+1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
+1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
+1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
+1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
+1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
+1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
+1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
+1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
+1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
+1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
+1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;
+1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;
+1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;
+1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;
+1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;
+1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;
+1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;
+1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;
+1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;
+1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;
+1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;
+1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
+1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;
+1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;
+1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;
+1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;
+1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
+1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
+1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
+1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
+1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
+1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mc;0;L;;;;;N;;;;;
+1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mc;0;L;;;;;N;;;;;
+1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
+1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;;
+1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;;
+1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;;
+1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;;
+1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;;
+1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;;
+1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;;
+1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;;
+1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;;
+1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;;
+1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;;
+1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;;
+1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;;
+1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;;
+1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;;
+1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;;
+1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;;
+1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;;
+1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;;
+1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;;
+1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;;
+1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;;
+1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;;
+1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;;
+1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;;
+1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;;
+1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;;
+1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;;
+1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;;
+1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;;
+1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;;
+1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;;
+1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;;
+1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;;
+1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;;
+1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;;
+1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;;
+1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;;
+1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;;
+1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;;
+1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;;
+1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;;
+1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;;
+1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;;
+1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;;
+1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;;
+1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;;
+1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;;
+1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;;
+1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;;
+1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;;
+1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;;
+1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;;
+1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;;
+1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;
+1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;
+1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;
+1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;
+1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;
+1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;
+1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;
+1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;
+1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;
+1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;
+1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;
+1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;
+1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;
+1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;
+1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;
+1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;
+1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;
+1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;
+1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;
+1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;
+1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;
+1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;
+1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;
+1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;
+1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;
+1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;
+1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;
+1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;
+1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;
+1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;
+1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;
+1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;
+1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;
+1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
+1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
+1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
+1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
+1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;
+1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;
+1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
+1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
+1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;
+1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;
+1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;
+1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;
+1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;
+1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;
+1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;
+1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;
+1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;
+1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;
+1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;
+1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;
+1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;
+1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;
+1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;
+1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;
+1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;
+1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;
+1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;
+1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;
+1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;
+1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;
+1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;
+1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;
+1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;
+1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;
+1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;
+1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;
+1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;
+1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;
+1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;
+1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;
+1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;
+1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;
+1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;
+1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;
+1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;
+1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
+1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;
+1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;
+1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
+1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
+1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
+1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
+1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
+1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
+1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;;
+1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;;
+1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;;
+1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;;
+1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;;
+1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;;
+1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;;
+1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;;
+1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;;
+1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;;
+1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;
+1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;;
+1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;;
+1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;;
+1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;;
+1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;;
+1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;
+1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;
+1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;
+1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;;
+1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;;
+1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;;
+1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
+1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;;
+1CF2;VEDIC SIGN ARDHAVISARGA;Mc;0;L;;;;;N;;;;;
+1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Mc;0;L;;;;;N;;;;;
+1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;;
+1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
+1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
+1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
+1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
+1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
+1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
+1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
+1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
+1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
+1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
+1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
+1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
+1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
+1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
+1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
+1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
+1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
+1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
+1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
+1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
+1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
+1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
+1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
+1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
+1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
+1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
+1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
+1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
+1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
+1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
+1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
+1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
+1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
+1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
+1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
+1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
+1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
+1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
+1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
+1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
+1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
+1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
+1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
+1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
+1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
+1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
+1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
+1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
+1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
+1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
+1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
+1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
+1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
+1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
+1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
+1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
+1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
+1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
+1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
+1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
+1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
+1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
+1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
+1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
+1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
+1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
+1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
+1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
+1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
+1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
+1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
+1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
+1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
+1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
+1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
+1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
+1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
+1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
+1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
+1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
+1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
+1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
+1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
+1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
+1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
+1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
+1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
+1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
+1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
+1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
+1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
+1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
+1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
+1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
+1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L;<sub> 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L;<sub> 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L;<sub> 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L;<sub> 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L;<sub> 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L;<sub> 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L;<sub> 03C7;;;;N;;;;;
+1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
+1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
+1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;
+1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;
+1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;
+1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;
+1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;
+1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;
+1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;
+1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;
+1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;
+1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;
+1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;
+1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;
+1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;
+1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;
+1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;
+1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;
+1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;
+1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;
+1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;
+1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;
+1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;
+1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;
+1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;
+1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;
+1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;
+1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;
+1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
+1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;
+1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA
+1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;
+1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC
+1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;
+1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
+204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
+2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
+2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
+2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
+205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
+2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
+2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
+2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
+2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L;<super> 0069;;;;N;;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
+2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L;<sub> 0068;;;;N;;;;;
+2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L;<sub> 006B;;;;N;;;;;
+2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L;<sub> 006C;;;;N;;;;;
+2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L;<sub> 006D;;;;N;;;;;
+2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L;<sub> 006E;;;;N;;;;;
+209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L;<sub> 0070;;;;N;;;;;
+209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L;<sub> 0073;;;;N;;;;;
+209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L;<sub> 0074;;;;N;;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
+20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
+20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;;
+20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;;
+20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;;
+20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
+20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
+20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
+20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
+2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
+2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
+2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
+214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
+214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
+214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
+214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;
+2150;VULGAR FRACTION ONE SEVENTH;No;0;ON;<fraction> 0031 2044 0037;;;1/7;N;;;;;
+2151;VULGAR FRACTION ONE NINTH;No;0;ON;<fraction> 0031 2044 0039;;;1/9;N;;;;;
+2152;VULGAR FRACTION ONE TENTH;No;0;ON;<fraction> 0031 2044 0031 0030;;;1/10;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
+2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
+2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;
+2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;
+2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
+2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
+2189;VULGAR FRACTION ZERO THIRDS;No;0;ON;<fraction> 0030 2044 0033;;;0;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
+22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
+23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
+23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
+23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
+23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
+23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
+23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
+23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
+23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
+23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
+23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
+23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
+23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
+23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
+23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
+23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
+23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
+23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;;
+23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;;
+23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;;
+23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;;
+23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;
+23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;
+23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
+23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
+23E5;FLATNESS;So;0;ON;;;;;N;;;;;
+23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
+23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
+23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;;
+23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;
+23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;
+23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;;
+23F1;STOPWATCH;So;0;ON;;;;;N;;;;;
+23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;;
+23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
+24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
+24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
+24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
+24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
+24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
+24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
+24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
+24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
+24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
+24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
+24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
+24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
+24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
+24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
+24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
+24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
+24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
+24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
+24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
+2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
+2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
+2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
+259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
+2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
+2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;;
+2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;;
+2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;;
+2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;;
+2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;;
+2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;;
+2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;;
+267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
+267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
+2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
+2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
+2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
+2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
+2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
+2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
+2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
+2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
+2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
+268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
+268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
+268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
+268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
+268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
+268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
+2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
+2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
+269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;;
+269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;;
+26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
+26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
+26B2;NEUTER;So;0;ON;;;;;N;;;;;
+26B3;CERES;So;0;ON;;;;;N;;;;;
+26B4;PALLAS;So;0;ON;;;;;N;;;;;
+26B5;JUNO;So;0;ON;;;;;N;;;;;
+26B6;VESTA;So;0;ON;;;;;N;;;;;
+26B7;CHIRON;So;0;ON;;;;;N;;;;;
+26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;
+26B9;SEXTILE;So;0;ON;;;;;N;;;;;
+26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;
+26BB;QUINCUNX;So;0;ON;;;;;N;;;;;
+26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;
+26BD;SOCCER BALL;So;0;ON;;;;;N;;;;;
+26BE;BASEBALL;So;0;ON;;;;;N;;;;;
+26BF;SQUARED KEY;So;0;ON;;;;;N;;;;;
+26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
+26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;
+26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;;
+26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;;
+26C6;RAIN;So;0;ON;;;;;N;;;;;
+26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;;
+26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;;
+26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;;
+26CC;CROSSING LANES;So;0;ON;;;;;N;;;;;
+26CD;DISABLED CAR;So;0;ON;;;;;N;;;;;
+26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;;
+26CF;PICK;So;0;ON;;;;;N;;;;;
+26D0;CAR SLIDING;So;0;ON;;;;;N;;;;;
+26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;;
+26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;;
+26D3;CHAINS;So;0;ON;;;;;N;;;;;
+26D4;NO ENTRY;So;0;ON;;;;;N;;;;;
+26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;
+26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;;
+26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;;
+26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;;
+26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;
+26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;;
+26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;;
+26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;;
+26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;;
+26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;;
+26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;;
+26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;;
+26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;;
+26E4;PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;;
+26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;;
+26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;;
+26EA;CHURCH;So;0;ON;;;;;N;;;;;
+26EB;CASTLE;So;0;ON;;;;;N;;;;;
+26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;;
+26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;;
+26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;;
+26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;;
+26F0;MOUNTAIN;So;0;ON;;;;;N;;;;;
+26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;;
+26F2;FOUNTAIN;So;0;ON;;;;;N;;;;;
+26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;;
+26F4;FERRY;So;0;ON;;;;;N;;;;;
+26F5;SAILBOAT;So;0;ON;;;;;N;;;;;
+26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;;
+26F7;SKIER;So;0;ON;;;;;N;;;;;
+26F8;ICE SKATE;So;0;ON;;;;;N;;;;;
+26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;;
+26FA;TENT;So;0;ON;;;;;N;;;;;
+26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;;
+26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;;
+26FD;FUEL PUMP;So;0;ON;;;;;N;;;;;
+26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;;
+26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270A;RAISED FIST;So;0;ON;;;;;N;;;;;
+270B;RAISED HAND;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2728;SPARKLES;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274C;CROSS MARK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;;
+2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;;
+2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B0;CURLY LOOP;So;0;ON;;;;;N;;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
+27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
+27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
+27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
+27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
+27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
+27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
+27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
+27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
+27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
+27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
+27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
+27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
+27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
+27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
+2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
+2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
+2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
+2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
+2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
+293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
+293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
+2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
+297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
+2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
+2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
+2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
+2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
+2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
+2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
+2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
+2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
+298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
+298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
+298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
+298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
+298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
+298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
+2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
+2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
+2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
+2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
+299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
+299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
+299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
+299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
+299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
+29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
+29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
+29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
+29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
+29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
+29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
+29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
+29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
+29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
+29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
+29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
+29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
+29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
+29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
+29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
+29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
+29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
+29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
+29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
+29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
+29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
+29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
+29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
+29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
+29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
+29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+29FE;TINY;Sm;0;ON;;;;;N;;;;;
+29FF;MINY;Sm;0;ON;;;;;N;;;;;
+2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
+2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
+2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
+2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
+2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
+2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
+2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
+2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
+2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
+2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
+2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
+2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
+2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
+2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
+2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
+2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
+2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
+2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
+2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
+2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
+2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
+2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
+2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
+2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
+2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
+2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
+2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
+2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
+2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
+2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
+2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
+2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
+2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
+2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
+2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
+2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
+2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
+2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;;
+2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;;
+2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
+2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
+2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
+2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
+2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
+2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
+2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
+2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
+2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;
+2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
+2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;
+2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
+2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
+2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
+2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
+2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;
+2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
+2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;
+2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;
+2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;
+2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
+2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;
+2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;
+2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;
+2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
+2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;;
+2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;;
+2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;;
+2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
+2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
+2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
+2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
+2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
+2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
+2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
+2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
+2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
+2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
+2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
+2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
+2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
+2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;
+2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;
+2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;
+2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252;
+2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;
+2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;
+2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72
+2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
+2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
+2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
+2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
+2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;
+2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
+2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
+2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
+2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L;<sub> 006A;;;;N;;;;;
+2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;
+2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F;
+2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240;
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC;
+2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB
+2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE;
+2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED
+2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;;
+2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;;
+2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;;
+2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3;
+2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5
+2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7
+2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;;
+2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;;;;
+2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;;
+2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;
+2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;
+2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;
+2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;
+2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;
+2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;
+2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;
+2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;
+2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;
+2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;
+2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;
+2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;
+2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;
+2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;
+2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;
+2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;
+2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;
+2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;
+2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
+2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;
+2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
+2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;
+2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;
+2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;
+2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;
+2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;
+2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;
+2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
+2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;
+2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;
+2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;
+2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;
+2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;
+2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;
+2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;
+2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;
+2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;
+2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;
+2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;
+2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;
+2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
+2E30;RING POINT;Po;0;ON;;;;;N;;;;;
+2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;;
+2E33;RAISED DOT;Po;0;ON;;;;;N;;;;;
+2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;;
+2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;;
+2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;;
+2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;;
+2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;;
+2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;;
+2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+303C;MASU MARK;Lo;0;L;;;;;N;;;;;
+303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
+30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;;
+31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;;
+31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;;
+31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
+31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
+31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
+31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;
+31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;
+31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;
+31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;
+31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;
+31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;
+31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;
+31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;
+31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;
+31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;
+31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;
+31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;
+31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;
+31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;
+31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;
+31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;
+31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;
+31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;
+31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;
+31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;
+31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
+31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
+31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
+31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
+31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
+31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
+31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
+31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
+31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
+31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
+31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
+31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
+31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
+31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
+31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
+31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
+321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3244;CIRCLED IDEOGRAPH QUESTION;So;0;L;<circle> 554F;;;;N;;;;;
+3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L;<circle> 5E7C;;;;N;;;;;
+3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L;<circle> 6587;;;;N;;;;;
+3247;CIRCLED IDEOGRAPH KOTO;So;0;L;<circle> 7B8F;;;;N;;;;;
+3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;;
+3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;;
+324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;;
+324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;;
+324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;;
+324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;;
+324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;;
+324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;;
+3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
+3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
+3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
+3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
+3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
+3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
+3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
+3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
+3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
+3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
+325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
+325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
+325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
+325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
+325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
+325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
+327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
+32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
+32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
+32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
+32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
+32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
+32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
+32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
+32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
+32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
+32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
+32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
+32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
+32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
+32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
+32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
+32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
+32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
+3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
+3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
+337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
+33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
+4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
+4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
+4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
+4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
+4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
+4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
+4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
+4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
+4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
+4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
+4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
+4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
+4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
+4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
+4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
+4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
+4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
+4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
+4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
+4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
+4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
+4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
+4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
+4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
+4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
+4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
+4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
+4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
+4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
+4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
+4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
+4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
+4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
+4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
+4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
+4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
+4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
+4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
+4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
+4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
+4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
+4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
+4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
+4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
+4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
+4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
+4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
+4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
+4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
+4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
+4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
+4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
+4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
+4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
+4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
+4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
+4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FCC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
+A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;;
+A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;;
+A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;;
+A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;;
+A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;;
+A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;;
+A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;;
+A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;;
+A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;;
+A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;;
+A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;;
+A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;;
+A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;;
+A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;;
+A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;;
+A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;;
+A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;;
+A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;;
+A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;;
+A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;;
+A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;;
+A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;;
+A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;;
+A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;;
+A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;;
+A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;;
+A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;;
+A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;;
+A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;;
+A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;;
+A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;;
+A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;;
+A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;;
+A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;;
+A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;;
+A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;;
+A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;;
+A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;;
+A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;;
+A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;;
+A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;;
+A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;;
+A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;;
+A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;;
+A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;;
+A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;;
+A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;
+A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;
+A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;
+A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;
+A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;
+A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;
+A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;
+A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;
+A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;
+A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;
+A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;
+A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;
+A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;
+A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;
+A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;
+A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;
+A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;
+A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;
+A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;
+A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;
+A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;
+A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;
+A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;
+A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;
+A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;
+A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;
+A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;
+A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;
+A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;
+A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;
+A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;
+A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;
+A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;
+A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;
+A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;
+A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;
+A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;
+A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;
+A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;
+A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;
+A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;
+A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;
+A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;
+A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;
+A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;
+A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;
+A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;
+A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;
+A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;
+A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;
+A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;
+A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;
+A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;
+A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;
+A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;
+A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;
+A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;
+A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;
+A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;
+A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;
+A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;
+A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;
+A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;
+A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;
+A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;
+A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;
+A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;
+A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;
+A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;
+A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;
+A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;
+A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;
+A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;
+A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;
+A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;
+A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;
+A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;
+A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;
+A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;
+A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;
+A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;
+A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;
+A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;
+A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;
+A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;
+A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;
+A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;
+A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;
+A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;
+A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;
+A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;
+A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;
+A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;
+A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;
+A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;
+A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;
+A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;
+A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;
+A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;
+A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;
+A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;
+A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;
+A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;
+A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;
+A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;
+A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;
+A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;
+A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;
+A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;
+A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;
+A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;
+A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;
+A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;
+A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;
+A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;
+A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;
+A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;
+A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;
+A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
+A60D;VAI COMMA;Po;0;ON;;;;;N;;;;;
+A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;
+A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;
+A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;
+A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;
+A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;
+A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;
+A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;
+A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;
+A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;
+A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;
+A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;
+A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;
+A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;
+A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;
+A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;
+A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;
+A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;
+A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;
+A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;
+A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;
+A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;
+A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640
+A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;
+A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642
+A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;
+A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644
+A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;
+A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646
+A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;
+A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648
+A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;
+A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A
+A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;
+A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C
+A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;
+A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E
+A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;
+A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650
+A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;
+A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652
+A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;
+A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654
+A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;
+A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656
+A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;
+A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658
+A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;
+A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A
+A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;
+A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C
+A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;
+A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E
+A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661;
+A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660
+A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;
+A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662
+A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;
+A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664
+A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;
+A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666
+A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;
+A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668
+A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;
+A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A
+A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;
+A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C
+A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;
+A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;
+A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
+A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;;
+A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;;
+A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;;
+A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;;
+A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;;
+A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;
+A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;;
+A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;;
+A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
+A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
+A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
+A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;
+A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;
+A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680
+A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;
+A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682
+A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;
+A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684
+A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;
+A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686
+A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;
+A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688
+A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;
+A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A
+A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;
+A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C
+A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;
+A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E
+A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;
+A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690
+A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;
+A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692
+A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
+A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
+A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
+A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
+A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;;
+A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;;
+A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;;
+A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;;
+A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;;
+A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;;
+A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;;
+A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;;
+A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;;
+A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;;
+A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;;
+A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;;
+A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;;
+A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;;
+A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;;
+A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;;
+A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;;
+A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;;
+A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;;
+A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;;
+A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;;
+A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;;
+A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;;
+A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;;
+A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;;
+A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;;
+A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;;
+A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;;
+A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;;
+A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;;
+A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;;
+A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;;
+A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;;
+A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;;
+A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;;
+A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;;
+A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;;
+A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;;
+A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;;
+A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;;
+A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;;
+A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;;
+A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;;
+A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;;
+A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;;
+A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;;
+A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;;
+A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;;
+A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;;
+A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;;
+A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;;
+A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;;
+A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;;
+A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;;
+A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;;
+A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;;
+A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;;
+A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;;
+A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;;
+A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;;
+A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;;
+A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;;
+A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;;
+A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;;
+A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;;
+A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;;
+A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;;
+A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;;
+A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;;
+A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;;
+A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;;
+A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;;
+A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;;
+A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;;
+A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;;
+A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;;
+A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;;
+A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;;
+A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;;
+A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;;
+A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;;
+A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;;
+A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;;
+A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;;
+A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;;
+A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;;
+A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;;
+A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;;
+A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;;
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
+A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
+A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
+A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
+A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;
+A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;
+A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
+A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
+A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
+A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;
+A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722
+A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;
+A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724
+A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;
+A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726
+A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;
+A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728
+A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;
+A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A
+A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;
+A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C
+A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;
+A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E
+A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;
+A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;
+A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;
+A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732
+A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;
+A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734
+A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;
+A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736
+A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;
+A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738
+A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;
+A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A
+A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;
+A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C
+A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;
+A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E
+A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;
+A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740
+A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;
+A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742
+A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;
+A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744
+A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;
+A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746
+A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;
+A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748
+A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;
+A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A
+A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;
+A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C
+A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;
+A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E
+A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;
+A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750
+A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;
+A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752
+A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;
+A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754
+A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;
+A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756
+A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;
+A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758
+A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;
+A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A
+A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;
+A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C
+A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;
+A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E
+A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;
+A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760
+A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;
+A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762
+A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;
+A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764
+A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;
+A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766
+A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;
+A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768
+A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;
+A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A
+A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;
+A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C
+A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;
+A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E
+A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;
+A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;
+A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;
+A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;
+A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;
+A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;
+A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;
+A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;
+A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;
+A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;
+A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779
+A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;
+A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B
+A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;
+A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;
+A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E
+A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;
+A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780
+A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;
+A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782
+A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;
+A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784
+A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;
+A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786
+A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;
+A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;
+A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;
+A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;
+A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
+A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;
+A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;;
+A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791;
+A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790
+A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;
+A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792
+A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1;
+A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0
+A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3;
+A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2
+A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5;
+A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4
+A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7;
+A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6
+A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9;
+A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8
+A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;
+A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
+A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
+A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;;
+A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
+A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
+A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;
+A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;
+A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
+A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
+A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
+A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
+A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
+A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
+A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;;
+A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;;
+A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;;
+A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
+A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
+A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
+A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
+A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
+A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
+A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
+A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
+A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
+A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
+A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
+A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
+A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
+A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
+A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
+A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
+A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
+A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
+A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
+A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
+A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
+A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
+A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
+A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
+A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
+A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
+A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
+A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
+A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
+A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
+A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
+A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
+A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
+A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
+A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
+A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
+A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
+A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
+A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
+A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
+A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;
+A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;
+A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;
+A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;
+A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;
+A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;
+A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;
+A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;
+A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;
+A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;
+A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;
+A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;
+A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;
+A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;
+A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;
+A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;
+A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;
+A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;
+A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;
+A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;
+A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;
+A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;
+A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;
+A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;
+A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;
+A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;
+A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;
+A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;
+A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;
+A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;
+A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;
+A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;
+A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;
+A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;
+A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;
+A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
+A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
+A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
+A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
+A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;;
+A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;;
+A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;;
+A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;;
+A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;;
+A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;;
+A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;;
+A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;;
+A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;;
+A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;;
+A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;;
+A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;;
+A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;;
+A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;;
+A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;;
+A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;;
+A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;;
+A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;;
+A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;
+A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;
+A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;;
+A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;;
+A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;;
+A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;;
+A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;;
+A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;;
+A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;
+A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;
+A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;
+A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;
+A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;
+A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;
+A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;
+A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;
+A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;
+A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;
+A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;
+A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;
+A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;
+A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;
+A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;
+A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;
+A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;
+A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;
+A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;
+A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;
+A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;
+A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;
+A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;
+A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;
+A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;
+A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;
+A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;
+A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;
+A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;
+A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;
+A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;
+A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;
+A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;
+A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;
+A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;
+A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;
+A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;
+A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;
+A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;
+A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;
+A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;
+A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;
+A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;
+A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;
+A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;
+A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;
+A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;
+A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;
+A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;
+A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;
+A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;
+A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;
+A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;
+A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;
+A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;
+A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;
+A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;
+A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;
+A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;
+A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;
+A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;
+A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
+A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;
+A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
+A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
+A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;
+A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;;
+A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;
+A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;
+A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;
+A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;
+A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;
+A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;
+A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;;
+A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;;
+A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;;
+A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;;
+A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;;
+A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;;
+A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;;
+A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;;
+A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;;
+A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;;
+A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;;
+A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;;
+A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;;
+A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;;
+A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;;
+A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;;
+A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;;
+A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;;
+A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;;
+A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;;
+A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;;
+A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;;
+A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;;
+A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;;
+A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;;
+A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;;
+A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;;
+A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;;
+A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;;
+A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;;
+A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;;
+A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;;
+A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;;
+A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;;
+A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;;
+A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;;
+A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;;
+A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;;
+A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;;
+A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;;
+A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;;
+A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;;
+A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;;
+A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;;
+A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;;
+A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;;
+A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;;
+A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;;
+A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;;
+A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;;
+A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;;
+A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;;
+A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;;
+A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;;
+A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;;
+A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;;
+A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;;
+A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;;
+A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;;
+A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;;
+A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;
+A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;;
+A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;
+A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;;
+A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;
+A9BD;JAVANESE CONSONANT SIGN KERET;Mc;0;L;;;;;N;;;;;
+A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;;
+A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;;
+A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;;
+A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;;
+A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;;
+A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;;
+A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;;
+A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;;
+A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;;
+A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;;
+A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;;
+A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;;
+A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;;
+A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;;
+A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;;
+A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;;
+A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;;
+A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;;
+A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;;
+AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;
+AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;
+AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;
+AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;
+AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;
+AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;
+AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;
+AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;
+AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;
+AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;
+AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;
+AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;
+AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;
+AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;
+AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;
+AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;
+AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;
+AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;
+AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;
+AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;
+AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;
+AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;
+AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;
+AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;
+AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;
+AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;
+AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;
+AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;
+AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;
+AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;
+AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;
+AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;
+AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
+AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
+AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;
+AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;
+AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;
+AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;
+AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;
+AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;
+AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;
+AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
+AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;
+AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;
+AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;
+AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;
+AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
+AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
+AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;
+AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;
+AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;;
+AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;;
+AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;;
+AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;;
+AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;;
+AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;;
+AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;;
+AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;;
+AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;;
+AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;;
+AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;;
+AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;;
+AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;;
+AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;;
+AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;;
+AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;;
+AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;;
+AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;;
+AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;;
+AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;;
+AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;;
+AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;;
+AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;;
+AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;;
+AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;;
+AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;;
+AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;;
+AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;;
+AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;;
+AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;;
+AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;;
+AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;;
+AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;;
+AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;;
+AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;;
+AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;;
+AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;;
+AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;;
+AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;;
+AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;;
+AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;;
+AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;;
+AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;;
+AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;;
+AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;;
+AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;;
+AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;;
+AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;;
+AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;;
+AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;;
+AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;;
+AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;;
+AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;;
+AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;;
+AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;;
+AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;;
+AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;;
+AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;;
+AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;;
+AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;;
+AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;;
+AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;;
+AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;;
+AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;;
+AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;;
+AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;;
+AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;;
+AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;;
+AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;;
+AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;;
+AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;;
+AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;;
+AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;;
+AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;;
+AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;;
+AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;;
+AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;;
+AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;;
+AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;;
+AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;;
+AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;;
+AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;;
+AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;;
+AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;;
+AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;;
+AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;;
+AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;;
+AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;;
+AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;;
+AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;;
+AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;;
+AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;;
+AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;;
+AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;;
+AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;;
+AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;;
+AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;;
+AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;;
+AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;;
+AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;;
+AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;;
+AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;;
+AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;;
+AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;;
+AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;;
+AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;;
+AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;;
+AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;;
+AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;;
+AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;;
+AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;;
+AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;;
+AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;;
+AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;;
+AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;;
+AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;;
+AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;;
+AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;;
+AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;;
+AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;;
+AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;;
+AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;;
+AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;;
+AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;;
+AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;;
+AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;;
+AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;;
+AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;;
+AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;;
+AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;;
+AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;;
+AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;;
+AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;;
+AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;;
+AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;;
+AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;;
+AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;;
+AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;;
+AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;;
+AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;;
+AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;;
+AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;;
+AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;;
+AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;;
+AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;;
+ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;;
+ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;;
+ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;;
+ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;;
+ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;;
+ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;;
+ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;;
+ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;;
+ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;;
+ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;;
+ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;;
+ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;;
+ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;;
+ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;;
+ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;;
+ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;;
+ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;;
+ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;;
+ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;;
+ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;;
+ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;;
+ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;;
+ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;;
+ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;;
+ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;;
+ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;;
+ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;;
+ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;;
+ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;;
+ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;;
+ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;;
+ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;;
+ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;;
+ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;;
+ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;;
+ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;;
+ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;;
+ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;;
+ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;;
+ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;;
+ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;;
+ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;;
+ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;;
+ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;;
+ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;;
+ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;;
+D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;;
+D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;;
+D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;;
+D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;;
+D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;;
+D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;;
+D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;;
+D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;;
+D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;;
+D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;;
+D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;;
+D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;;
+D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;;
+D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;;
+D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;;
+D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;;
+D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;;
+D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;;
+D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;;
+D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;;
+D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;;
+D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;;
+D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;;
+D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;
+D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;
+D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;
+D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;
+D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;;
+D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;
+D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;;
+D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;;
+D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;;
+D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;;
+D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;;
+D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;
+D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;;
+D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;;
+D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;;
+D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;;
+D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;;
+D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;
+D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;;
+D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;;
+FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;;
+FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
+FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
+FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
+FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
+FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
+FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
+FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
+FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
+FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
+FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
+FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
+FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
+FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
+FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
+FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
+FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
+FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
+FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
+FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
+FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
+FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
+FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
+FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
+FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
+FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
+FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
+FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
+FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
+FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
+FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
+FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
+FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
+FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
+FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
+FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
+FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
+FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
+FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
+FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
+FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
+FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
+FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
+FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
+FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
+FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
+FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
+FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
+FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
+FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
+FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
+FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
+FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
+FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
+FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
+FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
+FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
+FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
+FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
+FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;;
+FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;;
+FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;;
+FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;;
+FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;;
+FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;;
+FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;;
+FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;;
+FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;;
+FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;
+FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;
+FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;;;;
+FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
+10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
+10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
+10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
+10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
+10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
+10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
+10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
+10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
+10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
+1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
+1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
+1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
+1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
+1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
+10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
+10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
+10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
+10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
+10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
+10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
+10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
+10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
+10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
+10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
+1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
+1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
+1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
+1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
+1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
+1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
+10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
+10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
+10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
+10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
+10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
+10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
+10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
+10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
+10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
+1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
+1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
+1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
+1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
+1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
+1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
+10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
+10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
+10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
+10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
+10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
+10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
+10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
+10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
+10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
+10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
+1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
+1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
+1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
+1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
+10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
+10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
+10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
+10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
+10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
+10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
+10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
+10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
+10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
+10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
+1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
+1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
+1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
+1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
+10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
+10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
+10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
+10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
+10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
+10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
+10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
+10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
+10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
+10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
+1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
+1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
+1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
+1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
+10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
+10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
+10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
+10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
+10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
+10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
+10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
+10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
+10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
+10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
+1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
+1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
+1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
+1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
+1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
+1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
+10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
+10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
+10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
+10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
+10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
+10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
+10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
+10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
+10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
+10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
+1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
+1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
+1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
+1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
+1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
+1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
+100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
+100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
+100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
+100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
+100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
+100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
+100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
+100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
+100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
+100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
+100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
+100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
+100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
+100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
+100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
+100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
+100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
+100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
+100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
+100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
+100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
+100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
+100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
+100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
+100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
+100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
+100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
+100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
+100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
+100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
+100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
+100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
+100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
+100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
+100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
+100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
+100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
+100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
+100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
+100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
+100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
+100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;;
+100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
+100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;;
+100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
+100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
+100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
+100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
+100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
+100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
+100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
+100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
+100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
+100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
+100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
+100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
+100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
+100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
+100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
+100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
+100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
+100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
+100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
+100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
+100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
+100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
+100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
+100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
+100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
+100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
+100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
+100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
+100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
+100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
+100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
+100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
+100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
+100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
+100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
+100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
+100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
+100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
+100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
+100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
+100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
+100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
+100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
+100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
+100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
+100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
+100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
+10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
+10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;;
+10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
+10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
+10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
+1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
+1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
+1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
+1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
+10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
+10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
+10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
+10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
+1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
+1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
+1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
+1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
+1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
+10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
+10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
+10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
+10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
+10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
+10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
+10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
+10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
+10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
+1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
+1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
+1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
+1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
+1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
+10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
+10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
+10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
+10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
+10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
+10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
+1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
+10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
+10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
+10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
+10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;
+10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;
+10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;
+10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;
+10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;
+10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
+1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
+1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
+101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
+101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
+101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;
+101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;
+101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;
+101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;
+101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;
+101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;
+101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;
+101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;
+101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;
+101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;
+101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;
+101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;
+101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;
+101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;
+101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;
+101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;
+101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;
+101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;
+101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;
+101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;
+101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;
+101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;
+101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;
+101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;
+101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;
+101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;
+101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;
+101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;
+101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;
+101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;
+101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;
+101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;
+101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;
+101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;
+101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;
+101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;
+101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;
+101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;
+101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;
+101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;
+101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;
+101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;
+101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;
+101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;
+10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;
+10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;
+10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;
+10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;
+10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;
+10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;
+10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;
+10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;
+10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;
+10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;
+1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;
+1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;
+1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;
+1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;
+1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;
+10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;
+10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;
+10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;
+10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;
+10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;
+10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;
+10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;
+10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;
+1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;
+1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;
+1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;
+102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;
+102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;
+102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;
+102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;
+102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;
+102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;
+102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;
+102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;
+102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;
+102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;
+102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;
+102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;
+102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;
+102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;
+102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;
+102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;
+102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;
+102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;
+102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;
+102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;
+102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;
+102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;
+102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;
+102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;
+102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;
+102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;
+102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;
+102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;
+102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;
+102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;
+102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;
+102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;
+102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;
+102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;
+102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;
+102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;
+102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;
+102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;
+102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;
+102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;
+102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;
+102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;
+102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;
+102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;
+102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;
+102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;
+102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;
+102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;
+10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
+10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
+10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
+10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
+10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
+10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
+10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
+10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
+10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
+10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
+1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
+1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
+1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
+1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
+1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
+1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;;
+10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
+10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
+10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
+10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
+10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
+10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
+10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
+10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;;
+10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
+10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
+1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;;
+1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;;
+1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;;
+1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;;
+10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
+10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
+10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
+10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
+10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
+10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
+10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
+10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
+10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
+10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
+10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
+10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
+1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
+1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
+1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
+1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
+1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
+1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
+10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
+10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
+10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
+10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
+10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
+10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
+10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
+10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
+10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
+10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
+10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
+10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
+10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
+10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
+10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
+10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
+10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
+10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
+10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
+10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
+1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
+1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
+1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
+1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
+1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
+1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
+10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
+10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
+10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
+10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
+10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
+10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
+10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
+10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
+10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
+10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
+1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
+1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
+1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
+1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
+1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
+10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
+10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
+10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
+10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
+10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
+10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
+10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
+10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
+10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
+10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
+1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
+1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
+1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
+1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
+1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
+1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
+10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
+10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
+10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
+10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
+10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
+10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
+10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
+10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
+10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
+10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
+1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
+1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
+1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
+1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
+1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
+1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
+10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
+10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
+10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
+10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
+10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
+10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
+10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
+10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
+10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
+10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
+1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
+1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
+1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
+1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
+1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
+1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
+10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
+10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
+10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
+10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
+10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
+10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
+10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
+10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
+10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
+10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
+1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
+1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
+1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
+1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
+1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
+1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
+10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
+10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
+10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
+10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
+10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
+10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
+10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
+10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
+10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
+10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
+1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
+1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
+1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
+1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
+1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
+1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
+10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
+10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
+10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
+10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
+10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
+10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
+10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
+10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
+10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
+10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
+1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
+1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
+1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
+1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
+1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
+1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
+10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
+10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
+10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
+10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
+10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
+10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
+10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
+10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
+10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
+10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
+1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
+1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
+1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
+1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
+1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
+10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
+10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
+10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
+10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
+10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
+10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
+10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
+10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
+10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
+10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
+1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
+1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
+1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
+1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
+1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
+1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
+10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
+10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
+10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
+10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
+10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
+10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
+10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
+10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
+10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
+1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
+1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
+1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
+1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
+1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
+10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
+10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
+10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
+10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
+10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
+10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
+10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
+10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
+10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
+10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
+1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
+1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
+1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
+1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
+104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
+10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
+10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
+10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
+10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
+10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
+10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
+1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
+1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
+1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
+1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
+1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
+1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
+10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
+10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
+10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
+10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
+10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
+10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
+10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
+10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
+10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
+10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
+1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
+1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
+1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
+1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
+1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
+1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
+10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
+10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
+10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
+10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
+10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
+10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
+10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
+10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
+10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
+10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
+1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
+1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
+1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
+1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
+1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
+1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
+10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
+10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
+10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
+10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
+10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
+10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
+10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
+10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
+1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
+1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;
+10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;;
+10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;;
+10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;;
+10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;;
+10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;;
+1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;;
+1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;;
+1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;;
+1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;;
+10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;;
+10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;;
+10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;;
+10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;;
+10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;;
+1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;;
+1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;;
+1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;
+10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
+10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
+10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
+10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
+10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
+10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
+10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
+10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
+10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
+1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
+1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
+1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
+1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
+10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
+10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
+10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
+10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
+10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
+10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;
+10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;
+10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;
+10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;
+10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;
+10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;
+10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;
+10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;
+10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;
+10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;
+1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;
+1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;
+1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;
+1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;
+1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;
+1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;
+10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;
+10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;
+10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;
+10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;
+10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;
+10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;
+10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;
+10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;
+10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
+10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
+1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
+10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;;
+10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;;
+10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;;
+10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;;
+10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;;
+10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;;
+10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;;
+10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;;
+10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;;
+10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;;
+1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;;
+1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;;
+1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;;
+1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;;
+1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;;
+1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;;
+10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;;
+10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;;
+10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;;
+10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;;
+10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;;
+10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;;
+10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;;
+10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;;
+10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;;
+10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;;
+1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;;
+1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;;
+1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;;
+1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;;
+1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;;
+1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;;
+109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;;
+109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;;
+109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;;
+109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;;
+109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;;
+109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;;
+109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;;
+109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;;
+109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;;
+109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;;
+109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;;
+109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;;
+109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;;
+109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;;
+109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;;
+109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;;
+109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;;
+109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;;
+109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;;
+109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;;
+109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;;
+109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;;
+109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;;
+109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;;
+109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;;
+109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
+10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;;
+10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;;
+10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;;
+10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;;
+10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;;
+10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;;
+10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;;
+10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;
+10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;;
+10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;;
+10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;;
+10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;
+10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;;
+10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;;
+10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;;
+10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;;
+10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;;
+10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;;
+10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;;
+10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;;
+10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;;
+10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;;
+10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;;
+10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;;
+10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;;
+10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;;
+10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;;
+10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;;
+10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;;
+10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;;
+10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;;
+10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;;
+10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;;
+10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;;
+10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;;
+10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;;
+10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;;
+10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;;
+10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;;
+10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;;
+10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;;
+10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;;
+10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;;
+10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;;
+10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;;
+10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;;
+10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;;
+10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;;
+10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;;
+10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;;
+10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;;
+10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;;
+10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;;
+10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;;
+10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;;
+10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;;
+10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;;
+10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;;
+10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;;
+10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;;
+10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;;
+10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;;
+10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;;
+10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;;
+10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;;
+10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;;
+10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;;
+10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;;
+10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;
+10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;;
+10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;;
+10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;;
+10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;;
+10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;;
+10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;;
+10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;;
+10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;;
+10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;;
+10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;;
+10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;;
+10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;;
+10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;;
+10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;;
+10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;;
+10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;;
+10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;;
+10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;;
+10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;;
+10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;;
+10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;;
+10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;;
+10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;;
+10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;;
+10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;;
+10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;;
+10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;;
+10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;;
+10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;;
+10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;;
+10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;;
+10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;;
+10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;;
+10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;;
+10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;;
+10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;;
+10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;;
+10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;;
+10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;;
+10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;;
+10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;;
+10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;;
+10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;;
+10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;;
+10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;;
+10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;;
+10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;;
+10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;;
+10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;;
+10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;;
+10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;;
+10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;;
+10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;;
+10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;;
+10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;;
+10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;;
+10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;;
+10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;;
+10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;;
+10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;;
+10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;;
+10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;;
+10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;;
+10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;;
+10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;;
+10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;;
+10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;;
+10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;;
+10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;;
+10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;;
+10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;;
+10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;;
+10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;;
+10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;;
+10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;;
+10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;;
+10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;;
+10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;;
+10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;;
+10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;;
+10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;;
+10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;;
+10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;;
+10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;;
+10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;;
+10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;;
+10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;
+10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;
+10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;
+10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;;
+10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;;
+10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;;
+10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;;
+10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;;
+10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;;
+10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;;
+10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;;
+10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;;
+10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;;
+10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;;
+10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;;
+10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;;
+10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;;
+10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;;
+10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;;
+10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;;
+10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;;
+10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;;
+10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;;
+10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;;
+10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;;
+10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;;
+10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;;
+10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;;
+10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
+10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
+10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;;
+11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;;
+11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;;
+11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;;
+11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;;
+1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;;
+1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;;
+11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;;
+11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;;
+11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;;
+11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;;
+11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;;
+11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;;
+11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;;
+1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;;
+1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;;
+1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;;
+1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;;
+1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;;
+11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;;
+11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;;
+11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;;
+11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;;
+11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;;
+1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;;
+1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;;
+1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;;
+1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;;
+1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;;
+1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;;
+11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;;
+11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;;
+11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;;
+11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;;
+11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;;
+11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;;
+1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;;
+11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;;
+1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;;
+1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;;
+1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;;
+1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;;
+11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;;
+11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;;
+11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;;
+11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;;
+11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;;
+11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;;
+11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;;
+11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;;
+1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;;
+1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;;
+1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;;
+1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;;
+1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;;
+11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;;
+11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;;
+11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;;
+11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;;
+11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;;
+11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;;
+11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;;
+11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;;
+11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;;
+11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;;
+11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;;
+11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;;
+11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;;
+1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;;
+1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;;
+1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;;
+1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;;
+1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;;
+11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;;
+11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;;
+11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;;
+1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;;
+1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;;
+1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;;
+110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;;
+110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;;
+110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;;
+110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;;
+110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;;
+110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;;
+110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;;
+110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;;
+110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;;
+110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;;
+110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;;
+110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;;
+110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;;
+110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;;
+110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;;
+110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;;
+110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
+110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
+110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
+110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
+110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;
+110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;;
+110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;;
+110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;;
+110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;;
+110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;;
+110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;;
+110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;;
+110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;;
+110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;;
+110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;;
+110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;;
+110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;;
+110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;;
+110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;;
+110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;;
+110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;;
+110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;;
+110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;;
+110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;;
+110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;;
+110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;;
+110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;;
+110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;;
+11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;;
+11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;;
+11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;;
+11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;;
+11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;;
+11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;;
+11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;;
+11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;;
+1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;;
+1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;;
+1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;;
+1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;;
+1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;;
+1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;;
+11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;;
+11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;;
+11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;;
+11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;;
+11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;;
+11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;;
+11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;;
+11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;;
+11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;;
+11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;;
+1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;;
+1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;;
+1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;;
+1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;;
+1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;;
+1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;;
+11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;;
+11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;;
+11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;;
+11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;;
+11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;;
+11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;;
+11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;;
+11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;;
+1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;;
+11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;;
+11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;;
+11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;;
+11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;;
+11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;;
+11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;
+11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;
+11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;;
+11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;;
+11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;;
+11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;;
+11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;;
+11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;;
+11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;;
+1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;;
+1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;;
+11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;;
+11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;;
+11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;;
+11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;;
+11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;;
+11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;;
+111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;;
+111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;;
+111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;;
+111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;;
+111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;;
+111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;;
+111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;;
+111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;;
+111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;;
+111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;;
+111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;;
+111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;;
+111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+111C4;SHARADA OM;Lo;0;L;;;;;N;;;;;
+111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;;
+111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
+111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;;
+11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;;
+11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;;
+11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;;
+11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;;
+11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;;
+11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;;
+11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;;
+11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;;
+11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;;
+1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;;
+1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;;
+1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;;
+1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;;
+11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;;
+11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;;
+1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;;
+1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;;
+1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;;
+1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;;
+1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;;
+116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;;
+116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;;
+116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;;
+116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;;
+116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;;
+116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;;
+116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;;
+116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;;
+116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;;
+116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;;
+116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;;
+116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
+12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
+12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
+12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
+12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
+12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
+12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
+12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
+1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
+1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
+1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
+12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
+12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
+12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
+12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
+12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
+1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
+1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
+1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
+12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
+12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
+12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
+12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
+12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
+12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
+12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
+12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
+12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
+1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
+1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
+1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
+1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
+1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
+12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
+12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
+12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
+12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
+12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
+12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
+12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
+12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
+12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
+1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
+1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
+1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
+12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
+12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
+12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
+12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
+12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
+12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
+12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
+12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
+12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
+12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
+1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
+1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
+1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
+1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
+1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
+12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
+12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
+12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
+12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
+12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
+12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
+12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
+12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
+12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
+12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
+1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
+1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
+1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
+1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
+12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
+12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
+12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
+12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
+12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
+12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
+12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
+12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
+12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
+1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
+1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
+1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
+1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
+12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
+12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
+12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
+12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
+12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
+12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
+12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
+12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
+12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
+1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
+1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
+1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
+1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
+1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
+1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
+12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
+12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
+12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
+12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
+12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
+12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
+12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
+1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
+1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
+1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
+1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
+1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
+12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
+12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
+12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
+12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
+12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
+12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
+12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
+1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
+1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
+1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
+1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
+1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
+120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
+120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
+120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
+120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
+120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
+120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
+120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
+120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
+120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
+120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
+120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
+120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
+120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
+120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
+120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
+120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
+120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
+120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
+120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
+120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
+120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
+120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
+120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
+120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
+120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
+120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
+120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
+120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
+120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
+120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
+120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
+120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
+120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
+120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
+120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
+120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
+120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
+120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
+120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
+120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
+120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
+120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
+120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
+120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
+120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
+120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
+120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
+120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
+120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
+120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
+120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
+120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
+120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
+120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
+120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
+120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
+120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
+120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
+120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
+120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
+120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
+120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
+120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
+120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
+12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
+12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
+12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
+12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
+12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
+12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
+12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
+12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
+12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
+12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
+1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
+1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
+12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
+12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
+12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
+12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
+12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
+12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
+12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
+12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
+1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
+1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
+1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
+12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
+12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
+12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
+12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
+12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
+12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
+12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
+12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
+1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
+1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
+1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
+1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
+1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
+12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
+12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
+12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
+12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
+12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
+12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
+12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
+1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
+1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
+1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
+12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
+12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
+12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
+12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
+12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
+12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
+12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
+12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
+12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
+12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
+1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
+1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
+1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
+1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
+1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
+12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
+12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
+12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
+12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
+12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
+12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
+12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
+12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
+12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
+1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
+1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
+1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
+1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
+12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
+12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
+12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
+12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
+12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
+12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
+12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
+1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
+1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
+1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
+1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
+1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
+12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
+12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
+12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
+12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
+12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
+12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
+12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
+12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
+12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
+12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
+1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
+1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
+1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
+1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
+1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
+1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
+12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
+12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
+12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
+12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
+12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
+12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
+12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
+12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
+12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
+12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
+1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
+1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
+1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
+1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
+1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
+12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
+12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
+12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
+12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
+12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
+12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
+12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
+12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
+12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
+1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
+1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
+1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
+1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
+121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
+121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
+121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
+121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
+121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
+121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
+121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
+121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
+121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
+121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
+121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
+121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
+121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
+121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
+121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
+121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
+121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
+121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
+121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
+121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
+121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
+121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
+121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
+121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
+121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
+121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
+121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
+121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
+121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
+121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
+121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
+121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
+121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
+121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
+121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
+121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
+121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
+121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
+121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
+121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
+121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
+121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
+121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
+121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
+121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
+121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
+121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
+121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
+121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
+121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
+121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
+121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
+121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
+121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
+121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
+121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
+121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
+121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
+121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
+121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
+121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
+121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
+121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
+121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
+121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
+121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
+121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
+121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
+121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
+121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
+121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
+121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
+121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
+121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
+121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
+121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
+121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
+12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
+12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
+12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
+12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
+1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
+1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
+12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
+12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
+12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
+12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
+12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
+12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
+12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
+12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
+12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
+12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
+1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
+1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
+1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
+1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
+1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
+1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
+12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
+12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
+12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
+12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
+12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
+12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
+12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
+12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
+1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
+1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
+1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
+1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
+1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
+1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
+12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
+12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
+12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
+12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
+12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
+12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
+12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
+12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
+1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
+1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
+1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
+1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
+1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
+1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
+12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
+12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
+12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
+12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
+12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
+12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
+12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
+12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
+12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
+12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
+1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
+1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
+1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
+1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
+1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
+1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
+12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
+12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
+1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
+12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
+12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
+12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
+12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
+12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
+12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
+12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
+12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
+1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
+1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
+1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
+1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
+12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
+12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
+12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
+12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
+1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
+1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
+1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
+1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
+1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
+1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
+12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
+12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
+12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
+12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
+12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
+12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
+12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
+12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
+12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
+12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
+1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
+1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
+1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
+1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
+1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
+1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
+12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
+12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
+12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
+12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
+12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
+12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
+12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
+12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
+12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
+12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
+1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
+1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
+1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
+1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
+1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
+122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
+122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
+122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
+122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
+122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
+122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
+122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
+122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
+122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
+122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
+122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
+122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
+122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
+122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
+122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
+122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
+122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
+122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
+122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
+122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
+122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
+122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
+122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
+122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
+122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
+122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
+122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
+122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
+122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
+122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
+122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
+122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
+122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
+122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
+122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
+122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
+122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
+122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
+122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
+122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
+122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
+122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
+122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
+122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
+122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
+122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
+122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
+122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
+122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
+122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
+122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
+122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
+122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
+122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
+122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
+122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
+122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
+122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
+122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
+122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
+122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
+122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
+122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
+122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
+122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
+122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
+122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
+122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
+122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
+122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
+122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
+122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
+122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
+122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
+122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
+122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
+122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
+122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
+122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
+122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
+122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
+122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
+122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
+122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
+122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
+122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
+122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
+122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
+122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
+12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
+12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
+12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
+12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
+12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
+12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
+12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
+12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
+1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
+1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
+1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
+1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
+1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
+12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
+12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
+12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
+12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
+12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
+12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
+12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
+12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
+12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
+1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
+1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
+1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
+1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
+1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
+12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
+12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
+12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
+12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
+12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
+12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
+12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
+12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
+1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
+1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
+1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
+1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
+12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
+12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
+12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
+12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
+12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
+12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
+12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
+1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
+1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
+1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
+1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
+12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
+12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
+12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
+12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
+12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
+12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
+12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
+12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
+12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
+12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
+1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
+1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
+1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
+1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
+1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
+12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
+12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
+12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
+12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
+12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
+12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
+12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
+12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
+1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
+1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
+1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
+1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
+1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
+12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
+12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
+12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
+12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
+12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
+12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
+12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
+12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
+12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
+12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
+1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
+1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
+1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
+1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
+1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
+12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
+12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
+12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
+12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
+12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
+12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
+12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
+12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
+12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
+12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
+1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
+1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
+1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
+1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
+1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
+1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
+12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
+12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
+12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
+12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
+12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
+12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
+12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
+12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
+12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
+12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
+1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
+1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
+1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
+1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
+1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
+1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
+12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
+12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
+12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
+12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
+12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
+12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
+12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
+12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
+12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
+1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
+1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
+1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
+1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
+1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
+1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
+12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
+12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;;
+12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;;
+12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
+12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
+12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
+12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
+12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
+1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
+1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
+1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
+1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
+1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
+1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
+12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
+12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
+12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
+12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
+12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
+12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
+12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
+12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
+12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
+12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
+1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
+1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
+1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
+1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
+1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
+1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
+12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
+12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
+12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
+12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
+12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
+12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
+12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;-1;N;;;;;
+12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;-1;N;;;;;
+12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
+12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
+1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
+1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
+1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
+1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
+1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
+1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
+12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
+12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
+12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
+12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
+12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
+12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
+13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
+13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
+13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
+13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;
+13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;
+13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;;
+13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;
+13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;;
+13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;;
+13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;
+1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;
+1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;
+1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;
+1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;
+1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;
+1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;
+13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;
+13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;;
+13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;
+13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;
+13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;
+13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;;
+13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;
+13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;
+13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;
+13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;
+1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;
+1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;
+1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;
+1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;
+1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;
+1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;
+13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;
+13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;
+13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;
+13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;
+13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;
+13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;;
+13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;
+13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;
+13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;
+13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;
+1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;
+1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;
+1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;
+1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;
+1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;;
+1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;
+13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;
+13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;;
+13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;
+13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;;
+13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;
+13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;
+13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;
+13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;
+13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;
+13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;
+1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;
+1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;
+1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;
+1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;
+1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;
+1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;
+13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;
+13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;
+13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;
+13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;
+13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;
+13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;
+13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;
+13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;
+13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;
+13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;
+1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;
+1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;
+1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;
+1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;
+1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;
+1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;
+13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;;
+13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;;
+13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;;
+13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;;
+13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;;
+13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;;
+13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;;
+13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;;
+13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;;
+13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;;
+1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;;
+1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;;
+1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;;
+1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;;
+1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;;
+1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;;
+13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;;
+13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;;
+13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;;
+13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;;
+13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;;
+13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;;
+13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;;
+13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;;
+13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;;
+13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;;
+1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;;
+1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;;
+1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;;
+1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;;
+1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;;
+1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;;
+13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;;
+13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;;
+13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;;
+13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;;
+13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;;
+13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;;
+13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;;
+13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;;
+13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;;
+13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;;
+1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;;
+1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;;
+1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;;
+1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;;
+1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;;
+1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;;
+13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;;
+13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;;
+13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;;
+13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;;
+13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;;
+13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;;
+13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;;
+13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;;
+13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;;
+13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;;
+1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;;
+1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;;
+1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;;
+1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;;
+1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;;
+1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;;
+13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;;
+13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;;
+13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;;
+13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;;
+13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;;
+13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;;
+13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;;
+13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;;
+13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;;
+13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;;
+1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;;
+1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;;
+1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;;
+1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;;
+1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;;
+1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;;
+130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;;
+130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;;
+130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;;
+130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;;
+130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;;
+130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;;
+130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;;
+130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;;
+130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;;
+130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;;
+130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;;
+130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;;
+130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;;
+130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;;
+130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;;
+130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;;
+130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;;
+130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;;
+130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;;
+130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;;
+130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;;
+130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;;
+130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;;
+130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;;
+130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;;
+130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;;
+130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;;
+130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;;
+130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;;
+130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;;
+130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;;
+130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;;
+130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;;
+130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;;
+130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;;
+130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;;
+130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;;
+130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;;
+130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;;
+130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;;
+130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;;
+130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;;
+130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;;
+130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;;
+130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;;
+130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;;
+130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;;
+130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;;
+130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;;
+130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;;
+130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;;
+130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;;
+130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;;
+130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;;
+130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;;
+130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;;
+130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;;
+130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;;
+130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;;
+130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;;
+130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;;
+130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;;
+130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;;
+130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;;
+130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;;
+130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;;
+130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;;
+130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;;
+130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;;
+130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;;
+130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;;
+130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;;
+130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;;
+130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;;
+130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;;
+130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;;
+130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;;
+130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;;
+130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;;
+130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;;
+130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;;
+130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;;
+130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;;
+130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;;
+130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;;
+130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;;
+130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;;
+130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;;
+130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;;
+130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;;
+130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;;
+130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;;
+130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;;
+130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;;
+130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;;
+130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;;
+13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;;
+13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;;
+13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;;
+13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;;
+13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;;
+13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;;
+13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;;
+13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;;
+13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;;
+13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;;
+1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;;
+1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;;
+1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;;
+1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;;
+1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;;
+1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;;
+13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;;
+13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;;
+13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;;
+13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;;
+13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;;
+13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;;
+13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;;
+13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;;
+13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;;
+13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;;
+1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;;
+1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;;
+1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;;
+1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;;
+1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;;
+1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;;
+13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;;
+13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;;
+13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;;
+13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;;
+13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;;
+13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;;
+13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;;
+13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;;
+13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;;
+13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;;
+1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;;
+1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;;
+1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;;
+1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;;
+1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;;
+1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;;
+13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;;
+13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;;
+13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;;
+13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;;
+13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;;
+13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;;
+13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;;
+13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;;
+13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;;
+13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;;
+1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;;
+1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;;
+1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;;
+1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;;
+1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;;
+1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;;
+13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;;
+13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;;
+13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;;
+13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;;
+13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;;
+13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;;
+13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;;
+13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;;
+13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;;
+13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;;
+1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;;
+1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;;
+1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;;
+1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;;
+1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;;
+1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;;
+13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;;
+13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;;
+13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;;
+13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;;
+13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;;
+13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;;
+13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;;
+13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;;
+13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;;
+13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;;
+1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;;
+1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;;
+1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;;
+1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;;
+1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;;
+1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;;
+13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;;
+13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;;
+13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;;
+13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;;
+13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;;
+13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;;
+13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;;
+13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;;
+13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;;
+13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;;
+1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;;
+1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;;
+1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;;
+1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;;
+1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;;
+1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;;
+13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;;
+13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;;
+13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;;
+13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;;
+13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;;
+13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;;
+13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;;
+13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;;
+13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;;
+13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;;
+1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;;
+1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;;
+1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;;
+1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;;
+1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;;
+1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;;
+13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;;
+13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;;
+13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;;
+13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;;
+13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;;
+13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;;
+13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;;
+13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;;
+13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;;
+13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;;
+1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;;
+1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;;
+1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;;
+1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;;
+1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;;
+1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;;
+13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;;
+13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;;
+13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;;
+13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;;
+13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;;
+13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;;
+13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;;
+13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;;
+13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;;
+13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;;
+1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;;
+1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;;
+1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;;
+1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;;
+1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;;
+1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;;
+131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;;
+131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;;
+131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;;
+131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;;
+131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;;
+131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;;
+131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;;
+131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;;
+131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;;
+131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;;
+131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;;
+131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;;
+131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;;
+131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;;
+131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;;
+131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;;
+131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;;
+131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;;
+131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;;
+131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;;
+131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;;
+131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;;
+131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;;
+131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;;
+131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;;
+131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;;
+131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;;
+131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;;
+131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;;
+131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;;
+131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;;
+131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;;
+131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;;
+131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;;
+131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;;
+131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;;
+131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;;
+131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;;
+131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;;
+131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;;
+131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;;
+131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;;
+131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;;
+131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;;
+131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;;
+131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;;
+131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;;
+131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;;
+131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;;
+131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;;
+131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;;
+131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;;
+131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;;
+131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;;
+131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;;
+131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;;
+131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;;
+131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;;
+131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;;
+131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;;
+131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;;
+131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;;
+131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;;
+131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;;
+131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;;
+131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;;
+131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;;
+131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;;
+131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;;
+131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;;
+131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;;
+131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;;
+131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;;
+131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;;
+131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;;
+131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;;
+131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;;
+131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;;
+131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;;
+131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;;
+131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;;
+131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;;
+131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;;
+131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;;
+131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;;
+131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;;
+131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;;
+131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;;
+131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;;
+131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;;
+131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;;
+131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;;
+131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;;
+131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;;
+131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;;
+131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;;
+13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;;
+13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;;
+13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;;
+13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;;
+13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;;
+13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;;
+13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;;
+13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;;
+13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;;
+13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;;
+1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;;
+1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;;
+1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;;
+1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;;
+1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;;
+1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;;
+13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;;
+13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;;
+13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;;
+13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;;
+13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;;
+13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;;
+13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;;
+13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;;
+13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;;
+13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;;
+1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;;
+1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;;
+1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;;
+1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;;
+1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;;
+1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;;
+13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;;
+13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;;
+13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;;
+13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;;
+13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;;
+13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;;
+13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;;
+13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;;
+13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;;
+13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;;
+1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;;
+1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;;
+1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;;
+1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;;
+1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;;
+1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;;
+13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;;
+13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;;
+13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;;
+13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;;
+13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;;
+13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;;
+13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;;
+13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;;
+13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;;
+13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;;
+1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;;
+1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;;
+1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;;
+1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;;
+1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;;
+1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;;
+13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;;
+13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;;
+13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;;
+13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;;
+13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;;
+13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;;
+13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;;
+13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;;
+13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;;
+13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;;
+1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;;
+1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;;
+1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;;
+1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;;
+1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;;
+1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;;
+13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;;
+13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;;
+13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;;
+13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;;
+13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;;
+13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;;
+13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;;
+13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;;
+13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;;
+13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;;
+1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;;
+1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;;
+1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;;
+1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;;
+1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;;
+1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;;
+13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;;
+13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;;
+13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;;
+13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;;
+13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;;
+13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;;
+13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;;
+13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;;
+13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;;
+13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;;
+1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;;
+1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;;
+1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;;
+1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;;
+1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;;
+1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;;
+13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;;
+13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;;
+13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;;
+13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;;
+13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;;
+13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;;
+13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;;
+13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;;
+13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;;
+13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;;
+1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;;
+1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;;
+1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;;
+1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;;
+1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;;
+1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;;
+13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;;
+13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;;
+13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;;
+13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;;
+13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;;
+13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;;
+13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;;
+13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;;
+13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;;
+13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;;
+1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;;
+1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;;
+1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;;
+1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;;
+1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;;
+1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;;
+13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;;
+13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;;
+13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;;
+13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;;
+13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;;
+13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;;
+13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;;
+13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;;
+13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;;
+13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;;
+1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;;
+1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;;
+1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;;
+1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;;
+1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;;
+1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;;
+132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;;
+132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;;
+132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;;
+132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;;
+132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;;
+132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;;
+132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;;
+132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;;
+132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;;
+132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;;
+132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;;
+132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;;
+132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;;
+132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;;
+132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;;
+132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;;
+132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;;
+132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;;
+132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;;
+132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;;
+132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;;
+132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;;
+132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;;
+132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;;
+132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;;
+132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;;
+132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;;
+132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;;
+132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;;
+132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;;
+132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;;
+132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;;
+132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;;
+132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;;
+132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;;
+132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;;
+132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;;
+132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;;
+132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;;
+132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;;
+132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;;
+132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;;
+132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;;
+132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;;
+132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;;
+132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;;
+132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;;
+132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;;
+132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;;
+132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;;
+132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;;
+132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;;
+132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;;
+132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;;
+132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;;
+132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;;
+132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;;
+132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;;
+132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;;
+132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;;
+132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;;
+132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;;
+132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;;
+132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;;
+132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;;
+132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;;
+132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;;
+132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;;
+132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;;
+132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;;
+132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;;
+132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;;
+132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;;
+132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;;
+132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;;
+132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;;
+132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;;
+132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;;
+132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;;
+132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;;
+132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;;
+132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;;
+132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;;
+132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;;
+132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;;
+132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;;
+132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;;
+132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;;
+132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;;
+132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;;
+132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;;
+132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;;
+132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;;
+132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;;
+132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;;
+132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;;
+13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;;
+13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;;
+13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;;
+13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;;
+13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;;
+13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;;
+13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;;
+13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;;
+13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;;
+13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;;
+1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;;
+1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;;
+1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;;
+1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;;
+1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;;
+1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;;
+13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;;
+13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;;
+13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;;
+13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;;
+13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;;
+13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;;
+13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;;
+13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;;
+13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;;
+13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;;
+1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;;
+1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;;
+1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;;
+1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;;
+1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;;
+1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;;
+13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;;
+13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;;
+13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;;
+13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;;
+13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;;
+13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;;
+13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;;
+13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;;
+13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;;
+13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;;
+1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;;
+1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;;
+1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;;
+1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;;
+1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;;
+1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;;
+13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;;
+13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;;
+13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;;
+13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;;
+13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;;
+13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;;
+13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;;
+13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;;
+13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;;
+13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;;
+1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;;
+1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;;
+1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;;
+1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;;
+1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;;
+1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;;
+13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;;
+13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;;
+13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;;
+13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;;
+13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;;
+13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;;
+13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;;
+13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;;
+13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;;
+13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;;
+1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;;
+1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;;
+1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;;
+1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;;
+1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;;
+1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;;
+13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;;
+13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;;
+13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;;
+13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;;
+13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;;
+13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;;
+13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;;
+13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;;
+13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;;
+13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;;
+1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;;
+1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;;
+1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;;
+1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;;
+1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;;
+1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;;
+13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;;
+13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;;
+13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;;
+13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;;
+13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;;
+13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;;
+13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;;
+13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;;
+13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;;
+13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;;
+1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;;
+1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;;
+1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;;
+1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;;
+1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;;
+1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;;
+13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;;
+13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;;
+13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;;
+13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;;
+13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;;
+13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;;
+13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;;
+13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;;
+13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;;
+13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;;
+1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;;
+1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;;
+1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;;
+1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;;
+1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;;
+1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;;
+13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;;
+13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;;
+13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;;
+13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;;
+13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;;
+13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;;
+13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;;
+13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;;
+13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;;
+13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;;
+1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;;
+1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;;
+1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;;
+1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;;
+1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;;
+1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;;
+13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;;
+13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;;
+13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;;
+13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;;
+13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;;
+13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;;
+13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;;
+13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;;
+13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;;
+13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;;
+1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;;
+1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;;
+1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;;
+1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;;
+1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;;
+1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;;
+133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;;
+133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;;
+133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;;
+133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;;
+133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;;
+133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;;
+133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;;
+133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;;
+133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;;
+133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;;
+133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;;
+133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;;
+133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;;
+133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;;
+133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;;
+133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;;
+133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;;
+133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;;
+133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;;
+133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;;
+133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;;
+133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;;
+133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;;
+133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;;
+133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;;
+133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;;
+133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;;
+133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;;
+133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;;
+133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;;
+133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;;
+133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;;
+133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;;
+133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;;
+133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;;
+133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;;
+133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;;
+133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;;
+133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;;
+133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;;
+133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;;
+133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;;
+133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;;
+133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;;
+133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;;
+133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;;
+133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;;
+133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;;
+133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;;
+133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;;
+133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;;
+133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;;
+133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;;
+133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;;
+133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;;
+133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;;
+133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;;
+133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;;
+133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;;
+133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;;
+133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;;
+133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;;
+133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;;
+133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;;
+133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;;
+133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;;
+133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;;
+133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;;
+133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;;
+133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;;
+133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;;
+133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;;
+133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;;
+133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;;
+133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;;
+133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;;
+133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;;
+133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;;
+133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;;
+133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;;
+133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;;
+133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;;
+133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;;
+133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;;
+133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;;
+133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;;
+133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;;
+133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;;
+133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;;
+133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;;
+133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;;
+133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;;
+133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;;
+133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;;
+133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;;
+133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;;
+13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;;
+13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;;
+13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;;
+13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;;
+13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;;
+13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;;
+13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;;
+13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;;
+13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;;
+13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;;
+1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;;
+1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;;
+1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;;
+1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;;
+1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;;
+1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;;
+13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;;
+13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;;
+13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;;
+13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;;
+13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;;
+13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;;
+13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;;
+13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;;
+13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;;
+13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;;
+1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;;
+1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;;
+1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;;
+1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;;
+1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;;
+1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;;
+13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;;
+13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;;
+13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;;
+13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;;
+13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;;
+13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;;
+13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;;
+13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;;
+13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;;
+13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;;
+1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;;
+1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;;
+1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;;
+1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;;
+1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;;
+16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;;
+16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;;
+16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;
+16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;;
+16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;;
+16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;;
+16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;;
+16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;;
+16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;;
+16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;
+1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;;
+1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;;
+1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;;
+1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;;
+1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;;
+1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;;
+16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;;
+16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;;
+16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;;
+16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;;
+16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;;
+16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;;
+16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;;
+16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;;
+16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;;
+16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;;
+1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;;
+1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;;
+1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;;
+1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;;
+1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;;
+1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;;
+16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;;
+16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;;
+16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;;
+16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;;
+16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;;
+16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;;
+16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;;
+16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;;
+16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;;
+16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;;
+1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;;
+1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;;
+1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;;
+1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;;
+1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;;
+1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;;
+16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;;
+16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;;
+16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;;
+16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;;
+16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;;
+16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;;
+16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;;
+16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;;
+16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;;
+16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;;
+1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;;
+1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;;
+1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;;
+1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;;
+1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;;
+1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;;
+16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;;
+16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;;
+16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;;
+16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;;
+16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;;
+16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;;
+16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;;
+16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;;
+16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;;
+16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;;
+1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;;
+1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;;
+1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;;
+1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;;
+1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;;
+1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;;
+16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;;
+16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;;
+16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;;
+16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;;
+16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;;
+16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;;
+16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;;
+16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;;
+16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;;
+16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;;
+1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;;
+1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;;
+1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;;
+1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;;
+1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;;
+1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;;
+16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;;
+16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;;
+16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;;
+16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;;
+16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;;
+16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;;
+16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;;
+16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;;
+16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;;
+16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;;
+1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;;
+1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;;
+1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;;
+1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;;
+1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;;
+1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;;
+16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;;
+16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;;
+16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;;
+16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;;
+16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;;
+16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;;
+16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;;
+16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;;
+16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;;
+16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;;
+1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;;
+1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;;
+1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;;
+1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;;
+1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;;
+1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;;
+16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;;
+16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;;
+16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;;
+16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;;
+16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;;
+16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;;
+16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;;
+16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;;
+16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;;
+16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;;
+1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;;
+1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;;
+1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;;
+1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;;
+1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;;
+1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;;
+16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;;
+16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;;
+16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;;
+16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;;
+16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;;
+16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;;
+16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;;
+16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;;
+16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;;
+16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;;
+1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;;
+1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;;
+1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;;
+1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;;
+1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;;
+1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;;
+168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;;
+168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;;
+168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;;
+168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;;
+168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;;
+168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;;
+168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;;
+168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;;
+168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;;
+168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;;
+168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;;
+168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;;
+168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;;
+168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;;
+168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;;
+168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;;
+168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;;
+168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;;
+168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;;
+168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;;
+168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;;
+168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;;
+168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;;
+168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;;
+168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;;
+168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;;
+168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;;
+168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;;
+168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;;
+168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;;
+168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;;
+168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;;
+168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;;
+168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;;
+168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;;
+168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;;
+168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;;
+168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;;
+168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;;
+168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;;
+168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;;
+168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;;
+168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;;
+168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;;
+168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;;
+168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;;
+168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;;
+168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;;
+168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;;
+168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;;
+168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;;
+168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;;
+168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;;
+168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;;
+168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;;
+168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;;
+168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;;
+168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;;
+168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;;
+168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;;
+168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;;
+168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;;
+168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;;
+168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;;
+168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;;
+168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;;
+168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;;
+168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;;
+168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;;
+168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;;
+168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;;
+168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;;
+168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;;
+168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;;
+168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;;
+168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;;
+168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;;
+168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;;
+168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;;
+168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;;
+168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;;
+168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;;
+168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;;
+168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;;
+168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;;
+168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;;
+168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;;
+168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;;
+168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;;
+168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;;
+168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;;
+168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;;
+168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;;
+168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;;
+168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;;
+168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;;
+16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;;
+16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;;
+16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;;
+16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;;
+16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;;
+16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;;
+16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;;
+16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;;
+16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;;
+16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;;
+1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;;
+1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;;
+1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;;
+1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;;
+1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;;
+1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;;
+16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;;
+16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;;
+16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;;
+16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;;
+16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;;
+16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;;
+16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;;
+16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;;
+16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;;
+16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;;
+1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;;
+1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;;
+1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;;
+1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;;
+1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;;
+1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;;
+16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;;
+16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;;
+16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;;
+16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;;
+16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;;
+16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;;
+16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;;
+16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;;
+16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;;
+16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;;
+1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;;
+1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;;
+1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;;
+1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;;
+1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;;
+1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;;
+16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;;
+16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;;
+16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;;
+16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;;
+16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;;
+16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;;
+16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;;
+16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;;
+16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;;
+16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;;
+1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;;
+1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;;
+1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;;
+1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;;
+1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;;
+1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;;
+16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;;
+16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;;
+16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;;
+16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;;
+16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;;
+16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;;
+16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;;
+16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;;
+16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;;
+16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;;
+1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;;
+1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;;
+1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;;
+1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;;
+1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;;
+1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;;
+16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;;
+16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;;
+16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;;
+16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;;
+16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;;
+16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;;
+16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;;
+16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;;
+16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;;
+16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;;
+1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;;
+1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;;
+1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;;
+1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;;
+1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;;
+1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;;
+16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;;
+16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;;
+16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;;
+16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;;
+16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;;
+16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;;
+16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;;
+16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;;
+16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;;
+16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;;
+1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;;
+1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;;
+1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;;
+1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;;
+1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;;
+1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;;
+16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;;
+16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;;
+16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;;
+16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;;
+16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;;
+16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;;
+16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;;
+16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;;
+16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;;
+16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;;
+1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;;
+1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;;
+1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;;
+1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;;
+1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;;
+1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;;
+16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;;
+16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;;
+16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;;
+16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;;
+16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;;
+16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;;
+16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;;
+16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;;
+16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;;
+16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;;
+1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;;
+1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;;
+1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;;
+1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;;
+1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;;
+1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;;
+16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;;
+16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;;
+16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;;
+16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;;
+16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;;
+16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;;
+16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;;
+16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;;
+16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;;
+16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;;
+1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;;
+1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;;
+1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;;
+1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;;
+1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;;
+1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;;
+169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;;
+169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;;
+169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;;
+169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;;
+169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;;
+169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;;
+169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;;
+169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;;
+169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;;
+169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;;
+169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;;
+169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;;
+169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;;
+169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;;
+169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;;
+169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;;
+169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;;
+169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;;
+169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;;
+169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;;
+169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;;
+169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;;
+169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;;
+169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;;
+169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;;
+169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;;
+169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;;
+169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;;
+169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;;
+169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;;
+169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;;
+169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;;
+169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;;
+169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;;
+169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;;
+169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;;
+169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;;
+169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;;
+169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;;
+169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;;
+169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;;
+169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;;
+169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;;
+169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;;
+169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;;
+169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;;
+169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;;
+169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;;
+169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;;
+169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;;
+169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;;
+169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;;
+169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;;
+169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;;
+169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;;
+169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;;
+169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;;
+169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;;
+169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;;
+169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;;
+169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;;
+169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;;
+169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;;
+169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;;
+169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;;
+169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;;
+169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;;
+169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;;
+169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;;
+169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;;
+169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;;
+169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;;
+169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;;
+169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;;
+169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;;
+169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;;
+169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;;
+169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;;
+169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;;
+169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;;
+169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;;
+169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;;
+169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;;
+169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;;
+169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;;
+169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;;
+169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;;
+169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;;
+169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;;
+169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;;
+169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;;
+169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;;
+169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;;
+169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;;
+169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;;
+169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;;
+16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;;
+16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;;
+16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;;
+16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;;
+16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;;
+16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;;
+16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;;
+16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;;
+16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;;
+16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;;
+16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;;
+16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;;
+16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;;
+16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;;
+16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;;
+16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;;
+16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;;
+16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;;
+16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;;
+16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;;
+16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;;
+16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;;
+16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;;
+16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;;
+16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;;
+16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;;
+16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;;
+16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;;
+16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;;
+16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;;
+16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;;
+16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;;
+16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;;
+16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;;
+16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;;
+16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;;
+16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;;
+16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;;
+16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;;
+16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;;
+16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;;
+16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;;
+16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;;
+16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;;
+16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;;
+16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;;
+16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;;
+16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;;
+16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;;
+16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;;
+16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;;
+16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;;
+16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;;
+16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;;
+16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;;
+16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;;
+16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;;
+16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;
+16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;
+16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;
+16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;;
+16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;;
+16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;;
+16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;;
+16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;;
+16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;;
+16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;;
+16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;;
+16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;;
+16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;;
+16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;;
+16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;;
+16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;;
+16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;;
+16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;;
+16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;;
+16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;;
+16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;;
+16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;;
+16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;;
+16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;;
+16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;;
+16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;;
+16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;;
+16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;;
+16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;;
+16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;;
+16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;;
+16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;;
+16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;;
+16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;;
+16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;;
+16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;;
+16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;;
+16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;;
+16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;;
+16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;;
+16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;;
+16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;;
+16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;;
+16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;;
+16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;;
+16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;;
+16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;;
+16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;;
+16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;;
+16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;;
+16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;;
+16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;;
+16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;;
+16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;;
+16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;;
+16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;;
+16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;;
+16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;;
+16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;;
+16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;;
+16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;;
+16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;;
+16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;;
+16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;;
+16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;;
+16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;;
+16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;;
+16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;;
+16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;;
+16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;;
+16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;;
+16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;;
+16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;;
+16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;;
+16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;;
+16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;;
+16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;;
+16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;;
+16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;;
+16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;;
+16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;;
+16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;;
+16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;;
+16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;;
+16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;;
+16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;;
+16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;;
+16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;;
+16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;;
+16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;;
+16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;;
+16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;;
+16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;;
+16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;;
+16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;;
+16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;;
+16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;;
+16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;;
+16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;;
+16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;;
+16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;;
+16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;;
+16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;;
+16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;;
+16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;;
+16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;;
+16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;;
+16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;;
+16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;;
+16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;;
+16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;;
+16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;;
+16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;;
+16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;;
+16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;;
+1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
+1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
+1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
+1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
+1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
+1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
+1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
+1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
+1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
+1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
+1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
+1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
+1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
+1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
+1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
+1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
+1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
+1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
+1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
+1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
+1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
+1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
+1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
+1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
+1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
+1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
+1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
+1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
+1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
+1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
+1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
+1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
+1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
+1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
+1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
+1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
+1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
+1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
+1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
+1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
+1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
+1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
+1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
+1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
+1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
+1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
+1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
+1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
+1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
+1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
+1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
+1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
+1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
+1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
+1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
+1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
+1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
+1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
+1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
+1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
+1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
+1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
+1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
+1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
+1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
+1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
+1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
+1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
+1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
+1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
+1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
+1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
+1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
+1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
+1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
+1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
+1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
+1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
+1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
+1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
+1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
+1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
+1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
+1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
+1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
+1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
+1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
+1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
+1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
+1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
+1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
+1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
+1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
+1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
+1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
+1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
+1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
+1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
+1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
+1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
+1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
+1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
+1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
+1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
+1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
+1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
+1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
+1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
+1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
+1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
+1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
+1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
+1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
+1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
+1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
+1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
+1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
+1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
+1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
+1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
+1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
+1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
+1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
+1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
+1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
+1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
+1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
+1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
+1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
+1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
+1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
+1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
+1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
+1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
+1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
+1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
+1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
+1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
+1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
+1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
+1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
+1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
+1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
+1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
+1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
+1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
+1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
+1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
+1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
+1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
+1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
+1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
+1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
+1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
+1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
+1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
+1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
+1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
+1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
+1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
+1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
+1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
+1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
+1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
+1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
+1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
+1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
+1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
+1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
+1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
+1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
+1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
+1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
+1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
+1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
+1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
+1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
+1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
+1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
+1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
+1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
+1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
+1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
+1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
+1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
+1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
+1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
+1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
+1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
+1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
+1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
+1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
+1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
+1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
+1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
+1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
+1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
+1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
+1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
+1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
+1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
+1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
+1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
+1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
+1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
+1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
+1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
+1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
+1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
+1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
+1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;
+1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
+1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
+1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
+1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
+1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
+1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
+1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
+1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
+1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
+1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
+1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
+1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
+1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
+1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
+1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
+1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
+1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
+1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
+1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
+1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
+1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
+1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
+1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
+1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
+1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
+1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
+1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
+1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
+1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
+1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
+1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
+1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
+1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
+1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
+1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
+1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
+1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
+1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
+1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
+1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
+1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
+1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
+1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
+1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
+1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
+1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
+1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
+1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
+1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
+1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
+1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
+1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
+1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
+1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
+1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
+1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
+1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
+1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
+1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
+1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
+1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
+1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
+1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
+1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
+1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
+1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
+1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
+1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
+1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
+1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
+1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
+1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
+1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
+1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
+1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
+1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
+1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
+1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
+1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
+1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
+1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
+1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
+1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
+1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
+1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
+1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
+1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
+1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
+1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
+1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
+1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
+1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
+1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
+1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
+1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
+1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
+1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
+1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
+1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
+1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
+1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
+1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
+1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
+1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
+1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
+1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
+1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
+1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
+1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
+1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
+1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
+1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
+1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
+1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
+1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
+1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
+1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
+1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
+1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
+1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
+1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
+1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
+1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
+1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
+1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
+1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
+1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
+1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
+1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
+1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
+1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
+1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
+1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
+1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
+1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
+1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
+1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
+1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
+1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
+1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
+1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
+1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
+1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
+1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
+1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
+1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
+1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
+1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
+1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
+1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
+1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
+1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
+1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
+1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
+1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
+1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
+1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
+1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
+1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
+1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
+1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
+1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
+1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
+1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
+1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
+1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
+1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
+1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
+1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
+1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
+1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
+1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
+1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
+1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
+1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
+1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
+1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
+1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
+1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
+1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
+1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
+1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
+1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
+1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
+1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
+1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
+1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
+1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
+1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
+1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
+1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
+1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
+1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
+1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
+1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
+1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
+1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
+1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
+1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
+1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
+1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
+1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
+1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
+1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
+1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
+1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
+1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
+1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
+1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
+1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
+1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
+1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
+1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
+1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
+1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
+1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
+1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
+1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
+1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
+1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
+1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
+1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
+1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
+1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
+1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
+1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
+1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
+1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
+1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
+1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
+1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
+1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
+1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
+1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;
+1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
+1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
+1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
+1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;
+1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;
+1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;
+1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;
+1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;
+1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;
+1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL;<font> 0643;;;;N;;;;;
+1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;
+1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;
+1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
+1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;
+1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
+1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
+1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL;<font> 062F;;;;N;;;;;
+1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL;<font> 0648;;;;N;;;;;
+1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;
+1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL;<font> 062D;;;;N;;;;;
+1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL;<font> 0637;;;;N;;;;;
+1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL;<font> 064A;;;;N;;;;;
+1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL;<font> 0644;;;;N;;;;;
+1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;
+1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL;<font> 0646;;;;N;;;;;
+1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;
+1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL;<font> 0639;;;;N;;;;;
+1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL;<font> 0641;;;;N;;;;;
+1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL;<font> 0635;;;;N;;;;;
+1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL;<font> 0642;;;;N;;;;;
+1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL;<font> 0631;;;;N;;;;;
+1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;
+1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL;<font> 062A;;;;N;;;;;
+1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL;<font> 062B;;;;N;;;;;
+1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;
+1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL;<font> 0630;;;;N;;;;;
+1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL;<font> 0636;;;;N;;;;;
+1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;
+1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;
+1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;;
+1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;;
+1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
+1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
+1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
+1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;
+1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;
+1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;
+1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;
+1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;
+1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;
+1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;
+1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;
+1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;
+1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;
+1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;
+1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;
+1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;
+1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;
+1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;
+1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;
+1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;
+1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;
+1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;
+1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;
+1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;
+1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;
+1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;
+1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;
+1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;
+1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;
+1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;
+1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;
+1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;
+1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;
+1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;
+1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;
+1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;
+1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;
+1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;
+1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;
+1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;
+1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;
+1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;
+1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;
+1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;
+1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;
+1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;
+1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;
+1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;
+1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;
+1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;
+1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;
+1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;
+1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;
+1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;
+1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;
+1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;
+1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;
+1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;
+1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;
+1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;
+1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;
+1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;
+1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;
+1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;
+1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;
+1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;
+1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;
+1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;
+1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;
+1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;
+1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;
+1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;
+1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;
+1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;
+1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;
+1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;
+1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;
+1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;
+1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;
+1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;
+1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;
+1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;
+1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;
+1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;
+1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;
+1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;
+1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;
+1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;
+1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;
+1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;
+1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;
+1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;
+1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;
+1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;
+1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;
+1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;
+1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;
+1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;
+1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;
+1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;
+1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;
+1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;
+1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;
+1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;
+1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;
+1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;
+1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;
+1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;
+1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;
+1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;
+1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;
+1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;
+1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;
+1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;
+1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;
+1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;
+1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;
+1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;
+1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;
+1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;
+1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;;
+1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;;
+1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;;
+1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;;
+1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;;
+1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;;
+1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;;
+1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;;
+1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;;
+1F100;DIGIT ZERO FULL STOP;No;0;EN;<compat> 0030 002E;;0;0;N;;;;;
+1F101;DIGIT ZERO COMMA;No;0;EN;<compat> 0030 002C;;0;0;N;;;;;
+1F102;DIGIT ONE COMMA;No;0;EN;<compat> 0031 002C;;1;1;N;;;;;
+1F103;DIGIT TWO COMMA;No;0;EN;<compat> 0032 002C;;2;2;N;;;;;
+1F104;DIGIT THREE COMMA;No;0;EN;<compat> 0033 002C;;3;3;N;;;;;
+1F105;DIGIT FOUR COMMA;No;0;EN;<compat> 0034 002C;;4;4;N;;;;;
+1F106;DIGIT FIVE COMMA;No;0;EN;<compat> 0035 002C;;5;5;N;;;;;
+1F107;DIGIT SIX COMMA;No;0;EN;<compat> 0036 002C;;6;6;N;;;;;
+1F108;DIGIT SEVEN COMMA;No;0;EN;<compat> 0037 002C;;7;7;N;;;;;
+1F109;DIGIT EIGHT COMMA;No;0;EN;<compat> 0038 002C;;8;8;N;;;;;
+1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;;
+1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;;
+1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;;
+1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;;
+1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L;<compat> 0028 0044 0029;;;;N;;;;;
+1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L;<compat> 0028 0045 0029;;;;N;;;;;
+1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L;<compat> 0028 0046 0029;;;;N;;;;;
+1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L;<compat> 0028 0047 0029;;;;N;;;;;
+1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L;<compat> 0028 0048 0029;;;;N;;;;;
+1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L;<compat> 0028 0049 0029;;;;N;;;;;
+1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L;<compat> 0028 004A 0029;;;;N;;;;;
+1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L;<compat> 0028 004B 0029;;;;N;;;;;
+1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L;<compat> 0028 004C 0029;;;;N;;;;;
+1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L;<compat> 0028 004D 0029;;;;N;;;;;
+1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L;<compat> 0028 004E 0029;;;;N;;;;;
+1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L;<compat> 0028 004F 0029;;;;N;;;;;
+1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L;<compat> 0028 0050 0029;;;;N;;;;;
+1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L;<compat> 0028 0051 0029;;;;N;;;;;
+1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L;<compat> 0028 0052 0029;;;;N;;;;;
+1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L;<compat> 0028 0053 0029;;;;N;;;;;
+1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L;<compat> 0028 0054 0029;;;;N;;;;;
+1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L;<compat> 0028 0055 0029;;;;N;;;;;
+1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L;<compat> 0028 0056 0029;;;;N;;;;;
+1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L;<compat> 0028 0057 0029;;;;N;;;;;
+1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L;<compat> 0028 0058 0029;;;;N;;;;;
+1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L;<compat> 0028 0059 0029;;;;N;;;;;
+1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L;<compat> 0028 005A 0029;;;;N;;;;;
+1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L;<compat> 3014 0053 3015;;;;N;;;;;
+1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;;
+1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;;
+1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;;
+1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;;
+1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;;
+1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;;
+1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;;
+1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L;<square> 0044;;;;N;;;;;
+1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L;<square> 0045;;;;N;;;;;
+1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L;<square> 0046;;;;N;;;;;
+1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L;<square> 0047;;;;N;;;;;
+1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L;<square> 0048;;;;N;;;;;
+1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L;<square> 0049;;;;N;;;;;
+1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L;<square> 004A;;;;N;;;;;
+1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L;<square> 004B;;;;N;;;;;
+1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L;<square> 004C;;;;N;;;;;
+1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L;<square> 004D;;;;N;;;;;
+1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L;<square> 004E;;;;N;;;;;
+1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L;<square> 004F;;;;N;;;;;
+1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L;<square> 0050;;;;N;;;;;
+1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L;<square> 0051;;;;N;;;;;
+1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L;<square> 0052;;;;N;;;;;
+1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L;<square> 0053;;;;N;;;;;
+1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L;<square> 0054;;;;N;;;;;
+1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L;<square> 0055;;;;N;;;;;
+1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L;<square> 0056;;;;N;;;;;
+1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L;<square> 0057;;;;N;;;;;
+1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L;<square> 0058;;;;N;;;;;
+1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L;<square> 0059;;;;N;;;;;
+1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L;<square> 005A;;;;N;;;;;
+1F14A;SQUARED HV;So;0;L;<square> 0048 0056;;;;N;;;;;
+1F14B;SQUARED MV;So;0;L;<square> 004D 0056;;;;N;;;;;
+1F14C;SQUARED SD;So;0;L;<square> 0053 0044;;;;N;;;;;
+1F14D;SQUARED SS;So;0;L;<square> 0053 0053;;;;N;;;;;
+1F14E;SQUARED PPV;So;0;L;<square> 0050 0050 0056;;;;N;;;;;
+1F14F;SQUARED WC;So;0;L;<square> 0057 0043;;;;N;;;;;
+1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
+1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
+1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
+1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;
+1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;
+1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;
+1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;
+1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;
+1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;
+1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;
+1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;
+1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;
+1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;
+1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;
+1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;
+1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;
+1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;
+1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;
+1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;
+1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;
+1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;
+1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;
+1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;
+1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;
+1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;
+1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;;
+1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;;
+1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
+1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
+1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
+1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;
+1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;
+1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;
+1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;
+1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;
+1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;
+1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;
+1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;
+1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;
+1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;
+1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;
+1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;
+1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;
+1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;
+1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;
+1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;
+1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;
+1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;
+1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;
+1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;
+1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;
+1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;
+1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;
+1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;;
+1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;;
+1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;;
+1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;;
+1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;;
+1F190;SQUARE DJ;So;0;L;<square> 0044 004A;;;;N;;;;;
+1F191;SQUARED CL;So;0;L;;;;;N;;;;;
+1F192;SQUARED COOL;So;0;L;;;;;N;;;;;
+1F193;SQUARED FREE;So;0;L;;;;;N;;;;;
+1F194;SQUARED ID;So;0;L;;;;;N;;;;;
+1F195;SQUARED NEW;So;0;L;;;;;N;;;;;
+1F196;SQUARED NG;So;0;L;;;;;N;;;;;
+1F197;SQUARED OK;So;0;L;;;;;N;;;;;
+1F198;SQUARED SOS;So;0;L;;;;;N;;;;;
+1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;;
+1F19A;SQUARED VS;So;0;L;;;;;N;;;;;
+1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;
+1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;
+1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;
+1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;;
+1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;;
+1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;;
+1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;;
+1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;;
+1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;;
+1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;;
+1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;;
+1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;;
+1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;;
+1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;;
+1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;;
+1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;;
+1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;;
+1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;;
+1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;;
+1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;;
+1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;;
+1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;;
+1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;;
+1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;;
+1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;;
+1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;;
+1F200;SQUARE HIRAGANA HOKA;So;0;L;<square> 307B 304B;;;;N;;;;;
+1F201;SQUARED KATAKANA KOKO;So;0;L;<square> 30B3 30B3;;;;N;;;;;
+1F202;SQUARED KATAKANA SA;So;0;L;<square> 30B5;;;;N;;;;;
+1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L;<square> 624B;;;;N;;;;;
+1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L;<square> 5B57;;;;N;;;;;
+1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L;<square> 53CC;;;;N;;;;;
+1F213;SQUARED KATAKANA DE;So;0;L;<square> 30C7;;;;N;;;;;
+1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<square> 4E8C;;;;N;;;;;
+1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L;<square> 591A;;;;N;;;;;
+1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L;<square> 89E3;;;;N;;;;;
+1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L;<square> 5929;;;;N;;;;;
+1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L;<square> 4EA4;;;;N;;;;;
+1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L;<square> 6620;;;;N;;;;;
+1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L;<square> 7121;;;;N;;;;;
+1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L;<square> 6599;;;;N;;;;;
+1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L;<square> 524D;;;;N;;;;;
+1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L;<square> 5F8C;;;;N;;;;;
+1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L;<square> 518D;;;;N;;;;;
+1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L;<square> 65B0;;;;N;;;;;
+1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L;<square> 521D;;;;N;;;;;
+1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L;<square> 7D42;;;;N;;;;;
+1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L;<square> 751F;;;;N;;;;;
+1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L;<square> 8CA9;;;;N;;;;;
+1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L;<square> 58F0;;;;N;;;;;
+1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L;<square> 5439;;;;N;;;;;
+1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L;<square> 6F14;;;;N;;;;;
+1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L;<square> 6295;;;;N;;;;;
+1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L;<square> 6355;;;;N;;;;;
+1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L;<square> 4E00;;;;N;;;;;
+1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<square> 4E09;;;;N;;;;;
+1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L;<square> 904A;;;;N;;;;;
+1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L;<square> 5DE6;;;;N;;;;;
+1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L;<square> 4E2D;;;;N;;;;;
+1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L;<square> 53F3;;;;N;;;;;
+1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L;<square> 6307;;;;N;;;;;
+1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L;<square> 8D70;;;;N;;;;;
+1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<square> 6253;;;;N;;;;;
+1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L;<square> 7981;;;;N;;;;;
+1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L;<square> 7A7A;;;;N;;;;;
+1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L;<square> 5408;;;;N;;;;;
+1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L;<square> 6E80;;;;N;;;;;
+1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L;<square> 6709;;;;N;;;;;
+1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L;<square> 6708;;;;N;;;;;
+1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L;<square> 7533;;;;N;;;;;
+1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L;<square> 5272;;;;N;;;;;
+1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L;<square> 55B6;;;;N;;;;;
+1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L;<compat> 3014 672C 3015;;;;N;;;;;
+1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<compat> 3014 4E09 3015;;;;N;;;;;
+1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<compat> 3014 4E8C 3015;;;;N;;;;;
+1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L;<compat> 3014 5B89 3015;;;;N;;;;;
+1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L;<compat> 3014 70B9 3015;;;;N;;;;;
+1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<compat> 3014 6253 3015;;;;N;;;;;
+1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L;<compat> 3014 76D7 3015;;;;N;;;;;
+1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L;<compat> 3014 52DD 3015;;;;N;;;;;
+1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L;<compat> 3014 6557 3015;;;;N;;;;;
+1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L;<circle> 5F97;;;;N;;;;;
+1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L;<circle> 53EF;;;;N;;;;;
+1F300;CYCLONE;So;0;ON;;;;;N;;;;;
+1F301;FOGGY;So;0;ON;;;;;N;;;;;
+1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;;
+1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;;
+1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;;
+1F305;SUNRISE;So;0;ON;;;;;N;;;;;
+1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;;
+1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;;
+1F308;RAINBOW;So;0;ON;;;;;N;;;;;
+1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;;
+1F30A;WATER WAVE;So;0;ON;;;;;N;;;;;
+1F30B;VOLCANO;So;0;ON;;;;;N;;;;;
+1F30C;MILKY WAY;So;0;ON;;;;;N;;;;;
+1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;;
+1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;;
+1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;;
+1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;;
+1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;
+1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;;
+1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;;
+1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;;
+1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;;
+1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;;
+1F330;CHESTNUT;So;0;ON;;;;;N;;;;;
+1F331;SEEDLING;So;0;ON;;;;;N;;;;;
+1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;;
+1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;;
+1F334;PALM TREE;So;0;ON;;;;;N;;;;;
+1F335;CACTUS;So;0;ON;;;;;N;;;;;
+1F337;TULIP;So;0;ON;;;;;N;;;;;
+1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;;
+1F339;ROSE;So;0;ON;;;;;N;;;;;
+1F33A;HIBISCUS;So;0;ON;;;;;N;;;;;
+1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;;
+1F33C;BLOSSOM;So;0;ON;;;;;N;;;;;
+1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;;
+1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;;
+1F33F;HERB;So;0;ON;;;;;N;;;;;
+1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;;
+1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;;
+1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;;
+1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;;
+1F344;MUSHROOM;So;0;ON;;;;;N;;;;;
+1F345;TOMATO;So;0;ON;;;;;N;;;;;
+1F346;AUBERGINE;So;0;ON;;;;;N;;;;;
+1F347;GRAPES;So;0;ON;;;;;N;;;;;
+1F348;MELON;So;0;ON;;;;;N;;;;;
+1F349;WATERMELON;So;0;ON;;;;;N;;;;;
+1F34A;TANGERINE;So;0;ON;;;;;N;;;;;
+1F34B;LEMON;So;0;ON;;;;;N;;;;;
+1F34C;BANANA;So;0;ON;;;;;N;;;;;
+1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;;
+1F34E;RED APPLE;So;0;ON;;;;;N;;;;;
+1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;;
+1F350;PEAR;So;0;ON;;;;;N;;;;;
+1F351;PEACH;So;0;ON;;;;;N;;;;;
+1F352;CHERRIES;So;0;ON;;;;;N;;;;;
+1F353;STRAWBERRY;So;0;ON;;;;;N;;;;;
+1F354;HAMBURGER;So;0;ON;;;;;N;;;;;
+1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;;
+1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;;
+1F357;POULTRY LEG;So;0;ON;;;;;N;;;;;
+1F358;RICE CRACKER;So;0;ON;;;;;N;;;;;
+1F359;RICE BALL;So;0;ON;;;;;N;;;;;
+1F35A;COOKED RICE;So;0;ON;;;;;N;;;;;
+1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;;
+1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;;
+1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;;
+1F35E;BREAD;So;0;ON;;;;;N;;;;;
+1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;;
+1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;;
+1F361;DANGO;So;0;ON;;;;;N;;;;;
+1F362;ODEN;So;0;ON;;;;;N;;;;;
+1F363;SUSHI;So;0;ON;;;;;N;;;;;
+1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;;
+1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;;
+1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;;
+1F367;SHAVED ICE;So;0;ON;;;;;N;;;;;
+1F368;ICE CREAM;So;0;ON;;;;;N;;;;;
+1F369;DOUGHNUT;So;0;ON;;;;;N;;;;;
+1F36A;COOKIE;So;0;ON;;;;;N;;;;;
+1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;;
+1F36C;CANDY;So;0;ON;;;;;N;;;;;
+1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;;
+1F36E;CUSTARD;So;0;ON;;;;;N;;;;;
+1F36F;HONEY POT;So;0;ON;;;;;N;;;;;
+1F370;SHORTCAKE;So;0;ON;;;;;N;;;;;
+1F371;BENTO BOX;So;0;ON;;;;;N;;;;;
+1F372;POT OF FOOD;So;0;ON;;;;;N;;;;;
+1F373;COOKING;So;0;ON;;;;;N;;;;;
+1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;;
+1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;;
+1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;;
+1F377;WINE GLASS;So;0;ON;;;;;N;;;;;
+1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;;
+1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;;
+1F37A;BEER MUG;So;0;ON;;;;;N;;;;;
+1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;;
+1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;;
+1F380;RIBBON;So;0;ON;;;;;N;;;;;
+1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;;
+1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;;
+1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;;
+1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;;
+1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;;
+1F386;FIREWORKS;So;0;ON;;;;;N;;;;;
+1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;;
+1F388;BALLOON;So;0;ON;;;;;N;;;;;
+1F389;PARTY POPPER;So;0;ON;;;;;N;;;;;
+1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;;
+1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;;
+1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;;
+1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;;
+1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;;
+1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;;
+1F390;WIND CHIME;So;0;ON;;;;;N;;;;;
+1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;;
+1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;;
+1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;;
+1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;;
+1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;;
+1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;;
+1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;;
+1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;;
+1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;;
+1F3A6;CINEMA;So;0;ON;;;;;N;;;;;
+1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;;
+1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;;
+1F3A9;TOP HAT;So;0;ON;;;;;N;;;;;
+1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;;
+1F3AB;TICKET;So;0;ON;;;;;N;;;;;
+1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;;
+1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;;
+1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;;
+1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;;
+1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;;
+1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;;
+1F3B2;GAME DIE;So;0;ON;;;;;N;;;;;
+1F3B3;BOWLING;So;0;ON;;;;;N;;;;;
+1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;;
+1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;;
+1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;;
+1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;;
+1F3B8;GUITAR;So;0;ON;;;;;N;;;;;
+1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;;
+1F3BA;TRUMPET;So;0;ON;;;;;N;;;;;
+1F3BB;VIOLIN;So;0;ON;;;;;N;;;;;
+1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;;
+1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;;
+1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;;
+1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;;
+1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;;
+1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;;
+1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;;
+1F3C3;RUNNER;So;0;ON;;;;;N;;;;;
+1F3C4;SURFER;So;0;ON;;;;;N;;;;;
+1F3C6;TROPHY;So;0;ON;;;;;N;;;;;
+1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;;
+1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;;
+1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;;
+1F3CA;SWIMMER;So;0;ON;;;;;N;;;;;
+1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;;
+1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;;
+1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;;
+1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;;
+1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;;
+1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;;
+1F3E6;BANK;So;0;ON;;;;;N;;;;;
+1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;;
+1F3E8;HOTEL;So;0;ON;;;;;N;;;;;
+1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;;
+1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;;
+1F3EB;SCHOOL;So;0;ON;;;;;N;;;;;
+1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;;
+1F3ED;FACTORY;So;0;ON;;;;;N;;;;;
+1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;;
+1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;;
+1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;;
+1F400;RAT;So;0;ON;;;;;N;;;;;
+1F401;MOUSE;So;0;ON;;;;;N;;;;;
+1F402;OX;So;0;ON;;;;;N;;;;;
+1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;;
+1F404;COW;So;0;ON;;;;;N;;;;;
+1F405;TIGER;So;0;ON;;;;;N;;;;;
+1F406;LEOPARD;So;0;ON;;;;;N;;;;;
+1F407;RABBIT;So;0;ON;;;;;N;;;;;
+1F408;CAT;So;0;ON;;;;;N;;;;;
+1F409;DRAGON;So;0;ON;;;;;N;;;;;
+1F40A;CROCODILE;So;0;ON;;;;;N;;;;;
+1F40B;WHALE;So;0;ON;;;;;N;;;;;
+1F40C;SNAIL;So;0;ON;;;;;N;;;;;
+1F40D;SNAKE;So;0;ON;;;;;N;;;;;
+1F40E;HORSE;So;0;ON;;;;;N;;;;;
+1F40F;RAM;So;0;ON;;;;;N;;;;;
+1F410;GOAT;So;0;ON;;;;;N;;;;;
+1F411;SHEEP;So;0;ON;;;;;N;;;;;
+1F412;MONKEY;So;0;ON;;;;;N;;;;;
+1F413;ROOSTER;So;0;ON;;;;;N;;;;;
+1F414;CHICKEN;So;0;ON;;;;;N;;;;;
+1F415;DOG;So;0;ON;;;;;N;;;;;
+1F416;PIG;So;0;ON;;;;;N;;;;;
+1F417;BOAR;So;0;ON;;;;;N;;;;;
+1F418;ELEPHANT;So;0;ON;;;;;N;;;;;
+1F419;OCTOPUS;So;0;ON;;;;;N;;;;;
+1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;;
+1F41B;BUG;So;0;ON;;;;;N;;;;;
+1F41C;ANT;So;0;ON;;;;;N;;;;;
+1F41D;HONEYBEE;So;0;ON;;;;;N;;;;;
+1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;;
+1F41F;FISH;So;0;ON;;;;;N;;;;;
+1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;;
+1F421;BLOWFISH;So;0;ON;;;;;N;;;;;
+1F422;TURTLE;So;0;ON;;;;;N;;;;;
+1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;;
+1F424;BABY CHICK;So;0;ON;;;;;N;;;;;
+1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;;
+1F426;BIRD;So;0;ON;;;;;N;;;;;
+1F427;PENGUIN;So;0;ON;;;;;N;;;;;
+1F428;KOALA;So;0;ON;;;;;N;;;;;
+1F429;POODLE;So;0;ON;;;;;N;;;;;
+1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;;
+1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;;
+1F42C;DOLPHIN;So;0;ON;;;;;N;;;;;
+1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;;
+1F42E;COW FACE;So;0;ON;;;;;N;;;;;
+1F42F;TIGER FACE;So;0;ON;;;;;N;;;;;
+1F430;RABBIT FACE;So;0;ON;;;;;N;;;;;
+1F431;CAT FACE;So;0;ON;;;;;N;;;;;
+1F432;DRAGON FACE;So;0;ON;;;;;N;;;;;
+1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;;
+1F434;HORSE FACE;So;0;ON;;;;;N;;;;;
+1F435;MONKEY FACE;So;0;ON;;;;;N;;;;;
+1F436;DOG FACE;So;0;ON;;;;;N;;;;;
+1F437;PIG FACE;So;0;ON;;;;;N;;;;;
+1F438;FROG FACE;So;0;ON;;;;;N;;;;;
+1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;;
+1F43A;WOLF FACE;So;0;ON;;;;;N;;;;;
+1F43B;BEAR FACE;So;0;ON;;;;;N;;;;;
+1F43C;PANDA FACE;So;0;ON;;;;;N;;;;;
+1F43D;PIG NOSE;So;0;ON;;;;;N;;;;;
+1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;;
+1F440;EYES;So;0;ON;;;;;N;;;;;
+1F442;EAR;So;0;ON;;;;;N;;;;;
+1F443;NOSE;So;0;ON;;;;;N;;;;;
+1F444;MOUTH;So;0;ON;;;;;N;;;;;
+1F445;TONGUE;So;0;ON;;;;;N;;;;;
+1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;;
+1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;;
+1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;;
+1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;;
+1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;;
+1F451;CROWN;So;0;ON;;;;;N;;;;;
+1F452;WOMANS HAT;So;0;ON;;;;;N;;;;;
+1F453;EYEGLASSES;So;0;ON;;;;;N;;;;;
+1F454;NECKTIE;So;0;ON;;;;;N;;;;;
+1F455;T-SHIRT;So;0;ON;;;;;N;;;;;
+1F456;JEANS;So;0;ON;;;;;N;;;;;
+1F457;DRESS;So;0;ON;;;;;N;;;;;
+1F458;KIMONO;So;0;ON;;;;;N;;;;;
+1F459;BIKINI;So;0;ON;;;;;N;;;;;
+1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;;
+1F45B;PURSE;So;0;ON;;;;;N;;;;;
+1F45C;HANDBAG;So;0;ON;;;;;N;;;;;
+1F45D;POUCH;So;0;ON;;;;;N;;;;;
+1F45E;MANS SHOE;So;0;ON;;;;;N;;;;;
+1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;;
+1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;;
+1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;;
+1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;;
+1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;;
+1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;;
+1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;;
+1F466;BOY;So;0;ON;;;;;N;;;;;
+1F467;GIRL;So;0;ON;;;;;N;;;;;
+1F468;MAN;So;0;ON;;;;;N;;;;;
+1F469;WOMAN;So;0;ON;;;;;N;;;;;
+1F46A;FAMILY;So;0;ON;;;;;N;;;;;
+1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;;
+1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;;
+1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;;
+1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;;
+1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;;
+1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;;
+1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;;
+1F474;OLDER MAN;So;0;ON;;;;;N;;;;;
+1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;;
+1F476;BABY;So;0;ON;;;;;N;;;;;
+1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;;
+1F478;PRINCESS;So;0;ON;;;;;N;;;;;
+1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;;
+1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;;
+1F47B;GHOST;So;0;ON;;;;;N;;;;;
+1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;;
+1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;;
+1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;;
+1F47F;IMP;So;0;ON;;;;;N;;;;;
+1F480;SKULL;So;0;ON;;;;;N;;;;;
+1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;;
+1F482;GUARDSMAN;So;0;ON;;;;;N;;;;;
+1F483;DANCER;So;0;ON;;;;;N;;;;;
+1F484;LIPSTICK;So;0;ON;;;;;N;;;;;
+1F485;NAIL POLISH;So;0;ON;;;;;N;;;;;
+1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;;
+1F487;HAIRCUT;So;0;ON;;;;;N;;;;;
+1F488;BARBER POLE;So;0;ON;;;;;N;;;;;
+1F489;SYRINGE;So;0;ON;;;;;N;;;;;
+1F48A;PILL;So;0;ON;;;;;N;;;;;
+1F48B;KISS MARK;So;0;ON;;;;;N;;;;;
+1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;;
+1F48D;RING;So;0;ON;;;;;N;;;;;
+1F48E;GEM STONE;So;0;ON;;;;;N;;;;;
+1F48F;KISS;So;0;ON;;;;;N;;;;;
+1F490;BOUQUET;So;0;ON;;;;;N;;;;;
+1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;;
+1F492;WEDDING;So;0;ON;;;;;N;;;;;
+1F493;BEATING HEART;So;0;ON;;;;;N;;;;;
+1F494;BROKEN HEART;So;0;ON;;;;;N;;;;;
+1F495;TWO HEARTS;So;0;ON;;;;;N;;;;;
+1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;;
+1F497;GROWING HEART;So;0;ON;;;;;N;;;;;
+1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;;
+1F499;BLUE HEART;So;0;ON;;;;;N;;;;;
+1F49A;GREEN HEART;So;0;ON;;;;;N;;;;;
+1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;;
+1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;;
+1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;;
+1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;;
+1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;;
+1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;;
+1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;;
+1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A3;BOMB;So;0;ON;;;;;N;;;;;
+1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A7;DROPLET;So;0;ON;;;;;N;;;;;
+1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;;
+1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;;
+1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;;
+1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;;
+1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;;
+1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;;
+1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;;
+1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;;
+1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;;
+1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;;
+1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;;
+1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;;
+1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;;
+1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;;
+1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;;
+1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;;
+1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;;
+1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;;
+1F4BA;SEAT;So;0;ON;;;;;N;;;;;
+1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;;
+1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;;
+1F4BD;MINIDISC;So;0;ON;;;;;N;;;;;
+1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;;
+1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;;
+1F4C0;DVD;So;0;ON;;;;;N;;;;;
+1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;;
+1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;;
+1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;;
+1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;;
+1F4C5;CALENDAR;So;0;ON;;;;;N;;;;;
+1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;;
+1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;;
+1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;;
+1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;;
+1F4CA;BAR CHART;So;0;ON;;;;;N;;;;;
+1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;;
+1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;;
+1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;;
+1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;;
+1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;;
+1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;;
+1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;;
+1F4D2;LEDGER;So;0;ON;;;;;N;;;;;
+1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;;
+1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;;
+1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;;
+1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;;
+1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;;
+1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;;
+1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;;
+1F4DA;BOOKS;So;0;ON;;;;;N;;;;;
+1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;;
+1F4DC;SCROLL;So;0;ON;;;;;N;;;;;
+1F4DD;MEMO;So;0;ON;;;;;N;;;;;
+1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
+1F4DF;PAGER;So;0;ON;;;;;N;;;;;
+1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;;
+1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;;
+1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;;
+1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;;
+1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;;
+1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;;
+1F4E6;PACKAGE;So;0;ON;;;;;N;;;;;
+1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;;
+1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;;
+1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;
+1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;
+1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;
+1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;
+1F4EE;POSTBOX;So;0;ON;;;;;N;;;;;
+1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;;
+1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;;
+1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;;
+1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;;
+1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;;
+1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;;
+1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;;
+1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;;
+1F4F7;CAMERA;So;0;ON;;;;;N;;;;;
+1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;;
+1F4FA;TELEVISION;So;0;ON;;;;;N;;;;;
+1F4FB;RADIO;So;0;ON;;;;;N;;;;;
+1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;;
+1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;;
+1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;;
+1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
+1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
+1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
+1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;
+1F508;SPEAKER;So;0;ON;;;;;N;;;;;
+1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;;
+1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;;
+1F50B;BATTERY;So;0;ON;;;;;N;;;;;
+1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;;
+1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;
+1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;
+1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;;
+1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;;
+1F511;KEY;So;0;ON;;;;;N;;;;;
+1F512;LOCK;So;0;ON;;;;;N;;;;;
+1F513;OPEN LOCK;So;0;ON;;;;;N;;;;;
+1F514;BELL;So;0;ON;;;;;N;;;;;
+1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;
+1F516;BOOKMARK;So;0;ON;;;;;N;;;;;
+1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;;
+1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;;
+1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;
+1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;;
+1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;;
+1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;;
+1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;;
+1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;;
+1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;;
+1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;;
+1F525;FIRE;So;0;ON;;;;;N;;;;;
+1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;;
+1F527;WRENCH;So;0;ON;;;;;N;;;;;
+1F528;HAMMER;So;0;ON;;;;;N;;;;;
+1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;;
+1F52A;HOCHO;So;0;ON;;;;;N;;;;;
+1F52B;PISTOL;So;0;ON;;;;;N;;;;;
+1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;;
+1F52D;TELESCOPE;So;0;ON;;;;;N;;;;;
+1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;;
+1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;;
+1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;;
+1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;;
+1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;;
+1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;;
+1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;;
+1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;;
+1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;;
+1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;;
+1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;;
+1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;;
+1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
+1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;;
+1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;;
+1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;;
+1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;;
+1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;;
+1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;;
+1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;;
+1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;;
+1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;;
+1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;;
+1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;;
+1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;;
+1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;;
+1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;;
+1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;;
+1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;;
+1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;;
+1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;;
+1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;;
+1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;;
+1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;;
+1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;;
+1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;;
+1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;;
+1F5FF;MOYAI;So;0;ON;;;;;N;;;;;
+1F600;GRINNING FACE;So;0;ON;;;;;N;;;;;
+1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;
+1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;;
+1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;;
+1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;;
+1F609;WINKING FACE;So;0;ON;;;;;N;;;;;
+1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;;
+1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;;
+1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;
+1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;;
+1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;;
+1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;;
+1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;;
+1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;;
+1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;;
+1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;;
+1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;;
+1F617;KISSING FACE;So;0;ON;;;;;N;;;;;
+1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;;
+1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;;
+1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;;
+1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;;
+1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;;
+1F620;ANGRY FACE;So;0;ON;;;;;N;;;;;
+1F621;POUTING FACE;So;0;ON;;;;;N;;;;;
+1F622;CRYING FACE;So;0;ON;;;;;N;;;;;
+1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;;
+1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;;
+1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;;
+1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;;
+1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;;
+1F629;WEARY FACE;So;0;ON;;;;;N;;;;;
+1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;;
+1F62B;TIRED FACE;So;0;ON;;;;;N;;;;;
+1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;;
+1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;;
+1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;;
+1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;
+1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;;
+1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;;
+1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;;
+1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;;
+1F635;DIZZY FACE;So;0;ON;;;;;N;;;;;
+1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;;
+1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;;
+1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
+1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;
+1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;
+1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;;
+1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;;
+1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;;
+1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;;
+1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;;
+1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;;
+1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;;
+1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;
+1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;;
+1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;;
+1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;;
+1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;;
+1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;;
+1F680;ROCKET;So;0;ON;;;;;N;;;;;
+1F681;HELICOPTER;So;0;ON;;;;;N;;;;;
+1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;;
+1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;;
+1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;;
+1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;;
+1F686;TRAIN;So;0;ON;;;;;N;;;;;
+1F687;METRO;So;0;ON;;;;;N;;;;;
+1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;;
+1F689;STATION;So;0;ON;;;;;N;;;;;
+1F68A;TRAM;So;0;ON;;;;;N;;;;;
+1F68B;TRAM CAR;So;0;ON;;;;;N;;;;;
+1F68C;BUS;So;0;ON;;;;;N;;;;;
+1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;;
+1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;;
+1F68F;BUS STOP;So;0;ON;;;;;N;;;;;
+1F690;MINIBUS;So;0;ON;;;;;N;;;;;
+1F691;AMBULANCE;So;0;ON;;;;;N;;;;;
+1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;;
+1F693;POLICE CAR;So;0;ON;;;;;N;;;;;
+1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;;
+1F695;TAXI;So;0;ON;;;;;N;;;;;
+1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;;
+1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;;
+1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;;
+1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;;
+1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;;
+1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;;
+1F69C;TRACTOR;So;0;ON;;;;;N;;;;;
+1F69D;MONORAIL;So;0;ON;;;;;N;;;;;
+1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;;
+1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;;
+1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;;
+1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;;
+1F6A2;SHIP;So;0;ON;;;;;N;;;;;
+1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;;
+1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;;
+1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;
+1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;
+1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;;
+1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;;
+1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;;
+1F6AA;DOOR;So;0;ON;;;;;N;;;;;
+1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;;
+1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;;
+1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;
+1F6B2;BICYCLE;So;0;ON;;;;;N;;;;;
+1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;;
+1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;;
+1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;;
+1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;;
+1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;;
+1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;;
+1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BB;RESTROOM;So;0;ON;;;;;N;;;;;
+1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;;
+1F6BD;TOILET;So;0;ON;;;;;N;;;;;
+1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;;
+1F6BF;SHOWER;So;0;ON;;;;;N;;;;;
+1F6C0;BATH;So;0;ON;;;;;N;;;;;
+1F6C1;BATHTUB;So;0;ON;;;;;N;;;;;
+1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;;
+1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;;
+1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;;
+1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;;
+1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
+1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
+1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
+1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;;
+1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;;
+1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;;
+1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;;
+1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;;
+1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;;
+1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;;
+1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;;
+1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;;
+1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;;
+1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;;
+1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;;
+1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;;
+1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;;
+1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;;
+1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;;
+1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;;
+1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;;
+1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;;
+1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;;
+1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;;
+1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;;
+1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;;
+1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;;
+1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;;
+1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;;
+1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;;
+1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;;
+1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;;
+1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;;
+1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;;
+1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;;
+1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;;
+1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;;
+1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;
+1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;
+1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;;
+1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;;
+1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;;
+1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;;
+1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;;
+1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;;
+1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;;
+1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;;
+1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;;
+1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;;
+1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;;
+1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;;
+1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;;
+1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;;
+1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;;
+1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;;
+1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;;
+1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;;
+1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;;
+1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;;
+1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;;
+1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;;
+1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;;
+1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;;
+1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;;
+1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;;
+1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;;
+1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;;
+1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;;
+1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;;
+1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;;
+1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;;
+1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;;
+1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;;
+1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;;
+1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;;
+1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;;
+1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;;
+1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;;
+1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;;
+1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;;
+1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;;
+1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;;
+1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;;
+1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;;
+1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;;
+1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;;
+1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;;
+1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;;
+1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;;
+1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;;
+1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;;
+1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;;
+1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;;
+1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;;
+1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;;
+1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;;
+1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;;
+1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;;
+1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;;
+1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;;
+1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;;
+1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;;
+1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;;
+1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;;
+1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;;
+1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;;
+1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;;
+1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;;
+1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;;
+1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;;
+1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;;
+1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;;
+20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
+2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
+2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
+2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
+2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
+2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
+2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
+2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
+2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
+2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
+2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
+2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
+2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
+2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
+2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
+2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
+2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
+2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
+2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
+2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
+2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
+2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
+2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
+2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
+2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
+2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
+2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
+2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
+2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
+2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
+2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
+2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
+2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
+2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
+2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
+2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
+2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
+2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
+2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
+2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
+2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
+2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
+2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
+2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
+2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
+2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
+2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
+2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
+2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
+2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
+2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
+2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
+2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
+2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
+2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
+2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
+2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
+2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
+2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
+2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
+2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
+2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
+2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
+2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
+2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
+2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
+2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
+2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
+2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
+2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
+2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
+2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
+2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
+2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
+2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
+2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
+2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
+2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
+2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
+2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
+2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
+2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
+2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
+2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
+2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
+2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
+2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
+2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
+2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
+2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
+2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
+2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
+2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
+2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
+2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
+2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
+2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
+2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
+2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
+2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
+2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
+2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
+2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
+2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
+2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
+2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
+2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
+2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
+2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
+2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
+2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
+2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
+2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
+2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
+2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
+2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
+2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
+2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
+2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
+2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
+2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
+2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
+2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
+2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
+2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
+2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
+2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
+2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
+2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
+2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
+2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
+2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
+2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
+2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
+2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
+2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
+2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
+2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
+2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
+2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
+2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
+2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
+2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
+2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
+2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
+2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
+2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
+2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
+2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
+2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;
+2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
+2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
+2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
+2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
+2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
+2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
+2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
+2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
+2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
+2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
+2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
+2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
+2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
+2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
+2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
+2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
+2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
+2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
+2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
+2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
+2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
+2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
+2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
+2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
+2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
+2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
+2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
+2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
+2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
+2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
+2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
+2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
+2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
+2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
+2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
+2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
+2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
+2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
+2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
+2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
+2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
+2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
+2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
+2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
+2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
+2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
+2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
+2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
+2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
+2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
+2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
+2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
+2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
+2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
+2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
+2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
+2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
+2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
+2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
+2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
+2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
+2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
+2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
+2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
+2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
+2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
+2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
+2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
+2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
+2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
+2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
+2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
+2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
+2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
+2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
+2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
+2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
+2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
+2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
+2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
+2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
+2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
+2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
+2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
+2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
+2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
+2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
+2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
+2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
+2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
+2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
+2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
+2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
+2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
+2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
+2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
+2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
+2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
+2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
+2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
+2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
+2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
+2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
+2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
+2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
+2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
+2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
+2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
+2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
+2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
+2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
+2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
+2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
+2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
+2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
+2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
+2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
+2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
+2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
+2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
+2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
+2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
+2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
+2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
+2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
+2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
+2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
+2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
+2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
+2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
+2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
+2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
+2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
+2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
+2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
+2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
+2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
+2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
+2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
+2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
+2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
+2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
+2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
+2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
+2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
+2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
+2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
+2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
+2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
+2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
+2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
+2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
+2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
+2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
+2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
+2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
+2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
+2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
+2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
+2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
+2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
+2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
+2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
+2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
+2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
+2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
+2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
+2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
+2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
+2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
+2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
+2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
+2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
+2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
+2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
+2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
+2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
+2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
+2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
+2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
+2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
+2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
+2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
+2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
+2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
+2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
+2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
+2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
+2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
+2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
+2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
+2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
+2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
+2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
+2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
+2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
+2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
+2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
+2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
+2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
+2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
+2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
+2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
+2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
+2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
+2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
+2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
+2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
+2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
+2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
+2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
+2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
+2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
+2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
+2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
+2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
+2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
+2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
+2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
+2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
+2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
+2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
+2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
+2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
+2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
+2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
+2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
+2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
+2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
+2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
+2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
+2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
+2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
+2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
+2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
+2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
+2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
+2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
+2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
+2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
+2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
+2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
+2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
+2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
+2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
+2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
+2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
+2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
+2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
+2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
+2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
+2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
+2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
+2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
+2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
+2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
+2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
+2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
+2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
+2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
+2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
+2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
+2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
+2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
+2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
+2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
+2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
+2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
+2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
+2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
+2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
+2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
+2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
+2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
+2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
+2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
+2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
+2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
+2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
+2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
+2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
+2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
+2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
+2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
+2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
+2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
+2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
+2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
+2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
+2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
+2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
+2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
+2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
+2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
+2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
+2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
+2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
+2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
+2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
+2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
+2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
+2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
+2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
+2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
+2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
+2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
+2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
+2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
+2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
+2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
+2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
+2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
+2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
+2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
+2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
+2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
+2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
+2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
+2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
+2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
+2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
+2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
+2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
+2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
+2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
+2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
+2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
+2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
+2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
+2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
+2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
+2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
+2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
+2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
+2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
+2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
+2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
+2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
+2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
+2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
+2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
+2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
+2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
+2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
+2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
+2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
+2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
+2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
+2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
+2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
+2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
+2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
+2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
+2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
+2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
+2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
+2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
+2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
+2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
+2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
+2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
+2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
+2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
+2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
+2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
+2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
+2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
+2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
+2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
+2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
+2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
+2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
+2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
+2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
+2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
+2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
+2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
+2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
+2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
+2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
+2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
+2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
+2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
+2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
+2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
+2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
+2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
+2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
+2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
+2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
+2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
+2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
+2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
+2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
+2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
+2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
+2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
+E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
+E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
+E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
+E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
+E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
+E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
+E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
+E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
+E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
+E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
+E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
+E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
+E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
+E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
+E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
+E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
+E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
+E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
+E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
+E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
+E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
+E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
+E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
+E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
+E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
+E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
+E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
+E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
+E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
+E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
+E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
+E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
+E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
+E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
+E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
+E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
+E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
+E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
+E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
+E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
+E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
+E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
+E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
+E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
+E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
+E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
+E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
+E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
+E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
+E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
+E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
+E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
+E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
+E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
+E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
+E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
+E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
+E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
+E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
+E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
+E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
+E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
+E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
+E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
+E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
+E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
+E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
+E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
+E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
+E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
+E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
+E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
+E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
+E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
+E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
+E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
+E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
+E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
+E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
+E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
+E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
+E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
+E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
+E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
+E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
+E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
+E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
+E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
+E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
+E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
+E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
+E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
+E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
+E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
+E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
+E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
+E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
+E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
+E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
+E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
+E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
+E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
+E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
+E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
+E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
+E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
+E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
+E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
+E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
+E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
+E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
+E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
+E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
+E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
+E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
+E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
+E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
+E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
+E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
+E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
+E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
+E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
+E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
+E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
+E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
+E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
+E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
+E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
+E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
+E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
+E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
+E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
+E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
+E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
+E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
+E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
+E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
+E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
+E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
+E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
+E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
+E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
+E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
+E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
+E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
+E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
+E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
+E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
+E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
+E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
+E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
+E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
+E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
+E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
+E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
+E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
+E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
+E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
+E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
+E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
+E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
+E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
+E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
+E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
+E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
+E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
+E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
+E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
+E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
+E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
+E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
+E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
+E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
+E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
+E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
+E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
+E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
+E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
+E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
+E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
+E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
+E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
+E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
+E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
+E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
+E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
+E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
+E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
+E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
+E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
+E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
+E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
+E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
+E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
+E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
+E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
+E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
+E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
+E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
+E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
+E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
+E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
+E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
+E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
+E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
+E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
+E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
+E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
+E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
+E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
+E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
+E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
+E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
+E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
+E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
+E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
+E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
+E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
+E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
+E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
+E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
+E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
+E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
+E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
+E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
+E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
+E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
+E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
+E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
+E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
+E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
+E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
+E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
+E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
+E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
+E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
+E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
+E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
+E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
+E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
+E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
+E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
+E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
+E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
+E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
+E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
+E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
+E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
+E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
+E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
+E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
+E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
+E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
+E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
+E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
+E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
+E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
+E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
+E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
+E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
+E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
+E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
+E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
+E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
+E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
+E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
+E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
+E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
+E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
+E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
+E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
+E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
+E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
+E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
+E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
+E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
+E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
+E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
+E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
+E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
+E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
+E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
+E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
+E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
+E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
+E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
+F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
+FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
+100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
+10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
/live/UnicodeData.txt
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/UnicodeData.js
===================================================================
--- live/UnicodeData.js (nonexistent)
+++ live/UnicodeData.js (revision 509)
@@ -0,0 +1,53 @@
+/**
+ * <title>Unicode Character Properties Support Library</title>
+ * @file UnicodeData.js
+ * @version $Id$
+ * @author (C) 2010-2012 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+jsx.regexp.RegExp.propertyClasses = {
+ Cc: "\u0000-\u001F\u007F-\u009F",
+ Cf: "\u00AD\u0600-\u0603\u06DD\u070F\u17B4-\u17B5\u200B-\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\uFEFF\uFFF9-\uFFFB",
+ Co: "\uE000\uF8FF",
+ Cs: "\uD800\uDB7F-\uDB80\uDBFF-\uDC00\uDFFF",
+ Ll: "\u0061-\u007A\u00AA\u00B5\u00BA\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0561-\u0587\u1D00-\u1D2B\u1D62-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7C\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2D00-\u2D25\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A",
+ Lm: "\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D61\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u2094\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA717-\uA71F\uA770\uA788\uA9CF\uAA70\uAADD\uFF70\uFF9E-\uFF9F",
+ Lo: "\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972\u0979-\u097F\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58-\u0C59\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u2135-\u2138\u2D30-\u2D65\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400\u4DB5\u4E00\u9FCB\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uABC0-\uABE2\uAC00\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC",
+ Lt: "\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC",
+ Lu: "\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0531-\u0556\u10A0-\u10C5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uFF21-\uFF3A",
+ Mc: "\u0903\u093E-\u0940\u0949-\u094C\u094E\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u19B0-\u19C0\u19C8-\u19C9\u1A19-\u1A1B\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC",
+ Me: "\u0488-\u0489\u06DE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672",
+ Mn: "\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065E\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0900-\u0902\u093C\u0941-\u0948\u094D\u0951-\u0955\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F90-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1DC0-\u1DE6\u1DFD-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2DE0-\u2DFF\u302A-\u302F\u3099-\u309A\uA66F\uA67C-\uA67D\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26",
+ Nd: "\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19",
+ Nl: "\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF",
+ No: "\u00B2-\u00B3\u00B9\u00BC-\u00BE\u09F4-\u09F9\u0BF0-\u0BF2\u0C78-\u0C7E\u0D70-\u0D75\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835",
+ Pc: "_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F",
+ Pd: "\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u301C\u3030\u30A0\uFE31-\uFE32\uFE58\uFE63\uFF0D",
+ Pe: "\u0029\u005D\u007D\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E-\u301F\uFD3F\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63",
+ Pf: "\u00BB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21",
+ Pi: "\u00AB\u2018\u201B-\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20",
+ Po: "\u0021-\u0023\u0025-\u0027\u002A\u002C\u002E-\u002F\u003A-\u003B\u003F-\u0040\u005C\u00A1\u00B7\u00BF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3-\u05F4\u0609-\u060A\u060C-\u060D\u061B\u061E-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u0964-\u0965\u0970\u0DF4\u0E4F\u0E5A-\u0E5B\u0F04-\u0F12\u0F85\u0FD0-\u0FD4\u104A-\u104F\u10FB\u1361-\u1368\u166D-\u166E\u16EB-\u16ED\u1735-\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944-\u1945\u19DE-\u19DF\u1A1E-\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1C3B-\u1C3F\u1C7E-\u1C7F\u1CD3\u2016-\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE-\u2CFF\u2E00-\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18-\u2E19\u2E1B\u2E1E-\u2E1F\u2E2A-\u2E2E\u2E30-\u2E31\u3001-\u3003\u303D\u30FB\uA4FE-\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE-\uA8CF\uA8F8-\uA8FA\uA92E-\uA92F\uA95F\uA9C1-\uA9CD\uA9DE-\uA9DF\uAA5C-\uAA5F\uAADE-\uAADF\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45-\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A-\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E-\uFF0F\uFF1A-\uFF1B\uFF1F-\uFF20\uFF3C\uFF61\uFF64-\uFF65",
+ Ps: "\u0028\u005B\u007B\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3E\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62",
+ Sc: "\u0024\u00A2-\u00A5\u060B\u09F2-\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20B8\uA838\uFDFC\uFE69\uFF04\uFFE0-\uFFE1\uFFE5-\uFFE6",
+ Sk: "\u005E\u0060\u00A8\u00AF\u00B4\u00B8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384-\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD-\u1FFE\u309B-\u309C\uA700-\uA716\uA720-\uA721\uA789-\uA78A\uFF3E\uFF40\uFFE3",
+ Sm: "\u002B\u003C-\u003E\u007C\u007E\u00AC\u00B1\u00D7\u00F7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2140-\u2144\u214B\u2190-\u2194\u219A-\u219B\u21A0\u21A3\u21A6\u21AE\u21CE-\u21CF\u21D2\u21D4\u21F4-\u22FF\u2308-\u230B\u2320-\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27CA\u27CC\u27D0-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC",
+ So: "\u00A6-\u00A7\u00A9\u00AE\u00B0\u00B6\u0482\u060E-\u060F\u06E9\u06FD-\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0CF1-\u0CF2\u0D79\u0F01-\u0F03\u0F13-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE-\u0FCF\u0FD5-\u0FD8\u109E-\u109F\u1360\u1390-\u1399\u1940\u19E0-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100-\u2101\u2103-\u2106\u2108-\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A-\u213B\u214A\u214C-\u214D\u214F\u2195-\u2199\u219C-\u219F\u21A1-\u21A2\u21A4-\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0-\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u23E8\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u26CD\u26CF-\u26E1\u26E3\u26E8-\u26FF\u2701-\u2704\u2706-\u2709\u270C-\u2727\u2729-\u274B\u274D\u274F-\u2752\u2756-\u275E\u2761-\u2767\u2794\u2798-\u27AF\u27B1-\u27BE\u2800-\u28FF\u2B00-\u2B2F\u2B45-\u2B46\u2B50-\u2B59\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012-\u3013\u3020\u3036-\u3037\u303E-\u303F\u3190-\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836-\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED-\uFFEE\uFFFC-\uFFFD",
+ Zl: "\u2028",
+ Zp: "\u2029",
+ Zs: "\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000"
+};
/live/UnicodeData.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/http.js
===================================================================
--- live/http.js (nonexistent)
+++ live/http.js (revision 509)
@@ -0,0 +1,863 @@
+/**
+ * @fileOverview <title>HTTP Library</title>
+ * @file $Id$
+ * @requires
+ * object.js for jsx.object#isMethod()
+ *
+ * @author (C) 2004-2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx.net == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.net = {};
+}
+
+/**
+ * @idl{WebIDL}
+ *
+ * interface HTTPResponseListener : Function {
+ * boolean HTTPResponseListener(IXMLHttpRequest x);
+ * // Handles the response for the HTTP request initiated with x.send()
+ * // SHOULD return a true-value if successful, a false-value otherwise
+ * };
+ *
+ * interface HTTPMethod {
+ * const string GET="GET"
+ * const string POST="POST"
+ * };
+ *
+ * interface HTTPRequestReadyState {
+ * const int COMPLETED=4
+ * };
+ *
+ * interface HTTPStatus {
+ * const RegExp OK_EXPR=/\b(0|2\d\d|1223)\b/
+ * const RegExp FAILED_EXPR=/\b[45]\d\d\b/
+ * };
+ *
+ * interface HTTPRequest {
+ * attribute string URL
+ * setter=setURL(string)
+ * default=setURL();
+ * attribute HTTPMethod method
+ * setter=setMethod(string)
+ * default=setMethod();
+ * attribute boolean async
+ * setter=setAsync(boolean)
+ * default=setAsync();
+ * attribute string data
+ * setter=setData(string)
+ * default=setData();
+ * attribute string requestType
+ * setter=setRequestType(string)
+ * default=setRequestType();
+ * readonly attribute HTTPRequestReadyState readyState
+ * readonly attribute HTTPStatus status
+ * attribute HTTPResponseListener _responseListener
+ * attribute HTTPResponseListener successListener
+ * attribute HTTPResponseListener errorListener
+ *
+ * HTTPRequest HTTPRequest(
+ * optional string sURL = document.URL,
+ * optional string sMethod = HTTPMethod.GET,
+ * optional boolean bAsync = true,
+ * optional HTTPResponseListener fSuccessListener = null,
+ * optional HTTPResponseListener fErrorListener = null);
+ * // URL=sURL, method=sMethod, async=bAsync,
+ * // successListener=fSuccessListener, errorListener=fErrorListener
+ *
+ * boolean setURL(optional string sURL = "");
+ * // URL=sURL
+ *
+ * boolean setMethod(optional string sMethod = HTTPMethod.GET);
+ * // method=sMethod
+ *
+ * boolean setAsync(optional boolean bAsync = true);
+ * // async=bAsync
+ *
+ * boolean setData(optional string sData = "");
+ * // data=sData
+ *
+ * boolean setRequestType(
+ * optional string sRequestType = "application/x-www-form-urlencoded");
+ * // requestType=sRequestType
+ *
+ * boolean send(optional string sData = null,
+ * optional string sURL = document.URL,
+ * optional string sMethod = HTTPMethod.GET,
+ * optional boolean bAsync = true);
+ * // URL=sURL, method=sMethod
+ * };
+ *
+ * @end
+ */
+jsx.net.http = {
+ /** @version */
+ version: "0.1.$Revision$ ($Date$)",
+ copyright: "Copyright \xA9 2004-2012",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+
+ /**
+ * Creates a new <code>Request</code> object.
+ *
+ * You can set up response listeners per argument (see below), or
+ * {@link jsx.net.http.Request.prototype#setResponseListener setResponseListener()},
+ * {@link jsx.net.http.Request.prototype#setSuccessListener setSuccessListener()},
+ * and {@link jsx.net.http.Request.prototype#setErrorListener setErrorListener()};
+ * then call {@link jsx.net.http.Request.prototype#send send()} to submit
+ * the request.
+ *
+ * NOTE: The objects so created are not thread-safe. You should
+ * not modify their properties while another request with the same
+ * object is in progress. When in doubt, create a new object for
+ * each request. (This issue may be fixed in a later version.)
+ *
+ * @param {string} sURL = document.URL
+ * Request URL. The default is the URL of the sending resource.
+ * @param {string} sMethod = jsx.net.http.Request.method.GET
+ * Request method. Use the <code>jsx.net.http.Request.method.GET</code>
+ * (default) and <code>.POST</code> properties to avoid problems
+ * caused by case mismatch, and other typos.
+ * @param {boolean} bAsync = true
+ * Pass <code>true</code> to make an asynchronous request (default),
+ * that is, a request that is processed in the background and does
+ * not interrupt user operation.
+ * @param {jsx.net.http.ResponseListener} fSuccessListener = null
+ * The function to handle the response of a successful request
+ * (default: <code>null</code>).
+ * @param {jsx.net.http.ResponseListener} fErrorListener = null
+ * The function to handle the response of a request that failed
+ * (default: <code>null</code>).
+ * @constructor
+ */
+ Request: function (sURL, sMethod, bAsync, fSuccessListener, fErrorListener) {
+ this.setURL(sURL, true);
+ this.setMethod(sMethod);
+ this.setAsync(bAsync);
+ this.setSuccessListener(fSuccessListener);
+ this.setErrorListener(fErrorListener);
+ this.setData();
+ this.setRequestType();
+ }
+};
+
+/**
+ * @namespace
+ * @name jsx.net.http.Request
+ */
+jsx.object.extend(jsx.net.http.Request, {
+ /**
+ * @namespace
+ */
+ method: {
+ /**
+ * Use the predefined properties to avoid problems
+ * caused by case mismatch and other typos.
+ */
+ GET: "GET",
+ POST: "POST"
+ },
+
+ /**
+ * @namespace
+ */
+ readyState: {
+ UNINITIALIZED: 0,
+ LOADING: 1,
+ LOADED: 2,
+ INTERACTIVE: 3,
+ COMPLETED: 4
+ },
+
+ /**
+ * @namespace
+ */
+ status: {
+ /*
+ * NOTE: MSXML translates 204 to 1223, see
+ * https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223
+ */
+ OK_EXPR: /\b(0|2\d\d|1223)\b/,
+ LOCAL_NONE: 0,
+
+ CONTINUE: 100,
+ SWITCH_PROTOCOL: 101,
+
+ OK: 200,
+ CREATED: 201,
+ ACCEPTED: 202,
+ NONAUTHOR_INFO: 203,
+ NO_CONTENT: 204,
+ RESET_CONTENT: 205,
+ PARTIAL_CONTENT: 206,
+
+ MULTIPLE_CHOICES: 300,
+ MOVED_PERMANENTLY: 301,
+ FOUND: 302,
+ SEE_OTHER: 303,
+ NOT_MODIFIED: 304,
+ USE_PROXY: 305,
+ TEMP_REDIR: 307,
+
+ FAILED_EXPR: /\b[45]\d\d\b/,
+
+ CLIENT_ERROR_EXPR: /\b4\d\d\b/,
+ BAD_REQUEST: 400,
+ UNAUTHORIZED: 401,
+ PAYMENT_REQUIRED: 402,
+ FORBIDDEN: 403,
+ NOT_FOUND: 404,
+ METHOD_NOT_ALLOWED: 405,
+ NOT_ACCEPTABLE: 406,
+ PROXY_AUTH_REQUIRED: 407,
+ REQ_TIMEOUT: 408,
+ CONFLICT: 409,
+ GONE: 410,
+ LENGTH_REQUIRED: 411,
+ PRECOND_FAILED: 412,
+ REQ_ENTITY_TOO_LARGE: 413,
+ REQ_URI_TOO_LONG: 414,
+ UNSUPP_MEDIA_TYPE: 415,
+ REQ_RANGE_NOT_SUITABLE: 416,
+ EXPECT_FAILED: 417,
+
+ SERVER_ERROR_EXPR: /\b5\d\d\b/,
+ INT_SERVER_ERROR: 500,
+ NOT_IMPLEMENTED: 501,
+ BAD_GATEWAY: 502,
+ SVC_UNAVAIL: 503,
+ GATEWAY_TIMEOUT: 504,
+ HTTP_VER_NOT_SUPP: 505
+ }
+});
+
+jsx.net.http.Request.prototype = {
+ constructor: jsx.net.http.Request,
+
+ /**
+ * Cached XHR object
+ *
+ * @protected
+ */
+ _xhr: null,
+
+ requestHeaders: jsx.object.getDataObject(),
+
+ useCache: true,
+
+ /**
+ * Method to be called onreadystatechange
+ *
+ * @private
+ * @function
+ */
+ _responseListener: (function() {
+ var
+ Request = jsx.net.http.Request,
+ jsx_object = jsx.object,
+ oStatus = Request.status;
+
+ /**
+ * @param {XMLHttpRequest} response
+ */
+ return function (response) {
+ if (response.readyState === Request.readyState.COMPLETED)
+ {
+ var reqStatus = response.status;
+ if (oStatus.OK_EXPR.test(reqStatus))
+ {
+ if (jsx_object.isMethod(this.successListener))
+ {
+ return this.successListener(response);
+ }
+ }
+ else if (oStatus.FAILED_EXPR.test(reqStatus))
+ {
+ if (jsx_object.isMethod(this.errorListener))
+ {
+ this.errorListener(response);
+ }
+ }
+ }
+ };
+ }()),
+
+ /**
+ * Sets the <code>URL</code> property.
+ *
+ * @param {string} sURL
+ * If not provided or a false-value, the
+ * URL of the sending recource is set.
+ * @param {boolean} bDontEncode (optional)
+ * If <code>true</code>, do not encode the request URI.
+ */
+ setURL: function (sURL, bDontEncode) {
+ if (!bDontEncode && sURL)
+ {
+ sURL = encodeURI(sURL);
+ }
+
+ /**
+ * @type string
+ */
+ this.URL = (sURL || document.URL);
+ },
+
+ /**
+ * Sets the <code>method</code> property. Use the
+ * <code>HTTPRequest.method.(GET|POST)</code> properties
+ * to avoid problems with character case and typos.
+ *
+ * @param {string} sMethod (optional)
+ * If not provided or a false-value, the value
+ * of <code>HTTPRequest.method.GET</code> is used.
+ */
+ setMethod: function (sMethod) {
+ this.method =
+ sMethod
+ ? String(sMethod).toUpperCase()
+ : this.constructor.method.GET;
+ },
+
+ /**
+ * Defines whether the request should be synchronous (blocking the UA until
+ * the response was fully received) or asynchronous (waiting for the
+ * response to be fully received in the background, this is the default
+ * and recommended).
+ *
+ * @param {boolean} bAsync (optional)
+ * If not provided or a true-value, the request will be asynchronous.
+ */
+ setAsync: function (bAsync) {
+ this.async = (typeof bAsync == "undefined" ? true : !!bAsync);
+ },
+
+ /**
+ * Defines the response Listener method to be used for handling
+ * requests.
+ *
+ * A <code>HTTPRequest</code> object is always initialized with
+ * an inherited default response Listener that calls
+ * {@link HTTPRequest.prototype#successListener() successListener()}
+ * on success, and
+ * {@link HTTPRequest.prototype#errorListener() errorListener()}
+ * on failure. Once initialized, passing a reference to a
+ * non-callable object as argument, throws an
+ * {@link jsx#InvalidArgumentError InvalidArgumentError}
+ * exception.
+ *
+ * @param {HTTPResponseListener} fResponseListener
+ * @throws jsx.InvalidArgumentError if the argument is not a method
+ */
+ setResponseListener: function (fResponseListener) {
+ /* initialization */
+ if (typeof fResponseListener == "undefined"
+ && typeof this._responseListener == "undefined")
+ {
+ this._responseListener = new jsx.net.http.ResponseListener();
+ return true;
+ }
+
+ if (jsx.object.isMethod(fResponseListener))
+ {
+ this._responseListener = fResponseListener;
+ return (this._responseListener == fResponseListener);
+ }
+
+ jsx.throwThis("jsx.InvalidArgumentError",
+ "jsx:HTTPRequest::setResponseListener: Argument is not a method");
+ return false;
+ },
+
+ /**
+ * Defines a response listener method to be used for handling
+ * successful requests.
+ *
+ * An <code>HTTPRequest</code> object is always initialized with
+ * an inherited dummy success listener (a {@link jsx.net.http.ResponseListener}
+ * instance) that does nothing, if you do not specify one. Once initialized,
+ * passing a reference to a non-callable object as argument throws an
+ * {@link jsx#InvalidArgumentError InvalidArgumentError}
+ * exception.
+ *
+ * @param {HTTPResponseListener} fSuccessListener
+ * <code>true</code> if the listener could be successfully
+ * set or changed; <code>false</code> on error, unless an exception is thrown.
+ * @throws jsx.InvalidArgumentError if the argument is not a method
+ * @return {Request} This object on success, <code>null</code> otherwise
+ */
+ setSuccessListener: function (fSuccessListener) {
+ /* initialization */
+ if (typeof fSuccessListener == "undefined"
+ && typeof this.successListener == "undefined")
+ {
+ this.successListener = new jsx.net.http.ResponseListener();
+ return this;
+ }
+
+ if (typeof fSuccessListener == "function")
+ {
+ this.successListener = fSuccessListener;
+ return (this.successListener == fSuccessListener) ? this : null;
+ }
+
+ jsx.throwThis("jsx.InvalidArgumentError",
+ "jsx:HTTPRequest::setResponseListener: Argument is not a method");
+ return null;
+ },
+
+ /**
+ * Defines the response listener method to be used for handling
+ * unsuccessful requests.
+ *
+ * An <code>HTTPRequest</code> object is always initialized with
+ * an inherited dummy error listener that does nothing (a
+ * {@link jsx.net.http.ResponseListener} instance), if you
+ * do not specify one. Once initialized, passing a reference
+ * to a non-callable object as argument throws an
+ * {@link jsx#InvalidArgumentError InvalidArgumentError}
+ * exception.
+ *
+ * @param {HTTPResponseListener} fErrorListener
+ * @throws jsx.InvalidArgumentError if the argument is not a method
+ */
+ setErrorListener: function (fErrorListener) {
+ if (typeof fErrorListener == "undefined"
+ && typeof this.errorListener == "undefined")
+ {
+ this.errorListener = new jsx.net.http.ResponseListener();
+ return true;
+ }
+
+ if (jsx.object.isMethod(fErrorListener))
+ {
+ this.errorListener = fErrorListener;
+ return (this.errorListener == this.errorListener);
+ }
+
+ jsx.throwThis('jsx.InvalidArgumentError',
+ "jsx:HTTPRequest::setErrorListener: Argument is not a method");
+ return false;
+ },
+
+ /**
+ * Sets the <code>data</code> property.
+ *
+ * @param {string} sData (optional)
+ * If not provided or a false-value, sets
+ * the property to the empty string.
+ * @see HTTPRequest.prototype#resetData()
+ */
+ setData: function (sData) {
+ this.data = (sData || "");
+ return this;
+ },
+
+ /**
+ * Resets the <code>data</code> property to the empty string.
+ *
+ * @see HTTPRequest.prototype#setData()
+ */
+ resetData: function () {
+ this.setData();
+ },
+
+ /**
+ * Retrieves the data to send in the request, and optionally the request
+ * method, from an (X)HTML form. TODO: select[multiple] elements
+ *
+ * @param {HTMLFormElement} f
+ * @param {boolean} bUseFormMethod (optional)
+ * If <code>true</code>, the form's request method becomes the
+ * <code>HTTPRequest</code> object's request method. The default
+ * is <code>false</code>.
+ * @return boolean
+ */
+ getDataFromForm: function (f, bUseFormMethod) {
+ var result = false, es, len;
+
+ if (f && (es = f.elements) && (len = es.length))
+ {
+ if (bUseFormMethod)
+ {
+ this.setMethod(f.method);
+ }
+
+ var aData = [];
+
+ for (var i = 0; i < len; i++)
+ {
+ var o = es[i];
+ if (o.name)
+ {
+ aData.push(encodeURIComponent(o.name) + "=" + encodeURIComponent(o.value != "" ? o.value : ""));
+ }
+ }
+
+ this.data = aData.join("&");
+ result = true;
+ }
+
+ return result;
+ },
+
+ /**
+ * Sets the Content-Type for the HTTP request. The default is
+ * "application/x-www-form-urlencoded" to indicate form submission,
+ * which is what Web browsers send as default then, although this
+ * media type is currently not registered with IANA.
+ *
+ * @param {string} sRequestType
+ * <code>"application/x-www-form-urlencoded"</code>, if omitted or
+ * a false-value (like "", the empty string).
+ * @param {string} sEncoding
+ * Character encoding of the message body
+ * @return {jsx.net.http.Request}
+ * This object
+ */
+ setRequestType: function (sRequestType, sEncoding) {
+ this.requestType =
+ (sRequestType || "application/x-www-form-urlencoded")
+ + (sEncoding ? "; charset=" + sEncoding : "");
+
+ return this;
+ },
+
+ /**
+ * Sets a request header field value
+ *
+ * @param name
+ * @param value
+ * @return {jsx.net.http.Request}
+ * This object
+ */
+ setRequestHeader: function (name, value) {
+ this.requestHeaders[name] = value;
+ return this;
+ },
+
+ /**
+ * Sets additional request header field values
+ */
+ setRequestHeaders: (function () {
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ /**
+ * @param {Object} obj
+ * Object specifying the additional header fields for the
+ * next request. Names of own properties of this object
+ * define the header field names, their values the corresponding
+ * field values.
+ * @return {jsx.net.http.Request}
+ * This object
+ */
+ return function (obj) {
+ for (var name in obj)
+ {
+ if (_hasOwnProperty(obj, name))
+ {
+ this.requestHeaders[name] = obj[name];
+ }
+ }
+
+ return this;
+ };
+ }()),
+
+ dontCache: function () {
+ this.useCache = false;
+ return this;
+ },
+
+ /**
+ * Returns a reference to an XML HTTP Request object. Reuses an existing
+ * object if possible (if it has processed the previous request); creates
+ * a new object if necessary;
+ *
+ * @protected
+ * @return {IXMLHttpRequest}
+ * A reference to an XML HTTP Request object or <code>null</code>,
+ * if no such object can be created.
+ */
+ _getXHR: function () {
+ var
+ jsx_global = jsx.global,
+ jsx_object = jsx.object,
+ x = this._xhr;
+
+ /* Reuse existing XHR instance if possible */
+ if (x !== null
+ && x.readyState == this.constructor.readyState.COMPLETED)
+ {
+ return x;
+ }
+
+ /*
+ * Create new XHR instance:
+ * Feature detection based on Jim Ley's XML HTTP Request tutorial
+ * at <http://jibbering.com/2002/4/httprequest.html>
+ */
+
+ /* Initialize to detect failure later */
+ x = null;
+
+ /*
+ * IE 6+ (JScript allows for conditional compilation; an ordinary comment
+ * to other script engines). Note that IE 7 supports XMLHttpRequest() but
+ * currently not for `file:' URIs, so we don't prefer that wrapper (see
+ * <http://xhab.blogspot.com/2006/11/ie7-support-for-xmlhttprequest.html>).
+ */
+ if (jsx_object.isMethod(jsx_global, "ActiveXObject"))
+ {
+ /*@cc_on @*/
+ /*@if (@_jscript_version >= 5)
+ try
+ {
+ // TODO: Try this first?
+ // new ActiveXObject("Msxml2.XMLHTTP");
+
+ // MSXML 3.0-
+ x = new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ catch (e)
+ {
+ x = null;
+ }
+ @end @*/
+ }
+
+ /* Gecko and Opera 8.1+ */
+ if (!x && jsx_object.isMethod(jsx_global, "XMLHttpRequest"))
+ {
+ jsx.tryThis(
+ function () { x = new XMLHttpRequest(); },
+ function () { x = null; });
+ }
+
+ /* IceBrowser */
+ if (!x && typeof window != "undefined"
+ && jsx_object.isMethod(window, "createRequest"))
+ {
+ jsx.tryThis(
+ function () { x = window.createRequest(); },
+ function () { x = null; });
+ }
+
+ /* Update cache if unused */
+ if (x && this._xhr === null)
+ {
+ this._xhr = x;
+ }
+
+ return x;
+ },
+
+ /**
+ * Submits the HTTP request.
+ *
+ * @param {string} sData (optional)
+ * The data to form the request body. If the request method is "GET",
+ * this argument is ignored and <code>null</code> is used instead (no body).
+ * If the request method is "POST", and this value is not provided, the
+ * value defaults to that of the <code>data</code> property, which is
+ * the empty string if not set different previously.
+ * @param {string} sURL (optional)
+ * The request URL. If not provided, this value defaults to that of the
+ * <code>URL</code> property, which is the empty string if not set
+ * different previously.
+ * @param {string} sMethod (optional)
+ * The request method. If not provided, this value defaults to that of
+ * the <code>HTTPRequest.method.GET</code> property, which is "GET".
+ * @param {boolean} bAsync (optional)
+ * The request is asynchronous if <code>true</code> is passed, synchronous
+ * if <code>false</code> is passed. If not provided, this value defaults
+ * to that of the <code>async</code> property, which is <code>true</code>
+ * if not set different previously.
+ * @return {boolean}
+ * <code>true</code> (async) or what was returned by the success
+ * listener (sync) if the XHR object could be created and
+ * <code>IXMLHTTPRequest::send()</code> was successful;
+ * <code>false</code> otherwise. Note that for asynchronous handling
+ * "successful" does not imply that the server has actually received
+ * the message, and responded with an OK status code; only that the
+ * method could be called successfully.
+ */
+ send: function (sData, sURL, sMethod, bAsync) {
+ var
+ jsx_object = jsx.object,
+ C = this.constructor,
+ x = this._getXHR();
+
+ if (!x || !jsx_object.isMethod(x, "open"))
+ {
+ return false;
+ }
+
+ /* Assume everything goes smoothly from here */
+ var result = true;
+
+ if (arguments.length < 1)
+ {
+ sData = this.data;
+ }
+
+ if (arguments.length < 2)
+ {
+ sURL = this.URL;
+ }
+
+ if (arguments.length < 3)
+ {
+ sMethod = this.method;
+ }
+
+ sMethod = sMethod.toUpperCase();
+
+ var bGET = (sMethod == C.method.GET);
+
+ bAsync = (arguments.length > 3) ? !!bAsync : this.async;
+
+ x.open(
+ sMethod,
+ sURL
+ + ((bGET && (sData || !this.useCache))
+ ? (!/[?&]$/.test(sURL)
+ ? (sURL.indexOf("?") < 0 ? "?" : "&")
+ : "")
+ + sData
+ + (!this.useCache
+ ? (sData ? "&" : "")
+ + "timestamp=" + (new Date()).getTime()
+ : "")
+ : ""),
+ bAsync);
+
+ var me = this;
+
+ if (jsx_object.isMethod(x, "setRequestHeader"))
+ {
+ /* NOTE: Failure to call this method is _not_ considered a fatal error. */
+ jsx.tryThis(
+ function () {
+ x.setRequestHeader("Content-Type", me.requestType);
+
+ if (!this.useCache)
+ {
+ this.setRequestHeaders({
+ "If-Modified-Since": (new Date(0)).toUTCString()
+ });
+ }
+
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+ var requestHeaders = me.requestHeaders;
+
+ for (var name in requestHeaders)
+ {
+ if (_hasOwnProperty(requestHeaders, name))
+ {
+ x.setRequestHeader(name, requestHeaders[name]);
+ }
+ }
+ }
+ );
+ }
+
+ if (bAsync)
+ {
+ x.onreadystatechange = (function(x2) {
+ return function () {
+ // alert(x.readyState);
+ // alert(x.status);
+
+ // console.log("readyState = %i, status = %i", x.readyState, x.status);
+ // console.log(C.status.OK_EXPR);
+
+ if (jsx_object.isMethod(me._responseListener))
+ {
+ me._responseListener(x2);
+ }
+
+ /* Let the garbage collector handle this per the closure */
+// if (x2.readyState == C.readyState.COMPLETED)
+// {
+// x2 = null;
+// }
+ };
+ }(x));
+ }
+
+ jsx.tryThis(
+ function () { x.send(bGET ? null : (sData || me.data)); },
+ function () { result = false; me.errorListener(x); });
+
+ if (!bAsync)
+ {
+ if (jsx_object.isMethod(this._responseListener))
+ {
+ result = this._responseListener(x);
+ }
+
+ /* Handle stopped servers */
+// jsx.tryThis(
+// function () {
+// if (C.status.OK_EXPR.test(x.status)) {
+// result = true;
+// }
+// }
+// );
+
+ /* TODO: Is this error-prone? */
+// x = null;
+ }
+
+ return result;
+ }
+};
+
+/**
+ * Creates a new HTTPResponseListener object.
+ *
+ * A HTTPResponseListener object is a specialized Function object
+ * that takes an IXMLHttpRequest object <var>x</var> as its only
+ * argument. This method is a factory to create such an object.
+ *
+ * Recommended usage:
+ * <pre><code>
+ * var f = jsx.net.http.ResponseListener(
+ * 'statement;',
+ * + 'statement;'
+ * );
+ * </code></pre>
+ *
+ * @param sCode
+ * @return Function
+ * @constructor
+ */
+jsx.net.http.ResponseListener = function (sCode) {
+ return Function("x", sCode + "" || "");
+};
+
+/* Usage: */
+// var x = new HTTPRequest("", HTTPRequest.method.GET, true, processResponse);
+/* ... */
+// x.send();
\ No newline at end of file
/live/http.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/lcars.js
===================================================================
--- live/lcars.js (nonexistent)
+++ live/lcars.js (revision 509)
@@ -0,0 +1,550 @@
+if (!this.dhtml)
+{
+ var dhtml = new Object();
+ dhtml.supported = false;
+ dhtml.visibility = function() {};
+}
+
+function accessing()
+{
+ if (dhtml.supported)
+ {
+ document.write(
+ '<div class="standby" id="div_status">ACCESSING FILE <span id="dots"'
+ + '>&nbsp;<\/span><\/div>');
+ }
+}
+
+
+function loadIdx()
+{
+ if (dhtml.supported)
+ {
+ document.write(
+ '<div class="standby" style="visibility: none;" id="div_status"'
+ + '>LOADING INDEX <span id="dots">&nbsp;</span></div>');
+ }
+}
+
+function animDots()
+{
+ var dotString = "";
+
+ for (var i = 0; i < animDots.dotCounter; i++)
+ {
+ dotString += ". ";
+ }
+
+ if (dhtml.setCont)
+ {
+ dhtml.setCont("id", "dots", null, dotString);
+ }
+
+ if (dotCounter == 3)
+ {
+ animDots.dotCounter = 0;
+ }
+ else
+ {
+ animDots.dotCounter++;
+ }
+}
+animDots.dotCounter = 0;
+
+// disable both "dot" methods until reusing the "status" element works
+/*
+function dots()
+{
+ if (dhtml.supported && dhtml.visibility)
+ {
+ dots.divContent = getElem("id", "div_content");
+ dots.divStatus = getElem("id", "div_status"), f;
+ if (dots.divContent && dots.divStatus)
+ {
+ dhtml.visibility(dots.divContent, false);
+
+ if (typeof divStatus.left != "undefined")
+ {
+ dots.divStatus.left = document.body.offsetWidth;
+ }
+
+ dhtml.visibility(divStatus, true);
+ }
+ else if ((dots.f = parent.frames['ufpdb_banner']))
+ {
+ dots.f.spanStatus.className = "standby";
+ dhtml.setTextContent(dots.f.spanStatus, "ACCESSING FILE");
+ }
+ }
+
+ if (dhtml.supported && dots.divContent && dots.divStatus)
+ {
+ dots.anim = window.setInterval("animDots();", 1000);
+ }
+}
+
+function undots()
+{
+ if (dhtml.supported)
+ {
+ window.clearInterval(dots.anim);
+ if (dots.divContent && dots.divStatus)
+ {
+ dots.divStatus.style.visibility = "hidden";
+ dots.divContent.style.visibility = "visible";
+ }
+ else
+ {
+ dots.f.spanStatus.className = "";
+ dhtml.setTextContent(f.spanStatus, "DATABASE");
+ }
+ }
+}
+*/
+function dots() {}
+function undots() {}
+
+function getOffsets(a)
+{
+ var offset = 0;
+
+ for (var i = 0, len = a.length; i < len; i++)
+ {
+ offset += a[i];
+ a[i] = offset;
+ }
+
+ return a;
+}
+
+function blendWords(o, bBlendIn, iDelay)
+{
+ if (!iDelay)
+ {
+ iDelay = 1000;
+ }
+
+ if (o)
+ {
+ var sCont = getCont(o);
+ if (sCont)
+ {
+ // blendWords.targets.push({target: o, timeouts: []});
+ // var id = blendWords.targets.length - 1;
+
+ var aWords = sCont.split(/\s+/), i, len;
+
+ for (i = aWords.length; i--;)
+ {
+ aWords[i] = {
+ value: aWords[i],
+ delay: iDelay * Math.floor(aWords[i].length / sCont.length)
+ };
+ }
+
+ if (bBlendIn)
+ {
+ var t = function()
+ {
+ window.clearTimeout(
+ //blendWords.targets[id].timeouts[i]
+ t);
+ setTextContent(
+ // blendWords.targets[id].target,
+ o,
+ // getTextContent(blendWords.targets[id].target)
+ getTextContent(o)
+ + ' '
+ + aWords[i].value);
+ };
+
+ t.toString = function() {
+ return 't();';
+ };
+
+ // var _setTimeout = function(f, delay, args)
+ // {
+ // f.apply(this, args);
+ // };
+
+ for (i = 0, len = aWords.length; i < len; i++)
+ {
+ // blendWords.targets[id].timeouts[i] =
+ var t2 = window.setTimeout(t, aWords[i].delay);
+ }
+ }
+ else
+ {
+ //
+ }
+ }
+ }
+}
+/**
+ * @property : number = Internal ID of accessed object
+ */
+blendWords.targets = new Array();
+
+/* LCARS widget prototypes */
+
+function LCARSWidget(x, y)
+{
+ this.moveTo(x, y);
+ this.elem = dhtml.createElement('div');
+}
+
+LCARSWidget.prototype = {
+ constructor: LCARSWidget,
+
+ moveTo: function(x, y) {
+ this.x = x;
+ this.y = y;
+ if (dhtml.getStyle(this.obj, "display") == 'visible'){this.repaint();}
+ }
+};
+
+/**
+ * Creates a new LCARS Timer widget.
+ *
+ * Takes up to three arguments. The first two may define the
+ * relative position of the corresponding block element in CSS
+ * units of length, while the third one allows to initialize
+ * the timer in milliseconds.
+ *
+ * @param {String} x [optional]
+ * @param {String} y [optional]
+ * @param {Number} nStart [optional]
+ */
+function LCARSTimer(x, y, nStart)
+{
+ LCARSWidget.call(this, x, y);
+ this.reset();
+}
+
+LCARSTimer.prototype = {
+ constructor: LCARSTimer,
+
+ reset: function()
+ {
+ this.value = 0;
+ }
+};
+
+if (jsx.object.getFeature(jsx, "dom", "widgets"))
+{
+ /**
+ * @type lcars
+ * @memberOf __lcars
+ * @namespace
+ */
+ var lcars = (/** @constructor */ function () {
+ "use strict";
+
+ return {
+ /**
+ * @type Content
+ * @memberOf lcars
+ * @extends jsx.dom.widgets.Container
+ */
+ Content: (function lcars_Content () {
+ lcars_Content._super.apply(this, arguments);
+ }).extend(jsx.dom.widgets.Container, {
+ init: function () {
+ this._target = document.getElementById("content");
+ },
+
+ /**
+ * @param {String} title
+ * @param {String} language
+ */
+ showMap: function (language) {
+ var content = document.getElementById("content");
+
+ var map = lcars._gmaps_map;
+ if (!map)
+ {
+ /* Disable transition while map is loading */
+ content.style.transition = "none";
+ content.className = "fixed";
+ this.setInnerHTML(
+ // '<select><option>Google Maps</option><option>OpenStreetMap</option></select>'
+ '<div id="map-canvas" style="position: absolute; width: 100%; height: 100%"></div>');
+ this.update();
+ }
+
+ var script = this._gmaps_script;
+ if (!script)
+ {
+ script = document.createElement("script");
+ script.type = "text/javascript";
+ script.src = "http://maps.googleapis.com/maps/api/js"
+ + "?key=AIzaSyCpW3bu57j4V7_vcK_cVpvFkXMmKkKgADI"
+ + "&sensor=true&callback=lcars.multiDisplay.initGMap"
+ + "&language=" + language;
+ document.body.appendChild(script);
+ if (script.parentNode == document.body)
+ {
+ this._gmaps_script = script;
+ }
+ }
+ else
+ {
+ lcars.multiDisplay.initGMap();
+ }
+ }
+ }),
+
+ /**
+ * @type MultiDisplay
+ * @extends jsx.dom.widgets.Container
+ */
+ MultiDisplay: (function lcars_MultiDisplay () {
+ lcars_MultiDisplay._super.apply(this, arguments);
+ }).extend(jsx.dom.widgets.Container, {
+ TEXT_ACCURACY: "accuracy",
+ TEXT_CURRENT_COORDS: "Your current coordinates on Terra",
+ TEXT_NOT_AVAILABLE: "N/A",
+
+ /**
+ * @memberOf lcars.MultiDisplay
+ * @type jsx.dom.widgets.Container
+ * @protected
+ */
+ _title: null,
+
+ /**
+ * @type jsx.dom.widgets.Container
+ * @protected
+ */
+ _content: null,
+
+ init: function () {
+ this._title = new jsx.dom.widgets.Container(document.getElementById("title"));
+ this._analysis = new jsx.dom.widgets.Container(document.getElementById("analysis"));
+ this._content = new lcars.Content();
+ },
+
+ setTexts: function (texts) {
+ var keys = jsx.object.getKeys(texts);
+ for (var i = 0, len = keys.length; i < len; ++i)
+ {
+ var key = keys[i];
+ if (typeof this[key] == "string")
+ {
+ this[key] = texts[key];
+ }
+ }
+ },
+
+ /**
+ * Sets the title of the multi-display
+ *
+ * @param {String} s
+ * New title
+ */
+ setTitle: function (s) {
+ this._title.setText(s);
+ this._title.update();
+ },
+
+ setAnalysis: function (data) {
+ var rows = [];
+ for (var i = 0, len = data.length; i < 3; ++i)
+ {
+ var item = data[i];
+ var cells = [
+ {
+ elementType: "th",
+ childNodes: [item.title + ":"]
+ },
+ {
+ elementType: "td",
+ childNodes: [item.value]
+ }
+ ];
+
+ var item2;
+ if (len > 3 && (item2 = data[i + 3]))
+ {
+ cells.push({
+ elementType: "th",
+ childNodes: [item2.title + ":"]
+ });
+
+ cells.push({
+ elementType: "td",
+ childNodes: [item2.value]
+ });
+ }
+
+ rows.push({
+ elementType: "tr",
+ childNodes: cells
+ });
+ }
+
+ this._analysis.setInnerHTML([{
+ elementType: "table",
+ childNodes: rows
+ }]);
+
+ this._analysis.update();
+ },
+
+ geolocate: function (title, language) {
+ this.setTitle(title);
+
+ var me = this;
+ navigator.geolocation.getCurrentPosition(function (position) {
+ lcars.setPosition(position);
+ var coords = position.coords;
+ var altitudeAccuracy = coords.altitudeAccuracy;
+ var _geolocation = jsx.dom.geolocation;
+ _geolocation.setPosition(position);
+ me.setAnalysis([
+ {
+ title: _geolocation.TEXT_LATITUDE,
+ value: _geolocation.getLatitudeString()
+ },
+ {
+ title: _geolocation.TEXT_LONGITUDE,
+ value: _geolocation.getLongitudeString()
+ },
+ {
+ title: _geolocation.TEXT_LAT_LNG_ACCURACY,
+ value: _geolocation.getLatLngAccuracyString()
+ },
+ {
+ title: _geolocation.TEXT_ALTITUDE,
+ value: _geolocation.getAltitudeString()
+ + (altitudeAccuracy != null
+ ? " (" + _geolocation.getAltAccuracyString()
+ + " " + this.TEXT_ACCURACY + ")"
+ : "")
+ },
+ {
+ title: _geolocation.TEXT_SPEED,
+ value: _geolocation.getSpeedString()
+ },
+ {
+ title: _geolocation.TEXT_HEADING,
+ value: _geolocation.getHeadingString()
+ }
+ ]);
+
+ me._content.showMap(language);
+ me = null;
+ });
+
+ return false;
+ },
+
+ initGMap: function () {
+ var coords = lcars.getPosition().coords;
+ var center = new google.maps.LatLng(coords.latitude, coords.longitude);
+
+ var zoom = 9;
+ var zoomAccuracy = [
+ 1e7, 5e6, 2e6, 2e6, 1e6, 5e5, 2e5, 1e5, 5e4,
+ 2e4, 1e4, 5e3, 2000, 2000, 1000, 500, 200,
+ 100, 50, 20
+ ];
+
+ var accuracy = coords.accuracy;
+ if (!isNaN(accuracy))
+ {
+ for (var i = 0, len = zoomAccuracy.length; i < len; ++i)
+ {
+ if (accuracy > zoomAccuracy[i])
+ {
+ zoom = i;
+ break;
+ }
+ }
+ }
+
+ var map = lcars._gmaps_map;
+ if (!map)
+ {
+ var mapOptions = {
+ center: center,
+ zoom: zoom,
+ mapTypeId: google.maps.MapTypeId.HYBRID,
+ backgroundColor: "#000",
+ noClear: true,
+ scaleControl: true
+ };
+
+ map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
+ lcars._gmaps_map = map;
+ }
+ else
+ {
+ map.setCenter(center);
+ map.setZoom(zoom);
+ }
+
+ var circle = this._gmaps_circle;
+ if (!circle)
+ {
+ if (!isNaN(coords.accuracy))
+ {
+ circle = new google.maps.Circle({
+ map: map,
+ center: center,
+ radius: coords.accuracy,
+ fillColor: "white",
+ fillOpacity: 0.125,
+ strokeColor: "white",
+ strokeOpacity: 0.5
+ });
+
+ var me = this;
+ circle.addListener("click", function () {
+ // TODO
+ window.alert(me.TEXT_CURRENT_COORDS + "\n\n"
+ + jsx.dom.geolocation.getText(lcars.getPosition()));
+ });
+
+ this._gmaps_circle = circle;
+ }
+ }
+ else
+ {
+ if (!isNaN(coords.accuracy))
+ {
+ circle.setCenter(center);
+ circle.setRadius(coords.accuracy);
+ }
+ else
+ {
+ circle.setMap(null);
+ }
+ }
+
+ /* Restore transition */
+ this._content.resetStyleProperty("transition");
+ }
+ }),
+
+ /**
+ * @protected
+ */
+ _position: null,
+
+ /**
+ * @return {Position}
+ */
+ getPosition: function () {
+ return this._position;
+ },
+
+ /**
+ * @param {Position} position
+ */
+ setPosition: function (position) {
+ this._position = position;
+ }
+ };
+ }());
+}
\ No newline at end of file
Index: live/object/object-compat.js
===================================================================
--- live/object/object-compat.js (nonexistent)
+++ live/object/object-compat.js (revision 509)
@@ -0,0 +1,2988 @@
+/**
+ * @fileOverview <title>Basic Object Library</title>
+ * @file $Id$
+ *
+ * @author (C) 2004-2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = new Object();
+}
+
+/* allows for de.pointedears.jsx.object */
+if (typeof de == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var de = {};
+}
+
+if (typeof de.pointedears == "undefined")
+{
+ /**
+ * @namespace
+ */
+ de.pointedears = {};
+}
+
+/**
+ * @namespace
+ */
+de.pointedears.jsx = jsx;
+
+/**
+ * Reference to the ECMAScript Global Object
+ * @type Global
+ * @field
+ */
+jsx.global = this;
+
+/*
+ * NOTE: Cannot use jsx.object.extend() for the following
+ * because values have not been defined yet!
+ *
+ * TODO: Should syntactic sugar be provided to work around
+ * this issue? See Function.prototype.extend().
+ */
+
+jsx.MSG_INFO = "info";
+jsx.MSG_WARN = "warn";
+jsx.MSG_ERROR = "error";
+jsx.MSG_DEBUG = "debug";
+
+if (typeof jsx.options == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.options = new Object();
+}
+
+if (typeof jsx.options.emulate == "undefined")
+{
+ /**
+ * If <code>false</code> missing language features are not emulated.
+ * The default is <code>true</code>.
+ * <p>
+ * WARNING: JSX features may depend on emulation; intended for
+ * testing only.
+ * </p>
+ * @type boolean
+ */
+ jsx.options.emulate = true;
+}
+
+/**
+ * @namespace
+ */
+jsx.object = new Object();
+
+/**
+ * @version
+ */
+jsx.object.version = "$Revision$ ($Date$)";
+jsx.object.copyright = "Copyright \xA9 2004-2013";
+jsx.object.author = "Thomas Lahn";
+jsx.object.email = "js@PointedEars.de";
+jsx.object.path = "http://PointedEars.de/scripts/";
+
+/**
+ * @type number
+ * Used by {@link jsx.object#extend()} to overwrite existing
+ * properties.
+ */
+jsx.object.ADD_OVERWRITE = 1;
+
+/**
+ * @type number
+ * Used by {@link jsx.object#extend()} and {@link jsx.object#clone()}
+ * to make a shallow copy of all enumerable properties (default).
+ */
+jsx.object.COPY_ENUM = 0;
+
+/**
+ * @type number
+ * Used by {@link jsx.object#extend()} and {@link jsx.object#clone()}
+ * to make a deep copy of all enumerable properties.
+ */
+jsx.object.COPY_ENUM_DEEP = 2;
+
+/**
+ * @type number
+ * Used by {@link jsx.object#extend()} and {@link jsx.object#clone()}
+ * to copy a property by inheritance.
+ */
+jsx.object.COPY_INHERIT = 4;
+
+/**
+ * Determines whether an object is, or several objects are,
+ * likely to be callable.
+ *
+ * @author (C) 2003-2010 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ * @memberOf jsx.object
+ * @param {Object} obj
+ * Object which should be tested for a method, or checked
+ * for being a method if no further arguments are provided.
+ * <p>
+ * <em>NOTE: If you pass a primitive value for this argument,
+ * the properties of the object created from that value are considered.
+ * In particular, if you pass a string value containing
+ * a <i>MemberExpression</i>, the properties of the corresponding
+ * <code>String</code> instance are considered, not of the object that
+ * the <i>MemberExpression</i> might refer to. If you need to use such
+ * a string to refer to an object (e.g., if you do not know whether it
+ * is safe to refer to the object), use the return value of
+ * {@link jsx#tryThis jsx.tryThis("<var>MemberExpression</var>")}
+ * as argument to this method instead.</em>
+ * </p>
+ * @param {string|Array} prop (optional)
+ * Path of the property to be determined a method, i.e. a reference to
+ * a callable object assigned as property of another object.
+ * Use a string argument for each component of the path, e.g.
+ * the argument list <code>(o, "foo", "bar")</code> for testing whether
+ * <code>o.foo.bar</code> is a method.
+ * If the last argument is an {@link Array}, all elements of
+ * this array are used for property names; e.g.
+ * <code>(o, "foo", ["bar", "baz"])</code>. This allows for testing
+ * several properties of the same object with one call.
+ * @return {boolean}
+ * <code>true</code> if all arguments refer to methods,
+ * <code>false</code> otherwise.
+ * @see jsx.object#isMethodType()
+ */
+function jsx_object_isMethod (obj, prop)
+{
+ var len = arguments.length;
+ if (len < 1)
+ {
+ jsx.throwThis("jsx.InvalidArgumentError",
+ ["Not enough arguments", "saw 0", "(obj : Object[, prop : string])"]);
+ return false;
+ }
+
+ var rxUnknown = new RegExp("^\\s*unknown\\s*$", "i");
+ var rxNativeMethod = new RegExp("^\\s*function\\s*$", "i");
+ var rxMethod = new RegExp("^\\s*(function|object)\\s*$", "i");
+
+ /*
+ * Determine if we were called jsx.object.areNativeMethods;
+ */
+ var me = jsx_object_isMethod;
+ var checkNative = (this == jsx_object_isNativeMethod);
+
+ var t = typeof obj;
+
+ /* When no property names are provided, test if the first argument is a method */
+ if (len < 2)
+ {
+ if (checkNative)
+ {
+ return rxNativeMethod.test(t) && obj && true || false;
+ }
+
+ return rxUnknown.test(t) || rxMethod.test(t) && obj && true || false;
+ }
+
+ /* otherwise the first argument must refer to a suitable object */
+ if (rxUnknown.test(t) || !obj)
+ {
+ return false;
+ }
+
+ for (var i = 1; i < len; i++)
+ {
+ prop = arguments[i];
+
+ /* NOTE: Handle null _and_ undefined */
+ if (prop == null)
+ {
+ return false;
+ }
+
+ var isLastSeg = (i == len - 1);
+ if (isLastSeg)
+ {
+ if (typeof prop.valueOf() == "string")
+ {
+ prop = [prop];
+ }
+
+ var aProp = prop;
+ }
+
+ for (var j = (isLastSeg && aProp.length || 1); j--;)
+ {
+ if (isLastSeg)
+ {
+ prop = aProp[j];
+ }
+
+ t = typeof obj[prop];
+
+ /*
+ * NOTE: Test for "unknown" required in any case;
+ * this order speeds up evaluation
+ */
+ if (rxUnknown.test(t) || (rxMethod.test(t) && obj[prop]))
+ {
+ if (i < len - 1)
+ {
+ obj = obj[prop];
+ if (!(rxUnknown.test(typeof obj) || obj))
+ {
+ return false;
+ }
+ }
+ else if (checkNative && !rxNativeMethod.test(t))
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+jsx.object.isMethod = jsx_object_isMethod;
+
+jsx.object.areMethods =
+ jsx.object.isHostMethod = jsx.object.areHostMethods = jsx.object.isMethod;
+
+// jsx.object.docURL = jsx.object.path + "object.htm";
+
+/**
+ * Determines if the passed value could be the result of
+ * <code>typeof <var>callable</var></code>.
+ * <p>
+ * NOTE: This method has previously been provided by {@link types.js};
+ * optimizations in code reuse moved it here.
+ * </p>
+ * @param {string} s (optional)
+ * String to be determined a method type, i.e. "object" or "unknown" in
+ * MSHTML, "function" otherwise. The type must have been retrieved with
+ * the `typeof' operator. Note that this method may also return
+ * <code>true</code> if the value of the <code>typeof</code> operand is
+ * <code>null</code>; to be sure that the operand is a method reference,
+ * you have to && (AND)-combine the <code>isMethodType(...)</code>
+ * expression with the method reference identifier unless `typeof' yielded
+ * `unknown' for <var>s</var>.
+ * @return {boolean}
+ * <code>true</code> if <var>s</var> is a method type,
+ * <code>false</code> otherwise.
+ * @author
+ * (C) 2003-2008 Thomas Lahn &lt;types.js@PointedEars.de&gt;
+ * Distributed under the GNU GPL v3 and later.
+ * @partof http://pointedears.de/scripts/types.js
+ * @deprecated since version 0.1.5a.2009070204
+ * in favor of {@link jsx.object#isMethod(Object)}
+ */
+jsx.object.isMethodType = function (s) {
+ return /^\s*(function|object|unknown)\s*$/i.test(s);
+};
+
+// jsx.object.docURL = jsx.object.path + "object.htm";
+
+/**
+ * Determines whether an object is, or several objects are,
+ * likely to be a native method.
+ *
+ * @author (C) 2011 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ * @function
+ * @param {Object} obj
+ * Object which should be tested for a method, or checked
+ * for being a method if no further arguments are provided.
+ * <p>
+ * <em>NOTE: If you pass a primitive value for this argument,
+ * the properties of the object created from that value are considered.
+ * In particular, if you pass a string value containing
+ * a <i>MemberExpression</i>, the properties of the corresponding
+ * <code>String</code> instance are considered, not of the object that
+ * the <i>MemberExpression</i> might refer to. If you need to use such
+ * a string to refer to an object (e.g., if you do not know whether it
+ * is safe to refer to the object), use the return value of
+ * {@link jsx#tryThis jsx.tryThis("<var>MemberExpression</var>")}
+ * as argument to this method instead.</em>
+ * </p>
+ * @param {string|Array} prop (optional)
+ * Path of the property to be determined a method, i.e. a reference to
+ * a callable object assigned as property of another object.
+ * Use a string argument for each component of the path, e.g.
+ * the argument list <code>(o, "foo", "bar")</code> for testing whether
+ * <code>o.foo.bar</code> is a method.
+ * If the last argument is an {@link Array}, all elements of
+ * this array are used for property names; e.g.
+ * <code>(o, "foo", ["bar", "baz"])</code>. This allows for testing
+ * several properties of the same object with one call.
+ * @return {boolean}
+ * <code>true</code> if all arguments refer to methods,
+ * <code>false</code> otherwise.
+ * @see jsx.object#isMethodType()
+ */
+function jsx_object_isNativeMethod (obj, prop)
+{
+ /* NOTE: Thread-safe, argument-safe code reuse -- `this' is our ID */
+ var _isMethod = jsx_object_isMethod;
+ if (typeof _isMethod.apply != "function")
+ {
+ _isMethod.apply = Function_prototype_apply;
+ }
+
+ return _isMethod.apply(jsx_object_isNativeMethod, arguments);
+}
+jsx.object.isNativeMethod = jsx.object.areNativeMethods = jsx_object_isNativeMethod;
+
+/**
+ * Prints debug messages to the script console.
+ *
+ * NOTE: This method has previously been provided by
+ * {@link debug.js}; optimizations in code reuse
+ * moved it here.
+ *
+ * @param {string} sMsg
+ * Message to be printed
+ * @param {string} sType = "log"
+ * Type of the message. Supported values include
+ * <code>"log"</code> (default), <code>"info"</code>, <code>"warn"</code>,
+ * and <code>"debug"</code>. If a script console does not support
+ * a message type, the default value is used.
+ * @return {boolean}
+ * <code>true</code> if it was possible to cause the message to be printed;
+ * <code>false</code> otherwise.
+ */
+function jsx_dmsg (sMsg, sType)
+{
+ var _isMethod = jsx.object.isMethod;
+ var msgMap = new Object();
+ msgMap.data = new Object();
+ msgMap.data.info = "INFO";
+ msgMap.data.warn = "WARNING";
+ msgMap.data.debug = "DEBUG";
+
+ function msgMap_getString (s)
+ {
+ var data = this.data;
+
+ if (typeof data[s] != "undefined")
+ {
+ return data[s] + ": ";
+ }
+
+ return "";
+ }
+ msgMap.getString = msgMap_getString;
+
+ /* Firebug 0.4+ and others */
+ if (typeof console != "undefined")
+ {
+ if (!sType || !_isMethod(console, sType) && sType != "log")
+ {
+ sMsg = msgMap.getString(sType) + sMsg;
+ sType = "log";
+ }
+
+ if (sType != "info")
+ {
+ sMsg += "\n" + jsx.getStackTrace();
+ }
+
+ if (_isMethod(console, sType))
+ {
+ /* MSHTML's console methods do not implement call() */
+ Function.prototype.call.call(console[sType], console, sMsg);
+ return true;
+ }
+ }
+ else if (typeof opera != "undefined"
+ && _isMethod(opera, "postError"))
+ {
+ opera.postError(msgMap.getString(sType) + sMsg);
+ return true;
+ }
+
+ return false;
+}
+jsx.dmsg = jsx_dmsg;
+
+/**
+ * Issues an info message, if possible.
+ *
+ * @param {String} sMsg
+ * Message
+ * @see jsx#dmsg
+ */
+function jsx_info (sMsg)
+{
+ return jsx.dmsg(sMsg, jsx.MSG_INFO);
+}
+jsx.info = jsx_info;
+
+/**
+ * Issues a warning, if possible.
+ *
+ * @param {String} sMsg
+ * Message
+ * @see jsx#dmsg
+ */
+function jsx_warn (sMsg)
+{
+ return jsx.dmsg(sMsg, jsx.MSG_WARN);
+}
+jsx.warn = jsx_warn;
+
+/**
+ * Issues an error message, if possible.
+ *
+ * @param {String} sMsg
+ * Message
+ * @see jsx#dmsg
+ */
+function jsx_error (sMsg)
+{
+ return jsx.dmsg(sMsg, jsx.MSG_ERROR);
+};
+jsx.error = jsx_error;
+
+/**
+ * Determines if an object has a (non-inherited) property
+ *
+ * @param {Object} obj (optional)
+ * Object which property should be checked for existence.
+ * @param {string} sProperty
+ * Name of the property to check.
+ * @return {boolean}
+ * <code>true</code> if there is such a property;
+ * <code>false</code> otherwise.
+ */
+jsx.object._hasOwnProperty = function (obj, sProperty) {
+ if (arguments.length < 2 && obj)
+ {
+ sProperty = obj;
+ obj = this;
+ }
+
+ var proto;
+
+ return (jsx.object.isMethod(obj, "hasOwnProperty")
+ ? obj.hasOwnProperty(sProperty)
+ : (typeof obj[sProperty] != "undefined"
+ && ((typeof obj.constructor != "undefined"
+ && (proto = obj.constructor.prototype)
+ && typeof proto[sProperty] == "undefined")
+ || (typeof obj.constructor == "undefined"))));
+};
+
+/**
+ * Returns the own enumerable properties of an object
+ */
+function jsx_object_getKeys (obj)
+{
+ if (jsx.object.isNativeMethod(jsx.global.Object, "keys")
+ && !Object.keys._emulated)
+ {
+ return Object.keys(obj);
+ }
+
+ var a = new Array();
+
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ for (var p in obj)
+ {
+ if (_hasOwnProperty(obj, p))
+ {
+ a[a.length] = p;
+ }
+ }
+
+ return a;
+}
+jsx.object.getKeys = jsx_object_getKeys;
+
+/**
+ * Creates a duplicate (clone) of an object
+ *
+ * @param {Object} oSource (optional)
+ * Object to be cloned. If omitted or <code>null</code>,
+ * the calling object is cloned.
+ * @param {Number} iLevel (optional)
+ * Use the {@link #COPY_ENUM jsx.object.COPY_*}
+ * properties to specify the level of cloning.
+ * The default is {@link #COPY_ENUM}.
+ * @return {Object}
+ * A reference to the clone.
+ */
+function jsx_object_clone (oSource, iLevel)
+{
+ var
+ _jsx_object = jsx.object,
+ _COPY_ENUM = _jsx_object.COPY_ENUM,
+ _COPY_ENUM_DEEP = _jsx_object.COPY_ENUM_DEEP,
+ _COPY_INHERIT = _jsx_object.COPY_INHERIT;
+
+ function createTypedObject (oOriginal)
+ {
+ if (oOriginal.constructor)
+ {
+ return jsx_object_inheritFrom(oOriginal.constructor.prototype);
+ }
+
+ return new Object();
+ }
+
+ function createRecursiveCloner (o2, i, oSource, iLevel)
+ {
+ function f ()
+ {
+ o2[i] = me(oSource[i], iLevel);
+ }
+
+ return f;
+ }
+
+ function createCopier (o2, p, oSource)
+ {
+ function f ()
+ {
+ o2[p] = oSource[p];
+ }
+
+ return f;
+ }
+
+ if (typeof oSource == "number")
+ {
+ var tmp = oSource;
+ oSource = iLevel;
+ iLevel = tmp;
+ }
+
+ if (!oSource)
+ {
+ oSource = _jsx_object;
+ }
+
+ if (typeof iLevel == "undefined")
+ {
+ iLevel = _COPY_ENUM;
+ }
+
+ var me = jsx_object_clone;
+
+ if (!iLevel || (iLevel & _COPY_ENUM_DEEP))
+ {
+ /*
+ * NOTE: For objects, valueOf() only copies the object reference,
+ * so we are creating an instance that inherits from the
+ * original's prototype, if possible.
+ */
+ var o2 = (typeof oSource == "object" && oSource)
+ ? createTypedObject(oSource)
+ : oSource.valueOf();
+
+ /* if "var p in ..." does not copy the array elements */
+ if (_jsx_object.isArray(o2))
+ {
+ for (var i = oSource.length; i--;)
+ {
+ if (iLevel && typeof oSource[i] == "object" && null != oSource[i])
+ {
+ jsx.tryThis(createRecursiveCloner(o2, i, oSource, iLevel));
+ }
+ else
+ {
+ jsx.tryThis(createCopier(o2, i, oSource));
+ }
+ }
+ }
+
+ for (var p in oSource)
+ {
+ if (iLevel && typeof oSource[p] == "object" && null != oSource[p])
+ {
+ jsx.tryThis(createRecursiveCloner(o2, p, oSource, iLevel));
+ }
+ else
+ {
+ jsx.tryThis(createCopier(o2, p, oSource));
+ }
+ }
+
+ return o2;
+ }
+
+ if (iLevel & _COPY_INHERIT)
+ {
+ return jsx_object_inheritFrom(oSource);
+ }
+
+ return null;
+}
+jsx.object.clone = jsx_object_clone;
+
+/**
+ * Adds/replaces properties of an object
+ *
+ * @param {Object} oTarget
+ * Target object whose properties should be set.
+ * @param {Object} oSource
+ * Object specifying the properties to be set.
+ * The name of each property serves as the name for the
+ * property of the target object, its value as the value
+ * of that property.
+ * @param {Number} iFlags = 0
+ * Flags for the modification, see {@link #ADD_OVERWRITE}
+ * and {@link #COPY_ENUM jsx.object.COPY_*}.
+ * @return {Object}
+ * The extended object
+ */
+function jsx_object_extend (oTarget, oSource, iFlags)
+{
+ var
+ _jsx_object = jsx.object,
+ _getKeys = _jsx_object.getKeys,
+ _clone = _jsx_object.clone,
+ _ADD_OVERWRITE = _jsx_object.ADD_OVERWRITE,
+ _COPY_ENUM_DEEP = _jsx_object.COPY_ENUM_DEEP,
+ _COPY_INHERIT = _jsx_object.COPY_INHERIT;
+
+ if (typeof iFlags == "undefined")
+ {
+ iFlags = 0;
+ }
+
+ var cloneLevel = (iFlags & (_COPY_ENUM_DEEP | _COPY_INHERIT));
+
+ for (var i = 0, keys = _getKeys(oSource), len = keys.length;
+ i < len; ++i)
+ {
+ var p = keys[i];
+
+ if (typeof oTarget[p] == "undefined" || (iFlags & _ADD_OVERWRITE))
+ {
+ jsx.tryThis(function () {
+ oTarget[p] = cloneLevel
+ ? _clone(oSource[p], cloneLevel)
+ : oSource[p];
+ oTarget[p]._userDefined = true;
+ });
+ }
+ }
+
+ return oTarget;
+}
+jsx.object.setProperties = jsx_object_extend;
+jsx.object.extend = jsx_object_extend;
+
+/**
+ * Defines getters and setters for the properties of an object, if possible.
+ *
+ * Uses {@link Object.prototype#__defineGetter__} and
+ * {@link Object.prototype#__defineSetter__} (JavaScript only) as fallback.
+ *
+ * @param {Object} oTarget
+ * The object for which properties getters and setters should be defined.
+ * @param {Object} oProperties
+ * Definition of the getters and setters for each property. Must be of
+ * the form
+ * <code><pre>{
+ * propertyName: {
+ * get: function () {…},
+ * set: function (newValue) {…}
+ * },
+ * …
+ * }
+ * </pre></code> as specified in the ECMAScript Language Specification,
+ * Edition 5 Final, section 15.2.3.7.
+ * @param {string} sContext (optional)
+ * The context in which the property definition was attempted.
+ * Included in the info message in case getters and setters could not be
+ * defined.
+ * @todo Depending on ES Matrix results, replace with user-defined
+ * Object.defineProperties() if the implementation does not provide it.
+ */
+function jsx_object_defineProperties (oTarget, oProperties, sContext)
+{
+ function Object_defineProperties ()
+ {
+ Object.defineProperties(oTarget, oProperties);
+ }
+
+ function Object_defineProperties_emulation_try ()
+ {
+ for (var propertyName in oProperties)
+ {
+ var propertyDescriptor = oProperties[propertyName];
+
+ if (typeof propertyDescriptor.value != "undefined")
+ {
+ oTarget[propertyName] = propertyDescriptor.value;
+ }
+
+ /* NOTE: Allow specified values to fail */
+ if (typeof propertyDescriptor.get != "undefined")
+ {
+ oTarget.__defineGetter__(propertyName, propertyDescriptor.get);
+ }
+
+ if (typeof propertyDescriptor.set != "undefined")
+ {
+ oTarget.__defineSetter__(propertyName, propertyDescriptor.set);
+ }
+ }
+ }
+
+ function Object_defineProperties_emulation_failed ()
+ {
+ jsx.info((sContext ? sContext + ": " : "")
+ + "Could not define special properties."
+ + " Please use explicit getters and setters instead.");
+ }
+
+ function Object_defineProperties_emulation ()
+ {
+ jsx.tryThis(
+ Object_defineProperties_emulation_try,
+ Object_defineProperties_emulation_failed
+ );
+ }
+
+ jsx.tryThis(
+ Object_defineProperties,
+ Object_defineProperties_emulation
+ );
+};
+jsx.object.defineProperties = jsx_object_defineProperties;
+
+/**
+ * Determines if a (non-inherited) property of an object is enumerable
+ * @param {Object} obj (optional)
+ * Object which property should be checked for enumerability.
+ * @param {string} sProperty
+ * Name of the property to check.
+ * @return {boolean}
+ * <code>true</code> if there is such a property;
+ * <code>false</code> otherwise.
+ */
+function jsx_object_propertyIsEnumerable (obj, sProperty)
+{
+ if (arguments.length < 2 && obj)
+ {
+ sProperty = obj;
+ obj = this;
+ }
+
+ if (jsx.object.isMethod(obj, "propertyIsEnumerable"))
+ {
+ return obj.propertyIsEnumerable(sProperty);
+ }
+
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ for (var propertyName in obj)
+ {
+ if (propertyName == name && _hasOwnProperty(obj, propertyName))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+jsx.object._propertyIsEnumerable = jsx_object_propertyIsEnumerable;
+
+/**
+ * Returns the name of an unused property for an object.
+ *
+ * @function
+ * @param {Object} obj
+ * @param {number} iLength
+ * Maximum property name length up to which an unused name
+ * is searched. The default is 256.
+ * @return {string}
+ * The name of a non-existing property of <code>o</code> if
+ * {@link Object#prototype.hasOwnProperty()} is supported, or
+ * the name of a property with value <code>undefined</code>
+ * if it is not supported; the empty string
+ * if there is no such property.
+ */
+function jsx_object_findNewProperty (obj, iLength)
+{
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ if (!obj)
+ {
+ obj = this;
+ }
+
+ if (arguments.length < 2)
+ {
+ iLength = 256;
+ }
+ else
+ {
+ iLength = parseInt(iLength, 10);
+ }
+
+ var newName = "";
+
+ while (newName.length < iLength)
+ {
+ for (var i = "a".charCodeAt(0), max = "z".charCodeAt(0); i <= max; ++i)
+ {
+ var ch = String.fromCharCode(i);
+ if (!_hasOwnProperty(obj, newName + ch + "_"))
+ {
+ return newName + ch + "_";
+ }
+ }
+
+ newName += "a";
+ }
+
+ return "";
+};
+jsx.object.findNewProperty = jsx_object_findNewProperty;
+
+/**
+ * Determines if an object, or the objects it refers to,
+ * has an enumerable property with a certain value
+ *
+ * @param {Object} obj
+ * @param needle
+ * The value to be searched for
+ * @param {Object} params
+ * Search parameters. The following properties are supported:
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Property</th>
+ * <th>Meaning</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <th><code><var>exclude</var> :&nbsp;Array</code></th>
+ * <td><code>Array</code> containing the names of the
+ * properties that should not be searched</td>
+ * </tr>
+ * <tr>
+ * <th><code><var>recursive</var> :&nbsp;boolean</code></th>
+ * <td>If a true-value, search recursively.</td>
+ * </tr>
+ * <tr>
+ * <th><code><var>strict</var> :&nbsp;boolean</code></th>
+ * <td>If a true-value, perform a strict comparison
+ * without type conversion.</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ */
+jsx.object.hasPropertyValue =
+ function jsx_object_hasPropertyValue (obj, needle, params) {
+ for (var property in obj)
+ {
+ if (params && params.exclude && params.exclude.indexOf(property) > -1)
+ {
+ continue;
+ }
+
+ var propertyValue = obj[property];
+ if (params && params.recursive)
+ {
+ if (typeof propertyValue == "object" && propertyValue !== null)
+ {
+ if (jsx_object_hasPropertyValue(propertyValue, needle, params))
+ {
+ return true;
+ }
+ }
+ }
+
+ if (params && params.strict)
+ {
+ if (propertyValue === needle)
+ {
+ return true;
+ }
+ }
+ else
+ {
+ /* Switch operands because of JScript quirk */
+ if (needle == propertyValue)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+};
+
+/**
+ * Clears the handler for the proprietary <code>error</code> event.
+ *
+ * NOTE: This method has previously been provided by {@link debug.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @return {boolean} <code>true</code>
+ */
+/*
+ * NOTE: Initialization must come before the initialization of
+ * setErrorHandler() as it is used in a closure there,
+ * see Message-ID <2152411.FhMhkbZ0Pk@PointedEars.de>
+ */
+jsx.clearErrorHandler = function () {
+ if (typeof window != "undefined")
+ {
+ /*
+ * debug.js 0.99.5.2006041101 BUGFIX:
+ * onerror is defined as a property of window, not of the Global Object
+ */
+ window.onerror = null;
+ }
+
+ return true;
+};
+
+/**
+ * Sets the handler for the proprietary <code>error</code> event.
+ *
+ * NOTE: This method has previously been provided by {@link debug.js};
+ * and {@link types.js}; optimizations in code reuse moved it here.
+ *
+ * @function
+ */
+jsx.setErrorHandler = (function () {
+ var
+ jsx_object = jsx.object,
+ jsx_clearErrorHandler = jsx.clearErrorHandler;
+
+ /**
+ * @param {Callable} fHandler
+ * @return {boolean}
+ * <code>true</code> if the error handler could be assigned to
+ * successfully, <code>false</code> otherwise. Note that one reason
+ * for failure can be that an event handler is no longer supported
+ * by the UA's DOM due to efforts towards adherence to Web standards.
+ */
+ return function (fHandler) {
+ /*
+ * NOTE: There is no deadlock here because even if `fHandler' is a string,
+ * `isMethod(fHandler)' will call `setErrorHandler()' without arguments;
+ * so fHandler in that call will be `undefined' and `setErrorHandler()'
+ * is not called again.
+ */
+ if (!jsx_object.isMethod(fHandler))
+ {
+ fHandler = jsx_clearErrorHandler;
+ }
+
+ if (typeof assertFalse == "function")
+ {
+ assertFalse(typeof fHandler == "undefined", false,
+ "jsx.setErrorHandler(fHandler)");
+ }
+
+ if (typeof window != "undefined"
+ && typeof fHandler != "undefined")
+ {
+ /*
+ * debug.js 0.99.5.2006041101 BUGFIX:
+ * onerror is defined as a property of window, not of the Global Object
+ */
+ window.onerror = fHandler;
+ }
+
+ return (typeof window.onerror != "undefined"
+ && window.onerror == fHandler);
+ };
+}());
+
+/**
+ * Wrapper for a safer <code>try</code>...<code>catch</code>.
+ *
+ * Attempts to evaluate a value as a <i>StatementList</i>, and attempts
+ * to evaluate another value as a <i>StatementList</i> if an exception
+ * is thrown in the process. The following words may be used within:
+ *
+ * <table>
+ * <thead>
+ * <tr>
+ * <th align="left">Word</th>
+ * <th align="left">Refers to</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr valign="top">
+ * <td><code>statements</code><br>
+ * <code>errorHandlers</code></td>
+ * <td>the passed values</td>
+ * </tr>
+ * <tr valign="top">
+ * <td>code</td>
+ * <td>the entire constructed <code>try</code>...<code>catch</code>
+ * string that is evaluated as a <i>Program</i></td>
+ * </tr>
+ * <tr valign="top">
+ * <td>e</td>
+ * <td>Only within <var>errorHandlers</var>:
+ * the value thrown in case of an exception</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * NOTE: This method has previously been provided by {@link exception.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @function
+ * @param {Function|string|any} statements
+ * Value to be evaluated as a <i>StatementList</i>.
+ * Called if a <code>Function</code>, converted
+ * to string if not a string, and used as-is otherwise.
+ * For compatibility, the <code>undefined</code> value
+ * is evaluated like the empty string.
+ * @param {Function|string|any} errorHandlers
+ * Value to be evaluated as a <i>StatementList</i> in case of an
+ * exception. Called if a <code>Function</code>,
+ * converted to string if not a string, and used as-is otherwise.
+ * For compatibility, the <code>undefined</code> value
+ * is evaluated like the empty string.
+ * @return {any}
+ * The result of <code>statements</code>, or the result
+ * of <code>errorHandlers</code> if an error occurred.
+ * @author
+ * Copyright (c) 2008
+ * Thomas 'PointedEars' Lahn &lt;js@PointedEars.de&gt;
+ * Distributed under the GNU GPL v3 and later.
+ * @partof JSX:object.js
+ */
+jsx.tryThis =
+// (function () {
+// /**
+// * @param s Value to be stringified
+// * @param {String} sCall
+// * CallStatement that should be used instead of the value
+// * @return {string} Stringified version of <code>s</code>
+// */
+// function stringify(s, sCall)
+// {
+// if (typeof s == "function")
+// {
+// s = sCall;
+// }
+// else if (typeof s == "undefined")
+// {
+// s = "";
+// }
+//
+// return s;
+// }
+
+ /*return*/ function (statements, errorHandlers) {
+ /*
+ * Replaced because eval() performs magnitudes worse;
+ * TODO: Backwards compatibility (branching for NN4 & friends?)
+ */
+// var sStatements = stringify(statements, "statements();");
+// var sErrorHandlers = stringify(errorHandlers, "errorHandlers(e);");
+//
+// var code = 'try {\n ' + sStatements + '\n}\n'
+// + 'catch (e) {\n ' + sErrorHandlers + '\n}';
+//
+// return eval(code);
+ var t = typeof statements;
+ try
+ {
+ if (t == "function")
+ {
+ return statements();
+ }
+
+ return eval(statements);
+ }
+ catch (e)
+ {
+ t = typeof errorHandlers;
+ if (t == "function")
+ {
+ return errorHandlers(e);
+ }
+
+ return eval(errorHandlers);
+ }
+ };
+//}());
+
+/**
+ * Throws an exception, including an execution context hint if provided,
+ * followed by an error message.
+ *
+ * NOTE: This method has previously been provided by {@link exception.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @function
+ * @author
+ * Copyright (c) 2008 Thomas 'PointedEars' Lahn <cljs@PointedEars.de>.
+ * Distributed under the GNU GPL v3 and later.
+ * @partof JSX:object.js
+ */
+jsx.throwThis = (function () {
+ var
+ jsx_global = jsx.global,
+ jsx_object = jsx.object,
+ _addslashes = function (e) {
+ return (typeof e == "string")
+ ? '"' + e.replace(/["'\\]/g, "\\$&").replace(/\r?\n|\r/g, "\\n") + '"'
+ : (e && typeof e.map == "function" ? "[" + e + "]" : e);
+ };
+
+ /**
+ * @param {string|Function|Error} errorType
+ * Expression for the constructor of the error type, or a reference
+ * to an object inheriting from <code>Error.prototype</code>.
+ * Use a false-value (e.g., <code>""</code> or <code>null</code>)
+ * to throw an unqualified exception.
+ * @param {string|Array} message
+ * Error message to be displayed. If an <code>Array</code>,
+ * it is passed as argument list to the constructor for the error type
+ * @param {Callable|string} context
+ * Optional callable object to specify the context
+ * where the exception occurred.
+ */
+ return function (errorType, message, context) {
+ var sErrorType = errorType;
+ var isError = false;
+
+ if (Error.prototype.isPrototypeOf(errorType))
+ {
+ isError = true;
+ sErrorType = "errorType";
+ }
+ else if (jsx_object.isMethod(errorType))
+ {
+ sErrorType = "new errorType";
+ }
+ else if (typeof errorType == "string")
+ {
+ sErrorType = "new " + errorType;
+ }
+
+ var sContext = "";
+ if (jsx_object.isMethod(jsx_global, "Error"))
+ {
+ var stack = (new Error()).stack;
+ if (stack)
+ {
+ sContext = "\n\n" + stack;
+ }
+ }
+
+ /* DEBUG: set breakpoint here */
+ if (!sContext)
+ {
+ if (jsx_object.isMethod(context))
+ {
+ sContext = (String(context).match(/^\s*(function.+\))/)
+ || [, null])[1];
+ sContext = sContext ? sContext + ': ' : '';
+ }
+ }
+
+ /* Array for exception constructor's argument list */
+ if (jsx_object.isMethod(message, "map"))
+ {
+ message = message.map(_addslashes);
+ }
+ else
+ {
+ message = (message || "") + (sContext || "");
+ message = _addslashes(message);
+ }
+
+ /* DEBUG */
+ var throwStmt = 'throw ' + (sErrorType ? sErrorType : '')
+ + (isError ? '' : '(' + (message || "") + ')') + ';';
+
+ eval(throwStmt);
+ };
+}());
+
+/**
+ * Rethrows arbitrary exceptions
+ *
+ * @param {Error} exception
+ */
+jsx.rethrowThis = function (exception) {
+ eval("throw exception");
+};
+
+/**
+ * Lets one object inherit from another
+ *
+ * @function
+ */
+jsx.object.inheritFrom = (function () {
+ var
+ _jsx = jsx,
+ _global = _jsx.global,
+ _isNativeMethod = _jsx.object.isNativeMethod,
+ Dummy = function () {};
+
+ /**
+ * @param {Object} obj = Object.prototype
+ * Object from which to inherit. The default is
+ * <code>Object.prototype</code>.
+ * @return {Object}
+ * Inheriting (child) object
+ */
+ return function (obj) {
+ if (typeof obj == "object" && obj == null)
+ {
+ if (_isNativeMethod(_global.Object, "create")
+ && !Object.create._emulated)
+ {
+ return Object.create(null);
+ }
+
+ var result = new Object();
+ result.__proto__ = null;
+ return result;
+ }
+
+ Dummy.prototype = (typeof obj == "undefined")
+ ? Object.prototype
+ : (obj || null);
+ return new Dummy();
+ };
+}());
+
+/**
+ * Returns a new object that can serve as data container.
+ *
+ * Returns a new object that, if supported, does not inherit or
+ * have any properties. This is accomplished by either cutting
+ * off its existing prototype chain or not creating one for it
+ * in the first place.
+ *
+ * @function
+ * @return {Object}
+ * @see Object.create
+ */
+jsx.object.getDataObject = (function () {
+ var _inheritFrom = jsx.object.inheritFrom;
+
+ return function () {
+ return _inheritFrom(null);
+ };
+}());
+
+if (jsx.options.emulate)
+{
+ if (!jsx.object.isNativeMethod(jsx.tryThis("Object"), "create"))
+ {
+ if (!jsx.object.isNativeMethod(jsx.tryThis("Object"), "defineProperties"))
+ {
+ if (!jsx.object.isNativeMethod(jsx.tryThis("Object"), "getOwnPropertyNames"))
+ {
+ Object.getOwnPropertyNames = (function () {
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ return function (o) {
+ var names = [];
+
+ for (var p in o)
+ {
+ if (_hasOwnProperty(o, p))
+ {
+ names.push(p);
+ }
+ }
+
+ return names;
+ };
+ }());
+ }
+
+ /**
+ * Defines a property of an object.
+ *
+ * Emulation of the Object.defineProperty() method from ES 5.1,
+ * section 15.2.3.6.
+ *
+ * @function
+ */
+ Object.defineProperty = (function () {
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ function _toPropertyDescriptor(obj)
+ {
+ if (!/^(object|function)$/i.test(typeof obj) || !obj)
+ {
+ jsx.throwThis("TypeError", "Object expected");
+ }
+
+ var desc = new Object();
+
+ if (_hasOwnProperty(obj, "enumerable"))
+ {
+ desc.enumerable = !!obj.enumerable;
+ }
+
+ if (_hasOwnProperty(obj, "configurable"))
+ {
+ desc.configurable = !!obj.configurable;
+ }
+
+ var hasValue = obj.hasOwnProperty("value");
+ if (hasValue)
+ {
+ desc.value = obj.value;
+ }
+
+ var hasWritable = _hasOwnProperty(obj, "writable");
+ if (hasWritable)
+ {
+ desc.writable = !!obj.writable;
+ }
+
+ var hasGetter = _hasOwnProperty(obj, "get");
+ if (hasGetter)
+ {
+ if (typeof obj.get != "function")
+ {
+ return jsx.throwThis("TypeError", "Function expected for getter");
+ }
+
+ desc.get = obj.get;
+ }
+
+ var hasSetter = _hasOwnProperty(obj, "set");
+ if (hasSetter)
+ {
+ if (typeof obj.set != "function")
+ {
+ return jsx.throwThis("TypeError", "Function expected for setter");
+ }
+
+ desc.set = obj.set;
+ }
+
+ if ((hasGetter || hasSetter) && (hasValue || hasWritable))
+ {
+ return jsx.throwThis("TypeError", "Cannot define getter/setter and value/writable");
+ }
+
+ return desc;
+ }
+
+ function _defineOwnProperty (obj, propertyName, descriptor, _throw)
+ {
+ function _isAccessorDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return _hasOwnProperty(desc, "get") || _hasOwnProperty(desc, "set");
+ }
+
+ function _isDataDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return desc.hasOwnProperty("value") || _hasOwnProperty(desc, "writable");
+ }
+
+ function _isGenericDescriptor (desc)
+ {
+ if (typeof desc == "undefined")
+ {
+ return false;
+ }
+
+ return !_isAccessorDescriptor(desc) && !_isDataDescriptor(desc);
+ }
+
+ // var current = obj.hasOwnProperty(propertyName);
+ // var extensible = obj[propertyName].[[Extensible]]
+
+ if (_isGenericDescriptor(descriptor) || _isDataDescriptor(descriptor))
+ {
+ var value = descriptor.value;
+ obj[propertyName] = value;
+
+ if (!descriptor.writable)
+ {
+ /* NOTE: Need getter because __defineSetter__() undefines value */
+ obj.__defineGetter__(propertyName, function () {
+ return value;
+ });
+
+ obj.__defineSetter__(propertyName, function () {});
+ }
+ }
+ else
+ {
+ /* accessor property descriptor */
+ if (descriptor.get)
+ {
+ obj.__defineGetter__(propertyName, descriptor.get);
+ }
+
+ if (descriptor.set)
+ {
+ obj.__defineSetter__(propertyName, descriptor.set);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param {Object} o
+ * @param {Object} descriptor (optional)
+ * Property descriptor, a reference to an object that defines
+ * the attributes of the property. Supported properties of
+ * that defining object include <code>value</code> only
+ * at this time.
+ * @return {Object} Reference to the object
+ */
+ return function (o, propertyName, descriptor) {
+ if (!/^(object|function)$/.test(typeof o) || !o)
+ {
+ return jsx.throwThis("TypeError", "Object expected");
+ }
+
+ var name = String(propertyName);
+ var desc = _toPropertyDescriptor(descriptor);
+ _defineOwnProperty(o, name, desc, true);
+
+ return o;
+ };
+ }());
+
+ /**
+ * Defines the properties of an object.
+ *
+ * Emulation of the Object.defineProperties() method from ES 5.1,
+ * section 15.2.3.7.
+ *
+ * @param {Object} o
+ * @param {Object} descriptor (optional)
+ * Properties descriptor, where each own property name
+ * is a property name of the new object, and each corresponding
+ * property value is a reference to an object that defines the
+ * attributes of that property. Supported properties of
+ * that defining object include <code>value</code> only
+ * at this time.
+ * @return {Object} Reference to the object
+ */
+ Object.defineProperties = function (o, descriptor) {
+ var properties = Object.getOwnPropertyNames(descriptor);
+ for (var i = 0, len = properties.length; i < len; ++i)
+ {
+ var propertyName = properties[i];
+ Object.defineProperty(o, propertyName, descriptor[propertyName]);
+ }
+
+ return o;
+ };
+ }
+
+ /**
+ * Creates a new object and initializes its properties.
+ *
+ * Emulation of the Object.create() method from ES 5.1,
+ * section 15.2.3.5.
+ *
+ * @param {Object|Null} prototype
+ * @param {Object} descriptor (optional)
+ * Properties descriptor, where each own property name
+ * is a property name of the new object, and each corresponding
+ * property value is a reference to an object that defines the
+ * attributes of that property. Supported properties of
+ * that defining object include <code>value</code> only
+ * at this time.
+ * @return {Object} Reference to the new object
+ */
+ Object.create = function (prototype, descriptor) {
+ var o = jsx.object.inheritFrom(prototype);
+
+ if (typeof descriptor != "undefined")
+ {
+ Object.defineProperties(o, descriptor);
+ }
+
+ return o;
+ };
+ Object.create._emulated = true;
+ }
+
+ if (!jsx.object.isNativeMethod(jsx.tryThis("Object"), "keys"))
+ {
+ /**
+ * @param {Object} obj
+ */
+ Object.keys = function (obj) {
+ return jsx.object.getKeys(obj);
+ };
+ Object.keys._emulated = true;
+ }
+}
+
+/**
+ * Returns a feature of an object
+ *
+ * @param {Object} obj
+ * Object which provides the feature
+ * @params {string}
+ * Property names on the feature path, including the property
+ * for the feature itself. For example, use
+ * <code>jsx.object.getFeature("foo", "bar", "baz")</code> for
+ * safe access to <code>foo.bar.baz</code>.
+ * @return {any}
+ * <code>undefined</code> if <var>obj</var> does not have such
+ * a feature. Note that features whose value can be
+ * <code>undefined</code> cannot be detected with this method.
+ */
+jsx.object.getFeature = function (obj) {
+ for (var i = 1, len = arguments.length; i < len; i++)
+ {
+ var arg = arguments[i];
+ if (typeof obj != "undefined" && typeof obj[arg] != "undefined" && obj[arg])
+ {
+ obj = obj[arg];
+ }
+ else
+ {
+ return void 0;
+ }
+ }
+
+ return obj;
+};
+
+/**
+ * Emulates the <code>instanceof</code> operator (JavaScript 1.5) compatible to JavaScript 1.1
+ * for <strong>one</strong> inheritance level.
+ *
+ * Example:
+ * <pre><code>
+ * var o = new Object();
+ * o instanceof Object; // yields `true'
+ *
+ * function Foo()
+ * {
+ * }
+ * var o = new Foo();
+ * o instanceof Object; // yields `true'
+ * o instanceof Foo; // yields `true' also
+ * isInstanceOf(o, Object); // yields `false'
+ * isInstanceOf(o, Foo); // yields `true'
+ * </code></pre>
+ *
+ * NOTE: This method has previously been provided by {@link types.js};
+ * optimizations in code reuse moved it here.
+ *
+ * @author (C) 2003, 2011, 2013 Thomas Lahn &lt;js@PointedEars.de&gt;
+ * @param {Object} obj
+ * Expression to be determined a <var>Prototype</var> object.
+ * @param {Function} Constructor
+ * Object to be determined the constructor of a.
+ * @return {boolean}
+ * <code>true</code> if <code>obj</code> is an object derived
+ * from <var>Prototype</var>, <code>false</code> otherwise.
+ */
+jsx.object.isInstanceOf = //(function () {
+// var jsx_object = jsx.object;
+//
+// return
+ function (obj, Constructor) {
+ return !!(obj && Constructor
+ && typeof obj.constructor != "undefined"
+ && obj.constructor == Constructor
+
+ /*
+ * For a built-in type T, T.prototype often has the same
+ * [[Class]] like instances (exception: RegExp);
+ * BUT error-prone for native user-defined objects (Color "==" KeyValue)!
+ */
+// || jsx_object.getClass(obj) == jsx_object.getClass(Prototype.prototype)
+ );
+ };
+//}());
+
+/**
+ * Returns the name of a function
+ *
+ * @param {Function|String} aFunction
+ * @return {string}
+ * The name of a function if it has one; the empty string otherwise.
+ */
+jsx.object.getFunctionName = function (aFunction) {
+ /* Return the empty string for null or undefined */
+ return (aFunction != null
+ && typeof aFunction.name != "undefined" && aFunction.name)
+ || (String(aFunction).match(/\s*function\s+([A-Za-z_]\w*)/) || [, ""])[1];
+};
+
+/**
+ * Returns minimum documentation for a function
+ *
+ * @param {Function|String} aFunction
+ * @return {string}
+ */
+jsx.object.getDoc = function (aFunction) {
+ return (String(aFunction).match(
+ /^\s*(function(\s+[A-Za-z_]\w*)?\s*\([^\)]*\))/) || [, ""])[1];
+};
+
+/**
+ * Gets the stack trace of the calling execution context.
+ *
+ * Based on getStackTrace() from jsUnit 2.2alpha of 2006-03-24.
+ *
+ * @return {string}
+ * The stack trace of the calling execution context, if available.
+ */
+jsx.getStackTrace = function () {
+ /**
+ * @private
+ * @param excp
+ */
+ function parseErrorStack(excp)
+ {
+ var stack = [];
+
+ if (excp && excp.stack)
+ {
+ var stacklist = excp.stack.split('\n');
+
+// for (var i = 0; i < stacklist.length - 1; i++)
+// {
+// var framedata = stacklist[i];
+//
+// var name = framedata.match(/^\s*(at\s+)?(\w*)/)[2];
+// if (!name)
+// {
+// name = 'anonymous';
+// }
+//
+// stack[stack.length] = name;
+// }
+ stack = stacklist;
+
+ /* remove top level anonymous functions to match JScript */
+// while (stack.length && stack[stack.length - 1] == 'anonymous')
+// {
+// stack.length = stack.length - 1;
+// }
+ }
+
+ return stack;
+ }
+
+ var result = '';
+
+ if (typeof arguments.caller != 'undefined')
+ {
+ /* JScript and older JavaScript */
+ for (var a = arguments.caller; a != null; a = a.caller)
+ {
+ result += '> ' + (jsx.object.getFunctionName(a.callee) || "anonymous")
+ + '\n';
+ if (a.caller == a)
+ {
+ result += '*';
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* other */
+ if (typeof Error != "function")
+ {
+ return result;
+ }
+
+ var stack = parseErrorStack(new Error());
+ result = stack.slice(2).join("\n");
+// for (var i = 1; i < stack.length; i++)
+// {
+// result += '> ' + stack[i] + '\n';
+// }
+ }
+
+ return result;
+};
+
+/**
+ * Returns the value of an object's internal <code>[[Class]]</code>
+ * property.
+ *
+ * Calls the <code>Object.prototype.toString()</code> method on
+ * the object and returns the result of matching against
+ * the specified return value, which includes the value of
+ * the object's internal <code>[[Class]]</code> property. Although
+ * implementations use prototype-based inheritance, the property
+ * value is useful for determining the type of an object regardless
+ * of the current value of its <code>constructor</code> property.
+ * For example, that makes it possible to recognize <code>Array</code>
+ * instances independent of the global context in which they were
+ * constructed.
+ *
+ * @function
+ * @return {string|Undefined}
+ * The value of an object's internal [[Class]] property, or
+ * <code>undefined</code> if the property value cannot be determined.
+ */
+jsx.object.getClass = (function () {
+ var _toString = ({}).toString;
+
+ /**
+ * @param obj
+ */
+ return function (obj) {
+ return (_toString.call(obj)
+ .match(/^\s*\[object\s+(\S+)\s*\]\s*$/) || [, ])[1];
+ };
+}());
+
+/**
+ * Retrieves the value of a property of an object
+ *
+ * @param {Object} obj
+ * @param {string} sProperty
+ * @param aDefault
+ * @return {any}
+ * @throw
+ * {@link jsx.object#PropertyError} if the property
+ * does not exist or has the <code>undefined</code> value, and
+ * <var>aDefault</var> was not provided
+ */
+jsx.object.getProperty = function (obj, sProperty, aDefault) {
+ if (typeof obj[sProperty] != "undefined")
+ {
+ return obj[sProperty];
+ }
+
+ /* default value not passed */
+ if (arguments.length < 3)
+ {
+ return jsx.throwThis("jsx.object.PropertyError", sProperty);
+ }
+
+ return aDefault;
+};
+
+/**
+ * Determines if a value refers to an object.
+ *
+ * <p>Returns <code>true</code> if the value is a reference
+ * to an object; <code>false</code> otherwise.</p>
+ *
+ * <p>An value "is an object" if it is a function or
+ * <code>typeof "object"</code> but not <code>null</code>.
+ *
+ * @return {boolean}
+ */
+jsx.object.isObject = function (a) {
+ var t = typeof a;
+ return t == "function" || t == "object" && a !== null;
+};
+
+/**
+ * Determines if a value refers to an {@link Array}.
+ * <p>
+ * Returns <code>true</code> if the value is a reference to an object
+ * whose <code>[[Class]]</code> internal property is <code>"Array"</code>;
+ * <code>false</code> otherwise.
+ * </p>
+ *
+ * @function
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.3.2
+ */
+jsx.object.isArray = (function () {
+ var _jsx = jsx;
+ var _global = _jsx.global;
+ var _jsx_object = jsx.object;
+ var _getClass = _jsx_object.getClass;
+ var _isNativeMethod = _jsx_object.isNativeMethod;
+
+ /**
+ * @param a
+ * Potential <code>Array</code>
+ * @return {boolean}
+ */
+ return function (a) {
+ if (_isNativeMethod(_global.Array, "isArray")
+ && !Array.isArray._emulated)
+ {
+ return Array.isArray(a);
+ }
+
+ return (_getClass(a) === "Array");
+ };
+}());
+
+/**
+ * Returns the absolute path for a URI-reference
+ *
+ * @param {string} relativePath
+ * @param {string} basePath
+ * @return {string}
+ */
+jsx.absPath = function (relativePath, basePath) {
+ var uri = (basePath || document.URL).replace(/[?#].*$/, "").split("/");
+ relativePath = relativePath.split("/");
+
+ if (uri[uri.length - 1] != "")
+ {
+ uri.pop();
+ }
+
+ for (var i = 0, len = relativePath.length; i < len; ++i)
+ {
+ var component = relativePath[i];
+ if (component == "..")
+ {
+ uri.pop();
+ }
+ else if (component != ".")
+ {
+ uri.push(component);
+ }
+ }
+
+ return uri.join("/");
+};
+
+/**
+ * Imports object properties into the global namespace.
+ *
+ * Convenience method, also for backwards compatibility to versions before
+ * strict namespacing. Does not load script files dynamically; use
+ * jsx.importFrom() for that and include jsx.net.http.
+ *
+ * @function
+ * @return {boolean}
+ * <code>false</code> if <var>properties</var> is provided and not
+ * all properties could be imported; <code>true</code> otherwise.
+ * @throws TypeError, if <var>obj</var> is not an iterable object
+ */
+jsx._import = (function () {
+ var _jsx_object = jsx.object;
+ var _getKeys = _jsx_object.getKeys;
+ var _hasOwnProperty = _jsx_object._hasOwnProperty;
+ var _isArray = _jsx_object.isArray;
+
+ /**
+ * @param {Object} obj
+ * @param {string|Array|Null} properties (optional)
+ * Name or list of names of properties to import. If not
+ * provided or <code>null</code>, all own enumerable properties
+ * of <var>obj</var> are imported.
+ * @param {string} objAlias (optional)
+ * The alias property on the Global object that should be used
+ * instead of the Global Object. Helps to avoid spoiling
+ * the global namespace.
+ * @param {string|Array} propertyAliases (optional)
+ * The alias(es) that should be used for each property, in order,
+ * that is specified in <var>properties</var>. Helps to avoid
+ * overwriting property values.
+ * There must be specified as many aliases as properties were
+ * specified. Ignored if <var>properties</var> is
+ * <code>null</code>.
+ */
+ return function (obj, properties, objAlias, propertyAliases) {
+ if (!obj)
+ {
+ return jsx.throwThis("TypeError",
+ "expected iterable object, saw " + obj + " : " + (obj === null ? "Null" : typeof obj),
+ "jsx._import");
+ }
+
+ var result = true;
+
+ var root = jsx.global;
+ if (objAlias != null)
+ {
+ root[objAlias] = {};
+ root = root[objAlias];
+ }
+
+ var propertiesArg = properties;
+ if (properties == null)
+ {
+ properties = _getKeys(obj);
+ }
+ else if (!_isArray(properties))
+ {
+ properties = [properties];
+ }
+
+ var len = properties.length;
+ if (propertiesArg != null && propertyAliases != null)
+ {
+ if (!_isArray(propertyAliases))
+ {
+ propertyAliases = [propertyAliases];
+ }
+
+ if (len != propertyAliases.length)
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Different number of property names and aliases",
+ len, propertyAliases.length],
+ "jsx._import");
+ }
+ }
+
+ for (var i = 0; i < len; ++i)
+ {
+ var sourceProperty = properties[i];
+ if (propertiesArg == null || _hasOwnProperty(obj, sourceProperty))
+ {
+ var targetProperty = sourceProperty;
+ if (propertiesArg != null && propertyAliases != null)
+ {
+ targetProperty = propertyAliases[i];
+ }
+
+ root[targetProperty] = obj[sourceProperty];
+ }
+ else
+ {
+ result = false;
+ }
+ }
+
+ return result;
+ };
+}());
+
+/* ES 5: Reserved words may be used in MemberExpression */
+jsx["import"] = jsx._import;
+
+/**
+ * Imports a script, and optionally the object it defines, or some of their
+ * properties, into the global namespace.
+ *
+ * NOTE: Issues a synchronously-handled HTTP request which blocks all script
+ * execution until a response is received or the request times out.
+ * Can therefore not be used to import jsx.net.http.
+ *
+ * @function
+ * @requires jsx.net.http#Request
+ * @return {boolean}
+ * <code>true</code> if the script could be successfully <em>loaded</em>
+ * (not: included).
+ */
+jsx.importFrom = (function () {
+ /* Imports */
+ var _import = jsx._import;
+ var Request;
+
+ /**
+ * @param {string} uri
+ * URI of the script to be imported
+ * @param {Object} obj
+ * Object from the script to be imported (optional)
+ * @param {Array} properties (optional)
+ * Properties of the object from the script to be imported (optional).
+ * See {@link jsx#_import}.
+ * @param {string} objAlias (optional)
+ * See {@link jsx#_import}.
+ * @param {Array} propertyAliases (optional)
+ * See {@link jsx#_import}.
+ */
+ return function jsx_importFrom (uri, obj, properties, objAlias, propertyAliases) {
+ /* One-time import */
+ if (!Request)
+ {
+ Request = jsx.net.http.Request;
+ }
+
+ jsx_importFrom.lastImport = uri;
+ var req = new Request(uri, "GET", false, function (response) {
+ /*
+ * NOTE: Passing response.responseText to eval() is not ES5-compatible;
+ * conforming implementations create a new execution context with
+ * EMPTY scope chain.
+ */
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+
+ if (typeof script.text == "undefined")
+ {
+ script.appendChild(document.createTextNode(response.responseText));
+ }
+ else
+ {
+ script.text = response.responseText;
+ }
+
+ /* NOTE: document.head was introduced with HTML5 WD */
+ (document.head || document.getElementsByTagName("head")[0]).appendChild(script);
+
+ if (arguments.length > 1)
+ {
+ return _import(obj, properties, objAlias, propertyAliases);
+ }
+
+ return true;
+ });
+
+ return req.send();
+ };
+}());
+
+/**
+ * Imports once an object or some of its properties
+ * from a script resource into the global namespace.
+ *
+ * @function
+ * @return {boolean}
+ * <code>true</code> if the script specified by <var>uri</var>
+ * has already been included; <code>false</code> otherwise.
+ * @see jsx#importFrom
+ */
+jsx.importOnce = (function () {
+ var _getProperty = jsx.object.getProperty;
+ var _absPath = jsx.absPath;
+ var _importFrom = jsx.importFrom;
+
+ /**
+ * @param {string} uri
+ * URI of the resource to be imported
+ * @param {Object} obj
+ * Object to import
+ * @param {Array} properties (optional)
+ * Properties of the object from the script to be imported.
+ * See {@link jsx#_import}.
+ * @param {string} objAlias (optional)
+ * See {@link jsx#_import}.
+ * @param {Array} propertyAliases (optional)
+ * See {@link jsx#_import}.
+ */
+ function importOnce (uri, obj, properties, objAlias, propertyAliases)
+ {
+ /**
+ * @param {string} uri
+ */
+ function scriptIncluded (uri)
+ {
+ var scripts = document.getElementByTagName("script");
+ if (scripts)
+ {
+ var uriAbsPath = _absPath(uri);
+ for (var i = 0, len = scripts.length; i < len; ++i)
+ {
+ var script = scripts[i];
+ if (_absPath(script.src) == uriAbsPath)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ var result = false;
+
+ if (uri
+ && !scriptIncluded(uri)
+ && !_getProperty(importOnce.imports, uri, null))
+ {
+ result = _importFrom(uri, obj, properties, objAlias, propertyAliases);
+ if (result)
+ {
+ importOnce.imports[uri] = true;
+ }
+ }
+
+ return result;
+ }
+
+ importOnce.imports = {};
+
+ return importOnce;
+}());
+
+/**
+ * Executes a function if and once its requirements are fulfilled.
+ *
+ * @function
+ * @return {any}
+ * The return value of <var>callback</var>,
+ * <code>undefined</code> otherwise.
+ */
+jsx.require = (function () {
+ var _importOnce = jsx.importOnce;
+ var _isArray = jsx.object.isArray;
+
+ /**
+ * @param {string|Array} uri
+ * URI-reference or <code>Array</code> of URI-references
+ * specifying the requirement(s)
+ * @param {Function} callback
+ * Function to be executed
+ * @return {mixed}
+ * The return value of <var>callback</var>,
+ * <code>false</code> otherwise.
+ */
+ return function (uri, callback) {
+ if (!_isArray(uri))
+ {
+ uri = [uri];
+ }
+
+ var success = true;
+ for (var i = 0, len = uri.length; i < len; ++i)
+ {
+ if (!_importOnce(uri[i]))
+ {
+ success = false;
+ break;
+ }
+ }
+
+ if (success)
+ {
+ return callback();
+ }
+ };
+}());
+
+/**
+ * @param {object} thisArg
+ * Reference to the calling object.
+ * @param {Array} argArray
+ * Arguments for the object.
+ */
+function Function_prototype_apply (thisArg, argArray)
+{
+ var
+ jsx_object = jsx.object,
+ jsx_global = jsx.global;
+
+ if (!thisArg)
+ {
+ thisArg = jsx_global;
+ }
+
+ var
+ o = thisArg || this,
+ p = jsx_object.findNewProperty(o);
+
+ if (p)
+ {
+ o[p] = this;
+
+ var a = new Array();
+ for (var i = 0, len = argArray.length; i < len; i++)
+ {
+ a[i] = "argArray[" + i + "]";
+ }
+
+ eval("o[p](" + a + ")");
+
+ delete o[p];
+ }
+}
+
+if (jsx.options.emulate)
+{
+/* Disabled until ECMAScript allows to hide properties from iteration */
+//jsx.object.setdProperties(Object.prototype, {
+// extend : extend,
+// clone : clone,
+// findNewProperty: findNewProperty,
+// _hasOwnProperty: _hasOwnProperty
+// });
+
+ if (jsx.object.isMethod(this, "eval"))
+ {
+ /*
+ * KJS 3.5.1 does not support named FunctionExpressions within Object
+ * literals if the literal is an AssignmentExpression (right-hand side
+ * of an assignment or a passed function argument).
+ * fixed since <http://bugs.kde.org/show_bug.cgi?id=123529>
+ */
+
+ jsx.object.extend(Function.prototype, {
+ /**
+ * Applies a method of another object in the context
+ * of a different object (the calling object).
+ *
+ * @memberOf Function#prototype
+ * @see Function_prototype_apply
+ */
+ apply: Function_prototype_apply,
+
+ /**
+ * Calls (executes) a method of another object in the
+ * context of a different object (the calling object).
+ *
+ * @memberOf Function#prototype
+ * @param {Object} thisArg
+ * Reference to the calling object. SHOULD NOT
+ * be a host object, since augmentation is required.
+ * @params {_}
+ * Arguments for the object.
+ */
+ call: function (thisArg) {
+ var a = new Array();
+
+ for (var i = 1, len = arguments.length; i < len; i++)
+ {
+ a[i] = "arguments[" + i + "]";
+ }
+
+ if (!thisArg)
+ {
+ thisArg = jsx.global;
+ }
+
+ var
+ o = {},
+ p = jsx.object.findNewProperty(o);
+
+ if (p)
+ {
+ o[p] = this;
+ eval("o[p](" + a + ")");
+ delete o[p];
+ o = null;
+ }
+ },
+
+ /**
+ * Returns a <code>Function</code> that has a defined
+ * <code>this</code> value and calls the calling
+ * <code>Function</code> with default parameters.
+ *
+ * @function
+ * @return {Function}
+ * @see 15.3.4.5 Function.prototype.bind (thisArg [, arg1 [, arg2, ...]])
+ */
+ bind: (function () {
+ var _slice;
+ var _getClass = jsx.object.getClass;
+
+ /**
+ * @param {Object} thisArg
+ * <code>this</code> value of the returned
+ * <code>Function</code>
+ * @params Default parameters
+ */
+ return function (thisArg) {
+ var target = this;
+ if (typeof target != "function")
+ {
+ return jsx.throwThis("TypeError");
+ }
+
+ if (!_slice)
+ {
+ _slice = Array.prototype.slice;
+ }
+
+ var boundArgs = _slice.call(arguments, 1);
+ var f = function () {
+ return target.apply(thisArg, boundArgs.concat(_slice.call(arguments)));
+ };
+
+ if (_getClass(target) == "Function")
+ {
+ f.length = target.length + boundArgs.length;
+ }
+ else
+ {
+ if (typeof Object.defineProperty == "function")
+ {
+ /*
+ * [[Writable]]: false, [[Enumerable]]: false,
+ * [[Configurable]]: false
+ */
+ Object.defineProperty(f, "length");
+ }
+ else
+ {
+ f.length = 0;
+ }
+ }
+
+ return f;
+ };
+ }()),
+
+ /**
+ * Constructs a new object using the calling object as constructor
+ * and elements of the referred array as items of the arguments list.
+ * <p>
+ * Example:
+ * <pre><code>var d = Date.construct([2009, 8, 1]);</code></pre>
+ * is equivalent to
+ * <pre><code>var d = new Date(2009, 8, 1);</code></pre>
+ * but, by contrast, allows for passing an arbitrary number of
+ * arguments per the array's elements.
+ * </p>
+ * @memberOf Function#prototype
+ * @param {Array} argArray
+ * @return {Object} Reference to the new instance
+ */
+ construct: function (argArray) {
+ var a = new Array();
+ for (var i = 0, len = argArray.length; i < len; ++i)
+ {
+ a[i] = "argArray[" + i + "]";
+ }
+
+ return eval("new this(" + a + ")");
+ },
+
+ /**
+ * @author Courtesy of Asen Bozhilov, slightly adapted
+ * @function
+ * @memberOf Function#prototype
+ * @return {Object} Reference to the new instance
+ */
+ construct2: (function () {
+ function Dummy(constructor, argArray) {
+ constructor.apply(this, argArray);
+ }
+
+ /**
+ * @param {Array} argArray
+ */
+ return function (argArray) {
+ Dummy.prototype = this.prototype;
+ return new Dummy(this, argArray);
+ };
+ }())
+ });
+ }
+}
+
+/**
+ * Includes the prototype object of another object in the prototype
+ * chain of objects created with the calling Function object.
+ * <p>
+ * Used with constructors to establish multi-level prototype-based
+ * inheritance (much like class-based inheritance in Java). To that end,
+ * this method adds a <code>_super</code> property to the function to refer
+ * to <var>Constructor</var>, the constructor of the parent prototype.
+ * Likewise, instances constructed with the resulting function have a
+ * <code>_super</code> property to refer to their constructor.
+ * </p><p>
+ * NOTE: Because of this, you need to use the constructor's
+ * <code>_super</code> property if you want to refer to the parent's
+ * constructor in the instance's constructor; using the instance's
+ * <code>_super</code> property would result in infinite recursion,
+ * and ultimately a stack overflow. You may call the parent's
+ * constructor explicitly within the constructor of the child, using
+ * the (equivalent of the) <code>arguments.callee._super.call()</code>
+ * method (or calling it explicitly as a method of the inheriting
+ * prototype); in prototype methods, use
+ * <code><var>Constructor</var>._super.prototype.method.call()</code>
+ * or refer to the parent constructor directly.
+ * </p>
+ *
+ * @function
+ * @return {Function}
+ * A reference to the constructor of the extended prototype object
+ * if successful; <code>null</code> otherwise.
+ */
+Function.prototype.extend = (function () {
+ var _jsx = jsx;
+ var _global = _jsx.global;
+ var _jsx_object = _jsx.object;
+
+ /**
+ * @private
+ * @function
+ * @return {Object}
+ */
+ var _iterator = (function () {
+ /* Optimize if ECMAScript 5 features were available */
+ if (_jsx_object.isNativeMethod(_global.Object, "defineProperties"))
+ {
+ return function () {
+ return this;
+ };
+ }
+
+ return function () {
+ _jsx.warn("for (var p in o.iterator()) { f(); } is inefficient,"
+ + " consider using o.forEach(f, ...) instead");
+
+ var o = new Object();
+
+ for (var p2 in this)
+ {
+ switch (p2)
+ {
+ case "_super":
+ case "constructor":
+ case "iterator":
+ case "forEach":
+ break;
+
+ default:
+ o[p2] = true;
+ }
+ }
+
+ return o;
+ };
+ }());
+
+ function _forEach(fCallback, thisObj)
+ {
+ var t = typeof fCallback;
+ if (!_jsx_object.isMethod(fCallback))
+ {
+ return _jsx.throwThis(
+ "TypeError",
+ (!/^\s*unknown\s*$/i.test(t) ? fCallback : "arguments[0]")
+ + " is not a function",
+ this + ".forEach");
+ }
+
+ for (var p in this)
+ {
+ switch (p)
+ {
+ case "_super":
+ case "constructor":
+ case "iterator":
+ case "forEach":
+ break;
+
+ default:
+ /* also supports host object's methods */
+ Function.prototype.call.call(fCallback, thisObj, this[p], p, this);
+ }
+ }
+ }
+
+ /**
+ * @param {Function} fConstructor
+ * Constructor from which prototype object should be
+ * inherited.
+ * @param {Object} oProtoProps
+ * Object from which to shallow-copy properties as prototype
+ * properties. Of those, the <code>_super</code>,
+ * <code>constructor</code>, and <code>_userDefined</code>
+ * properties are ignored as they are used internally.
+ */
+ return function (fConstructor, oProtoProps) {
+ var me = this;
+
+ /*
+ * Allows constructor to be null or undefined to inherit from
+ * Object.prototype by default (see below)
+ */
+ if (fConstructor == null)
+ {
+ if (typeof fConstructor == "undefined")
+ {
+ /* Passing undefined is probably unintentional, so warn about it */
+ _jsx.warn((_jsx_object.getFunctionName(me) || "[anonymous Function]")
+ + ".extend(" + "undefined, " + oProtoProps + "):"
+ + " Parent constructor is undefined, using Object");
+ }
+
+ fConstructor = "Object";
+ }
+
+ /*
+ * Supports strings being passed that denote properties of the
+ * Global Object.
+ *
+ * TODO: An API that only registers strings as references to features
+ * defined later, and implements inheritance using this registry
+ * on user call only, might be useful for constructors defined
+ * in Object initializers.
+ */
+ if (typeof fConstructor.valueOf() == "string")
+ {
+ fConstructor = _jsx.global[fConstructor];
+ }
+
+ var t = typeof fConstructor;
+ if (t != "function")
+ {
+ _jsx.throwThis("TypeError",
+ (/\s*unknown\s*/i.test(t) ? "Unknown" : t) + " is not a function");
+ return null;
+ }
+
+ this.prototype = _jsx_object.inheritFrom(fConstructor.prototype);
+
+ if (oProtoProps)
+ {
+ for (var p in oProtoProps)
+ {
+ this.prototype[p] = oProtoProps[p];
+ }
+ }
+
+ this._super = fConstructor;
+ this.prototype._super = fConstructor.prototype;
+ this.prototype.constructor = this;
+ this._userDefined = true;
+
+ /* PERF: for (var p in o.iterator()) is rather inefficient */
+ /**
+ * @deprecated
+ * @return {Object}
+ */
+ if (typeof this.prototype.iterator == "undefined")
+ {
+ this.prototype.iterator = _iterator;
+ }
+
+ /* Optimize iteration if ECMAScript 5 features are available */
+ if (_jsx_object.isNativeMethod(_global.Object, "defineProperties"))
+ {
+ var
+ userDefProtoProps = ["_super", "constructor", "iterator"],
+ oDescriptors = {},
+ proto = this.prototype;
+
+ for (var i = userDefProtoProps.length; i--;)
+ {
+ p = userDefProtoProps[i];
+ oDescriptors[p] = {
+ value: proto[p],
+ enumerable: false
+ };
+ }
+
+ _jsx.tryThis(
+ function () {
+ Object.defineProperties(proto, oDescriptors);
+ },
+ function (e) {
+ _jsx.warn(_jsx_object.getFunctionName(me) + ".extend("
+ + _jsx_object.getFunctionName(fConstructor) + ", "
+ + oProtoProps + "): " + e.name + ': ' + e.message);
+ });
+ }
+
+ if (!jsx.object.isNativeMethod(this.prototype, "forEach"))
+ {
+ /**
+ * Calls a function for each real property of the object
+ * in arbitrary order. Workaround for for-in iteration
+ * on objects with augmented prototype object.
+ *
+ * @param {Function} fCallback
+ * @param {Object} thisObj (optional)
+ * @throws TypeError
+ */
+ this.prototype.forEach = _forEach;
+
+ /* Optimize iteration if ECMAScript 5 features are available */
+ if (_jsx_object.isNativeMethod(_jsx.global.Object, "defineProperty"))
+ {
+ _jsx.tryThis(
+ function () {
+ Object.defineProperty(me.prototype, "forEach", {
+ value: me.prototype.forEach,
+ enumerable: false
+ });
+ },
+ function (e) {
+ /* IE 8 goes here */
+ _jsx.warn(
+ 'Borken implementation: Object.defineProperty is a method'
+ + ' but [[Call]](this.prototype, "forEach") throws exception ("'
+ + e.name + ': ' + e.message + '")');
+ }
+ );
+ }
+ }
+
+ return this;
+ };
+}());
+
+jsx.array = new Object();
+/**
+ * Maps one array to another
+ *
+ * @param {Array} array
+ * Array to be mapped
+ * @param {Callable} callback
+ * @param {Object} oThis (optional)
+ * @return {Array}
+ * <var>array</var> with <var>callback</var> applied to each element.
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.19
+ */
+function jsx_array_map (array, callback, oThis)
+{
+ var _isMethod = jsx.object.isMethod;
+
+ if (!_isMethod(callback))
+ {
+ return jsx.throwThis("TypeError",
+ (_isMethod(callback, "toSource") ? callback.toSource() : callback)
+ + " is not callable",
+ this + ".map");
+ }
+
+ var
+ len = array.length >>> 0,
+ res = [];
+
+ for (var i = 0; i < len; ++i)
+ {
+ if (i in array)
+ {
+ res[i] = callback.call(oThis, array[i], i, array);
+ }
+ }
+
+ return res;
+}
+jsx.array.map = jsx_array_map;
+
+if (jsx.options.emulate)
+{
+ /* Defines Array.isArray() if not already defined */
+ jsx.object.extend(Array, {isArray: jsx.object.isArray});
+
+ /* Defines Array.prototype.indexOf and .map() if not already defined */
+ jsx.object.extend(Array.prototype, {
+ /**
+ * Returns the first index at which a given element can be found in
+ * the array, or -1 if it is not present.
+ *
+ * @param searchElement
+ * Element to locate in the array.
+ * @param {Number} fromIndex
+ * The index at which to begin the search. Defaults to 0, i.e.
+ * the whole array will be searched. If the index is greater than
+ * or equal to the length of the array, -1 is returned, i.e.
+ * the array will not be searched. If negative, it is taken as
+ * the offset from the end of the array. Note that even when
+ * the index is negative, the array is still searched from front
+ * to back. If the calculated index is less than 0, the whole array
+ * will be searched.
+ * @return {number}
+ * The first index at which a given element can be found in
+ * the array, or -1 if it is not present.
+ * @author Courtesy of developer.mozilla.org, unverified
+ * @memberOf Array.prototype
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.14
+ */
+ indexOf: function (searchElement, fromIndex) {
+ "use strict";
+ if (this === void 0 || this === null)
+ {
+ throw new TypeError();
+ }
+
+ var t = Object(this);
+
+ var len = t.length >>> 0;
+ if (len === 0) {
+ return -1;
+ }
+
+ var n = 0;
+ if (arguments.length > 0)
+ {
+ n = Number(fromIndex);
+ if (n !== n) {
+ /* shortcut for verifying if it's NaN */
+ n = 0;
+ }
+ else if (n !== 0 && n !== Infinity && n !== -Infinity)
+ {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ }
+
+ if (n >= len)
+ {
+ return -1;
+ }
+
+ var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
+ for (; k < len; k++)
+ {
+ if (k in t && t[k] === searchElement)
+ {
+ return k;
+ }
+ }
+
+ return -1;
+ },
+
+ /**
+ * Maps one array to another
+ *
+ * @param {Callable} callback
+ * @param {Object} oThis (optional)
+ * @return {Array}
+ * The original array with <var>callback</var> applied to each element.
+ * @see ECMAScript Language Specification, Edition 5.1, section 15.4.4.19
+ */
+ map: function (callback, oThis) {
+ return jsx.array.map(this, callback, oThis);
+ },
+
+ slice: function (start, end) {
+ var a = [];
+ var len = this.length >>> 0;
+ var relativeStart = parseInt(start, 10);
+ var k = ((relativeStart < 0)
+ ? Math.max(len + relativeStart, 0)
+ : Math.min(relativeStart, len));
+ var relativeEnd = ((typeof end == "undefined")
+ ? len
+ : parseInt(end, 10));
+ var final = ((relativeEnd < 0)
+ ? Math.max(len + relativeEnd, 0)
+ : Math.min(relativeEnd, len));
+ var n = 0;
+ while (k < final)
+ {
+ if ((k in this))
+ {
+ a[n] = this[k];
+ }
+
+ ++k;
+ ++n;
+ }
+
+ return a;
+ }
+ });
+
+ if (typeof Array.from == "undefined")
+ {
+ /**
+ * Returns an <code>Array</code> created from mapping items
+ * of an Array-like object.
+ *
+ * @function
+ */
+ Array.from = (function () {
+ var _map = Array.prototype.map;
+
+ /**
+ * @param {Function} builder
+ * Mapping function whose return value specifies the
+ * mapped value in the new <code>Array</code>
+ * @param {Object} iterable
+ * <code>Array</code>-like object
+ * @param {Object} oThis
+ * <code>this</code> value in the mapping function
+ * @return {Array}
+ * @see Array.prototype#map
+ */
+ return function (builder, iterable, oThis) {
+ return _map.call(iterable, builder, oThis);
+ };
+ }());
+ }
+
+ if (typeof Array.destructure == "undefined")
+ {
+ /**
+ * Maps elements of an <code>Array</code>-like object
+ * to named properties of another object.
+ *
+ * <p>NOTE: Equivalent to Array destructuring (JavaScript 1.7+):</p>
+ * <pre><code>var o = Array.destructure(["bar", "foo"], ["foo", "bar"]);</code></pre>
+ * is equivalent to
+ * <pre><code>var o = {};
+ * [o.foo, o.bar] = ["bar", "foo"];</code></pre>
+ *
+ * @param {Object} a
+ * <code>Array</code>-like object whose elements should be mapped.
+ * @param {Array} properties
+ * Names of the properties that array elements should be mapped to.
+ * If an element of this <code>Array</code> is <code>undefined</code>
+ * or <code>null</code> (the former can be facilitated with
+ * simply omitting the element value in an <code>Array</code>
+ * Initialiser when not the last element of this <code>Array</code>),
+ * the corresponding element of <var>a</var> is not mapped.
+ * @param {Object} oTarget
+ * Target object. If a false-value, a new <code>Object</code>
+ * instance is being created.
+ * @returns {Object}
+ * <var>oTarget</var> or a new <code>Object</code> instance
+ * augmented with the specified properties and values.
+ */
+ Array.destructure = function (a, properties, oTarget) {
+ var o = oTarget || {};
+
+ for (var i = 0, len = properties.length; i < len; ++i)
+ {
+ var propertyName = properties[i];
+ if (propertyName != null)
+ {
+ o[propertyName] = a[i];
+ }
+ }
+
+ return o;
+ };
+ }
+}
+
+/**
+ * General exception
+ *
+ * @constructor
+ * @extends Error
+ * @param {string} sMsg
+ */
+jsx.Error = function jsx_Error (sMsg) {
+ var msg = (sMsg || "Unspecified error");
+ var _super = jsx_Error._super;
+ var e = null;
+
+ if (typeof _super == "function")
+ {
+ _super.call(this, msg);
+
+ jsx.tryThis(function () { e = new _super(); });
+ }
+
+ if (!this.message)
+ {
+ /**
+ * @type string
+ */
+ this.message = msg;
+ }
+
+ if (!this.lineNumber && e)
+ {
+ /**
+ * @type number
+ */
+ this.lineNumber = e.lineNumber || e.line;
+ }
+
+ if (!this.stack && e && e.stack)
+ {
+ var stack = String(e.stack).split(/\r?\n|\r/).slice(2);
+ this.stack = stack.join("\n");
+ }
+};
+
+jsx.Error.extend(
+ typeof Error != "undefined" ? Error : function () {},
+ {
+ /**
+ * @memberOf jsx.Error#prototype
+ */
+ name: "jsx.Error",
+ getMessage: function () { return this.message; },
+ getStackTrace: function () { return this.stack; },
+ printStackTrace: function () {
+ var s = this.getStackTrace();
+ jsx.dmsg(s) || window.alert(s);
+ }
+});
+
+/**
+ * Invalid argument
+ *
+ * @constructor
+ * @extends jsx#Error
+ * @param {string} sReason
+ * @param sGot
+ * @param sExpected
+ */
+jsx.InvalidArgumentError =
+ function jsx_InvalidArgumentError (sReason, sGot, sExpected) {
+ jsx_InvalidArgumentError._super.call(this,
+ (sReason || "Invalid argument(s)")
+ + (sGot && sGot.length > 0 ? ": " + sGot : "")
+ + (sExpected ? "; expected " + sExpected : ""));
+};
+
+jsx.InvalidArgumentError.extend(jsx.Error, {
+ /**
+ * @memberOf jsx.InvalidArgumentError#prototype
+ */
+ name: "jsx.InvalidArgumentError"
+});
+
+/**
+ * Object-related exception
+ *
+ * @constructor
+ * @param {string} sMsg
+ * @extends jsx#Error
+ */
+jsx.object.ObjectError = function jsx_object_ObjectError (sMsg) {
+ jsx_object_ObjectError._super.call(this, sMsg);
+};
+
+jsx.object.ObjectError.extend(jsx.Error, {
+ /**
+ * @memberOf jsx.object.ObjectError#prototype
+ */
+ name: "jsx.object.ObjectError"
+});
+
+/**
+ * Property-related exception
+ *
+ * @constructor
+ * @param {string} sMsg
+ * @extends jsx.object#ObjectError
+ */
+jsx.object.PropertyError = function jsx_object_PropertyError (sMsg) {
+ jsx_object_PropertyError._super.call(
+ this, "No such property" + (arguments.length > 0 ? (": " + sMsg) : ""));
+};
+
+jsx.object.PropertyError.extend(jsx.object.ObjectError, {
+ /**
+ * @memberOf jsx.object.PropertyError#prototype
+ */
+ name: "jsx.object.PropertyError"
+});
/live/object/object-compat.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/interval.js
===================================================================
--- live/math/interval.js (nonexistent)
+++ live/math/interval.js (revision 509)
@@ -0,0 +1,230 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Intervals</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Specifies a numeric interval, closed by default.
+ *
+ * @param aSections : Array, @property sections : Array = [0, 1]
+ * Specifies the sections of the interval, starting
+ * with the left border, continuing with a non-zero
+ * number of optional intermitting borders and
+ * ending with the right border. Note that the
+ * elements are automatically arranged in numerically
+ * ascending order.
+ * @param bLeftOpen : boolean, @property leftOpen : boolean = false
+ * If true, specifies that the interval is open
+ * on the left, meaning that its left border
+ * is not part of the interval.
+ * @param bRightOpen : boolean, @property rightOpen : boolean = false
+ * If true, specifies that the interval is open
+ * on the right, meaning that its right border
+ * is not part of the interval.
+ */
+Math.Interval = function(aSections, bLeftOpen, bRightOpen) {
+ if (isArray(aSections))
+ {
+ aSections.sort(function(a, b) { return a - b; });
+ this.sections = aSections || [0, 1];
+ this.leftOpen = !!bLeftOpen || false;
+ this.rightOpen = !!bRightOpen || false;
+ }
+};
+
+/**
+ * Returns the left border of the interval.
+ *
+ * @return mixed
+ * The left border of the interval
+ */
+Math.Interval.prototype.getLeftBorder = function() {
+ return this.sections[0];
+};
+
+/**
+ * Returns the right border of the interval.
+ *
+ * @return mixed
+ * The right border of the interval
+ */
+Math.Interval.prototype.getRightBorder = function() {
+ return this.sections[this.sections.length - 1];
+};
+
+/**
+ * @param n : number
+ * @param o : optional Interval
+ * @return number
+ * @todo
+ */
+Math.getSubIntervalIndex = function(n, o) {
+ var result = null;
+
+ if (!(o instanceof Math.Interval) && this instanceof Math.Interval)
+ {
+ o = this;
+ }
+
+ if (o instanceof Math.Interval)
+ {
+ var
+ start = 0,
+ s = o.sections,
+ end = s.length,
+ max = end,
+ pivot = 0;
+
+ do
+ {
+ /* Use interpolation search [O(log(log n))] for many sections */
+ if (max > 10000)
+ {
+ var nS = s[start];
+
+ pivot = start + Math.floor((end - start) * (n - nS) / (s[end] - nS));
+ }
+ else
+ {
+ /* Use binary search [O(log n)] */
+ pivot = (start + end) >> 1;
+ }
+
+ if (start + 1 == end)
+ {
+ if (n - s[start] <= s[end] - n)
+ {
+ result = start;
+ }
+ else
+ {
+ result = end;
+ }
+ break;
+ }
+ else if (n < s[pivot])
+ {
+ /* continue search left-hand side */
+ end = pivot;
+ }
+ else
+ {
+ /* continue search right-hand side */
+ start = pivot;
+ }
+ }
+ while (n >= s[start] && n <= s[end]);
+ }
+
+ return result;
+};
+
+/**
+ * @param n : number
+ * @param o : optional Interval
+ * @return boolean
+ * @todo
+ */
+Math.isInInterval = function(n, o) {
+ var result = false;
+
+ if (!(o instanceof Math.Interval) && this instanceof Math.Interval)
+ {
+ o = this;
+ }
+
+ if (o instanceof Math.Interval)
+ {
+ var lo, l, ro, r;
+
+ result =
+ (((lo = o.leftOpen) && n > (l = o.getLeftBorder()))
+ || (!lo && n >= l))
+ &&
+ (((ro = o.rightOpen) && n < (r = o.getRightBorder()))
+ || (!ro && n <= r));
+ }
+
+ return result;
+};
+
+/**
+ * @return Array
+ */
+Math.getRightOpenIntervals = function() {
+ var a = new Array();
+
+ var len = arguments.length;
+ if (len == 0)
+ {
+ a.push(new Math.Interval(0, 1, true));
+ }
+ else
+ {
+ a.push(new Math.Interval(arguments[0], arguments[1], true));
+ }
+
+ if (len > 2)
+ {
+ len = arguments.length;
+ for (var i = 1; i < len; i++)
+ {
+ a.push(new Math.Interval(arguments[i], arguments[i+1], true));
+ }
+ }
+
+ return a;
+};
+
+/**
+ * @param n : number
+ * @param a : [Interval]
+ * @return number
+ * the index of the first interval in <code>a</code> that contains
+ * <code>n</code>, -1 if there is no (such) interval.
+ */
+Math.getIntervalIndex = function(n, a) {
+ var result = -1;
+
+ if (a instanceof Array)
+ {
+ for (var i = 0, len = a.length; i < len; i++)
+ {
+ var o;
+ if ((o = a[i]) instanceof Math.Interval && o.contains(n))
+ {
+ result = i;
+ break;
+ }
+ }
+ }
+
+ return result;
+};
+
+jsx.object.extend(Math.Interval.prototype, {
+ 'contains': Math.isInInterval,
+ 'getRightOpenIntervals': Math.getRightOpenIntervals,
+ 'getIntervalIndex': Math.getIntervalIndex
+});
/live/math/interval.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/float.js
===================================================================
--- live/math/float.js (nonexistent)
+++ live/math/float.js (revision 509)
@@ -0,0 +1,817 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Floating-point arithmetics</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2012 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+if (typeof jsx.math == "undefined")
+{
+ /**
+ * @namespace
+ */
+ jsx.math = {};
+}
+
+/**
+ * Returns the numerical value of an object.
+ *
+ * @param obj : Object
+ * @return {number}
+ * <code>NaN</code> if <var>obj</var> does not refer to an object
+ * or does not have a <code>valueOf()</code> method that returns
+ * a number value; the return value of the object's
+ * <code>valueOf()</code> method otherwise.
+ */
+jsx.math.getValue = function (obj) {
+ var value = (typeof obj != "undefined" && (typeof obj == "object" && obj)
+ && typeof obj.valueOf == "function")
+ ? obj.valueOf()
+ : value;
+
+ if (typeof value == "number")
+ {
+ return value;
+ }
+
+ return NaN;
+};
+
+/**
+ * Returns the value of the smallest argument.
+ *
+ * @return {number}
+ * The value of the smallest argument.
+ * If an argument is an object but not an <code>Array</code>,
+ * and has a <code>valueOf()</code> method that returns a number,
+ * the return value is used; if it does not have such a
+ * method or is an <code>Array</code>, the values of its
+ * enumerable non-function properties or (with Arrays) its
+ * number-indexed properties are evaluated.
+ * If no arguments are provided, <code>Number.POSITIVE_INFINITY</code>
+ * is returned.
+ */
+jsx.math.min = (function () {
+ var getValue = jsx.math.getValue;
+
+ return function () {
+ var result = Number.POSITIVE_INFINITY;
+ var min_el;
+
+ for (var i = 0, len = arguments.length; i < len; ++i)
+ {
+ var a = arguments[i];
+ if (jsx.object.isArray(a))
+ {
+ var a2 = a.slice();
+ a2.sort(function (a, b) { return a - b; });
+ if (a2[0] < result)
+ {
+ result = a2[0];
+ }
+ }
+ else if (typeof a == "object")
+ {
+ var value = getValue(a);
+ if (value)
+ {
+ if (value < result)
+ {
+ result = value;
+ }
+ }
+ else
+ {
+ for (var j in a)
+ {
+ if ((min_el = jsx.math.min(a[j])) < result)
+ {
+ result = min_el;
+ }
+ }
+ }
+ }
+ else if (a < result)
+ {
+ result = a;
+ }
+ }
+
+ return result;
+ };
+}());
+
+/**
+ * Returns the value of the greatest argument.
+ *
+ * @return {number}
+ * The value of the greatest argument.
+ * If an argument is an object but not an <code>Array</code>,
+ * and has a <code>valueOf()</code> method that returns a number,
+ * the return value is used; if it does not have such a
+ * method or is an <code>Array</code>, the values of its
+ * enumerable non-function properties or (with Arrays) its
+ * number-indexed properties are evaluated.
+ * If no arguments are provided, <code>Number.NEGATIVE_INFINITY</code>
+ * is returned.
+ */
+jsx.math.max = (function () {
+ var getValue = jsx.math.getValue;
+
+ return function () {
+ var result = Number.NEGATIVE_INFINITY;
+
+ for (var i = 0, len = arguments.length; i < len; ++i)
+ {
+ var a = arguments[i], max_el;
+ if (jsx.object.isArray(a))
+ {
+ var a2 = a.slice();
+ a2.sort(function (a, b) { return b - a; });
+ if (a2[0] > result)
+ {
+ result = a2[0];
+ }
+ }
+ else if (typeof a == "object")
+ {
+ var value = getValue(a);
+ if (value)
+ {
+ if (value > result)
+ {
+ result = value;
+ }
+ }
+ else
+ {
+ for (var j in a)
+ {
+ if ((max_el = jsx.math.max(a[j])) > result)
+ {
+ result = max_el;
+ }
+ }
+ }
+ }
+ else if (a > result)
+ {
+ result = a;
+ }
+ }
+
+ return result;
+ };
+}());
+
+/**
+ * Returns the average value of the arguments.
+ *
+ * @return number
+ * The average value of the arguments.
+ * If an argument is an object but not an <code>Array</code>,
+ * and has a <code>valueOf()</code> method that returns a number,
+ * the return value is used; if it does not have such a
+ * method or is an <code>Array</code>, the values of its
+ * enumerable non-function properties or (with Arrays) its
+ * number-indexed properties are evaluated.
+ * If no arguments are provided, <code>NaN</code> is returned.
+ */
+jsx.math.avg = (function () {
+ var getValue = jsx.math.getValue;
+
+ return function () {
+ var sum = 0;
+ var count = 0;
+
+ for (var i = 0, len = arguments.length; i < len; i++)
+ {
+ var a = arguments[i];
+ if (jsx.object.isArray(a))
+ {
+ for (var j = 0; j < a.length; j++)
+ {
+ ++count;
+ sum += jsx.math.avg(a[j]);
+ }
+ }
+ else if (typeof a == "object")
+ {
+ var value = getValue(a);
+ if (value)
+ {
+ ++count;
+ sum += value;
+ }
+ else
+ {
+ for (j in a)
+ {
+ ++count;
+ sum += jsx.math.avg(a[j]);
+ }
+ }
+ }
+ else
+ {
+ count++;
+ sum += parseFloat(a);
+ }
+ }
+
+ return (sum / count);
+ };
+}());
+
+/**
+ * Returns the arithmetic median of the arguments.
+ *
+ * The [arithmetic (one-dimensional)] median is [defined] as
+ * the numerical value separating the higher half of a sample
+ * from the lower half of a sample. If there is an even number
+ * of observations, then there is no single middle value; the
+ * median is then […] defined to be the mean of the two middle
+ * values. (From Wikipedia, the free encyclopedia)
+ *
+ * @return number
+ * The arithmetic median of the arguments.
+ * If an argument is an object but not an <code>Array</code>,
+ * and has a <code>valueOf()</code> method that returns a number,
+ * the return value is used; if it does not have such a
+ * method or is an <code>Array</code>, the values of its
+ * enumerable non-function properties or (with Arrays) its
+ * number-indexed properties are evaluated.
+ * If no arguments are provided, <code>NaN</code> is returned.
+ */
+jsx.math.median = (function () {
+ var getValue = jsx.math.getValue;
+
+ return function () {
+ var values = [];
+ var result;
+
+ for (var i = 0, len = arguments.length; i < len; i++)
+ {
+ var a = arguments[i];
+ if (jsx.object.isArray(a))
+ {
+ for (var j = 0; j < a.length; j++)
+ {
+ values.push(a[j]);
+ }
+ }
+ else if (typeof a == "object")
+ {
+ var value = getValue(a);
+ if (value)
+ {
+ values.push(value);
+ }
+ else
+ {
+ for (j in a)
+ {
+ values.push(a[j]);
+ }
+ }
+ }
+ else
+ {
+ values.push(parseFloat(a));
+ }
+ }
+
+ values.sort(function (a, b) { return a - b; });
+
+ len = values.length;
+ if (len > 1)
+ {
+ var middle = (len / 2) - 1;
+ if (len % 2 == 0)
+ {
+ result = jsx.math.avg(
+ values[Math.floor(middle)], values[Math.ceil(middle)]);
+ }
+ else
+ {
+ result = values[middle];
+ }
+ }
+ else if (len > 0)
+ {
+ result = values[0];
+ }
+ else
+ {
+ result = NaN;
+ }
+
+ return result;
+ };
+}());
+
+/**
+ * @param n : number
+ * Number of which to compare the <code>iRoot</code>-th root.
+ * @param iRoot : optional number = 2
+ * Root exponent. If not integer, the floor (largest integer
+ * less than the argument) of <code>iRoot</code> is used.
+ * @return number
+ * The <var>iRoot</var>-th root of <var>n</var>
+ */
+jsx.math.root = function(n, iRoot) {
+ return (iRoot % 2 && n < 0 ? -1 : +1)
+ * Math.pow(Math.abs(n), 1/Math.floor(iRoot));
+};
+
+/**
+ * @param n : number
+ * @return number
+ * <var>n</var> squared, i.e. <code>Math.pow(n, 2)</code>.
+ * @author (c) 2003 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ */
+jsx.math.sqr = function(n) {
+ return Math.pow(n, 2);
+};
+
+/**
+ * @param n : number
+ * @return type number
+ * The cubic value of <code>n</code>, i.e.
+ * <code>Math.pow(n, 3)</code>.
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ */
+jsx.math.cub = function(n) {
+ return Math.pow(n, 3);
+};
+
+/**
+ * @param n : number
+ * @return type number
+ * the cubic root of <code>n</code>, i.e.
+ * <code>Math.pow(n, 1/3)</code>, but also works
+ * with negative values of <code>n</code>.
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ */
+jsx.math.cubrt = function(n) {
+ return jsx.math.root(n, 3);
+};
+
+
+/** @subsection Rounding */
+
+/*
+ * TODO:
+ * Original round function from JavaScript-FAQ (http://dcljs.de/faq)
+ * Why not this way?
+ */
+
+/**
+ * @param x
+ * @param n
+ * @return string
+ * @deprecated
+ */
+function roundDigits_deprecated(x, n) {
+ if (n < 1 || n > 14)
+ {
+ return false;
+ /* Impossible to round left to point;
+ Returns non-numeric value if invalid number of digits
+ which causes further calculations to fail (NaN) although
+ they could succeed
+ */
+ }
+
+ var e = Math.pow(10, n);
+
+ var k = (Math.round(x * e) / e).toString();
+ /* Do not use toString() because it is part of JavaScript 1.1
+ and not all JavaScript capable browsers support it.
+ Use the String(...) function instead.
+ */
+
+ if (k.indexOf('.') == -1){k += '.';
+ /* Sometimes it is not desired to have the decimal point
+ when dealing with integers. The function does not allow
+ output without point. A further argument is required.
+ */}
+
+ k += e.toString().substring(1);
+ /* See above: Do not use Numeric.toString(...) method.
+ */
+
+ return k.substring(0, k.indexOf('.') + n+1);
+ /* Why this complicated though it could be much more simple? */
+}
+
+/**
+ * @param n : number
+ * Numeric value to round. Required.
+ * @param iSigDecimals : optional number
+ * Significant decimals to round to. If negative
+ * round to positive powers of 10. Optional.
+ * If out of the closed interval of [-14;14], the
+ * function exits and returns n (unchanged).
+ * If not provided, assume 0 and round the value to
+ * a whole number.
+ * @param iForceDecimals : optional number
+ * Number of digits to be returned with the number.
+ * If smaller than iSigDigits, the value will be
+ * ignored and the result is a Numeric value.
+ * Otherwise the required number of zeroes will be
+ * appended and the result is a String value.
+ * Optional.
+ * @param bForceLeadingZero : optional number
+ * If true, force leading zero if the value is between
+ * 0 and 1 or 0 and -1. The argument is optional.
+ * If not provided, apply bForceLeadingZero=false;
+ * @param sDecSeparator : optional string
+ * The character used for decimal delimiter instead.
+ * In English speaking countries the point (".")
+ * is used instead of comma (",") and vice-versa.
+ * Optional. If not provided, use default decimal
+ * separator. If provided, the result is a String value.
+ * @return number|string
+ * <var>n</var> rounded to the number of specified digits, optionally
+ * with leading zeroes.
+ */
+jsx.math.roundDigits = function(n, iSigDecimals, iForceDecimals,
+ bForceLeadingZero, sDecSeparator)
+{
+ if (! iSigDecimals)
+ {
+ iSigDecimals = 0;
+ }
+
+ /*
+ * Returns the number itself when called with invalid arguments,
+ * so further calculations will not fail because of a wrong
+ * function call.
+ */
+ if (iSigDecimals < -14 || iSigDecimals > 14)
+ {
+ return n;
+ }
+
+ var e = Math.pow(10, iSigDecimals);
+ var i = String(n).indexOf(".");
+
+ if (i < 0)
+ {
+ i = String(n).length - 1;
+ }
+
+ if (String(n).substring(0, i).length <= -iSigDecimals)
+ {
+ return n;
+ }
+
+ var k = Math.round(n * e) / e;
+
+ if (arguments.length < 3)
+ {
+ iForceDecimals = 0;
+ }
+
+ if (iForceDecimals > 0)
+ {
+ k = String(k);
+ if ((i = k.indexOf(".")) < 0 && iForceDecimals > 0)
+ {
+ k += ".";
+ }
+
+ for (i = k.slice(k.indexOf(".") + 1).length;
+ i < iForceDecimals;
+ i++)
+ {
+ k += "0";
+ }
+ }
+
+ if (bForceLeadingZero && String(k).charAt(0) == ".")
+ {
+ k = "0" + k;
+ }
+
+ if (arguments.length < 5)
+ {
+ sDecSeparator = "";
+ }
+
+ if (sDecSeparator.length > 0)
+ {
+ k = String(k);
+ i = k.indexOf(".");
+ if (i >= 0)
+ {
+ k = k.substring(0, i) + sDecSeparator + k.slice(i + 1);
+ }
+ }
+
+ return k;
+};
+
+
+/** @subsection Rational arithmetics */
+
+/**
+ * Returns the period of a number, i.e. a repeated
+ * substring of its decimals that entirely make up
+ * following decimals.
+ *
+ * @param n : number
+ * The number of which the period should be found out.
+ * @param bLoose : optional boolean = false
+ * If <code>true</code>, triggers Loose Mode
+ * which notes <code>iPrecision</code>.
+ * @param iPrecision : optional number = 14
+ * In Loose Mode, defines the maximum number
+ * of decimals to parse for a period. The default
+ * is 14 (one less than maximum known precision).
+ * @return string
+ * The period of <code>n</code> as a string;
+ * "0" if there is none.
+ */
+jsx.math.getPeriod = function(n, bLoose, iPrecision) {
+ var s = String(n);
+ for (var i = 3; i < s.length; i++)
+ {
+ var
+ currentPeriod = s.substring(2, i),
+ rx = new RegExp("^\\d*\\.\\d*(" + currentPeriod + ")+$");
+
+ if (rx.test(s))
+ {
+ return currentPeriod;
+ }
+ }
+
+ return "0";
+};
+
+/**
+ * @param fDec : number
+ * @return string
+ * The representation of <var>fDec</var> in whole fractions
+ */
+jsx.math.toFraction = function(fDec) {
+ /**
+ * I: x = 0.111111111111111 y = 1
+ * II: 10x = 1.111111111111111
+ * II - I: 9x = 1
+ * x = 1/9
+ *
+ * 1. Y = periodLength(X)
+ * 2. Z = X * 10^Y
+ * 3. A = Z - X
+ * 4. RESULT = 'A "/" (10^Y - 1)'
+ */
+
+ var y = jsx.math.getPeriod(fDec).length;
+ var z = fDec * Math.pow(10, y);
+ var dividend = Math.round(z - fDec);
+ var divisor = Math.round((Math.pow(10, y) - 1));
+
+ /* Cancel-out the fraction */
+ var d = jsx.math.gcd(dividend, divisor);
+ if (d > 1)
+ {
+ dividend /= d;
+ divisor /= d;
+ }
+
+ var result = dividend + "/" + divisor;
+
+ return result;
+};
+
+
+/** @subsection Trigonometry */
+
+jsx.math.UNIT_RAD = 0;
+jsx.math.UNIT_DEG = 1;
+jsx.math.UNIT_GRAD = 2;
+
+/**
+ * Unlike the {@link js#Math built-in methods}, the following
+ * functions accept a second argument to determine if the argument
+ * should be handled as radian (dtRad == 0 [default];
+ * x = n*[0..2*Math.PI], degree (dtDeg == 1; x = n*[0..360])
+ * or gradian (dtGrad == 2; x = n*[0..400] gon) value.
+ */
+
+/**
+ * Returns the sine of an angle.
+ *
+ * Call this method instead of <code>jsx.math.sinX()</code>,
+ * which is deprecated.
+ *
+ * @param x : number
+ * @param iArgType : number
+ * @return number
+ * The sine of <var>x</var>
+ */
+jsx.math.sin = function(x, iArgType) {
+ switch (iArgType)
+ {
+ case jsx.math.UNIT_DEG:
+ x = x/180 * Math.PI;
+ break;
+
+ case jsx.math.UNIT_GRAD:
+ x = x/200 * Math.PI;
+ }
+
+ return Math.sin(x);
+};
+
+/* (non-JSdoc)
+ * @deprecated
+ */
+jsx.math.sinX = jsx.math.sin;
+
+/**
+ * Returns the cosine of an angle.
+ *
+ * Call this method instead of <code>jsx.math.cosX()</code>,
+ * which is deprecated.
+ *
+ * @param x : number
+ * @param iArgType : number
+ * @return number
+ * The cosine of <var>x</var>
+ */
+jsx.math.cos = function(x, iArgType) {
+ switch (iArgType)
+ {
+ case jsx.math.UNIT_DEG:
+ x = x/180 * Math.PI;
+ break;
+
+ case jsx.math.UNIT_GRAD:
+ x = x/200 * Math.PI;
+ }
+
+ return Math.cos(x);
+};
+
+/* (non-JSdoc)
+ * @deprecated
+ */
+jsx.math.cosX = jsx.math.cos;
+
+/**
+ * Returns the tangent of an angle.
+ *
+ * Call this method instead of <code>jsx.math.tanX()</code>,
+ * which is deprecated.
+ *
+ * @param x : number
+ * @param iArgType : number
+ * @return number
+ * The tangent of <var>x</var>. If @link{js#Math.tan()} is
+ * undefined, it uses @link{jsx.math#sin()} and
+ * @link{jsx.math#cos()}.
+ * @requires jsx.object#isMethod()
+ */
+jsx.math.tan = function(x, iArgType) {
+ var jsx_object = jsx.object;
+
+ switch (iArgType)
+ {
+ case jsx.math.UNIT_DEG:
+ x = x/180 * Math.PI;
+ break;
+
+ case jsx.math.UNIT_GRAD:
+ x = x/200 * Math.PI;
+ }
+
+ if (jsx_object.isMethod(Math, "tan"))
+ {
+ return Math.tan(x);
+ }
+
+ return (jsx.math.sin(x) / jsx.math.cos(x));
+};
+
+/* (non-JSdoc)
+ * @deprecated
+ */
+jsx.math.tanX = jsx.math.tan;
+
+/** @subsection Complex numbers */
+
+/**
+ * @param nRe : number
+ * @param nIm : number
+ */
+jsx.math.Complex = function (nRe, nIm) {
+ Number.call(this);
+ this.re = Number(nRe) || 0;
+ this.im = Number(nIm) || 0;
+};
+
+jsx.math.Complex.extend(Number);
+
+/**
+ * @param a : Complex
+ * @param b : Complex
+ * @return Complex
+ * The complex sum of <var>a</var> and <var>b</var>
+ */
+jsx.math.addComplex =
+jsx.math.Complex.prototype.add = function (a, b) {
+ var result = null;
+ var math = jsx.math;
+
+ if (this instanceof math.Complex)
+ {
+ b = a;
+ a = this;
+ }
+
+ if (a && b)
+ {
+ if (!(a instanceof math.Complex))
+ {
+ a = new math.Complex(a);
+ }
+
+ if (!(b instanceof math.Complex))
+ {
+ b = new math.Complex(b);
+ }
+
+ return new math.Complex(a.re + b.re, a.im + b.im);
+ }
+};
+
+/**
+ * @param a : Complex
+ * @param b : Complex
+ * @return Complex
+ * The complex product of <var>a</var> and <var>b</var>
+ */
+jsx.math.mulComplex =
+jsx.math.Complex.prototype.mul = function(a, b) {
+ var result = null;
+
+ if (this instanceof jsx.math.Complex)
+ {
+ b = a;
+ a = this;
+ }
+
+ if (a && b)
+ {
+ if (!(a instanceof jsx.math.Complex))
+ {
+ a = new jsx.math.Complex(a);
+ }
+
+ if (!(b instanceof jsx.math.Complex))
+ {
+ b = new jsx.math.Complex(b);
+ }
+
+ // a.re, a.im b.re, b.im
+ // (a, b ) * (c, d ) = (a * c - b * d, a * d + b * c)
+ return new jsx.math.Complex(
+ a.re * b.re - a.im * b.im,
+ a.re * b.im + a.im * b.re);
+ }
+};
+
+/*
+ * TODO: Hyperbolic functions
+ */
/live/math/float.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/bigdecimal.js
===================================================================
--- live/math/bigdecimal.js (nonexistent)
+++ live/math/bigdecimal.js (revision 509)
@@ -0,0 +1,398 @@
+/**
+ * <title>PointedEars' JSX: Arbitrary precision decimals</title>
+ * $Id$
+ * @requires math.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Arbitrary precision decimal
+ *
+ * @param value : Number[optional]
+ * If <var>scale</var> is not provided: Value to be translated to a
+ * <code>BigDecimal</code>; the default is <code>NaN</code>.
+ * If <var>scale</var> is provided: The unscaled internal value of
+ * the <code>BigDecimal</code>. The value of the <code>BigDecimal</code>
+ * is (<var>value</var> × 10<sup>−<var>scale</var></sup>).
+ * @param scale : Number[optional]
+ * The internal scale value, i. e. the number of times that the internal
+ * value must be divided by 10 to compute the number represented by
+ * the <code>BigDecimal</code>.
+ */
+jsx.math.BigDecimal = function (value, scale) {
+ /* null or undefined */
+ if (value == null)
+ {
+ value = NaN;
+ }
+
+ var originalValue, unscaledValue;
+
+ /* null or undefined */
+ if (scale == null)
+ {
+ this.originalValue = value;
+
+ var s = (+value).toString();
+ var digits = (s.match(/\.(\d+)$/) || [, ""])[1];
+
+ this.scale = digits.length;
+ this.unscaledValue = value * Math.pow(10, this.scale);
+ }
+ else
+ {
+ this.originalValue = NaN;
+ this.unscaledValue = +value;
+ this.scale = +scale;
+ }
+
+ /**
+ * @return Number
+ */
+ this.getOriginalValue = function () {
+ return this.originalValue;
+ };
+
+ /**
+ * @return Number
+ */
+ this.getUnscaledValue = function () {
+ return this.unscaledValue;
+ };
+
+ /**
+ * @param value : Number
+ * @return BigDecimal
+ */
+ this._setUnscaledValue = function (value) {
+ this.unscaledValue = value;
+ return this;
+ };
+
+ /**
+ * @return Number
+ */
+ this.getScale = function () {
+ return this.scale;
+ };
+
+ /**
+ * @param value : Number
+ * @return BigDecimal
+ */
+ this._setScale = function (value) {
+ this.scale = value;
+ return this;
+ };
+};
+
+/**
+ * Returns the normalization of two <code>BigDecimal</code> values.
+ *
+ * The normalization of two <code>BigDecimal</code> values are two
+ * <code>BigDecimal</code> values that represent the same values as
+ * before but with the same scale.
+ *
+ * @param value1 : jsx.math.BigDecimal
+ * @param value2 : jsx.math.BigDecimal
+ * @returns Array of the normalized values, in the order in which their
+ * corresponding original values were passed.
+ */
+jsx.math.BigDecimal.normalize = (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (value1, value2) {
+ var scale1 = value1.getScale();
+ var scale2 = value2.getScale();
+ if (scale1 == scale2)
+ {
+ return [value1, value2];
+ }
+
+ var switched = false;
+ if (scale1 < scale2)
+ {
+ switched = true;
+ var tmp = value2;
+ value2 = value1;
+ value1 = tmp;
+
+ var tmp = scale2;
+ scale2 = scale1;
+ scale1 = tmp;
+ }
+
+ value2 = new BigDecimal(
+ value2.getUnscaledValue() * Math.pow(10, scale1 - scale2),
+ scale1);
+
+ if (switched)
+ {
+ tmp = value2;
+ value2 = value1;
+ value1 = tmp;
+ }
+
+ return [value1, value2];
+ };
+}());
+
+jsx.math.BigDecimal.extend(null, {
+ /**
+ * Returns a <code>BigDecimal</code> whose value is
+ * (<code>-this.getUnscaledValue()</code>),
+ * and whose scale is <code>this.getScale()</code>.
+ *
+ * @memberOf jsx.math.BigDecimal.prototype
+ * @return BigDecimal
+ */
+ negate: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function () {
+ return new BigDecimal(-this.getUnscaledValue(), this.getScale());
+ };
+ }()),
+
+ /**
+ * Adds a number to the <code>BigDecimal</code> and returns the result.
+ * The original internal value remains unchanged.
+ *
+ * @param summand2 : jsx.math.BigDecimal|number
+ * The <code>BigDecimal</code> or <code>Number</code> to be added.
+ * If a <code>Number</code>, <var>summand2</var> is converted to a
+ * <code>BigDecimal</code> first.
+ * @returns {jsx.math.BigDecimal}
+ */
+ add: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (summand2) {
+ if (!(summand2 instanceof BigDecimal))
+ {
+ summand2 = new BigDecimal(summand2);
+ }
+
+ var normalized = BigDecimal.normalize(this, summand2);
+
+ var summand1 = normalized[0].getUnscaledValue();
+ var summand2 = normalized[1].getUnscaledValue();
+
+ /* Improve precision by using the smaller summand first */
+ if (summand2 < summand1)
+ {
+ var tmp = summand1;
+ summand1 = summand2;
+ summand2 = tmp;
+ }
+
+ var d = new BigDecimal(summand1 + summand2, normalized[0].getScale());
+
+ return d;
+ };
+ }()),
+
+ /**
+ * Subtracts a number from the <code>BigDecimal</code> and returns the result.
+ * The original internal value remains unchanged.
+ *
+ * @memberOf jsx.math.BigDecimal.prototype
+ * @param subtrahend : jsx.math.BigDecimal|number
+ * The <code>BigDecimal</code> or <code>Number</code> to be subtracted.
+ * If a <code>Number</code>, <var>summand2</var> is converted to a
+ * <code>jsx.math.BigDecimal</code> first.
+ * @returns {jsx.math.BigDecimal}
+ * @see jsx.math.BigDecimal.prototype#add
+ */
+ subtract: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (subtrahend) {
+ if (!(subtrahend instanceof BigDecimal))
+ {
+ subtrahend = new BigDecimal(subtrahend);
+ }
+
+ return this.add(subtrahend.negate());
+ };
+ }()),
+
+ /**
+ * Multiplies the <code>jsx.math.BigDecimal</code> with a number and returns the result.
+ * The original internal value remains unchanged.
+ *
+ * @param factor2 : jsx.math.BigDecimal|number
+ * The <code>jsx.math.BigDecimal</code> or <code>Number</code> to be multiplied by.
+ * If a <code>Number</code>, <var>summand2</var> is converted to a
+ * <code>jsx.math.BigDecimal</code> first.
+ * @returns {jsx.math.BigDecimal}
+ */
+ multiply: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (factor2) {
+ if (!(factor2 instanceof BigDecimal))
+ {
+ factor2 = new BigDecimal(factor2);
+ }
+
+ var normalized = BigDecimal.normalize(this, factor2);
+
+ var factor1_value = normalized[0].getUnscaledValue();
+ var factor2_value = normalized[1].getUnscaledValue();
+
+ var d = new BigDecimal(factor1_value * factor2_value, 2 * normalized[0].getScale());
+
+ return d;
+ };
+ }()),
+
+ /**
+ * Compares this <code>BigDecimal</code> with the specified BigDecimal.
+ *
+ * @param d : jsx.math.BigDecimal
+ * @return Number
+ * <code>&lt; -1</code> if this <code>BigDecimal</code> is smaller than <var>d</var>,
+ * <code>&gt; 1</code> if it is greater than <var>d</var>,
+ * <code>0</code> if they are equal.
+ */
+ compareTo: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (d) {
+ if (!(d instanceof BigDecimal))
+ {
+ d = new BigDecimal(d);
+ }
+
+ var normalized = BigDecimal.normalize(this, d);
+
+ return normalized[0].getUnscaledValue() - normalized[1].getUnscaledValue();
+ };
+ }()),
+
+ equals: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function (d) {
+ if (!(d instanceof BigDecimal))
+ {
+ d = new BigDecimal(d);
+ }
+
+ return this.getUnscaledValue() == d.getUnscaledValue()
+ && this.getScale() == d.getScale();
+ };
+ }()),
+
+ /**
+ * Returns a <code>BigDecimal</code> which is numerically equal to
+ * this one but with any trailing zeros removed from the representation.
+ *
+ * @return jsx.math.BigDecimal
+ */
+ stripTrailingZeros: (function () {
+ var BigDecimal = jsx.math.BigDecimal;
+
+ return function () {
+ var unscaledString = this.getUnscaledValue().toString();
+ /* FIXME: new BigDecimal(2, 21) */
+ var parts = unscaledString.match(/(0+)$/) || ["", ""];
+ var insignificantLength = parts[1].length;
+ if (insignificantLength > 0)
+ {
+ return new BigDecimal(
+ unscaledString.substring(0, unscaledString.length - insignificantLength),
+ -insignificantLength);
+ }
+
+ return this;
+ };
+ }()),
+
+ /**
+ * Returns the <code>Number</code> value represented by the
+ * <code>BigDecimal</code>.
+ *
+ * @returns {Number}
+ */
+ valueOf: function () {
+ return this.getUnscaledValue() * Math.pow(10, -this.getScale());
+ },
+
+ /**
+ * Returns the JSON representation of the <code>BigDecimal</code>
+ *
+ * @returns {String}
+ */
+ toJSON: function () {
+ return "{" + [
+ "'originalValue': " + this.getOriginalValue(),
+ "'unscaledValue': " + this.getUnscaledValue(),
+ "'scale': " + this.getScale()
+ ].join(", ")
+ + "}";
+ },
+
+ /**
+ * Returns the string representation of value represented by the
+ * <code>BigDecimal</code>, without using exponent notation.
+ *
+ * @returns {String}
+ */
+ toPlainString: function () {
+ var unscaledValue = this.getUnscaledValue();
+ var unscaledString = unscaledValue.toString();
+ var unscaledLength = unscaledString.length;
+ var scale = this.getScale();
+ var result;
+ var a = [];
+
+ if (scale - unscaledLength > 0)
+ {
+ a.length = scale - unscaledLength + 1;
+ result = "0." + a.join("0") + unscaledString;
+ }
+ else if (scale - unscaledLength < 0)
+ {
+ a.length = -scale + 1;
+
+ var decimals = unscaledString.substring(unscaledLength - scale);
+ result = unscaledString.slice(0, unscaledLength - scale)
+ + a.join("0")
+ + (decimals ? "." + decimals : "");
+ }
+
+ return result;
+ },
+
+ /**
+ * Returns the string representation of the value of
+ * the <code>BigDecimal</code>, rounded if necessary.
+ *
+ * @returns string
+ * @see jsx.math.BigDecimal.prototype#valueOf()
+ */
+ toString: function () {
+ return this.valueOf().toString();
+ }
+});
\ No newline at end of file
/live/math/bigdecimal.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/algebra.js
===================================================================
--- live/math/algebra.js (nonexistent)
+++ live/math/algebra.js (revision 509)
@@ -0,0 +1,526 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Linear Algebra</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @subsection Matrix Operations */
+
+/**
+ * Creates a <code>Matrix</code> object encapsulating an m × n matrix
+ * represented by an array of arrays.
+ *
+ * Different to a "multi-dimensional" array, a <code>Matrix</code>'s
+ * elements are indexed (like in math) starting from 1, i. e. the
+ * first element of the first row has the coordinates <code>[1, 1]</code>.
+ *
+ * @param rows : optional Array
+ * The array containing the elements of the new matrix or the number
+ * of rows of the new matrix.
+ * If not provided, the matrix has only one element, <code>0</code>.
+ * @param columns: optional Number
+ * The number of columns of the matrix, if <var>rows</var> is not an
+ * <code>Array</code>
+ * @param fill: optional Number
+ * The number the matrix should be filled with, if <var>rows</var>
+ * is not an <code>Array</code>. The default is <code>0</code>.
+ */
+jsx.math.Matrix = (function () {
+ var isMethod = jsx.object.isMethod;
+
+ return function (rows, columns, fill) {
+ this.data = [0];
+
+ if (rows)
+ {
+ if (jsx.types.isArray(rows))
+ {
+ if (isMethod(rows, "slice"))
+ {
+ for (var i = rows.length; i--;)
+ {
+ this.data[i] = rows[i].slice();
+ }
+ }
+ else
+ {
+ for (var i = rows.length; i--;)
+ {
+ var row = rows[i];
+ this.data[i] = [];
+ for (var j = row.length; j--;)
+ {
+ this.data[i][j] = row[j];
+ }
+ }
+ }
+ }
+ else
+ {
+ var a = [];
+
+ var tmp = [];
+ tmp.length = columns;
+
+ if (typeof fill == "undefined")
+ {
+ fill = 0;
+ }
+
+ for (var j = 0; j < columns; ++j)
+ {
+ tmp[j] = fill;
+ }
+
+ for (var i = 0; i < rows; ++i)
+ {
+ if (i == 0)
+ {
+ a.push(tmp);
+ }
+ else
+ {
+ a.push(tmp.slice());
+ }
+ }
+
+ this.data = a;
+ }
+ }
+ };
+}());
+
+/**
+ * @param A
+ * @return number
+ * the row dimension of <code>A</code>;
+ * 1 if <code>A</code> is a scalar,
+ * greater than 1 if <code>A</code> is a vector or a matrix.
+ *
+ * <pre>
+ * Term X x dimRow(x)
+ * --------------------------------------------------------
+ * scalar 1 1 1
+ *
+ * mX1 col vector (1)
+ * (2) [1, 2, ..., m] m
+ * (.)
+ * (m)
+ *
+ * 1Xn row vector (1 2 ... n) [[1, 2, ..., n]] 1
+ *
+ * (1 2 ... n) [[1, 2, ..., n],
+ * mXn matrix (2 . ... .) [2, ... ], m
+ * (. . ... .) [... ],
+ * (m . ... .) [m, ... ]]
+ * </pre>
+ */
+jsx.math.Matrix.dimRow = function(A) {
+ return (Array.isArray(A)
+ ? A.length
+ : 1);
+};
+
+/**
+ * @param a
+ * @return number
+ * The column dimension of <code>A</code>, provided all
+ * rows of <code>A</code> have the same length (as the first one);
+ * 0 if <code>A</code> is a scalar,
+ * greater than 0 if <code>A</code> is a vector or a matrix.
+ *
+ * <pre>
+ * Term X x dimCol(x)
+ * --------------------------------------------------------
+ * scalar 1 1 0
+ *
+ * mX1 col vector (1)
+ * (2) [1, 2, ..., m] 1
+ * (.)
+ * (m)
+ *
+ * 1Xn row vector (1 2 ... n) [[1, 2, ..., n]] n
+ *
+ * (1 2 ... n) [[1, 1, ..., n],
+ * mXn matrix (2 . ... .) [2, ... ], n
+ * (. . ... .) [... ],
+ * (m . ... .) [m, ... ]]
+ * </pre>
+ */
+jsx.math.Matrix.dimCol = function(a) {
+ return (
+ typeof (a = a[0]) != "undefined"
+ ? (Array.isArray(a[0]) ? a[0].length : 1)
+ : 0);
+};
+
+/**
+ * @param a
+ * @return the square root of the product of A's row dimension
+ * and its column dimension. The return value indicates
+ * whether a matrix A is square or not; for square matrices,
+ * the return value is an integer.
+ * @see jsx.math#add()
+ */
+jsx.math.Matrix.dim = function(a) {
+ return Math.sqrt(jsx.math.Matrix.dimRow(a) * jsx.math.Matrix.dimCol(a));
+};
+
+jsx.math.Matrix.prototype = {
+ constructor: Math.Matrix,
+
+ putValue: function (coords, value) {
+ var tmp = this.data;
+
+ for (var i = 0, len = coords.length; i < len - 1; ++i)
+ {
+ var arg = coords[i] - 1;
+ if (arg < 0)
+ {
+ jsx.throwThis("jsx.math.CoordinateError");
+ return;
+ }
+
+ if (typeof tmp[arg] == "undefined")
+ {
+ tmp[arg] = [];
+ }
+
+ tmp = tmp[arg];
+ }
+
+ var lastCoord = coords.slice(coords.length - 1);
+ if (lastCoord < 1)
+ {
+ jsx.throwThis("jsx.math.CoordinateError");
+ return;
+ }
+
+ tmp[lastCoord - 1] = value;
+
+ return tmp[lastCoord - 1];
+ },
+
+ getValue: function (coords) {
+ var tmp = this.data;
+
+ for (var i = 0, len = coords.length; i < len; ++i)
+ {
+ var arg = coords[i] - 1;
+ tmp = tmp[arg];
+
+ if (typeof tmp == "undefined")
+ {
+ break;
+ }
+ }
+
+ return tmp;
+ },
+
+ inc: function (coords) {
+ var
+ v = +this.getValue.apply(this, coords);
+
+ return this.putValue.apply(
+ this, coords.concat((isNaN(v) ? 0 : +v) + 1));
+ },
+
+ toString:
+ /**
+ * Returns the matrix converted to string, i.e.
+ * elements of arrays arranged in rows and columns.
+ * Makes use of string.js#format() if available.
+ *
+ * @param m : optional Matrix
+ * @return string
+ * @todo
+ */
+ function(m) {
+ if (!m)
+ {
+ m = this;
+ }
+
+ if ((m = m.data))
+ {
+ var
+ as = [],
+ bHasFormat = (typeof format != "undefined"),
+ maxLen;
+
+ if (bHasFormat)
+ {
+ maxLen = Math.max(m);
+ }
+
+ for (var i = 0, len = m.length; i < len; i++)
+ {
+ var row = m[i];
+ if (bHasFormat)
+ {
+ as[i] = format("%*$s", row, maxLen + 1);
+ }
+ else
+ {
+ as[i] = row.join(" ");
+ }
+ }
+ }n
+
+ return as.join("\n");
+ },
+
+ minor:
+ /**
+ * Returns the minor of the matrix, i.e. the matrix produced
+ * by removing the original's first row and i-th column.
+ *
+ * @param i : number
+ * @param m : optional Matrix
+ * @return string
+ * @todo
+ */
+ function (i, m) {
+ if (!m)
+ {
+ m = this;
+ }
+
+ if ((m = m.data))
+ {
+ m = new Math.Matrix(m);
+ m.data = m.data.slice(1);
+ var j;
+ for (m, j = (m = m.data).length; j--;)
+ {
+ m[j].splice(i, 1);
+ }
+ }
+
+ return m;
+ }
+};
+
+/**
+ * @param a
+ * @param b
+ * @return Array
+ * The sum of the matrixes <var>a</var> and <var>b</var>
+ */
+jsx.math.add = function(a, b) {
+ /*
+ * x00 x01 x02 y00 y01 y02 x00+y00 x01+y01 x02+y02
+ * x10 x11 x12 + y10 y11 y12 = x10+y10 x11+y11 x12+y12
+ * x20 x21 x22 y20 y21 y22 x20+y20 x21+y21 x22+y22
+ */
+ var result = new Array();
+
+ var dimARow,
+ dimACol = jsx.math.dimCol(a),
+ dimBRow,
+ dimBCol = Math.dimCol(b);
+ if ((dimARow = jsx.math.dimRow(a)) == (dimBRow = Math.dimRow(b))
+ && (dimACol == dimBCol))
+ {
+ for (var i = 0; i < dimARow; i++)
+ {
+ result[i] = [];
+ for (var j = 0; j < dimACol; j++)
+ {
+ result[i][j] = a[i][j] + b[i][j];
+ }
+ }
+ }
+ else
+ {
+ throwException(new Math.InvalidOperandError(
+ "First matrix's dimension (" + dimARow + "," + dimACol
+ + ") != second matrix's dimension (" + dimBRow + ", " + dimBCol + ")"));
+ return null;
+ }
+
+ return result;
+};
+
+/**
+ * This routine uses the dimensions of <var>a</var> and <var>b</var>
+ * to choose the corresponding multiplication routine. The argument
+ * dimensions, the dimension of the corresponding result, and the
+ * multiplication routine that is called are shown in the following
+ * table.
+ <pre>
+ B
+
+ A qXn 1Xn qX1
+ Matrix row Vector col Vector scalar
+
+ mXq mXn Matrix ERROR mX1 col Vector mXq Matrix
+ Matrix MatrixMatrixMultiply MatrixVectorMultiply MatrixScalarMultiply
+
+ 1Xq 1Xn row Vector ERROR scalar 1Xq Vector
+ row Vector VectorMatrixMultiply VectorScalarMultiply
+
+ mX1 ERROR mXn Matrix (outer product) ERROR mX1 Vector
+ col Vector OuterProductMatrix VectorScalarMultiply
+
+ qXn Matrix 1Xn row Vector qX1 col Vector scalar
+ scalar MatrixScalarMultiply VectorScalarMultiply VectorScalarMultiply standard multipliction
+ </pre>
+
+ * @param a
+ * @param b
+ * @return number|Array
+ * @throws Math#InvalidOperandError
+ */
+jsx.math.multiply = function(a, b) {
+ /*
+ * a00 a01 ... b00 b01 ...
+ * a10 a11 ... * b10 b11 ...
+ * ... ... ... ... ... ...
+ *
+ * a00*b00+a01*b10+...*... a00*b01+a01*b11+...*... a00*...+a01*...+...*...
+ * = a10*b10+a11*b10+...*... a10*b01+a11*b11+...*... a00*...+a01*...+...*...
+ * ...*...+...*...+...+... ...*b01+...*b11+...*... a00*...+a01*...+...*...
+ */
+
+ var dimRowA = Math.dimRow(a);
+ var dimColA = Math.dimCol(a);
+ var dimRowB = Math.dimRow(b);
+ var dimColB = Math.dimCol(b);
+ if ((dimRowA && dimColA) || (dimRowB && dimColB))
+ {
+ if (dimRowA || dimRowB)
+ {
+// if (dimRowX && d
+ var result = matrixMatrixMultiply(a, b);
+ }
+ else if (Array.isArray(a) && !Array.isArray(b))
+ {
+ if (Array.isArray(a[0]))
+ {
+ // ...
+ }
+ result = matrix;
+ }
+
+ result = new Array();
+ // matrixMultiply
+ }
+ else
+ {
+ result = a * b;
+ }
+
+ var x_len = a.length;
+ var y_len = b.length;
+ for (var i = 0, j, xi_len, sum = 0, k;
+ i < x_len;
+ i++)
+ {
+ result[i] = new Array();
+ xi_len = a[i].length;
+ for (j = 0;
+ j < xi_len;
+ j++, sum = 0)
+ {
+ if (y_len != xi_len)
+ {
+ jsx.throwThis(new jsx.math.InvalidOperandError(
+ "First matrix's column dimension (" + xi_len
+ + ") != second matrix's row dimension (" + y_len + ")"));
+ return null;
+ }
+ sum += a[i][k] + b[k][i];
+ }
+ result[i][j] = sum;
+ }
+
+ if (result.length == 1 && result[i].length == 1)
+ {
+ result = result[0][0];
+ }
+
+ return result;
+};
+
+/**
+ * Computes the intersection of two orthotopes (intervals, rectangles,
+ * rectangular cuboids, etc.)
+ * <pre>
+ * ,------------------.
+ * | ,----+------.
+ * | |/ / | |
+ * | | / /| |
+ * | `----+------'
+ * `------------------'
+ * </pre>
+ * <p>
+ * Each orthotope is given as a list of Arrays of numbers (which may
+ * be encapsulated in a Vector), where each Array or Vector consists
+ * of the coordinates of the adjacent vertices of the orthotope
+ * (for a rectangle, the x and y coordinates of the left top and
+ * right bottom corners). FIXME: Not reliable in 3D+!
+ * </p><p>
+ * If you need to compute the intersection of more than two
+ * orthotopes, you can compute the intersection of their
+ * intersections.
+ * </p>
+ * @param orthotope1 : Array[Array[double]|Math.Vector]
+ * First orthotope
+ * @param orthotope2 : Array[Array[double]|Math.Vector]
+ * Second orthotope
+ * @return Array[Array|Vector]
+ * An Array of two Arrays or Vectors of, each of which holds one
+ * vector pointing to an adjacent vertex of the resulting orthotope
+ * that includes all points that the input orthotopes have in common.
+ */
+jsx.math.intersect = function (orthotope1, orthotope2) {
+ var result = [[], []];
+
+ var ortho1LeftTop = orthotope1[0];
+ for (var i = ortho1LeftTop.length; i--;)
+ {
+ result[0][i] = (ortho1LeftTop[i] < orthotope2[0][i])
+ ? orthotope2[0][i]
+ : ortho1LeftTop[i];
+ }
+
+ var ortho1RightBottom = orthotope1[1];
+ for (i = ortho1RightBottom.length; i--;)
+ {
+ result[1][i] = (ortho1RightBottom[i] > orthotope2[1][i])
+ ? orthotope2[1][i]
+ : ortho1RightBottom[i];
+ }
+
+ return result;
+};
+
+jsx.math.CoordinateError = function () {
+ arguments.callee._super.call(this, "Coordinate must be 1 or greater")
+};
+
+jsx.math.CoordinateError.extend(jsx.InvalidArgumentError, {
+ name: "jsx.math.CoordinateError"
+});
\ No newline at end of file
/live/math/algebra.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/base.js
===================================================================
--- live/math/base.js (nonexistent)
+++ live/math/base.js (revision 509)
@@ -0,0 +1,136 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Number Systems</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @author
+ * Copyright (c) 2003, 2004 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @partof
+ * http://pointedears.de/scripts/math.js
+ * @param nDec : optional number = 0
+ * Optional. Decimal number to be converted to another number
+ * system. No conversion is performed if <var>nDec</var> is
+ * the default 0 (zero).
+ * @param iBase : optional number = 2
+ * Optional. Base of the number system to which <var>nDec</var>
+ * should be converted. Use 2 for binary, 8 for octal, 16 for
+ * hexadecimal aso. No conversion is performed if <var>iBase</var>
+ * ist 10 (decimal, the default) or not provided.
+ * @param iLength : optional number
+ * Optional. If provided and greater that 0, this argument
+ * specifies the length of the resulting string. If the result
+ * is shorter than <var>iLength</var>, leading zeroes are
+ * added until the result is as long as <var>iLength</var>.
+ * @return type string
+ * <var>nDec</var> converted to the number system specified
+ * with <var>iBase</var> in lowercase, optionally with leading
+ * zeroes. Uses Number.toString(<var>iBase</var>) is supported, an
+ * algorithm to convert both the integer and the fractional
+ * part otherwise.
+ * @see Global#parseFloat(any)
+ * @see Global#parseInt(any)
+ */
+Math.dec2base = function(nDec, iBase, iLength) {
+ // default values
+ if (!nDec)
+ {
+ nDec = 0;
+ }
+
+ if (!iBase)
+ {
+ /* binary */
+ iBase = 2;
+ }
+
+ var sResult = "";
+ /* if converting with toString() is poss. */
+ if ((15).toString(16).length == 1)
+ {
+ sResult = Number(nDec).toString(iBase);
+ }
+ else
+ {
+ var f = nDec % 1;
+ var aDigits = new Array();
+
+ var i;
+ if (nDec != 0 && iBase != 10)
+ {
+ /*
+ * No calculation required if number is 0 or target base is decimal
+ */
+
+ /* Create array of _required_ digits */
+ for (i = 0; i < (iBase < 10 ? iBase : 10); i++)
+ {
+ aDigits[aDigits.length] = i;
+ }
+
+ if (iBase > 10)
+ {
+ var iFirstLetter = "a".charCodeAt(0);
+ for (i = iFirstLetter; i < iFirstLetter + iBase - 10; i++)
+ {
+ aDigits[aDigits.length] = String.fromCharCode(i);
+ }
+ }
+
+ nDec = Math.floor(nDec);
+ while (nDec > 0)
+ {
+ sResult = aDigits[nDec % iBase] + sResult;
+ nDec = Math.floor(nDec / iBase);
+ }
+
+ if (f > 0)
+ {
+ sResult += ".";
+
+ while (f > 0 && sResult.length < 255)
+ {
+ f *= iBase;
+
+ /* get integer part */
+ i = Math.floor(f);
+
+ /* append fraction digit */
+ sResult += aDigits[i];
+ f -= i;
+ }
+ }
+ }
+ }
+
+ if (iLength)
+ {
+ while (sResult.length < iLength)
+ {
+ sResult = "0" + sResult;
+ }
+ }
+
+ return sResult;
+};
/live/math/base.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/integer.js
===================================================================
--- live/math/integer.js (nonexistent)
+++ live/math/integer.js (revision 509)
@@ -0,0 +1,321 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Integer arithmetics</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Returns the greatest common divisor (GCD) of two integers
+ * <code>a</code> and <code>b</code>, implementing (the optimized form of) the
+ * Euclidean algorithm (also called Euclid's algorithm). The
+ * GCD of two integer arguments is the largest positive integer
+ * that both arguments are integer multiples of, i.e. by which
+ * either argument can be divided without remainder. Since
+ * integers are required, the floor of <code>a</code> and <code>b</code> will
+ * be used for computation.
+ *
+ * @param a : number
+ * @param b : number
+ * @return type number
+ * The GCD of <code>a</code> and <code>b</code>;
+ * <code>NaN</code> if an argument is not a number.
+ * @see Math#floor(number)
+ */
+Math.gcd = function(a, b) {
+ if (isNaN(a) || isNaN(b))
+ {
+ return Number.NaN;
+ }
+
+ a = Math.floor(a);
+ b = Math.floor(b);
+ var c;
+
+ while (b != 0)
+ {
+ c = a % b;
+ a = b;
+ b = c;
+ }
+
+ return Math.abs(a);
+};
+
+/**
+ * Returns the greatest common divisor (GCD) of two or more
+ * integers, implementing (the optimized form of) the Euclidean
+ * algorithm (also called Euclid's algorithm). The GCD of
+ * integer arguments is the largest positive integer that all
+ * arguments are integer multiples of, i.e. by which either
+ * argument can be divided without remainder. Since integers
+ * are required, the floor of the arguments will be used for
+ * computation.
+ *
+ * @return number
+ * The GCD of the arguments;
+ * <code>NaN</code> if one or more arguments are not a number.
+ * @see Math#floor(number)
+ */
+Math.gcdN = function(a, b) {
+ /* Currently supports only 2 integers */
+ return Math.gcd(a, b);
+};
+
+/**
+ * Returns the least common multiple (LCM) of two integers
+ * <code>a</code> and <code>b</code>. The LCM of two integer arguments is
+ * the smallest positive integer that is a multiple of the
+ * arguments. If there is no such positive integer, i.e.,
+ * if either argument is zero, then <code>lcm(a, b)</code>
+ * is defined to be zero. Since integers are required, the
+ * floor of <code>a</code> and <code>b</code> will be used for computation.
+ *
+ * @param a : number
+ * @param b : number
+ * @return number
+ * The LCM of <code>a</code> and <code>b</code>;
+ * <code>0</code> if an argument is <code>0</code>;
+ * <code>NaN</code> if an argument is not a number.
+ * @see Math#floor(number)
+ * @see Math#gcd(number, number)
+ */
+Math.lcm = function(a, b) {
+ if (isNaN(a) || isNaN(b))
+ {
+ return Number.NaN;
+ }
+
+ if (!a || !b)
+ {
+ return 0;
+ }
+
+ a = Math.floor(a);
+ b = Math.floor(b);
+
+ return ((a * b) / Math.gcd(a, b));
+};
+
+/**
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param n : number
+ * If <code>n</code> is not an integer, <code>Math.floor(n)</code> is used.
+ * @return number
+ * The factorial of <code>n</code> (<code>n</code><code><b>!</b></code>)
+ * which is (for practical reasons) implemented here as follows:
+ * @ifdef{MathML2}
+ * <math>
+ * <apply>
+ * <eq/>
+ * <apply>
+ * <factorial/>
+ * <ci> n </ci>
+ * </apply>
+ * <piecewise>
+ * <piece>
+ * <cn>1</cn>
+ * <apply><lt/> <ci> n </ci> <cn> 2 </cn></apply>
+ * </piece>
+ * <piece>
+ * <mrow>
+ * <ci> n </ci>
+ * <mo>&InvisibleTimes;</mo>
+ * <mfenced>
+ * <apply>
+ * <factorial/>
+ * <apply><minus/> <ci> n </ci> <cn> 1 </cn></apply>
+ * </apply>
+ * </mfenced>
+ * </mrow>
+ * <apply><gt/> <ci> n </ci> <cn> 1 </cn></apply>
+ * </piece>
+ * </piecewise>
+ * </apply>
+ * </math>
+ * @else
+ * <table>
+ * <tr valign="top">
+ * <td rowspan="2"><code>n<code><b>!</b></td>
+ * <td>n &lt; 2:</td>1; (strict: 0<b>!</b> = 1<b>!</b> := 1)</td>
+ * </tr>
+ * <tr valign="top">
+ * <td>n &gt; 1:</td>n * (n - 1)<b>!</b></td>
+ * </tr>
+ * <table>
+ * @endif
+ *
+ * Unlike common recursive implementations, the algorithm is
+ * implemented iterative here, saving stack space and thus
+ * allowing larger factorials to be computed.
+ *
+ * @throws Math#OverflowError
+ */
+Math.fac = function(n) {
+ if (n % 1)
+ {
+ n = Math.floor(n);
+ }
+
+ var result = 1;
+
+ for (var i = 2; i <= n; result *= i++)
+ {
+ if (result == Number.POSITIVE_INFINITY)
+ {
+ result = 0;
+ // [Exception] <- [MathErrorException] <- [OverflowException] }
+ throwException(new Math.OverflowError("fac"));
+ break;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param nBase : number
+ * @param iExponent : number
+ * @return number
+ * <var>nBase</var> to the power of <var>iExponent</var>
+ */
+Math.powInt = function(nBase, iExponent) {
+ var i = iExponent;
+ var result = 1.0;
+
+ while (i > 0)
+ {
+ if (i % 2)
+ {
+ result *= nBase;
+ }
+ i = Math.floor(i / 2);
+ nBase *= nBase;
+ }
+
+ return result;
+};
+
+/**
+ * Computes the base <code>nBase</code> powered
+ * by the exponent <code>nExponent</code>
+ * (<code>nBase</code>^<code>nExponent</code>).
+ * Uses the Math.exp() and Math.log() methods to
+ * workaround the bug in Math.pow() that positive
+ * roots of certain negative values, like root(-9,
+ * 1/3) cannot be computed (results in NaN there)
+ * but should be.
+ *
+ * @author
+ * (c) 2000-2004 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param nBase : number
+ * @param nExponent : number
+ * @throws Math#InvalidArgumentError
+ * @return type number
+ * NaN if computation result lies beyond real numbers,
+ * the result (as double-precision floating-point number)
+ * otherwise.
+ */
+Math.power = function(nBase, nExponent) {
+ var result;
+
+ if (nBase != 0)
+ {
+ /* e^(Exponent * ln(|Base|)) */
+ result = Math.exp(nExponent * Math.log(Math.abs(nBase)));
+ if (nBase < 0)
+ {
+ if (!(nExponent % 1))
+ {
+ if (Math.floor(nExponent) % 2)
+ {
+ result = -result;
+ }
+ }
+ else
+ {
+ result = Number.NaN;
+ /* [Exception]<- [Math.MathError] <- [Math.InvalidArgumentError] */
+ throwException(new Math.InvalidArgumentError(
+ "power(" + nBase + ", " + nExponent + ")"));
+ }
+ }
+ else if (nBase == 0 && nExponent == 0)
+ {
+ result = 0;
+ throwException(new Math.InvalidArgumentError(
+ "power(" + nBase + ", " + nExponent + ")"));
+ }
+ }
+
+ return result;
+};
+
+/**
+ * @return type number
+ * The logarithm of <code>x</code> to the base <code>nBase</code>.
+ *
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param x : number
+ * @param nBase : number
+ */
+Math.logN = function(x, nBase) {
+ return Math.log(x) / Math.log(nBase);
+};
+
+/**
+ * @author
+ * (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @param x : number
+ * @return type number
+ * The logarithm digitalis (<code>ld</code>) of <code>x</code>
+ * (the logarithm of <code>x</code> to the base 2).
+ */
+Math.log2 = function(x) {
+ return Math.logN(x, 2);
+};
+
+/**
+ * Computes the decimal logarithm (<code>lg</code>) of
+ * <code>x</code> (the log. of <code>x</code> to the base 10).
+ *
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param x : number
+ * @return number
+ * The logarithm of <var>x</var> to the base 10
+ */
+Math.log10 = function(x) {
+ return Math.logN(x, 10);
+};
+
+/**
+ * @author
+ * (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param x : number
+ * @return type number
+ * the reciprocal of <code>x</code> (<code>1/x</code>).
+ */
+Math.rec = function(x) {
+ return (1 / x);
+};
/live/math/integer.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/math/probability.js
===================================================================
--- live/math/probability.js (nonexistent)
+++ live/math/probability.js (revision 509)
@@ -0,0 +1,187 @@
+/**
+ * <title>PointedEars' JSX: Math Library: Stochastics</title>
+ * @requires object.js
+ * @requires types.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Returns a uniformly distributed random value in the
+ * closed interval
+ * [<var>iLeftBorder</var>, <var>iRightBorder</var>]
+ * (including <var>iLeftBorder</var> and
+ * <var>iRightBorder</var>).
+ *
+ * @author
+ * (C) 2000-2003 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param nLeftBorder : optional number
+ * Left border of the interval. If left out, <code>null</code>
+ * or <code>undefined</code>, <code>-Number.MAX_VALUE</code> is
+ * assumed.
+ * @param nRightBorder : optional number
+ * Right border of the interval. If left out, <code>null</code>
+ * or <code>undefined</code>, <code>Number.MAX_VALUE</code> is
+ * assumed.
+ * @param fRandom : Function = Math.random
+ * Function to be used for calculating the uniform random number
+ * in the open unit interval (0.0, 1.0) (excluding 0.0 and 1.0).
+ * If left out, <code>Math.random()</code> is used where the
+ * the random number generator is seeded from the current time.
+ * @return number
+ * @see Math#random()
+ */
+Math.rand = function(nLeftBorder, nRightBorder, fRandom) {
+ if (nLeftBorder == null || typeof nLeftBorder == "undefined")
+ {
+ iLeftBorder = -Number.MAX_VALUE;
+ }
+
+ if (nRightBorder == null || typeof nRightBorder == "undefined")
+ {
+ iRightBorder = Number.MAX_VALUE;
+ }
+
+ if (!fRandom)
+ {
+ fRandom = function() {
+ return Math.random();
+ };
+ }
+
+ return fRandom() * (nRightBorder - nLeftBorder) + nLeftBorder;
+};
+
+/**
+ * Returns a uniformly distributed random integer value in the
+ * closed interval
+ * [<var>iLeftBorder</var>, <var>iRightBorder</var>]
+ * (including <var>iLeftBorder</var> and
+ * <var>iRightBorder</var>).
+ *
+ * @author
+ * (C) 2000-2003 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ * @param iLeftBorder : optional number
+ * Left border of the interval. If left out, <code>null</code>
+ * or <code>undefined</code>,
+ * <code>Math.floor(-Number.MAX_VALUE)</code> is assumed.
+ * @param iRightBorder : optional number
+ * Right border of the interval. If left out, <code>null</code>
+ * or <code>undefined</code>,
+ * <code>Math.ceil(Number.MAX_VALUE)</code> is assumed.
+ * @param fRandom : Function = Math.random
+ * Function to be used for calculating the uniform random number
+ * in the open unit interval (0.0, 1.0) (excluding 0.0 and 1.0).
+ * If left out, <code>Math.random()</code> is used where the
+ * the random number generator is seeded from the current time.
+ * @return number
+ * @see Math#random()
+ */
+Math.randInt = function(iLeftBorder, iRightBorder, fRandom) {
+ if (iLeftBorder == null || typeof iLeftBorder == "undefined")
+ {
+ iLeftBorder = -Number.MAX_VALUE;
+ }
+ iLeftBorder = Math.floor(iLeftBorder);
+
+ if (iRightBorder == null || typeof iRightBorder == "undefined")
+ {
+ iRightBorder = Number.MAX_VALUE;
+ }
+ iRightBorder = Math.ceil(iRightBorder);
+
+ if (! fRandom)
+ {
+ fRandom = function() {
+ return Math.random();
+ };
+ }
+
+ return Math.round(Math.rand(iLeftBorder, iRightBorder, fRandom));
+};
+
+/**
+ * Returns a value dependent on statistical probability.
+ *
+ * @param nChance : number
+ * Statistical probability that <var>ifChance</var> is returned.
+ * <code>1.0</code> means 100% of all possible cases.
+ * @param ifChance
+ * Value that is returned if chances are in favor of it.
+ * @param otherwise
+ * Value that is returned if chances are against
+ * <var>ifChance</var>, i.e. the one that is returned
+ * in <code>((1 - nChance) * 100)</code>% of all
+ * possible cases.
+ * @param fRandom : Function = Math.random
+ * Function to be used for calculating the uniformly
+ * distributed random number in the open unit interval
+ * <code>(0.0, 1.0)</code> (excluding 0.0 and 1.0).
+ * If left out, <code>Math.random()</code> is used where
+ * the random number generator is seeded from the current
+ * time.
+ * @return mixed
+ * <var>ifChance</var> if the chances are in favour of it,
+ * <var>otherwise</var> if they are against it.
+ * @see Math#random()
+ */
+Math.byChance = function(nChance, ifChance, otherwise, fRandom) {
+ if (!fRandom)
+ {
+ fRandom = function() {
+ return Math.random();
+ };
+ }
+
+ return (
+ fRandom() < nChance
+ ? ifChance
+ : otherwise);
+};
+
+/**
+ * Calculates the binomial coefficient.
+ *
+ * @param iUpper : number
+ * @param iLower : number
+ * @return number
+ * The binomial coefficient <var>iUpper</var> above
+ * <var>iLower</var> (|_<var>iUpper</var><b>!</b> /
+ * <var>iLower<var><b>!</b>_| * (<var>iUpper</var>
+ * - <var>iLower</var>)<b>!</b>)
+ * @author (c) 2000 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ */
+Math.binomCoeff = function(iUpper, iLower) {
+ var result = 0;
+
+ if (iUpper >= iLower)
+ {
+ result = Math.floor(Math.fac(iUpper)
+ / (Math.fac(iLower) * Math.fac(iUpper - iLower)));
+ }
+ else
+ {
+ throwException(new Math.InvalidArgumentError(
+ "binomCoeff(" + iUpper + ", " + iLower + ")"));
+ }
+
+ return result;
+};
/live/math/probability.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/string.js
===================================================================
--- live/string.js (nonexistent)
+++ live/string.js (revision 509)
@@ -0,0 +1,2177 @@
+/**
+ * @fileOverview <title>PointedEars' JSX: String Library</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @author (C) 2001-2013 Thomas Lahn &lt;string.js@PointedEars.de&gt;
+ * @author
+ * Parts Copyright (C) 2003<br>
+ * Dietmar Meier &lt;meier@innoline-systemtechnik.de&gt;<br>
+ * Martin Honnen &lt;Martin.Honnen@gmx.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx === "undefined")
+{
+ var jsx = {};
+}
+
+jsx.string = {
+ /** @version */
+ version: "1.29.$Rev$",
+ copyright: "Copyright \xA9 1999-2013",
+ author: "Thomas Lahn",
+ email: "string.js@PointedEars.de",
+ path: "http://pointedears.de/scripts/"
+};
+
+// jsx.string.docURL = jsx.string.path + "string.htm";
+
+if (typeof String === "undefined")
+{
+ var String = new Object();
+}
+
+/** @deprecated since 1.29.8.2010013105, see jsx.string */
+String.version = jsx.string.version;
+String.copyright = jsx.string.copyright;
+String.author = jsx.string.author;
+String.email = jsx.string.email;
+String.path = jsx.string.path;
+// String.docURL = jsx.string.docURL;
+
+/* allows for de.pointedears.jsx.string */
+if (typeof de === "undefined")
+{
+ var de = {};
+}
+
+if (typeof de.pointedears === "undefined")
+{
+ de.pointedears = {};
+}
+
+de.pointedears.jsx = jsx;
+
+/**
+ * Non-breaking space
+ */
+var CH_NBSP = "\xA0";
+
+/**
+ * @param {string} sMsg
+ * @return {boolean} false
+ */
+function StringException (sMsg)
+{
+ alert(
+ "string.js "
+ + String.version
+ + "\n"
+ + String.copyright
+ + " "
+ + String.author
+ + " <"
+ + String.email
+ + ">\n\n"
+ + sMsg);
+ return false;
+}
+
+/**
+ * Adds backslashes to escape " and ' in strings.
+ *
+ * @author Copyright (c) 2003
+ * Martin Honnen &lt;Martin.Honnen@gmx.de&gt;,
+ * Thomas Lahn &lt;string.js@PointedEars.de&gt;
+ * @param {string} s (optional)
+ * String where " and ' should be escaped. Ignored if
+ * the function is called as a method of a String object.
+ * @return {string}
+ * The replaced string if String.replace(...)
+ * is supported, the original string otherwise.
+ */
+function addSlashes (s)
+{
+ var c;
+ if ((c = this.constructor) && c == String && typeof s != "string")
+ {
+ s = this;
+ }
+
+ if (s.replace)
+ {
+ s = s.replace(/["']/g, "\\$&");
+ }
+
+ return s;
+}
+
+/**
+ * Tries hard to escape a string according to the query component
+ * specification in RFC3986.
+ *
+ * @param {string} s
+ * @return {string}
+ * <code>s</code> escaped, or unescaped if escaping through
+ * <code>encodeURIComponent()</code> or <code>escape()</code>
+ * is not possible.
+ * @partof http://PointedEars.de/scripts/string.js
+ * @see jsx.object#isMethod()
+ * @author Copyright (c) 2006-2008 Thomas Lahn <cljs@PointedEars.de>
+ */
+var esc = (function () {
+ var
+ _global = jsx.global,
+ _isNativeMethod = jsx.object.isNativeMethod;
+
+ return (_isNativeMethod(_global, "encodeURIComponent")
+ ? encodeURIComponent
+ : (_isNativeMethod(_global, "escape")
+ ? escape
+ : function (s) { return s; }));
+}());
+
+/**
+ * Tries hard to make a string a URI or URI-reference according to RFC 3986.
+ *
+ * @param s
+ * @return {string}
+ * <code>s</code> escaped, or unescaped if escaping through
+ * <code>encodeURI()</code> or is not possible.
+ */
+var escURI = (function (s) {
+ var
+ _global = jsx.global,
+ _isNativeMethod = jsx.object.isNativeMethod;
+
+ return (_isNativeMethod(_global, "encodeURI")
+ ? encodeURI
+ : function (s) { return s; });
+}());
+
+/**
+ * Tries hard to unescape a string according to the query component
+ * specification in RFC&nbsp;3986.
+ *
+ * @param {string} s
+ * @return {string}
+ * <code>s</code> unescaped, or escaped if unescaping through
+ * <code>decodeURIComponent()</code> or <code>unescape()</code>
+ * is not possible.
+ * @partof http://PointedEars.de/scripts/string.js
+ * @see jsx.object#isMethod()
+ * @author Copyright (c) 2006-2008 Thomas Lahn <cljs@PointedEars.de>
+ */
+var unesc = (function () {
+ var
+ _global = jsx.global,
+ _isNativeMethod = jsx.object.isNativeMethod;
+
+ return (_isNativeMethod(_global, "decodeURIComponent")
+ ? decodeURIComponent
+ : (_isNativeMethodd(_global, "unescape")
+ ? unescape
+ : function (s) { return s; }));
+}());
+
+/*
+ * Had to abandon extend since Konqueror's engine does not support
+ * Object literals
+ */
+
+if (typeof Number.prototype.toFixed == "undefined")
+{
+ /**
+ * @param {number} iPrecision
+ * @return {string}
+ */
+ Number.prototype.toFixed = function (iPrecision) {
+ var
+ result = this.toString(),
+ dotPos = -1,
+ decLen = 0;
+
+ if ((dotPos = result.lastIndexOf(".")) > -1)
+ {
+ decLen = result.length - dotPos - 1;
+ }
+
+ if (decLen <= iPrecision)
+ {
+ result = jsx.string.pad(result, iPrecision, '0', true, decLen);
+ }
+ else
+ {
+ var m = Math.pow(10, iPrecision);
+ result = Math.round(result * m) / m;
+ }
+ return result;
+ };
+}
+
+if (typeof Number.prototype.toUnsigned == "undefined")
+{
+ /**
+ * @param {number} iMax
+ * @return {number}
+ */
+ Number.prototype.toUnsigned = function (iMax) {
+ var n = this;
+
+ /*
+ * 1. Call ToNumber on the input argument.
+ * (skipped since n is already a Number value)
+ *
+ * 2. If Result(1) is NaN, +0, -0, +Infinity, or -Infinity, return +0.
+ */
+ var i;
+ if (!isNaN(n) || (i = Math.abs(n)) == 0 || i == Infinity)
+ {
+ return 0;
+ }
+
+ /*
+ * 3. Compute sign(Result(1)) * floor(abs(Result(1))).
+ * (The mathematical function sign (x) yields 1 if
+ * x is positive and -1 if x is negative.) [...]
+ */
+ n = (n < 0 ? -1 : 1) * Math.floor(i);
+
+ /*
+ * 4. Compute Result(3) modulo 2^iMax; that is, a finite integer
+ * value k of Number type with positive sign and less than 2^iMax
+ * in magnitude such the mathematical difference of Result(3) and
+ * k is mathematically an integer multiple of 2^iMax. The default
+ * for iMax is 32.
+ *
+ * 5. Return Result(4).
+ */
+ return n % Math.pow(2, iMax || 32);
+
+// if (n < 0)
+// {
+// n += (iMax || this.MAX_VALUE)/2;
+// }
+ };
+}
+
+/**
+ * Parses a string of characters into a <code>Number</code> value.
+ * It replaces the built-in function in that it supports fractional
+ * parts on non-decimal representations, and uses the built-in
+ * for decimal representations.
+ *
+ * @param {String} s
+ * String representation to be parsed
+ * @param {number} iBase
+ * Numeric base of the representation, from 2 to 35. If not provided,
+ * after trimming leading white-space the prefix "0x" or "0X" designates
+ * base 16 (hexadecimal).
+ * @return {number}
+ */
+var parseFloat = jsx.string.parseFloat = (function () {
+ var origPF = parseFloat;
+
+ return function (s, iBase) {
+ if ((!iBase || iBase === 10) && origPF)
+ {
+ return origPF(s);
+ }
+
+ var
+ i = (/^\s*\./.test(s) ? 0 : parseInt(s, iBase)),
+ chars = (iBase < 10
+ ? "0-" + String.fromCharCode(47 + iBase)
+ : "\\d"
+ + (iBase > 10
+ ? "a"
+ + (iBase > 11
+ ? "-" + String.fromCharCode(86 + iBase)
+ : "")
+ : "")),
+ f = (s.match(new RegExp("\\.([" + chars + "]{1,198})", "i")) || [, "0"])[1];
+
+
+ return i + (/^\s*-/.test(s) ? -1 : 1)
+ * parseInt(f, iBase) / Math.pow(iBase, f.length);
+ };
+}());
+
+// * Returns a string of values according to a format string.
+// *
+// * This is the begin of an approach to implement <code>printf</code>(3)
+// * in an ECMAScript compliant implementation out of its man page
+// * documentation. The syntax is intended to be compatible to that of
+// * the printf() C function finally, but this method will not *print*
+// * out anything characters by itself (so you probably want to use its
+// * return value along with <code>window.alert()</code>,
+// * <code>document.write()</code> and similar DOM features, or in
+// * concatenations as if you would use <code>sprintf</code>(3).)
+// *
+// * Currently supported <code>printf</code>(3) features are:
+// * - replacing tags in a format string with a value given as argument: `%d'
+// * - padding that value with zeroes or (non-breaking) spaces on the left,
+// * watching for negative values: `%42d', `% 42d' and `%042d'
+// * - padding that value with (non-breaking) spaces on the right: `%-42d'
+// * - using arguments to specify the field width: `%*d', `%*7$d'
+// * - specifying positive precision (round after point): `%.2d'
+// * - replacing `%%' with `%' without using an argument's value
+// *
+// * Additional features supported by this method are:
+// * - specifying negative precision (round before point): `%.-2d'
+// * - If `%,42s' is used and the argument refers to an Array instead of
+// * a String, it is expanded to a character string consisting of the
+// * string representations of the elements of the array delimited with
+// * `,', each of them having the format specification (here: field
+// * width=42) applied to it. If `,' is missing, the delimiter is the
+// * empty string, meaning that Arrays of strings (or characters) can
+// * be easily put out.
+// *
+// * @version 0.0.4.2005112603 (milestone 4)
+// * @author
+// * (C) 2004, 2005 Thomas Lahn <string.js@PointedEars.de>
+// * Distributed under the GNU GPLv2.
+// * @partof
+// * http://pointedears.de/scripts/string.js
+// * @param {string} sFormat
+// * @param {_} values
+// * @return {string}
+// * The formatted string.
+// */
+//function format (sFormat)
+//{
+// arguments.skip = [];
+// for (var i = 1, len = arguments.length; i < len; i++)
+// {
+// var a = arguments[i];
+//
+// // skip tagged arguments; this allows for using following arguments
+// // for precision without using them for expansion again
+// if (!arguments.skip[i])
+// {
+// // compile only once
+// if (!format.rxSearch)
+// {
+// format.rxSearch = new RegExp(
+// "%([#0+' _-]*)" // flags
+// + "([1-9]*\\d+|(\\*((\\d+)\\$)?))?" // field width
+// + "(\\.([+-]?\\d+|(\\*((\\d+)\\$)?))?)?" // precision
+// + "([ ,]+)?" // member delimiter
+// + "([%diouxXeEfFgGaAcsCSpn])" // conversion
+// );
+// }
+//
+// var result;
+// if ((result = (format.rxSearch.exec(sFormat))))
+// {
+// var
+// // flag characters
+// flags = result[1],
+// fieldWidth = result[2],
+//
+// // undefined if the field width was given as an unsigned integer
+// argFieldWidth = result[3],
+//
+// // index of the argument to specify the field width;
+// // undefined if the field width was given as an unsigned
+// // integer
+// uFieldWidthArg = result[5],
+//
+// precision = result[7],
+// argPrecision = result[8],
+//
+// // index of the argument to specify the precision;
+// // undefined if the precision was given as an unsigned
+// // integer or it will be specified by the next argument
+// uPrecisionArg = result[10],
+// srcArgIdx;
+//
+// // length modifier
+// // var lenModifier = result[11];
+//
+// // member delimiter
+// var memberDelim = result[11];
+//
+// // conversion specifier
+// var
+// convSpecifier = result[12],
+// aArgMembers = new Array();
+//
+// if (convSpecifier == "%")
+// {
+// aArgMembers = [convSpecifier];
+// i--;
+// }
+// else
+// {
+// var memberLen = 1;
+// var arg = a;
+//
+// if (arg.constructor == Array)
+// {
+// memberLen = arg.length;
+// }
+//
+//
+// for (var j = 0; j < memberLen; j++)
+// {
+// if (arg.constructor == Array)
+// {
+// a = arg[j];
+// }
+//
+// if (/[diouxXeEfFgGaA]/.test(convSpecifier))
+// {
+// if (typeof a != "number")
+// {
+// a = Number(a);
+// }
+//
+// if (/[ouxX]/.test(convSpecifier))
+// {
+// switch (convSpecifier)
+// {
+// case "o": a = a.toString(8); break;
+// case "u": a = a.toUnsigned(); break;
+// case "x":
+// case "X": a = a.toUnsigned().toString(16); break;
+// default:
+// var sError = 'Invalid conversion specifier';
+// _global.onerror = function ()
+// {
+// alert('format: ' + sError);
+// _global.onerror = null;
+// return true;
+// }
+// eval("throw new {message: sError};");
+// _global.onerror = null;
+// }
+// }
+// }
+//
+// if (precision
+// || (typeof precision == "number" && precision == 0))
+// {
+// if (argPrecision)
+// { // precision is specified by another argument
+// srcArgIdx = uPrecisionArg || (i + 1);
+// precision = arguments[srcArgIdx];
+//
+// // mark argument as not to be expanded
+// arguments.skip[srcArgIdx] = true;
+// }
+//
+// if (precision >= 0)
+// {
+// a = Number(a).toFixed(precision);
+// }
+// else // if (precision < 0)
+// {
+// var pot = Math.pow(10, -precision);
+// a = Math.round((a - (a % 1)) / pot) * pot;
+// }
+// }
+//
+// if (fieldWidth)
+// {
+// if (argFieldWidth)
+// { // field width is specified by another argument
+// srcArgIdx = uFieldWidthArg || (i + 1);
+// fieldWidth = arguments[srcArgIdx];
+// arguments.skip[srcArgIdx] = true;
+// }
+//
+// if (fieldWidth > 0)
+// {
+// var sPad = CH_NBSP;
+// if (flags && /0/.test(flags))
+// {
+// sPad = "0";
+// }
+//
+// if (/-/.test(flags))
+// {
+// a = pad(a, fieldWidth, CH_NBSP, true);
+// }
+// else
+// { // pad value, put sign in front
+// a = pad(a, fieldWidth, sPad)
+// .replace(/^(0+)([+-])/, "$2$1");
+// }
+// }
+// }
+//
+// aArgMembers.push(a);
+// }
+// }
+//
+// sFormat = sFormat.replace(
+// format.rxSearch,
+// aArgMembers.join(memberDelim));
+// }
+// }
+// }
+//
+// return sFormat;
+//}
+
+/**
+ * @protected
+ */
+jsx.string._rxFormatSpec = new RegExp(
+ /* flags */
+ /%(\(([^)]*)\))?([#0+' _-]*)/.source
+
+ /* field width */
+ + /([1-9]*\d+|(\*((\d+)\$)?))?/.source
+
+ /* precision */
+ + /(\.([+-]?\d+|(\*((\d+)\$)?))?)?/.source
+
+ /* member delimiter */
+ + "(,)?"
+
+ /* conversion */
+ + "([%aAbdiouxXeEfFgGcsCSpn])",
+
+ /* global match */
+ "g");
+
+/**
+ * A more efficient rewrite of the previous format() function.
+ *
+ * @param sFormat
+ * @return {string}
+ */
+jsx.string.sprintf = function (sFormat) {
+ var
+ rxFormatSpec = jsx.string._rxFormatSpec,
+ args = arguments,
+ i = 1,
+ jsx_string = jsx.string,
+ ignoredArgs = [];
+
+ return String(sFormat).replace(rxFormatSpec,
+ function (m, p1, propertyName, flags,
+ fieldWidth, argFieldWidth, p4, uFieldWidthArg, p6,
+ precision, argPrecision, p9, uPrecisionArg,
+ memberDelim, convSpecifier) {
+ /* Prevent argument change by parameter assignment */
+ "use strict";
+
+ while (ignoredArgs[i])
+ {
+ ++i;
+ }
+
+ if (argFieldWidth)
+ {
+ if (!uFieldWidthArg)
+ {
+ uFieldWidthArg = i + 1;
+ }
+ else
+ {
+ uFieldWidthArg = +uFieldWidthArg;
+ }
+
+ ignoredArgs[uFieldWidthArg] = true;
+ fieldWidth = args[uFieldWidthArg];
+ }
+
+ var v = args[i];
+ if (propertyName)
+ {
+ v = v[propertyName];
+ }
+
+ switch (convSpecifier)
+ {
+ case "%":
+ v = "%";
+ i--;
+ break;
+
+ case "a":
+ case "A":
+ v = Array.prototype.join.call(v, memberDelim);
+ break;
+
+ case "b":
+ case "d":
+ case "o":
+ case "x":
+ case "X":
+ v = +v;
+
+ switch (convSpecifier)
+ {
+ case "b":
+ v = v.toString(2);
+ break;
+
+ case "o":
+ v = v.toString(8);
+ if (flags.indexOf("#") > -1 && v.charAt(0) !== "0")
+ {
+ v = "0" + v;
+ }
+ break;
+
+ case "x":
+ case "X":
+ v = v.toString(16);
+ if (flags.indexOf("#") > -1 && v !== "0")
+ {
+ v = "0x" + v;
+ }
+
+ if (convSpecifier === "X")
+ {
+ v = v.toUpperCase();
+ }
+ }
+
+ break;
+
+ case "c":
+ case "C":
+ case "s":
+ case "S":
+ if (/c/i.test(convSpecifier))
+ {
+ if (typeof v === "string")
+ {
+ v = v.charAt(0);
+ }
+ else
+ {
+ v = String.fromCharCode(v);
+ }
+ }
+
+ if (/[CS]/.test(convSpecifier))
+ {
+ v = String(v).toUpperCase();
+ }
+
+ break;
+
+ case "i":
+ case "u":
+ v = (+v < 0) ? Math.ceil(v) : Math.floor(v);
+ if (convSpecifier === "u")
+ {
+ v >>>= 0;
+ }
+ break;
+
+ case "e":
+ case "E":
+ case "f":
+ case "F":
+ case "g":
+ case "G":
+ v = (+v).toString();
+
+ /* TODO: Use Number.prototype.toExponential() if backwards-compatible */
+ if (/e/i.test(convSpecifier))
+ {
+ var
+ numParts = v.match(/^([+-])?(\d*)(\.(\d*))?(e([+-]\d+))?/i),
+ sign = numParts[1] || "",
+ sUintPart = numParts[2],
+ uintPart = sUintPart && parseInt(sUintPart, 10) || 0,
+ fracPart = numParts[4] || "",
+ exponent = numParts[6] && parseInt(numParts[6], 10) || 0;
+
+ if (uintPart > 0)
+ {
+ if (uintPart > 9)
+ {
+ /* integer part with two or more digits */
+ exponent += sUintPart.length - 1;
+ fracPart = sUintPart.slice(1) + fracPart;
+ sUintPart = sUintPart.charAt(0);
+ }
+ }
+ else if (fracPart)
+ {
+ /* Integer part must be 0 */
+ var numLeadingZeroes = (fracPart.match(/^0+/) || [""])[0].length;
+
+ sUintPart = fracPart.charAt(numLeadingZeroes);
+ fracPart = fracPart.slice(numLeadingZeroes + 1);
+ exponent -= numLeadingZeroes + 1;
+ }
+
+ if (!parseInt(fracPart, 10))
+ {
+ fracPart = "0";
+ }
+
+ v = sign + sUintPart + "." + fracPart
+ + "e" + (exponent >= 0 ? "+" : "") + exponent;
+
+ if (convSpecifier == "E")
+ {
+ v = v.toUpperCase();
+ }
+ }
+ else if (/g/i.test(convSpecifier))
+ {
+ if (convSpecifier == "G")
+ {
+ v = String(v).toUpperCase();
+ }
+ }
+
+ if (precision)
+ {
+ var prec = +precision;
+ if (prec > 0)
+ {
+ v = (+v).toFixed(prec);
+ }
+ else if (prec < 0)
+ {
+ var power = Math.pow(10, -prec);
+ v = Math.round(v / power) * power;
+ }
+ }
+
+ break;
+ }
+
+ if (fieldWidth)
+ {
+ fieldWidth = +fieldWidth;
+ if (flags.indexOf("0") > -1 && /[bdoxXiueEfFgG]/.test(convSpecifier))
+ {
+ v = String(v);
+
+ var
+ padCharacter = "0",
+ wasNegative = (v.charAt(0) === "-");
+
+ if (wasNegative)
+ {
+ v = v.slice(1);
+ fieldWidth--;
+ }
+ }
+
+ v = jsx_string.pad(v, fieldWidth, padCharacter);
+
+ if (wasNegative)
+ {
+ v = "-" + v;
+ }
+ }
+
+ if (!propertyName)
+ {
+ ++i;
+ }
+
+ return v;
+ });
+};
+
+/**
+ * Formats a string
+ */
+String.prototype.format = jsx.string.format = (function () {
+ var _getClass = jsx.object.getClass;
+ var _hasOwnProperty = jsx.object._hasOwnProperty;
+
+ /**
+ * @param sFormat
+ * @return {String}
+ */
+ return function (sFormat) {
+ /* Prevent argument change by parameter assignment */
+ "use strict";
+
+ var start = 1;
+
+ if (_getClass(this) === "String")
+ {
+ sFormat = this.constructor(this);
+ start = 0;
+ }
+
+ for (var i = start, len = arguments.length; i < len; ++i)
+ {
+ var data = arguments[i];
+
+ if (_getClass(data) === "Object")
+ {
+ for (var propertyName in data)
+ {
+ if (_hasOwnProperty(data, propertyName))
+ {
+ sFormat = sFormat.replace(new RegExp("\\{" + propertyName + "\\}", "g"),
+ data[propertyName]);
+ }
+ }
+ }
+ else
+ {
+ sFormat = sFormat.replace(new RegExp("\\{" + (i - start) + "\\}", "g"), data);
+ }
+ }
+
+ return sFormat;
+ };
+}());
+
+/**
+ * Parses values out of a string using the specified format
+ */
+jsx.string.sscanf = (function () {
+ var formatSpec = {
+ dec: "([+-]?(?:0|[1-9]\\d+)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)",
+ "int": "([+-]?(?:0|[1-9]\\d+)(?:[eE][+-]?\\d+)?)"
+ };
+
+ var formatMap = {
+ "%d": {
+ spec: formatSpec.dec,
+ parser: parseFloat
+ },
+ "%i": {
+ spec: formatSpec["int"],
+ parser: function (value) {
+ return parseInt(value, 10);
+ }
+ }
+ };
+
+ function replacer (match)
+ {
+ if (typeof formatMap[match] != "undefined")
+ {
+ replaced.push(match);
+ match = formatMap[match].spec;
+ }
+
+ return match;
+ }
+
+ var rxFormatSpec = jsx.string._rxFormatSpec;
+
+ /**
+ * @param {String} s
+ * @param {String} format
+ * @return {Array}
+ */
+ return function (s, format) {
+ var replaced = [];
+ format = format.replace(rxFormatSpec, replacer);
+ var matches = s.match(new RegExp(format));
+ matches.shift();
+
+ /* TODO: Convert values to specified type */
+
+ for (var i = 0, len = replaced.length; i < len; ++i)
+ {
+ var replace = replaced[i];
+
+
+ switch (replace)
+ {
+ case formatSpec.dec:
+ matches[i] = parseFloat(matches[i]);
+ break;
+
+
+ }
+ }
+
+ return matches;
+ };
+}());
+
+/**
+ * @version
+ * 1.29.2004050110
+ * @author
+ * (C) 2004 Thomas Lahn <string.js@PointedEars.de>
+ * @partof
+ * http://pointedears.de/scripts/string.js
+ * @param {string|number} s (optional)
+ * Un(completely )formatted number (decimal, hexadecimal
+ * or octal) or a string representing such a number.
+ * If the function is called as a method of
+ * {@link jsref#String} objects and <code>s</code> is
+ * provided, the value of <code>s</code> is formatted
+ * instead of the @link{jsref#String} object.
+ * @param {string} s1kDelim = ","
+ * Character or character sequence to delimit a sequence
+ * of three digits on the left-hand side of the point.
+ * The default is ",".
+ * @return {string|number}
+ * the formatted number as string, <code>NaN</code> on error.
+ */
+function format1k (s, s1kDelim)
+{
+ var result = NaN;
+
+ /* to use this method for String objects */
+ if (typeof this.constructor != "undefined"
+ && this.constructor == String
+ && !s)
+ {
+ s = this;
+ }
+
+ /* to allow for numbers as argument */
+ s = s.toString();
+
+ if (!isNaN(s))
+ {
+ if (!s1kDelim)
+ {
+ s1kDelim = ",";
+ }
+
+ /*
+ * 1.29.4.2008030123:
+ * added parens around backrefs for JScript 3.x compliance
+ */
+ var rx = /([\da-f])((\1){3}(,|(\.(\1)+)?$))/i;
+ while (rx.test(s))
+ {
+ s = s.replace(rx, "$1" + s1kDelim + "$2");
+ }
+
+ result = s;
+ }
+
+ return result;
+}
+
+/**
+ * String.hashCode() as defined in the Sun Java2 1.4 API.
+ *
+ * The function takes a string as argument, or
+ * the <code>this</code> value if the argument is missing or
+ * a false-value, and the <code>this</code> value refers
+ * to an object that has a true-valued <code>charCodeAt</code>
+ * property. The ASCII or Unicode value (depending on the
+ * implementation) of each character (from right to left) is
+ * added to the product of the current sum (starting at 0)
+ * multiplied with x, where x = 37 if the string is no longer
+ * than 15 characters, x = 39 otherwise. If the string is 16
+ * characters long or longer, at the average every eighth
+ * character is not included in the sum.
+ *
+ * @author
+ * Implementation in ECMAScript
+ * (C) 2003 Thomas Lahn &lt;hashCode.js@PointedEars.de&gt;
+ * @param {string} s (optional)
+ * Optional string of which the hash code is computed. If
+ * not provided or a false-value, it is assumed that
+ * the function is used as method of the String prototype,
+ * applied to a String object or literal.
+ * @return {number}
+ * The hash code of the string, designed for implementing hash
+ * code access to associative arrays which can be implemented
+ * as objects with named properties in JavaScript 1.x.
+ * @see
+ * #strToCodeArray() java2:String#hashCode()
+ */
+function hashCode (s)
+{
+ if (!s && this.charCodeAt)
+ {
+ s = this;
+ }
+
+ var h = 0;
+ var off = 0;
+ var len = s.length;
+ var val = strToCodeArray(s);
+ var i;
+
+ if (len < 16)
+ {
+ for (i = len; i > 0; i--)
+ {
+ h = (h * 37) + val[off++];
+ }
+ }
+ else
+ {
+ /* only sample some characters */
+ var skip = Math.floor(len / 8);
+ for (i = len; i > 0; i -= skip, off += skip)
+ {
+ h = (h * 39) + val[off];
+ }
+ }
+
+ return h;
+}
+
+/**
+ * @param {string} s (optional)
+ * @return {string}
+ */
+function leadingCaps (s)
+{
+ if (!s && this.charAt)
+ {
+ s = this;
+ }
+
+ if (!s)
+ {
+ return "";
+ }
+
+ return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();
+}
+
+/**
+ * @param {string} s (optional)
+ * Input string. If omitted and the calling object
+ * is a String object, it is used instead.
+ * @param {number} n (optional)
+ * Length of the resulting string. The default is 1,
+ * i.e. if the input string is empty, "0" is returned.
+ * @return {string}
+ * Input string with leading zeros so that
+ * its length is @{(n)}.
+ * @see
+ * #pad(string, number, string)
+ */
+var leadingZero = jsx.string.leadingZero = function (s, n) {
+ var c;
+ if ((c = this.constructor) && c == String && typeof s != "string")
+ {
+ s = this;
+ }
+
+ var isNegative = (s && typeof s.valueOf() == "number" && s < 0);
+ if (isNegative)
+ {
+ s = -s;
+
+ if (typeof n == "number" && !isNaN(n))
+ {
+ --n;
+ }
+ }
+
+ var result = jsx.string.pad(s, n, "0");
+
+ if (isNegative)
+ {
+ result = "-" + result;
+ }
+
+ return result;
+};
+
+/*
+int LevenshteinDistance(char s[1..n], char t[1..m])
+ declare int d[0..n,0..m]
+ declare int i, j, cost
+
+ for i := 0 to n
+ d[i,0] := i
+ for j := 0 to m
+ d[0,j] := j
+
+ for i := 1 to n
+ for j := 1 to m
+ if s[i] = t[j] then cost := 0
+ else cost := 1
+ d[i,j] := minimum(d[i-1,j ] + 1, // insertion
+ d[i, j-1] + 1, // deletion
+ d[i-1,j-1] + cost) // substitution
+
+ return d[n,m]
+*/
+/**
+ * Returns the Levenshtein Distance One between two strings
+ * <var>s</var> and <var>t</var> that is, the number of
+ * required edit moves to make <var>s</var> the same as
+ * <var>t</var>, and vice-versa. That value indicates
+ * to what extent the two strings are similar -- small
+ * distances mean greater, large distances less similarity.
+ * It is computed as follows:
+ *
+ * <table>
+ * <thead>
+ * <tr>
+ * <th align="left">Step</th>
+ * <th align="left">Description</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr valign="top">
+ * <th>1</th>
+ * <td>Set <tt>n</tt> to be the length of <var>s</var>.
+ * Set <tt>m</tt> to be the length of <var>t</var>.
+ * If <tt>n</tt> = 0, return <tt>m</tt> and exit.
+ * If <tt>m</tt> = 0, return <tt>n</tt> and exit.
+ * Construct a matrix containing 0..<tt>m rows and 0..<tt>n</tt>
+ * columns.</td>
+ * </tr>
+ * <tr>
+ * <th>2</th>
+ * <td>Initialize the first row to 0..<tt>n</tt>.
+ * Initialize the first column to 0..<tt>m</tt>.</td>
+ * </tr>
+ * <tr>
+ * <th>3</th>
+ * <td>Examine each character of <var>s</var> (<tt>i</tt> from 1 to <tt>n</tt>).</td>
+ * </tr>
+ * <tr>
+ * <th>4</th>
+ * <td>Examine each character of <var>t</var> (<tt>j</tt> from 1 to <tt>m</tt>).</td>
+ * </tr>
+ * <tr>
+ * <th>5</th>
+ * <td>If <var>s</var>[<tt>i</tt>] equals <var>t</var>[<tt>j</tt>], the cost is 0.
+ * If <var>s</var>[<tt>i</tt>] doesn't equal <var>t</var>[<tt>j</tt>],
+ * the cost is 1.</td>
+ * </tr>
+ * <tr valign="top">
+ * <th>6</th>
+ * <td>Set cell <tt>d</tt>[<tt>i</tt>, <tt>j</tt>] of the matrix
+ * equal to the minimum of:
+ * <ol type="a">
+ * <li>The cell immediately above plus 1:
+ * <tt>d</tt>[<tt>i</tt>-1, <tt>j</tt>] + 1.</li>
+ * <li>The cell immediately to the left plus 1:
+ * <tt>d</tt>[<tt>i</tt>, <tt>j</tt>-1] + 1.</li>
+ * <li>The cell diagonally above and to the left plus the cost:
+ * <tt>d</tt>[<tt>i</tt>-1, <tt>j</tt>-1] + cost.</li>
+ * </ol></td>
+ * </tr>
+ * <tr>
+ * <th>7</th>
+ * <td>After the iteration steps (3, 4, 5, 6) are complete, the distance
+ * is found in cell <tt>d</tt>[<tt>n</tt>, <tt>m</tt>].</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * @param {string} s (optional)
+ * @param {string} t (optional)
+ * @return {number}
+ */
+function levenshtein (s, t)
+{
+ /* Step 1 */
+ if (typeof s != "string")
+ {
+ s = s.toString();
+ }
+
+ if (typeof t != "string")
+ {
+ t = t.toString();
+ }
+
+ var n = s.length;
+ var m = t.length;
+
+ if (n == 0)
+ {
+ return m;
+ }
+
+ if (m == 0)
+ {
+ return n;
+ }
+
+ /* matrix */
+ var d = new Array();
+
+ /* Step 2 */
+ for (var i = 0; i <= n; i++)
+ {
+ d[i] = new Array();
+ d[i][0] = i;
+ }
+
+ for (var j = 0; j <= m; j++)
+ {
+ d[0][j] = j;
+ }
+
+ /* Step 3 */
+ for (i = 1; i <= n; i++)
+ {
+ var s_i = s.charAt(i - 1);
+
+ /* Step 4 */
+ for (j = 1; j <= m; j++)
+ {
+ /* Step 5 */
+ var cost = (s_i == t.charAt(j - 1)) ? 0 : 1;
+
+ /* Step 6 */
+ d[i][j] = Math.min(
+ d[i-1][j] + 1,
+ d[i][j-1] + 1,
+ d[i-1][j-1] + cost);
+ }
+ }
+
+ /* Step 7 */
+ return d[n][m];
+}
+
+/**
+ * Returns the input string with all substrings that
+ * may be interpreted as markup are escaped, that is,
+ * those prefixed by `&' or `<'.
+ *
+ * @param {string} s (optional)
+ * @return {string}
+ */
+function maskMarkup (s)
+{
+ if (!s)
+ {
+ s = this;
+ }
+ else
+ {
+ s = String(s);
+ }
+
+ return replaceText(replaceText(s, "&", "&amp;"), "<", "&lt;");
+}
+
+/**
+ * @param {string} s
+ * @return {string}
+ */
+function nl2br (s)
+{
+ return s.replace(/\r\n?|\n/g, "<br>");
+}
+
+/**
+ * @param {string} s (optional)
+ * Input string. If omitted and the calling object
+ * is a String object, it is used instead.
+ * @param {number} n = 1
+ * Length of the resulting string. The default is 1,
+ * i.e. if the input string is empty, "0" is returned
+ * if c is <code>'0'</code>.
+ * @param {string} c = CH_NBSP
+ * Character string to use for padding. The default
+ * is one non-breaking space.
+ * @param {boolean} bRight = false
+ * If <code>true</code>, s is padded on the right,
+ * otherwise on the left.
+ * @param {number} iStart (optional)
+ * Assume that s is iStart characters long.
+ * @return {string}
+ * The padded input string so that its length is n.
+ */
+var pad = jsx.string.pad = function (s, n, c, bRight, iStart) {
+ var constr;
+ if ((constr = this.constructor) && constr == String
+ && typeof s != "string")
+ {
+ s = this;
+ }
+
+ if (!n)
+ {
+ n = 1;
+ }
+
+ if (!c)
+ {
+ c = CH_NBSP;
+ }
+
+ if (typeof s != "string")
+ {
+ s = String(s);
+ }
+
+ if (typeof iStart == "undefined")
+ {
+ iStart = s.length;
+ }
+
+ if (n <= iStart)
+ {
+ return s;
+ }
+
+ var a = [];
+ var missingLength = n - iStart + 1;
+
+ if (typeof a.join === "function"
+ && (missingLength > -1) && (missingLength < Math.pow(2, 32)))
+ {
+ a.length = missingLength;
+ var rep = a.join(c);
+ if (bRight)
+ {
+ s += rep;
+ }
+ else
+ {
+ s = rep + s;
+ }
+ }
+ else
+ {
+ while (iStart < n)
+ {
+ if (bRight)
+ {
+ s += c;
+ }
+ else
+ {
+ s = c + s;
+ }
+
+ iStart++;
+ }
+ }
+
+ return s;
+};
+
+/**
+ * @param sText
+ * @param {string} sReplaced
+ * @param {string} sReplacement
+ * @param {boolean} bForceLoop
+ * @return {string}
+ */
+function replaceText (sText, sReplaced, sReplacement, bForceLoop)
+{
+ var result = "";
+
+ if (!sText && this.constructor == String)
+ {
+ sText = this;
+ }
+
+ var sNewText = sText;
+ // alert(sText);
+ if (sText && sReplaced && sReplacement)
+ {
+ if (sText.replace && !bForceLoop)
+ {
+ sReplaced = sReplaced.replace(/\\/g, "\\\\");
+ /*
+ * Version 1.23.2002.4 bugfix: allows to replace \ with other
+ * strings, required for proper rxReplaced;
+ * Example (no quotes, no escaping):
+ * sReplaced (provided) "\\"
+ * sReplaced (evaluated) \
+ * sReplaced (replaced as formulated above) "\\\\"
+ * sReplaced (esc. in RegExp constructor) "\\\\"
+ * sReplaced (ev. in RegExp constructor) \\
+ * rxReplaced (with RegExp escaping) /\\/g
+ * rxReplaced (evaluated) all occurr. of \
+ */
+ var rxReplaced = new RegExp(sReplaced, "g");
+ sText = sText.replace(rxReplaced, sReplacement);
+
+ result = sText;
+ }
+ else if (sText.split
+ && (a = sText.split(sReplaced))
+ && a.join)
+ {
+ return a.join(sReplacement);
+ }
+
+ var i = sText.indexOf(sReplaced);
+
+ if (i > -1)
+ {
+ sNewText = sText.substring(0, i);
+ sNewText += sReplacement
+ + replaceText(
+ sText.substring(i + sReplaced.length),
+ sReplaced,
+ sReplacement);
+ }
+
+ result = sNewText;
+ }
+
+ return result;
+}
+
+/**
+ * @param {Object} o
+ * Object to be serialized
+ * @param {Object} options (optional)
+ * The property values of the passed object determine
+ * one or more of the following display options:
+ *
+ * @option depth: number = 0
+ * Depth down to which recursive serialization should
+ * be performed. The default is 0 (no recursion).
+ * Negative values specify infinite recursion.
+ * CAUTION: Recursive references are not detected;
+ * in that case, a stack overflow will happen because
+ * of too much recursion.
+ *
+ * @option showType: boolean = false
+ * If <code>true</code>, <code>typeof</code> is used
+ * to display the type of each property following a
+ * colon after the identifier. The value delimiter
+ * then changes into a equals (`<code>=</code>').
+ *
+ * @option showConstructor: boolean = false
+ * If <code>true</code>, <code>constructor</code> is used
+ * to display the constructor of each property in brackets
+ * after the identifier.
+ *
+ * @option iIndent: number = 0
+ * Indentation level
+ *
+ * @option sIndent: string = " "
+ * Character string to use for indenting code
+ * @return {string}
+ */
+function serialize (o, options)
+{
+ if (typeof options != "object" || !options)
+ {
+ options = {};
+ }
+
+ if (typeof options.depth == "undefined")
+ {
+ options.depth = 0;
+ }
+
+ if (typeof options.iIndent == "undefined")
+ {
+ options.iIndent = 0;
+ }
+
+ if (typeof options.sIndent == "undefined")
+ {
+ options.sIndent = " ";
+ }
+
+ var
+ a = [],
+ indent = strRepeat(options.sIndent, options.iIndent);
+
+ for (var p in o)
+ {
+ var v = o[p];
+ var origV = v;
+ var t = typeof v;
+ var isString = /string/i.test(t);
+ var s = isString ? '"' : '';
+
+ /*
+ * FIXME: number values
+ */
+ /*
+ * unlimited or limited depth > 0 (0 == false)
+ */
+ if (options.depth && (!isString || isNaN(p)))
+ {
+ v = serialize(v, {
+ depth: options.depth - 1,
+ showType: options.showType,
+ showConstructor: options.showConstructor,
+ iIndent: options.iIndent + 1,
+ sIndent: options.sIndent
+ });
+ }
+
+ a.push(
+ indent
+ + options.sIndent
+ + p
+ + (options.showConstructor
+ ? "["
+ + (origV && typeof origV.constructor != "undefined"
+ ? (String(origV.constructor).match(/function\s*([^\s\(\{]+)/)
+ || [, "unknown"])[1]
+ : "unknown")
+ + "]"
+ : "")
+ + (options.showType ? ": " + t : "")
+ + (options.showType ? " = " : ": ")
+ + (!(options.depth && (!isString || isNaN(p)))
+ ? s + String(v).replace(/"/g, "\\$&") + s
+ : v)
+ );
+ }
+
+ if (a.length > 0)
+ {
+ return "{\n" + a.join(",\n") + "\n" + indent + "}";
+ }
+
+ return String(o);
+}
+
+/**
+ * Calculates the number of occurrences of one string in another.
+ *
+ * @param {string} s
+ * @param {string} substr
+ * @param {boolean} bCaseSensitive (optional)
+ * @return {number}
+ */
+function strCount (s, substr, bCaseSensitive)
+{
+ var result = 0;
+
+ if ((!s && !this.toLowerCase) || !substr)
+ {
+ return -1;
+ }
+
+ if (s && this.toLowerCase)
+ {
+ s = this;
+ }
+
+ if (!bCaseSensitive && s.toLowerCase)
+ {
+ s = s.toLowerCase();
+ }
+
+ if (isMethodType(typeof RegExp))
+ {
+ var rxSub = new RegExp(substr, "g" + (!bCaseSensitive ? "i" : ""));
+
+ if (isMethod(s, "match") && rxSub)
+ {
+ result = s.match(rxSub);
+ if (result && result.length)
+ {
+ return result.length;
+ }
+
+ return 0;
+ }
+ }
+ else if (s.substr && substr.length)
+ {
+ if (!bCaseSensitive && substr.toLowerCase)
+ {
+ substr = substr.toLowerCase();
+ }
+
+ for (var i = 0; i < s.length; i++)
+ {
+ if (s.substr(i, substr.length) == substr)
+ {
+ result++;
+ i += substr.length - 1;
+ }
+ }
+
+ return result;
+ }
+
+ return -1;
+}
+
+/**
+ * Compares strings against each other, with the default possibility of
+ * taking Unicode compositing sequences into account.
+ *
+ * @param s1
+ * @param s2
+ * @param compositeAware
+ * If <code>true</code> (default), composited characters are taken
+ * into account. Otherwise strings are compared character-by-character.
+ * @return {boolean}
+ * <code>true</code> if the strings are equal, <code>false</code> otherwise
+ */
+function strCompare (s1, s2, compositeAware)
+{
+ if (this.constructor == String)
+ {
+ compositeAware = s2;
+ s2 = s1;
+ s1 = this;
+ var compositeLength = 2;
+ }
+ else
+ {
+ compositeLength = 3;
+ }
+
+ if (arguments.length < compositeLength)
+ {
+ compositeAware = true;
+ }
+
+ var equivalenceMap = {
+ "\u00e0": "\u0061\u0300"
+ };
+
+ for (var i = 0, j = 0, len = s1.length; i < len; ++i, ++j)
+ {
+ var ch1 = s1.charAt(i), ch2 = s2.charAt(j);
+ if (ch1 != ch2)
+ {
+ if (!compositeAware)
+ {
+ return false;
+ }
+
+ /*
+ * When the characters at the same position are not equal, see if
+ * there is a composite character sequence for each character …
+ */
+ var ch1Equivalent = equivalenceMap[ch1] || null;
+ if (ch1Equivalent)
+ {
+ /*
+ * If yes, check if there is a composite sequence in the second
+ * string starting at that index.
+ */
+ if (ch2.substring(j, ch1Equivalent.length) === ch1Equivalent)
+ {
+ /*
+ * If yes, advance the index for the second string so that
+ * the next check starts after that sequence.
+ */
+ j += ch1Equivalent.length - 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ /* Same for a potential composite sequence in the first string */
+ var ch2Equivalent = equivalenceMap[ch2] || null;
+ if (ch2Equivalent && ch1.substring(i, i + ch2Equivalent.length) === ch2Equivalent)
+ {
+ i += ch2Equivalent.length - 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
+String.prototype.equals = strCompare;
+
+/**
+ * Strips <code>&lt;tags&gt;</code> and optionally the
+ * content between start and respective end tags from
+ * a string. Uses RegExp if supported.
+ *
+ * @author
+ * (C) 2001-2004 Thomas Lahn &lt;js@PointedEars.de&gt;,
+ * Advanced RegExp parsing (C) 2003 Dietmar Meier
+ * &lt;meier@innoline-systemtechnik.de&gt;
+ * @param {string} s (optional)
+ * String where all tags should be stripped from. If not
+ * provided or <code>false</code>, it is assumed that the
+ * function is used as method of the String prototype,
+ * applied to a String object or literal. Note that in
+ * this case the method will not modify the String object
+ * either, but return a second String object.
+ * @param {boolean} bStripContent = false
+ * If <code>true</code>, the content between a start tag and
+ * a corresponding end tag is also removed.
+ * If <code>false</code> (default), only start and end tags
+ * are removed.
+ * @param {boolean} bCaseSensitive = false
+ * <code>true</code> for case-sensitive matches,
+ * <code>false</code> (default) otherwise.
+ * @param {optional} tags string|Array of string
+ * String or array of values that can be evaluated as string to
+ * specify the tag(s) to be stripped. If omitted, all tags are
+ * stripped.
+ * @param {boolean} bElements = false
+ * If <code>true</code>, strip elements, i.e. start and end tags.
+ * @return {string}
+ * String where all tags are stripped from.
+ * @see String.prototype#replace()
+ */
+function stripTags (s, bStripContent, bCaseSensitive, tags, bElements)
+{
+ if (!s)
+ {
+ s = this;
+ }
+ else
+ {
+ s = s.toString();
+ }
+
+ var sUntagged = s;
+
+ if (s.match && s.replace)
+ {
+ // sUntagged = s.replace(/<[^>]*>/g, "");
+ var sRxTags = "", i, len;
+ if (tags)
+ {
+ if (!tags.constructor || tags.constructor == Array)
+ {
+ if (tags.join)
+ {
+ if (bElements)
+ {
+ for (i = 0, len = tags.length; i < len; i++)
+ {
+ tags[tags.length] = "/" + tags[i];
+ }
+ }
+
+ sRxTags = tags.join("|");
+ }
+ else if (tags.length)
+ {
+ for (i = 0, len = tags.length; i < len; i++)
+ {
+ sRxTags += tags[i];
+ if (bElements)
+ {
+ sRxTags += "/" + tags[i];
+ }
+
+ if (i < tags.length - 1)
+ {
+ sRxTags += "|";
+ }
+ }
+ }
+
+ if (sRxTags)
+ {
+ sRxTags = "(" + sRxTags + ")";
+ }
+ }
+ else
+ {
+ sRxTags = tags;
+ }
+ }
+
+ var sRx = "";
+ if (bStripContent)
+ {
+ sRx = "<(" + (sRxTags ? sRxTags : "[^<>]*") + ")(<[^<>]*>)*>.*</\\1>";
+ }
+ else
+ {
+ sRx = "<" + (sRxTags ? sRxTags : "[^<>]*") + "(<[^<>]*>)*[^<>]*>";
+ }
+
+ var rx = new RegExp(sRx, (bCaseSensitive ? "i" : "") + "g");
+ if (rx)
+ {
+ while (s.match(rx))
+ {
+ s = s.replace(rx, "");
+ }
+ sUntagged = s;
+ }
+ }
+ else
+ {
+ var a = "";
+ var bOutOfTag = true;
+ var l = s.length;
+ sUntagged = "";
+
+ for (i = 0; i < l; i++)
+ {
+ a = s.charAt(i);
+
+ if (bOutOfTag && (a == "<"))
+ {
+ bOutOfTag = false;
+ }
+
+ if (bOutOfTag)
+ {
+ sUntagged += a;
+ }
+
+ if ((!bOutOfTag) && (a == ">"))
+ {
+ bOutOfTag = true;
+ }
+ }
+ }
+
+ return sUntagged;
+}
+
+/**
+ * Returns <var>s</var> repeated <var>n</var> times. <var>n</var>
+ * has to be greater than or equal to 0. If <var>n</var> converted
+ * to number is <code>NaN</code> or a value less then 1, the function
+ * will return the empty string.
+ *
+ * Note that this may be used also as method of the {@link String}
+ * prototype (if supported), applicable to <code>String</code> objects
+ * and literals. If <var>s</var> is not provided, if it is numeric
+ * or evaluates to <code>false</code>, the value of the
+ * <code>String</code> object is taken instead of it. If the first
+ * argument is then numeric, it is taken for <var>n</var> and the latter
+ * argument is ignored.
+ *
+ * @param {string|number} s
+ * @param {number} n (optional)
+ * @return {string}
+ */
+function strRepeat (s, n)
+{
+ var c;
+ if ((c = this.constructor) && c == String && typeof s != "string")
+ {
+ s = this;
+ n = !isNaN(s) ? s : 0;
+ }
+
+ if (isNaN(n))
+ {
+ return s;
+ }
+
+ if (s)
+ {
+ var aResult = [];
+ aResult.length = n + 1;
+ return aResult.join(s);
+ }
+
+ return "";
+}
+
+/**
+ * @author
+ * (C) 2003 Thomas Lahn &lt;string.js@PointedEars.de&gt;
+ * @param {string} s (optional)
+ * Optional string to be split into array elements. If not
+ * provided or <code>false</code>, it is assumed that the
+ * function is used as method of the String prototype, applied
+ * to a String object or literal.
+ * @return {Array}
+ * An array with every character of <code>s</code> an element
+ * of it.
+ * @see String.prototype#charAt
+ * @see String.prototype#split
+ */
+function strToArray (s)
+{
+ var c;
+ if (!s && (c = this.constructor) && c == String)
+ {
+ s = this;
+ }
+
+ var a = null;
+
+ if (s.split)
+ {
+ a = s.split("");
+ }
+ else
+ {
+ a = new Array();
+
+ for (var i = 0, len = s.length; i < len; i++)
+ {
+ a[i] = s.charAt(i);
+ }
+ }
+
+ return a;
+}
+/* TODO: */
+// function arrayFromStr (s)
+// {
+// return strToArray(s);
+// }
+
+/**
+ * @param {[string,]} as
+ * Input string array.
+ * @todo return RegExp
+ * A regular expression to match all the string array elements.
+ */
+function strArrayToCharClass (as)
+{
+ var hashTable = [];
+
+ for (var i = as.length; i--; 0)
+ {
+ var s = as[i];
+ var c = hashCode(s);
+
+ if (typeof hashTable[c] == "undefined")
+ {
+ hashTable[c] = new Collection(s);
+ }
+ else
+ {
+ var h = hashTable[c];
+ h.add(s);
+ }
+ }
+}
+
+/**
+ * @author
+ * (C) 2003 Thomas Lahn &lt;string.js@PointedEars.de&gt;
+ * @param {string} s (optional)
+ * Optional string to be split into an array where each
+ * element represents the ASCII or Unicode value of a
+ * character (depending on the implementation) of the
+ * string.
+ * If not provided or <code>false</code>, it is assumed
+ * that the function is used as method of the String
+ * prototype, applied to a String object or literal.
+ * @return {Array}
+ * An array where every element is the ASCII character
+ * of <code>s</code> an element of it.
+ * @see #strToArray()
+ * @see String.prototype#charCodeAt()
+ * @see String.prototype#split()
+ */
+function strToCodeArray (s)
+{
+ if (!s && this.charCodeAt)
+ {
+ s = this;
+ }
+
+ var a, i, alen;
+
+ if (isMethod(s, "split") && isMethod(_global, "strToArray"))
+ {
+ a = strToArray(s);
+
+ for (i = 0, alen = a.length; i < alen; i++)
+ {
+ a[i] = a[i].charCodeAt(0);
+ }
+ }
+ else
+ {
+ a = new Array();
+
+ var slen = s.length;
+ for (i = 0; i < slen; i++)
+ {
+ a[i] = s.charCodeAt(i);
+ }
+ }
+
+ return a;
+}
+/* TODO: */
+// function codeArrayFromStr (s)
+// {
+// return strToCodeArray(s);
+// }
+
+/**
+ * Returns the input string with all leading and trailing whitespace removed.
+ *
+ * @param {string} s (optional)
+ * @return {string}
+ * @see #trimLeft(), #trimRight()
+ */
+function trim (s)
+{
+ if (!s && this.charAt)
+ {
+ s = this;
+ }
+
+ if (s != "")
+ {
+ if (s.replace)
+ {
+ s = s.replace(/^\s+|\s+$/g, "");
+ }
+ else
+ {
+ s = trimRight(trimLeft(s));
+ }
+ }
+
+ return s;
+}
+
+/**
+ * Returns the input string with all leading whitespace removed.
+ *
+ * @param {string} s (optional)
+ * @return {string}
+ */
+function trimLeft (s)
+{
+ if (!s && this.charAt)
+ {
+ s = this;
+ }
+
+ if (s != "")
+ {
+ if (s.replace)
+ {
+ s = s.replace(/^\s+/, "");
+ }
+ else
+ {
+ var i, a;
+ for (i = 0;
+ i < s.length && (a = s.charAt(i)) <= " " || a == CH_NBSP;
+ i++)
+ {
+ ;
+ }
+ s = s.substring(i);
+ }
+ }
+
+ return s;
+}
+
+/**
+ * Returns the input string with all trailing whitespace removed.
+ *
+ * @param {string} s (optional)
+ * @return {string}
+ */
+function trimRight (s)
+{
+ if (!s && this.charAt)
+ {
+ s = this;
+ }
+
+ if (s != "")
+ {
+ if (s.replace)
+ {
+ s = s.replace(/\s+$/, "");
+ }
+ else
+ {
+ var i, a;
+ for (i = s.length - 1;
+ i >= 0 && (a = s.charAt(i)) <= " " || a == CH_NBSP;
+ i--)
+ {
+ ;
+ }
+ s = s.substring(0, i + 1);
+ }
+ }
+
+ return s;
+}
+
+/**
+ * Converts a Python str (e.g. 'K\xc3\xb6ln') into
+ * an ECMAScript-compliant string (e.g. 'Köln').
+ *
+ * @param {string} s
+ * The string to be converted
+ * @return {string}
+ * The converted string
+ */
+function pyUTF8toString (s)
+{
+ return unesc(
+ s.replace(/[\x80-\xff]/g,
+ function (m) {
+ return "%" + m.charCodeAt(0).toString(16);
+ }));
+}
+
+/*
+ * If possible, add methods to the String prototype;
+ * disabled until ECMAScript allows to hide properties from iteration.
+ */
+//jsx.object.extend(String.prototype, {
+// 'leadingCaps': leadingCaps,
+// 'leadingZero': leadingZero,
+// 'repeat' : strRepeat,
+// 'pad' : pad,
+// 'replaceText': replaceText,
+// 'addSlashes' : addSlashes,
+// 'strCount' : strCount,
+// 'stripTags' : stripTags,
+// 'maskMarkup' : maskMarkup,
+// 'trim' : trim,
+// 'trimLeft' : trimLeft,
+// 'trimRight' : trimRight,
+//
+// // TODO: corr. with Array.fromStr
+// 'toArray' : strToArray,
+//
+// // TODO: corr. with Array.codeArrayFromStr
+// 'toCodeArray': strToCodeArray,
+//
+// // TODO: corr. with Array.toStr
+//// 'fromArray' : strFromArray,
+//
+// // TODO: corr. with Array.codeArrayToStr
+//// fromCodeArray: strFromCodeArray,
+//
+// 'hashCode' : hashCode,
+// 'format1k' : format1k});
+//
+//p = Array.prototype;
+//if (p)
+//{
+// // TODO: corr. with String.toArray
+// p.fromStr = arrayFromStr;
+//
+// // TODO: corr. with String.toCodeArray
+// p.codeArrayFromStr = codeArrayFromStr;
+//
+// // TODO: corr. with String.fromArray
+// p.toStr = arrayToStr;
+//
+// // TODO: corr. with String.fromCodeArray
+// p.codeArrayToStr = codeArrayToStr;
+//}
/live/string.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/date.js
===================================================================
--- live/date.js (nonexistent)
+++ live/date.js (revision 509)
@@ -0,0 +1,619 @@
+/**
+ * @fileOverview <title>Date Library</title>
+ * @file $Id$
+ * @requires object.js
+ * @requires string.js for Date.protoype.strftime()
+ *
+ * @author (C) 2013 <a href="mailto:js@PointedEars.de">Thomas Lahn</a>
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.date = {
+ /**
+ * @version
+ */
+ version: "$Id$",
+ copyright: "Copyright \xA9 2013",
+ author: "Thomas Lahn",
+ email: "js@PointedEars.de",
+ path: "http://PointedEars.de/scripts/",
+
+ /**
+ * Weekday names, where the elements are {@link Array}s of
+ * {@link Array}s of {@link String}. The first element of the
+ * inner <code>Array</code> holds the abbreviated name,
+ * the second one the long name.
+ * @type {Array}
+ */
+ WEEKDAYS: [
+ ["Sun", "Sunday"], ["Mon", "Monday"], ["Tue", "Tuesday"],
+ ["Wed", "Wednesday"], ["Thu", "Thursday"], ["Fri", "Friday"],
+ ["Sat", "Saturday"]
+ ],
+
+ /**
+ * Month names, where the elements are {@link Array}s of
+ * {@link Array}s of {@link String}. The first element of the
+ * inner <code>Array</code> holds the abbreviated name,
+ * the second one the long name.
+ */
+ MONTHS: [
+ ["Jan", "January"], ["Feb", "February"], ["Mar", "March"],
+ ["Apr", "April"], ["May", "May"], ["Jun", "June"],
+ ["Jul", "July"], ["Aug", "August"], ["Sep", "September"],
+ ["Oct", "October"], ["Nov", "November"], ["Dec", "December"]
+ ],
+
+ /**
+ * Daytimes for the 12-hour format
+ */
+ DAYTIMES: {am: "am", pm: "pm"},
+
+ /**
+ * Time zone names, where the keys are the offsets to UTC in
+ * minutes, and the values are {@link Array}s of {@link String}.
+ */
+ TIMEZONES: {
+ "540": ["Alaska Standard Time (AKST)"],
+ "480": ["Alaska Daylight Time (AKDT)"],
+ "240": ["Atlantic Standard Time (AST)"],
+ "180": ["Atlantic Daylight Time (ADT)",
+ "Argentina Time (ART)"],
+ "0": ["Greenwich Mean Time (GMT)"],
+ "-60": ["Central European Time (CET)"],
+ "-120": ["Central European Summer Time (CEST)"],
+ "-180": ["Arabia Standard Time (AST)"],
+ "-240": ["Armenia Time (AMT)"],
+ "-270": ["Afghanistan Time (AFT)"],
+ "-480": ["Australian Western Standard Time (AWST)",
+ "ASEAN Common Time (ACT)"],
+ "-570": ["Australian Central Standard Time (ACST)"],
+ "-600": ["Australian Eastern Standard Time (AEST)"],
+ "-630": ["Australian Central Daylight Time (ACDT)"],
+ "-660": ["Australian Eastern Daylight Time (AEDT)"]
+ },
+
+ /**
+ * Returns the number of day within a year
+ *
+ * @param {Date} date
+ * @return {number}
+ * @see http://en.wikipedia.org/wiki/Ordinal_date
+ */
+ dayOfYear: function (date) {
+ var month = date.getMonth();
+ var dayOfMonth = date.getDate();
+ switch (month)
+ {
+ /* January */
+ case 0:
+ return dayOfMonth;
+
+ /* February */
+ case 1:
+ return dayOfMonth + 31;
+
+ default:
+ return Math.floor(30.6 * (month + 1) - 91.4) + dayOfMonth
+ + (jsx.date.isLeapYear(date.getFullYear()) ? 60 : 59);
+ }
+ },
+
+ /**
+ * Determines if the arguments define a valid date-time.
+ *
+ * @param {Number} year
+ * Year argument for the {@link Date} constructor. Possible
+ * implementation-dependent correction of two-digit years is
+ * not supported.
+ * @param {Number} month
+ * @param {Number} date (optional)
+ * Day of month
+ * @param {Number} minutes (optional)
+ * @param {Number} seconds (optional)
+ * @param {Number} ms (optional)
+ * Milliseconds
+ * @return {boolean}
+ * <code>true</code> if the arguments would produce a
+ * corresponding time value when passed to the {@link Date}
+ * constructor, <code>false</code> otherwise.
+ * @see Date
+ */
+ isValid: function (year, month, date, hours, minutes, seconds, ms) {
+ if (arguments.length < 3)
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", [].slice.call(arguments),
+ "at least (year : int, month : int)"]);
+ }
+
+ var d = Date.construct(arguments);
+
+ return (d.getFullYear() == year
+ && (typeof month == "undefined" || d.getMonth() == month)
+ && (typeof hours == "undefined" || d.getHours() == hours)
+ && (typeof minutes == "undefined" || d.getMinutes() == minutes)
+ && (typeof seconds == "undefined" || d.getSeconds() == seconds));
+ },
+
+ /**
+ * Determines if a year is a leap year.
+ *
+ * @param {Number} year
+ * @return {boolean}
+ * Returns <code>true</code> if <var>year</var> is a leap year.
+ */
+ isLeapYear: function (year) {
+ return jsx.date.isValid(year, 1, 29);
+ },
+
+ /**
+ * Calculate the ISO 8601 weekday number of a <code>Date</code>.
+ *
+ * The ISO 8601 weekday number differs from the ECMAScript
+ * weekday number in that Sunday is <code>7</code> instead of
+ * <code>0</code>.
+ *
+ * @param {Date} date
+ * @return {number}
+ */
+ isoWeekday: function (date) {
+ return (date.getDay() % 7) || 7;
+ },
+
+ /**
+ * Calculates the ISO 8601 week number of a <code>Date</code>.
+ *
+ * @param {Date} date
+ * @return {number}
+ * @see http://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_of_a_given_date
+ */
+ isoWeekNumber: function jsx_date_isoWeekNumber (date) {
+ var result = Math.floor(
+ (jsx.date.dayOfYear(date) - jsx.date.isoWeekday(date)
+ + 10) / 7);
+
+ switch (result)
+ {
+ case 0:
+ result = jsx_date_isoWeekNumber(new Date(date.getFullYear() - 1, 11, 31));
+ break;
+
+ case 53:
+ /* TODO */
+ }
+
+ return result;
+ },
+
+ /**
+ * Returns the time zone offset of a {@link Date}
+ * in hours and minutes
+ */
+ tzOffsetHours: (function () {
+ var _leadingZero = jsx.string.leadingZero;
+
+ /**
+ * @param {Date} date
+ * @param {TimeOptions} options
+ * <table>
+ * <tr>
+ * <th>delimiter</th>
+ * <td>Delimiter between hours and minutes</td>
+ * </tr>
+ * <tr>
+ * <th>leadingZero</th>
+ * <td>If <code>true</code>, hours always have two digits.</td>
+ * </tr>
+ * <tr>
+ * <th>zeroMinutes</th>
+ * <td>If <code>true</code> minutes are returned even
+ * if they are zero.</td>
+ * </tr>
+ * </table>
+ * @return {Object|string}
+ */
+ function _tzOffsetHours (date, options)
+ {
+ var tzOffset = date.getTimezoneOffset();
+ var hours = Math.floor(Math.abs(tzOffset) / 60);
+ var minutes = Math.floor(Math.abs(tzOffset) - (hours * 60));
+
+ if (arguments.length < 2)
+ {
+ return {hours: hours, minutes: minutes};
+ }
+
+ return (tzOffset < 0 ? "+" : "-")
+ + (options && options.leadingZero ? _leadingZero(hours, 2) : hours)
+ + (+minutes || options && options.zeroMinutes
+ ? (options && options.delimiter || "") + _leadingZero(minutes, 2)
+ : "");
+ }
+
+ return _tzOffsetHours;
+ })(),
+
+ /**
+ * Formats a date with letters as placeholders
+ */
+ format: (function () {
+ var _jsx_string, _leadingZero;
+ var _weekdays, _months, _daytimes, _timezones;
+ var _dayOfYear, _isoWeekday, _isoWeekNumber, _tzOffsetHours;
+
+ var _rxDateFormats = /\\([\S\s])|YY(YY)?|M{1,4}|D{1,4}|W{1,4}|ww?|HH?|hh?|mm?|s{1,4}|Z{1,3}/g;
+
+ function _formatter (m, literal)
+ {
+ switch (m)
+ {
+ case "W": return _weekdays[this.getDay()][0].charAt(0);
+ case "WW": return _weekdays[this.getDay()][0].substring(0, 2);
+ case "WWW": return _weekdays[this.getDay()][0];
+ case "WWWW": return _weekdays[this.getDay()][1];
+ case "w": return _isoWeekday(this);
+ case "ww": return _leadingZero(_isoWeekNumber(this), 2);
+ case "YY": return this.getFullYear() % 100;
+ case "YYYY": return this.getFullYear();
+ case "M": return this.getMonth() + 1;
+ case "MM": return _leadingZero(this.getMonth() + 1, 2);
+ case "MMM": return _months[this.getMonth()][0];
+ case "MMMM": return _months[this.getMonth()][1];
+ case "D": return this.getDate();
+ case "DD": return _leadingZero(this.getDate(), 2);
+ case "DDD": return _dayOfYear(this);
+ case "H": return this.getHours();
+ case "HH": return _leadingZero(this.getHours(), 2);
+ case "h": return (this.getHours() % 12) || "12";
+ case "hh": return _leadingZero((this.getHours() % 12) || "12", 2);
+ case "P": return _daytimes[this.getHours() < 12 ? "am" : "pm"].toUpperCase();
+ case "p": return _daytimes[this.getHours() < 12 ? "am" : "pm"];
+ case "m": return this.getMinutes();
+ case "mm": return _leadingZero(this.getMinutes(), 2);
+ case "s": return this.getSeconds();
+ case "ss": return _leadingZero(this.getSeconds(), 2);
+ case "sss": return this.getMilliseconds();
+ case "ssss": return _leadingZero(this.getMilliseconds(), 3);
+ case "Z": return _tzOffsetHours(this, null);
+ case "ZZ":
+ return _tzOffsetHours(this, {
+ delimiter: ":",
+ leadingZero: true,
+ zeroMinutes: true
+ });
+
+ case "ZZZ":
+ var tzNames = _timezones[this.getTimezoneOffset()];
+
+ /*
+ * If no time zone name is defined for the offset,
+ * return UTC(+|-)H(:MM)?
+ */
+ return (tzNames && tzNames.join("/")
+ || ("UTC" + _format(this, "Z")));
+
+ default:
+ if (m.charAt(0) != "\\")
+ {
+ jsx.warn("Unsupported format: " + m);
+ return m;
+ }
+
+ return literal;
+ }
+ }
+
+ /**
+ * @param {Date} date
+ * @param {String} format
+ */
+ function _format (date, format)
+ {
+ if (arguments.length < 2 || typeof format == "undefined")
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", "", "(date : Date, format : String)"]);
+ }
+
+ if (typeof _jsx_string == "undefined")
+ {
+ /* one-time imports for _formatter() */
+ _jsx_string = jsx.string;
+ _leadingZero = _jsx_string.leadingZero;
+ }
+
+ var _date = jsx.date;
+ _weekdays = _date.WEEKDAYS;
+ _months = _date.MONTHS;
+ _daytimes = _date.DAYTIMES;
+ _timezones = _date.TIMEZONES;
+ _dayOfYear = _date.dayOfYear;
+ _isoWeekday = _date.isoWeekday;
+ _isoWeekNumber = _date.isoWeekNumber;
+ _tzOffsetHours = _date.tzOffsetHours;
+
+ return format.replace(_rxDateFormats, _formatter.bind(date));
+ }
+
+ return _format;
+ }()),
+
+ /**
+ * Returns a {@link Date} as a formatted string
+ *
+ * @namespace
+ * @name jsx.date.strftime
+ * @function
+ * @return {string}
+ * <var>date</var> formatted according to <var>format</var>
+ */
+ strftime: (function () {
+ var _jsx_string, _leadingZero, _pad;
+ var _dayOfYear, _isoWeekday, _isoWeekNumber, _tzOffsetHours;
+ var _weekdays, _months, _daytimes, _timezones;
+
+ var _rxDateFormats = /%([aAdejuwUVWbBhmCgGyYHkIlMpPrTSTXzZcDFsxnt%])/g;
+
+ /**
+ * Replaces a date format placeholder with the corresponding value
+ *
+ * @private
+ * @param {String} placeholder
+ * @param {String} conversion
+ * @return {String}
+ */
+ function _formatter (placeholder, conversion)
+ {
+ switch (conversion)
+ {
+ /* Day */
+ case "a": return _weekdays[this.getDay()][0];
+ case "A": return _weekdays[this.getDay()][1];
+ case "d": return _leadingZero(this.getDate(), 2);
+ case "e": return _pad(this.getDate(), 2);
+ case "j": return _leadingZero(_dayOfYear(this), 3);
+
+ /* ISO 8601 weekday: Sunday (0) is 7 */
+ case "u": return _isoWeekday(this);
+
+ case "w": return this.getDay();
+
+ /* Week */
+ /* TODO: %U, %W */
+ case "V": return _leadingZero(_isoWeekNumber(this), 2);
+
+ /* Month */
+ case "b":
+ case "h":
+ return _months[this.getMonth()][0];
+ case "B": return _months[this.getMonth()][1];
+ case "m": return _leadingZero(this.getMonth() + 1, 2);
+
+ /* Year */
+ case "C": return _leadingZero(Math.floor(this.getFullYear() / 100), 2);
+ case "y": return _leadingZero(this.getFullYear() % 100, 2);
+ case "Y": return _leadingZero(this.getFullYear(), 4);
+ /* TODO: %G, %g */
+
+ /* Time */
+ case "H": return _leadingZero(this.getHours(), 2);
+ case "k": return _pad(this.getHours(), 2);
+
+ /* 12-hour format, 0 hours is 12am */
+ case "I": return _leadingZero((this.getHours() % 12) || "12", 2);
+ case "l": return _pad((this.getHours() % 12) || "12" , 2);
+
+ case "M": return _leadingZero(this.getMinutes(), 2);
+
+ /* Counter-intuitive, but according to strftime(3) */
+ case "p": return _daytimes[this.getHours() < 12 ? "am" : "pm"].toUpperCase();
+ case "P": return _daytimes[this.getHours() < 12 ? "am" : "pm"];
+
+ case "R": return _strftime(this, "%H:%M");
+ /* TODO: %r */
+ case "S": return _leadingZero(this.getSeconds(), 2);
+ case "T": return _strftime(this, "%H:%M:%S");
+ case "X": return this.toLocaleTimeString();
+ case "z":
+ return _tzOffsetHours(this, {
+ leadingZero: true,
+ zeroMinutes: true
+ });
+
+ case "Z":
+ var tzNames = _timezones[this.getTimezoneOffset()];
+
+ /*
+ * If no time zone name is defined for the offset,
+ * return UTC(+|-)H(:MM)?
+ */
+ return (tzNames && tzNames.join("/")
+ || ("UTC" + _tzOffsetHours(this, {delimiter: ":"})));
+
+ /* Time and Date Stamps */
+ case "c": return this.toLocaleString();
+ case "D": return _strftime(this, "%m/%d/%y");
+ case "F": return _strftime(this, "%Y-%m-%d");
+
+ /*
+ * Unix timestamp (the number of seconds since the Epoch,
+ * 1970-01-01 00:00:00 +0000 (UTC))
+ */
+ case "s": return Math.floor(this.valueOf() / 1000);
+
+ case "x": return this.toLocaleDateString();
+
+ /* Miscellaneous */
+ case "n": return "\n";
+ case "t": return "\t";
+ case "%": return "%";
+
+ default:
+ jsx.warn("Unsupported conversion specifier: " + placeholder);
+ return placeholder;
+ }
+ }
+
+ /**
+ * @param {Date} date
+ * @param {String} format
+ */
+ function _strftime (date, format)
+ {
+ if (arguments.length < 2 || typeof format == "undefined")
+ {
+ return jsx.throwThis(jsx.InvalidArgumentError,
+ ["Not enough arguments", "", "(date : Date, format : String)"]);
+ }
+
+ if (typeof _jsx_string == "undefined")
+ {
+ /* one-time imports for _formatter() */
+ _jsx_string = jsx.string;
+ _leadingZero = _jsx_string.leadingZero;
+ _pad = _jsx_string.pad;
+ }
+
+ var _date = jsx.date;
+ _weekdays = _date.WEEKDAYS;
+ _months = _date.MONTHS;
+ _daytimes = _date.DAYTIMES;
+ _timezones = _date.TIMEZONES;
+ _dayOfYear = _date.dayOfYear;
+ _isoWeekday = _date.isoWeekday;
+ _isoWeekNumber = _date.isoWeekNumber;
+ _tzOffsetHours = _date.tzOffsetHours;
+
+ return String(format).replace(_rxDateFormats, _formatter.bind(date));
+ }
+
+ return _strftime;
+ }())
+};
+
+if (jsx.options.augmentBuiltins)
+{
+ jsx.object.extend(Date, {
+ /**
+ * @memberOf Date
+ * @function
+ * @see jsx.date.isLeapYear
+ */
+ isLeapYear: jsx.date.isLeapYear,
+
+ /**
+ * @function
+ * @see jsx.date.isValid
+ */
+ isValid: jsx.date.isValid
+ });
+
+ if (jsx.options.augmentPrototypes)
+ {
+ jsx.object.extend(Date.prototype, {
+ /**
+ * Returns the ISO weekday number of this <code>Date</code>.
+ *
+ * @function
+ * @memberOf Date.prototype
+ * @see jsx.date.isoWeekNumber(Date)
+ * @return {number}
+ */
+ getISOWeekday: (function () {
+ var _isoWeekday = jsx.date.isoWeekday;
+
+ return function () {
+ return _isoWeekday(this);
+ };
+ }()),
+
+ /**
+ * Returns the ISO week number of this <code>Date</code>.
+ *
+ * @function
+ * @see jsx.date.isoWeekNumber(Date)
+ * @return {number}
+ */
+ getISOWeekNumber: (function () {
+ var _isoWeekNumber = jsx.date.isoWeekNumber;
+
+ return function () {
+ return _isoWeekNumber(this);
+ };
+ }()),
+
+ /**
+ * Returns the number of day within a year
+ *
+ * @function
+ * @see jsx.date.dayOfYear(Date)
+ * @return {number}
+ */
+ getDayOfYear: (function () {
+ var _dayOfYear = jsx.date.dayOfYear;
+
+ return function () {
+ return _dayOfYear(this);
+ };
+ }()),
+
+ /**
+ * @function
+ * @see jsx.date#format(Date, String)
+ * @return {string}
+ */
+ format: (function () {
+ var _format = jsx.date.format;
+
+ /**
+ * @param {String} format
+ */
+ return function (format) {
+ return _format(this, format);
+ };
+ }()),
+
+ /**
+ * @function
+ * @see jsx.date#strftime(Date, String)
+ * @return {string}
+ */
+ strftime: (function () {
+ var _strftime = jsx.date.strftime;
+
+ /**
+ * @param {String} format
+ */
+ return function (format) {
+ return _strftime(this, format);
+ };
+ }())
+ });
+ }
+}
\ No newline at end of file
/live/date.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/compat.js
===================================================================
--- live/compat.js (nonexistent)
+++ live/compat.js (revision 509)
@@ -0,0 +1,41 @@
+var _global = jsx.global;
+var setErrorHandler = jsx.setErrorHandler;
+var clearErrorHandler = jsx.clearErrorHandler;
+
+var addProperties = jsx.object.addProperties = (function () {
+ var rxObject = /^\s*(object|function)\s*$/i;
+
+ return function (oSource, iFlags, oOwner) {
+ if (rxObject.test(typeof iFlags))
+ {
+ oOwner = iFlags;
+ iFlags = 0;
+ }
+
+ if (!oOwner)
+ {
+ oOwner = jsx.global;
+ }
+
+ return jsx.object.extend(oOwner, oSource, iFlags);
+ };
+}());
+
+var isMethod = function () {
+ for (var i = arguments.length; i--;)
+ {
+ if (!jsx.object.isMethod(arguments[i]))
+ {
+ return false;
+ }
+ }
+
+ return true;
+};
+
+var isMethodType = jsx.object.isMethodType;
+var isInstanceOf = jsx.object.isInstanceOf;
+
+var types = jsx.types;
+
+var Collection = jsx.Collection;
\ No newline at end of file
/live/compat.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.wst.jsdt.core.prefs
===================================================================
--- live/.settings/org.eclipse.wst.jsdt.core.prefs (nonexistent)
+++ live/.settings/org.eclipse.wst.jsdt.core.prefs (revision 509)
@@ -0,0 +1,321 @@
+eclipse.preferences.version=1
+org.eclipse.wst.jsdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.wst.jsdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.wst.jsdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.wst.jsdt.core.compiler.compliance=1.4
+org.eclipse.wst.jsdt.core.compiler.debug.lineNumber=generate
+org.eclipse.wst.jsdt.core.compiler.debug.localVariable=generate
+org.eclipse.wst.jsdt.core.compiler.debug.sourceFile=generate
+org.eclipse.wst.jsdt.core.compiler.doc.comment.support=enabled
+org.eclipse.wst.jsdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.wst.jsdt.core.compiler.problem.deprecation=warning
+org.eclipse.wst.jsdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.wst.jsdt.core.compiler.problem.duplicateLocalVariables=warning
+org.eclipse.wst.jsdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.wst.jsdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.wst.jsdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.wst.jsdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.wst.jsdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.wst.jsdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.wst.jsdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.wst.jsdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.invalidJavadocTagsVisibility=default
+org.eclipse.wst.jsdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.looseVarDecleration=warning
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocCommentsVisibility=default
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.missingJavadocTagsVisibility=default
+org.eclipse.wst.jsdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.wst.jsdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.nullReference=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.optionalSemicolon=warning
+org.eclipse.wst.jsdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.wst.jsdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.undefinedField=warning
+org.eclipse.wst.jsdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.wst.jsdt.core.compiler.problem.uninitializedGlobalVariable=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.uninitializedLocalVariable=warning
+org.eclipse.wst.jsdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.wst.jsdt.core.compiler.problem.unresolvedFieldReference=error
+org.eclipse.wst.jsdt.core.compiler.problem.unresolvedMethodReference=error
+org.eclipse.wst.jsdt.core.compiler.problem.unresolvedTypeReference=error
+org.eclipse.wst.jsdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.wst.jsdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.wst.jsdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.wst.jsdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.wst.jsdt.core.compiler.source=1.3
+org.eclipse.wst.jsdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.wst.jsdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,NORMAL,LOW
+org.eclipse.wst.jsdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,DEBUG
+org.eclipse.wst.jsdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_assignment=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_conditional_expression=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.wst.jsdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_method_declaration=18
+org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.wst.jsdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_after_package=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_field=0
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_first_class_body_declaration=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_method=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_before_package=0
+org.eclipse.wst.jsdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.wst.jsdt.core.formatter.blank_lines_between_type_declarations=0
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_objlit_initializer=end_of_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.wst.jsdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_block_comments=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_header=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_html=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_line_comments=true
+org.eclipse.wst.jsdt.core.formatter.comment.format_source_code=true
+org.eclipse.wst.jsdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.wst.jsdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.wst.jsdt.core.formatter.comment.line_length=72
+org.eclipse.wst.jsdt.core.formatter.compact_else_if=true
+org.eclipse.wst.jsdt.core.formatter.continuation_indentation=1
+org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_array_initializer=1
+org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_objlit_initializer=1
+org.eclipse.wst.jsdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.wst.jsdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.wst.jsdt.core.formatter.indent_empty_lines=true
+org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.wst.jsdt.core.formatter.indentation.size=2
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_comma_in_objlit_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_objlit_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_objlit_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_object_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_object_initializer=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.wst.jsdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.wst.jsdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.wst.jsdt.core.formatter.keep_empty_objlit_initializer_on_one_line=false
+org.eclipse.wst.jsdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.wst.jsdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.wst.jsdt.core.formatter.lineSplit=80
+org.eclipse.wst.jsdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.wst.jsdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.wst.jsdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.wst.jsdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.wst.jsdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.wst.jsdt.core.formatter.tabulation.char=space
+org.eclipse.wst.jsdt.core.formatter.tabulation.size=2
+org.eclipse.wst.jsdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.wst.jsdt.core.formatter.wrap_before_binary_operator=true
+semanticValidation=enabled
/live/.settings/org.eclipse.wst.jsdt.core.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.wst.xsl.core.prefs
===================================================================
--- live/.settings/org.eclipse.wst.xsl.core.prefs (nonexistent)
+++ live/.settings/org.eclipse.wst.xsl.core.prefs (revision 509)
@@ -0,0 +1,12 @@
+#Tue Apr 05 22:58:44 CEST 2011
+CHECK_CALL_TEMPLATES=2
+CHECK_XPATHS=2
+CIRCULAR_REF=2
+DUPLICATE_PARAMETER=2
+EMPTY_PARAM=1
+MISSING_INCLUDE=2
+MISSING_PARAM=1
+NAME_ATTRIBUTE_EMPTY=2
+NAME_ATTRIBUTE_MISSING=2
+TEMPLATE_CONFLICT=2
+eclipse.preferences.version=1
/live/.settings/org.eclipse.wst.xsl.core.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.wst.jsdt.ui.prefs
===================================================================
--- live/.settings/org.eclipse.wst.jsdt.ui.prefs (nonexistent)
+++ live/.settings/org.eclipse.wst.jsdt.ui.prefs (revision 509)
@@ -0,0 +1,52 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.wst.jsdt.ui.postsavelistener.cleanup=true
+formatter_profile=_PointedEars
+formatter_settings_version=11
+org.eclipse.wst.jsdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.format_source_code=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
/live/.settings/org.eclipse.wst.jsdt.ui.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.wst.jsdt.ui.superType.name
===================================================================
--- live/.settings/org.eclipse.wst.jsdt.ui.superType.name (nonexistent)
+++ live/.settings/org.eclipse.wst.jsdt.ui.superType.name (revision 509)
@@ -0,0 +1 @@
+Window
\ No newline at end of file
Index: live/.settings/org.eclipse.wst.sse.core.prefs
===================================================================
--- live/.settings/org.eclipse.wst.sse.core.prefs (nonexistent)
+++ live/.settings/org.eclipse.wst.sse.core.prefs (revision 509)
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+task-tags/taskPriorities=1,2,1,0
+task-tags/taskTags=TODO,FIXME,XXX,DEBUG
+task-tags/use-project-settings=true
/live/.settings/org.eclipse.wst.sse.core.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.php.core.prefs
===================================================================
--- live/.settings/org.eclipse.php.core.prefs (nonexistent)
+++ live/.settings/org.eclipse.php.core.prefs (revision 509)
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.php.core.phpForamtterArrayInitSize=1
+org.eclipse.php.core.phpForamtterIndentationSize=2
+org.eclipse.php.core.phpForamtterIndentationWrappedLineSize=1
+org.eclipse.php.core.phpForamtterTabSize=2
+org.eclipse.php.core.phpForamtterUseTabs=false
+org.eclipse.php.core.taskCaseSensitive=enabled
+org.eclipse.php.core.taskPriorities=NORMAL,HIGH,NORMAL,NORMAL,LOW
+org.eclipse.php.core.taskTags=TODO,FIXME,XXX,@todo,DEBUG
+phpVersion=php5.3
+useShortTags=false
/live/.settings/org.eclipse.php.core.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.wst.jsdt.ui.superType.container
===================================================================
--- live/.settings/org.eclipse.wst.jsdt.ui.superType.container (nonexistent)
+++ live/.settings/org.eclipse.wst.jsdt.ui.superType.container (revision 509)
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary/StandardBrowser/html5
\ No newline at end of file
Index: live/.settings/org.eclipse.ltk.core.refactoring.prefs
===================================================================
--- live/.settings/org.eclipse.ltk.core.refactoring.prefs (nonexistent)
+++ live/.settings/org.eclipse.ltk.core.refactoring.prefs (revision 509)
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
/live/.settings/org.eclipse.ltk.core.refactoring.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/org.eclipse.php.ui.prefs
===================================================================
--- live/.settings/org.eclipse.php.ui.prefs (nonexistent)
+++ live/.settings/org.eclipse.php.ui.prefs (revision 509)
@@ -0,0 +1,5 @@
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=false
+cleanup.remove_trailing_whitespaces_ignore_empty=true
+eclipse.preferences.version=1
+org.eclipse.php.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
/live/.settings/org.eclipse.php.ui.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.settings/.jsdtscope
===================================================================
--- live/.settings/.jsdtscope (nonexistent)
+++ live/.settings/.jsdtscope (revision 509)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary/StandardBrowser/html5"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**/_*.js/**/*.js|**/tmp/**" kind="src" path=""/>
+ <classpathentry kind="output" path=""/>
+</classpath>
Index: live/.settings/org.eclipse.wst.validation.prefs
===================================================================
--- live/.settings/org.eclipse.wst.validation.prefs (nonexistent)
+++ live/.settings/org.eclipse.wst.validation.prefs (revision 509)
@@ -0,0 +1,8 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorList
+USER_MANUAL_PREFERENCE=enabledManualValidatorList
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.402.v201301291945
+eclipse.preferences.version=1
+override=true
+suspend=false
+vf.version=3
/live/.settings/org.eclipse.wst.validation.prefs
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/builder.php
===================================================================
--- live/builder.php (nonexistent)
+++ live/builder.php (revision 509)
@@ -0,0 +1,593 @@
+<?php
+/**
+ * Builds a resource from several other ones.
+ *
+ * @version $Id$
+ * @author
+ * Copyright © 2011 Thomas 'PointedEars' Lahn &lt;php@PointedEars.de&gt;
+ *
+ * Part of PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!function_exists('lcfirst'))
+{
+ function lcfirst ($name)
+ {
+ return strtolower(substr($name, 0, 1)) . substr($name, 1);
+ }
+}
+
+/**
+ * Builds a resource from several other ones.
+ *
+ * Information is passed via <code>$_GET</code>. Supports PHP-generated
+ * resources; references to globals in resource SHOULD be avoided, but
+ * MUST be declared if used.
+ *
+ * @author
+ * Copyright © 2011 Thomas 'PointedEars' Lahn &lt;php@PointedEars.de&gt;
+ * @license http://www.gnu.org/licenses/gpl.html
+ * GNU General Public License, version 3 and later
+ * @property-read string $version
+ * Class version
+ * @property string $prefix
+ * Common path prefix for all resources
+ * @property array $sources
+ * Sources to be processed in order
+ * @property string $contentType
+ * Content-type to be used
+ * @property-read array $typeMap
+ * Maps MIME media types to file extensions
+ * @property boolean $debug
+ * If <code>true</code>, preserve original file content
+ * @property boolean $verbose
+ * If <code>true</code>, produce verbose messages
+ * @property-read int $commentCount
+ * Number of comments processed so far
+ */
+class ResourceBuilder
+{
+ const SCRIPT_CONTENT_TYPE = 'text/javascript';
+
+ /**
+ * Class version
+ * @var string
+ */
+ protected $_version = '0.4.5';
+
+ /**
+ * Common path prefix for all resources
+ * @var string
+ */
+ protected $_prefix = '';
+
+ /**
+ * Common path suffix for all resources.
+ * Determined from <var>$_contentType</var> if <code>null</code>.
+ * @var string
+ */
+ protected $_suffix = null;
+
+ /**
+ * Sources to be processed in order
+ * @var array
+ */
+ protected $_sources = array();
+
+ /**
+ * Content-type to be used
+ * @var string
+ */
+ protected $_contentType = self::SCRIPT_CONTENT_TYPE;
+
+ /**
+ * @property-read array $typeMap
+ * Maps MIME media types to file extensions
+ */
+ protected $_typeMap = array(
+ 'text/javascript' => 'js',
+ 'text/css' => 'css',
+ );
+
+ /**
+ * If <code>true</code>, preserve original file content
+ * @var boolean
+ */
+ protected $_debug = false;
+
+ /**
+ * If <code>true</code>, produce verbose messages
+ * @var boolean
+ */
+ protected $_verbose = false;
+
+ /**
+ * If <code>true</code> or <code>false</code>, forces or forbids
+ * the use of gzip. The default is <code>false</code> which
+ * gzips only if gzip=1 is specified and the client supports it.
+ *
+ * @var boolean
+ */
+ protected $_force_gzip = false;
+
+ /**
+ * Number of comments processed so far
+ * @var int
+ */
+ protected $_commentCount = 0;
+
+ protected $_jsxDeps = array(
+ 'collection' => array('object'),
+ 'dom' => array('object'),
+ 'dom/css' => array('dom'),
+ 'dom/css/color' => array('dom/css'),
+ 'dom/events' => array('dom'),
+ 'dom/xpath' => array('object'),
+ 'http' => array('object'),
+ 'test/debug' => array('object', 'types', 'array'),
+ 'types' => array('object'),
+ );
+
+ /**
+ * If <code>true</code>, resolve JSX dependencies statically
+ * (EXPERIMENTAL)
+ * @var boolean
+ */
+ protected $_resolve = false;
+
+ public function __construct ()
+ {
+ if (isset($_GET['src']))
+ {
+ $params = array(
+ 'prefix',
+ 'suffix',
+ 'sources' => 'src',
+ 'contentType' => 'type',
+ 'debug',
+ 'verbose',
+ 'force_gzip' => 'gzip',
+ 'resolve'
+ );
+
+ foreach ($params as $property => $param)
+ {
+ if (isset($_GET[$param]))
+ {
+ $value = $_GET[$param];
+
+ if (is_int($property))
+ {
+ $property = $param;
+ }
+
+ $this->$property = $value;
+ }
+ }
+
+ $this->commentCount = 0;
+ }
+ }
+
+ /**
+ * Universal getter
+ *
+ * @param string $name Property name
+ * @return mixed Property value
+ * @throws DomainException if no specific getter or such a property exists
+ */
+ public function __get ($name)
+ {
+ $getter = 'get' . ucfirst($name);
+ $property = '_' . lcfirst($name);
+
+ if (method_exists($this, $getter))
+ {
+ return $this->$getter();
+ }
+
+ if (property_exists($this, $property))
+ {
+ return $this->$property;
+ }
+
+ $exceptionClass = 'DomainException';
+ $message = "No method '$getter' or property '$property' on this object";
+
+ if (function_exists($exceptionClass))
+ {
+ throw new $exceptionClass($message);
+ }
+
+ throw new Exception($message);
+ }
+
+ /**
+ * Universal setter
+ *
+ * @param string $name
+ * @param mixed $value
+ * @throws DomainException if no specific setter or such a property exists
+ */
+ public function __set ($name, $value)
+ {
+ $setter = 'set' . ucfirst($name);
+ $property = '_' . lcfirst($name);
+
+ if (method_exists($this, $setter))
+ {
+ return $this->$setter($value);
+ }
+
+ if (property_exists($this, $property))
+ {
+ $this->$property = $value;
+ }
+ else
+ {
+ $exceptionClass = 'DomainException';
+ $message = "No method '$setter' or property '$property' on this object";
+
+ if (function_exists($exceptionClass))
+ {
+ throw new $exceptionClass($message);
+ }
+
+ throw new Exception($message);
+ }
+ }
+
+ /**
+ * Sets the _sources property
+ *
+ * @param string|array $value Sources to process
+ */
+ protected function setSources ($value)
+ {
+ if (!is_array($value))
+ {
+ $value = explode(',', $value);
+ }
+
+ $this->_sources = $value;
+ }
+
+ /**
+ * Sets the _contentType property
+ *
+ * @param string $value
+ */
+ protected function setContentType ($value)
+ {
+ $this->_contentType = ($value ? $value : 'text/javascript');
+ }
+
+ /**
+ * Sets the _debug property
+ *
+ * @param string $value
+ */
+ protected function setDebug ($value)
+ {
+ if ($value != 0)
+ {
+ $this->_debug = true;
+ }
+ }
+
+ /**
+ * Sets the _verbose property
+ *
+ * @param string $value
+ */
+ protected function setVerbose ($value)
+ {
+ if ($value != 0)
+ {
+ $this->_verbose = true;
+ }
+ }
+
+ /**
+ * Sets the <code>_force_gzip</code> property
+ *
+ * @param mixed $value
+ */
+ protected function setForce_gzip($value)
+ {
+ $this->_force_gzip = ($value !== null) ? !!$value : $value;
+ }
+
+ /**
+ * Sets the <code>_resolve</code> property
+ *
+ * @param mixed $value
+ */
+ protected function setResolve ($value)
+ {
+ if ($value != 0)
+ {
+ $this->_resolve = true;
+ }
+ }
+
+ /**
+ * @param array $match
+ * Comment to work on
+ * @return string
+ * Original comment or the empty string
+ */
+ protected function commentReplacer ($match)
+ {
+ ++$this->_commentCount;
+
+ if ($this->_commentCount > 1)
+ {
+ return '';
+ }
+
+ return $match[0];
+ }
+
+ /**
+ * Returns the passed string with all single-line
+ * comments, leading and trailing whitespace removed
+ *
+ * @param string $s Source code to process
+ * @return string Processed source code
+ * @todo Do not strip from within literals
+ */
+ protected function uncomment ($s)
+ {
+ return preg_replace('#^[\\t ]*//.*(?:\\r?\\n|\\r)*#m', '',
+ preg_replace('/^\\s+|\\s+$/', '',
+// preg_replace(
+// '#/[\\t ]*\\*.*?\\*/[\\t ]*(?:\\r?\\n|\\n)*#s', '',
+ $s
+// )
+ )
+ );
+ }
+
+ /**
+ * Returns the passed string with all JSdoc comments but the first one removed
+ *
+ * @param string $s Source code to process
+ * @return string Processed source code
+ * @todo Do not strip from within literals
+ */
+ protected function stripJSdoc ($s)
+ {
+ $s = preg_replace_callback(
+ '#[\\t ]*/\\*\\*(?:[^*]|\\*[^/])*\\*/(?:\\r?\\n|\\r)?#',
+ array('self', 'commentReplacer'),
+ $s);
+
+ return $s;
+ }
+
+ /**
+ * Resolves JSX dependencies from static information
+ * @todo Use dynamic inline information
+ *
+ * @param array $sources
+ * List of required resources
+ * @param array $new_sources [optional $name => $name]
+ * Associative array used internally to build the list
+ * of sources with their dependencies
+ * @return array
+ * List of sources with their dependencies resolved
+ */
+ protected function resolveDeps (array $sources, array &$new_sources = array())
+ {
+ $deps = $this->jsxDeps;
+
+ foreach ($sources as $name)
+ {
+ if (!array_key_exists($name, $new_sources)
+ && array_key_exists($name, $deps))
+ {
+ $this->resolveDeps($deps[$name], $new_sources);
+ }
+
+ $new_sources[$name] = $name;
+ }
+
+ return $new_sources;
+ }
+
+ public function output ()
+ {
+ $contentType = $this->contentType;
+
+ header('Content-Type: ' . $contentType);
+
+ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+
+ /* Cached resource expires in HTTP/1.1 caches 24h after last retrieval */
+ header('Cache-Control: max-age=86400, s-maxage=86400, must-revalidate, proxy-revalidate');
+
+ /* Cached resource expires in HTTP/1.0 caches 24h after last retrieval */
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
+
+ $use_gzip = false;
+ if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])
+ && preg_match('/\b((?:x-)?gzip)\s*,?/', $_SERVER['HTTP_ACCEPT_ENCODING'], $matches)
+ && function_exists('gzencode'))
+ {
+ $force_gzip = $this->force_gzip;
+ $use_gzip = ($force_gzip !== false);
+ if ($use_gzip)
+ {
+ header("Content-Encoding: {$matches[1]}");
+ header('Vary: Accept-Encoding');
+ }
+ }
+
+ $prefix = $this->prefix;
+
+ if ($contentType === self::SCRIPT_CONTENT_TYPE
+ && $this->resolve)
+ {
+ $this->sources = $this->resolveDeps($this->sources);
+ }
+
+ $suffix = $this->suffix;
+ $out = "/*\n"
+ . " * Compacted with PointedEars' ResourceBuilder {$this->version}\n"
+ . ($this->verbose
+ ? " * Type: {$contentType}\n"
+ . " * Common Prefix: " . ($prefix ? $prefix : '<none>') . "\n"
+ . " * Common Suffix: " . $suffix . "\n"
+ . " * Resources: " . implode(', ', $this->sources) . "\n"
+ : '')
+ . " *\n"
+ . " * Please see the original files for the complete source code.\n"
+ . " */\n\n";
+
+ if (!$use_gzip)
+ {
+ echo $out;
+ }
+
+ $verbose = $this->verbose;
+
+ /* Compute sizes only when needed */
+ if ($verbose)
+ {
+ $totalSize = 0;
+ $totalCompactedSize = 0;
+ }
+
+ foreach ($this->sources as $index => $source)
+ {
+ $this->commentCount = 0;
+
+ if ($index > 0)
+ {
+ if ($use_gzip)
+ {
+ $out .= "\n\n";
+ }
+ else
+ {
+ echo "\n\n";
+ }
+ }
+
+ $file = $prefix . $source
+ . ($suffix !== null
+ ? $suffix
+ : (array_key_exists($contentType, $this->typeMap)
+ ? '.' . $this->typeMap[$contentType]
+ : ''));
+
+ /* Minimum negotiation for dynamic content */
+ if (!file_exists($file) && file_exists($file . '.php'))
+ {
+ $file .= '.php';
+ }
+
+ /*
+ * NOTE: No file_get_contents(), so that PHP in resource gets parsed.
+ * See globals caveat in class's PHPdoc.
+ */
+ ob_start();
+ require_once $file;
+
+ if ($verbose)
+ {
+ $originalSize = ob_get_length();
+ }
+
+ $content = ob_get_contents();
+ ob_end_clean();
+
+ if ($verbose)
+ {
+ $totalSize += $originalSize;
+ $originalSizeFormatted = number_format($originalSize, 0, '.', "'");
+ }
+
+ if (!$this->debug)
+ {
+ $content = $this->uncomment($content);
+ $content = $this->stripJSdoc($content);
+ }
+
+ if ($verbose)
+ {
+ $compactedSize = strlen($content);
+ $totalCompactedSize += $compactedSize;
+ $compactedSizeFormatted = number_format($compactedSize, 0, '.', "'");
+ $ratioPercentage = $compactedSize / $originalSize * 100;
+ $ratioFormatted = sprintf('%.1f %%', $ratioPercentage);
+ }
+
+ $content =
+ implode("\n", array(
+ '/*',
+ " * {$file}"
+ . ($verbose
+ ? ": {$originalSizeFormatted} bytes reduced to {$compactedSizeFormatted} bytes"
+ . " ({$ratioFormatted})"
+ : ""),
+ " */\n"
+ ))
+ . $content;
+
+ if ($use_gzip)
+ {
+ $out .= $content;
+ }
+ else
+ {
+ echo $content;
+ }
+ }
+
+ if ($verbose)
+ {
+ $totalSizeFormatted = number_format($totalSize, 0, '.', "'");
+ $totalCompactedSizeFormatted = number_format($totalCompactedSize, 0, '.', "'");
+ $ratioPercentage = $totalCompactedSize / $totalSize * 100;
+ $ratioFormatted = sprintf('%.1f %%', $ratioPercentage);
+
+ $summary = "\n\n/*"
+ . " Total of {$totalSizeFormatted} bytes reduced to {$totalCompactedSizeFormatted} bytes"
+ . " ({$ratioFormatted}). */";
+
+ if ($use_gzip)
+ {
+ $out .= $summary;
+ }
+ else
+ {
+ echo $summary;
+ }
+ }
+
+ if ($use_gzip)
+ {
+ $zipped = gzencode($out);
+ //header('Content-Length: ' . strlen($zipped));
+ echo $zipped;
+ }
+ }
+}
+
+$builder = new ResourceBuilder();
+$builder->output();
/live/builder.php
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: live/math.js
===================================================================
--- live/math.js (nonexistent)
+++ live/math.js (revision 509)
@@ -0,0 +1,150 @@
+/**
+ * @fileOverview <title>PointedEars' JSX: Basic Math Library</title>
+ * @file $Id$
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author
+ * (C) 2000-2011, 2013 Thomas Lahn &lt;math.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+/*
+ * This document contains JavaScriptDoc[tm], see
+ * <http://pointedears.de/scripts/JSDoc/>
+ * for details.
+ *
+ * Refer math.htm file for general documentation.
+ */
+
+if (typeof jsx == "undefined")
+{
+ /**
+ * @namespace
+ */
+ var jsx = {};
+}
+
+/**
+ * @namespace
+ */
+jsx.math = {
+ version: "1.16.$Rev$",
+ copyright: "Copyright \xA9 1999-2011, 2013",
+ author: "Thomas Lahn",
+ email: "math.js@PointedEars.de",
+ path: "http://pointedears.de/scripts/"
+};
+// jsx.math.docURL = jsx.math.path + "math.htm";
+
+/* User interface language */
+jsx.math.language = "en";
+
+/** @section Exceptions */
+
+jsx.math.msgInvArg = {
+ 'en': 'Invalid function argument',
+ 'de': 'Ungültiges Funktionsargument'
+};
+
+jsx.math.msgArgMissing = {
+ 'en': 'Required argument missing',
+ 'de': 'Erforderliches Argument fehlt'
+};
+
+jsx.math.msgInvOp = {
+ 'en': 'Invalid operand',
+ 'de': 'Ungültiger Operand'
+};
+
+jsx.math.msgOverflow = {
+ 'en': 'Overflow',
+ 'de': 'Überlauf'
+};
+
+jsx.math.msgUnderflow = {
+ 'en': 'Underflow',
+ 'de': 'Unterlauf'
+};
+
+jsx.math.msgDivByZero = {
+ 'en': 'Division by zero',
+ 'de': 'Division durch Null'
+};
+
+/**
+ * @param sError
+ * @param sMessage
+ */
+jsx.math.MathError = function(sError, sMessage) {
+ this.constructor._super.call(this,
+ "math.js Error: "
+ + (typeof sError[jsx.math.language] != "undefined"
+ ? sError[jsx.math.language]
+ : sError["en"])
+ + " " + (sMessage || ""));
+};
+jsx.math.MathError.extend(jsx.Error);
+
+/**
+ * @param sMethodCall
+ * @param iErrorCode
+ * @todo
+ */
+jsx.math.InvalidArgumentError = function(sMethodCall, iErrorCode) {
+ var sSubErrType = jsx.math.msgInvArg;
+
+ switch (iErrorCode)
+ {
+ case -1:
+ sSubErrType = jsx.math.msgArgMissing;
+ break;
+ }
+
+ jsx.math.MathError.call(this, sSubErrType);
+};
+
+jsx.math.InvalidOperandError = function() {
+ jsx.math.MathError.call(this, jsx.math.msgInvOp);
+};
+
+jsx.math.OverflowError = function() {
+ jsx.math.MathError.call(jsx.math.msgOverflow);
+};
+
+jsx.math.UnderflowError = function() {
+ jsx.math.MathError.call(jsx.math.msgUnderflow);
+};
+
+jsx.math.DivisionByZeroError = function() {
+ jsx.math.MathError.call(jsx.math.msgDivByZero);
+};
+
+
+/*
+ * TODO:
+
+"I want the *option* to switch from standard 32-bit doubles to double
+precision long doubles since it is not always necessary to run at such
+high precision [sometimes I'll trade performance for precision.]
+
+I would like *native* precision handlers (anything scripted
+is considerably slower).
+
+I would like a native fixed point and integer math package."
+
+ */
/live/math.js
Property changes:
Added: svn:keywords
## -0,0 +1 ##
+LastChangedDate LastChangedRevision Id
\ No newline at end of property
Index: live/types.js
===================================================================
--- live/types.js (nonexistent)
+++ live/types.js (revision 509)
@@ -0,0 +1,289 @@
+/**
+ * <title>Type Function Library</title>
+ *
+ * @file types.js
+ * @requires object.js
+ * @author
+ * (C) 2001-2009, 2013 Thomas Lahn &lt;types.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (typeof jsx == "undefined")
+{
+ var jsx = {
+ options: {
+ emulate: true
+ }
+ };
+}
+
+jsx.types = {
+ version: "1.29.8.2009070702",
+ copyright: "Copyright \xA9 1999-2009",
+ author: "Thomas Lahn",
+ email: "types.js@PointedEars.de",
+ path: "http://pointedears.de/scripts/"
+};
+
+jsx.types.URI = jsx.types.path + "types.js";
+// var typesDocURL = typesPath + "types.htm"
+
+/* allows for de.pointedears.jsx.types */
+if (typeof de == "undefined")
+{
+ var de = {};
+}
+
+if (typeof de.pointedears == "undefined")
+{
+ de.pointedears = {};
+}
+
+if (typeof de.pointedears.jsx == "undefined")
+{
+ de.pointedears.jsx = jsx;
+}
+
+/**
+ * @param {string} sMsg (optional)
+ * @return {boolean} false
+ */
+var TypesException = jsx.types.TypesException = function (sMsg) {
+ window.alert(
+ "types.js "
+ + types.version
+ + "\n"
+ + types.copyright
+ + " "
+ + types.author
+ + " <"
+ + types.email
+ + ">\n\n"
+ + sMsg);
+ return false;
+};
+
+/**
+ * Returns <code>true</code> if a property is defined and its value
+ * is different from <code>undefined</code>, <code>false</code> otherwise.
+ *
+ * @param {Object} o (optional)
+ * Base object; the default is the calling object.
+ * @param {String} p
+ * Property name; required.
+ * @return {boolean}
+ */
+var isDefined = jsx.types.isDefined = function (o, p) {
+ if (!p)
+ {
+ p = o;
+ o = this;
+ }
+
+ return (typeof o[p] != "undefined");
+};
+
+/**
+ * Returns <code>true</code> if a property is undefined or
+ * its value is `undefined', <code>false</code> otherwise.
+ *
+ * @param {Object} o (optional)
+ * Base object; the default is the calling object.
+ * @param {String} p
+ * Property name; required.
+ * @return {boolean}
+ */
+var isUndefined = jsx.types.isUndefined = function (o, p) {
+ if (!p)
+ {
+ p = o;
+ o = this;
+ }
+
+ return (typeof o[p] == "undefined");
+};
+
+/* Moved to object.js */
+jsx.types.isInstanceOf = jsx.object.isInstanceOf;
+
+/**
+ * Determines whether an object is an array
+ *
+ * @author
+ * (C) 2003, 2009, 2011 Thomas Lahn &lt;object.js@PointedEars.de&gt;
+ * @partof http://pointedears.de/scripts/object.js
+ * @requires jsx.object#isInstanceOf
+ * @param {Object} a
+ * Expression to be determined an array.
+ * @return {boolean}
+ * <code>true</code> if <code>a</code> is an object
+ * derived from Array, <code>false</code> otherwise.
+ * Returns also <code>false</code> if the language
+ * version does not support Array objects (JavaScript
+ * before 1.1).
+ * @todo
+ */
+var isArray = jsx.types.isArray = function (a) {
+ return jsx.object.isInstanceOf(a, typeof Array != "undefined" ? Array : null);
+};
+
+/**
+ * @author
+ * (C) 2003 Thomas Lahn &lt;types.js@PointedEars.de&gt;
+ * @param {Object} o
+ * to be determined iterable, i.e. to be determined
+ * whether it provides the <code>length</code> property and
+ * has at least the <code>0</code> (zero) property. This
+ * applies for non-empty <code>Array</code> objects with
+ * at least a first non-undefined element as well as, e.g.,
+ * for DOM objects implementing one of the
+ * <code>HTMLCollection</code> or
+ * <code>HTMLOptionsCollection</code> interfaces defined in
+ * the W3C DOM Level 2 Specification.
+ * @return {boolean}
+ * <code>true</code> if <code>o</code> is an iterable object,
+ * <code>false</code> otherwise.
+ */
+var isIterable = jsx.types.isIterable = function (o) {
+ return !!(
+ o
+ && typeof o.length != "undefined"
+ && typeof o[0] != "undefined");
+};
+
+/**
+ * Converts a string using bracket property accessor syntax
+ * to one that uses dot property accessor syntax.
+ *
+ * @param {string} s
+ * String of the form "root['branch']['leaf']['...']..." or
+ * "root[branch][leaf][...]..." to be converted. Required.
+ * @return {string}
+ * A string of the form `root.branch.leaf...' converted from
+ * <var>s</var>.
+ */
+var bracketsToDots = jsx.bracketsToDots = function (s) {
+ /* FIXME: What about non-identifier names? */
+ return s.replace(/\[['"]?/g, '.').replace(/['"]?\]/g, '');
+};
+
+/**
+ * Converts a string using dot property accessor syntax
+ * to one that uses bracket property accessor syntax.
+ *
+ * @param {string} s
+ * of the form `root.branch.leaf' to be converted.
+ * Required.
+ * @param {boolean} bStringsOnly = false
+ * Specifies if all parts of the tree should be converted
+ * or not. Optional.
+ * If not provided or <code>false</code>, all parts are
+ * converted. If <code>true</code>, only parts are converted
+ * that are required to (because JavaScript identifiers as
+ * required by dot notation must start with a character in
+ * <code>[A-Za-z_$]</code>, while parameters of bracket
+ * notation may be in any format.)
+ * @return {string}
+ * A string of the form "root['branch']['leaf']" converted
+ * from <var>s</var>.
+ */
+var dotsToBrackets = jsx.dotsToBrackets = function (s, bStringsOnly) {
+ var a = s.split(".");
+
+ s = [a[0]];
+
+ for (var i = 1, len = a.length; i < len; i++)
+ {
+ var propName = a[i];
+
+ if (bStringsOnly && /^[a-z_$]/i.test(propName))
+ {
+ s.push(".", propName);
+ }
+ else
+ {
+ s.push("['", propName.replace(/'/g, "\\$&"), "']");
+ }
+ }
+
+ return s.join("");
+};
+
+/*
+ * 1.29.7.2008052911: isMethod() moved to object.js for _hasOwnProperty();
+ * dependencies should ensure backwards-compatibility
+ */
+
+/**
+ * Determines whether a feature is available.
+ *
+ * @author
+ * (C) 2008 Thomas Lahn &lt;types.js@PointedEars.de&gt;
+ * @param {Object} o
+ * Base object
+ * @params {string}
+ * Name(s) of the property/properties that are required for
+ * the feature. For example, passing "foo" and "bar"
+ * determines whether o["foo"]["bar"] is an available feature.
+ * @return {boolean}
+ * The feature's value if the arguments refer to a feature,
+ * <code>false</code> otherwise. Note that if a feature
+ * has <code>boolean</code> documented as its type, you
+ * should therefore not use this method to determine its
+ * availability.
+ *
+ * Also, if a reference leading to the feature resolves to
+ * a value for that the result of the <code>typeof</code>
+ * operation is <code>"unknown"</code>, testing of further
+ * arguments will stop and <code>true</code> will be returned
+ * because <code>"unknown"</code> indicates a host object's
+ * method in MSHTML and access to the property value causes
+ * a runtime exception; therefore, in this case you can use
+ * the return value of this method only as an indicator that
+ * there is such a method.
+ */
+var isFeature = jsx.types.isFeature = function (o) {
+ if (typeof o != "undefined" && o)
+ {
+ var
+ rxUnknown = /^\s*unknown\s*$/i,
+ rxUndefined = /^\s*undefined\s*$/i;
+
+ for (var i = 1, len = arguments.length; i < len; i++)
+ {
+ var arg = arguments[i];
+
+ var t = typeof o[arg], isUnknown;
+ if ((isUnknown = rxUnknown.test(t))
+ || !rxUndefined.test(t) && o[arg])
+ {
+ o = o[arg];
+ if (isUnknown)
+ {
+ break;
+ }
+ }
+ else
+ {
+ o = null;
+ break;
+ }
+ }
+ }
+
+ return o;
+};
\ No newline at end of file
Index: live/anti-SOPA.js
===================================================================
--- live/anti-SOPA.js (nonexistent)
+++ live/anti-SOPA.js (revision 509)
@@ -0,0 +1,294 @@
+function _createElement(data)
+{
+ if (typeof data == "string")
+ {
+ return document.createTextNode(data);
+ }
+
+ var el = document.createElement(data.type);
+ if (!el)
+ {
+ return null;
+ }
+
+ var properties = data.properties;
+ if (properties)
+ {
+ for (var prop in properties)
+ {
+ if (!properties.hasOwnProperty(prop))
+ {
+ continue;
+ }
+
+ if (prop == "style")
+ {
+ var style = properties[prop];
+ for (var styleProp in style)
+ {
+ if (!style.hasOwnProperty(styleProp))
+ {
+ continue;
+ }
+
+ var targetProp = styleProp;
+ if (targetProp === "float")
+ {
+ if (typeof style.cssFloat != "undefined")
+ {
+ var targetProp = "cssFloat";
+ }
+ else if (typeof style.styleFloat != "undefined")
+ {
+ targetProp = "styleFloat";
+ }
+
+ }
+
+ el.style[targetProp] = style[styleProp];
+ }
+ }
+ else
+ {
+ el[prop] = properties[prop];
+ }
+ }
+ }
+
+ var nodes = data.childNodes;
+ for (var i = 0, len = nodes && nodes.length; i < len; ++i)
+ {
+ el.appendChild(arguments.callee(nodes[i]));
+ }
+
+ return el;
+}
+
+function antiSOPA (contentName)
+{
+ //jsx.tryThis(function () {
+ var div = _createElement({
+ type: "div",
+ properties: {
+ id: "antiSOPA",
+ style: {
+ position: "fixed",
+ maxWidth: "none",
+ zIndex: "999",
+ left: "0",
+ top: "0",
+ right: "0",
+ bottom: "0",
+ backgroundColor: "black",
+ }
+ },
+ childNodes: [
+ {
+ type: "div",
+ properties: {
+ className: "antiSOPA"
+ },
+ childNodes: [
+ {
+ type: "blockquote",
+ childNodes: [
+ {
+ type: "p",
+ properties: {
+ style: {
+ fontStyle: "italic",
+ marginBottom: "0"
+ }
+ },
+ childNodes: [
+ "“With the first link, the chain is forged."
+ + " The first speech censured, the first thought forbidden,"
+ + " the first freedom denied, chains us all irrevocably.”"
+ ]
+ },
+ {
+ type: "div",
+ properties: {
+ style: {
+ textAlign: "right"
+ }
+ },
+ childNodes: [
+ " – “Captain\xA0Picard”, quoting “Judge\xA0Aaron\xA0Satie”,",
+ {
+ type: "br"
+ },
+ "in “",
+ {
+ type: "a",
+ properties: {
+ href: "http://en.memory-alpha.org/wiki/Star_Trek:_The_Next_Generation"
+ },
+ childNodes: [
+ "Star\xA0Trek: The\xA0Next\xA0Generation",
+ ]
+ },
+ "”, “",
+ {
+ type: "a",
+ properties: {
+ href: "http://en.memory-alpha.org/wiki/The_Drumhead_(episode)"
+ },
+ childNodes: [
+ "The\xA0Drumhead"
+ ]
+ },
+ "”"
+ ]
+ }
+ ]
+ },
+ {
+ type: "p",
+ childNodes: [
+ "Put simply, the United States of America are currently considering ",
+ {
+ type: "a",
+ properties: {
+ href: "http://en.wikipedia.org/wiki/Wikipedia:SOPA_initiative/Learn_more"
+ },
+ childNodes: [
+ "Acts\xA0of\xA0Congress"
+ ]
+ },
+ " that, if passed, would allow the Internet to be censored."
+ ]
+ },
+ {
+ type: "p",
+ childNodes: [
+ "Not only this would severely limit the ",
+ {
+ type: "a",
+ properties: {
+ href: "http://www.un.org/en/documents/udhr/"
+ },
+ childNodes: ["Human Right of the Freedom of Speech"]
+ },
+ " in the United States; it would also set a bad precedent for other countries."
+ + " For example, ",
+ {
+ type: "a",
+ properties: {
+ href: "http://www.regjeringen.no/pages/16468635/Horingsnotat_2011.pdf"
+ },
+ childNodes: [
+ "Norway is already considering to do the same (PDF, in Norwegian)"
+ ]
+ },
+ "."
+ ]
+ },
+ {
+ type: "blockquote",
+ childNodes: [
+ {
+ type: "p",
+ properties: {
+ style: {
+ fontStyle: "italic",
+ marginBottom: "0"
+ }
+ },
+ childNodes: [
+ "“Vigilance, Mister Worf, that is the price we have to continually pay.”"
+ ]
+ },
+ {
+ type: "div",
+ properties: {
+ style: {
+ textAlign: "right"
+ }
+ },
+ childNodes: [
+ " – “Captain\xA0Picard”, ibid.",
+ ]
+ }
+ ]
+ },
+ {
+ type: "p",
+ childNodes: [
+ "It is up to ",
+ {
+ type: "em",
+ childNodes: [
+ "you"
+ ]
+ },
+ " to not let this happen. An information society"
+ + " depends upon information being freely available to everyone."
+ ]
+ },
+ {
+ type: "ul",
+ childNodes: [
+ {
+ type: "li",
+ properties: {
+ className: "red pill"
+ },
+ childNodes: [
+ {
+ type: "a",
+ properties: {
+ href: "http://en.wikipedia.org/wiki/Wikipedia:SOPA_initiative/Learn_more"
+ },
+ childNodes: [
+ "Go to Wikipedia to learn more"
+ ]
+ }
+ ]
+ },
+ {
+ type: "li",
+ properties: {
+ className: "blue pill"
+ },
+ childNodes: [
+ {
+ type: "a",
+ properties: {
+ href: "#",
+ onclick: function () {
+ div.parentNode.removeChild(div);
+ document.body.style.overflow = "";
+ return false;
+ }
+ },
+ childNodes: [
+ "Hide this text ",
+ {
+ type: "em",
+ childNodes: [
+ "temporarily"
+ ]
+ },
+ ", and proceed to " + (contentName || "site")
+ ]
+ },
+ "."
+ ]
+ }
+ ]
+ },
+ {
+ type: "p",
+ childNodes: [
+ "This blackout will stay in place until 2012-01-19 (CE) 18:00 UTC."
+ ]
+ }
+ ]
+ }
+ ]
+ });
+
+ document.body.appendChild(div);
+ document.body.style.overflow = "hidden";
+}
/live/anti-SOPA.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.htaccess
===================================================================
--- live/.htaccess (nonexistent)
+++ live/.htaccess (revision 509)
@@ -0,0 +1,73 @@
+RedirectMatch permanent ^(/scripts)/((events|scope)\.html?.*) $1/test/$2
+RedirectMatch permanent ^/(JSDoc|jsdoc)(.*) /scripts/JSdoc$2
+RedirectMatch permanent ^(/scripts)/js-version-info(\.php)?(.*) $1/test/es-matrix/?redir$3
+RedirectMatch permanent ^(/scripts)/((dom|es)-matrix.*) $1/test/$2
+RedirectMatch permanent ^/scripts/websvn /websvn/listing.php?repname=JSX\&path=/trunk/
+
+Options +Indexes
+AddDescription "Automatic cache control and gzipping, by Mark Nottingham; see also <a href='http://www.mnot.net/cgi_buffer/'>http://www.mnot.net/cgi_buffer/</a>" cgi_buffer
+AddDescription "Old versions" _*
+AddDescription "ECMAScript Support Matrix" es-matrix
+AddDescription "LCARS Extensions: \"ACCESSING...\"" accessng.js
+AddDescription "When we saved the Internet" anti-SOPA.js
+AddDescription "JSX: Array library" array.js
+AddDescription "LCARS Extensions: PageBack" back.js
+AddDescription "back.js Documentation" back.txt
+AddDescription "PointedEars' Resource Builder (see <a href='websvn/'>websvn</a> for more)" builder.php
+AddDescription "JSX: Collection library" collection.js
+AddDescription "JSX: CSS colors library" color.js
+AddDescription "JSX: Compatibility layer" compat.js
+AddDescription "JavaScript cookie data access prototype (legacy code)" cookie.js
+AddDescription "cookie.js Documentation" cookie.txt
+AddDescription "JavaScript ClosePage Support" close.js
+AddDescription "JSX: DOM Events library" events.js
+AddDescription "Creates documentation markup from JSdoc&trade; comments within JavaScript&trade; source code" JSdoc
+AddDescription "JSdoc note template" jsdoc-note.js
+AddDescription "JavaScript routines and objects to create temporary documents" document.js
+AddDescription "JSX live documentation (experimental)" doc
+AddDescription "JSX: DOM base library (see <a href='dom'>dom</a> package for more)" dom.js
+AddDescription "JSX: DOM package" dom
+AddDescription "JavaScript Routines and Objects to Create Temporary Documents" document.js
+AddDescription "enhanced.js Documentation" enhanced.htm
+AddDescription "JSX: Level-1 Enhanced Website Features" enhanced.js
+AddDescription "enhancd2.js Documentation" enhancd2.htm
+AddDescription "JSX: Level-2 Enhanced Website Features (legacy code, depends on enhanced.js)" enhancd2.js
+AddDescription "JavaScript FAQs that I maintain(ed)" faq
+AddDescription "JSX: Forms library" forms.js
+AddDescription "JSX: Global Object support library" global.js
+AddDescription "JSX: HTTP library" http.js
+AddDescription "LCARS Extensions" LCARS.js
+AddDescription "JSX: Thread-unsafe map implementations" map.js
+AddDescription "JSX: Base math library, see <a href='math/'>math</a> package for more)" math.js
+AddDescription "JSX: Math package" math
+AddDescription "JSX: Base object library (old version)" object-old.js
+AddDescription "JSX: Base object library" object.js
+AddDescription "JSX: Object Package" object
+AddDescription "Support for outline-styled structure using Dynamic HTML statements (legacy code)" outline.js
+AddDescription "CommonJS Promises/A implementation (stub)" parallel.js
+AddDescription "PHPX: MVC-based application framework and libraries" php
+AddDescription "JSX: Pythonic functions for ECMAScript implementations" python.js
+AddDescription "JSX: Regular Expressions (RegExp) support library" regexp.js
+AddDescription "search.js Documentation" search.htm
+AddDescription "JSX: Search-string library" search.js
+AddDescription "Comparison of (s)printf conversion support across programming languages" sprintf.txt
+AddDescription "JSX: DOM Storage library" storage.js
+AddDescription "JSX: String library" string.js
+AddDescription "JSX: String Package" string
+AddDescription "Old global documentation stylesheet" style-old.css
+AddDescription "Global documentation stylesheet" style.css
+AddDescription "JSX: Time prototypes and functions" time.js
+AddDescription "time.js Documentation" time.txt
+AddDescription "JSX: Timeout library" timeout.js
+AddDescription "JSX: Test cases and development package" test
+AddDescription "JSX: Type methods library" types.js
+AddDescription "JSX: Unicode character properties support library for <a href='regexp.js'>regexp.js</a>" UnicodeData.js
+AddDescription "JSX: Plain-text version of the Unicode Character Database for <a href='regexp.js'>regexp.js</a>" UnicodeData.txt
+AddDescription "Subversion repository browser" websvn
+AddDescription "JSX: Widgets library" widgets.js
+AddDescription "JSX: Legacy widgets library" widgets2.js
+AddDescription "JSX: Window function library" window.js
+AddDescription "JSX: DOM XPath library" xpath.js
+AddDescription "JSX: DOM CSS library (see <a href='css/'>css</a> package for more)" css.js
+AddDescription "JSX: DOM CSS package" css
+
Index: live/doc/tree.html
===================================================================
--- live/doc/tree.html (nonexistent)
+++ live/doc/tree.html (revision 509)
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Object Hierarchy &#8212; JSX API Documentation</title>
+ <base target="main">
+ <link rel="stylesheet" href="../style.css" type="text/css">
+ <style type="text/css">
+ <!--
+ ul {
+ padding-left: 1em;
+ margin-top: 0;
+ list-style: none;
+ }
+
+ ul {
+ padding-left: 0;
+ }
+
+ li:before {
+ content: "\251C";
+ }
+
+ li li:before {
+ content: "\2502 \251C";
+ }
+
+ li:last-child li:before {
+ content: "\2000 \251C";
+ }
+
+ li:last-child li li:before {
+ content: "\2000 \2502 \251C";
+ }
+
+ li:last-child li:last-child li:before {
+ content: "\2000 \2000 \251C";
+ }
+
+ li li li:before {
+ content: "\2502 \2502 \251C";
+ }
+
+ li li li li:before {
+ content: "\2502 \2502 \2502 \251C";
+ }
+
+ li:last-child:before {
+ content: "\2514";
+ }
+
+ li li:last-child:before {
+ content: "\2502 \2514";
+ }
+
+ li:last-child li:last-child:before {
+ content: "\2000 \2514";
+ }
+
+ li li li:last-child:before {
+ content: "\2502 \2502 \2514";
+ }
+
+ li li li:last-child:before li {
+ content: "\2502 \2502 \2000 \2514";
+ }
+
+ li li li li:last-child:before {
+ content: "\2502 \2502 \2502 \2514";
+ }
+
+ li:last-child li li:last-child:before {
+ content: "\2000 \2502 \2514";
+ }
+
+ li li:last-child li:last-child:before {
+ content: "\2502 \2000 \2514";
+ }
+
+ li:last-child li:last-child li:last-child:before {
+ content: "\2000 \2000 \2514";
+ }
+
+ li:last-child li:last-child li:last-child li:last-child:before {
+ content: "\2000 \2000 \2000 \2514";
+ }
+
+ [title] {
+ cursor: help;
+ }
+ -->
+ </style>
+ <script type="text/javascript" src="../builder.php?src=object,regexp,dom"></script>
+ <script type="text/javascript">
+ var traverseHistory = []
+
+ function buildTree (root, path)
+ {
+ var ul = document.createElement("ul");
+ var ownProperties = Object.getOwnPropertyNames(root);
+ ownProperties.sort();
+ for (var i = 0, len = ownProperties.length; i < len; ++i)
+ {
+ var li = document.createElement("li");
+ var code = document.createElement("code");
+ var propertyName = ownProperties[i];
+ var propertyValue = root[propertyName];
+
+ switch (typeof propertyValue)
+ {
+ case "boolean":
+ li.appendChild(document.createTextNode("[B] "));
+ break;
+
+ case "function":
+ li.appendChild(document.createTextNode("[F] "));
+ break;
+
+ case "number":
+ li.appendChild(document.createTextNode("[N] "));
+ break;
+
+ case "object":
+ li.appendChild(document.createTextNode("[O] "));
+ break;
+
+ case "string":
+ li.appendChild(document.createTextNode("[S] "));
+ break;
+
+ default:
+ break;
+ }
+
+ code.appendChild(document.createTextNode(propertyName));
+ code.title = path + "." + propertyName;
+ var a = document.createElement("a");
+ a.href = "details.html?" + (code.title.match(/^jsx\.(.*)/) || [, ""])[1].replace(/\./g, "/");
+ a.appendChild(code);
+ li.appendChild(a);
+ if (((typeof propertyValue == "object" && propertyValue)
+ || (propertyName == "prototype"))
+ && propertyValue != jsx.global
+ && traverseHistory.indexOf(propertyValue) < 0)
+ {
+ traverseHistory.push(propertyValue);
+ li.appendChild(buildTree(propertyValue, code.title));
+ traverseHistory.pop();
+ }
+
+ ul.appendChild(li);
+ }
+
+ return ul;
+ }
+
+ function startTree ()
+ {
+ document.body.appendChild(jsx.dom.createElementFromObj({type: "code", childNodes: ["Function"]}));
+ document.body.appendChild(buildTree(Function, "Function"));
+ document.body.appendChild(jsx.dom.createElementFromObj({type: "code", childNodes: ["jsx"]}));
+ document.body.appendChild(buildTree(jsx, "jsx"));
+ }
+ </script>
+ </head>
+
+ <body onload="startTree()">
+ <h1>Object Hierarchy</h1>
+<!--
+ <ul>
+ <li><code>de</code>
+ <ul>
+ <li><code>pointedears</code>
+ <ul>
+ <li><code><a href="jsx/object#jsx">jsx</a></code></li>
+ </ul></li>
+ </ul></li>
+ <li><code><a href="jsx/object#jsx">jsx</a></code>
+ <ul>
+ <li><code>MSG_INFO</code></li>
+ <li><code>MSG_WARN</code></li>
+ <li><code>MSG_DEBUG</code></li>
+ <li><code>animation</code>
+ <ul>
+ <li><a href="jsx/animation/Animation"><code>Animation</code></a></li>
+ <li><code>Frame</code></li>
+ <li><code>KeyFrame</code></li>
+ <li><code>KeyValue</code></li>
+ <li><code>NoKeyFramesError</code></li>
+ <li><code>NoTimelineError</code></li>
+ <li><a href="jsx/animation/Timeline"><code>Timeline</code></a></li>
+ </ul></li>
+ <li><code>dom</code></li>
+ <li><code><a href="jsx/object#jsx.object">object</a></code>
+ <ul>
+ <li><code>ADD_OVERWRITE</code></li>
+ <li><code>COPY_ENUM</code></li>
+ </ul></li>
+ <li><code>options</code>
+ <ul>
+ <li><code>emulate</code></li>
+ </ul></li>
+ </ul></li>
+ </ul>
+ -->
+ </body>
+</html>
\ No newline at end of file
/live/doc/tree.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/details.html
===================================================================
--- live/doc/details.html (nonexistent)
+++ live/doc/details.html (revision 509)
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>JSX API Documentation</title>
+ <style type="text/css">
+ <!--
+ ol {
+ list-style-type: decimal;
+ }
+
+ ol ol {
+ list-style-type: lower-latin;
+ }
+
+ ol ol ol {
+ list-style-type: lower-roman;
+ }
+
+ ol ol ol ol {
+ list-style-type: decimal;
+ }
+ -->
+ </style>
+ <script type="text/javascript" src="../builder.php?src=object,dom,http,JSdoc/jsdoc-simple"></script>
+ <script type="text/javascript">
+ function getDoc ()
+ {
+ var xhr = new jsx.net.http.Request(
+ "../" + (String(window.location.search).match(/^\??(.*)/) || [, ""])[1] + ".js",
+ "GET",
+ true,
+ function (response) {
+ de.pointedears.jsdoc.generate(response.responseText);
+ },
+ function () {
+ var div = document.createElement("div");
+ div.appendChild(document.createTextNode("File " + xhr.URL + " could not be loaded."));
+ document.body.appendChild(div);
+ });
+ xhr.dontCache().send();
+ }
+ </script>
+ </head>
+
+ <body onload="getDoc()">
+ <h1 id="title">JSX API Documentation</h1>
+ </body>
+</html>
\ No newline at end of file
/live/doc/details.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/jsx/animation/Animation.html
===================================================================
--- live/doc/jsx/animation/Animation.html (nonexistent)
+++ live/doc/jsx/animation/Animation.html (revision 509)
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>jsx.animation.Animation &#8212; JSX API Documentation</title>
+ <link rel="stylesheet" href="../../../style.css" type="text/css">
+ <link rel="stylesheet" href="../../style.css" type="text/css">
+ </head>
+
+ <body>
+ <h1><code>jsx.animation.Animation</code></h1>
+ <ul>
+ <li><code>Object</code>
+ <ul>
+ <li><code>jsx.animation.Animation</code></li>
+ </ul></li>
+ </ul>
+
+ <p>An <code class="ident">Animation</code> is a set of one or more
+ <a href="Timeline"><code>Timelines</code></a> being played in parallel
+ when the animation is played. Each <code>Timeline</code> is supposed
+ to animate another target object (but that is not required).</p>
+
+ <h2>Prototype Properties</h2>
+ <dl>
+ <dt><code><var>target</var> <span class="punct">:</span>&nbsp;<span
+ class="ident">Object</span> <span class="punct">=</span>
+ <span class="rswd">null</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var>timelines</var> <span class="punct">:</span>&nbsp;<span
+ class="ident">Array</span> <span class="punct">= []</span></code></dt>
+ <dd></dd>
+ </dl>
+
+ <h2>Constructor</h2>
+ <p><code><span class="ident">jsx<span class="punct">.</span>animation<span
+ class="punct">.</span>Animation</span><span
+ class="punct">(</span><var>oParams</var>
+ <span class="punct">:</span>&nbsp;<span class="ident">Object</span><span
+ class="punct">)</span></code></p>
+ <h3>Arguments</h3>
+ <dl>
+ <dt><code><var>oParams</var> <span class="punct">:</span>&nbsp;<span class="ident">Object</span></code></dt>
+ <dd>The parameters of this animation. Supported parameters, to
+ be defined as properties of <code><var>oParams</var></code>,
+ include:
+ <dl>
+ <dt><code><var>target</var>
+ <span class="punct">:</span>&nbsp;<span
+ class="ident">Object</span></code></dt>
+ <dd>Reference specifiying the object to animate.
+ If specified, the timelines of this animation
+ automatically inherit its target; if not
+ specified for the animation, each timeline of an
+ animation MUST specify its target.</dd>
+ <dt><code><var>timelines</var>
+ :&nbsp;<span class="ident">Array</span></code></dt>
+ <dd><a href="Timeline"><code>Timelines</code></a>
+ of this animation (required)</dd>
+ </dl></dd>
+ </dl>
+ <h3>Throws</h3>
+ <dl>
+ <dt><code class="ident">jsx<span class="punct">.</span>InvalidArgumentError</code></dt>
+ <dd>if no parameters were specified</dd>
+ </dl>
+
+ <h2>Methods</h2>
+ <dl>
+ <dt><h3><code><span class="ident">play</span><span class="punct">()</span></code></h3></dt>
+ <dd><p>Plays the animation by playing all of its <a href="Timeline"><code>Timelines</code></a>.</p>
+ <h4>Throws</h4>
+ <dl>
+ <dt><code class="ident">jsx<span class="punct">.</span>animation<span
+ class="punct">.</span>NoTimelineError</code></dt>
+ <dd>if no <code>Timelines</code> have been defined</dd>
+ </dl></dd>
+ <dt><h3><code><span class="ident">stop</span><span class="punct">()</span></code></h3></dt>
+ <dd><p>Stops the animation by stopping all of its <a href="Timeline"><code>Timelines</code></a>.</p>
+ <h4>Throws</h4>
+ <dl>
+ <dt><code class="ident">jsx<span class="punct">.</span>animation<span
+ class="punct">.</span>NoTimelineError</code></dt>
+ <dd>if no <code>Timelines</code> have been defined</dd>
+ </dl></dd>
+ </dl>
+ </body>
+</html>
\ No newline at end of file
/live/doc/jsx/animation/Animation.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/jsx/animation/Timeline.html
===================================================================
--- live/doc/jsx/animation/Timeline.html (nonexistent)
+++ live/doc/jsx/animation/Timeline.html (revision 509)
@@ -0,0 +1,195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>jsx.animation.Timeline &#8212; JSX API Documentation</title>
+ <link rel="stylesheet" href="../../../style.css" type="text/css">
+ <link rel="stylesheet" href="../../style.css" type="text/css">
+ </head>
+
+ <body>
+ <h1><code>jsx.animation.Timeline</code></h1>
+ <ul>
+ <li><code>Object</code>
+ <ul>
+ <li><code>jsx.animation.Timeline</code></li>
+ </ul></li>
+ </ul>
+
+ <p>A <code class="ident">Timeline</code> consists of
+ <a href="KeyFrame"><code>KeyFrames</code></a> and can have subordered
+ timelines ("child timelines"). Unless specified otherwise, the time
+ offset of an item in one timeline depends on the previous item in
+ that timeline.</p>
+
+ <pre>
+Timeline: ---Action0------Action1------Action2-----Action3->
+</pre>
+ <p>A <code>Timeline</code> may be standalone or part an
+ <a href="Animation"><code>Animation</code></a>, specified by the
+ <code>Animation</code>'s <code>timelines</code> property,
+ which allows it to be played parallel to other timelines:</p>
+ <pre>
+Animation ---.
+Timeline 1: :--Action0------Action1------Action2-----Action3->
+Timeline 2: `----------Action0------Action1-------Action2---->
+</pre>
+<!-- <p>An item in a timeline can also be a <code>Timeline</code> itself
+ ("child timeline"), in which case the time offset of the child
+ timeline depends on the previous action in the parent timeline,
+ however the time offset of the next action in the parent is
+ independent of the child. In that case, the child timeline
+ affects the same target object as its parent unless specified
+ otherwise.</p>
+ <pre>
+Animation -\-\-.
+Timeline 1: :-\-\-Action0-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-Action1a-\-\-\-\-\-\-\-\-\-\-\-\->
+Timeline 1a: | `-\-\-Action1a:0-\-\-Action1a:1-\-\-\-\->
+Timeline 2: `-\-\-\-\-\-\-Action0-\-\-\-\-\-Action1-\-\-\-\-\-\-Action2-\-\-\-\-\-\->
+</pre>
+
+ <p>There is no explicit limit as to how deep timelines may be nested.
+ However, for playing the frames of the animation each timeline's
+ play() method must call the play() method of its child timelines.
+ As a result, nesting depth is limited implicitly by the available
+ stack space or limits imposed by the ECMAScript implementation,
+ whichever comes first. Further, the more timelines are nested,
+ the more operations need be performed at approximately the same time;
+ this can slow down the entire animation considerably and lead to
+ considerably higher CPU load.</p>
+ -->
+ <h2>Static Properties</h2>
+ <dl>
+ <dt><code><var>INDEFINITE</var>
+ <span class="punct">:</span>&nbsp;number <span class="punct">=</span>
+ Number.POSITIVE_INFINITY</code></dt>
+ <dd></dd>
+
+ <dt><code><var>MIN_FRAME_LENGTH</var>
+ <span class="punct">:</span>&nbsp;number <span class="punct">=</span>
+ <span class="num">11</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var>MIN_TIMEOUT</var> <span
+ class="punct">:</span>&nbsp;number <span class="punct">=</span>
+ <span class="num">10</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var>types</var> <span
+ class="punct">:</span>&nbsp;<span class="ident">Object</span></code></dt>
+ <dd>Supported CSS data types. Properties include:
+ <dl>
+ <dt><code>NUMBER</code></dt>
+ <dd>Numeric scalar value</dd>
+
+ <dt><code>LENGTH</code></dt>
+ <dd>Length given relative in <code>em</code> (width of the
+ M&nbsp;square) or <code>ex</code> (height of the x square),
+ or absolute in <code>in</code> (inches), <code>cm</code>
+ (centimeters), <code>mm</code> (millimeters), <code>pt</code>
+ (points), <code>pc</code> (picas), or <code>px</code>
+ (pixels).</dd>
+
+ <dt><code>PERCENTAGE</code></dt>
+ <dd>Length given in percentage</dd>
+
+ <dt><code>URI</code></dt>
+ <dd>Uniform Resource Identifier or URI-reference (see RFC 3986),
+ enclosed in <code>url(…)</code></dd>
+
+ <dt><code>COUNTER</code></dt>
+ <dd>CSS counter</dd>
+
+ <dt><code>COLOR</code></dt>
+ <dd>Color in RGB(A) or HSV format</dd>
+
+ <dt><code>STRING</code></dt>
+ <dd>String of Unicode characters</dd>
+ </dl></dd>
+
+ <dt><code><var>propertyInfo</var></code></dt>
+ <dd>Provides information about the type of a CSS property and its relation
+ to other CSS properties</dd>
+ </dl>
+
+ <h2>Prototype Properties</h2>
+ <dl>
+ <dt><code><var>autoReverse</var>
+ <span class="punct">:</span>&nbsp;boolean
+ <span class="punct">=</span> <span clasS="rswd">false</span></code></dt>
+ <dd>Defines whether this animation reverses direction on alternating
+ cycles. If <code>true</code>, the animation will proceed forward
+ on the first cycle, then reverses on the second cycle, and so on.
+ Otherwise, animation will loop such that each cycle proceeds
+ forward from the initial
+ <a href="KeyFrame"><code>KeyFrame</code></a>.</dd>
+
+ <dt><code><var>frameLength</var> <span
+ class="punct">:</span>&nbsp;number <span class="punct">=</span>
+ jsx.animation.Timeline.MIN_FRAME_LENGTH</code></dt>
+ <dd>Length of a frame in milliseconds (ms). The default value is
+ <code>MIN_FRAME_LENGTH</code> so that frames at 0&nbsp;ms
+ normalized to <code>MIN_TIMEOUT</code> are played before
+ the second frame.</dd>
+
+ <dt><code><var>keyFrames</var> <span
+ class="punct">:</span>&nbsp;<span class="ident">Array</span>[<a
+ href="KeyFrame"><span class="ident">KeyFrame</span></a>]
+ <span class="punct">=</span> <span class="punct">[]</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var>repeatCount</var> <span
+ class="punct">:</span>&nbsp;number <span class="punct">=</span>
+ <span class="num">1</span></code></dt>
+ <dd>Defines the number of cycles in this animation. The
+ <code><var>repeatCount</var></code> may be <code>INDEFINITE</code>
+ for animations that repeat indefinitely, but must otherwise be
+ &le; 0.</dd>
+
+ <dt><code><var>target</var>
+ <span class="punct">:</span>&nbsp;<span
+ class="ident">Object</span> <span class="punct">=</span>
+ <span class="rswd">null</span></code></dt>
+ <dd>Target object</dd>
+ </dl>
+
+ <h2>Constructor</h2>
+ <p><code><span class="ident">jsx<span class="punct">.</span>animation<span
+ class="punct">.</span>Timeline</span><span
+ class="punct">(</span><var>oParams</var>
+ <span class="punct">:</span>&nbsp;<span class="ident">Object</span><span
+ class="punct">)</span></code></p>
+ <h3>Arguments</h3>
+ <dl>
+ <dt><code><var>oParams</var> <span class="punct">:</span>&nbsp;<span class="ident">Object</span></code></dt>
+ <dd></dd>
+ </dl>
+ <h3>Throws</h3>
+ <dl>
+ <dt><code class="ident">jsx<span class="punct">.</span>InvalidArgumentError</code></dt>
+ <dd>if no parameters were specified</dd>
+ </dl>
+
+ <h2>Methods</h2>
+ <dl>
+ <dt><h3><code><span class="ident">play</span><span
+ class="punct">(</span><var>target</var> <span
+ class="punct">:</span>&nbsp;<span class="ident">Object</span></code><span
+ class="punct">)</span></code></h3></dt>
+ <dd><p>Plays this <code>Timeline</code>.</p>
+ <h4>Arguments</h4>
+ <dl>
+ <dt><code><var>target</var>
+ <span class="punct">:</span>&nbsp;<span
+ class="ident">Object</span></code></dt>
+ <dd>Target object (optional). Is usually only provided
+ if this <code>Timeline</code> is part of an
+ <a href="Animation"><code>Animation</code></a>.</dd>
+ </dl></dd>
+
+ <dt><h3><code><span class="ident">stop</span><span class="punct">()</span></code></h3></dt>
+ <dd>Prevents the <code>Timeline</code> from continuing to play.</dd>
+ </dl>
+ </body>
+</html>
\ No newline at end of file
/live/doc/jsx/animation/Timeline.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/jsx/object.html
===================================================================
--- live/doc/jsx/object.html (nonexistent)
+++ live/doc/jsx/object.html (revision 509)
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>jsx.object &#8212; JSX API Documentation</title>
+ <link rel="stylesheet" href="../../../style.css" type="text/css">
+ <link rel="stylesheet" href="../../style.css" type="text/css">
+ </head>
+
+ <body>
+ <h1><tt>object.js</tt></h1>
+ <h2><a name="globals" id="globals">Global Variables</a></h2>
+
+ <dl>
+ <dt><code><var>_global</var> <span class="punct">:</span>&nbsp;Global</code></dt>
+ <dd>Reference to the ECMAScript Global Object.<br>
+ <strong>deprecated</strong> since 0.1.5a.2009063012 in favor of
+ <code><a href="#jsx.global">jsx.global</a></code> for library references.</dd>
+
+ <dt><code><var><a href="#jsx">jsx</a></var>
+ <span class="punct">:</span>&nbsp;Object</code></dt>
+ <dd>Top-level namespace</dd>
+ </dl>
+
+ <h2><code><a name="jsx" id="jsx">jsx</a></code></h2>
+ <ul>
+ <li><code>Object</code>
+ <ul>
+ <li><code>jsx</code></li>
+ </ul></li>
+ </ul>
+
+ <h3>Properties of <code>jsx</code></h3>
+ <dl>
+ <dt><code><var><a name="jsx.MSG_INFO" id="jsx.MSG_INFO">MSG_INFO</a></var>
+ <span class="punct">:</span>&nbsp;string
+ <span class="punct">=</span> <span class="string">"info"</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var><a name="jsx.MSG_WARN" id="jsx.MSG_WARN">MSG_WARN</a></var>
+ <span class="punct">:</span>&nbsp;string
+ <span class="punct">=</span> <span class="string">"warn"</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var>MSG_DEBUG</var> <span class="punct">:</span>&nbsp;string
+ <span class="punct">=</span> <span class="string">"debug"</span></code></dt>
+ <dd></dd>
+
+ <dt><code><var><a name="jsx.global" id="jsx.global">global</a></var>
+ <span class="punct">:</span>&nbsp;Global</code></dt>
+ <dd>Reference to the ECMAScript Global Object</dd>
+
+ <dt><code><var><a href="#jsx.object">object</a></var>
+ <span class="punct">:</span>&nbsp;Object</code></dt>
+ <dd>Namespace for basic object-specific features</dd>
+ </dl>
+
+ <h3>Methods of <code>jsx</code></h3>
+ <dl>
+ <dt><h3><code><span class="ident"><a name="jsx.dmsg" id="jsx.dmsg"
+ >dmsg</a></span><span class="punct">(</span><var>sMsg</var></code>[<code><span
+ class="punct">,</span>
+ <var>sType</var></code> = <code><span class="str">"log"</span></code>]<code><span
+ class="punct">)</span>
+ :&nbsp;<span class="rswd">boolean</span></code></h3></dt>
+ <dd><p>Prints debug messages to the script console.</p>
+ <p>NOTE: This method has previously been provided by
+ {@link debug.js}; optimizations in code reuse
+ moved it here.</p>
+ <h4>Arguments</h4>
+ <dl>
+ <dt><code><var>sMsg</var> : string</code></dt>
+ <dd>Message to be printed</dd>
+
+ <dt><code><var>sType</var> : string</code></dt>
+ <dd>Type of the message. Supported values include
+ <code class="str">"log"</code> (default), <code class="str">"info"</code>,
+ <code class="str">"warn"</code>, and <code class="str">"debug"</code>.
+ If a script console does not support a message type,
+ the default value is used.</dd>
+ </dl>
+
+ <h4>Returns</h4>
+ <p><code class="rswd">true</code> if it was possible to cause the
+ message to be printed; <code class="rswd">false</code> otherwise.</p></dd>
+
+ <dt><h3><code><span class="ident">info</span><span class="punct">(</span><var>sMsg</var><span class="punct">)</span>
+ :&nbsp;<span class="rswd">boolean</span></code></h3></dt>
+ <dd><p>Issues an info message, if possible.</p>
+ <h4>Arguments</h4>
+ <dl>
+ <dt><code><var>sMsg</var> : string</code></dt>
+ </dl>
+
+ <h4>Returns</h4>
+ <p>The return value of <code><a href="#jsx.dmsg">jsx.dmsg</a><span
+ class="punct">(</span><var>sMsg</var></span>, <a href="#jsx.MSG_INFO">jsx.MSG_INFO</a><span
+ class="punct">)</span></code></p>
+
+ <dt><h3><code><span class="ident">warn</span><span class="punct">(</span><var>sMsg</var><span class="punct">)</span>
+ :&nbsp;<span class="rswd">boolean</span></code></h3></dt>
+ <dd><p>Issues a warning, if possible.</p>
+ <h4>Arguments</h4>
+ <dl>
+ <dt><code><var>sMsg</var> : string</code></dt>
+ </dl>
+
+ <h4>Returns</h4>
+ <p>The return value of <code><a href="#jsx.dmsg">jsx.dmsg</a><span
+ class="punct">(</span><var>sMsg</var></span>,
+ <a href="#jsx.MSG_WARN">jsx.MSG_WARN</a><span
+ class="punct">)</span></code></p>
+ </dl>
+
+ <h2><code><a name="jsx.object" id="jsx.object">jsx.object</a></code></h2>
+ <ul>
+ <li><code>Object</code>
+ <ul>
+ <li><code><a href="#jsx">jsx</a>.object</code></li>
+ </ul></li>
+ </ul>
+
+ <h3>Properties of <code>jsx.object</code></h3>
+ <dl>
+ <dt><code><var>ADD_OVERWRITE</var> <span class="punct">:</span>&nbsp;number
+ <span class="punct">=</span> <span class="num">1</span></code></dt>
+ <dd>Used by {@link #addProperties()} to overwrite existing properties.</dd>
+
+ <dt><code><var>COPY_ENUM</var> <span class="punct">:</span>&nbsp;number
+ <span class="punct">=</span> <span class="num">0</span></code></dt>
+ <dd>Used by {@link #addProperties()} and {@link #clone()}
+ to make a shallow copy of all enumerable properties
+ (default).</dd>
+
+ <dt><code><var>COPY_ENUM_DEEP</var> <span class="punct">:</span>&nbsp;number
+ <span class="punct">=</span> <span class="num">2</span></code></dt>
+ <dd>Used by {@link #addProperties()} and {@link #clone()}
+ to make a deep copy of all enumerable properties.</dd>
+
+ <dt><code><var>COPY_INHERIT</var> <span class="punct">:</span>&nbsp;number
+ <span class="punct">=</span> <span class="num">4</span></code></dt>
+ <dd>Used by {@link #addProperties()} and {@link #clone()}
+ to copy a property by inheritance.</dd>
+
+ <dt><code><var>author</var> <span class="punct">:</span>&nbsp;string</code></dt>
+ <dd>Script author</dd>
+
+ <dt><code><var>copyright</var> <span class="punct">:</span>&nbsp;string</code></dt>
+ <dd>Script Copyright</dd>
+
+ <dt><code><var>email</var> <span class="punct">:</span>&nbsp;string</code></dt>
+ <dd>Contact e-mail address</dd>
+
+ <dt><code><var>path</var> <span class="punct">:</span>&nbsp;string</code></dt>
+ <dd>Original script path</dd>
+
+ <dt><code><var>version</var> <span class="punct">:</span>&nbsp;string</code></dt>
+ <dd>Script version</dd>
+ </dl>
+
+ <h3>Methods of <code>jsx.object</code></h3>
+ <dl>
+ <dt><h3><code><span class="ident">addProperties</span><span
+ class="punct">(</span><var>oSource</var> :&nbsp;Object</code>[<code><span
+ class="punct">,</span> <var>iFlags</var></code>[<code><span class="punct">,</span>
+ <var>oOwner</var></code>]]<code><span class="punct">)</span></code></h3></dt>
+ <dd><p>Adds/replaces properties of an object</p>
+ <h4>Arguments</h4>
+ <dl>
+ <dt><code><var>oSource</var> : Object</code></dt>
+ <dd>Object specifying the properties to be added/replaced.
+ The name of each property serves as the name for the
+ property of the target object, its value as the value
+ of that property.</dd>
+
+ <dt><code><var>iFlags</var> : number</code></dt>
+ <dd>Flags for the modification, see {@link Object#ADD_OVERWRITE ADD_*}
+ and {@link Object#COPY_ENUM COPY_*}.</dd>
+
+ <dt><code><var>oOwner</var> : Object</code></dt>
+ <dd>If provided, used as target object instead of the
+ calling object. This makes it possible to call
+ the method without an explicit calling object.</dd>
+ </dl></dd>
+ </dl>
+ </body>
+</html>
\ No newline at end of file
/live/doc/jsx/object.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/historic/types.html
===================================================================
--- live/doc/historic/types.html (nonexistent)
+++ live/doc/historic/types.html (revision 509)
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>types.js &#8212;&nbsp;Type Function Library</title>
+ </head>
+
+ <body>
+ <h1><tt>types.js</tt> &#8212;&nbsp;Type Function Library</h1>
+
+ <p><b>Version:</b> 1.29.8.2009070702</p>
+
+ <p><b>Part of:</b> PointedEars' JavaScript Extensions (JSX)</p>
+ <p>(C) 2001-2009 Thomas Lahn &lt;types.js@PointedEars.de&gt;</p>
+
+ <h2>Dependencies</h2>
+ <ul>
+ <li><tt>object.js</tt>
+ <ul>
+ <li>&#9492; types.js</li>
+ </ul></li>
+
+ </ul>
+
+ <div>
+ <p>This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.</p>
+
+ <p>This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License (GPL) for more details.</p>
+
+ <p>You should have received a copy of the GNU GPL along with this
+ program (COPYING file); if not, go to [1] or write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.</p>
+
+ <p>[1] &lt;http://www.gnu.org/licenses/licenses.html#GPL&gt;</p>
+ </div>
+
+ <h2>Global Variables</h2>
+
+ <h3><code>jsx :&nbsp;Object</code></h3>
+
+ <h2>Objects</h2>
+
+ <h3><code>Types :&nbsp;Function</code></h3>
+
+ <h4>Properties</h4>
+
+ <table>
+ <tr>
+ <th><code>version</code></th>
+ <td><code>String</code></td>
+ </tr>
+ <tr>
+ <th><code>copyright :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>author :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>email :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>path :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>URI :&nbsp;String</code></th>
+ </tr>
+ </table>
+ </body>
+</html>
\ No newline at end of file
/live/doc/historic/types.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/historic/object.html
===================================================================
--- live/doc/historic/object.html (nonexistent)
+++ live/doc/historic/object.html (revision 509)
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>object.js &#8212;&nbsp;Basic Object Library</title>
+ </head>
+
+ <body>
+ <h1><tt>object.js</tt> &#8212;&nbsp;Basic Object Library</h1>
+
+ <p><b>Version:</b> 0.1.5a.2009071612</p>
+
+ <p><b>Part of:</b> PointedEars' JavaScript Extensions (JSX)</p>
+ <p>(C) 2004-2009 Thomas Lahn &lt;object.js@PointedEars.de&gt;</p>
+
+ <h2>Dependencies</h2>
+ <ul>
+ <li><tt>object.js</tt></li>
+ </ul>
+
+ <div>
+ <p>This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.</p>
+
+ <p>This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License (GPL) for more details.</p>
+
+ <p>You should have received a copy of the GNU GPL along with this
+ program (COPYING file); if not, go to [1] or write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.</p>
+
+ <p>[1] &lt;http://www.gnu.org/licenses/licenses.html#GPL&gt;</p>
+ </div>
+
+ <h2>Global Variables</h2>
+
+ <h3><code>jsx :&nbsp;Object</code></h3>
+
+ <h2>Objects</h2>
+
+ <h3><code>jsx.object :&nbsp;Object</code></h3>
+
+ <h4>Properties</h4>
+
+ <table>
+ <tr>
+ <th><code>version :&nbsp;String</code></th>
+ </tr>
+ <tr>
+ <th><code>copyright :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>author :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>email :&nbsp;String</code></th>
+ </tr>
+
+ <tr>
+ <th><code>path :&nbsp;String</code></th>
+ </tr>
+ </table>
+
+ <h3><code>Object :&nbsp;Function</code></h3>
+
+ <h4>Properties</h4>
+ </body>
+</html>
\ No newline at end of file
/live/doc/historic/object.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/historic/top.txt
===================================================================
--- live/doc/historic/top.txt (nonexistent)
+++ live/doc/historic/top.txt (revision 509)
@@ -0,0 +1,46 @@
+ORIGINAL FILENAME: top.js
+PURPOSE: Provides JavaScript TopOfPage Support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.02.2001.1
+PART OF: PointedEars' LCARS extensions
+DEPENDS ON: Any HTML that includes lcars.css with defined span.symbol
+REQUIRES: no file(s)
+TESTED WITH:
+ Netscape Navigator 6.1
+ Microsoft Internet Explorer 5.50, displayed 5.50.4522.1800IC
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.02.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.01.2000.11 2001-01-08 Updated documentation
+1.01.2000.11 2000-11-15 Updated script with advanced Netscape-compatible version;
+ requires application of HTML code if formerly used with
+ previous version
+1.00.2000.11 2000-11-10 Introduced script file moved from HTML inline scripts
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as top.js and appending the
+following section within the <BODY></BODY> as follows:
+
+<p><a href="#top" class="button" onClick='this.blur();'><script language="JavaScript1.2" src="top.js" type="text/javascript"></script><noscript>&nbsp;</noscript>[...]</a></p>
+
+You should write the code including the <script></script> section without any (CR)LF
+to avoid undesired spaces on display.
+
+
+Description
+____________
+
+Dependent whether W3C-conform DHTML is available (at the creation of
+this script this was only IE 5 and above, and NS 6 and above), it utilizes the cascading style-sheet
+(CSS) named span.symbol defined in lcars.css to write the "top" character
+defined by this CSS instead of writing &nbsp;.
Index: live/doc/historic/close.txt
===================================================================
--- live/doc/historic/close.txt (nonexistent)
+++ live/doc/historic/close.txt (revision 509)
@@ -0,0 +1,40 @@
+ORIGINAL FILENAME: close.js
+PURPOSE: Provides JavaScript ClosePage Support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.00.2001.8
+PART OF: PointedEars' LCARS extensions
+DEPENDS ON: Any HTML that includes lcars.css with defined span.symbol
+REQUIRES: no file(s)
+TESTED WITH:
+ Netscape Navigator 6.1
+ Microsoft Internet Explorer 5.50, displayed 5.50.4522.1800IC
+
+VERSION HISTORY
+1.00.2001.8 2001-08-26 Introduced script file by slight adaption of top.js
+
+COPYRIGHT (c) 2001 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as top.js and appending the
+following section within the <BODY></BODY> as follows:
+
+<p><a href="#" class="button" onClick='window.close(); return false();'><script language="JavaScript1.2" src="close.js" type="text/javascript"></script><noscript>&nbsp;</noscript>[...]</a></p>
+
+You should write the code including the <script></script> section without any (CR)LF
+to avoid undesired spaces on display.
+
+
+Description
+____________
+
+Dependent whether W3C-conform DHTML is available (at the creation of
+this script this was only IE 5 and above, and NS 6 and above), it utilizes the cascading style-sheet
+(CSS) named span.symbol defined in lcars.css to write the "top" character
+defined by this CSS instead of writing &nbsp;.
Index: live/doc/historic/csearch.txt
===================================================================
--- live/doc/historic/csearch.txt (nonexistent)
+++ live/doc/historic/csearch.txt (revision 509)
@@ -0,0 +1,136 @@
+ORIGINAL FILENAME: csearch.js
+PURPOSE: CSearchStr Data Access Class Library
+SCRIPT LANGUAGE/VERSION: JavaScript 1.0
+FILE VERSION: 1.00.2001.10
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: enhanced.js
+TESTED WITH:
+ Microsoft Internet Explorer 6.0.2600.0000
+
+VERSION HISTORY
+1.00.2000.8 2000-08-13 Introduced CSearchString class
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as script.js and appending the
+following section within the <HEAD></HEAD> tags of that documents:
+
+<script language="JavaScript1.1" src="cookies.js" type="text/javascript">
+</script>
+
+The following items are provided by this script:
+
+CSearchStr class
+-----------------
+
+Built-in properties:
+
+ text The full search string without the leading "?" and
+ "%26" entities converted to "&".
+ If no search string is provided
+ length Length of the text property's value
+ values Array of the values defined in the search string.
+ Each value is a pair of name and value defined as a Value object
+ (see above).
+
+Constructor arguments:
+
+ s Original search string. Required.
+ (If not provided, the object will have no properties and methods.)
+
+
+Description:
+
+The CSearchStr class provides encapsulation for a search string's properties,
+which is the part of a URL following the question mark ("?") character.
+This string may contain a number of pairs of required names and optional values,
+separated by an equal character ("="), and each name/value pair separated from
+the other by an ampersand character ("&"):
+
+name1=value1&name2=&name3&name4=value4...
+
+Usage:
+
+Provide a string with a structure described above as constructor argument of the
+CSearchStr class. This will convert the string to an array with names and values
+as the properties of each item of this array where undefined values are assigned
+as null-strings:
+
+ s = new CSearchStr(window.location.search);
+
+Then you can use the object's methods to access to its properties easily:
+
+Use the isName(...) method to determine whether a name has been provided
+with the string or not:
+
+ if (! s.isName("url"))
+ alert("Required name 'url' missing!");
+
+Use the hasValue(...) method to determine whether a name has a value different
+from the null-string (""):
+
+ if (s.hasValue("test"))
+ document.write("This is only a test");
+
+Use the getValue(...) method to retrieve the value of a provided name:
+
+ if (s.hasValue("url"))
+ frames[0].location.href = s.getValue("url");
+
+Via these methods, names are accessed case-insensitive by default.
+If you need case-sensitivity, add "true" as second argument to the
+method calls:
+
+ if (s.hasValue("URL", true))
+ frames[0].location.href = s.getValue("URL", true);
+
+
+ The initial value of the CSearchStrVersion variable shows the version of the
+library containing the CSearchString class you are using. This can be displayed,
+e.g. if you use the window.alert(...) method with that variable as argument.
+
+
+FAQ (Frequently Asked Questions)
+---------------------------------
+
+Q: When I include the CSearchStr class library into my HTML/script, in Netscape/Mozilla
+ I get an "Alert" message saying a necessary "file "[filename]" cannot be found".
+ [filename] has the form of [pathname]"/%3Cnoscript%3E%3CFRAMESET%20rows=".
+ But I have not specified such a filename in my documents/scripts.
+
+ Instead, Internet Explorer shows either no alert message or one containing the
+ following text:
+
+ "Line: "[number]
+ "Column: "[number]
+ "Error: Object expected"
+ "Code: 0"
+ "URL: "[fully qualified path of the HTML document]
+
+ Then when I click the "OK" button of this alert message it shows
+ "Error 404: File not found" (or anything similar) in the browser window,
+ with the Address Bar containing a URL that has the form of
+ [pathname]"/<noscript><FRAMESET%20rows=".
+
+
+ What have I done wrong?
+
+A: This occurs if the JSX:enhanced.js script has not been included before
+ including the library and you try to use CSearchStr for a dynamic frameset.
+ CSearchStr now depends on JSX:enhanced.js because the latter contains the
+ replaceText(...) function that is called by the constructor of CSearchStr
+ to replace HTML entities like &nbsp; with the respective ASCII characters
+ (here: unescape("%A0")).
+ (you'll see that in the Netscape/Mozilla JavaScript Console under the "Task" menu,
+ "Tools" submenu.)
+ Include JSX:enhanced.js in the correct order as described above and the problem
+ should not occur again.
+ This is a known issue and I am working on a cross-platform bugfix.
Index: live/doc/historic/cookie.txt
===================================================================
--- live/doc/historic/cookie.txt (nonexistent)
+++ live/doc/historic/cookie.txt (revision 509)
@@ -0,0 +1,53 @@
+ORIGINAL FILENAME: ccookies.js
+PURPOSE: CCookie Data Access Class Library
+SCRIPT LANGUAGE/VERSION: JavaScript 1.0
+FILE VERSION: 1.02.2001.1
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: no file
+TESTED WITH:
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.02.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.01.2000.8 2000-08-24 Improved code for initialization and property view
+1.00.2000.8 2000-08-13 Introduced CCookie class
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as script.js and appending the
+following section within the <HEAD></HEAD> tags of that documents:
+
+<script language="JavaScript1.1" src="cookies.js" type="text/javascript">
+</script>
+
+The following items are provided by this script:
+
+CCookie class
+--------------
+
+Properties: name, value, expires, domain, path, secure
+Methods: LoadData(sData), toString(), aboutMe(showMsg)
+
+Description:
+
+The CCookie class provides encapsulation for a cookie's properties.
+Pass a cookie data string as retrieved from document.cookie (sData) to
+the LoadData method to convert the cookie's data into object properties.
+Use the toString() method to convert the data vice-versa and return a string
+that you can assign to document.cookie.
+The aboutMe(...) method either retrieves a string where all properties
+are divided by a CR character (showMsg == false), and property name and
+value are divided by an equal sign (=), or displays that string in a
+common message box (showMsg == true).
+aboutMe(true) also displays the version of the library containing the
+CCookie class you are using. You can also retrieve the library version
+without a message box when reading the CCookieVersion variable
+as defined in the script file.
Index: live/doc/historic/dots.txt
===================================================================
--- live/doc/historic/dots.txt (nonexistent)
+++ live/doc/historic/dots.txt (revision 509)
@@ -0,0 +1,42 @@
+ORIGINAL FILENAME: dots.js
+PURPOSE: Provides Part 1 of the JavaScript 3dots LCARS Support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.01.2001.1
+PART OF: PointedEars' LCARS extensions
+DEPENDS ON: Any JavaScript 1.2 or HTML that defines the <span> object named "dots"
+REQUIRES: undots.js
+TESTED WITH:
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.01.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.00.2000.10 2000-10-21 Introduced script file moved from HTML inline scripts
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as script.js and appending the
+following section within the <BODY><DIV id="div_content"></DIV></BODY> tags
+of that documents where DIV defines the text to be hidden until loading is completed:
+
+<script language="JavaScript1.2" src="dots.js" type="text/javascript"></script>
+
+dots.js requires undots.js (removes the status display and returns to normal display)
+to be called at the end of the HTML document for the function make sense.
+
+
+Description
+------------
+
+This script initializes a window interval in which the <span> object named "dots" is
+modified. For the first second the script is running, one dot is displayed in "dots".
+The next second a dot and a space is added to that display. When the amount of dots
+reaches 3, the next second it will continue displaying with no dots and so on until
+undots.js is included.
Index: live/doc/historic/undots.txt
===================================================================
--- live/doc/historic/undots.txt (nonexistent)
+++ live/doc/historic/undots.txt (revision 509)
@@ -0,0 +1,40 @@
+ORIGINAL FILENAME: undots.js
+PURPOSE: Provides Part 2 of the JavaScript 3dots LCARS Support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.00.2000.10
+PART OF: PointedEars' LCARS extensions
+DEPENDS ON: Any JavaScript 1.2 or HTML that defines the <div> objects
+ named "div_status" and "div_content"
+ dots.js
+TESTED WITH:
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.01.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.00.2000.10 2000-10-21 Introduced script file moved from HTML inline scripts
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as script.js and appending the
+following section within the <BODY><DIV id="div_content"></DIV></BODY> tags
+of that documents where DIV defines the text to be hidden until loading is completed:
+
+<script language="JavaScript1.2" src="undots.js" type="text/javascript"></script>
+
+undots.js requires dots.js (initializes the status display)
+to be called before undots.js in the HTML document for the function make sense.
+
+
+Description
+------------
+
+This script clears the window interval in which the <span> object named "dots" is
+modified and displays the content within the <div> object named "div_content".
Index: live/doc/historic/document.txt
===================================================================
--- live/doc/historic/document.txt (nonexistent)
+++ live/doc/historic/document.txt (revision 509)
@@ -0,0 +1,390 @@
+ORIGINAL FILENAME: document.js
+PURPOSE: Provides JavaScript routines and objects to create
+ temporary documents
+SCRIPT LANGUAGE/VERSION: JavaScript 1.1
+FILE VERSION: 1.19.2001.1
+ (see documentVersion variable definition in script file)
+TESTED WITH:
+ Microsoft Internet Explorer 5.50.4134.0600IC
+ Microsoft Internet Explorer 5.01, "5.00.2919.6307IC"
+ Microsoft Internet Explorer 5.00.2314.1003IC
+
+VERSION HISTORY (current on top)
+1.19.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.18.2000.8 2000-08-22 Improved CHTMLdoc.showProperties() method, now uses for-in-loop
+ to retrieve available properties dynamically.
+1.17.2000.8 2000-08-13 Improved documentation texts.
+ Tested script file successfully with IE5.5
+1.16.2000.7 2000-07-24 Added HTMLwriteLinkFavIcon() function and resp. method
+1.15.2000.6 2000-06-10 Improved documentation texts.
+1.14.2000.5 2000-05-24 Changed message box display in CHTMLdoc.showProperties() method
+ Added tagCount global variable and resp. CHTMLdoc property
+ Added CHTMLdocCount global variable for instance auto-naming
+1.13.2000.4 2000-04-20 Added HTMLwriteStyle(...) function and resp. method
+1.12.2000.4 2000-04-09 Improved HTMLdocOpen, now uses default argument values
+1.11.2000.4 2000-04-04 Improved HTMLwriteScript, now uses default argument values
+1.10.2000.3 2000-03-31 Usage of global variables for script data like version,
+ author and contact e-mail address
+1.09.2000.3 2000-03-25 Renamed non-HTML-specific functions
+1.08.2000.3 2000-03-24 Fixed default color and background image properties
+ of new CHTMLdoc instances
+ Fixed invalid condition in HTMLdocOpen(...) function
+ Fixed invalid func. name in HTMLdocShowProperties()
+1.07.2000.3 2000-03-24 Improved HTMLwriteTag, now uses default arg. values
+ Improved DTD strings with "\"" instead of '"'
+1.06.2000.3 2000-03-23 Fixed some minor issues, renamed from html.js to
+ document.js
+1.05.2000.3 2000-03-19 Added OOP support for Multiple Document Access (MDA)
+1.05.2000.3 2000-03-17 Added support for Object-Oriented Programming (OOP)
+
+Copyright © 2000-2001 by Thomas Lahn (PES);
+See sAuthorCopyright variable definition in script file.
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as document.js and appending the
+following section within the <HEAD></HEAD> tags of that documents:
+
+<script language="JavaScript1.2" src="document.js" type="text/javascript"></script>
+
+Sometimes it may be necessary to add the tag
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+
+to the document that uses functions defined herein for the script to work.
+
+All functions to perform HTML write operations defined herein use the
+HTMLdoc variable as target (see below) to create a temporary HTML document.
+
+This script file provides the following functions:
+
+docCheck Checks whether the document specified by HTMLdoc exists.
+HTMLdocOpen Opens a new HTML document.
+HTMLdocClose Closes a new HTML document.
+docWrite Writes directly into a temporary document.
+docWriteLn Writes an entire line directly into a temporary document.
+HTMLwriteTag Writes an HTML tag.
+HTMLwriteMeta Writes an HTML <META> tag.
+HTMLwriteScript Writes an HTML <SCRIPT> section.
+HTMLwriteStyle Writes an HTML <STYLE> section.
+HTMLwriteLinkFavIcon Writes an HTML <LINK> tag to determine the icon used when the
+ web page is bookmarked in Internet Explorer Favorites folder.
+HTMLheadOpen Opens the HTML header.
+HTMLheadClose Closes the HTML header.
+HTMLbodyOpen Opens the HTML body.
+HTMLbodyClose Closes the HTML body.
+
+See the function documentations below for details.
+
+_______________________________________________________________________________
+
+The HTMLdoc variable specifies the document object that is used for
+write operations.
+The default is the document where this script file is included.
+You would surely prefer another frame of the previously defined frameset
+as target. Therefore you can modify the variable's value and add the section
+
+<script language="JavaScript1.1"><!--
+...
+HTMLdoc = parent.frames[2].document;
+...
+//--></script>
+
+in the HTML document file where this script is included. It will cause the
+following function calls of this script to write into the third frame
+of that frameset (frames are counted from 0).
+Do not use the TYPE attribute on the script section because
+M$ Internet Explorer will then ignore the whole script.
+
+_______________________________________________________________________________
+
+function docCheck(bRaiseException)
+
+Returns true if the document object specified by HTMLdoc is available/is valid/
+does exist, otherwise it returns false.
+If you pass true as only argument, the function will raise an ENoDocument
+exception if it will return false.
+No exception will be raised if you pass an invalid argument or
+an invalid number of arguments (silent mode).
+
+Note: All functions defined herein to write HTML content call docCheck
+by default to raise an exception if the document object specified HTMLdoc
+is not available/is invalid/does not exist.
+
+_______________________________________________________________________________
+
+function HTMLdocOpen(sDTD, bReplace)
+
+Replaces the document specified by HTMLdoc with a blank HTML document.
+
+Use the sDTD argument and one of the variables named dtd... defined above
+to specify a registered Document Type Definition (DTD) for the document,
+e. g. the DTD may specify the HTML version of the document's tags use.
+You may also add one of the variables named dtdURL_... to the variables
+named dtdHTML4... to define the tag policy you are using:
+
+<script language="JavaScript1.2" src="document.js" type="text/javascript"></script>
+<script language="JavaScript1.2">
+<!--
+HTMLdoc = parent.document; Assign required document object
+HTMLdocOpen( dtdHTML4frm + dtdURL_HTML4frm ); Create document for frameset
+... Other statements
+HTMLdocClose(); Close the created HTML document
+-->
+</script>
+
+The document created with the example above will contain the following:
+
+<!doctype html public "-W3CDTD HTML 4.0 FramesetEN"
+ "http:www.w3.org/TR/REC-html40/frameset.dtd">
+<html>
+
+Use true for the bReplace argument to specify whether the new document
+should also replace the previous document in the browser's document history.
+
+Note: The function call keeps the new document open for further
+write operations. Recommended to use HTMLdocClose() on the same document after
+completed writing. If you have formerly opened the previous document
+in that frame with document.open() or HTMLdocOpen(), it is recommended that
+you call HTMLdocClose() first for saving system resources (see below).
+
+_______________________________________________________________________________
+
+function HTMLdocClose()
+
+Closes the document specified by HTMLdoc.
+Use HTMLdocClose() if you have formerly opened a new document with
+document.open() or HTMLdocOpen() (see above).
+
+_______________________________________________________________________________
+
+function docWrite(s)
+
+Writes the passed argument into the HTML document.
+Unlike HTMLdoc.write() it checks the document object before using it
+and raises an exception if it is not available.
+
+_______________________________________________________________________________
+
+function docWriteLn(s)
+
+Writes the passed argument into the HTML document including
+Carriage Return character.
+Unlike HTMLdoc.writeln() it checks the document object before using it
+and raises an exception if it is not available.
+
+_______________________________________________________________________________
+
+function HTMLwriteTag(sTag, sAttrib, sContent)
+
+Writes an opening and closing HTML tag into the HTML document.
+Note: Does not write Carriage Return character when finished.
+Unlike HTMLdoc.write() it checks the document object before using it
+and raises an exception if it is not available.
+
+The function requires the following arguments to be passed:
+
+sTag Name of the tag to be written: Null-string causes exception.
+sAttrib Tag attributes: Null-string allowed. Combine two or more attributes
+ separated by spaces.
+sContent Content between the opening and closing tag. If you pass a
+ null-string the function does not write a closing tag.
+
+The variable HTMLtagCount stores the number of HTML tags that has
+been written into the document with HTMLwriteTag().
+
+_______________________________________________________________________________
+
+function HTMLwriteMeta(sName, sHTTPequiv, sContent) {
+
+Appends a <META ...> tag to the HTML document specified by HTMLdoc.
+This type of tag is allowed within the HTML header only.
+
+ARGUMENT MEANING
+sName If not a null-string, the argument defines the value of the
+ NAME attribute of the <META> tag.
+sHTTPequiv If not a null-string, the argument defines the value of the
+ HTTP-EQUIV attribute of the <META> tag.
+sContent Defines the CONTENT attribute of the <META> tag
+ (null-string allowed).
+
+All described arguments are required for the function call. Otherwise
+an EInvalidArgNum exception is raised.
+
+Note: The function call keeps the document body open for further
+write operations. Recommended to use HTMLheadClose() on the same document
+after completed writing into the header.
+
+The variable HTMLmetaCount stores the number of <META> tags that has been
+written into the document with HTMLwriteMeta() except the
+<META NAME="GENERATOR" ...> tag that is written automatically into the
+document on call of HTMLheadopen().
+Thus the GENERATOR value for the NAME attribute is refused to write into
+the document when calling HTMLwriteMeta. In that case, no exception is raised.
+
+_______________________________________________________________________________
+
+function HTMLwriteLinkFavIcon(sURL)
+
+Writes an HTML <LINK> tag to determine the icon used when the web page is
+bookmarked in Internet Explorer Favorites folder. The icon file (sURL) must be
+of 16x16 pixels in size.
+You can leave the use of this function if you place an icon file of 16x16
+pixels in size named favicon.ico in the root directory of your domain
+(www.your-domain.com/favicon.ico).
+
+_______________________________________________________________________________
+
+function HTMLwriteScript(sLang, sSrc, sType, sContent)
+
+Appends a <SCRIPT ...></SCRIPT> section to the HTML document specified by
+HTMLdoc. This type of tag is allowed within both the HTML header and body.
+
+ARGUMENT MEANING
+sLang Defines the language of the SCRIPT section (required).
+sSrc If not a null-string, the argument defines the included script
+ file for the SCRIPT section (optional).
+sType If not a null-string, the argument defines the MIME type of the
+ SCRIPT section (optional).
+sContent If not a null-string, the argument defines the statements that
+ should be added to the script. Passing a null-string will cause
+ the function not to write the remark tags. When sSrc is not a
+ null-string, this argument is ignored.
+
+All described arguments are required for the function call if sSrc is not
+a null-string (therefore only arguments sLang, sSrc and sType required).
+Otherwise an EInvalidArgNum exception is raised.
+
+Note: The function call keeps the document body open for further
+write operations. See HTMLdocClose() for details.
+
+The variable HTMLscriptCount stores the number of script sections that has
+been written into the document with HTMLwriteScript().
+
+_______________________________________________________________________________
+
+function HTMLwriteStyle(sType, sAttrib, sContent)
+
+Appends a <STYLE ...></STYLE> section to the HTML document specified by
+HTMLdoc. This type of tag is allowed within the HTML header only.
+
+ARGUMENT MEANING
+sType Defines the type of the STYLE section.
+ Valid values are a null-string or "text/css" for cascading
+ style-sheets (IE and NN) and "text/javascript" for JavaScript
+ style sheets (NN only).
+ Invalid values cause an EInvalidArgument exception.
+sAttrib If not a null-string, the argument defines the the additional
+ attributes for the STYLE section.
+sContent The argument defines the definitions and/or statements that
+ should be added to the style sheet. Passing a null-string will
+ raise an EInvalidArgument exception as the style section is
+ not allowed to be empty.
+
+All described arguments are required for the function call.
+Otherwise an EInvalidArgNum exception is raised.
+
+Note: The function call keeps the document body open for further
+write operations. See HTMLdocClose() for details.
+
+The variable HTMLstyleCount stores the number of style sections that has
+been written into the document with HTMLwriteStyle().
+
+_______________________________________________________________________________
+
+function HTMLheadOpen(sTitle)
+
+Appends the beginning of an HTML document header into the document specified by
+HTMLdoc including the title tag.
+
+Use the sTitle argument to pass a string that is used for document title.
+Most browsers display this string in the title bar if the document is not
+displayed within a frameset.
+
+Note: The function call keeps the document header open for further
+write operations. Recommended to use HTMLheadClose() on the same document
+after completed writing into the header.
+
+_______________________________________________________________________________
+
+function HTMLheadClose()
+
+Closes the header of the document specified by HTMLdoc.
+Use HTMLheadClose() if you have formerly opened a document header with
+<head> or HTMLheadOpen() (see above).
+
+Note: The function call keeps the new document open for further
+write operations. See HTMLdocOpen() above for details.
+
+_______________________________________________________________________________
+
+function HTMLbodyOpen() {
+
+Appends the beginning of an HTML document body into the document specified by
+HTMLdoc.
+
+The function uses the clBody... variables for color attributes if their values
+are not null-strings (default).
+
+The function uses the imgBody variable to define the URL of the background
+image of the document if its value is not a null-string (default).
+
+The bBodyBgFixed variable is currently used by M$ Internet Explorer only.
+The default value is false. If true is assigned, and imgBody is also assigned,
+the background image will be in watermark style, meaning that it stands still
+when the document text is scrolled.
+
+Note: The function call keeps the document body open for further
+write operations. Recommended to use HTMLbodyClose() on the same document
+after completed writing into the document's body.
+
+_______________________________________________________________________________
+
+function HTMLbodyClose() {
+
+Closes the body of the document specified by HTMLdoc.
+Use HTMLbodyClose() if you have formerly opened a document body with
+<BODY> or HTMLbodyOpen() (see above).
+
+Note: The function call keeps the new document open for further
+write operations. See HTMLdocOpen() above for details.
+
+_______________________________________________________________________________
+
+Version 1.05.x Extension: Object-Oriented Programming (OOP)
+
+OOP using the CHTMLdoc class allows you to access different temporary
+HTML documents virtually simultaneously.
+You need to create an instance of this class for each temporary document
+using the JavaScript:new keyword as follows:
+
+Document1 = new CHTMLdoc(Target1);
+Document2 = new CHTMLdoc(Target2);
+
+TargetX is to be replaced with the document object you wish to access via
+the new instance.
+Then, after all necessary values have been assigned to the properties of the
+instance, you can activate the respective instance using its activate()
+method. After that, you can use the properties and methods as defined below
+to access the respective document object.
+
+Note that the activate() method is the only "gatekeeper" for HTML write
+operations via OOP. Once an instance is activated, the methods of all CHTMLdoc
+instances and the HTML...() functions themselves will use the properties of
+it as data source. Therefore there is no need to use the CHTMLdoc class and OOP
+instead of the HTML...() functions defined above if you wish to access a
+single document object only.
+The HTMLinstance object represents the currently active CHTMLdoc instance.
+
+If you wish to change the target document of an instance after creation,
+then assign a document object to its target property.
+Note that you need to call the activate() method of an instance every time
+after you have changed its properties to make the changes have effect on
+future method calls.
+_______________________________________________________________________________
+END OF FILE
Index: live/doc/historic/enhanced.htm
===================================================================
--- live/doc/historic/enhanced.htm (nonexistent)
+++ live/doc/historic/enhanced.htm (revision 509)
@@ -0,0 +1,742 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PointedEars' JavaScript Extensions (JSX): enhanced.js</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+
+<body>
+<h1>PointedEars' JavaScript Extensions (JSX)</h1>
+<h2>enhanced.js</h2>
+<pre>
+
+ORIGINAL FILENAME: <a href="enhanced.js" type="text/javascript"
+ target="_blank">enhanced.js</a>
+PURPOSE: Provides level-1 enhanced web site features
+SCRIPT LANGUAGE/VERSION: JavaScript 1.1+
+PART OF: PointedEars' JavaScript Extensions (JSX)
+FILE VERSION: 1.29.2002.10b3;
+ See <var>enhancedVersion</var> variable definition in script file.
+REQUIRED FOR: <a href="enhancd2.htm"
+ title="View documentation of JSX:enhancd2.js">JSX:enhancd2.js</a>
+ </pre>
+<h3>Contents</h3>
+<ul>
+ <li><a href="#features">Features provided by this script</a></li>
+ <li><a href="#testlist">List of browser tests</a></li>
+ <li><a href="#history">Version history</a></li>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+ <li><a href="#def">Expressions used herein</a></li>
+ <li><a href="#details">Detailed description of features</a></li>
+</ul>
+<p align="center" style="font-size: small;">Created with<br>
+<a href="http://quanta.sourceforge.net/" target="_blank"><img
+ src="../media/quanta.png" alt="Quanta Plus" width="32" height="32"
+ border="0"></a> <a
+ href="http://www.macromedia.com/software/homesite/" target="_blank"><img
+ src="../media/homesite3.gif" alt=" | Macromedia HomeSite | "
+ width="44" height="34" border="0"></a><a
+ href="http://www.macromedia.com/software/dreamweaver/" target="_blank"><img
+ src="../media/dreamweaver2.gif" alt="Macromedia Dreamweaver MX"
+ width="44" height="34" border="0"></a></p>
+<p align="center" style="font-size: small;"><a
+ href="http://validator.w3.org/check/referer" target="_blank"><img
+ src="http://www.w3.org/Icons/valid-html401"
+ alt="This is valid HTML 4.01, " width="88" height="31" border="0"></a>
+<a href="http://jigsaw.w3.org/css-validator/check/referer"
+ target="_blank"><img
+ src="http://jigsaw.w3.org/css-validator/images/vcss" alt="valid CSS "
+ style="border: 0; width: 88px; height: 31px"></a> <a
+ href="http://www.anybrowser.org/campaign/" target="_blank"><img
+ src="../media/anybrowser.gif"
+ alt="and therefore optimized for ALL browsers!" width="88" height="31"
+ border="0"></a></p>
+<hr>
+<h4><a name="features">Features Provided By This Script</a></h4>
+<dl>
+ <dt><code><a href="#isArray">isArray</a></code></dt>
+ <dd><pre>Checks whether a value is an array or not.</pre></dd>
+ <dt><code><a href="#replaceText">replaceText</a></code></dt>
+ <dd><pre>Replaces text within a string.</pre></dd>
+ <dt><code><a href="#trimLeft">trimLeft</a></code></dt>
+ <dd><pre>Returns a string where all leading spaces are stripped from.</pre></dd>
+ <dt><code><a href="#trimRight">trimRight</a></code></dt>
+ <dd><pre>Returns a string where all following spaces are stripped from.</pre></dd>
+ <dt><code><a href="#trim">trim</a></code></dt>
+ <dd><pre>Returns a string where all leading and following spaces are stripped from.</pre></dd>
+ <dt><code>setStatus</code></dt>
+ <dd><pre>Set the text that is displayed in the browser's status bar.</pre></dd>
+ <dt><code>stripTags</code></dt>
+ <dd><pre>Returns a string where all tags are stripped from.</pre></dd>
+ <dt><code>linkOut</code></dt>
+ <dd><pre>Questions the user before following an online link (useful in offline
+documents with Internet support.)</pre></dd>
+ <dt><code>popUp</code></dt>
+ <dd><pre>Loads a user-defined browser child window (pop-up window).
+(Previously addressed by OpenChildWin(...) function,
+see version history info above.)</pre></dd>
+ <dt><code>LoadFrame</code></dt>
+ <dd><pre>Loads a document within a specified frame.</pre></dd>
+ <dt><code><a href="#getObjInfo">getObjInfo</a></code></dt>
+ <dd><pre>Retrieves attributes of an object.</pre></dd>
+</dl>
+<h4><a name="testlist">Tested To Work At Least With</a></h4>
+<pre><!--script type="text/javascript">
+document.write(navigator.userAgent + "\n");
+</script-->Mozilla 1.2b nightly
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b) Gecko/2002102108]
+Mozilla 1.2b nightly
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b) Gecko/2002100604]
+Mozilla 1.2a
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2a) Gecko/20020911]
+Netscape 7.0
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.0.1) Gecko/20020823
+ Netscape/7.0]
+Mozilla 1.1b
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.1b) Gecko/20020722]
+Mozilla 1.0
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0) Gecko/20020605]
+Mozilla 1.0 Release Candidate 3
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc3) Gecko/20020523]
+Mozilla 1.0 Release Candidate 2
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc2) Gecko/20020510]
+Mozilla 1.0 Release Candidate 1 nightly
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc1) Gecko/20020417]
+Mozilla 0.9.9
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.9) Gecko/20020311]
+Mozilla 0.9.8 de-AT
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8) Gecko/20020204]
+Mozilla 0.9.4
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.4) Gecko/20010913]
+Microsoft Internet Explorer 6.0.2600.0000
+ [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 3.0)]
+Netscape 6.1
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.2) Gecko/20010726
+ Netscape6/6.1]
+Netscape 6.1
+ [Mozilla/5.0 (X11; U; Linux 2.2.16 i586; de-DE; m18) Gecko/20010131
+ Netscape6/6.01]
+Microsoft Internet Explorer 5.50.4807.2300IC
+Microsoft Internet Explorer 5.50.4134.0600IC
+Microsoft Internet Explorer 5.01 [5.00.2919.6307IC]
+Microsoft Internet Explorer 5.00.2314.1003IC
+ </pre>
+<h4><a name="history">Version History</a></h4>
+<pre>
+<a href="#first">First version</a>
+
+<a name="last" id="last">1.29.2002.10b3 (2002-10-09)</a>
+----------------------------
+* Updated <code>getObjInfo</code> function:
+ - Now supports a <a href="#regexp">RegExp</a> for the second argument (now <var><a
+ href="#getObjInfo_aWhat">aWhat</a></var>, formerly <var>sWhat</var>)
+ - Fixed bug with not provided <var>aWhat</var> argument by assigning a <a
+ href="#def">null string</a>
+* Updated documentation:
+ - Added link to last version
+ - Added links to definitions
+ - Updated definitions
+ - Updated "null string" term
+ - Unified Version History layout
+
+<a name="v1.29.2002.8b2" id="v1.29.2002.8b2">1.29.2002.8b2 (2002-08-30)</a>
+----------------------------
+* Updated <code>getObjInfo</code> function:
+ - Now supports combination of (case-insensitive) attribute options
+
+<a name="v1.29.2002.8b" id="v1.29.2002.8b">1.29.2002.8b (2002-08-25)</a>
+----------------------------
+* Updated all functions:
+ - changed $ident<code><span class="punct">.</span>arguments</code> to <code>arguments</code> because it is an intrinsic property
+ of the function prototype
+
+<a name="v1.29.2002.8a" id="v1.29.2002.8a">1.29.2002.8a (2002-08-20)</a>
+---------------------------
+* Updated <code>getObjInfo</code> function:
+ - Now supports all types of objects, correct syntax provided
+ - Now supports combination of (case-insensitive) style options
+ - Introducing new style option 'S' that specifies to display attribute type
+* ObjectInspector still buggy
+
+<a name="v1.29.2002.7" id="v1.29.2002.7">1.29.2002.7 (2002-07-22)</a>
+---------------------------
+* Updated <code>replaceText</code> function:
+ - Introduced additional <var>bForceLoop</var> argument to prefer
+ for-loop instead of <a href="#regexp">RegExps</a>. Useful when replacement with RegExp<a
+ href="#regexp"></a>s
+ requires too much modification of arguments.
+
+<a name="v1.28.2002.7" id="v1.28.2002.7">1.28.2002.7 (2002-07-15)</a>
+---------------------------
+* Updated <code>ObjectInspector</code> function:
+ - Workaround for suprising Mozilla bug with window.open(...):
+ Creates exception to recommend use of <code>getObjInfo(...)</code>
+
+<a name="v1.25.2002.5" id="v1.25.2002.5">1.25.2002.5 (2002-05-10)</a>
+---------------------------
+* Updated <code>getObjInfo(...)</code> function:
+ - Fixed error when trying to retrieve attribute values without permission,
+ use <code>try...catch</code> statements of JavaScript 1.5
+ - Fixed &quot;empty lines above table in IE&quot; bug
+* Fixed undetected bug in <code>EInvalidArg(...)</code>, simplified <code>EInvalidArg(...)</code>
+ and <code>EInvalidArgNum(...)</code> exceptions
+* Renamed <code>EnhancedException</code> to <code>enhancedException</code> and simplified code
+* Introduced <var>enhancedCopypright</var>, <var>enhancedAuthor</var> and <var>enhancedEMail</var>
+ global variables to store script-related data for <strong>all</strong> script features,
+ including <code>getObjInfo(...)</code>
+* Documentation update:
+ - Updated <code>getObjInfo(...)</code> description
+ - Have all code-related identifiers properly formatted
+
+1.24.2002.5 (2002-05-06)
+---------------------------
+* Updated <code>replaceText(...)</code> function:
+ - Fixed the &quot;<var>sText</var> has no properties&quot; bug with undefined attributes
+ tried to retrieve with <code>getObjInfo(...)</code>
+* Updated <code>getObjInfo(...)</code> function with XHTML support
+* Documentation update:
+ - Link to jump to the first version listed in history
+ - Updated <code>replaceText(...)</code> description
+ - Use of definition lists
+ - Changed headers
+
+1.23.2002.4 (2002-04-30)
+---------------------------
+* Updated <code>replaceText(...)</code> function, resolving the <code><a
+ href="#regexp">RegExp</a></code> issues:
+ - Replaces all occurrences of a string
+ - Replaces also <code>\</code>
+
+1.22.2002.4 (2002-04-22)
+---------------------------
+* Updated replaceText(...) function:
+ - Support of the more effective <code>String.replace(...)</code> with <code><a
+ href="#regexp">RegExp</a></code> of
+ JavaScript 1.2
+* Documentation update:
+ - Word wrap at 72 characters (applies to documentation standards)
+ - Version History is no longer in columns but separate paragraphs
+* First version under the terms of the GNU GPL, version 2 or later.
+
+1.20.2002.2 (2002-02-24)
+---------------------------
+* Updated <code>getObjInfo(...)</code> function:
+ - Now supports also HTML output as list or table
+
+1.19.2001.10 (2001-10-20)
+---------------------------
+* Added <code>isArray(...)</code> function
+
+1.19.2001.9 (2001-09-10)
+---------------------------
+* Updated <code>getObjInfo(...)</code> function:
+ - Now denies retrieval of all the attributes the ObjectInspector does
+ (obsoleted by <a href="#v1.25.2002.5">version 1.25.2002.5</a>)
+
+1.18.2001.4 (2001-04-17)
+---------------------------
+* Added <code>ObjectInspector(...)</code> function
+
+1.17.2001.2 (2001-02-28)
+---------------------------
+* Added <code>getObjInfo(...)</code> function
+
+1.16.2001.1 (2001-01-11)
+---------------------------
+* Moved general documentation to text file for faster processing
+
+1.15.2000.11 (2000-11-24)
+---------------------------
+* Improved <code>linkOut(...)</code> function:
+ - Now always returns false for combined document use in both
+ <span class="a">href</span> attribute and <span class="a">onclick</span> event handler of <span
+ class="a">A</span>-elements
+
+1.14.2000.11 (2000-11-15)
+---------------------------
+* Improved <code>popUp(...)</code> and <code>OpenChildWin(...)</code> functions:
+ - Now both functions return false for combined document use in both
+ <span class="a">href</span> attribute and <span class="a">onclick</span> event handler of <span
+ class="a">A</span>-elements
+* Established string variable named <var>enhancedVersion</var> to contain
+ library version
+
+1.13.2000.10 (2000-10-17)
+---------------------------
+* Improved inline documentation
+
+1.12.2000.8 (2000-08-13)
+---------------------------
+* Tested script file successfully with IE5.5
+
+1.11.2000.7 (2000-07-03)
+---------------------------
+* Fixed some mysterious bugs with IE 5.01 on string arguments and large
+ HTML documents by assigning those strings to local variables and
+ splitting string assignments (+= Workaround).
+* Modified email subject line to Feedback/JSX/enhanced
+
+1.10.2000.6 (2000-06-10)
+---------------------------
+* Renamed <code>OpenChildWin(...)</code> function identifier to more familiar and
+ easier recognized term <code>popUp(...)</code>;
+ Compatibility to previous file versions is provided by internal call
+ redirection, though new documents should use the new identifier.
+* Improved inline documentation
+
+1.09.2000.3 (2000-03-27)
+---------------------------
+* Fixed &quot;location is not an object&quot; bug in <code>linkOut(...)</code>
+* Fixed spelling error in <code>EInvalidArg(...)</code> exception
+* Fixed global frame ID evaluation bug
+
+1.08.2000.3 (2000-03-23)
+---------------------------
+* Improved <code>setStatus(...)</code> function
+
+1.07.2000.3 (2000-03-20)
+---------------------------
+* Added <code>setStatus(...)</code> function
+
+1.06.2000.3 (2000-03-19)
+---------------------------
+* Fixed <var>sResult</var> variable assignment in <code>trim(...)</code>
+
+<a name="first" id="first">1.05.2000.3 (2000-03-21)</a>
+---------------------------
+* Fixed and updated <code>linkOut(...)</code> function
+
+<a href="#last">Last version</a>
+ </pre>
+<h4><a name="copyright">Copyright &amp; Disclaimer</a></h4>
+<pre>
+Copyright (c) 1999-2002 Thomas Lahn &lt;<a
+ href="mailto:webmaster@PointedEars.de?subject=Feedback/JSX/enhanced">webmaster@PointedEars.de</a>&gt;
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the <a
+ href="http://www.gnu.org/copyleft/gpl.html" target="_blank">GNU General Public License</a>
+as published by the <a href="http://www.fsf.org/" target="_blank">Free Software Foundation</a>; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program (<a href="COPYING" target="_blank">COPYING</a> file); if not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in
+different HTML documents when saving the entire file as
+script.js and appending the following section within the
+<span class="tags">&lt;head&gt;...&lt;/head&gt;</span> tags of that documents:
+
+<span class="scr">&lt;script src="enhanced.js" type="text/javascript"&gt;&lt;/script&gt;</span>
+ </pre>
+<h4><a name="def">Expressions Used Herein</a></h4>
+<dl>
+ <dt>null string</dt>
+ <dd><pre>An empty string that contains no characters, i.e. is of length 0 (zero).</pre></dd>
+ <dt><code>(Expression1 | Expression2 | ...)</code></dt>
+ <dd><pre>Exclusive selection of expressions in Backus-Naur Form (BNF). [<a
+ href="http://google.com/search?q=Backus-Naur+Form" target="_blank">details</a>]</pre></dd>
+ <dt><code><a name="regexp">RegExp</a></code></dt>
+ <dd><pre>A regular expression encapsulated by the RegExp object. [<a
+ href="http://web.archive.org/devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/regexp.html#1193136"
+ target="_blank">details</a>]</pre></dd>
+</dl>
+<pre>
+<a name="details">Following the detailed description of the features of this script file.</a>
+_______________________________________________________________________________
+
+<code><a name="isArray"><span class="rswd">function</span> isArray<span
+ class="punct">(</span><var>value</var><span class="punct">)</span></a></code>
+
+Returns <span class="rswd">true</span> if <var>value</var> is <strong>probably</strong> an array, i.e. provides the <code>length</code>
+property. Returns <span class="rswd">false</span> otherwise.
+
+Note: This function checks for the <code>length</code> property only. It cannot provide
+definitive indication whether the value is really an array or not, as
+e.g., the <code class="rswd">String</code> object provides the <code>length</code> property, too.
+
+_______________________________________________________________________________
+
+<code><a name="replaceText"><span class="rswd">function</span> replaceText<span
+ class="punct">(</span><var>sText</var>, <var>sReplaced</var>, <var>sReplacement</var><span
+ class="punct">)</span></a></code>
+
+Replaces occurences of <var>sReplaced</var> in the string <var>sText</var> with <var>sReplacement</var>.
+Returns the new string.
+
+Because of the result it returns, <code>replaceText</code> may be nested
+into other calls of itself:
+
+ <code><span class="rswd">var</span> s <span class="punct">=</span> replaceText<span
+ class="punct">(</span>replaceText<span class="punct">(</span><span
+ class="str">&quot;test me&quot;</span><span class="punct">,</span> <span
+ class="str">&quot;test&quot;</span><span class="punct">,</span> <span
+ class="str">&quot;#test#&quot;</span><span class="punct">)</span><span
+ class="punct">,</span> <span class="str">&quot;#&quot;</span><span
+ class="punct">,</span> <span class="str">&quot;$&quot;</span><span
+ class="punct">)</span>;
+ <span class="comm">// displays &quot;$test$ me&quot;</span></code>
+
+When available, <code>replaceText(...)</code> uses <code>String.replace(...)</code>
+to replace text. Therefore, if the method is available, <var>sReplaced</var> may be
+a regular expression to be replaced with <var>sReplacement</var>.
+
+_______________________________________________________________________________
+
+<code><a name="trimLeft"><span class="rswd">function</span> trimLeft<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all leading spaces are stripped from.
+
+_______________________________________________________________________________
+
+<code><a name="trimRight"><span class="rswd">function</span> trimRight<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all following spaces are stripped from.
+
+_______________________________________________________________________________
+
+<code><a name="trim"><span class="rswd">function</span> trim<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all leading and following spaces are stripped from.
+Uses <code>trimLeft</code> and <code>trimRight</code> defined above to calculate that resulting string.
+
+_______________________________________________________________________________
+
+<code><span class="rswd">function</span> setStatus<span
+ class="punct">(</span><var>sCaption</var><span class="punct">)</span></code>
+
+Sets the text of the browser's status bar user-defined.
+Pass the string to be displayed as the only function argument.
+Removes the necessity to include a script into the HTML 4.0 event
+handlers of an HTML object, e. g.
+
+ <span class="a">&lt;a href=</span><span class="attr">&quot;...&quot;</span> <span
+ class="a">onmouseover=</span><span class="attr">&quot;</span><code>status='<span
+ class="str">Text</span>'<span class="punct">;</span> <span
+ class="rswd">return true</span><span class="punct">;</span></code><span
+ class="attr">&quot;</span><span class="a">&gt;</span>dasd<span
+ class="a">&lt;/a&gt;</span>
+
+can be replaced with:
+
+ <span class="a">&lt;a href=</span><span class="attr">&quot;...&quot;</span> <span
+ class="a">onmouseover=</span><span class="attr">'</span><code><span
+ class="rswd">return</span> setStatus<span class="punct">(</span>&quot;<span
+ class="str">Text</span>&quot;<span class="punct">);</span></code><span
+ class="attr">'</span><span class="a">&gt;</span>dasd<span class="a">&lt;/a&gt;</span>
+
+_______________________________________________________________________________
+
+<code><span class="rswd">function</span> stripTags<span
+ class="punct">(</span><var>taggedStr</var><span class="punct">)</span></code>
+
+Returns a string where all tags are stripped from the passed argument string
+(<var>taggedStr</var>). You may use it to analyze the displayed content of an HTML document
+for fulltext search (example works with Internet Explorer only):
+
+ <code><span class="rswd">function</span> foundText<span
+ class="punct">(</span><var>sSub</var><span class="punct">)</span> {
+ <span class="rswd">return</span> <span class="punct">(</span>stripTags<span
+ class="punct">(</span>document.all.tags<span class="punct">(</span>&quot;<span
+ class="str">body</span>&quot;<span class="punct">)[</span><span
+ class="num">0</span><span class="punct">].</span>innerHTML<span
+ class="punct">).</span>indexOf<span class="punct">(</span><var>sSub</var><span
+ class="punct">)</span> &gt; <span class="num">-1</span><span
+ class="punct">);</span>
+ }
+
+ if( foundText("Text") )
+ document.write( 'Found "Text" in the document.' );</code>
+
+_______________________________________________________________________________
+
+<code><span class="rswd">function</span> linkOut<span
+ class="punct">(</span><var>sURL</var>[, <var>sLink</var>[, <var>bShowURL</var>[, <var>aTarget</var>[, <var>sWidth</var>[, <var>sHeight</var>[, <var>sOptions</var>]]]]<span
+ class="punct">)</span></code>
+
+Insert the following link to a HTML document. A click on it will run the
+function defined below and ask the user if he/she is willing to connect
+to the Internet because of an online link:
+
+&lt;a href="sURL" onClick='return(linkOut(sURL));'&gt;&lt;/a&gt;
+
+Replace the sURL argument with the URL of the document to be loaded.
+
+Note that the TARGET attribute is required only to avoid script errors
+when the link is placed within a frameset where the &lt;BASE TARGET=...&gt; tag
+has been used previously.
+
+The function appears useful in offline pages only. You should remove the
+event handler before the respective offline site is uploaded to a public
+server.
+Use the return value of linkOut (return(false) will cancel the event) to
+support users who have JavaScript available and enabled.
+Those users will receive the dialog box, other users will only see a
+popup window with the linked website.
+
+_______________________________________________________________________________
+
+function popUp(sURL, iWidth, iHeight, sOptions)
+
+Insert the following link to a HTML document. A click on it will run this
+function to open a browser child window:
+
+&lt;a href="URL" target="_new"
+ onClick='popUp("URL", aWidth, aHeight[,sOptions])'&gt;&lt;/a&gt;
+
+Note that the TARGET attribute is only necessary to avoid script errors
+when the link is placed within a frameset where the &lt;BASE TARGET=...&gt; tag
+has been used previously.
+
+The iWidth argument will specify the width in pixels, and the iHeight
+argument will specify the height in pixels of the new window using the
+features argument string of the JavaScript:window.open() function.
+
+The sOptions argument will modify the default features for the child window.
+For this argument pass a string that extends the features settings for the
+JavaScript:window.open() function. You may leave the comma at first position
+as it is implemented in the JSX:popUp() function.
+Refer the respective documentation for details of window features.
+Please do note that if an option is used more than one time, the final result
+of that option is undefined. Nevertheless, most browsers will then use the
+last option as argument.
+
+Use the return value of popUp (return(false) will cancel the event) to support
+users who have JavaScript available and enabled.
+All users will receive the window, those without JavaScript will have the
+window size defined not by your definitions but by browser defaults.
+
+_______________________________________________________________________________
+
+function OpenChildWin(sURL, iWidth, iHeight, sOptions)
+
+OpenChildWin(...) call is redirected to popUp(...) and contained for
+backward compatibility to previous versions only.
+It may become obsolete in future versions, use popUp(...) instead.
+
+_______________________________________________________________________________
+
+function LoadFrame(sURL, targetFrame)
+
+Insert the following script within the &lt;HEAD&gt;&lt;/HEAD&gt; section of HTML documents:
+
+&lt;script type="text/javascript"&gt;&lt;!--
+LoadFrame( sURL, targetFrame );
+//--&gt;&lt;/script&gt;
+
+Replace the sURL argument with the URL of the document that should be loaded
+within the frame specified with targetFrame. Double-quoted string recommended.
+Replace the targetFrame argument with a valid frame number or identifier.
+
+You can evaluate the functions success by its return value:
+
+RETURN VALUE MEANING
+false An invalid number of required arguments has been provided
+(targetFrame) The function failed because the passed frame does not exist
+(sURL) Success
+
+Please do note that unlike the Go(...) function (for dropdown objects;
+defined in dropdown.js) no exception is raised if the defined frame does not
+exist as LoadFrame() is designed to stay silent also in websites without
+framesets.
+
+_______________________________________________________________________________
+
+<code><a name="getObjInfo"><span class="rswd">function</span> getObjInfo<span
+ class="punct">(</span></a><a href="#getObjInfo_sObject"><var>sObject</var></a>[, <a
+ href="#getObjInfo_aWhat"><var>aWhat</var></a>[, <a
+ href="#getObjInfo_sStyle"><var>sStyle</var></a>[, <a
+ href="#getObjInfo_sHeader"><var>sHeader</var></a>[, <a
+ href="#getObjInfo_sFooter"><var>sFooter</var></a>]]]]<span
+ class="punct">)</span></code>
+
+Returns names of the attributes of an object and their respective
+value. Without formatting as HTML table (see below), attribute name
+and value/source code will be separated by &quot; = &quot;, where &quot; &quot; is the
+<code class="entity">&amp;nbsp;</code> character (%A0).
+
+Note:
+If the user agent does not grant permission to retrieve the value of an
+attribute, it is tried to use the error message that would have occurred
+as attribute value, enclosed in rectangle brackets (&quot;[&quot; and &quot;]&quot;).
+Since this behavior can only be achieved using the <a
+ href="http://web.archive.org/devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/stmt.html#1051663"
+ target="_blank"><code><span class="rswd">try</span>...<span
+ class="rswd">catch</span></code> statement</a> of
+(at least) JavaScript 1.5, the function uses the <code>document.getElementById(...)</code>
+method that accesses the W3C-DOM and is therefore distinct for JavaScript 1.5,
+to determine whether this is possible. If the test fails, you may encounter
+a script error or an &quot;unhandled exception&quot; error when retrieving those
+attributes, and with some script engines (like of Mozilla before 0.9.x) the
+whole operation would fail. This would be <strong>NOT</strong> a bug of this function, but
+a feature of the used script engine.
+ </pre>
+<dl>
+ <dt><var><a name="getObjInfo_sObject">sObject</a></var></dt>
+ <dd><pre>Required. String that evaluates to a JavaScript object from which
+to retrieve data. If the string does not evaluate to an object, the
+function will return "[Not an object]" without header and footer
+(see below). In this case, no exception is raised.
+
+<a href="#getObjInfo">Argument list</a></pre></dd>
+ <dt><var><a name="getObjInfo_aWhat">aWhat</a></var></dt>
+ <dd><pre>Optional. Either a <a href="#regexp">RegExp</a> that the names of attributes to retrieve
+should match or a case-insensitive string consisting of one or more
+of the following characters, specifying the type of attributes to
+retrieve:</pre>
+ <dl>
+ <dt><code>&quot;P&quot;</code></dt>
+ <dd><pre>Properties. Values of string properties will be retrieved
+as double-quoted strings, other properties as they are.
+If an object does not have any properties, the function
+returns a <a href="#def">null string</a>.
+This option overwrites the &quot;O&quot; option described below.</pre></dd>
+ <dt><code>&quot;M&quot;</code></dt>
+ <dd><pre>Methods. If possible, this also returns the source
+code of methods. If an object does not have methods,
+the function returns a <a href="#def">null string</a>.</pre></dd>
+ <dt><code>&quot;O&quot;</code></dt>
+ <dd><pre>Objects. Returns properties that are composed objects.
+If an object does not have object properties, the function
+returns a <a href="#def">null string</a>.</pre></dd>
+ </dl>
+ <pre>Other characters will be accepted, but ignored. If <var>aWhat</var> is a <a
+ href="#def">null string</a>
+or contains only characters not defined herein, the function will return
+all attributes of <var><a href="#getObjInfo_sObject">sObject</a></var>.
+
+<a href="#getObjInfo">Argument list</a></pre></dd>
+ <dt><var><a name="getObjInfo_sStyle">sStyle</a></var></dt>
+ <dd><pre>Optional. Case-insensitive string consisting of one or more of
+the following characters, specifying how the returned string
+will be formatted:</pre>
+ <dl>
+ <dt><code>&quot;L&quot;</code></dt>
+ <dd><pre>Line. Separate attribute/value pairs by &quot;; &quot;.
+Useful if an object has many attributes, thus the bottom
+of a message box displaying the returned string with line-
+breaks (see example below) would probably extend <code><span
+ class="ident">alert</span><span class="punct">(</span>...<span
+ class="punct">)</span></code>
+window and/or screen height.</pre></dd>
+ <dt><code>&quot;H&quot;</code></dt>
+ <dd><pre>HTML. Separate attribute/value pairs by <span
+ class="tags">&lt;br /&gt;</span>.
+Useful if the result of the function should be
+used for display in HTML documents.</pre></dd>
+ <dt><code>&quot;T&quot;</code></dt>
+ <dd><pre>Table. Format the result as a HTML table, with
+the attribute's name in the first column and the
+attribute's value in the other one. Very useful
+in HTML documents.</pre></dd>
+ <dt><code>&quot;S&quot;</code></dt>
+ <dd><pre>Show type of attribute. In HTML table formatting,
+a column is inserted between the attribute name
+column and the attribute value column to display
+the desired information. Otherwise, the attribute
+value is followed by <code>&quot; : &quot;</code> followed by its type,
+where &quot; &quot; is the <code class="entity">&amp;nbsp;</code> character.</pre></dd>
+ </dl>
+ <pre>With <code>&quot;H&quot;</code> or <code>&quot;T&quot;</code> provided, HTML formatting is enabled, thus that
+the attribute name is enclosed in <span class="tags">&lt;code&gt;&lt;b&gt;</span>...<span
+ class="tags">&lt;/b&gt;&lt;/code&gt;</span>, which
+displays it with a fixed pitch font and bold style on most browsers.
+
+Other values will separate properties/methods by LF.
+
+<a href="#getObjInfo">Argument list</a></pre></dd>
+ <dt><var><a name="getObjInfo_sHeader">sHeader</a></var></dt>
+ <dd><pre>Optional. String containing an additional header for the string to
+return, appended at the beginning. It is followed by 2 LF characters
+if not formatted for HTML output.
+If not provided, <code class="rswd">null</code> or a <a href="#def">null string</a>, the default header is used
+that is defined as &quot;<span class="punct">(</span>Attributes | <span
+ class="punct2">(</span>(Properties | Composed Objects)
+([and] Methods)<span class="punct2">)</span><span class="punct">)</span> of {<var><a
+ href="#getObjInfo_sObject">sObject</a></var>}&quot;, depending on the value of <var><a
+ href="#getObjInfo_aWhat">aWhat</a></var>.
+If &quot;-&quot; is provided, no header will be generated.
+
+<a href="#getObjInfo">Argument list</a></pre></dd>
+ <dt><var><a name="getObjInfo_sFooter">sFooter</a></var></dt>
+ <dd><pre>Optional. String containing an additional footer for the
+string to return, appended at the end. It is preceded by
+2 LF characters if not formatted for HTML output.
+If not provided, <code class="rswd">null</code> or a <a href="#def">null string</a>, the default footer
+is used that is defined as the function's Copyright string,
+including hyperlinks to the function's documentation
+(with HTML formatting only). If &quot;-&quot; is provided, no footer
+will be generated.
+
+<a href="#getObjInfo">Argument list</a></pre></dd>
+</dl>
+<pre>
+Example:
+
+Include the following script section in the <span class="tags">&lt;head&gt;</span>...<span
+ class="tags">&lt;/head&gt;</span> section of an
+HTML document:
+
+ <span class="scr">&lt;script type="text/javascript"&gt;</span>
+ <span class="comm">&lt;!--</span>
+ <span class="rswd">alert</span><span class="punct">(</span>getObjInfo<span
+ class="punct">(</span><span class="str">&quot;sObject&quot;</span><span
+ class="punct">,</span> cWhat<span class="punct">,</span> sStyle<span
+ class="punct">,</span> sHeader<span class="punct">,</span> sFooter<span
+ class="punct">));</span>
+ <span class="comm">//--&gt;</span>
+ <span class="scr">&lt;/script&gt;</span>
+
+Now replace <var>sObject</var> with a string that evaluates to a JavaScript object from
+which to retrieve data. Replace <var>cWhat</var>, <var>sStyle</var>, <var>sHeader</var>, <var>sFooter</var> with
+appropriate strings as described above or leave the last argument(s) out
+(optional arguments). When you load the HTML document you will see
+a message box displaying the attributes of the object you requested and
+their respective value.
+
+_______________________________________________________________________________
+
+function ObjectInspector(sObject)
+
+Creates a JavaScript-written popup containing a form that allows retrieval
+of the attributes of an object and their value.
+
+ARGUMENT MEANING
+sObject Optional. Should define the root object from which to process
+ attributes. Currently unused.
+ The default root object is "window".
+
+Example:
+
+Include the following script section at the bottom of the &lt;BODY&gt;...&lt;/BODY&gt;
+section of the HTML document to be analyzed.
+
+&lt;script src="enhanced.js" type="text/javascript"&gt;&lt;/script&gt;
+&lt;script type="text/javascript"
+ &gt;&lt;!--
+ ObjectInspector();
+ //--&gt;
+&lt;/script&gt;
+
+Note:
+
+The sInspectorVersion public variable defined in enhanced.js provides
+a string containing the current ObjectInspector() version.
+ </pre>
+<hr>
+<p>END OF FILE</p>
+</body>
+</html>
Index: live/doc/historic/search.htm
===================================================================
--- live/doc/historic/search.htm (nonexistent)
+++ live/doc/historic/search.htm (revision 509)
@@ -0,0 +1,436 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PointedEars' JavaScript Extensions (JSX): search.js</title>
+<style type="text/css">
+code {
+ font-family: "Courier New", Courier, monospace;
+}
+
+.entity {
+ color: #000000;
+ font-weight: bold;
+ font-style: italic;
+ font-family: "Courier New", Courier, monospace;
+}
+
+.tags {
+ color: #000080;
+}
+
+.scr {
+ color: #800000;
+}
+
+.a {
+ color: #008000;
+}
+
+.comm {
+ color: #808080;
+ font-style: italic;
+ font-family: "Courier New", Courier, monospace;
+}
+
+.ident {
+ color: #000000;
+ font-weight: bold;
+ font-family: "Courier New", Courier, monospace;
+}
+
+.rswd {
+ color: #000080;
+ font-weight: bold;
+ font-family: "Courier New", Courier, monospace;
+}
+
+.arg,.str {
+ font-style: italic;
+ font-family: "Courier New", Courier, monospace;
+}
+
+.num {
+ color: #ff00ff;
+}
+
+.punct {
+ color: #0000ff;
+ font-family: "Courier New", Courier, monospace;
+}
+
+dl {
+ margin-top: 0px;
+}
+
+dt {
+ margin-top: 1em;
+}
+</style>
+</head>
+
+<body>
+<h1><a name="top">PointedEars' JavaScript Extensions (JSX)</a></h1>
+<h2>search.js</h2>
+<pre>
+
+ORIGINAL FILENAME: <a href="search.js">search.js</a>
+PURPOSE: <a href="#def" title="Show definition">Search-string</a> support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.1
+FILE VERSION: 1.06.2003.11
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: <a href="string.htm"
+ title="View documentation of JSX:string.js">JSX:string.js</a>
+ </pre>
+<h3>Contents</h3>
+<ul>
+ <li><a href="#features">Features provided by this script</a></li>
+ <li><a href="#testlist">List of browser tests</a></li>
+ <li><a href="#history">Version history</a></li>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+ <li><a href="#def">Expressions used herein</a></li>
+ <li><a href="#details">Detailed description of features</a></li>
+ <li><a href="#faq">FAQ -- Frequently Asked Questions</a></li>
+</ul>
+<p align="center" style="font-size: small;">Created with<br>
+<a href="http://quanta.sourceforge.net/" target="_top"><img
+ src="../media/quanta.png" alt="Quanta Plus" width="32" height="32"
+ border="0"></a> <a
+ href="http://www.macromedia.com/software/homesite/" target="_top"><img
+ src="../media/homesite3.gif" alt=" | Macromedia HomeSite | "
+ width="44" height="34" border="0"></a> <a
+ href="http://www.macromedia.com/software/dreamweaver/" target="_top"><img
+ src="../media/dreamweaver2.gif" alt="Macromedia Dreamweaver MX"
+ width="44" height="34" border="0"></a></p>
+<p align="center" style="font-size: small;"><a
+ href="http://validator.w3.org/check/referer" target="_top"><img
+ src="../media/valid-html401.png" alt="This is valid HTML 4.01, "
+ width="88" height="31" border="0"></a> <a
+ href="http://jigsaw.w3.org/css-validator/check/referer" target="_top"><img
+ src="../media/valid-css.png" alt="valid CSS "
+ style="border: 0; width: 88px; height: 31px"></a> <a
+ href="http://www.anybrowser.org/campaign/" target="_top"><img
+ src="../media/anybrowser.gif"
+ alt="and therefore optimized for ALL browsers!" width="88" height="31"
+ border="0"></a></p>
+<hr>
+<h4><a name="features">Features Provided By This Script</a></h4>
+<ul>
+ <li><pre><a href="#SearchString"><code>SearchString</code></a> prototype</pre></li>
+ <li><pre><a href="#globvar"><code>searchStringVersion</code></a> global variable</pre></li>
+</ul>
+<pre> </pre>
+<h4><a name="testlist">Tested To Work At Least With</a></h4>
+<pre><!-- <script type="text/javascript">
+ document.write(navigator.userAgent);
+</script>
+ -->
+ Mozilla 1.6a Nightly
+ [Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6a)
+ Gecko/20031025]
+ Mozilla 1.5b Nightly
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5b)
+ Gecko/20030811]
+ Mozilla 0.9.8 de-AT
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8)
+ Gecko/20020204]
+ Microsoft Internet Explorer 6.0 build 2600
+ [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 3.0)]
+
+<a href="#top">Goto top</a>
+
+</pre>
+<h4><a name="history">Version History</a></h4>
+
+<pre>
+1.06.2003.11 (2003-11-19)
+-------------------------
+* Allows for storing more than one value for a name
+* Changed from array-based search to property lookup;
+ removed <code>Value</code> prototype
+* Use decodeURIComponent(...) if available, unescape
+ or a dummy function
+* Updated documentation:
+ - Completed <a href="JSDoc/">JavaScriptDoc</a>&trade;.
+ - Use asterisks at the beginning of multi-line comments.
+ - Changed order of HTML documentation sections, updated
+ headings.
+
+1.05.2003.11 (2003-11-18)
+-------------------------
+* Updated documentation:
+ - Use <a href="JSDoc/">JavaScriptDoc</a>&trade; for newly edited code.
+* [to do]
+
+1.04.2003.10 (2003-10-??)
+-------------------------
+* Renamed <code>TSearchStr</code> to <code>SearchString</code>
+* Updated references to deprecated <tt>enhanced.js</tt> in the
+ documentation
+* [to do]
+
+1.03.200?.? (?)
+-------------------------
+[to do]
+
+1.02.200?.? (?)
+-------------------------
+[to do]
+
+1.01.200?.? (?)
+-------------------------
+[to do]
+
+1.00.2000.8 (2000-08-13)
+-------------------------
+Introduced <code>TSearchStr</code> prototype
+
+<a href="#top">Goto top</a>
+
+</pre>
+<h4><a name="copyright">Copyright &amp; Disclaimer</a></h4>
+
+<pre>COPYRIGHT (c) 2000-2002 Thomas Lahn (PES).
+<a href="mailto:search.js@PointedEars.de">mailto:search.js@PointedEars.de</a>
+
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License (GPL) for more details.
+
+You should have received a copy of the GNU GPL along with this
+program (COPYING file); if not, go to [1] or write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA.
+
+[1] &lt;<a href="http://www.gnu.org/licenses/licenses.html#GPL">http://www.gnu.org/licenses/licenses.html#GPL</a>&gt;
+
+<a href="#top">Goto top</a>
+
+ </pre>
+<h4><a name="def">Expressions Used Herein</a></h4>
+<dl>
+ <dt>search-string</dt>
+ <dd><pre>The part of a URI following the question mark (&quot;?&quot;) character.
+This string may contain a number of pairs of required names and
+associated values. A value may be the <a href="#def">empty&nbsp;string</a>.
+A name and its associated value are to be separated from each
+other by an equals (&quot;=&quot;), each name/value pair is to be separated
+from the other by an ampersand (&quot;&amp;&quot;):
+
+ name1=value1&amp;name2=&amp;name3&amp;name4=value4...</pre></dd>
+ <dt>empty string</dt>
+ <dd><pre>A string that contains no characters, i.e. is of length 0.</pre></dd>
+</dl>
+<pre>
+
+<a name="details">Following the detailed description of the features of this script file.</a>
+_______________________________________________________________________________
+
+<a name="SearchString"><code>SearchString</code> prototype</a>
+---------------------
+
+The <code>SearchString</code> prototype encapsulates associated names and
+values of a <a href="#def" title="Show definition">search-string</a>.
+
+<code>SearchString<span class="punct">(</span>[<span class="arg">s</span>]<span
+ class="punct">)</span></code>
+
+Constructor arguments:
+
+<code><span class="arg">s</span></code> Original <a href="#def"
+ title="Show definition">search-string</a>. Optional. If not provided or not
+ a string, `location.search' is assumed. The object will
+ then have no properties if access to `location.search'
+ fails.
+
+Non-Function Properties:
+
+<code>text</code> The full <a href="#def" title="Show definition">search-string</a> without the leading &quot;?&quot; and
+ &quot;%26&quot; entities converted to &quot;&amp;&quot;.
+<code>length</code> Length of <code>text</code>.
+<code>values</code> Object that stores the values defined in the
+ <a href="#def" title="Show definition">search-string</a>.
+ Each name is a property of that object, the value of the
+ property is the value assigned to the name. If more than
+ one value has been assigned to a name, the property is an
+ array where each element is an assigned value.
+
+Function Properties (Methods):
+
+<code><a href="#isName">isName</a></code> Returns <code class="rswd">true</code> if a name is contained in the search-string.
+<code><a href="#hasValue">hasValue</a></code> Returns <code
+ class="rswd">true</code> if a name is contained in the search-string
+ and has a value different from the <a href="#def"
+ title="Show definition">empty string</a>.
+<code><a href="#getValue">getValue</a></code> Returns the value of a name as a string. If the name is
+ not contained in the search-string, an <a href="#def"
+ title="Show definition">empty string</a> is
+ returned.
+
+Usage:
+
+Provide a string with a structure described above as constructor
+argument of the prototype. This will convert the string to an
+array with names and values as the properties of each item of this
+array where undefined values are assigned as <a href="#def">empty strings</a>:
+
+ <code><span class="rswd">var</span> s <span class="punct">=</span> <span
+ class="rswd">new</span> SearchString<span class="punct">(</span>location<span
+ class="punct">.</span>search<span class="punct">)</span>;</code>
+
+Then you can use the object's methods to access its properties
+easily:
+
+<a name="isName">Use the <code>isName<span class="punct">(</span>...<span
+ class="punct">)</span></code> method to determine whether a name has been
+provided with the string or not:</a>
+
+ <code><span class="rswd">if</span> <span class="punct">(!</span> s<span
+ class="punct">.</span>isName<span class="punct">(</span><span
+ class="str">&quot;url&quot;</span><span class="punct">))</span>
+ <span class="ident">alert</span><span class="punct">(</span><span
+ class="str">&quot;Required name 'url' missing!&quot;</span><span
+ class="punct">)</span>;</code>
+
+<a name="hasValue">Use the <code>hasValue<span class="punct">(</span>...<span
+ class="punct">)</span></code> method to determine whether a name has a
+value different from the </a><a href="#def">empty string</a>:
+
+ <code><span class="rswd">if</span> <span class="punct">(</span>s<span
+ class="punct">.</span>hasValue<span class="punct">(</span><span
+ class="str">&quot;test&quot;</span><span class="punct">))</span>
+ document<span class="punct">.</span><span class="ident">write</span><span
+ class="punct">(</span><span class="str">&quot;This is only a test&quot;</span><span
+ class="punct">)</span>;</code>
+
+<a name="getValue">Use the <code>getValue<span class="punct">(</span>...<span
+ class="punct">)</span></code> method to retrieve the value of a provided
+name:</a>
+
+ <code><span class="rswd">if</span> <span class="punct">(</span>s<span
+ class="punct">.</span><a href="#hasValue">hasValue</a><span
+ class="punct">(</span><span class="str">&quot;url&quot;</span><span
+ class="punct">))</span>
+ frames<span class="punct">[</span><span class="num">0</span><span
+ class="punct">].</span>location<span class="punct">.</span>href <span
+ class="punct">=</span> s<span class="punct">.</span>getValue<span
+ class="punct">(</span><span class="str">&quot;url&quot;</span><span
+ class="punct">)</span>;</code>
+
+With these methods, names are accessed case-insensitive by
+default. If you need case-sensitivity, add <code class="rswd">true</code> as second
+argument to the method calls:
+
+ <code><span class="rswd">if</span> <span class="punct">(</span>s<span
+ class="punct">.</span><a href="#hasValue">hasValue</a><span
+ class="punct">(</span><span class="str">&quot;URL&quot;</span>, <span
+ class="rswd">true</span><span class="punct">))</span>
+ frames<span class="punct">[</span><span class="num">0</span><span
+ class="punct">].</span>location<span class="punct">.</span>href <span
+ class="punct">=</span> s<span class="punct">.</span><a
+ href="#getValue">getValue</a><span class="punct">(</span><span
+ class="str">&quot;URL&quot;</span><span class="punct">,</span> <span
+ class="rswd">true</span><span class="punct">)</span>;</code>
+
+<a href="#features">Goto list of features</a>
+<a href="#top">Goto top</a>
+
+
+<a name="globvar"><code>searchStringVersion</code> global variable</a>
+----------------------------------
+
+The initial value of the <code>searchStringVersion</code> variable shows the
+version of the library containing the <code><a
+ href="#SearchString">SearchString</a></code> prototype you
+are using. This can be displayed, e.g. if you use the
+<code>window<span class="punct">.</span><span class="ident">alert</span><span
+ class="punct">(</span>...<span class="punct">)</span></code> method with that variable as argument.
+
+<a href="#features">Goto list of features</a>
+<a href="#top">Goto top</a>
+
+
+<a name="how-to">HOW TO USE:</a>
+
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as search.js and
+appending the following sections within the <code><span
+ class="tags">&lt;head&gt;...&lt;/head&gt;</span></code> tags
+of that documents:
+
+<code><span class="scr">&lt;script src=&quot;string.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</span>
+<span class="scr">&lt;script src=&quot;search.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</span></code>
+
+<a href="#top">Goto top</a>
+
+</pre>
+<h4><a name="faq">FAQ (Frequently Asked Questions)</a></h4>
+<ul>
+ <li><pre><a href="#faq-error">Strange error messages with Internet Explorer and Netscape</a></pre></li>
+</ul>
+<pre>
+<a href="#top">Goto top</a>
+
+</pre>
+<h5><a name="faq-error">Strange error messages with Internet
+Explorer and Netscape</a></h5>
+<pre>
+Q: When I include the search.js library into my HTML/script, in
+ Netscape/Mozilla I get an <cite>&quot;Alert&quot;</cite> message saying a necessary
+ <cite>&quot;file&quot; [filename] &quot;cannot be found&quot;</cite>. [filename] has the form
+ of [pathname] &quot;/%3Cnoscript%3E%3CFRAMESET%20rows=&quot;. But I
+ have not specified such a filename in my documents/scripts!
+
+ Instead, Internet Explorer shows either no alert message or
+ this one:
+
+ ,-----------------------------------------------------.
+ | Line: [number] |
+ | Column: [number] |
+ | Error: Object expected |
+ | Code: 0 |
+ | URL: [fully qualified path of the HTML document] |
+ `-----------------------------------------------------'
+
+ Then, when I click the <cite>&quot;OK&quot;</cite> button of this alert message it
+ shows <cite>&quot;Error 404: File not found&quot;</cite> (or anything similar) in the
+ browser window, with the address bar containing a URL that has
+ the form of [pathname] &quot;/&lt;noscript&gt;&lt;FRAMESET%20rows=&quot;.
+
+ What have I done wrong?
+
+A: This occurs if the <a href="string.htm"
+ title="View documentation of JSX:string.js">JSX:string.js</a> script has <strong>not</strong> been included
+ <strong>before</strong> including the search.js library and you try to use
+ <code>SearchString</code> for a dynamic frameset.
+
+ <code>search.js</code> now requires <a href="string.htm"
+ title="View documentation of JSX:string.js">JSX:string.js</a> because the latter contains
+ the <code><a href="string.htm#replaceText"
+ title="View documentation of JSX:string.js:replaceText(...)">replaceText</a><span
+ class="punct">(</span>...<span class="punct">)</span></code> function that is called by the constructor
+ of <code>SearchString</code> to replace HTML entities like <span
+ class="entity">&amp;nbsp;</span> with the
+ respective ASCII characters (here: <code>unescape<span
+ class="punct">(</span><span class="str">&quot;%A0&quot;</span><span
+ class="punct">)</span></code>; you'll see
+ that in the Netscape/Mozilla JavaScript Console under the &quot;Task&quot;
+ menu, &quot;Tools&quot; submenu.)
+ Include <a href="string.htm"
+ title="View documentation of JSX:string.js">JSX:string.js</a> in the correct order <a
+ href="#how-to">as described above</a> and
+ the problem should not occur again.
+ This is a known issue and I am working on a cross-platform bugfix.
+
+<a href="#top">Goto top</a>
+ </pre>
+</body>
+</html>
Index: live/doc/historic/multimedia.html
===================================================================
--- live/doc/historic/multimedia.html (nonexistent)
+++ live/doc/historic/multimedia.html (revision 509)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PointedEars' JavaScript Extensions (JSX): enhancd2.js</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+
+<body>
+<h1>PointedEars' JavaScript Extensions (JSX)</h1>
+<h2>enhancd2.js</h2>
+<pre>
+
+ORIGINAL FILENAME: enhancd2.js
+PURPOSE: Provides level-2 enhanced web site features
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.18.2002.2;
+ See enhanced2Version variable intialization in
+ script file.
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: <a href="enhanced.htm"
+ title="View documentation of JSX:enhanced.js">JSX:enhanced.js</a>, v1.08.2000.3 or later
+
+<h3>Contents</h3>
+<ul>
+ <li><a href="#features">Features provided by this script</a></li>
+ <li><a href="#testlist">List of browser tests</a></li>
+ <li><a href="#history">Version history</a></li>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+ <li><a href="#details">Detailed description of features</a></li>
+</ul>
+
+
+<a name="features">FEATURES PROVIDED BY THIS SCRIPT:</a>
+
+linkOutWin Questions the user before following an online link and
+ if confirmed, displays the result in a new window.
+ Calls and returns enhanced.js:linkOut(...).
+enlargeImg Opens a dependent browser child window with an
+ enlarged image. (Previously addressed by Enlarge(...)
+ function, see version history info above.)
+maximize Maximizes the width and height of the browser window.
+playSound Plays a sound file (experimental)
+
+
+<a name="testlist">TESTED TO WORK AT LEAST WITH:</a>
+
+ Mozilla 1.0 Release Candidate 2
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc2)
+ Gecko/20020510]
+ Mozilla 1.0 Release Candidate 1 nightly
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc1)
+ Gecko/20020417]
+ Mozilla 0.9.9
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.9)
+ Gecko/20020311]
+ Mozilla 0.9.8 de-AT
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8)
+ Gecko/20020204"
+ Mozilla 0.9.6 de-AT
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.6)
+ Gecko/20011120"
+ Netscape 6.2.1
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:0.9.4)
+ Gecko/20011128 Netscape6/6.2.1"
+ Opera 6.0 [de]
+ "Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [de]"
+ Microsoft Internet Explorer 6.00.2600.0000 (SP-2)
+ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461;
+ Hotbar 3.0)"
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+ Microsoft Internet Explorer 5.01, displayed 5.00.2919.6307IC
+ Microsoft Internet Explorer 5.00, displayed 5.00.2314.1003IC
+ Netscape Navigator 4.74
+
+
+<a name="history">VERSION HISTORY:</a>
+
+1.20.2002.4 (2002-04-22)
+-------------------------
+First version under the terms of the GNU GPL, version 2 or later.
+
+1.18.2002.2 (2002-02-28)
+-------------------------
+- Updated hoverImg(...) function:
+ Now supports W3C-DOM of both NN 6+/Mozilla 0.9+ and IE 6+.
+
+1.17.2002.2 (2002-02-23)
+-------------------------
+- Updated enlargeImg(...) function:
+ Fixed bad bug with Mozilla/Netscape. Version of Mozilla newer than
+ 0.9.6. and of Netscape newer than 6.1 do assign "about:blank" to a
+ temporary document which causes relative paths used for its resources
+ to be invalid. Further use of relative paths is provided by an
+ algorithm, used in JSX:<a href="outline.txt">outline.js</a> before and now improved, that calculates
+ the correct absolute path when provided the caller document's URL.
+
+1.16.2002.2 (2002-02-05)
+-------------------------
+- Updated enlargeImg(...) function:
+ Changed back to wImage.document because Opera's document.open(...)
+ function does not return the created object --> dImage is useless :(
+- Documentation update: Changed to HTML format
+
+1.15.2002.1 (2002-01-26)
+-------------------------
+- Updated enlargeImg(...) function:
+ Now uses previously defined dImage variable instead of wImage.document
+
+1.14.2002.1 (2002-01-18)
+-------------------------
+- Updated enlargeImg(...) function:
+ Masked / in written closing tags with \/ (backslash-slash) as
+ described in <a href="http://selfhtml.teamone.de/" target="_blank">SELFHTML 8.0</a>
+- Documentation update:
+ Word wrap at 72 characters (applies to documentation standards),
+ and version history is no longer in columns but separate paragraphs.
+
+1.13.2001.9 (2001-09-11)
+-------------------------
+Removed maximize() function:
+When used with virtual desktops larger than the physical resolution
+(screen), setting the window size to screen.width and screen.height
+causes the window to occupy the desktop but exceed the screen size,
+thus the browser window blocks the other desktop content.
+With this course of action it is intended not to support designers
+causing this undesired behavior on the computers of certain users.
+
+1.12.2001.4 (2001-04-03)
+------------------------
+Updated enlargeImg(...) function:
+Now checks if created window object exists and focuses it after creating
+its document (always focuses the popup, even if already open).
+
+1.11.2001.2 (2001-02-05)
+-------------------------
+Updated enlargeImg(...) function:
+Now allows to close zoom window when clicking on enlarged image and
+displays tooltip on mouse over.
+
+1.10.2001.1 (2001-01-11)
+-------------------------
+Moved general documentation to text file for faster processing.
+
+1.09.2000.11 (2000-11-24)
+--------------------------
+- Improved linkOutWin(...) function:
+ Now returns value of linkOut(...) (always false) for combined use
+ in both HREF attribute and onClick event handler of <span class="a">&lt;a&gt;</span>...<span
+ class="a">&lt;/a&gt;</span> tag.
+- Established string variable named enhanced2Version to contain
+ library version.
+
+1.08.2000.10 (2000-10-30)
+--------------------------
+Improved maximize() function due to Netscape missing screen.left
+
+1.07.2000.10 (2000-10-17)
+--------------------------
+- Improved Enlarge(...) function:
+ - Fixed BUG_Enlarge:ALWAYS_FIT-TO-IMAGE (see code).
+ - Changed window name for temporary HTML document to "wndZoom".
+ - Renamed to "enlargeImg". Compatibility by internal redirection.
+- Bugfixed exception calls.
+- Improved inline documentation.
+
+1.06.2000.9 (2000-09-25)
+-------------------------
+Improved Enlarge(...) function:
+- iWidth and iHeight arguments are not longer mandatory
+ (moved to third and fourth argument) due to use of temporary
+ HTML document that displays the image and uses inline JavaScript code
+ to resize the window to fit image automatically
+ (standalone version; does neither utilize JSX:enhanced.js:popUp(...)
+ nor elements from document.js).
+- Additionally established window caption for second argument;
+ optional, uses image URL if not provided.
+
+1.05.2000.8 (2000-08-13)
+-------------------------
+Tested script file successfully with IE5.5
+
+1.04.2000.7 (2000-06-10)
+-------------------------
+- Changed function names beginning with lowercase character.
+- Added playSound(...) function.
+
+1.03.2000.6 (2000-06-10)
+-------------------------
+- Changed OpenChildWin(...) call to popUp(...) and moved to enhanced.js
+- Improved Enlarge(...) function to display dependent browser
+ child window (with Netscape and compatibles only).
+- Improved documentation texts.
+
+1.02.2000.4 (2000-04-06)
+-------------------------
+Added Maximize(...) function.
+
+1.01.2000.3 (2000-03-24)
+-------------------------
+Added Enlarge(...) function.
+
+1.00.2000.3 (2000-03-23)
+-------------------------
+Added linkOutWin(...) function.
+
+
+<a name="copyright">Copyright (c) 1999-2002 Thomas Lahn</a> &lt;<a
+ href="mailto:webmaster@PointedEars.de?subject=Feedback/JSX/enhancd2">webmaster@PointedEars.de</a>&gt;
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the <a
+ href="http://www.gnu.org/copyleft/gpl.html" target="_blank">GNU General Public License</a>
+as published by the <a href="http://www.fsf.org/" target="_blank">Free Software Foundation</a>; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program (<a href="COPYING" target="_blank">COPYING</a> file); if not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+
+HOW TO USE:
+Note that this script depends on elements defined in JSX:enhanced.js
+For dependent scripts, the referred script file (enhanced.js) needs to
+be loaded previously and should be loaded only one time per document.
+To avoid providing the required elements in enhanced.js via copy&paste,
+I recommend to utilize the functions of this script in (different)
+HTML documents when saving the entire file as enhancd2.js and appending
+the following sections within the &lt;head&gt;&lt;/head&gt; tags of these documents:
+
+<span class="scr">&lt;script src="enhanced.js" type="text/javascript"&gt;&lt;/script&gt;
+&lt;script src="enhancd2.js" type="text/javascript"&gt;&lt;/script&gt;</span>
+
+If dependencies cannot be resolved, you will always get a
+JavaScript error even if there are no bugs herein.
+
+
+<a name="details">Following the detailed description of the features of this script.</a>
+_______________________________________________________________________________
+
+function enlargeImg(sImageURL, sCaption, iWidth, iHeight, bCenter)
+
+The function defined below will open an independent browser child window
+(here: popup) calling the window.open(...) and document.open(...)
+functions to display the enlarged image of a thumbnail the user has
+clicked.
+Arguments: Pass the URL of the enlarged image, optionally the caption
+of the popup (if you leave it the URL is used as caption).
+Pass also width and/or height as arguments to override
+fit-window-to-image feature which results in the following behavior
+(disable automatic line-wrap and use fixed font for proper display):
+
+sImageURL sCaption iWidth iHeight
+------------------------------------------------------------------------
+ - ( ) ( ) ( )
+enhanced.js:EInvalidArgNum exception is raised
+
+ + ( ) ( ) ( )
+Use sImageURL as caption, fit-window-to-image horizontally & vertically
+
+ + x ( ) ( )
+Use sCaption as caption, fit-window-to-image horizontally & vertically
+
+ + x x (0)
+Window width is defined by iWidth, fit-window-to-image vertically
+
+ + x 0 (x)
+Window height is defined by iHeight, fit-window-to-image horizontally
+
+ + x x x
+Window size is defined by iWidth and iHeight
+
+Legend:
+ - Required argument not passed;
+ + Required argument passed;
+ x Mandatory optional argument passed except zero;
+ 0 Zero ("0") passed for mandatory optional argument;
+ ( ) Optional argument not passed;
+ (0) Optional argument not passed, or zero passed;
+ (x) Optional argument not passed, or passed but not zero;
+
+The fifth argument, bCenter, is a Boolean expression that is true by
+default.
+You may pass an expression that returns false if you define the size of
+the popup by yourself. If bCenter==false, the popup will not be
+positioned in the center of the screen automatically but its left top
+corner is defined by the browser defaults (usually cascaded with other
+windows.)
+Pass iWidth=0 and/or iHeight=0, and bCenter=false if you wish the popup
+to be automatically resized horizontally and/or vertically, but not
+to be centered.
+
+NOTE:
+This feature had been previously addressed by the Enlarge(...) function
+with less arguments and therefore less possibilities to influence the
+display behavior (see below).
+Calls to Enlarge(...) are possible furthermore as they redirect
+internally to enlargeImg(...), incl. exceptions. Nevertheless, calling
+Enlarge(...) disables you to define whether the popup should be centered
+as the old function definition is not being updated.
+New scripts should call enlargeImg(...) anyway instead because
+Enlarge(...) may become obsolete in future versions.
+
+________________________________________________________________________
+
+function Enlarge(sImageURL, sCaption, iWidth, iHeight)
+
+Enlarge(...) call redirects to enlargeImg(...) for compatibility with
+previous versions.
+
+________________________________________________________________________
+
+function maximize()
+
+Maximizes the browser window.
+
+________________________________________________________________________
+
+function playSound( sSoundFile, Loop, sAttrib ) {
+
+Plays a sound file as background sound if the insertAdjacentHTML method
+is supported (currently on JScript browsers like IE5+ only, hence tests
+document.all object before).
+
+Note: If you specify the SRC or LOOP attributes in sAttrib, then
+sSoundFile and Loop will overwrite the respective values.
+________________________________________________________________________
+END OF FILE
+
+ </pre>
+</body>
+</html>
\ No newline at end of file
Index: live/doc/historic/outline.txt
===================================================================
--- live/doc/historic/outline.txt (nonexistent)
+++ live/doc/historic/outline.txt (revision 509)
@@ -0,0 +1,144 @@
+ORIGINAL FILENAME: outline.js
+PURPOSE: Support for outline-styled structure using
+ Dynamic HTML statements
+SCRIPT LANGUAGE/VERSION: JavaScript 1.1, JScript
+REQUIRED HTML VERSION: 4.0
+FILE VERSION: 1.15.2001.4
+
+TESTED WITH (navigator.userAgent):
+
+ Mozilla/5.0 (X11; U; Linux 2.2.16 i586; de-DE; m18)
+ Gecko/20010131 Netscape6/6.01
+ (with this browser, outline features are not available
+ [missing document.all object], but file won't produce
+ serious script errors)
+ Microsoft Internet Explorer 5.50.4134.0600IC
+ Microsoft Internet Explorer 5.01 ("5.00.2919.6307IC")
+ Microsoft Internet Explorer 5.00.2314.1003IC
+
+
+TERMS OF USE:
+
+ JSX:outline.js - Support for outline-styled structure using DHTML statements
+ Copyright (C) 1999-2001 Thomas Lahn
+ mailto:webmaster@PointedEars.de?subject=Feedback/JSX/outline
+ Check http://PointedEars.de/dev/jsx/outline/ for new versions.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program (COPYING file); if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+VERSION HISTORY (current on top):
+
+ =============================================================================
+ Version Date Changes
+ =============================================================================
+ 1.15.2001.4 2001-04-10 Fixed some nesting errors in parantheses and
+ conditionals (THNX 2 Netscape!)
+ Updated /doc (indent and more), now also includes
+ a tiny CSS section (2 B cont'd)
+ Updated "terms of use" section:
+ Now applies to the GNU GPL(!) 2 and later
+ -----------------------------------------------------------------------------
+ 1.14.2001.3 2001-03-24 Updated pretty printing (parantheses/quotes),
+ e-mail address and /doc
+ 1.13.2001.1 2001-01-24 Updated alert message: Netscape 4 Linux does not
+ line-break.
+ -----------------------------------------------------------------------------
+ 1.12.2001.1 2001-01-11 Moved general documentation to text file for
+ faster processing.
+ -----------------------------------------------------------------------------
+ 1.11.2000.7 2000-07-06 Fixed targetID:invalid_object bug in clickHandler()
+ -----------------------------------------------------------------------------
+ 1.10.2000.7 2000-07-03 Fixed some mysterious bugs with IE5.01
+ on string arguments and large HTML documents
+ by assigning those strings to local variables
+ and splitting string assignments (+= Workaround).
+ Changed email subject line to Feedback/JSX/outline.
+ -----------------------------------------------------------------------------
+ 1.09.2000.4 2000-04-22 Fixed NoObject (FOR loop) bug in FullTree()
+ 1.08.2000.4 2000-04-22 Improved message for ENoTarget exception
+ Added "user modifications" section and improved
+ "terms of use" section
+ -----------------------------------------------------------------------------
+ 1.06.2000.4 2000-04-08 Improved clickHandler() and FullTree(...) functions,
+ now ignores img... and s... variables if they are
+ null-strings
+ -----------------------------------------------------------------------------
+ 1.05.2000.3 ? First published version
+ =============================================================================
+
+USER MODIFICATIONS:
+
+ Please provide the full documentation of your modifications using the fields
+ below (email address appreciated for "User ID") in order to enable contact
+ and support. Note the "terms of use" section above.
+
+ =============================================================================
+ User ID Changed Version->New Version Number Date Changes
+ =============================================================================
+ [ insert your modifications here ]
+ -----------------------------------------------------------------------------
+ [ insert your modifications here ]
+ =============================================================================
+
+ Please email me for further questions and bugs.
+ Your support is really appreciated.
+
+
+HOW TO USE:
+
+ I recommend to utilize the functions of this script in different HTML
+ documents when downloading the entire file as outline.js and appending the
+ section
+
+ <script language="JavaScript1.1" src="outline.js" type="text/javascript">
+ </script>
+
+ (without newline) within the <HEAD></HEAD> section of that HTML documents.
+
+ The script uses either image files or text for node symbols as defined by
+ the variables below.
+
+ If you would like to use image files as outline nodes symbols (recommended),
+ please define an image object with the <img class="outline" src="..."> tag.
+ Assign URLs to the imgCollapsed and imgExpanded variables in a separate
+ JavaScript 1.1 script (file) after you included this script (see above)
+ to apply the image files used for node symbols.
+ YOU ARE NOT ALLOWED TO MODIFY THE INITIAL SCRIPT VALUES DIRECTLY!
+ Note: The clicked object needs to support the SRC or the ALT attribute.
+ The website where you have downloaded this file also provides the following
+ images for free to be used as outline node symbols:
+
+ bookclos.gif Closed book (collapsed tree; online help)
+ bookopen.gif Opened book (expanded tree; online help)
+ plus.gif white-on-black "+" (collapsed tree; miscellanous use)
+ minus.gif black-on-white "-" (expanded tree; miscellanous use)
+
+ If you would like to use text instead of image files, please define a text
+ area with the <span class="outline"></span> tags.
+ Assign strings to the sCollapsed and sExpanded variables in a separate
+ JavaScript 1.1 script (file) after you included this script (see above)
+ to apply the text used for node symbols.
+ YOU ARE NOT ALLOWED TO MODIFY THE INITIAL VALUES DEFINED HEREIN DIRECTLY!
+
+ Note: The clicked object needs to support the innerHTML attribute.
+
+ Redefine the .outlined CSS class to apply indent and other properties
+ of the text for a node content.
+
+
+ Live long and prosper
+
+ PointedEars
\ No newline at end of file
Index: live/doc/historic/string.htm
===================================================================
--- live/doc/historic/string.htm (nonexistent)
+++ live/doc/historic/string.htm (revision 509)
@@ -0,0 +1,390 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PointedEars' JavaScript Extensions (JSX): string.js</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+
+<body>
+<h1>PointedEars' JavaScript Extensions (JSX)</h1>
+<h2>string.js</h2>
+<pre>
+
+ORIGINAL FILENAME: <a href="string.js" type="text/javascript"
+ target="_top">string.js</a>
+PURPOSE: Provides support for string operations
+SCRIPT LANGUAGE/VERSION: JavaScript 1.1+
+PART OF: PointedEars' JavaScript Extensions (JSX)
+FILE VERSION: 1.29.2003.10b5+;
+ See <var>stringVersion</var> variable definition in script file.
+REQUIRED FOR: <a href="search.htm"
+ title="View documentation of JSX:search.js">JSX:search.js</a>
+ <a href="time.htm"
+ title="View documentation of JSX:time.js">JSX:time.js</a>
+ </pre>
+<h3>Contents</h3>
+<ul>
+ <li><a href="#features">Features provided by this script</a></li>
+ <li><a href="#testlist">List of browser tests</a></li>
+ <li><a href="#history">Version history</a></li>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+ <li><a href="#def">Expressions used herein</a></li>
+ <li><a href="#details">Detailed description of features</a></li>
+</ul>
+<p align="center" style="font-size: small;">Created with<br>
+<a href="http://quanta.sourceforge.net/" target="_top"><img
+ src="../media/quanta.png" alt="Quanta Plus" width="32" height="32"
+ border="0"></a> <a
+ href="http://www.macromedia.com/software/homesite/" target="_top"><img
+ src="../media/homesite3.gif" alt=" | Macromedia HomeSite | "
+ width="44" height="34" border="0"></a><a
+ href="http://www.macromedia.com/software/dreamweaver/" target="_top"><img
+ src="../media/dreamweaver2.gif" alt="Macromedia Dreamweaver MX"
+ width="44" height="34" border="0"></a></p>
+<p align="center" style="font-size: small;"><a
+ href="http://validator.w3.org/check/referer" target="_top"><img
+ src="../media/valid-html401" alt="This is valid HTML 4.01, "
+ width="88" height="31" border="0"></a> <a
+ href="http://jigsaw.w3.org/css-validator/check/referer" target="_top"><img
+ src="../media/valid-css" alt="valid CSS "
+ style="border: 0; width: 88px; height: 31px"></a> <a
+ href="http://www.anybrowser.org/campaign/" target="_top"><img
+ src="../media/anybrowser.gif"
+ alt="and therefore optimized for ALL browsers!" width="88" height="31"
+ border="0"></a></p>
+<hr>
+<h4><a name="features">Features Provided By This Script</a></h4>
+<dl>
+ <dt><code><a href="#leadingCaps">leadingCaps</a></code></dt>
+ <dd><pre>Replaces the first character by a capital character.</pre></dd>
+ <dt><code><a href="#replaceText">replaceText</a></code></dt>
+ <dd><pre>Replaces text within a string.</pre></dd>
+ <dt><code><a href="#strCount">strCount</a></code></dt>
+ <dd><pre>Returns the number of times that a substring is found in a string.</pre></dd>
+ <dt><code><a href="#stripTags">stripTags</a></code></dt>
+ <dd><pre>Returns a string where all tags are stripped from.</pre></dd>
+ <dt><code><a href="#trim">trim</a></code></dt>
+ <dd><pre>Returns a string where all leading and following spaces are stripped from.</pre></dd>
+ <dt><code><a href="#trimLeft">trimLeft</a></code></dt>
+ <dd><pre>Returns a string where all leading spaces are stripped from.</pre></dd>
+ <dt><code><a href="#trimRight">trimRight</a></code></dt>
+ <dd><pre>Returns a string where all following spaces are stripped from.</pre></dd>
+</dl>
+<h4><a name="testlist">Tested To Work At Least With</a></h4>
+<pre><!--script type="text/javascript">
+document.write(navigator.userAgent + "\n");
+</script-->
+Mozilla 1.5
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007]
+Mozilla 1.2b nightly
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b) Gecko/2002102108]
+Mozilla 1.2b nightly
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b) Gecko/2002100604]
+Mozilla 1.2a
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2a) Gecko/20020911]
+Netscape 7.0
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.0.1) Gecko/20020823
+ Netscape/7.0]
+Mozilla 1.1b
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.1b) Gecko/20020722]
+Mozilla 1.0
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0) Gecko/20020605]
+Mozilla 1.0 Release Candidate 3
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc3) Gecko/20020523]
+Mozilla 1.0 Release Candidate 2
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc2) Gecko/20020510]
+Mozilla 1.0 Release Candidate 1 nightly
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc1) Gecko/20020417]
+Mozilla 0.9.9
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.9) Gecko/20020311]
+Mozilla 0.9.8 de-AT
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8) Gecko/20020204]
+Mozilla 0.9.4
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.4) Gecko/20010913]
+Netscape 6.1
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.2) Gecko/20010726
+ Netscape6/6.1]
+Netscape 6.1
+ [Mozilla/5.0 (X11; U; Linux 2.2.16 i586; de-DE; m18) Gecko/20010131
+ Netscape6/6.01]
+Microsoft Internet Explorer 6.0.2800.1160 (SP-1)
+ [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)]
+Microsoft Internet Explorer 6.0.2600.0000
+ [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 3.0)]
+Microsoft Internet Explorer 5.50.4807.2300IC
+Microsoft Internet Explorer 5.50.4134.0600IC
+Microsoft Internet Explorer 5.01 [5.00.2919.6307IC]
+Microsoft Internet Explorer 5.00.2314.1003IC
+ </pre>
+<h4><a name="history">Version History</a></h4>
+<pre>
+<a href="#first">First version</a>
+
+<a name="last" id="last">1.29.3.2007090212 (2007-09-02)</a>
+-------------------------------
+* Fixed leadingZero (did prepend with &nbsp; instead of "0")
+
+1.29.2.2006090919 (2006-09-09)
+-------------------------------
+* [TODO]
+
+1.29.2003.10b5+ (2003-10-22)
+----------------------------
+* Added <code>leadingCaps</code> and <code>strCount</code> functions
+* Functions become methods of the String prototype if supported
+
+1.29.2003.10b4+ (2003-10-20)
+----------------------------
+* Added JavaScriptDoc comments
+* Moved string functions from obsolete enhanced.js to string.js
+ and updated documentation
+
+1.29.2002.10b3 (2002-10-09)
+----------------------------
+* Updated documentation:
+ - Added link to last version
+ - Added links to definitions
+ - Updated definitions
+ - Updated "null string" term
+ - Unified Version History layout
+
+<a name="v1.29.2002.8b" id="v1.29.2002.8b">1.29.2002.8b (2002-08-25)</a>
+----------------------------
+* Updated all functions:
+ - changed $ident<code><span class="punct">.</span>arguments</code> to <code>arguments</code> because it is an intrinsic property
+ of the function prototype
+
+<a name="v1.29.2002.7" id="v1.29.2002.7">1.29.2002.7 (2002-07-22)</a>
+---------------------------
+* Updated <code>replaceText</code> function:
+ - Introduced additional <var>bForceLoop</var> argument to prefer
+ for-loop instead of <a href="#regexp">RegExps</a>. Useful when replacement with RegExp<a
+ href="#regexp"></a>s
+ requires too much modification of arguments.
+
+<a name="v1.25.2002.5" id="v1.25.2002.5">1.25.2002.5 (2002-05-10)</a>
+---------------------------
+* Fixed undetected bug in <code>EInvalidArg(...)</code>, simplified <code>EInvalidArg(...)</code>
+ and <code>EInvalidArgNum(...)</code> exceptions
+* Renamed <code>stringException</code> to <code>stringException</code> and simplified code
+* Introduced <var>stringCopypright</var>, <var>stringAuthor</var> and <var>stringEMail</var>
+ global variables to store script-related data for <strong>all</strong> script features,
+ including <code>getObjInfo(...)</code>
+* Documentation update:
+ - Have all code-related identifiers properly formatted
+
+1.24.2002.5 (2002-05-06)
+---------------------------
+* Updated <code>replaceText(...)</code> function:
+ - Fixed the &quot;<var>sText</var> has no properties&quot; bug with undefined attributes
+ tried to retrieve with <code>getObjInfo(...)</code>
+* Documentation update:
+ - Link to jump to the first version listed in history
+ - Updated <code>replaceText(...)</code> description
+ - Use of definition lists
+ - Changed headers
+
+1.23.2002.4 (2002-04-30)
+---------------------------
+* Updated <code>replaceText(...)</code> function, resolving the <code><a
+ href="#regexp">RegExp</a></code> issues:
+ - Replaces all occurrences of a string
+ - Replaces also <code>\</code>
+
+1.22.2002.4 (2002-04-22)
+---------------------------
+* Updated replaceText(...) function:
+ - Support of the more effective <code>String.replace(...)</code> with <code><a
+ href="#regexp">RegExp</a></code> of
+ JavaScript 1.2
+* Documentation update:
+ - Word wrap at 72 characters (applies to documentation standards)
+ - Version History is no longer in columns but separate paragraphs
+* First version under the terms of the GNU GPL, version 2 or later.
+
+1.16.2001.1 (2001-01-11)
+---------------------------
+* Moved general documentation to text file for faster processing
+
+1.14.2000.11 (2000-11-15)
+---------------------------
+* Established string variable named <var>stringVersion</var> to contain
+ library version
+
+1.13.2000.10 (2000-10-17)
+---------------------------
+* Improved inline documentation
+
+1.12.2000.8 (2000-08-13)
+---------------------------
+* Tested script file successfully with IE5.5
+
+1.11.2000.7 (2000-07-03)
+---------------------------
+* Fixed some mysterious bugs with IE 5.01 on string arguments and large
+ HTML documents by assigning those strings to local variables and
+ splitting string assignments (+= Workaround).
+* Modified email subject line to Feedback/JSX/string
+
+1.10.2000.6 (2000-06-10)
+---------------------------
+* Improved inline documentation
+
+1.09.2000.3 (2000-03-27)
+---------------------------
+* Fixed spelling error in <code>EInvalidArg(...)</code> exception
+* Fixed global frame ID evaluation bug
+
+<a name="first" id="first">1.06.2000.3 (2000-03-19)</a>
+---------------------------
+* Fixed <var>sResult</var> variable assignment in <code>trim(...)</code>
+
+<a href="#last">Last version</a>
+ </pre>
+<h4><a name="copyright">Copyright &amp; Disclaimer</a></h4>
+<pre>
+Copyright (c) 1999-2003 Thomas Lahn &lt;<a
+ href="mailto:string.js@PointedEars.de%20%28Thomas%20Lahn%28?subject=Feedback/JSX/string">string.js@PointedEars.de</a>&gt;
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the <a
+ href="http://www.gnu.org/copyleft/gpl.html" target="_top">GNU General Public License</a>
+as published by the <a href="http://www.fsf.org/" target="_top">Free Software Foundation</a>; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program (<a href="COPYING" target="_top">COPYING</a> file); if not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in
+different HTML documents when saving the entire file as
+script.js and appending the following section within the
+<span class="tags">&lt;head&gt;...&lt;/head&gt;</span> tags of that documents:
+
+<span class="scr">&lt;script src="string.js" type="text/javascript"&gt;&lt;/script&gt;</span>
+ </pre>
+<h4><a name="def">Expressions Used Herein</a></h4>
+<dl>
+ <dt>null string</dt>
+ <dd><pre>An empty string that contains no characters, i.e. is of length 0 (zero).</pre></dd>
+ <dt><code>(Expression1 | Expression2 | ...)</code></dt>
+ <dd><pre>Exclusive selection of expressions in Backus-Naur Form (BNF). [<a
+ href="http://google.com/search?q=Backus-Naur+Form" target="_top">details</a>]</pre></dd>
+ <dt><code><a name="regexp">RegExp</a></code></dt>
+ <dd><pre>A regular expression encapsulated by the RegExp object. [<a
+ href="http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/regexp.html#1193136"
+ target="_top">details</a>]</pre></dd>
+</dl>
+<pre>
+<a name="details">Following the detailed description of the features of this script file.</a>
+_______________________________________________________________________________
+
+<code><a name="leadingCaps"><span class="rswd">function</span> leadingCaps<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Replaces the first character of <var>s</var> by a capital character.
+Returns the new string.
+
+_______________________________________________________________________________
+
+<code><a name="replaceText"><span class="rswd">function</span> replaceText<span
+ class="punct">(</span><var>sText</var>, <var>sReplaced</var>, <var>sReplacement</var><span
+ class="punct">)</span></a></code>
+
+Replaces occurences of <var>sReplaced</var> in the string <var>sText</var> with <var>sReplacement</var>.
+Returns the new string.
+
+Because of the result it returns, <code>replaceText</code> may be nested into other calls
+of itself:
+
+ <code><span class="rswd">var</span> s <span class="punct">=</span> replaceText<span
+ class="punct">(</span>replaceText<span class="punct">(</span><span
+ class="str">&quot;test me&quot;</span><span class="punct">,</span> <span
+ class="str">&quot;test&quot;</span><span class="punct">,</span> <span
+ class="str">&quot;#test#&quot;</span><span class="punct">)</span><span
+ class="punct">,</span> <span class="str">&quot;#&quot;</span><span
+ class="punct">,</span> <span class="str">&quot;$&quot;</span><span
+ class="punct">);</span>
+ <span class="comm">// displays &quot;$test$ me&quot;</span></code>
+
+If supported, <code>replaceText(...)</code> uses <code>String.replace(...)</code> to replace text.
+Therefore, if the method is available, <var>sReplaced</var> may be a regular expression
+matching substrings to be replaced with <var>sReplacement</var>.
+
+If supported, <code>replaceText(...)</code> becomes also a method of the <code>String</code> prototype,
+thus applicable to all <code>String</code> objects and literals where the first argument
+is ignored if <code>undefined</code>, <code class="rswd">null</code>, <code
+ class="rswd">false</code>, a null-string or not a <code>String</code>.
+The above example could then be written as
+
+ <code><span class="rswd">var</span> s <span class="punct">=</span> replaceText<span
+ class="punct">(</span><span class="str">&quot;test me&quot;</span><span
+ class="punct">,</span> <span class="str">&quot;test&quot;</span><span
+ class="punct">,</span> <span class="str">&quot;#test#&quot;</span><span
+ class="punct">).</span>replaceText<span class="punct">(</span><span
+ class="str">""</span><span class="punct">,</span> <span class="str">&quot;#&quot;</span><span
+ class="punct">,</span> <span class="str">&quot;$&quot;</span><span
+ class="punct">);</span>
+ <span class="comm">// displays &quot;$test$ me&quot;</span></code>
+
+_______________________________________________________________________________
+
+<code><a name="stripTags"><span class="rswd">function</span> stripTags<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a string where all tags are stripped from the passed argument string
+(<var>taggedStr</var>). You may use it to analyze the displayed content of an HTML document
+for fulltext search:
+
+ <code><span class="rswd">function</span> foundText<span
+ class="punct">(</span><var>sSub</var><span class="punct">)</span>
+ <span class="punct">{</span>
+ <span class="rswd">return</span> <span class="punct">(</span>stripTags<span
+ class="punct">(</span>document<span class="punct">.</span>body<span
+ class="punct">.</span>innerHTML<span class="punct">).</span>indexOf<span
+ class="punct">(</span><var>sSub</var><span class="punct">)</span> &gt; <span
+ class="num">-1</span><span class="punct">);</span>
+ <span class="punct">}</span>
+
+ <span class="rswd">if</span> <span class="punct">(</span>foundText<span
+ class="punct">(</span><span class="str">"Text"</span><span
+ class="punct">))</span>
+ document.<span class="ident">write</span><span class="punct">(</span><span
+ class="str">'Found "Text" in the document.'</span><span class="punct">);</span></code>
+
+_______________________________________________________________________________
+
+<code><a name="trim"><span class="rswd">function</span> trim<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all leading and following spaces are stripped from.
+Uses <code>trimLeft</code> and <code>trimRight</code> defined above to calculate that resulting string.
+
+_______________________________________________________________________________
+
+<code><a name="trimLeft"><span class="rswd">function</span> trimLeft<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all leading spaces are stripped from.
+
+_______________________________________________________________________________
+
+<code><a name="trimRight"><span class="rswd">function</span> trimRight<span
+ class="punct">(</span><var>s</var><span class="punct">)</span></a></code>
+
+Returns a copy of <var>s</var> where all following spaces are stripped from.
+
+ </pre>
+<hr>
+<p>END OF FILE</p>
+</body>
+</html>
Index: live/doc/historic/enhancd2.htm
===================================================================
--- live/doc/historic/enhancd2.htm (nonexistent)
+++ live/doc/historic/enhancd2.htm (revision 509)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PointedEars' JavaScript Extensions (JSX): enhancd2.js</title>
+<link rel="stylesheet" type="text/css" href="style.css">
+</head>
+
+<body>
+<h1>PointedEars' JavaScript Extensions (JSX)</h1>
+<h2>enhancd2.js</h2>
+<pre>
+
+ORIGINAL FILENAME: enhancd2.js
+PURPOSE: Provides level-2 enhanced web site features
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.18.2002.2;
+ See enhanced2Version variable intialization in
+ script file.
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: <a href="enhanced.htm"
+ title="View documentation of JSX:enhanced.js">JSX:enhanced.js</a>, v1.08.2000.3 or later</pre>
+
+<h3>Contents</h3>
+<ul>
+ <li><a href="#features">Features provided by this script</a></li>
+ <li><a href="#testlist">List of browser tests</a></li>
+ <li><a href="#history">Version history</a></li>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+ <li><a href="#details">Detailed description of features</a></li>
+</ul>
+
+<pre>
+<a name="features">FEATURES PROVIDED BY THIS SCRIPT:</a>
+
+linkOutWin Questions the user before following an online link and
+ if confirmed, displays the result in a new window.
+ Calls and returns enhanced.js:linkOut(...).
+enlargeImg Opens a dependent browser child window with an
+ enlarged image. (Previously addressed by Enlarge(...)
+ function, see version history info above.)
+maximize Maximizes the width and height of the browser window.
+playSound Plays a sound file (experimental)
+
+
+<a name="testlist">TESTED TO WORK AT LEAST WITH:</a>
+
+ Mozilla 1.0 Release Candidate 2
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc2)
+ Gecko/20020510]
+ Mozilla 1.0 Release Candidate 1 nightly
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc1)
+ Gecko/20020417]
+ Mozilla 0.9.9
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.9)
+ Gecko/20020311]
+ Mozilla 0.9.8 de-AT
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8)
+ Gecko/20020204"
+ Mozilla 0.9.6 de-AT
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.6)
+ Gecko/20011120"
+ Netscape 6.2.1
+ "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:0.9.4)
+ Gecko/20011128 Netscape6/6.2.1"
+ Opera 6.0 [de]
+ "Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [de]"
+ Microsoft Internet Explorer 6.00.2600.0000 (SP-2)
+ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461;
+ Hotbar 3.0)"
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+ Microsoft Internet Explorer 5.01, displayed 5.00.2919.6307IC
+ Microsoft Internet Explorer 5.00, displayed 5.00.2314.1003IC
+ Netscape Navigator 4.74
+
+
+<a name="history">VERSION HISTORY:</a>
+
+1.20.2002.4 (2002-04-22)
+-------------------------
+First version under the terms of the GNU GPL, version 2 or later.
+
+1.18.2002.2 (2002-02-28)
+-------------------------
+- Updated hoverImg(...) function:
+ Now supports W3C-DOM of both NN 6+/Mozilla 0.9+ and IE 6+.
+
+1.17.2002.2 (2002-02-23)
+-------------------------
+- Updated enlargeImg(...) function:
+ Fixed bad bug with Mozilla/Netscape. Version of Mozilla newer than
+ 0.9.6. and of Netscape newer than 6.1 do assign "about:blank" to a
+ temporary document which causes relative paths used for its resources
+ to be invalid. Further use of relative paths is provided by an
+ algorithm, used in JSX:<a href="outline.txt">outline.js</a> before and now improved, that calculates
+ the correct absolute path when provided the caller document's URL.
+
+1.16.2002.2 (2002-02-05)
+-------------------------
+- Updated enlargeImg(...) function:
+ Changed back to wImage.document because Opera's document.open(...)
+ function does not return the created object --> dImage is useless :(
+- Documentation update: Changed to HTML format
+
+1.15.2002.1 (2002-01-26)
+-------------------------
+- Updated enlargeImg(...) function:
+ Now uses previously defined dImage variable instead of wImage.document
+
+1.14.2002.1 (2002-01-18)
+-------------------------
+- Updated enlargeImg(...) function:
+ Masked / in written closing tags with \/ (backslash-slash) as
+ described in <a href="http://selfhtml.teamone.de/" target="_blank">SELFHTML 8.0</a>
+- Documentation update:
+ Word wrap at 72 characters (applies to documentation standards),
+ and version history is no longer in columns but separate paragraphs.
+
+1.13.2001.9 (2001-09-11)
+-------------------------
+Removed maximize() function:
+When used with virtual desktops larger than the physical resolution
+(screen), setting the window size to screen.width and screen.height
+causes the window to occupy the desktop but exceed the screen size,
+thus the browser window blocks the other desktop content.
+With this course of action it is intended not to support designers
+causing this undesired behavior on the computers of certain users.
+
+1.12.2001.4 (2001-04-03)
+------------------------
+Updated enlargeImg(...) function:
+Now checks if created window object exists and focuses it after creating
+its document (always focuses the popup, even if already open).
+
+1.11.2001.2 (2001-02-05)
+-------------------------
+Updated enlargeImg(...) function:
+Now allows to close zoom window when clicking on enlarged image and
+displays tooltip on mouse over.
+
+1.10.2001.1 (2001-01-11)
+-------------------------
+Moved general documentation to text file for faster processing.
+
+1.09.2000.11 (2000-11-24)
+--------------------------
+- Improved linkOutWin(...) function:
+ Now returns value of linkOut(...) (always false) for combined use
+ in both HREF attribute and onClick event handler of <span class="a">&lt;a&gt;</span>...<span
+ class="a">&lt;/a&gt;</span> tag.
+- Established string variable named enhanced2Version to contain
+ library version.
+
+1.08.2000.10 (2000-10-30)
+--------------------------
+Improved maximize() function due to Netscape missing screen.left
+
+1.07.2000.10 (2000-10-17)
+--------------------------
+- Improved Enlarge(...) function:
+ - Fixed BUG_Enlarge:ALWAYS_FIT-TO-IMAGE (see code).
+ - Changed window name for temporary HTML document to "wndZoom".
+ - Renamed to "enlargeImg". Compatibility by internal redirection.
+- Bugfixed exception calls.
+- Improved inline documentation.
+
+1.06.2000.9 (2000-09-25)
+-------------------------
+Improved Enlarge(...) function:
+- iWidth and iHeight arguments are not longer mandatory
+ (moved to third and fourth argument) due to use of temporary
+ HTML document that displays the image and uses inline JavaScript code
+ to resize the window to fit image automatically
+ (standalone version; does neither utilize JSX:enhanced.js:popUp(...)
+ nor elements from document.js).
+- Additionally established window caption for second argument;
+ optional, uses image URL if not provided.
+
+1.05.2000.8 (2000-08-13)
+-------------------------
+Tested script file successfully with IE5.5
+
+1.04.2000.7 (2000-06-10)
+-------------------------
+- Changed function names beginning with lowercase character.
+- Added playSound(...) function.
+
+1.03.2000.6 (2000-06-10)
+-------------------------
+- Changed OpenChildWin(...) call to popUp(...) and moved to enhanced.js
+- Improved Enlarge(...) function to display dependent browser
+ child window (with Netscape and compatibles only).
+- Improved documentation texts.
+
+1.02.2000.4 (2000-04-06)
+-------------------------
+Added Maximize(...) function.
+
+1.01.2000.3 (2000-03-24)
+-------------------------
+Added Enlarge(...) function.
+
+1.00.2000.3 (2000-03-23)
+-------------------------
+Added linkOutWin(...) function.
+
+
+<a name="copyright">Copyright (c) 1999-2002 Thomas Lahn</a> &lt;<a
+ href="mailto:webmaster@PointedEars.de?subject=Feedback/JSX/enhancd2">webmaster@PointedEars.de</a>&gt;
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the <a
+ href="http://www.gnu.org/copyleft/gpl.html" target="_blank">GNU General Public License</a>
+as published by the <a href="http://www.fsf.org/" target="_blank">Free Software Foundation</a>; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program (<a href="COPYING" target="_blank">COPYING</a> file); if not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+
+HOW TO USE:
+Note that this script depends on elements defined in JSX:enhanced.js
+For dependent scripts, the referred script file (enhanced.js) needs to
+be loaded previously and should be loaded only one time per document.
+To avoid providing the required elements in enhanced.js via copy&amp;paste,
+I recommend to utilize the functions of this script in (different)
+HTML documents when saving the entire file as enhancd2.js and appending
+the following sections within the &lt;head&gt;&lt;/head&gt; tags of these documents:
+
+<span class="scr">&lt;script src="enhanced.js" type="text/javascript"&gt;&lt;/script&gt;
+&lt;script src="enhancd2.js" type="text/javascript"&gt;&lt;/script&gt;</span>
+
+If dependencies cannot be resolved, you will always get a
+JavaScript error even if there are no bugs herein.
+
+
+<a name="details">Following the detailed description of the features of this script.</a>
+_______________________________________________________________________________
+
+function enlargeImg(sImageURL, sCaption, iWidth, iHeight, bCenter)
+
+The function defined below will open an independent browser child window
+(here: popup) calling the window.open(...) and document.open(...)
+functions to display the enlarged image of a thumbnail the user has
+clicked.
+Arguments: Pass the URL of the enlarged image, optionally the caption
+of the popup (if you leave it the URL is used as caption).
+Pass also width and/or height as arguments to override
+fit-window-to-image feature which results in the following behavior
+(disable automatic line-wrap and use fixed font for proper display):
+
+sImageURL sCaption iWidth iHeight
+------------------------------------------------------------------------
+ - ( ) ( ) ( )
+enhanced.js:EInvalidArgNum exception is raised
+
+ + ( ) ( ) ( )
+Use sImageURL as caption, fit-window-to-image horizontally & vertically
+
+ + x ( ) ( )
+Use sCaption as caption, fit-window-to-image horizontally & vertically
+
+ + x x (0)
+Window width is defined by iWidth, fit-window-to-image vertically
+
+ + x 0 (x)
+Window height is defined by iHeight, fit-window-to-image horizontally
+
+ + x x x
+Window size is defined by iWidth and iHeight
+
+Legend:
+ - Required argument not passed;
+ + Required argument passed;
+ x Mandatory optional argument passed except zero;
+ 0 Zero ("0") passed for mandatory optional argument;
+ ( ) Optional argument not passed;
+ (0) Optional argument not passed, or zero passed;
+ (x) Optional argument not passed, or passed but not zero;
+
+The fifth argument, bCenter, is a Boolean expression that is `true' by
+default.
+You may pass an expression that returns `false' if you define the size
+of the popup by yourself. If bCenter == false, the popup will not be
+positioned in the center of the screen automatically but its left top
+corner is defined by the browser defaults (usually cascaded with other
+windows.)
+Pass iWidth == 0 and/or iHeight == 0, and bCenter == false if you wish
+the popup to be automatically resized horizontally and/or vertically,
+but not to be centered.
+
+NOTE:
+This feature had been previously addressed by the Enlarge(...) function
+with less arguments and therefore less possibilities to influence the
+display behavior (see below).
+Calls to Enlarge(...) are still possible as they redirect internally to
+enlargeImg(...), incl. exceptions. Nevertheless, calling Enlarge(...)
+disables you to define whether the popup should be centered as the old
+function definition is not being updated. New scripts should call
+enlargeImg(...) anyway instead because Enlarge(...) may become obsolete
+in future versions.
+
+________________________________________________________________________
+
+function Enlarge(sImageURL, sCaption, iWidth, iHeight)
+
+Enlarge(...) call redirects to enlargeImg(...) for compatibility with
+previous versions.
+
+________________________________________________________________________
+
+function maximize()
+
+Maximizes the browser window.
+
+________________________________________________________________________
+
+function playSound( sSoundFile, Loop, sAttrib ) {
+
+Plays a sound file as background sound if the insertAdjacentHTML method
+is supported (currently on JScript browsers like IE5+ only, hence tests
+document.all object before).
+
+Note: If you specify the SRC or LOOP attributes in sAttrib, then
+sSoundFile and Loop will overwrite the respective values.
+________________________________________________________________________
+END OF FILE
+
+ </pre>
+</body>
+</html>
Index: live/doc/historic/window.html
===================================================================
--- live/doc/historic/window.html (nonexistent)
+++ live/doc/historic/window.html (revision 509)
@@ -0,0 +1,741 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <meta http-equiv="Content-Language" content="en">
+ <meta name="GENERATOR" content="PHPEclipse 1.0">
+ <title>Window Library</title>
+ <link
+ rel="stylesheet"
+ href="style.css"
+ type="text/css"
+ charset="ISO-8859-1"
+ hreflang="en"
+ title="">
+ </head>
+ <body>
+ <h1>Window Library</h1>
+
+ <table>
+ <tr>
+ <th align="left">Original filename:</th>
+ <td><a href="window.js">window.js</a></td>
+ </tr>
+ <tr>
+ <th align="left">Part of:</th>
+ <td>PointedEars' JavaScript Extensions (JSX)</td>
+ </tr>
+ </table>
+
+ <h2>Contents</h2>
+
+ <ul>
+ <li><a href="#copyright">Copyright &amp; disclaimer</a></li>
+
+ <li><a href="#variables">Global variables</a></li>
+
+ <li><a href="#methods">Global methods</a></li>
+
+ <li><a href="#def">Expressions used herein</a></li>
+
+ <li><a href="#testlist">List of browser tests</a></li>
+
+ <li><a href="#history">Version history</a></li>
+ </ul>
+
+ <h2><a href="#copyright" name="copyright" id="copyright"
+ >Copyright &amp; Disclaimer</a></h2>
+
+ <p class="author">Copyright &copy; 2001-2004 Thomas Lahn
+ &lt;<a href="mailto:window.js@PointedEars.de"
+ >window.js@PointedEars.de</a>&gt;</p>
+
+ <p>This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.</p>
+
+ <p>This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License (GPL) for more details.</p>
+
+ <p>You should have received a copy of the GNU GPL along with this
+ program (<a href="COPYING">COPYING</a> file); if not, go to [1]
+ or write to the Free Software Foundation, Inc., 59 Temple Place
+ - Suite 330, Boston, MA 02111-1307, USA.</p>
+
+ <p>[1] &lt;<a href="http://www.gnu.org/licenses/licenses.html#GPL"
+ >http://www.gnu.org/licenses/licenses.html#GPL</a>&gt;</p>
+
+ <h2><a href="#variables" name="variables" id="variables"
+ >Global Variables</a></h2>
+
+ <dl>
+ <dt><code>string <span class="ident">windowVersion</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">windowCopyright</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">windowAuthor</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">windowEmail</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">windowPath</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">sLinkOutMsg_de</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">sLinkOutMsg_us</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">sLinkOutMsg</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string
+ <span class="ident">sEnlargeImgTitle_en</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string
+ <span class="ident">sEnlargeImgTitle_de</span></code></dt>
+ <dd></dd>
+
+ <dt><code>string <span class="ident">sEnlargeImgTitle</span></code></dt>
+ <dd></dd>
+
+ <dt><code><span class="rswd">function</span>
+ <span class="ident">Enlarge</span></code></dt>
+ <dd></dd>
+ </dl>
+
+ <h2><a href="#methods" name="methods" id="methods">Global Methods</a></h2>
+
+ <dl>
+ <dt><code><span class="ident"><a href="#windowException"
+ >windowException</a></span></code></dt>
+ <dd></dd>
+
+ <dt><code><span class="ident"><a href="#EInvalidArgNum"
+ >EInvalidArgNum</a></span></code></dt>
+ <dd></dd>
+
+ <dt><code><span class="ident"><a href="#setStatus"
+ >setStatus</a></span></code></dt>
+ <dd>Set the text that is displayed in the browser's status bar.</dd>
+
+ <dt><code><span class="ident"><a href="#resetStatus"
+ >resetStatus</a></span></code></dt>
+ <dd></dd>
+
+ <dt><code><span class="ident"><a href="#linkOut"
+ >linkOut</a></span></code></dt>
+ <dd>Questions the user before following an online link (useful in
+ offline documents with Internet support.)</dd>
+
+ <dt><code><span class="ident"><a href="#popUp"
+ >popUp</a></span></code></dt>
+ <dd>Loads a user-defined browser child window (pop-up window).
+ (Previously addressed by OpenChildWin(...) function,
+ see version history info above.)</dd>
+
+ <dt><code><span class="ident"><a href="#OpenChildWin"
+ >OpenChildWin</a></span></code></dt>
+ <dd></dd>
+
+ <dt><code><span class="ident"><a href="#LoadFrame"
+ >LoadFrame</a></span></code></dt>
+ <dd>Loads a document within a specified frame.</dd>
+
+ <dt><code><span class="ident"><a href="#enlargeImg"
+ >enlargeImg</a></span></code></dt>
+ <dd>Opens a dependent browser child window containing an (enlarged)
+ image.</dd>
+ </dl>
+
+ <hr size="2">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#windowException" name="windowException" id="windowException"
+ >windowException</a></span><span class="punct"
+ >(</span><var>Msg</var><span class="punct">)</span></code></p>
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#EInvalidArgNum" name="EInvalidArgNum" id="EInvalidArgNum"
+ >EInvalidArgNum</a></span><span class="punct"
+ >(</span><var>sFunctionName</var><span class="punct">,</span>
+ <var>iArg</var><span class="punct">)</span></code></p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#setStatus" name="setStatus" id="setStatus"
+ >setStatus</a></span><span class="punct"
+ >(</span><var>sCaption</var><span class="punct">)</span></code></p>
+
+ <p>Sets the text of the browser's status bar. Pass the string to be
+ displayed as the only function argument. Removes the necessity to
+ include a script into the HTML 4.0 event handlers of an HTML object,
+ e.g.</p>
+
+ <p><code><span class="a">&lt;a href=</span><span class="attrval"
+ >&quot;...&quot;</span> <span class="a">onmouseover=</span><span
+ class="attrval">&quot;</span><code>status='<span class="str"
+ >Text</span>'<span class="punct">;</span> <span class="rswd"
+ >return true</span></code><span class="attrval">&quot;</span><span
+ class="a">&gt;</span>...<span class="a">&lt;/a&gt;</span></code></p>
+
+ <p>can be replaced with:</p>
+
+ <p><code><span class="a">&lt;a href=</span><span class="attrval"
+ >&quot;...&quot;</span> <span class="a">onmouseover=</span><span
+ class="attrval">&quot;</span><code><span class="rswd">return</span>
+ <span class="ident">setStatus</span><span class="punct">(</span>'<span
+ class="str">Text</span>'<span class="punct">)</span></code><span
+ class="attrval">&quot;</span><span class="a">&gt;</span>...<span
+ class="a">&lt;/a&gt;</span></code></p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#resetStatus" name="resetStatus" id="resetStatus"
+ >resetStatus</a></span><span class="punct">()</span></code></p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#linkOut" name="linkOut" id="linkOut"
+ >linkOut</a></span><span class="punct"
+ >(</span>string&nbsp;<var>sURL</var><span class="punct">,</span>
+ string&nbsp;<var>sLink</var><span class="punct">,</span> [<span
+ class="rswd">boolean</span>&nbsp;<var>bShowURL</var><span class="punct"
+ >,</span> [string|number&nbsp;<var>aTarget</var><span class="punct"
+ >,</span> [number&nbsp;<var>iWidth</var><span class="punct">,</span>
+ [number&nbsp;<var>iHeight</var><span class="punct">,</span>
+ [string&nbsp;<var>sOptions</var>]]]]]<span class="punct"
+ >)</span></code></p>
+
+ <p>Insert the following link into a HTML document. A click on it will run the
+ function defined below and ask the user if he/she is willing to connect
+ to the Internet because of an online link:</p>
+
+ <p><code><span class="a">&lt;a href=</span><span class="attrval"
+ >&quot;<var>sURL</var>&quot;</span> onClick=<span class="attrval"
+ >&quot;</span><span class="rswd">return</span> <span class="ident"
+ >linkOut</span><span class="punct">(</span><span class="rswd"
+ >this</span><span class="punct">.</span>href<span
+ class="punct">)</span><span class="attrval">&quot;</span><span class="a"
+ >&gt;</span>...<span class="a">&lt;/a&gt;</span></code></p>
+
+ <p>Replace the <var><a href="#linkOut_sURL">sURL</a></var> argument with
+ the URL of the document to be loaded.</p>
+
+ <p>Use the return value of <code><span class="ident">linkOut</span><span
+ class="punct">()</span></code>
+ (<code class="rswd">return false</code> will cancel the
+ <code>click</code> event) to support users who have JavaScript available
+ and enabled. Those users will receive the dialog box, other users will
+ only see a popup window with the linked website.</p>
+
+ <p>The function appears useful in offline pages only. You should remove the
+ event handler before the respective offline site is uploaded to a public
+ server.</p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#popUp" name="popUp" id="popUp">popUp</a></span><span class="punct"
+ >(</span><var>sURL</var><span class="punct">,</span>
+ <var>iWidth</var><span class="punct">,</span>
+ <var>iHeight</var><span class="punct">,</span>
+ <var>sOptions</var><span class="punct">)</span></code></p>
+
+ <p>Insert the following link into a HTML document. A click on it will run
+ this function to open a browser child window:</p>
+
+ <p><code><span class="a">&lt;a href=<span class="attrval"
+ >&quot;URL&quot;</span> target=<span class="attrval"
+ >&quot;_blank&quot;</span> onClick=</span><span class="attrval"
+ >&quot;</span><span class="ident">popUp</span><span class="punct"
+ >(</span><span class="rswd">this</span><span class="punct"
+ >.</span>href<span class="punct">,</span> <var>aWidth</var><span
+ class="punct">,</span> <var>aHeight</var>[<span class="punct">,</span>
+ <var>sOptions</var>]<span class="punct">)</span>&quot;<span class="a"
+ >&gt;</span>...<span class="a">&lt;/a&gt;</span></code></p>
+
+ <p>Note that the <code class="a">target</code> attribute is only necessary
+ to avoid script errors when the link is placed within a frameset where
+ the <code class="tag">&lt;base&nbsp;target=<span class="attrval"
+ >&quot;...&quot;</span>&gt;</code> element has been used previously.</p>
+
+ <p>The <var>iWidth</var> argument will specify the width in pixels, and the
+ <var>iHeight</var> argument will specify the height in pixels of the new
+ window using the features argument string of the <code>JavaScript:<span
+ class="ident">window</span><span class="punct">.</span><span
+ class="ident">open</span><span class="punct">()</span></code> method.</p>
+
+ <p>The <var>sOptions</var> argument will modify the default features for the
+ child window. For this argument pass a string that extends the features
+ settings for the <code>JavaScript:<span class="ident"
+ >window</span><span class="punct">.</span><span class="ident"
+ >open</span><span class="punct">()</span></code> method. You may leave
+ the comma at first position as it is implemented in the
+ <code>JSX:<span class="ident">popUp</span><span class="punct"
+ >()</span></code> method.<br>
+ Refer the respective documentation for details of window features.
+ Please do note that if an option is used more than one time, the final
+ result of that option is undefined. Nevertheless, most browsers will
+ then use the last option as argument.</p>
+
+ <p>Use the return value of <code><span class="ident">popUp</span><span
+ class="punct">()</span></code> (<code class="rswd">return false</code>
+ will cancel the <code>click</code> event) to support users who have
+ JavaScript available and enabled. All users will receive the window,
+ those without JavaScript will have the window size defined not by
+ your definitions but by browser defaults.</p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"><a
+ href="#OpenChildWin" name="OpenChildWin" id="OpenChildWin"
+ >OpenChildWin</a></span><span class="punct">(</span><var>sURL</var><span
+ class="punct">,</span> <var>iWidth</var><span class="punct">,</span>
+ <var>iHeight</var><span class="punct">,</span>
+ <var>sOptions</var><span class="punct">)</span></code></p>
+
+ <p>The <code><span class="ident">OpenChildWin</span><span class="punct"
+ >()</span></code> call is redirected to <code><span class="ident"
+ >popUp</span><span class="punct">()</span></code> and contained
+ for backwards compatibility to previous versions only.
+ It may become obsolete in future versions, use <code><span class="ident"
+ >popUp</span><span class="punct">()</span></code> instead.</p>
+
+ <hr size="1">
+
+ <p><code><span class="ident"><a href="#LoadFrame" name="LoadFrame"
+ id="LoadFrame">LoadFrame</a></span><span class="punct"
+ >(</span><var>sURL</var><span class="punct">,</span>
+ <var>targetFrame</var><span class="punct">)</span></code></p>
+
+ <p>Insert the following script within the
+ <code class="tagname">head</code> element of HTML documents:</p>
+
+ <p><code><span class="scr">&lt;script
+ type=<span class="attrval">&quot;text/javascript&quot;</span>&gt;</span><br>
+ &nbsp;&nbsp;<span class="ident">LoadFrame</span><span class="punct"
+ >(</span><var>sURL</var><span class="punct">,</span>
+ <var>targetFrame</var><span class="punct">);</span><br>
+ <span class="scr">&lt;/script&gt;</span></code></p>
+
+ <p>Replace the <var>sURL</var> argument with the URL of the document that
+ should be loaded within the frame specified with <var>targetFrame</var>.
+ Double-quoted string recommended. Replace the <var>targetFrame</var>
+ argument with a valid frame number or identifier.</p>
+
+ <p>You can evaluate the function's success by its return value:</p>
+
+ <table>
+ <tr valign="top">
+ <th align="left">Return Value&nbsp;</th>
+ <th align="left">Meaning</th>
+ </tr>
+
+ <tr valign="top">
+ <td><code class="rswd">false</code></td>
+ <td>An invalid number of required arguments has been provided</td>
+ </tr>
+
+ <tr valign="top">
+ <td><var>targetFrame</var></td>
+ <td>The function failed because the passed frame does not exist</td>
+ </tr>
+
+ <tr valign="top">
+ <td><var>sURL</var></td>
+ <td>Success</td>
+ </tr>
+ </table>
+
+ <p>Please do note that unlike the Go() function (for dropdown objects;
+ defined in dropdown.js) no exception is raised if the defined frame
+ does not exist as LoadFrame() is designed to stay silent also in
+ websites without framesets.</p>
+
+ <hr size="1">
+
+ <p><code><span class="rswd">boolean</span> <span class="ident"
+ ><a href="#enlargeImg" name="enlargeImg"
+ id="enlargeImg">enlargeImg</a></span><span class="punct"
+ >(</span>string&nbsp;<var><a href="#enlargeImg_sImageURL"
+ >sImageURL</a></var>,
+ [string&nbsp;<var><a href="#enlargeImg_sCaption"
+ >sCaption</a></var>, [number&nbsp;<var><a href="#enlargeImg_iWidth"
+ >iWidth</a></var>, [number&nbsp;<var><a href="#enlargeImg_iHeight"
+ >iHeight</a></var>, [<span class="rswd">boolean</span>&nbsp;<var><a
+ href="#enlargeImg_bCenter">bCenter</a></var>]]]]<span class="punct"
+ >)</span></code></p>
+
+ <p>Opens a dependent browser child window containing an (enlarged)
+ image. A primary button mouse click on the image or the window
+ closes the window.</p>
+
+ <dl>
+ <dt><var><a name="enlargeImg_sImageURL" id="enlargeImg_sImageURL"
+ >sImageURL</a></var></dt>
+ <dd>Required. URL of the (enlarged) image.</dd>
+
+ <dt><var><a name="enlargeImg_sCaption" id="enlargeImg_sCaption"
+ >sCaption</a></var></dt>
+ <dd>Optional. Caption of the browser child window.
+ If not provided,
+ <var><a href="#enlargeImg_sImageURL">sImageURL</a></var>
+ will be used as caption.</dd>
+
+ <dt><var><a name="enlargeImg_iWidth" id="enlargeImg_iWidth"
+ >iWidth</a></var></dt>
+ <dd>Optional. Width of the browser child window in pixels.
+ If not provided or <span class="num">0</span>, the window
+ will be resized to fit image width.</dd>
+
+ <dt><var><a name="enlargeImg_iHeight" id="enlargeImg_iHeight"
+ >iHeight</a></var></dt>
+ <dd>Optional. Height of the browser child window in pixels.
+ If not provided or <span class="num">0</span>, the window
+ will be resized to fit image height.</dd>
+
+ <dt><var><a name="enlargeImg_bCenter" id="enlargeImg_bCenter"
+ >bCenter</a></var></dt>
+ <dd>Optional. If <code class="rswd">true</code>, the window will be
+ centered on the screen. Note: Use with caution! Not all desktops
+ return the correct position for the centered window.</dd>
+ </dl>
+
+ <table>
+ <tr valign="top">
+ <th align="left">Returns:</th>
+ <td>Always <code class="rswd">false</code> which allows for<br>
+ <code class="a">&lt;a href=<span class="attrval"
+ >&quot;...&quot;</span> ... onclick=<span class="attrval"
+ >&quot;return&nbsp;enlargeImg(...)&quot;</span>&gt;...&lt;/a&gt;</code></td>
+ </tr>
+ </table>
+
+ <hr>
+
+ <h2><a href="#def" name="def" id="def">Expressions Used Herein</a></h2>
+ <dl>
+ <dt>null string</dt>
+ <dd>An empty string that contains no characters, i.e. is of
+ length 0 (zero).</dd>
+
+ <dt><code>(Expression1 | Expression2 | ...)</code></dt>
+ <dd>Exclusive selection of expressions in Backus-Naur Form (BNF).
+ [<a href="http://google.com/search?q=Backus-Naur+Form"
+ >details</a>]</dd>
+
+ <dt><code><a name="regexp">RegExp</a></code></dt>
+ <dd>A regular expression encapsulated by the RegExp object.
+ [<a href="http://web.archive.org/devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/regexp.html#1193136"
+ >details</a>]</dd>
+ </dl>
+
+ <h2><a href="#testlist" name="testlist" id="testlist"
+ >List of Browser Tests</a></h2>
+
+ <p>Tested to work at least with:</p>
+
+ <ul>
+ <li>Mozilla 1.2b nightly<br>
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b)
+ Gecko/2002102108]</li>
+
+ <li>Mozilla 1.2b nightly<br>
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2b)
+ Gecko/2002100604]</li>
+
+ <li>Mozilla 1.2a<br>
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.2a)
+ Gecko/20020911]</li>
+
+ <li>Mozilla 1.1b<br>
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.1b)
+ Gecko/20020722]</li>
+
+ <li>Netscape 7.0<br>
+ [Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.0.1)
+ Gecko/20020823 Netscape/7.0]</li>
+
+ <li>Mozilla 1.0<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0)
+ Gecko/20020605]</li>
+
+ <li>Mozilla 1.0 Release Candidate 3<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc3)
+ Gecko/20020523]</li>
+
+ <li>Mozilla 1.0 Release Candidate 2<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc2)
+ Gecko/20020510]</li>
+
+ <li>Mozilla 1.0 Release Candidate 1 nightly<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0rc1)
+ Gecko/20020417]</li>
+
+ <li>Mozilla 0.9.9<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.9)
+ Gecko/20020311]</li>
+
+ <li>Mozilla 0.9.8<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.8)
+ Gecko/20020204]</li>
+
+ <li>Mozilla 0.9.6<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.6)
+ Gecko/20011120]</li>
+
+ <li>Mozilla 0.9.4<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.4)
+ Gecko/20010913]</li>
+
+ <li>Netscape 6.1<br>
+ [Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:0.9.2)
+ Gecko/20010726 Netscape6/6.1]</li>
+
+ <li>Netscape 6.01<br>
+ [Mozilla/5.0 (X11; U; Linux 2.2.16 i586; de-DE; m18)
+ Gecko/20010131 Netscape6/6.01]</li>
+
+ <li>Microsoft Internet Explorer 6.0.2600.0000<br>
+ [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 3.0)]</li>
+
+ <li>Microsoft Internet Explorer 5.50.4807.2300IC</li>
+
+ <li>Microsoft Internet Explorer 5.50.4134.0600IC</li>
+
+ <li>Microsoft Internet Explorer 5.01 [5.00.2919.6307IC]</li>
+
+ <li>Microsoft Internet Explorer 5.00.2314.1003IC</li>
+ </ul>
+
+ <p>Your user agent <script type="text/javascript">
+ document.write('is <b>' + navigator.userAgent + '<\/b>');
+ </script>.
+ If it is not listed and the script works anyway,
+ send e-mail to add it to the list.</p>
+
+
+ <h2><a href="#history" name="history" id="history">Version History</a></h2>
+
+ <p><a href="#first">First version</a></p>
+
+ <h3><a name="last" id="last">1.29.20021009
+ / 1.29.2002.10b3 (2002-10-09)</a></h3>
+ <ul>
+ <li>Updated documentation:
+ <ul>
+ <li>Added link to last version</li>
+
+ <li>Added links to definitions</li>
+
+ <li>Updated definitions</li>
+
+ <li>Updated &quot;null&nbsp;string&quot; term</li>
+
+ <li>Unified Version History layout</li>
+ </ul></li>
+ </ul>
+
+ <h3><a name="v1.29.2002.8b" id="v1.29.2002.8b"
+ >1.29.20020825 / 1.29.2002.8b (2002-08-25)</a></h3>
+
+ <ul>
+ <li>Updated all functions:
+ <ul>
+ <li>changed $ident<code><span class="punct">.</span>arguments</code>
+ to <code>arguments</code> because it is an intrinsic property
+ of the function prototype</li>
+ </ul></li>
+ </ul>
+
+ <h3><a name="v1.25.2002.5" id="v1.25.2002.5"
+ >1.25.20020510 / 1.25.2002.5 (2002-05-10)</a></h3>
+ <ul>
+ <li>Renamed <code>EnhancedException</code> to
+ <code>enhancedException</code> and simplified code</li>
+
+ <li>Introduced <var>enhancedCopypright</var>, <var>enhancedAuthor</var>
+ and <var>enhancedEMail</var> global variables to store script-related
+ data for <strong>all</strong> script features, including
+ <code>getObjInfo(...)</code></li>
+
+ <li>Documentation update:
+ <ul>
+ <li>Have all code-related identifiers properly formatted</li>
+ </ul></li>
+ </ul>
+
+ <h3>1.24.20020506 / 1.24.2002.5 (2002-05-06)</h3>
+ <ul>
+ <li>Documentation update:
+ <ul>
+ <li>Link to jump to the first version listed in history</li>
+
+ <li>Use of definition lists</li>
+
+ <li>Changed headers</li>
+ </ul></li>
+ </ul>
+
+ <h3>1.22.20020422 / 1.22.2002.4 (2002-04-22)</h3>
+ <ul>
+ <li>Documentation update:
+ <ul>
+ <li>Word wrap at 72 characters (applies to documentation
+ standards)</li>
+
+ <li>Version History is no longer in columns but separate
+ paragraphs</li>
+ </ul></li>
+
+ <li>First version under the terms of the GNU GPL, version 2 or later.</li>
+ </ul>
+
+ <h3>1.19.20020223 / 1.19.2002.2 (2002-02-23)
+ / <tt>enhancd2.js</tt> 1.17.2002.2</h3>
+ <ul>
+ <li>Updated enlargeImg(...) function:<br>
+ Fixed bad bug with Mozilla/Netscape. Version of Mozilla newer than
+ 0.9.6. and of Netscape newer than 6.1 do assign "about:blank" to a
+ temporary document which causes relative paths used for its resources
+ to be invalid. Further use of relative paths is provided by an
+ algorithm, used in JSX:<a href="outline.txt">outline.js</a> before and
+ now improved, that calculates the correct absolute path when provided
+ the caller document's URL.</li>
+ </ul>
+
+ <h3>1.19.20020205 / 1.19.2002.2 (2002-02-05)
+ / <tt>enhancd2.js</tt> 1.16.2002.2</h3>
+ <ul>
+ <li>Updated enlargeImg(...) function:<br>
+ Changed back to wImage.document because Opera's document.open(...)
+ function does not return the created object --> dImage is useless
+ :(</li>
+
+ <li>Documentation update: Changed to HTML format</li>
+ </ul>
+
+ <h3>1.19.20020126 / 1.19.2002.1 (2002-01-26)
+ / <tt>enhancd2.js</tt> 1.15.2002.1</h3>
+ <ul>
+ <li>Updated enlargeImg(...) function:<br>
+ Now uses previously defined dImage variable instead of
+ wImage.document</li>
+ </ul>
+
+ <h3>1.19.20020118 / 1.19.2002.1 (2002-01-18)
+ / <tt>enhancd2.js</tt> 1.14.2002.1</h3>
+ <ul>
+ <li>Updated enlargeImg(...) function:<br>
+ Masked / in written closing tags with \/ (backslash-slash) as
+ described in <a href="http://selfhtml.teamone.de/"
+ >SELFHTML 8.0</a></li>
+
+ <li>Documentation update:<br>
+ Word wrap at 72 characters (applies to documentation standards),
+ and version history is no longer in columns but separate
+ paragraphs.</li>
+ </ul>
+
+ <h3>1.16.20010111 / 1.16.2001.1 (2001-01-11)</h3>
+ <ul>
+ <li>Moved general documentation to text file for faster processing</li>
+ </ul>
+
+ <h3>1.15.20001124 / 1.15.2000.11 (2000-11-24)</h3>
+ <ul>
+ <li>Improved <code>linkOut(...)</code> function:
+ <ul>
+ <li>Now always returns false for combined document use in both
+ <span class="a">href</span> attribute and
+ <span class="a">onclick</span> event handler of
+ <span class="a">A</span>-elements</li>
+ </ul></li>
+ </ul>
+
+ <h3>1.14.20001115 / 1.14.2000.11 (2000-11-15)</h3>
+ <ul>
+ <li>Improved <code>popUp(...)</code> and <code>OpenChildWin(...)</code>
+ functions:
+ <ul>
+ <li>Now both functions return false for combined document use in both
+ <span class="a">href</span> attribute and
+ <span class="a">onclick</span> event handler of
+ <span class="a">A</span>-elements</li>
+ </ul></li>
+
+ <li>Established string variable named <var>enhancedVersion</var> to
+ contain library version</li>
+ </ul>
+
+ <h3>1.13.20001017 / 1.13.2000.10 (2000-10-17)</h3>
+ <ul>
+ <li>Improved inline documentation</li>
+ </ul>
+
+ <h3>1.12.20000813 / 1.12.2000.8 (2000-08-13)</h3>
+ <ul>
+ <li>Tested script file successfully with IE5.5</li>
+ </ul>
+
+ <h3>1.11.20000703 / 1.11.2000.7 (2000-07-03)</h3>
+ <ul>
+ <li>Fixed some mysterious bugs with IE 5.01 on string arguments and large
+ HTML documents by assigning those strings to local variables and
+ splitting string assignments (+= Workaround).</li>
+
+ <li>Modified email subject line to Feedback/JSX/enhanced</li>
+ </ul>
+
+ <h3>1.10.20000610 / 1.10.2000.6 (2000-06-10)</h3>
+ <ul>
+ <li>Renamed <code>OpenChildWin(...)</code> function identifier to more
+ familiar and easier recognized term <code>popUp(...)</code>;
+ Compatibility to previous file versions is provided by internal call
+ redirection, though new documents should use the new identifier.</li>
+
+ <li>Improved inline documentation</li>
+ </ul>
+
+ <h3>1.09.20000327 / 1.09.2000.3 (2000-03-27)</h3>
+ <ul>
+ <li>Fixed &quot;location is not an object&quot; bug in
+ <code>linkOut(...)</code></li>
+
+ <li>Fixed spelling error in <code>EInvalidArg(...)</code> exception</li>
+
+ <li>Fixed global frame ID evaluation bug</li>
+ </ul>
+
+ <h3>1.08.20000323 / 1.08.2000.3 (2000-03-23)</h3>
+ <ul>
+ <li>Improved <code>setStatus(...)</code> function</li>
+ </ul>
+
+ <h3>1.07.20000320 / 1.07.2000.3 (2000-03-20)</h3>
+ <ul>
+ <li>Added <code>setStatus(...)</code> function</li>
+ </ul>
+
+ <h3><a name="first" id="first">1.05.20000321
+ / 1.05.2000.3 (2000-03-21)</a></h3>
+ <ul>
+ <li>Fixed and updated <code>linkOut(...)</code> function</li>
+ </ul>
+
+ <p><a href="#last">Last version</a></p>
+ </body>
+</html>
Index: live/doc/historic/time.txt
===================================================================
--- live/doc/historic/time.txt (nonexistent)
+++ live/doc/historic/time.txt (revision 509)
@@ -0,0 +1,86 @@
+ORIGINAL FILENAME: time.js
+PURPOSE: Provides SystemTime JavaScript Class
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.06.2001.1;
+ See timeVersion variable definition in script file.
+PART OF: PointedEars' JavaScript Extensions (JSX)
+DEPENDS ON: no file
+TESTED WITH:
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.08.2003.10 2003-10-09
+Changed CSystemTime to SystemTime
+
+1.06.2001.1 2001-01-11
+Moved general documentation to text file for faster processing.
+
+1.05.2000.10 2000-10-30
+Added fromData(...) method that allows to set props at once.
+
+1.04.2000.10 2000-10-30
+Improved initialization; now integers are stored only
+
+1.03.2000.10 2000-10-28
+Updated toString(...) method with bShowHours argument.
+Added dec...(...) methods and updated documentation.
+Corrected file header.
+
+1.02.2000.10 2000-10-22
+Added dayCount property
+Bugfixed BUG_INC_OVERFLOW
+
+1.01.2000.10 2000-10-22
+Added inc...(...) methods and arguments
+
+1.00.2000.10 2000-10-22
+Introduced script file moved from HTML inline scripts
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as time.js and appending the
+following section within the <HEAD></HEAD> tags of that documents:
+
+<script src="time.js" type="text/javascript"></script>
+
+The following items are provided by this script:
+
+SystemTime class
+__________________
+
+Properties: hours, minutes, seconds, sec100, dayCount
+Methods: decHours(...), decMinutes(...), decSeconds(...), decSec100(...),
+ incHours(...), incMinutes(...), incSeconds(...), incSec100(...), toString()
+
+Description:
+
+The JSX:SystemTime class provides encapsulation for time data independent from the
+JavaScript:Date class (which encapsulates date and time).
+
+The properties except dayCount define the time value stored in a SystemTime instance.
+
+The dayCount property is a Boolean value that defines whether the hours interval should
+be restricted from 0 to 23 (dayCount == true) or counted upwards until the
+upper Integer border (dayCount == false) is reached. Default is (dayCount == false).
+
+Use the dec...(...) methods to decrease and the inc...(...) methods to increase (tick)
+the value stored in the SystemTime in defined intervals
+[dec...(...) useful for a countdown display and inc...(...) for a website clock counter].
+
+Use the fromData(...) method to set all properties at once via the method call.
+
+Use the fromString(...) method to set properties reading a string that contain their values.
+
+Use the toString(...) method to return a string vice-versa that you can assign to the
+innerHTML property or other String properties for the visualization of the stored data.
+
+The fromString(...) and toString(...) methods are complementary
+[ t.fromString(t.toString()) should change nothing ].
Index: live/doc/historic/back.txt
===================================================================
--- live/doc/historic/back.txt (nonexistent)
+++ live/doc/historic/back.txt (revision 509)
@@ -0,0 +1,40 @@
+ORIGINAL FILENAME: back.js
+PURPOSE: Provides German JavaScript PageBack Support
+SCRIPT LANGUAGE/VERSION: JavaScript 1.2
+FILE VERSION: 1.00.2001.1
+PART OF: PointedEars' LCARS extensions
+DEPENDS ON: Any HTML that includes lcars.css with defined span.symbol
+TESTED WITH:
+ Microsoft Internet Explorer 5.50, displayed 5.50.4134.0600IC
+
+VERSION HISTORY
+1.01.2001.1 2001-01-11 Moved general documentation to text file for faster processing.
+1.00.2000.12 2000-12-05 Introduced script file moved from adapted top.js 1.01.2000.11
+
+COPYRIGHT (c) 2000 by PointedEars Software (PES).
+mailto:webmaster@PointedEars.de
+
+TERMS OF USE:
+This code may be used and modified within the limits described below
+for non-commercial purposes only and if the copyright above is also
+mentioned.
+
+HOW TO USE:
+I recommend to utilize the functions of this script in different
+HTML documents when saving the entire file as back.js and appending the
+following section within the <BODY></BODY> as follows:
+
+<p><a href="backfile.htm" class="button" onClick='this.blur(); history.back();'>
+<script language="JavaScript1.2" src="back.js" type="text/javascript"></script>
+<noscript>&nbsp;</noscript>[...]</a></p>
+
+You should write the code including the <script></script> section without any (CR)LF
+to avoid undesired spaces on display.
+
+
+Description
+------------
+
+Dependent whether W3C-conform DHTML is available (at the creation of this script this was only IE 5 and above),
+it utilizes the cascading style-sheet (CSS) named span.symbol defined in lcars.css to write the the "back" character
+(kind of "<") defined by this CSS instead of writing &nbsp;.
Index: live/doc/files.html
===================================================================
--- live/doc/files.html (nonexistent)
+++ live/doc/files.html (revision 509)
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="language">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Files &#8212; JSX API Documentation</title>
+ <base target="tree">
+ <style type="text/css">
+ <!--
+ ul {
+ padding-left: 0;
+ list-style: none;
+ }
+
+ li {
+ margin-left: 0;
+ }
+ -->
+ </style>
+ </head>
+
+ <body>
+ <h1>Files</h1>
+ <ul>
+ <li><a href="tree">All files</a></li>
+ <li><tt><a href="tree-ani.js">ani.js</a></tt></li>
+ <li><tt>array.js</tt></li>
+ <li><tt>collection.js</tt></li>
+ <li><tt>css.js</tt></li>
+ <li><tt>dhtml.js</tt></li>
+ <li><tt>exception.js</tt></li>
+ <li><tt>flash.js</tt></li>
+ <li><tt>global.js</tt></li>
+ <li><tt>grammar.js</tt></li>
+ <li><tt>httprequest.js</tt></li>
+ <li><tt>map.js</tt></li>
+ <li><tt>math.js</tt></li>
+ <li><tt>object.js</tt></li>
+ <li><tt>regexp.js</tt></li>
+ <li><tt>string.js</tt></li>
+ <li><tt>types.js</tt></li>
+ <li><tt>window.js</tt></li>
+ <li><tt>xpath.js</tt></li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
/live/doc/files.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/index.html
===================================================================
--- live/doc/index.html (nonexistent)
+++ live/doc/index.html (revision 509)
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
+ "http://www.w3.org/TR/html4/frameset.dtd">
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>JSX API Documentation</title>
+ </head>
+
+ <frameset cols="20%,*">
+ <frameset rows="30%,*">
+ <frame src="files">
+ <frame src="tree" name="tree">
+ </frameset>
+ <frame src="summary" name="main">
+ <noframes>
+ <body>
+ <h1>JSX API Documentation</h1>
+ </body>
+ </noframes>
+ </frameset>
+</html>
\ No newline at end of file
/live/doc/index.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/summary.html
===================================================================
--- live/doc/summary.html (nonexistent)
+++ live/doc/summary.html (revision 509)
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="language">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Summary &#8212; JSX API Documentation</title>
+ </head>
+
+ <body>
+ <h1>Summary</h1>
+ </body>
+</html>
\ No newline at end of file
/live/doc/summary.html
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/doc/style.css
===================================================================
--- live/doc/style.css (nonexistent)
+++ live/doc/style.css (revision 509)
@@ -0,0 +1,7 @@
+th, td {
+ vertical-align: top;
+}
+
+th {
+ text-align: left;
+}
\ No newline at end of file
/live/doc/style.css
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/.project
===================================================================
--- live/.project (nonexistent)
+++ live/.project (revision 509)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>JSX</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.python.pydev.PyDevBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.dltk.core.scriptbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.php.core.PHPNature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ <nature>org.python.pydev.pythonNature</nature>
+ </natures>
+</projectDescription>
Index: live/JSdoc/jsdoc-simple.js
===================================================================
--- live/JSdoc/jsdoc-simple.js (nonexistent)
+++ live/JSdoc/jsdoc-simple.js (revision 509)
@@ -0,0 +1,84 @@
+if (typeof de.pointedears.jsdoc == "undefined")
+{
+ /**
+ * @namespace
+ */
+ de.pointedears.jsdoc = {};
+}
+
+de.pointedears.jsdoc.generate = function (code) {
+ var rx = /\/\*\*(([^*]|\*[^\/])+)\*\//g, m;
+
+ while ((m = rx.exec(code)))
+ {
+ var comment = m[1].replace(/(<pre>[\S\s]+?<\/pre>)|^\s*\*\s*/gm, "$1");
+
+ comment = comment.replace(
+ /<title>([\S\s]+?)<\/title>/gi,
+ function (match, title) {
+ var newTitle = title + " – " + document.title;
+ document.title = newTitle;
+ window.top.document.title = newTitle;
+ return "";
+ });
+
+ comment = comment.replace(
+ /@filename\s+(\S+)/,
+ function (match, filename) {
+ var title = document.getElementById("title");
+ jsx.dom.removeChildren(title, title.childNodes);
+ title.appendChild(jsx.dom.createElementFromObj({
+ type: "tt",
+ childNodes: [
+ filename
+ ]
+ }));
+
+ return "";
+ });
+
+ comment = comment.replace(
+ /@version\s+(.+)/,
+ function (match, version) {
+ document.body.appendChild(jsx.dom.createElementFromObj({
+ type: "p",
+ childNodes: [
+ {
+ type: "b",
+ childNodes: [
+ "Version: "
+ ]
+ }, " " + version
+ ]
+ }));
+
+ return "";
+ });
+
+ comment = comment.replace(
+ /@section\s+(.+)|@author\s+(.*)|@partof\s+(.*)/g,
+ function (match, section, author, partof)
+ {
+ if (section)
+ {
+ return "<h2>" + section + "<\/h2>";
+ }
+
+ if (author)
+ {
+ return "<p>" + author + "<\/p>";
+ }
+
+ if (partof)
+ {
+ return "<p>Part of " + partof + "<\/p>";
+ }
+
+ return match;
+ });
+
+ var div = document.createElement("div");
+ div.innerHTML = comment;
+ document.body.appendChild(div);
+ }
+};
\ No newline at end of file
/live/JSdoc/jsdoc-simple.js
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: live/search.js
===================================================================
--- live/search.js (nonexistent)
+++ live/search.js (revision 509)
@@ -0,0 +1,231 @@
+/**
+ * <title>PointedEars' JSX: Search-String Library</title>
+ *
+ * @file search.js
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ * @requires types.js
+ *
+ * @author Copyright (c) 2000-2004
+ * Thomas Lahn &lt;search.js@PointedEars.de&gt;
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License (GPL) for more details.
+ *
+ * You should have received a copy of the GNU GPL along with this
+ * program (COPYING file); if not, go to [1] or write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * [1] <http://www.gnu.org/licenses/licenses.html#GPL>
+ */
+
+// Refer search.htm file for general documentation.
+
+/**
+ * Definition of the SearchString prototype which uses the functions
+ * above with names beginning with the prototype name, as methods.
+ *
+ * @param s : string
+ */
+function SearchString(s)
+{
+ this.version = "1.10.2006082411";
+ this.copyright = "Copyright \xA9 2000-2006";
+ this.author = "Thomas Lahn";
+ this.email = "search.js@PointedEars.de";
+ this.path = "http://pointedears.de.vu/scripts/";
+ this.URI = this.path + "search.js";
+
+ if (typeof s != "string")
+ {
+ if (typeof location != "undefined"
+ && typeof location.search != "undefined")
+ {
+ s = location.search;
+ }
+ else
+ {
+ return;
+ }
+ }
+
+ s = s.substring(s.lastIndexOf("?") + 1);
+ this.text = s;
+
+ // Determine method to be used for decoding URI components
+ var decode =
+ (jsx.object.isMethodType(typeof decodeURIComponent)
+ ? decodeURIComponent
+ : (jsx.object.isMethodType(typeof unescape)
+ ? unescape
+ : dummy));
+
+ /*
+ * For Mozilla/NS: Replace occurrences of "&nbsp;" with
+ * character "%A0"; requires linked string.js
+ */
+ this.text = replaceText(this.text, "&nbsp;", "%A0");
+
+ this.length = s.length;
+
+ var i;
+
+ for (i = 0; i < this.length; i++)
+ {
+ this[i] = s.charAt(i);
+ }
+
+ this.values = new Object();
+
+ if (this.length > 0)
+ {
+ var value_pair, sName, sValue;
+
+ if (jsx.object.isMethodType(typeof this.text.split))
+ {
+ var value_pairs = this.text.split(new RegExp("[&;]")), len;
+ for (i = 0, len = value_pairs.length; i < len; i++)
+ {
+ var p = value_pairs[i];
+ value_pair = p.split("=");
+ sName = decode(value_pair[0]);
+ sValue = (value_pair.length > 1
+ ? value_pair[1]
+ : (sName = "", value_pair[0]));
+
+ addValue(this.values, sName, decode(sValue))
+ }
+ }
+ else
+ {
+ for (i = 0; i < this.length;)
+ {
+ var idxAmp = this.text.substring(i).indexOf("&");
+ // Required by law
+ (idxAmp < 0) ? (idxAmp = this.length) : (idxAmp += i);
+
+ value_pair = this.text.substring(i, idxAmp);
+ var idxEquals = value_pair.indexOf("=");
+ sName = "";
+
+ if (idxEquals < 0)
+ {
+ sValue = value_pair;
+ }
+ else
+ {
+ sName = value_pair.substring(0, idxEquals);
+ sValue = value_pair.substring(idxEquals + 1);
+ }
+
+ addValue(this.values, decode(sName), decode(sValue));
+
+ i += value_pair.length + 1;
+ }
+ }
+ }
+}
+
+SearchString.prototype.isName =
+/**
+ * @param sName: string
+ * @param bCaseSensitive: optional boolean = false
+ * Provide <code>true</code> for case-sensitivity.
+ * @return <code>true</code> if the name <var>sName</var> exists,
+ * <code>false</code> otherwise.
+ */
+function searchString_isName(sName, bCaseSensitive)
+{
+ // FIXME: "A" is not found if bCaseSensitive == false
+ /*
+ if (!bCaseSensitive)
+ {
+ sName = sName.toLowerCase();
+ }
+ */
+
+ return (typeof this.values[sName] != "undefined");
+}
+
+SearchString.prototype.hasValue =
+/**
+ * @param sName: string
+ * @param bCaseSensitive: optional boolean = false
+ * Provide <code>true</code> for case-sensitivity.
+ * @return <code>true</code> if the name <var>sName</var> exists and its
+ * value is not the empty string, <code>false</code> otherwise.
+ */
+function searchString_hasValue(sName, bCaseSensitive)
+{
+ // FIXME (see above)
+ /*
+ if (!bCaseSensitive)
+ {
+ sName = sName.toLowerCase();
+ }
+ */
+
+ return (this.isName(sName, bCaseSensitive) && this.values[sName] != "");
+}
+
+SearchString.prototype.getValue =
+/**
+ * @param sName: string
+ * @param bCaseSensitive: optional boolean = false
+ * Provide <code>true</code> for case-sensitivity.
+ * @param bConvertCode: optional boolean = false
+ * @return The value of the name <var>sName</var> if it exists, "" otherwise.
+ */
+function searchString_getValue(sName, bCaseSensitive, bConvertCode)
+{
+ // FIXME (see above)
+ /*
+ if (!bCaseSensitive)
+ {
+ sName = sName.toLowerCase();
+ }
+ */
+
+ return (this.isName(sName) ? this.values[sName] : "");
+}
+
+/**
+ * Helper function for adding name-value pairs
+ * as properties of SearchString.values
+ *
+ * @param o: object
+ * @param sName: string
+ * @param sValue: optional string
+ */
+function addValue(o, sName, sValue)
+{
+ // if there is no property of that name create it
+ if (typeof o[sName] == "undefined")
+ {
+ o[sName] = sValue;
+ }
+ // if there is no array property of that name transform the property
+ else if (typeof o[sName] != "object")
+ {
+ o[sName] = [o[sName]];
+ }
+
+ // add to the array
+ if (typeof o[sName] == "object")
+ {
+ o[sName][o[sName].length] = sValue;
+ }
+}
+
+// Helper function that does nothing, for encoding/decoding URIs
+function dummy(x)
+{
+ return x;
+}
Index: live/grammar.js
===================================================================
--- live/grammar.js (nonexistent)
+++ live/grammar.js (revision 509)
@@ -0,0 +1,161 @@
+function Grammar(aProductions)
+{
+ this.version = "0.0.1";
+ this.productions = aProductions;
+}
+
+function Production(source, target)
+{
+ this.source = source;
+ this.target = target;
+}
+
+Production.prototype.toString = function() {
+ return this.source + '\n : ' + this.target;
+};
+
+function Modifier(expression, type)
+{
+ this.expression = expression;
+ this.type = type;
+}
+
+Modifier.prototype.toString = function() {
+ return this.expression + this.type;
+};
+
+function Group(aItems)
+{
+ this.items = aItems;
+}
+
+Group.prototype.toString = function() {
+ var result = "";
+ for ( var i = 0; i < this.items.length; i++)
+ {
+ if (i > 0)
+ {
+ result += ' ';
+ }
+ result += this.items[i];
+ }
+ return result;
+};
+
+function Alternative(aExpressions)
+{
+ this.expressions = aExpressions;
+}
+
+Alternative.prototype.toString = function() {
+ var result = "";
+ for ( var i = 0; i < this.expressions.length; i++)
+ {
+ if (this.expressions[i] instanceof Group)
+ {
+ result += "\n";
+ }
+ if (i > 0)
+ {
+ result += ' | ';
+ }
+ result += this.expressions[i];
+ }
+
+ return result;
+};
+
+function Expression(value)
+{
+ this.value = value;
+}
+
+Expression.prototype.toString = function() {
+ return this.value;
+};
+
+function Literal(sValue)
+{
+ this.value = sValue;
+}
+
+Literal.prototype.toString = function() {
+ return "'" + this.value + "'";
+};
+
+if (typeof jsx == "undefined")
+{
+ var jsx = {};
+}
+
+jsx.grammar = {
+ Grammar2: function (productions, autoResolve) {
+ for (var property in productions)
+ {
+ productions[property] = {
+ value: productions[property],
+ enumerable: true,
+ writable: true
+ };
+ }
+
+ this.productions = Object.create(null, productions);
+ if (autoResolve)
+ {
+ this.resolve();
+ }
+ }.extend(null, {
+ /**
+ * @memberOf jsx.grammar.Grammar2.prototype
+ */
+ resolve: function () {
+ var productions = this.productions;
+ for (var symbol in productions)
+ {
+ var production = productions[symbol];
+ var rxSymbol = /\\\{|\{([^\}]+)\}/g;
+ var resolverStack = [];
+ resolverStack.toString = function () {
+ return this.join(" --> ");
+ };
+
+ productions[symbol] = production.replace(rxSymbol,
+ function resolver (match, symbolRef) {
+ if (!symbolRef)
+ {
+ return match;
+ }
+
+ if (resolverStack.indexOf(symbolRef) > -1)
+ {
+ throw new Error(
+ "Grammar is not finite, goal symbol '" + symbolRef
+ + "' is cyclically defined: " + resolverStack);
+ }
+
+ resolverStack.push(symbolRef);
+
+ var unresolved = productions[symbolRef];
+
+ if (typeof unresolved != "undefined")
+ {
+ /* Resolve references recursively */
+ var rxSymbol = /\\\{|\{([^\}]+)\}/g;
+ var resolved = unresolved.replace(rxSymbol, resolver);
+ }
+ else
+ {
+ throw new Error(
+ "Goal symbol '" + symbolRef
+ + "' referenced in definition of goal symbol '" + symbol
+ + "' is not defined");
+ }
+
+ resolverStack.pop();
+
+ return resolved;
+ });
+ }
+ }
+ })
+};
\ No newline at end of file
Index: live/collection.js
===================================================================
--- live/collection.js (nonexistent)
+++ live/collection.js (revision 509)
@@ -0,0 +1,431 @@
+/**
+ * <title>PointedEars' Collection Library</title>
+ * @requires object.js
+ *
+ * @section Copyright & Disclaimer
+ *
+ * @author (C) 2002-2011 Thomas Lahn &lt;js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @section Abstract
+ *
+ * A collection in ECMAScript and its implementations is an object
+ * which has indexed items like an {@link Array} object.
+ * Unlike an <code>Array</code> object, it also has named items
+ * which refer to the same data as the indexed items. Each
+ * item receives a numeric index in order of assignment/addition,
+ * and if it is given, a name, too. Both indexes and names become
+ * properties of the collection and are thus accessible via the
+ * standard property accessor syntax:
+ * <code><var>object</var>["<var>property</var>"]</code>
+ * and, if <var>property</var> is an identifier,
+ * <code><var>object</var>.<var>property</var></code>.
+ * By internal references it is ensured that an operation on
+ * an item is performed on both the indexed item and its named
+ * counterpart.
+ *
+ * You could compare this behavior to an associative array in PHP,
+ * only that ECMAScript has no built-in concept of associative arrays.
+ *
+ * @TODO Inherit from jsx.map.Map, remove duplicate methods
+ */
+
+/**
+ * Creates and initializes a <code>Collection</code> object.
+ *
+ * @param o : optional Object
+ * reference used to fill the collection.
+ * @constructor
+ */
+jsx.Collection = function(o) {
+ this.version = "0.1.2008120823";
+ this.copyright = "Copyright \xA9 2002-2008";
+ this.author = "Thomas Lahn";
+ this.email = "collection.js@PointedEars.de";
+ this.path = "http://pointedears.de/scripts/";
+ this.URI = this.path + "collection.js";
+// this.docURI = this.path + "collection.htm";
+ this.allowExceptionMsg = true;
+
+ this.set(o);
+};
+
+jsx.Collection.extend(Array);
+
+/**
+ * Adds an item to a {@link Collection}.
+ *
+ * @param val
+ * @param name : optional string
+ * Reference to an object used to fill the collection.
+ * @return CollectionItem
+ * the added item
+ */
+jsx.Collection.prototype.add = function (val, name) {
+ var index = this.items.length;
+ this.items[index] = new jsx.CollectionItem(val);
+
+ if (name && isNaN(name))
+ {
+ this.items[name] = this.items[index];
+ }
+
+ return this.items[index];
+};
+
+/**
+ * @param o : optional Object
+ * reference used to append to the collection.
+ */
+jsx.Collection.prototype.addItems = function (o) {
+ var result = null;
+
+ for (var i in o)
+ {
+ /* omit deleted items */
+ if (typeof o[i] != "undefined")
+ {
+ result = this.add(o[i], i);
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Removes all items from the {@link Collection}.
+ *
+ * @type Array
+ */
+jsx.Collection.prototype.clear = function () {
+ this.items = [];
+
+ if (typeof this.items.map != "function")
+ {
+ this.items.map = function (callback, thisObj) {
+ var a = this;
+
+ if (typeof callback == "function")
+ {
+ if (!thisObj)
+ {
+ thisObj = this;
+ }
+
+ a = [];
+ for (var i = 0, len = this.length; i < len; i++)
+ {
+ a[i] = callback.call(thisObj, this[i], i, this);
+ }
+ }
+ else
+ {
+ (function() {
+ eval("throw new TypeError('Collection.prototype.items.map(callback, thisObj):'"
+ + "+ ' expected function, got ' + typeof thisObj)");
+ }());
+ }
+
+ return a;
+ };
+ }
+
+ return this.items;
+};
+
+jsx.Collection.prototype.keys = function () {
+ var a = [], o = this.items;
+
+ for (var k in o)
+ {
+ a.push(o[k]);
+ }
+
+ return a;
+};
+
+jsx.Collection.prototype.values = function () {
+ return this.items.map(function(v) { return v; });
+};
+
+/**
+ * Returns a reference to a new {@link Iterator} for the {@link Collection}.
+ *
+ * @return Iterator
+ */
+jsx.Collection.prototype.iterator = function () {
+ return new jsx.Iterator(this.items);
+};
+
+/**
+ * @param o : optional Object
+ * reference used to fill the {@link Collection}.
+ */
+jsx.Collection.prototype.set = function (o) {
+ this.clear();
+ return this.addItems(o);
+};
+
+/**
+ * Creates and initializes a <code>ValueCollection</code> object,
+ * which is a special {@link Collection} that can hold a value.
+ *
+ * @param o : Object
+ * reference used to fill the collection
+ * @param val
+ * Value that the object holds
+ */
+jsx.ValueCollection = function(o, val) {
+ jsx.Collection.call(o);
+ this.value = val;
+};
+jsx.ValueCollection.extend(jsx.Collection);
+
+/**
+ * Creates and initializes a <code>CollectionItem</code> object.
+ *
+ * @param val
+ * Value of the item
+ */
+jsx.CollectionItem = function(val) {
+ this.value = val;
+};
+
+/**
+ * Creates an initializes an <code>Iterator</code> object.
+ * An iterator iterates over a {@link Collection} such that
+ * each item of that collection is visited only once.
+ *
+ * @param o : Collection
+ * Iteration target
+ */
+jsx.Iterator = function(o) {
+ /* properties */
+ this.target = o;
+ this.prevItem = -1;
+ this.currItem = -1;
+ this.nextItem = -1;
+};
+
+/* prototype methods */
+/**
+ * Returns the item previously visited in the iteration.
+ *
+ * @return CollectionItem
+ * The item previously visited in the iteration.
+ */
+jsx.Iterator.prototype.prev = function () {
+ var result;
+ var t = this.target;
+
+ if (t)
+ {
+ /* no need to search if already found by hasPrev() */
+ if (this.prevItem > -1)
+ {
+ this.currItem = this.prevItem;
+ result = t[this.currItem];
+ }
+ else if (typeof t.length != "undefined")
+ {
+ if (this.currItem < 1 || this.currItem > t.length - 1)
+ {
+ this.currItem = t.length;
+ }
+
+ this.nextItem = this.currItem;
+
+ var i = this.currItem;
+
+ /* start from next possible item */
+ /* run through only one time */
+ while (--i > -1 && typeof t[i] == "undefined")
+ {
+ ;
+ }
+
+ if (typeof t[i] != "undefined")
+ {
+ this.currItem = i;
+ result = t[i];
+ }
+ }
+ }
+
+ this.prevItem = -1;
+
+ return result;
+};
+
+/**
+ * Returns the item that will next be visited in the iteration.
+ *
+ * @return CollectionItem
+ * The item that will next be visited in the iteration.
+ */
+jsx.Iterator.prototype.next = function () {
+ var
+ result,
+ t = this.target;
+
+ if (t)
+ {
+ /* no need to search if already found by hasNext() */
+ if (this.nextItem > -1)
+ {
+ this.currItem = this.nextItem;
+ result = t[this.currItem];
+ }
+ else if (typeof t.length != "undefined")
+ {
+ if (this.currItem < 0
+ || this.currItem > t.length - 1)
+ {
+ this.currItem = -1;
+ }
+
+ this.prevItem = this.currItem;
+
+ var i = this.currItem;
+
+ /* start from next possible item */
+ /* run through only one time */
+ while (++i < t.length && typeof t[i] == "undefined")
+ {
+ ;
+ }
+
+ if (typeof t[i] != "undefined")
+ {
+ this.currItem = i;
+ result = t[i];
+ }
+ else
+ {
+ this.currItem = -1;
+ result = null;
+ }
+ }
+ }
+
+ this.nextItem = -1;
+
+ return result;
+};
+
+/**
+ * Returns <code>true</code> if there is a previous item
+ * in the iteration, i.e. if the current item is not the
+ * first item and the collection consists of more than
+ * one item. Returns <code>false</code> otherwise.
+ *
+ * @return boolean
+ * <code>true</code> if there is a previous item
+ * in the iteration, <code>false</code> otherwise.
+ */
+jsx.Iterator.prototype.hasPrev = function () {
+ var result = false;
+ this.prevItem = -1;
+ var t = this.target;
+
+ if (t)
+ {
+ if (this.currItem < 1
+ || this.currItem > t.length - 1)
+ {
+ this.currItem = t.length;
+ }
+
+ /* start from next possible item */
+ var i = this.currItem;
+
+ /* run through only one time */
+ while (--i > -1 && typeof t[i] == "undefined")
+ {
+ ;
+ }
+
+ if (typeof t[i] != "undefined")
+ {
+ this.prevItem = i;
+ result = true;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Returns <code>true</code> if there is a next item
+ * in the iteration, i.e. if the current item is not the
+ * last item and the collection consists of more than
+ * one item. Returns <code>false</code> otherwise.
+ *
+ * @return boolean
+ * <code>true</code> if there is a next item
+ * in the iteration, <code>false</code> otherwise.
+ */
+jsx.Iterator.prototype.hasNext = function () {
+ var result = false;
+ this.nextItem = -1;
+ var t = this.target;
+
+ if (t)
+ {
+ if (this.currItem < 0
+ || this.currItem > t.length - 1)
+ {
+ this.currItem = -1;
+ }
+
+ /* start from next possible item */
+ var i = this.currItem;
+
+ /* run through only one time */
+ while (++i < t.length && typeof t[i] == "undefined")
+ {
+ ;
+ }
+
+ if (typeof t[i] != "undefined")
+ {
+ this.nextItem = i;
+ result = true;
+ }
+ }
+
+ return result;
+};
+
+/**
+ * Removes the current item from the collection.
+ *
+ * @type mixed
+ * @return the next item, <code>undefined</code> if there is none.
+ */
+jsx.Iterator.prototype.remove = function () {
+ var undef;
+ delete this.target[this.currItem];
+ if (this.hasNext())
+ {
+ return this.next();
+ }
+
+ return undef;
+};
\ No newline at end of file
Index: live/.buildpath
===================================================================
--- live/.buildpath (nonexistent)
+++ live/.buildpath (revision 509)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+ <buildpathentry excluding="test/es-matrix/**|test/es-matrix2/**" kind="src" path=""/>
+ <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
+</buildpath>
Index: live/style.css
===================================================================
--- live/style.css (nonexistent)
+++ live/style.css (revision 509)
@@ -0,0 +1,112 @@
+/* Script documentation style-sheet */
+
+/* General */
+body {
+ background-color: white;
+ color: black;
+}
+
+h1 {
+ margin-bottom: 0;
+}
+
+a:link:hover, a:visited:hover {
+ background-color: transparent;
+ color: red;
+ text-decoration: none;
+}
+
+code {
+ /* Inconsolata is borken in Safari 5.0 on Wine */
+ font-family: Inconsolata, Consolas, monospace;
+}
+
+/* HTML language elements */
+.text {
+ background-color: transparent;
+ color: black;
+}
+
+.entity {
+ background-color: transparent;
+ color: black;
+ font-weight: bold;
+ font-style: italic;
+}
+
+.tag, .tagname {
+ background-color: transparent;
+ color: navy;
+}
+
+.img {
+ background-color: transparent;
+ color: purple;
+}
+
+.object {
+ background-color: transparent;
+ color: maroon;
+}
+
+.attrval {
+ background-color: transparent;
+ color: blue;
+}
+
+.scr {
+ background-color: transparent;
+ color: #900;
+}
+
+.a {
+ background-color: transparent;
+ color: #090;
+}
+
+/* JavaScript language elements */
+.comm {
+ background-color: transparent;
+ color: #999;
+ font-style: italic;
+}
+
+.ident {
+ background-color: transparent;
+ color: black;
+ font-weight: bold;
+}
+
+.rswd {
+ background-color: transparent;
+ color: #009;
+ font-weight: bold;
+}
+
+.regexp {
+ background-color: transparent;
+ color: #900;
+}
+
+var {
+ font-style: italic;
+}
+
+.str {
+ font-style: italic;
+}
+
+.num {
+ background-color: transparent;
+ color: red;
+}
+
+.punct {
+ background-color: transparent;
+ color: blue;
+}
+
+.punct2 {
+ background-color: transparent;
+ color: #090;
+}
\ No newline at end of file
Index: live/window.js
===================================================================
--- live/window.js (nonexistent)
+++ live/window.js (revision 509)
@@ -0,0 +1,445 @@
+/**
+ * <title>Window Function Library</title>
+ * @file window.js
+ * @author
+ * (C) 1999‒2011 Thomas Lahn &lt;window.js@PointedEars.de&gt;
+ *
+ * @partof PointedEars' JavaScript Extensions (JSX)
+ *
+ * JSX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JSX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with JSX. If not, see <http://www.gnu.org/licenses/>.
+ */
+/*
+ * Refer window.htm file for general documentation.
+ *
+ * This document contains JavaScriptDoc. Refer
+ * http://pointedears.de/scripts/JSDoc/
+ * for details.
+ */
+var windowVersion = "1.29.2009052620";
+var windowCopyright = "Copyright \xA9 1999-2009";
+var windowAuthor = "Thomas Lahn";
+var windowEmail = "window.js@PointedEars.de";
+var windowPath = "http://pointedears.de/scripts/";
+// var windowDocURL = windowPath + "window.htm";
+
+/* Script exceptions */
+
+/**
+ * @param Msg : string
+ * @type boolean
+ * @return false
+ */
+function windowException(Msg)
+{
+ alert(
+ "window.js "
+ + windowVersion
+ + "\n"
+ + windowCopyright
+ + " "
+ + windowAuthor
+ + " <"
+ + windowEmail
+ + ">\n\n"
+ + Msg);
+ return false;
+}
+
+/**
+ * @param sFunctionName : string
+ * @param iArg : number
+ * @return boolean
+ */
+function EInvalidArgNum(sFunctionName, iArg)
+{
+ // if (arguments.length < 2) iArg = "?";
+ return windowException(
+ sFunctionName
+ + ": The user script did not pass the required number of arguments ("
+ + iArg
+ + ").\nRefer documentation in script file for correct function call.");
+}
+
+/* Script features */
+
+/**
+ * @param sCaption : string
+ * @type boolean
+ * @return true
+ */
+function setStatus(sCaption)
+{
+ window.status = sCaption;
+ return true;
+}
+
+/**
+ * @type boolean
+ * @return true
+ */
+function resetStatus()
+{
+ window.status = window.defaultStatus;
+ return true;
+}
+
+var sLinkOutMsg_de =
+ "Dieser Link ist offline nicht verfügbar.\n\n"
+ + "Wenn Sie mit dem Internet verbunden sind, steht Ihnen die Seite online"
+ + " zur Verfügung.\n\n"
+ + "Möchten Sie jetzt eine Verbindung zu dieser Seite herstellen?";
+var sLinkOutMsg_us =
+ "This link is not available offline.\n\n"
+ + "If you are connected to the Internet, the website is available online.\n\n"
+ + "Do you wish to connect to this website now?';";
+var sLinkOutMsg = sLinkOutMsg_de;
+
+/**
+ * @param sURL : string
+ * @param sLink : string
+ * @param bShowURL : boolean
+ * @param aTarget : number|string
+ * @param iWidth : number
+ * @param iHeight : number
+ * @param sOptions : string
+ * @type boolean
+ * @return false
+ */
+function linkOut(sURL, sLink, bShowURL, aTarget, iWidth, iHeight, sOptions)
+{
+ if (arguments.length < 1)
+ {
+ EInvalidArgNum("linkOut", 1);
+ return false;
+ }
+
+ var arg = sLinkOutMsg;
+ /*
+ * version 1.05.2000.3 update, formerly bShowURL as 2nd argument;
+ * fixed problem with websites created earlier
+ */
+ if (arguments.length < 3)
+ {
+ bShowURL = true;
+ }
+
+ var oldArg;
+ if ((sURL != "" && bShowURL == true)
+ || (arguments.length >= 2 && sLink != ""))
+ {
+ oldArg = arg;
+ arg = "\n\n" + oldArg;
+ }
+
+ if (sURL != "" && bShowURL)
+ {
+ oldArg = arg;
+ arg = sURL + oldArg;
+ }
+
+ if (arguments.length >= 2 && sLink != "")
+ {
+ if (sURL != "" && bShowURL)
+ {
+ oldArg = arg;
+ arg = sLink + "\n" + oldArg;
+ }
+ else
+ {
+ oldArg = arg;
+ arg = sLink + oldArg;
+ }
+ }
+
+ if (window.confirm(arg))
+ {
+ var oTarget = document;
+ if (arguments.length >= 4
+ && aTarget != ""
+ && aTarget.toLowerCase() != "_self")
+ {
+ /*
+ * version 1.05.2000.3 update, formerly neither empty strings
+ * nor "_self" supported
+ */
+ if (isNaN(aTarget))
+ {
+ if (aTarget.toLowerCase() == "_new"
+ || aTarget.toLowerCase() == "_blank")
+ {
+ popUp(sURL, iWidth, iHeight, sOptions);
+ return false;
+ }
+ oTarget = parent.frames[aTarget].document;
+ /* and below: v1.09.2000.3 bugfix */
+ }
+ else
+ {
+ oTarget = parent.frames[aTarget].document;
+ }
+ }
+ oTarget.location = "";
+ oTarget.location.href = sURL;
+ }
+
+ /* version 1.15.2000.11 update */
+ return false;
+}
+
+/**
+ * @param sURL : string
+ * @param iWidth : number
+ * @param iHeight : number
+ * @param sOptions : string
+ * @type boolean
+ * @return false
+ */
+function popUp(sURL, iWidth, iHeight, sOptions)
+{
+ var sFeatures = "height=" + iHeight + ",width=" + iWidth;
+ if (arguments.length > 3)
+ {
+ sFeatures += "," + sOptions;
+ }
+ var wndChild = window.open(sURL, null, sFeatures);
+ return false;
+}
+
+/*
+ * OpenChildWin(...) call redirected to popUp(...) for compatibility to
+ * previous versions
+ */
+var OpenChildWin = popUp;
+
+/**
+ * @param sURL : string
+ * @param targetFrame : number|string
+ * @return Window
+ */
+function LoadFrame(sURL, targetFrame)
+{
+ if (arguments.length < 2)
+ {
+ /* Raise exception if required arguments are missing */
+ return EInvalidArgNum("LoadFrame", 2);
+ }
+
+ if (isNaN(targetFrame))
+ {
+ if (parent.eval(targetFrame))
+ {
+ parent.eval(targetFrame).location.href = sURL;
+ return sURL;
+ }
+
+ return targetFrame;
+ }
+
+ if (parent.frames[targetFrame])
+ {
+ parent.frames[targetFrame].location.href = sURL;
+ return sURL;
+ }
+
+ return targetFrame;
+}
+var sEnlargeImgTitle_en = "Click to close window";
+var sEnlargeImgTitle_de = "Klicken, um Fenster zu schliessen";
+var sEnlargeImgTitle = sEnlargeImgTitle_en;
+
+/**
+ * @param sImageURL : string
+ * @param sCaption : string
+ * @param iWidth : number
+ * @param iHeight : number
+ * @param bCenter : boolean
+ * @type boolean
+ * @return false
+ */
+function enlargeImg(sImageURL, sCaption, iWidth, iHeight, bCenter)
+{
+ var ident = enlargeImg;
+ var argnum = ident.arguments.length;
+ if (sImageURL.charAt(0) != "/")
+ {
+ /*
+ * Version 1.17.2002.2 bugfix:
+ * Calculates absolute image file paths of relative ones
+ * Fixes bug with Mozilla 0.9.7 and above (includes Netscape 6.1+)
+ * that generated pages have no path except about:blank which causes
+ * relative paths for their resources to fail
+ */
+ /* Windows local path */
+ var iPathEnd = window.location.pathname.lastIndexOf('\\');
+ if (iPathEnd < 0)
+ {
+ iPathEnd = window.location.pathname.lastIndexOf('/');
+ }
+
+ /* URL */
+ if (iPathEnd > -1)
+ {
+ /* Extend filename to full path */
+ sImageURL = window.location.pathname.substring(0, iPathEnd)
+ + "/" + sImageURL;
+ }
+ }
+
+ if (argnum < 1)
+ {
+ return (EInvalidArgNum("Level 2: enlargeImg", 1));
+ }
+
+ /* preset also window position and size in the case the temporary script below fails */
+ var sOptions =
+ "toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=yes"
+ + ((argnum > 2) && !isNaN(iWidth)) ? (",width=" + iWidth + 12) : ""
+ + ((argnum > 3) && !isNaN(iHeight)) ? (",height=" + iHeight + 32) : ""
+ + ",left="
+ + parseInt(screen.width / 2 - (argnum > 2
+ && !isNaN(iWidth) ? iWidth / 2 : 0))
+ + ",top="
+ + parseInt(screen.height / 2 - (argnum > 3
+ && !isNaN(iHeight) ? iHeight / 2 : 0));
+
+ var w = window.open("", "wndZoom", sOptions);
+ if (w)
+ {
+ var d = w.document;
+ if (d)
+ {
+ d.open("text/html");
+ var s = [
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"',
+ ' "http://www.w3.org/TR/html4/loose.dtd">',
+ '<html>',
+ ' <head>',
+ ' <meta http-equiv="Content-Type" content="text/html;'
+ + ' charset=UTF-8">',
+
+ ' <meta name="generator" value="JSX:window.js{',
+ + windowVersion + '}:enlargeImg(...) ' + windowCopyright
+ + ' ' + windowAuthor + ' &lt;' + windowEmail + '&gt;">',
+
+ ' <title>' + ((argnum > 1 && sCaption != "") ? sCaption : sImageURL)
+ + '<\/title>',
+
+ /*
+ * temporary script and updated inline code to fix
+ * BUG_Enlarge:ALWAYS_FIT-TO-IMAGE
+ */
+ ' <script type="text/javascript">',
+ ' var orig = {};\n',
+
+ ' function fitWindowToImage()',
+ ' {',
+ ' var imgWidth = '
+ + (argnum > 2 && iWidth != 0 ? iWidth : "document.images[0].width + 12")
+ + ';',
+ ' var imgHeight = '
+ + (argnum > 3 && iHeight != 0 ? iHeight : "document.images[0].height + 32")
+ + ';\n',
+
+ /* MSHTML */
+ ' if (typeof window.resizeTo == "object")',
+ ' {',
+ ' orig.left = window.screenLeft;',
+ ' orig.top = window.screenTop;',
+ ' orig.width = window.width;',
+ ' orig.height = window.height;',
+ ' window.resizeTo(imgWidth, imgHeight);',
+ ' }',
+ /* Gecko */
+ ' else if (typeof window.sizeToContent == "function")',
+ ' {',
+ ' orig.left = window.screenX;',
+ ' orig.top = window.screenY;',
+ ' orig.width = window.innerWidth;',
+ ' orig.height = window.innerHeight;',
+ ' window.sizeToContent();',
+ ' }',
+ /* NN4 */
+ ' else if (typeof document.layers == "object")',
+ ' {',
+ ' orig.left = window.screenX;',
+ ' orig.top = window.screenY;',
+ ' orig.width = window.innerWidth;',
+ ' orig.height = window.innerHeight;',
+ ' window.innerWidth = document.width;',
+ ' window.innerHeight = document.height;',
+ ' }',
+
+ (argnum < 5 || argnum > 4 && bCenter && window.moveTo)
+ ? (' window.moveTo(\n'
+ + ' screen.width/2 - imgWidth/2,\n'
+ + ' screen.height/2 - imgHeight/2);\n')
+ : '',
+ ' }\n',
+
+ ' function restoreWindowSize()',
+ ' {',
+ ' if (typeof orig.left != "undefined"',
+ ' && typeof orig.top != "undefined"',
+ ' && typeof window.resizeTo != "undefined")',
+ ' window.resizeTo(orig.left, orig.top);\n',
+ ' if (document.all && window.resizeTo)',
+ ' {',
+ ' try',
+ ' {',
+ ' window.screenLeft = orig.left;',
+ ' window.screenTop = orig.top;',
+ ' }',
+ ' catch (e)',
+ ' {}',
+ ' }',
+ ' else if (typeof window.sizeToContent == "function"',
+ ' || typeof document.layers == "object")',
+ ' {',
+ ' window.screenX = orig.left;',
+ ' window.screenY = orig.top;',
+ ' window.innerWidth = orig.width;',
+ ' window.innerHeight = orig.height;',
+ ' }',
+ ' }',
+ ' <\/script>',
+ ' <\/head>\n',
+ ' <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"'
+ + ' style="margin: 0 !important">',
+ ' <a href="javascript:restoreWindowSize();window.close();"',
+ ' title="' + sEnlargeImgTitle + '"',
+ ' onclick="restoreWindowSize(); window.close(); return false;">'
+ + '<img',
+ ' src="' + sImageURL + '" border="0"',
+ ' onload="fitWindowToImage(this);"><\/a>',
+ ' <\/body>',
+ '<\/html>'
+ ].join("\n");
+ d.write(s);
+ d.close();
+ w.focus();
+ }
+ else
+ {
+ w.close();
+ return true;
+ }
+ }
+
+ return false;
+}
+/*
+ * Enlarge(...) call redirects to enlargeImg(...) for
+ * compatibility with previous versions
+ */
+var Enlarge = enlargeImg;
\ No newline at end of file
Index: live/document.js
===================================================================
--- live/document.js (nonexistent)
+++ live/document.js (revision 509)
@@ -0,0 +1,703 @@
+/*
+ * The following tag used for display in advanced file listings only:
+ * <title>JavaScript Routines and Objects to Create Temporary Documents</title>
+ *
+ * See document.txt file for general documentation.
+ */
+
+var documentVersion = "v1.20.2005080609";
+var sAuthorCopyright = "\xA9 2000-2005 by Thomas Lahn (PES)";
+var sAuthorEMail = "webmaster@PointedEars.de";
+
+/* Script exceptions */
+
+var sCopyright =
+ "document.js "
+ + documentVersion
+ + " "
+ + sAuthorCopyright
+ + "\nmailto:"
+ + sAuthorEMail
+ + "\n\n";
+
+function HTMLException(Msg)
+{
+ alert( sCopyright + Msg );
+ return false;
+}
+
+function ENoDocument(sFunctionName)
+{
+ // var sFunctionName = (sFunctionName != null) ? sFunctionName + ": " : "";
+
+ /*
+ * Passing the name of the function which caused the exception currently not
+ * possible
+ */
+ return HTMLException(
+ "The specified target object does not exist."
+ + " Please check your assignment(s) to the HTMLdoc variable.");
+}
+
+function EInvalidArgNum(sFunctionName, iArg)
+{
+ return HTMLException(
+ sFunctionName
+ + ": The user script did not pass the required number of arguments ("
+ + iArg
+ + "). Refer documentation in script file for correct function call.");
+}
+
+/* Script features */
+if (typeof jsx == "undefined") var jsx = {};
+
+if (typeof jsx.document == "undefined")
+{
+ jsx.document = {
+ write: function(s) {
+ return jsx.tryThis(
+ function() {
+ document.write(s);
+
+ /* fix circular reference */
+ s = null;
+
+ return true;
+ },
+ function() {
+ /* try without namespaces first (presumably HTML or loose XHTML) */
+ var scripts = document.getElementsByTagName("script");
+
+ if (!scripts || !scripts.length)
+ {
+ /* try with namespace (presumably strict XHTML) */
+ scripts = document.getElementsByTagNameNS(
+ document.documentElement.getAttribute("xmlns"),
+ "script");
+ }
+
+ /* Can we locate ourselves at all? */
+ if (scripts && scripts.length)
+ {
+ var thisScript = scripts[scripts.length - 1];
+ var node = thisScript.parentNode.insertBefore(
+ document.createTextNode(s),
+ thisScript);
+ }
+
+ /* fix circular reference */
+ s = null;
+
+ return node;
+ }) || false;
+ }
+ };
+}
+
+var HTMLdoc = document;
+
+/* Version 1.05.x OOP Extension */
+var HTMLinstance = new _HTMLDocument(HTMLdoc);
+
+function docCheck(bRaiseException)
+{
+ if (HTMLdoc)
+ {
+ return true;
+ }
+
+ if (arguments.length = 1 && bRaiseException == true)
+ {
+ ENoDocument(docCheck.caller);
+ }
+
+ return false;
+}
+
+/* Document Type Definitions and HTML 4.0 Tag Policy URLs */
+
+/* DTD for HTML 2.0 documents */
+var dtdHTML2 = '"-//W3C//DTD HTML 2.0//EN"';
+
+/* DTD for HTML 3.2 documents */
+var dtdHTML32 = '"-//W3C//DTD HTML 3.2//EN"';
+
+/* DTD for HTML 4.01 documents */
+var dtdHTML4 = '"-//W3C//DTD HTML 4.01//EN"';
+
+/* DTD for HTML 4.01 documents including frameset definition */
+var dtdHTML4frm = '"-//W3C//DTD HTML 4.01 Frameset//EN"';
+
+/* DTD for HTML 4.01 documents containing deprecated elements and attributes */
+var dtdHTML4scr = '"-//W3C//DTD HTML 4.01 Transitional//EN"';
+
+/* URL of DTD for HTML 4.01 documents containing deprecated elements and attribs */
+var dtdURL_HTML4dep = '\n "http://www.w3.org/TR/html4/loose.dtd"';
+
+/* URL of DTD for HTML 4.01 documents that define framesets */
+var dtdURL_HTML4frm = '\n "http://www.w3.org/TR/html4/frameset.dtd"';
+
+/* URL of DTD for documents that use strict HTML 4.01 syntax */
+var dtdURL_HTML4str = '\n "http://www.w3.org/TR/html4/strict.dtd"';
+
+function HTMLdocOpen(sDTD, bReplace)
+{
+ if (!docCheck(true)) return;
+
+ /*
+ * version 1.08.2000.3 bugfix, formerly: ...length = 2(!)
+ * and separated sections
+ */
+
+ // if( HTMLdoc.location.href != "" ) HTMLdoc.close();
+ if (arguments.length == 2 && bReplace == true)
+ {
+ HTMLdoc.open("text/html", "replace");
+ }
+ else
+ {
+ HTMLdoc.open("text/html");
+ }
+
+ if (arguments.length < 1)
+ {
+ sDTD = "";
+ }
+ HTMLdoc.writeln("<!DOCTYPE html PUBLIC ", sDTD, ">\n<html>\n");
+}
+
+function HTMLdocClose()
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ HTMLdoc.writeln("</html>");
+ HTMLdoc.close();
+}
+
+function docWrite(s)
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ HTMLdoc.write(s);
+}
+
+function docWriteLn(s)
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ HTMLdoc.writeln(s);
+}
+
+var HTMLtagCount = 0;
+
+function HTMLwriteTag(sTag, sAttrib, sContent)
+{
+ var sWrite = "";
+
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ if (arguments.length < 1 || sTag == "")
+ {
+ EInvalidArgNum("HTMLwriteTag", 1);
+ return;
+ }
+
+ /* for better document compression rates */
+
+ sTag = sTag.toLowerCase();
+
+ if (arguments.length < 2)
+ {
+ /* use default value if argument missing */
+ sAttrib = "";
+ }
+
+ if (arguments.length < 3)
+ {
+ /* use default value if argument missing */
+ sContent = "";
+ }
+
+ sWrite = "<" + sTag;
+
+ if (sAttrib != "" )
+ {
+ sWrite += " " + sAttrib;
+ }
+
+ sWrite += ">";
+
+ if (sContent != "")
+ {
+ sWrite +=
+ sContent + "</" + sTag + ">";
+ for (var i = 4; i < arguments.length; i++)
+ {
+ sWrite += arguments[i];
+ }
+ }
+
+ HTMLdoc.write(sWrite);
+ HTMLtagCount++;
+
+ /* OOP extension */
+ HTMLinstance.tagCount = HTMLtagCount;
+
+ /*
+ * TODO Bug: Text is written twice into the document when the function
+ * result is used as argument. Workaround required to uncomment
+ * return statement.
+ */
+ // return sWrite;
+}
+
+var HTMLmetaCount = 0;
+
+function HTMLwriteMeta(sName, sHTTPequiv, sContent)
+{
+ if (arguments.length != 3)
+ {
+ EInvalidArgNum("HTMLwriteMeta", 3);
+ return;
+ }
+
+ if (! docCheck(true))
+ {
+ return;
+ }
+
+ if (sName.toLowerCase() != "generator")
+ {
+ HTMLdoc.write("<meta ");
+
+ if (sName != "")
+ {
+ HTMLdoc.write('name="', sName, '" ');
+ }
+
+ if (sHTTPequiv != "")
+ {
+ HTMLdoc.write('http-equiv="', sHTTPequiv, '" ');
+ HTMLdoc.writeln('content="', sContent, '">');
+ HTMLmetaCount++;
+
+ /* OOP extension */
+ HTMLinstance.metaCount = HTMLmetaCount;
+ }
+ }
+}
+
+function HTMLwriteLinkFavIcon(sURL)
+{
+ if (sURL.length > 0)
+ {
+ HTMLdoc.HTMLwriteTag("link", 'rel="shortcut icon" href="' + sURL + '"');
+ }
+}
+
+var HTMLscriptCount = 0;
+
+function HTMLwriteScript(sLang, sSrc, sType, sContent)
+{
+ if (sSrc == "" && (arguments.length < 4 || sContent == ""))
+ {
+ EInvalidArgNum("HTMLwriteScript", 4);
+ return;
+ }
+
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ if (arguments.length == 0 || sLang == "")
+ {
+ sLang = "JavaScript";
+ }
+
+ HTMLdoc.write('<script language="', sLang, '"');
+
+ if (arguments.length < 2)
+ {
+ sSrc = "";
+ }
+
+ if (sSrc != "")
+ {
+ HTMLdoc.write(' src="', sSrc, '"');
+ }
+
+ if (arguments.length < 3 || sType == "")
+ {
+ sType = "text/javascript";
+ }
+
+ if (sType != "")
+ {
+ HTMLdoc.write( ' type="', sType, '"' );
+ }
+
+ HTMLdoc.write('>');
+
+ if (arguments.length < 4)
+ {
+ sContent = "";
+ }
+
+ if (sSrc == "" && sContent != "")
+ {
+ HTMLdoc.write('<!--\n', sContent, '\n//-->');
+ }
+
+ HTMLdoc.write('</script>\n');
+ HTMLscriptCount++;
+
+ /* OOP extension */
+ HTMLinstance.scriptCount = HTMLscriptCount;
+}
+
+var HTMLstyleCount = 0;
+
+function HTMLwriteStyle(sType, sAttrib, sContent)
+{
+ if (sContent == "" || arguments.length < 3)
+ {
+ EInvalidArgNum("HTMLwriteStyle", 3);
+ return;
+ }
+
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ if (sType == "")
+ {
+ sType = "text/css";
+ }
+
+ HTMLdoc.write('<style type="', sType, '"');
+
+ if (sAttrib != "")
+ {
+ HTMLdoc.write( ' ', sAttrib );
+ }
+
+ HTMLdoc.write('><!--\n', sContent, '\n//--></style>\n');
+ HTMLstyleCount++;
+ /* OOP extension */
+ HTMLinstance.styleCount = HTMLstyleCount;
+}
+
+function HTMLheadOpen(sTitle)
+{
+ if (!docCheck(true)) return;
+
+ HTMLdoc.writeln(
+ "<head>\n\n<title>",
+ sTitle,
+ '</title>\n\n<meta name="generator" content="document.js ',
+ documentVersion,
+ " ",
+ sAuthorCopyright,
+ ' (' + sAuthorEMail + ')">');
+}
+
+function HTMLheadClose()
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+ HTMLdoc.writeln('\n</head>\n');
+}
+
+/** background color */
+var clBodyBg = "";
+
+/** default text color */
+var clBodyText = "";
+
+/** default color for an unvisited link */
+var clBodyLink = "";
+
+/** default color for a visited link */
+var clBodyVLink = "";
+
+/** default color for a selected link */
+var clBodyALink = "";
+
+/** URL of the background image */
+var imgBody = "";
+
+/** Defines whether the background image is a watermark */
+var bBodyBgFixed = false;
+
+function HTMLbodyOpen()
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+ HTMLdoc.write( "<body" );
+
+ if (clBodyBg != "")
+ {
+ HTMLdoc.write(' bgcolor="', clBodyBg, '"');
+ }
+
+ if (clBodyText != "")
+ {
+ HTMLdoc.write(' text="', clBodyText, '"');
+ }
+
+ if (clBodyLink != "")
+ {
+ HTMLdoc.write(' link="', clBodyLink, '"');
+ }
+
+ if (clBodyVLink != "")
+ {
+ HTMLdoc.write(' vlink="', clBodyVLink, '"');
+ }
+
+ if (clBodyALink != "")
+ {
+ HTMLdoc.write(' alink="', clBodyALink, '"');
+ }
+
+ if (imgBody != "")
+ {
+ HTMLdoc.write(' background="', imgBody, '"');
+ }
+
+ if (bBodyBgFixed)
+ {
+ HTMLdoc.write(' bgproperties="fixed"');
+ }
+ HTMLdoc.writeln ( ">\n" );
+}
+
+function HTMLbodyClose()
+{
+ if (!docCheck(true))
+ {
+ return;
+ }
+
+ HTMLdoc.writeln('\n</body>\n');
+}
+
+/* OOP Support for Multiple Document Access (MDA): Methods and prototype */
+
+function DocumentListAdd(aItem)
+{
+ this.items.push(aItem);
+}
+
+function DocumentListRemove()
+{
+ this.items.pop();
+}
+
+function DocumentList()
+{
+ /* Properties */
+ this.items = new Array();
+
+ /* Methods */
+ this.add = DocumentListAdd;
+ this.remove = DocumentListRemove;
+}
+
+var docList = new DocumentList();
+
+/* General OOP support: Methods, global counter variable and class */
+
+function HTMLDocumentActivate()
+{
+ HTMLinstance = this;
+ HTMLdoc = this.target;
+ clBodyBg = this.clBodyBg;
+ clBodyText = this.clBodyText;
+ clBodyLink = this.clBodyLink;
+ clBodyVLink = this.clBodyVLink;
+ clBodyALink = this.clBodyALink;
+ imgBody = this.imgBody;
+ bBodyBgFixed = this.bBodyBgFixed;
+ HTMLtagCount = this.tagCount;
+ HTMLmetaCount = this.metaCount;
+ HTMLscriptCount = this.scriptCount;
+ HTMLstyleCount = this.styleCount;
+}
+
+function HTMLDocumentShowProperties()
+{
+ var sCaller =
+ (HTMLDocumentShowProperties.caller != null
+ ? "Caller: \n\n" + HTMLDocumentShowProperties.caller + "\n"
+ : "");
+
+ var sResult =
+ sCopyright
+ + "Current properties of the HTMLDocument instance named \""
+ + this.name
+ + "\";\nUsed HTMLDocument.showProperties() method:\n\n";
+
+ for (var Property in this)
+ {
+ var isNotMethod =
+ (String(this[Property]).toLowerCase().substr(0, 9) != "function ");
+
+ var isNotNameProp =
+ (String(Property).toLowerCase().substr(0, 4) != "name");
+
+ if (isNotMethod && isNotNameProp)
+ {
+ var isString =
+ (isNaN(this[Property]) || String(this[Property]) == "");
+
+ var bDblQuote =
+ (isString
+ ? '"'
+ : "");
+
+ var sProp = String(this[Property]);
+
+ if (sProp == "[object]") bDblQuote = "";
+
+ sResult +=
+ Property
+ + " = "
+ + bDblQuote
+ + sProp
+ + bDblQuote
+ + "\n";
+ }
+ }
+
+ sResult += "\nCreator URL: \"" + document.URL + "\"\n\n" + sCaller;
+ alert(sResult);
+}
+
+/** Number of _HTMLDocument instances created by the script caller document */
+var HTMLDocumentCount = 0;
+
+/* `HTMLDocument' is a W3C DOM 2 HTML interface literally implemented in Geckos */
+function _HTMLDocument(aTarget, sDTD, bReplace, sName)
+{
+ // Properties
+ if (arguments.length < 1)
+ {
+ this.target = HTMLdoc;
+ }
+ else
+ {
+ if (aTarget)
+ {
+ HTMLinstance = this;
+ this.target = aTarget;
+ HTMLdoc = this.target;
+ HTMLtagCount = 0;
+ HTMLmetaCount = 0;
+ HTMLscriptCount = 0;
+
+ /* Open doc. automatically on more arg. */
+ if (arguments.length > 1)
+ {
+ HTMLdocOpen(sDTD, bReplace);
+ }
+ }
+ else
+ {
+ /* Error if passed object is not available */
+ ENoDocument("_HTMLDocument");
+ return;
+ }
+ }
+
+ /* "" is v1.08.2000.3 bugfix, formerly used colors of last activated object */
+
+ /** background color */
+ this.clBodyBg = "";
+
+ /** text color */
+ this.clBodyText = "";
+
+ /** color for an unvisited link */
+ this.clBodyLink = "";
+
+ /** color for a visited link */
+ this.clBodyVLink = "";
+
+ /** color for a selected link */
+ this.clBodyALink = "";
+
+ /** URL of the background image */
+ this.imgBody = "";
+
+ /** Default: background image is no watermark */
+ this.bBodyBgFixed = false;
+
+ /** HTML tags written by writeTag(...) method */
+ this.tagCount = 0;
+
+ /** &lt;meta&gt; tags written except "generator" */
+ this.metaCount = 0;
+
+ /** &lt;script&gt;&lt;/script&gt; sections written */
+ this.scriptCount = 0;
+
+ /** &lt;style&gt;&lt;/style&gt; sections written */
+ this.styleCount = 0;
+
+ /* Increase the number of created _HTMLDocument instances for auto-naming */
+ HTMLDocumentCount++;
+
+ if (arguments.length >= 4)
+ {
+ /* Recommended to name the object for debug purposes */
+ this.name = sName;
+ }
+ else
+ {
+ this.name = "_HTMLDocument_" + String(HTMLDocumentCount);
+ }
+
+ /* Methods */
+ this.activate = HTMLDocumentActivate;
+
+ /* DEBUG */
+ this.showProperties = HTMLDocumentShowProperties;
+ this.checkTarget = docCheck;
+ this.open = HTMLdocOpen;
+ this.close = HTMLdocClose;
+ this.write = docWrite;
+ this.writeLn = docWriteLn;
+ this.writeTag = HTMLwriteTag;
+ this.writeMeta = HTMLwriteMeta;
+ this.writeScript = HTMLwriteScript;
+ this.writeStyle = HTMLwriteStyle;
+ this.headOpen = HTMLheadOpen;
+ this.headClose = HTMLheadClose;
+ this.bodyOpen = HTMLbodyOpen;
+ this.bodyClose = HTMLbodyClose;
+}
+
+/* Raise exception if not processed from a web browser */
+if (! document)
+{
+ ENoBrowser();
+}
\ No newline at end of file
Index: live/enhancd2.js
===================================================================
--- live/enhancd2.js (nonexistent)
+++ live/enhancd2.js (revision 509)
@@ -0,0 +1,434 @@
+/*
+ The following tag is for display in advanced filelists only:
+ <TITLE>Level-2 Enhanced Website Features</title>
+
+ enhancd2.js
+ Part of PointedEars' JavaScript Extensions (JSX)
+ Copyright (c) 2001-2002 Thomas Lahn <PointedEars@gmx.de>
+
+ This code may be distributed freely under the terms of the
+ GNU General Public License; either version 2 of the License
+ or (at your option) any later version.
+ See http://www.gnu.org/copyleft/gpl.html for details.
+
+ Refer enhancd2.htm file for general documentation.
+*/
+
+var enhanced2Version = "1.23.20080120";
+var enhanced2Copyright = "Copyright � 2000-2008";
+var enhanced2Author = "Thomas Lahn";
+var enhanced2Email = "PointedEars@gmx.de";
+var enhanced2DocURL = "http://www.tu-ilmenau.de/~thla-in/scripts/enhancd2.htm";
+
+function linkOutWin(sURL, sCaption, bShowURL) {
+ return(linkOut( sURL, sCaption, bShowURL, "_new", 0, 0, "fullscreen=no,channelmode=no,toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,top=0,left=0" ));
+}
+
+var sEnlargeImgTitle_en = "Click to close window";
+var sEnlargeImgTitle_de = "Klicken, um Fenster zu schlie&szlig;en";
+var sEnlargeImgTitle = sEnlargeImgTitle_en;
+
+function enlargeImg(sImageURL, sCaption, iWidth, iHeight, bCenter) {
+/* PointedEars' JavaScript Extensions (JSX)
+ Copyright (c) 2000-2002 Thomas Lahn <PointedEars@gmx.de>
+ Protected under the terms of the GNU General Public License.
+ See http://www.fsf.org/copyleft/gpl.html for details.
+
+ JSX:enhancd2.js:enlargeImg
+
+ Opens a dependent browser child window containing an (enlarged) image.
+ A primary button mouse click on the image or the window closes the
+ window.
+
+ Arguments:
+
+ sImageURL Required. URL of the (enlarged) image.
+ sCaption Optional. Caption of the browser child window.
+ If not provided, sImageURL will be used as caption.
+ iWidth Optional. Width of the browser child window in pixels.
+ If not provided or 0, the window will be resized
+ to fit image width.
+ iHeight Optional. Height of the browser child window in pixels.
+ If not provided or 0, the window will be resized
+ to fit image height.
+ bCenter Optional. If true, the window will be centered on
+ the screen.
+ Note: Use with caution! Not all desktops return
+ the correct position for the centered window.
+
+ Return value:
+
+ Always false which allows
+ <a href="..." ... onclick="return enlargeImg(...);">
+*/
+
+ var ident = enlargeImg;
+ var argnum = ident.arguments.length;
+ var wImage = false;
+ if (sImageURL.charAt(0) != "/") {
+ // Version 1.17.2002.2 bugfix:
+ // Calculates absolute image file paths of relative ones
+ // Fixes bug with Mozilla 0.9.7 and above (includes Netscape 6.1+)
+ // that generated pages have no path except about:blank which causes
+ // relative paths for their resources to fail
+ var iPathEnd = location.pathname.lastIndexOf('\\');
+ // Windows local path
+ if (iPathEnd < 0)
+ iPathEnd = location.pathname.lastIndexOf('/');
+ // URL
+ if (iPathEnd > -1) // Extends filename to full path
+ sImageURL = location.pathname.substring(0, iPathEnd) + "/" + sImageURL;
+ }
+ if (argnum < 1) return(EInvalidArgNum("Level 2: enlargeImg", 1));
+
+// preset also window position and size in the case the temporary script below fails
+ var sOptions = "toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=yes"
+ + (((argnum > 2) && !isNaN(iWidth)) ? (",width=" + iWidth + 12) : "")
+ + (((argnum > 3) && !isNaN(iHeight)) ? (",height=" + iHeight + 32) : "")
+ + ",left="
+ + parseInt(screen.width/2
+ - (((argnum > 2) && !isNaN(iWidth))?(iWidth/2):0))
+ + ",top="
+ + parseInt(screen.height/2
+ - (((argnum > 3) && !isNaN(iHeight))?(iHeight/2):0));
+
+ var wImage = window.open(null, "wndZoom", sOptions);
+
+ if (wImage)
+ {
+ var dImage = wImage.document;
+ dImage.open("text/html");
+
+ var a = new Array(
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
+ '<html>',
+ ' <head>',
+ ' <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">',
+ ' <meta name="generator" value="JSX:enhancd2.js{'
+ + enhanced2Version + '}:enlargeImg(...) ' + enhanced2Copyright
+ + ' ' + enhanced2Author + ' &lt;' + enhanced2Email + '&gt;">',
+ ' <title>' + ((argnum > 1 && sCaption != "") ? sCaption : sImageURL),
+
+ // temporary script and updated inline code to fix BUG_Enlarge:ALWAYS_FIT-TO-IMAGE
+ ' <\/title>',
+ ' <script type="text/javascript">',
+ ' // <![CDATA[',
+ ' function fitWindowToImage() {',
+ ' var imgWidth = ' + (((argnum > 2) && (iWidth != 0)) ? iWidth : ("document.images[0].width + 12")) + ';',
+ ' var imgHeight = ' + (((argnum > 3) && (iHeight != 0)) ? iHeight : ("document.images[0].height + 32")) + ';',
+ ' if (document.all) window.resizeTo(imgWidth, imgHeight);',
+ ' else if (window.sizeToContent) window.sizeToContent();',
+ ' else if (document.layers) { window.innerWidth = document.width; window.innerHeight = document.height; }',
+ (argnum < 5 || (argnum > 4 && bCenter))
+ ? ' window.moveTo(screen.width/2 - imgWidth/2, screen.height/2 - imgHeight/2);'
+ : '',
+ ' }',
+ ' // ]]>',
+ ' <\/script>',
+ ' <\/head>',
+ ' <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"'
+ + ' style="margin: 0px">',
+ ' <a href="#" title="'
+ + sEnlargeImgTitle + '" onclick="window.close(); return false;">'
+ + '<img src="' + sImageURL + '" border="0"'
+ + ' onload="fitWindowToImage(this);"><\/a>',
+ ' <\/body>',
+ '<\/html>'
+ );
+
+ dImage.write(s);
+ dImage.close();
+ wImage.focus();
+ }
+ return(false);
+}
+
+// Enlarge(...) call redirects to enlargeImg(...) for compatibility with previous versions
+
+function Enlarge(sImageURL, sCaption, iWidth, iHeight) {
+ switch(Enlarge.arguments.length) {
+ case 0: { enlargeImg(); break; }
+ case 1: { enlargeImg(sImageURL); break; }
+ case 2: { enlargeImg(sImageURL, sCaption); break; }
+ case 3: { enlargeImg(sImageURL, sCaption, iWidth); break; }
+ case 4: { enlargeImg(sImageURL, sCaption, iWidth, iHeight); }
+ }
+}
+
+var colMouseout = "#000000";
+var colMouseover = "#ffffff";
+
+function hoverImg(imgID, state) {
+ var img = "null";
+ if (document.all)
+ img = document.all(imgID);
+ else if (document.getElementById)
+ img = document.getElementById(imgID);
+ if (typeof img == "object") {
+ var col = "";
+ switch (state) {
+ case 0: col = colMouseout; break;
+ default: col = colMouseover; break;
+ }
+ if (col != "") img.style.borderColor = col;
+ }
+ return true;
+}
+
+function TTZdescr(iGMToffsetMins, sDescr) {
+ this.iGMToffsetMins = iGMToffsetMins;
+ this.sDescr = sDescr;
+}
+
+function TDateNames_getTZdescr(iGMToffsetMins) {
+ for (var i = 0; i < this.aTZdescr.length; i++) {
+ if (this.aTZdescr.iGMToffsetMins == iGMToffsetMins)
+ return (this.aTZdescr.sDescr);
+ }
+}
+
+function TDateNames(
+ aaShortWeekdayNames, aaMedWeekdayNames, aaLongWeekdayNames,
+ aaShortMonthNames, aaMedMonthNames, aaLongMonthNames,
+ aaTZdescr) {
+/*
+ JSX:enhancd2.js:TDateNames(...)
+
+ Prototype for weekday and month names
+
+ Properties:
+ aShortWeekdayNames
+ aMedWeekdayNames
+ aLongWeekdayNames
+ aShortMonthNames
+ aMedMonthNames
+ aLongMonthNames
+ aTZdescr
+
+ Methods:
+ getTZdescr(...)
+
+ Pass arrays containing the respective strings as arguments
+ to set properties on creation of object.
+*/
+// var iArgNum = TDateNames.arguments.length;
+ this.aShortWeekdayNames = aaShortWeekdayNames || new Array(7);
+ this.aMedWeekdayNames = aaMedWeekdayNames || new Array(7);
+ this.aLongWeekdayNames = aaLongWeekdayNames || new Array(7);
+ this.aShortMonthNames = aaShortMonthNames || new Array(12);
+ this.aMedMonthNames = aaMedMonthNames || new Array(12);
+ this.aLongMonthNames = aaLongMonthNames || new Array(12);
+ this.aTZdescr = aaTZdescr || new Array();
+
+ this.getTZdescr = TDateNames_getTZdescr;
+}
+
+var cDateLblOpen = "_"; // A unique date label begins with this
+var cDateLblClose = "_"; // A unique date label ends with this
+
+function getDateFmt(dDate, sFormat, oDateNames) {
+/*
+ JSX:enhancd2.js:getDateFmt(...)
+
+ Returns the dDate value as a formatted string as specified with
+ sFormat. Use the following format labels enclosed in the
+ characters defined above with the cDateLbl... global variables:
+
+ CC Century (19 if not supported by script engine).
+ yyyy Year with century. Please note that if the script engine's
+ Date.getYear(...) returns only two characters for year,
+ century is set to 19 (02 becomes 1902). yyyy is equal to
+ CCyy.
+ yy Year without century
+ MMMM Long name of month
+ MMM Medium name of month
+ MM Short name of month
+ 0M Two-digit month number (preceded by "0" if smaller than 10)
+ M Month number
+ dddd Long name of weekday
+ ddd Medium name of weekday
+ dd Short name of weekday
+ 0d Two-digit day number (preceded by "0" if smaller than 10)
+ d Day number.
+ hh Two-digit hours (preceded by "0" if smaller than 10)
+ h Hours
+ mm Two-digit minutes (preceded by "0" if smaller than 10)
+ m Minutes
+ ss Two-digit seconds
+ s Seconds
+ SS Three-digit milliseconds (with leading zeroes)
+ S Milliseconds (if supported by script engine, otherwise "0").
+ TTTTT Timezone description. oDateNames.aTimeZones required.
+ TTTT Timezone offset to GMT in hh:mm (with leading zero).
+ TTT Timezone offset to GMT in h:mm.
+ TT Timezone offset to GMT as two-digit minutes (with leading zero)
+ T Timezone offset to GMT in minutes.
+*/
+ var iArgNum = getDateFmt.arguments.length;
+ if (iArgNum < 1)
+ return false;
+ if ((iArgNum < 2) || (sFormat.length == 0))
+ return String(dDate);
+ if (iArgNum > 2)
+ var ooDateNames = oDateNames;
+ else
+ // Default (english) weekdays, month labels and timezone descriptions
+ ooDateNames = new TDateNames(
+ new Array("Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"),
+ new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"),
+ new Array(
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+ "Friday", "Saturday"
+ ),
+ new Array(
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
+ "Sep", "Oct", "Nov", "Dec"
+ ),
+ new Array(
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
+ "Sep", "Oct", "Nov", "Dec"
+ ),
+ new Array(
+ "January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"
+ ),
+ new Array(
+ new TTZdescr(-60, "WET"),
+ new TTZdescr( 0, "GMT"),
+ new TTZdescr( 60, "CET"),
+ new TTZdescr(120, "CEST/EET")
+ )
+ );
+ var sShortWeekday = ooDateNames.aShortWeekdayNames[dDate.getDay()];
+ var sMedWeekday = ooDateNames.aMedWeekdayNames[dDate.getDay()];
+ var sLongWeekday = ooDateNames.aLongWeekdayNames[dDate.getDay()];
+ var sShortMonth = ooDateNames.aShortMonthNames[dDate.getMonth()];
+ var sMedMonth = ooDateNames.aMedMonthNames[dDate.getMonth()];
+ var sLongMonth = ooDateNames.aLongMonthNames[dDate.getMonth()];
+ var iYear = dDate.getYear();
+ if (iYear < 100)
+ iYear += 1900;
+ var sLongYear = String(iYear);
+ var sShortYear = sLongYear.substr(sLongYear.length - 2, 2);
+ var sMonth = String(dDate.getMonth() + 1);
+ var sDay = String(dDate.getDate());
+ var sHours = String(dDate.getHours());
+ var sMins = String(dDate.getMinutes());
+ var sSecs = String(dDate.getSeconds());
+ if (dDate.getMilliseconds)
+ var sSecs1000 = String(dDate.getMilliseconds());
+ else
+ var sSecs1000 = "0";
+ var sTZmins = String(-dDate.getTimezoneOffset());
+ var iTZhours = Math.floor(-dDate.getTimezoneOffset() / 60);
+ var iTZmins = ((-dDate.getTimezoneOffset() / 60) + iTZhours) * 60;
+ var sTZhoursMins = String(iTZhours) + ":" + ((iTZmins < 10) ? "0" : "") + String(iTZmins);
+ var sTZhours2Mins = ((iTZhours < 10) ? "0" : "") + String(iTZhours) + ":" + ((iTZmins < 10) ? "0" : "") + String(iTZmins);
+ var sTZdescr = ooDateNames.getTZdescr(-dDate.getTimezoneOffset());
+ alert(ooDateNames);
+
+ sFormat = replaceText(sFormat, cDateLblOpen + "yyyy" + cDateLblClose,
+ sLongYear);
+ sFormat = replaceText(sFormat, cDateLblOpen + "yy" + cDateLblClose,
+ sShortYear);
+ sFormat = replaceText(sFormat, cDateLblOpen + "MMMM" + cDateLblClose,
+ sLongMonth);
+ sFormat = replaceText(sFormat, cDateLblOpen + "MMM" + cDateLblClose,
+ sMedMonth);
+ sFormat = replaceText(sFormat, cDateLblOpen + "MM" + cDateLblClose,
+ sShortMonth);
+ sFormat = replaceText(sFormat, cDateLblOpen + "0M" + cDateLblClose,
+ ((sMonth.length < 2) ? "0" + sMonth : sMonth));
+ sFormat = replaceText(sFormat, cDateLblOpen + "M" + cDateLblClose,
+ sMonth);
+ sFormat = replaceText(sFormat, cDateLblOpen + "dddd" + cDateLblClose,
+ sLongWeekday);
+ sFormat = replaceText(sFormat, cDateLblOpen + "ddd" + cDateLblClose,
+ sMedWeekday);
+ sFormat = replaceText(sFormat, cDateLblOpen + "dd" + cDateLblClose,
+ sShortWeekday);
+ sFormat = replaceText(sFormat, cDateLblOpen + "0d" + cDateLblClose,
+ ((sDay.length < 2) ? "0" + sDay : sDay));
+ sFormat = replaceText(sFormat, cDateLblOpen + "d" + cDateLblClose,
+ sDay);
+ sFormat = replaceText(sFormat, cDateLblOpen + "hh" + cDateLblClose,
+ ((sHours.length < 2) ? "0" + sHours : sHours));
+ sFormat = replaceText(sFormat, cDateLblOpen + "h" + cDateLblClose,
+ sHours);
+ sFormat = replaceText(sFormat, cDateLblOpen + "mm" + cDateLblClose,
+ ((sMins.length < 2) ? "0" + sMins : sMins));
+ sFormat = replaceText(sFormat, cDateLblOpen + "m" + cDateLblClose,
+ sMins);
+ sFormat = replaceText(sFormat, cDateLblOpen + "ss" + cDateLblClose,
+ ((sSecs.length < 2) ? "0" + sSecs : sSecs));
+ sFormat = replaceText(sFormat, cDateLblOpen + "SSS" + cDateLblClose,
+ ((sSecs1000.length < 3) ? "0" : "") +
+ ((sSecs1000.length < 2) ? "0" : "") + sSecs1000);
+ sFormat = replaceText(sFormat, cDateLblOpen + "SS" + cDateLblClose,
+ ((sSecs1000.length < 3) ? "0" : "") +
+ ((sSecs1000.length < 2) ? "0" : "") + sSecs1000);
+ sFormat = replaceText(sFormat, cDateLblOpen + "S" + cDateLblClose,
+ sSecs1000);
+ sFormat = replaceText(sFormat, cDateLblOpen + "TTTTT" + cDateLblClose,
+ sTZdescr);
+ sFormat = replaceText(sFormat, cDateLblOpen + "TTTT" + cDateLblClose,
+ sTZhours2Mins);
+ sFormat = replaceText(sFormat, cDateLblOpen + "TTT" + cDateLblClose,
+ sTZhoursMins);
+ sFormat = replaceText(sFormat, cDateLblOpen + "TT" + cDateLblClose,
+ (iTZmins < 10) ? "0" + iTZmins : String(iTZmins));
+ sFormat = replaceText(sFormat, cDateLblOpen + "T" + cDateLblClose,
+ String(iTZmins));
+
+ return sFormat;
+}
+
+// German weekdays, month labels and timezone descriptions
+var oDateNames_de = new TDateNames(
+ new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"),
+ new Array("Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"),
+ new Array(
+ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag",
+ "Freitag", "Samstag"
+ ),
+ new Array(
+ "Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug",
+ "Sep", "Okt", "Nov", "Dez"
+ ),
+ new Array(
+ "Jan", "Feb", "M�r", "Apr", "Mai", "Jun", "Jul", "Aug",
+ "Sep", "Okt", "Nov", "Dez"
+ ),
+ new Array(
+ "Januar", "Februar", "M�rz", "April", "Mai", "Juni",
+ "Juli", "August", "September", "Oktober", "November", "Dezember"
+ ),
+ new Array(
+ new TTZdescr(-60, "WEZ"),
+ new TTZdescr( 0, "GMT"),
+ new TTZdescr( 60, "MEZ"),
+ new TTZdescr(120, "MESZ/OET")
+ )
+);
+
+
+function playSound( sSoundFile, Loop, sAttrib ) {
+ if( playSound.arguments.length < 2 )
+ return(EInvalidArgNum( "Level 2: playSound", 2 ));
+ if( document.all ) {
+ var sAdjacent = "<bgsound ";
+ if( (playSound.arguments.length == 3) && (sAttrib.length != "") ) {
+ sAdjacent += sAttrib;
+ sAdjacent += " ";
+ }
+ sAdjacent += "src=\"";
+ sAdjacent += sSoundFile;
+ sAdjacent += "\" loop=\"";
+ if( isNaN(Loop) )
+ sAdjacent += Loop;
+ else
+ sAdjacent += String(Loop);
+ sAdjacent += "\">";
+ document.all.tags("head")[0].insertAdjacentHTML( "BeforeEnd", sAdjacent );
+ }
+}
Index: live/time.js
===================================================================
--- live/time.js (nonexistent)
+++ live/time.js (revision 509)
@@ -0,0 +1,549 @@
+/**
+ * <title>PointedEars' JSX: Time Prototypes and Functions</title>
+ *
+ * WARNING: Refactoring in progress. Do not link to this resource.
+ * Refer time.txt for general documentation.
+ *
+ * @requires string.js (for replaceText)
+ * @deprecated requires enhancd2.js
+ */
+/*
+ * The original source file
+ * _time.js/1.09/2003-10/time.js
+ * contains a complete documentation written in JSdoc, see
+ * <http://pointedears.de/scripts/JSdoc/> for details.
+ *
+ * Since JSdoc is not yet ready for production purposes to
+ * generate a HTML documentation from these comments and
+ * including them in the production version means about 25%
+ * of code overhead, most of the JSdoc comments have been
+ * stripped from this file.
+ */
+
+var timeVersion = "1.09.2003.10";
+
+// Global variables
+
+var decimalSeparator = ".";
+var timeSeparator = ":";
+
+// Method definitions
+
+function SystemTime_decHours(iUnits)
+{
+ (SystemTime_decHours.arguments.length > 0
+ ? this.hours -= iUnits
+ : this.hours--);
+
+ if (this.dayCount)
+ {
+ while (this.hours < 0){this.hours += 24;}
+ }
+
+ return this.hours;
+}
+
+function SystemTime_decMinutes(iUnits)
+{
+ (SystemTime_decMinutes.arguments.length > 0
+ ? this.minutes -= iUnits
+ : this.minutes--);
+
+ while (this.minutes < 0)
+ {
+ this.decHours();
+ this.minutes += 60;
+ }
+
+ return this.minutes;
+}
+
+function SystemTime_decSeconds(iUnits)
+{
+ (SystemTime_decSeconds.arguments.length > 0
+ ? this.seconds -= iUnits
+ : this.seconds--);
+
+ while (this.seconds < 0)
+ {
+ this.decMinutes();
+ this.seconds += 60;
+ }
+
+ return this.seconds;
+}
+
+function SystemTime_decSec100(iUnits)
+{
+ (SystemTime_decSec100.arguments.length > 0
+ ? this.sec100 -= iUnits
+ : this.sec100--);
+
+ while (this.sec100 < 0)
+ {
+ this.decSeconds();
+ this.sec100 += 1000;
+ }
+
+ return this.sec100;
+}
+
+function SystemTime_incHours(iUnits)
+{
+ (SystemTime_incHours.arguments.length > 0
+ ? this.hours += iUnits
+ : this.hours++);
+
+ if (this.dayCount)
+ {
+ while (this.hours > 23){this.hours -= 24;}
+ }
+
+ return this.hours;
+}
+
+function SystemTime_incMinutes(iUnits)
+{
+ (SystemTime_incMinutes.arguments.length > 0
+ ? this.minutes += iUnits
+ : this.minutes++);
+
+ while (this.minutes > 59)
+ {
+ this.incHours();
+ this.minutes -= 60;
+ }
+
+ return this.minutes;
+}
+
+function SystemTime_incSeconds(iUnits)
+{
+ (SystemTime_incSeconds.arguments.length > 0
+ ? this.seconds += iUnits
+ : this.seconds++);
+
+ while (this.seconds > 59)
+ {
+ this.incMinutes();
+ this.seconds -= 60;
+ }
+
+ return this.seconds;
+}
+
+function SystemTime_incSec100(iUnits)
+{
+ (SystemTime_incSec100.arguments.length > 0
+ ? this.sec100 += iUnits
+ : this.sec100++);
+
+ while (this.sec100 > 999)
+ {
+ this.incSeconds();
+ this.sec100 -= 1000;
+ }
+
+ return this.sec100;
+}
+
+function SystemTime_fromData(iHours, iMinutes, iSeconds, iSec100, bDayCount)
+{
+ var argnum = SystemTime_fromString.arguments.length;
+
+ if (argnum > 0)
+ {
+ this.hours = Math.floor(Math.abs(Number(iHours)));
+ if (argnum > 1)
+ {
+ this.minutes = Math.floor(Math.abs(Number(iMinutes)));
+ if (argnum > 2)
+ {
+ this.seconds = Math.floor(Math.abs(Number(iSeconds)));
+ if (argnum > 3)
+ {
+ this.sec100 = Math.floor(Math.abs(Number(iSec100)));
+ if (argnum > 4){this.dayCount = bDayCount;}
+ }
+ }
+ }
+ return true;
+ }
+
+ return false;
+}
+
+function SystemTime_fromString(s)
+{
+ var timeSep = s.split(timeSeparator);
+
+ if (timeSep > 0)
+ { // if 1 or more time separator, first number is considered to be hours
+ var sep1 = s.indexOf(timeSeparator);
+ this.hours = Number(s.substring(0, sep1 - 1)); // Extract hours
+ // this.
+ if (timeSep > 1)
+ {
+
+ }
+ }
+
+ return this;
+}
+
+function SystemTime_toString(bShowHours, bShowSeconds, bShowSec100)
+{
+ var sSec100 = String(this.sec100);
+ while (sSec100.length < 3){sSec100 = "0" + sSec100;}
+
+ var sSeconds = String(this.seconds);
+ if (this.seconds < 10){sSeconds = "0" + sSeconds;}
+
+ var sMinutes = String(this.minutes);
+ if (this.minutes < 10){sMinutes = "0" + sMinutes;}
+
+ var sHours = String(this.hours);
+ if (this.hours < 10){sHours = "0" + sHours;}
+
+ var argnum = SystemTime_toString.arguments.length;
+ var result =
+ (argnum > 0 && bShowHours
+ ? sHours + timeSeparator
+ : "")
+ + sMinutes
+ + (argnum > 1 && bShowSeconds
+ ? timeSeparator + sSeconds
+ : "")
+ + (argnum > 2 && bShowSec100
+ ? decimalSeparator + sSec100
+ : "");
+
+ return result;
+}
+
+// Prototype definition
+
+function SystemTime(iHours, iMinutes, iSeconds, iSec100, bDayCount)
+{
+ var argnum = SystemTime.arguments.length;
+
+ this.hours =
+ (argnum > 0
+ ? Number(iHours)
+ : 0);
+ this.minutes =
+ (argnum > 1
+ ? Number(iMinutes)
+ : 0);
+ this.seconds =
+ (argnum > 2
+ ? Number(iSeconds)
+ : 0);
+ this.sec100 =
+ (argnum > 3
+ ? Number(iSec100)
+ : 0);
+ this.dayCount =
+ (argnum > 4
+ ? bDayCount
+ : false);
+
+ this.decHours = SystemTime_decHours;
+ this.decMinutes = SystemTime_decMinutes;
+ this.decSeconds = SystemTime_decSeconds;
+ this.decSec100 = SystemTime_decSec100;
+ this.incHours = SystemTime_incHours;
+ this.incMinutes = SystemTime_incMinutes;
+ this.incSeconds = SystemTime_incSeconds;
+ this.incSec100 = SystemTime_incSec100;
+ this.fromData = SystemTime_fromData;
+ this.fromString = SystemTime_fromString;
+ this.toString = SystemTime_toString;
+}
+
+function TZdescr(iGMToffsetMins, sDescr)
+{
+ this.iGMToffsetMins = iGMToffsetMins || 0;
+ this.sDescr = sDescr || "";
+}
+
+function DateNames_getTZdescr(iGMToffsetMins)
+{
+ for (var i = 0; i < this.aTZdescr.length; i++)
+ {
+ if (this.aTZdescr[i].iGMToffsetMins == iGMToffsetMins)
+ {
+ return this.aTZdescr[i].sDescr;
+ }
+ }
+
+ return "";
+}
+
+function DateNames(
+ aaShortWeekdayNames,
+ aaMedWeekdayNames,
+ aaLongWeekdayNames,
+ aaShortMonthNames,
+ aaMedMonthNames,
+ aaLongMonthNames,
+ aaTZdescr)
+{
+ var iArgNum = DateNames.arguments.length;
+ this.aShortWeekdayNames =
+ aaShortWeekdayNames || new Array(7);
+ this.aMedWeekdayNames =
+ aaMedWeekdayNames || new Array(7);
+ this.aLongWeekdayNames =
+ aaLongWeekdayNames || new Array(7);
+ this.aShortMonthNames =
+ aaShortMonthNames || new Array(12);
+ this.aMedMonthNames =
+ aaMedMonthNames || new Array(12);
+ this.aLongMonthNames =
+ aaLongMonthNames || new Array(12);
+ this.aTZdescr =
+ aaTZdescr || new Array();
+ this.getTZdescr = DateNames_getTZdescr;
+}
+
+var cDateLblOpen = "_"; // A unique date label begins with this
+var cDateLblClose = "_"; // A unique date label ends with this
+
+function getDateFmt(dDate, sFormat, oDateNames)
+{
+ var iArgNum = getDateFmt.arguments.length;
+ if (iArgNum < 1)
+ {
+ return false;
+ }
+ if (iArgNum < 2 || sFormat.length == 0)
+ {
+ return String(dDate);
+ }
+
+ var ooDateNames;
+ if (iArgNum < 3){// Default (english) weekdays, month labels and timezone descriptions
+ oDateNames =
+ new DateNames(
+ new Array("Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"),
+ new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"),
+ new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+ "Friday", "Saturday"),
+ new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
+ "Sep", "Oct", "Nov", "Dec"),
+ new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
+ "Sep", "Oct", "Nov", "Dec"),
+ new Array("January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"),
+ new Array(
+ new TZdescr(-60, "WET"),
+ new TZdescr(0, "GMT"),
+ new TZdescr(60, "CET"),
+ new TZdescr(120, "CEST/EET")));}
+
+ var sShortWeekday = oDateNames.aShortWeekdayNames[dDate.getDay()];
+ var sMedWeekday = oDateNames.aMedWeekdayNames[dDate.getDay()];
+ var sLongWeekday = oDateNames.aLongWeekdayNames[dDate.getDay()];
+ var sShortMonth = oDateNames.aShortMonthNames[dDate.getMonth()];
+ var sMedMonth = oDateNames.aMedMonthNames[dDate.getMonth()];
+ var sLongMonth = oDateNames.aLongMonthNames[dDate.getMonth()];
+
+ var iYear = dDate.getYear();
+ if (iYear < 1000){iYear += 1900;}
+
+ var sLongYear =
+ (dDate.getFullYear
+ ? String(dDate.getFullYear())
+ : String(iYear));
+ var sShortYear = sLongYear.substr(sLongYear.length - 2, 2);
+ var sMonth = String(dDate.getMonth() + 1);
+ var sDay = String(dDate.getDate());
+ var sHours = String(dDate.getHours());
+ var sMins = String(dDate.getMinutes());
+ var sSecs = String(dDate.getSeconds());
+ var sSecs1000;
+ if (dDate.getMilliseconds){sSecs1000 = String(dDate.getMilliseconds());} else {sSecs1000 = "0";}
+ var sTZmins = String(-dDate.getTimezoneOffset());
+ var iTZhours = Math.floor(-dDate.getTimezoneOffset() / 60);
+ var iTZmins = ((-dDate.getTimezoneOffset() / 60) + iTZhours) * 60;
+ var sTZhoursMins =
+ String(iTZhours) + ":" + ((iTZmins < 10) ? "0" : "") + String(iTZmins);
+ var sTZhours2Mins =
+ ((iTZhours < 10) ? "0" : "")
+ + String(iTZhours)
+ + ":"
+ + ((iTZmins < 10) ? "0" : "")
+ + String(iTZmins);
+ var sTZdescr = oDateNames.getTZdescr(-dDate.getTimezoneOffset());
+
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "yyyy" + cDateLblClose, sLongYear);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "yy" + cDateLblClose, sShortYear);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "MMMM" + cDateLblClose, sLongMonth);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "MMM" + cDateLblClose, sMedMonth);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "MM" + cDateLblClose, sShortMonth);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "0M" + cDateLblClose,
+ ((sMonth.length < 2) ? "0" + sMonth : sMonth));
+ sFormat = replaceText(sFormat, cDateLblOpen + "M" + cDateLblClose, sMonth);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "dddd" + cDateLblClose, sLongWeekday);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "ddd" + cDateLblClose, sMedWeekday);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "dd" + cDateLblClose, sShortWeekday);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "0d" + cDateLblClose,
+ ((sDay.length < 2) ? "0" + sDay : sDay));
+ sFormat = replaceText(sFormat, cDateLblOpen + "d" + cDateLblClose, sDay);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "hh" + cDateLblClose,
+ ((sHours.length < 2) ? "0" + sHours : sHours));
+ sFormat = replaceText(sFormat, cDateLblOpen + "h" + cDateLblClose, sHours);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "mm" + cDateLblClose,
+ ((sMins.length < 2) ? "0" + sMins : sMins));
+ sFormat = replaceText(sFormat, cDateLblOpen + "m" + cDateLblClose, sMins);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "ss" + cDateLblClose,
+ ((sSecs.length < 2) ? "0" + sSecs : sSecs));
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "SSS" + cDateLblClose,
+ ((sSecs1000.length < 3) ? "0" : "")
+ + ((sSecs1000.length < 2) ? "0" : "")
+ + sSecs1000);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "SS" + cDateLblClose,
+ (sSecs1000.length < 3 ? "0" : "")
+ + (sSecs1000.length < 2 ? "0" : "")
+ + sSecs1000);
+ sFormat = replaceText(sFormat, cDateLblOpen + "S" + cDateLblClose, sSecs1000);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "TTTTT" + cDateLblClose, sTZdescr);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "TTTT" + cDateLblClose, sTZhours2Mins);
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "TTT" + cDateLblClose, sTZhoursMins);
+ sFormat =
+ replaceText(
+ sFormat,
+ cDateLblOpen + "TT" + cDateLblClose,
+ (iTZmins < 10
+ ? "0" + iTZmins
+ : String(iTZmins)));
+ sFormat =
+ replaceText(sFormat, cDateLblOpen + "T" + cDateLblClose, String(iTZmins));
+
+ return sFormat;
+}
+
+// German weekdays, month labels and timezone descriptions
+var oDateNames_de =
+ new DateNames(
+ new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"),
+ new Array("Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"),
+ new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag",
+ "Freitag", "Samstag"),
+ new Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug",
+ "Sep", "Okt", "Nov", "Dez"),
+ new Array("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug",
+ "Sep", "Okt", "Nov", "Dez"),
+ new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli",
+ "August", "September", "Oktober", "November", "Dezember"),
+ new Array(
+ new TZdescr(-60, "WEZ"),
+ new TZdescr(0, "GMT"),
+ new TZdescr(60, "MEZ"),
+ new TZdescr(120, "MESZ/OEZ")));
+
+function isValidDate(iYear, iMonth, iDate)
+{
+ var
+ d = new Date(iYear, iMonth, iDate), // create new Date object
+ y = 0;
+
+ if (d)
+ {
+ y =
+ (d.getFullYear // prefer 4-digit year
+ ? d.getFullYear()
+ : d.getYear());
+ if (!d.getFullYear && y < 1900){y += 1900;}
+ }
+
+ /*
+ * If no Date object exists or if the properties of the object differ
+ * from the passed arguments, the date was not valid (out of range,
+ * e.g. not paying attention to leap years.)
+ */
+ return (
+ d && y == iYear && d.getMonth() == iMonth && d.getDate() == iDate);
+}
+
+/**
+ * Computes the dates when it is switched to and from Daylight Saving Time
+ *
+ * @param {int} iYear
+ * The year for which DST change dates should be computed. The default
+ * is the current year.
+ * @return Array
+ */
+function getDSTChangeDates(iYear)
+{
+ var result = [];
+
+ /* Date when it is switched to DST */
+ var
+ year = iYear || new Date().getFullYear(),
+ dLeft = new Date(year, 0, 1),
+ dRight = new Date(new Date(year + 1, 0, 1) - 1);
+
+ /* See if there is any change in time zone at all */
+ while (dRight > +dLeft + 1
+ && dLeft.getTimezoneOffset() == dRight.getTimezoneOffset())
+ {
+ dRight = new Date(Math.floor((+dLeft + +dRight) / 2));
+ }
+
+ if (dLeft.getTimezoneOffset() == dRight.getTimezoneOffset())
+ {
+ return [null, null];
+ }
+
+ while (dRight > +dLeft + 1)
+ {
+ console.log("outer: ", dLeft, dRight);
+ while (dLeft.getTimezoneOffset() != dRight.getTimezoneOffset())
+ {
+ var lastRight = dRight;
+ dRight = new Date(Math.floor((+dLeft + +dRight) / 2));
+ console.log("inner: ", dLeft, dRight);
+ }
+
+ dLeft = dRight;
+ dRight = lastRight;
+ }
+
+ result.push(dRight);
+
+ return result;
+}
\ No newline at end of file
Index: live/props.js
===================================================================
--- live/props.js (nonexistent)
+++ live/props.js (revision 509)
@@ -0,0 +1,84 @@
+function FuzzySort(aSelect) {
+ var i = 0;
+ while ( i < aSelect.options.length - 2 ) {
+ var value1 = aSelect.options[i].text.substr(0, aSelect.options[i].text.toLowerCase().indexOf("=") - 1);
+ var value2 = aSelect.options[i + 1].text.substr(0, aSelect.options[i].text.toLowerCase().indexOf("=") - 1);
+ if( value1 > value2 ) {
+ var Save;
+ Save = aSelect.options[i].text;
+ aSelect.options[i].text = aSelect.options[i + 1].text;
+ aSelect.options[i + 1].text = Save;
+ Save = null;
+ if( i > 1 )
+ i--;
+ } else
+ i++;
+ }
+}
+
+function blurStartCtrl(aStartCtrl) {
+ if(blurStartCtrl.arguments.length > 0)
+ if(aStartCtrl != null)
+ aStartCtrl.blur();
+}
+
+function getObjProp(sObject, aStartCtrl, aSelect) {
+// var ident = getObjProp;
+ var aObject = eval(sObject);
+ var bValidTarget = (aSelect != null);
+ if(bValidTarget) bValidTarget = (aSelect.tagName.toLowerCase() == "select");
+ if(! bValidTarget) {
+ alert("Unable to continue without valid SELECT object as third argument.");
+ blurStartCtrl(aStartCtrl);
+ return(true);
+ }
+ removeOptions(aSelect);
+ if(aObject == null) {
+ addOption(aSelect, "[no object]");
+ return(true);
+ }
+/* if(sObject.indexOf("document.all") >= 0) {
+ addOption(aSelect, "[Unable to retrieve document.all because it accesses its caller]");
+ blurStartCtrl(aStartCtrl);
+ return(true);
+ } */
+ aSelect.style.cursor = "wait";
+ var sCondition = false;
+ for(var Item in aObject) {
+ sCondition = ( String(aObject[Item]).toLowerCase().substr(0, 9) != "function " );
+ if(sCondition) {
+ var propValue = aObject[Item];
+ var s = ( ( isNaN(propValue) || String(propValue) == "" )
+ && ( String(propValue).indexOf("object") < 0 ) ) ? "\"" : "";
+ var sText = Item + " = " + s + propValue + s;
+ addOption(aSelect, sText);
+ }
+ }
+ FuzzySort(aSelect);
+ blurStartCtrl(aStartCtrl);
+ aSelect.style.cursor = "auto";
+ return(false);
+}
+
+function checkProps(aWindow) {
+ var wndProps = window.open();
+ wndProps.document.open("text/html");
+ wndProps.document.write('<html>\n<head>\n' +
+ '<link href="../styles/lcars.css" rel="stylesheet" type="text/css">\n' +
+ '<style type="text/css"><!--\n' +
+ '\ta.button, a.button:visited {\n' +
+ '\tfont-size: 20px;\n' +
+ '}\n' +
+ 'a.button:hover { color: #000000; }\n' +
+ 'a.button:active { color: #000000; }\n' +
+ '//--></style>\n' +
+ '\t<script language="JavaScript1.1" src="../scripts/props.js" type="text/javascript"></script>\n' +
+ '</head>\n<body>\n' +
+ 'Object from which to retrieve properties:<br>\n' +
+ '<input type="text" style="width: 96%;" id="edObject">' +
+ '<a href="JavaScript:void(0)" class="button" style="position:relative; top:-3px;" id="btGo" onClick=\'getObjProp(edObject.value, this, document.all.props);\'>&nbsp;<u>G</u>O&nbsp;</a><br>\n' +
+ '<select size=10 style="width: 100%;" id="props">' +
+ '</select></body></html>'
+ );
+ wndProps.document.close();
+}
\ No newline at end of file
Index: live/COPYING
===================================================================
--- live/COPYING (nonexistent)
+++ live/COPYING (revision 509)
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
Index: live/exception.js
===================================================================
--- live/exception.js (nonexistent)
+++ live/exception.js (revision 509)
@@ -0,0 +1,146 @@
+/**
+ * @requires types.js
+ */
+
+/**
+ * Wrapper for a safer <code>try</code>...<code>catch</code>.
+ *
+ * Attempts to evaluate a value as a <i>StatementList</i>, and attempts
+ * to evaluate another value as a <i>StatementList</i> if an exception
+ * is thrown in the process. The argument identifiers may be used
+ * in each value to refer to the used values; the <code>code</code>
+ * word may be used to the refer to the entire constructed
+ * <code>try</code>...<code>catch</code> string that is evaluated
+ * as a <i>Program</i>.
+ *
+ * @param statements
+ * Value to be evaluated as a <i>StatementList</i>.
+ * Called if a <code>Function</code> object reference, converted
+ * to string if not a string, and used as-is otherwise.
+ * For compatibility, the <code>undefined</code> value
+ * is evaluated like the empty string.
+ * @param errorHandlers
+ * Value to be evaluated as a <i>StatementList</i> in case of an
+ * exception. Called if a <code>Function</code> object reference,
+ * converted to string if not a string, and used as-is otherwise.
+ * For compatibility, the <code>undefined</code> value
+ * is evaluated like the empty string.
+ * @return
+ * The result of <code>statements</code>, or the result
+ * of <code>errorHandlers</code> if an error occurred.
+ * @author
+ * Copyright (c) 2008
+ * Thomas 'PointedEars' Lahn &lt;js@PointedEars.de&gt;
+ * Distributed under the GNU GPL v3 and later.
+ * @partof JSX:exception.js
+ */
+function tryThis(statements, errorHandlers)
+{
+ /**
+ * @param s Value to be stringified
+ * @return Stringified version of <code>s</code>
+ */
+ function stringify(s)
+ {
+ if (typeof s == "function")
+ {
+ s = "(" + s + ")()";
+ }
+ else if (typeof s == "undefined")
+ {
+ s = "";
+ }
+
+ return s;
+ }
+
+ statements = stringify(statements);
+ errorHandlers = stringify(errorHandlers);
+
+ var code = 'try { ' + statements + ' }'
+ + 'catch (e) { ' + errorHandlers + ' }';
+
+ return eval(code);
+}
+
+/**
+ * Throws a qualified exception, including an execution context hint
+ * if provided, followed by an error message.
+ *
+ * @param sErrorType : string
+ * Identifier of the constructor for the error type
+ * @param sMessage : string
+ * Error message to be displayed
+ * @param fContext : Callable
+ * Optional callable object to specify the context
+ * where the exception occurred.
+ * @author
+ * Copyright (c) 2008 Thomas 'PointedEars' Lahn <cljs@PointedEars.de>.
+ * Distributed under the GNU GPL v3 and later.
+ * @partof JSX:exception.js
+ * @see JSX:types.js:isMethodType()
+ */
+function throwException(sErrorType, sMessage, fContext)
+{
+ if (isMethodType(typeof sErrorType) && sErrorType)
+ {
+ sErrorType = "(" + sErrorType + ")";
+ }
+
+ var sContext = "";
+
+ if (isMethodType(typeof fContext) && fContext)
+ {
+ sContext = (String(fContext).match(/^\s*(function[^)]+\))/)
+ || [0, null])[1];
+ }
+
+ var message = (sContext ? sContext + ': ' : '')
+ + (sMessage ? String(sMessage).replace(/['"\\]/g, '\\$&') : '');
+
+ var throwPrefix = ' throw new ' + sErrorType + '("' + message;
+ eval(throwPrefix + '");');
+/*
+ eval(
+ 'try'
+ + '{'
+ // throw so that we can try obtaining a stack trace
+ + throwPrefix + '");'
+ + '}'
+ + 'catch (e)'
+ + '{'
+ + ' var stack = e.stack;'
+ + ' if (typeof stack == "string")'
+ + ' {'
+ // re-throw with stack trace if available
+ + throwPrefix + '\\nStack trace:" + stack.split("\\n").reverse().slice(0, stack.length - 3).join("\\n"));'
+ + ' }'
+ + ' else'
+ + ' {'
+ + throwPrefix + '");'
+ + ' }'
+ + '}');
+*/
+}
+
+// first variant from math.js
+/*
+function throwException(e)
+{
+ var supportsTry = false;
+
+ _global.onerror = function()
+ {
+ this.onerror = null;
+ return true;
+ }
+
+ eval('try { supportsTry = true; } catch (e2) {}');
+
+ if (supportsTry)
+ {
+ eval('throw e;');
+ _global.onerror();
+ }
+}
+*/
\ No newline at end of file
Index: live/unicode-classifier
===================================================================
--- live/unicode-classifier (nonexistent)
+++ live/unicode-classifier (revision 509)
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+awk -F ';' 'length($1) < 5 { print $3,$1; }' UnicodeData.txt | sort |
+ awk '
+ BEGIN {
+ printf "jsx.RegExp.characterClasses = {"
+ }
+
+ {
+ class = $1;
+ codePoint = $2;
+ num = strtonum("0x" codePoint);
+
+# printf "\n\nclass = \"%s\"\n", class
+# printf "prevClass = \"%s\"\n", prevClass
+# printf "codePoint = \"%s\"\n", codePoint
+# printf "prevCodePoint = \"%s\"\n", prevCodePoint
+# printf "num = \"%s\"\n", num
+# printf "startRange = \"%s\"\n", startRange
+
+ if (class != prevClass)
+ {
+ if (num != prevNum + 1)
+ {
+ if (startRange)
+ {
+ printf "-\\u" prevCodePoint;
+ }
+ }
+
+ if (prevClass)
+ {
+ printf "\",";
+ }
+
+ printf "\n " class ": \"\\u" codePoint;
+
+ startRange = 0;
+ }
+ else
+ {
+ if (num != prevNum + 1)
+ {
+ if (startRange)
+ {
+ printf "-\\u" prevCodePoint;
+
+ startRange = 0;
+ }
+
+ printf "\\u" codePoint;
+ }
+ else
+ {
+ startRange = 1
+ }
+ }
+
+ prevClass = class;
+ prevCodePoint = codePoint;
+ prevNum = num;
+ }
+
+ END {
+ if (startRange)
+ {
+ printf "-\\u" prevCodePoint;
+ }
+
+ printf "\"\n};";
+ }'
+
/live/unicode-classifier
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: live/dots.js
===================================================================
--- live/dots.js (nonexistent)
+++ live/dots.js (revision 509)
@@ -0,0 +1,71 @@
+// The following tag is for display in advanced filelists only:
+// <TITLE>JavaScript 3dots LCARS Support Part 1</title>
+//
+// Supports dhtml.js for usage of W3C-DOM
+// Refer dots.txt for general documentation.
+
+// Hiding loading content is potentially harmful
+// TODO: lcars.js::dots() and ::undots() to replace this
+/*
+
+if (!this.dhtml)
+{
+ var dhtml = new Object();
+ dhtml.supported = false;
+ dhtml.visibility = function() {};
+}
+
+if (dhtml.supported && dhtml.visibility)
+{
+ var divContent = getElem("id", "div_content");
+ var divStatus = getElem("id", "div_status"), f;
+ if (divContent && divStatus)
+ {
+ dhtml.visible(divContent, false);
+
+ if (typeof divStatus.left != "undefined")
+ {
+ divStatus.left = document.body.offsetWidth;
+ }
+
+ dhtml.visible(divStatus, true);
+ }
+ else if ((f = parent.frames['ufpdb_banner']))
+ {
+ if (f.spanStatus) f.spanStatus.className = "standby";
+ dhtml.setTextContent(f.spanStatus, "ACCESSING FILE");
+ }
+}
+
+var dotCounter = 0;
+
+function animDots()
+{
+ var dotString = "";
+
+ for (var i = 0; i < dotCounter; i++)
+ {
+ dotString += ". ";
+ }
+
+ if (dhtml.setCont)
+ {
+ dhtml.setCont("id", "dots", null, dotString);
+ }
+
+ if (dotCounter == 3)
+ {
+ dotCounter = 0;
+ }
+ else
+ {
+ dotCounter++;
+ }
+}
+
+if (dhtml.supported && divContent && divStatus)
+{
+ var dotsAnim = window.setInterval("animDots();", 1000);
+}
+
+*/
\ No newline at end of file
Index: live/scripts.rimpfd
===================================================================
--- live/scripts.rimpfd (nonexistent)
+++ live/scripts.rimpfd (revision 509)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<rimpfd>
+ <destination path="/LCARS/scripts"/>
+ <options createDirectoryStructure="false" createSelectedOnly="true" descriptionFilePath="/LCARS/scripts/scripts.rimpfd" overWriteExistingFiles="false" saveSettings="true"/>
+ <source path="PE-Mobil.PointedEars.de:/home/mw3020/f001/scripts"/>
+ <selectedElements>
+ <file path="/home/mw3020/f001/scripts/style.css"/>
+ </selectedElements>
+</rimpfd>
Index: live/back.js
===================================================================
--- live/back.js (nonexistent)
+++ live/back.js (revision 509)
@@ -0,0 +1,13 @@
+// The following tag is for display in advanced filelists only:
+// <TITLE>JavaScript PageBack Support</title>
+//
+// Refer back.txt file for general documentation.
+
+if (document.all)
+{
+ document.write('<span class="symbol">3</span>');
+}
+else
+{
+ document.write('&nbsp;');
+}
Index: live/top.js
===================================================================
--- live/top.js (nonexistent)
+++ live/top.js (revision 509)
@@ -0,0 +1,9 @@
+// The following tag is for display in advanced filelists only:
+// <TITLE>JavaScript TopOfPage Support</title>
+//
+// Refer top.txt for general documentation.
+
+if (document.all && !window.opera)
+ document.write('<span class="symbol">5</span>');
+else
+ document.write("&nbsp;");
Index: live/fullscreen.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/live/fullscreen.jpg
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: live/undots.js
===================================================================
--- live/undots.js (nonexistent)
+++ live/undots.js (revision 509)
@@ -0,0 +1,29 @@
+// The following tag is for display in advanced filelists only:
+// <TITLE>JavaScript 3dots LCARS Support Part 2</title>
+//
+// Refer undots.txt for general documentation.
+
+// Hiding loading content is potentially harmful
+// TODO: lcars.js::dots() and ::undots() to replace this
+/*
+if (typeof dhtml == "undefined")
+{
+ var dhtml = new Object();
+ dhtml.supported = false;
+}
+
+if (dhtml.supported)
+{
+ window.clearInterval(dotsAnim);
+ if (divContent && divStatus)
+ {
+ divStatus.style.visibility = "hidden";
+ divContent.style.visibility = "visible";
+ }
+ else
+ {
+ f.spanStatus.className = "";
+ dhtml.setTextContent(f.spanStatus, "DATABASE");
+ }
+}
+*/
\ No newline at end of file
Index: live/outline.js
===================================================================
--- live/outline.js (nonexistent)
+++ live/outline.js (revision 509)
@@ -0,0 +1,199 @@
+// The following tag is for display in advanced filelists only:
+// <TITLE>Support for Outline-styled Structure Using Dynamic HTML Statements</title>
+//
+// Refer outline.txt for general documentation.
+
+// Variable definitions
+
+var sOutline = "outline"; // Class name for outline node
+var sOutlined = "outlined"; // Class name for outline content
+var imgCollapsed = ""; // Image file to load when node is collapsed
+var imgExpanded = ""; // Image file to load when node is expanded
+var sCollapsed = "+"; // Text to display when node is collapsed
+var sExpanded = "-"; // Text to display when node is expanded
+
+/* SCRIPT EXCEPTIONS */
+
+function EOutline(Msg) {
+ var msgBody = "outline.js (c) 1999-2006 Thomas Lahn (webmaster@PointedEars.de)\n\n";
+ msgBody += Msg;
+ msgBody += "\n\nClick \"OK\" to send a feedback e-mail to the author of the script or click \"Cancel\" to abort.\nAnyway, you should inform the author of the HTML document of the error you have encountered.";
+ if (confirm(msgBody))
+ {
+ self.location.href = "mailto:webmaster@PointedEars.de?subject=Feedback/JavaScript/outline.js";
+ }
+ return false;
+}
+
+function ENoBrowser() {
+ return EOutline( "This script is designed to be processed from a web browser only." );
+}
+
+function ENoJScript() {
+ return EOutline( "Your browser does not support Microsoft JScript. This is designed for Microsoft Internet Explorer only." );
+}
+
+function ENoTarget(Object) {
+ var msg = "The script could not determine the required target object (";
+ msg += Object;
+ msg += "+).\nThe possible causes are:\n\n";
+ msg += "a) A style-sheet is included in the HTML document that redefines the OUTLINE class for DIV tags. The additional style-sheet needs to be removed, the class needs to be renamed, or the CLASS=\"OUTLINE\" attribute is to be used for no other objects than outline nodes for the script to work properly.\n\n";
+ msg += "b) The HTML document did not provide the object.\nIt needs to be defined using the ID attribute of the respective HTML tag.\n\n";
+ msg += "c) Maybe your browser is unable to return the complete object list due to low system resources.\nThere are currently ";
+ msg += String(document.all.length);
+ msg += " accessible objects within the HTML document. The number of outline objects possibly needs to be reduced for the script to work properly.\nFor the moment you may be able to expand/collapse all nodes of the outline structure using the respective items/buttons if the author had included them in the HTML document.";
+ return EOutline(msg);
+}
+
+function ENoAttr(Object) {
+ var msg = "The clicked object (ID=\"";
+ msg += Object;
+ msg += "\") does neither support the SRC, ALT nor the innerHTML attribute.\nUse the <IMG SRC=\"...\" [ALT=\"...\"] CLASS=\"outline\"> tag or any tag with an appropriate closing tag (<...></...>) for the node symbol instead.";
+ return EOutline( msg );
+}
+
+function EInvalidArgument(Arg) {
+ var msg = "FullTree: The user script did not pass the required number of arguments or passed an invalid argument (";
+ msg += Arg;
+ msg += "). Refer documentation in script file for correct function call.";
+ return EOutline( msg );
+}
+
+/* SCRIPT FEATURES */
+
+function CalcPaths() { // Calculates relative image file paths to absolute ones
+var PathEnd = document.URL.lastIndexOf('\\'); // Folder path
+ if( PathEnd == -1 )
+ {
+ PathEnd = document.URL.lastIndexOf('/'); // URL
+ }
+
+ if( PathEnd == -1 ) { // Extends filename to full path
+ var prevImgCollapsed = imgCollapsed;
+ imgCollapsed = document.URL.slice(0, PathEnd);
+ imgCollapsed += "/";
+ imgCollapsed += prevImgCollapsed;
+ var prevImgExpanded = imgExpanded;
+ imgExpanded = document.URL.slice(0, PathEnd);
+ imgExpanded += "/";
+ imgExpanded += prevImgExpanded;
+ }
+}
+
+function clickHandler() {
+var srcElement, targetId, targetElement;
+ if (document) { // If processed from web browser
+ var srcElement = window.event.srcElement;
+ if (srcElement && (srcElement.className.toLowerCase() == sOutline)) {
+ // If classified as outline node
+ targetId = srcElement.id;
+ targetId += "+";
+ targetElement = getElem("id", targetId);
+ if (targetElement) { // If the node content exists
+ if (targetElement.style.display == "none") { // If currently collapsed
+ targetElement.style.display = "";
+ if (srcElement.src) {
+ if (imgExpanded != "") srcElement.src = imgExpanded;
+ if (srcElement.alt) {
+ if (sExpanded != "") srcElement.alt = sExpanded;
+ }
+ } else if (srcElement.alt) {
+ if (sExpanded != "") srcElement.alt = sExpanded;
+ } else if (srcElement.innerHTML) {
+ if (sExpanded != "") srcElement.innerHTML = sExpanded;
+ } else
+ return ENoAttr( srcElement.id );
+ } else { // If currently expanded
+ targetElement.style.display = "none";
+ if (srcElement.src) {
+ if (imgCollapsed != "") srcElement.src = imgCollapsed;
+ if (srcElement.alt) {
+ if (sCollapsed != "") srcElement.alt = sCollapsed;
+ }
+ } else if (srcElement.alt) {
+ if (sCollapsed != "") srcElement.alt = sCollapsed;
+ } else if (srcElement.innerHTML) {
+ if (sCollapsed != "") srcElement.innerHTML = sCollapsed;
+ } else
+ return ENoAttr();
+ }
+ } else
+ return ENoTarget (srcElement.id);
+ }
+ } else
+ return ENoBrowser();
+}
+
+function FullTree(action) {
+var obj;
+ if (document) { // If processed from web browser
+ if (document.all) { // If Microsoft JScript is supported
+ for (var i = document.all.length; i--;) {
+ obj = document.all[i];
+ if (obj.className.toLowerCase() == sOutline || obj.className.toLowerCase() == sOutlined) {
+ if ((obj.tagName.toLowerCase() == "div") && (obj.className.toLowerCase() != sOutline)) {
+ if (action == "+")
+ obj.style.display = "";
+ else if (action == "-")
+ obj.style.display = "none";
+ else
+ return EInvalidArgument();
+ if (obj.src) {
+ if (action == "+") {
+ if (imgExpanded != "") obj.src = imgExpanded;
+ } else if (action == "-") {
+ if (imgCollapsed != "") obj.src = imgCollapsed;
+ } else
+ return EInvalidArgument();
+ }
+ if (obj.alt) {
+ if (action == "+") {
+ if (sExpanded != "") obj.alt = sExpanded;
+ } else if (action == "-") {
+ if (sCollapsed != "") obj.alt = sCollapsed;
+ } else
+ return EInvalidArgument();
+ }
+ } else if ((obj.innerHTML && obj.tagName.toLowerCase() == "span") && (obj.className.toLowerCase() == sOutline)) {
+ // Only on SPAN
+ if (action == "+") {
+ if (sExpanded != "") obj.innerHTML = sExpanded;
+ } else if (action == "-") {
+ if (sCollapsed != "") obj.innerHTML = sCollapsed;
+ } else
+ return EInvalidArgument();
+ }
+ }
+ }
+ } else
+ return ENoJScript();
+ } else
+ return ENoBrowser();
+}
+
+function FullExpand() {
+ return FullTree("+");
+}
+
+function FullCollapse() {
+ return FullTree("-");
+}
+
+function FullTreeItems() {
+ document.write( '<p><a href="JavaScript:FullExpand()" target="_self">Alle Ebenen einblenden</a><br>',
+ '<a href="FullCollapse()" target="_self">Alle Ebenen ausblenden</a></p>' );
+}
+
+function FullTreeButtons() {
+ document.write( '<p><input type="button" width=100% value="Alle Ebenen einblenden" class="help" style="width:100%;" onClick="FullExpand();"><br>',
+ '<input type="button" width=100% value="Alle Ebenen ausblenden" class="help" style="width:100%" onClick="FullCollapse()"></p>' );
+}
+
+if (document) // If processed from a web browser: Defines the function above to be processed on every click on the document
+{
+ document.onclick = clickHandler;
+}
+else
+{
+ ENoBrowser();
+}
\ No newline at end of file
Index: live/loadidx.js
===================================================================
--- live/loadidx.js (nonexistent)
+++ live/loadidx.js (revision 509)
@@ -0,0 +1,12 @@
+if (typeof dhtml == "undefined")
+{
+ var dhtml = new Object();
+ dhtml.supported = false;
+}
+
+if (dhtml.supported)
+{
+ document.write(
+ '<div class="standby" style="visibility: none;" id="div_status"'
+ + '>LOADING INDEX <span id="dots">&nbsp;</span></div>');
+}
\ No newline at end of file
Index: live/realtracker.js
===================================================================
--- live/realtracker.js (nonexistent)
+++ live/realtracker.js (revision 509)
@@ -0,0 +1,63 @@
+// RealTracker script as created by http://11.rtcode.com/netpoll/ifreev3i.asp?id=161409&amp;to=0
+// removed ads iframe and popup
+document.write('<table border="0" cellspacing="0" cellpadding="0"><tr><td>');
+
+function cv(s)
+{
+ var c, r, i, b, e;
+ c = document.cookie;
+ r = '';
+ i = c.indexOf(s);
+ if (i > -1)
+ {
+ b = c.indexOf('=', i) + 1;
+ e = c.indexOf(';', i);
+ if (e < 0)
+ {
+ e = c.length;
+ }
+ r = c.substring(b, e);
+ }
+
+ return r;
+}
+
+function wc(n,v,t)
+{
+ document.cookie = n + '=' + v + '; path=/; expires=' + t.toGMTString() + ';';
+}
+
+function td(n)
+{
+ var s = '' + n;
+ return(s.length < 2 ? '0' + s : s);
+}
+
+function fdy(n)
+{
+ return (n < 100 ? '19' + n : '' + n);
+}
+
+var t, z, r, s, a, b, q, g, p, l;
+t = new Date();
+r = '&amp;tt=' + td(t.getMonth() + 1) + '%2F' + td(t.getDate()) + '%2F' + fdy(t.getYear()) + '+'
++ td(t.getHours()) + '%3A' + td(t.getMinutes()) + '%3A' + td(t.getSeconds());
+t.setTime(t.getTime() + 5184000000);
+z = 'RTid';
+b = parseInt(2000000000 * Math.random())
+a = cv(z);
+if (a == '') a = b;
+wc(z, a, t);
+q = screen;
+r += '&amp;h=' + q.height +'&amp;w=' + q.width + '&amp;c=' + (q.pixelDepth ? q.pixelDepth : q.colorDepth)
+r += '&amp;cl=' + escape(window.location.href) + '&amp;d=' + b + '&amp;b=' + a + '&amp;ck=' + (cv(z) != '' ? 1 : 0) + '&amp;j=' + (navigator.javaEnabled() ? 1 : 0)
+g = document.referrer;
+r += '&ref=' + escape(g);
+s = '<a href="http://11.rtstats.com/netpoll/stat.asp?id=' + id
++ '&amp;to=" target="_blank"><img'
++ ' src="http://11.rtcode.com/netpoll/ifreev3.asp?id=' + id
++ '&amp;to=&amp;js=1' + r + '" border="0" width="88" height="32"'
++ '></' + 'a><br />';
+document.write(s);
+/*document.write('<IFRAME SRC="http://11.rtcode.com/netpoll/MHWAdLookup.asp?AdID=GNMde" WIDTH="88" HEIGHT="31" SCROLLING="no" FRAMEBORDER="0" FRAMESPACING="0" MARGINHEIGHT="0" MARGINWIDTH="0" BORDER="0" HSPACE="0" VSPACE="0"></IFRAME>\n');*/
+document.write('</td></tr></table>');
Index: live/ufpdbfrm.js
===================================================================
--- live/ufpdbfrm.js (nonexistent)
+++ live/ufpdbfrm.js (revision 509)
@@ -0,0 +1,55 @@
+function restoreLCARS()
+{
+ if (top == self) // single document
+ {
+ var sURI = "";
+
+ if (location.protocol.toLowerCase().indexOf("http") > -1) // http:
+ {
+ if (location.hostname.length > 0
+ && location.hostname.toLowerCase().indexOf("pointedears.de") < 0
+ && location.hostname.toLowerCase() != "localhost")
+ sURI += "/~thla-in/";
+ }
+ else // file:
+ {
+ sURI = "file:/";
+
+ if (navigator.platform.indexOf("Win") >= 0)
+ sURI += "//F:";
+ else
+ sURI += "windows/F";
+
+ sURI += "/LCARS";
+ }
+
+ sURI += "/ufpdb/main?content=" + location.pathname;
+
+ if (parent.location)
+ {
+/*
+ if (parent.location.replace)
+ parent.location.replace(sURI);
+ else
+ */
+ parent.location = sURI;
+ }
+ }
+ else if (parent.frames && parent.frames['ufpdb_banner'])
+ { // within the frameset
+ var f = parent.frames['ufpdb_banner'];
+
+ if (f)
+ f.makeLeftBanner(document.title);
+ }
+}
+
+if (top == self) // single document
+{
+ document.write(
+ "<hr><p>This document is part of the United Federation of Planets Database"
+ + "&trade; and is best viewed within the LCARS interface.<\/p>"
+ + '<a href="javascript:restoreLCARS();"'
+ + ' onclick="restoreLCARS(); return false;" class="button">'
+ + '&nbsp;RESTORE FRAMESET&nbsp;<\/a><hr>');
+}
\ No newline at end of file
Index: live/close.js
===================================================================
--- live/close.js (nonexistent)
+++ live/close.js (revision 509)
@@ -0,0 +1,13 @@
+/**
+ * <title>JavaScript ClosePage Support</title>
+ */
+// Refer close.txt for general documentation.
+
+if (document.all && !window.opera)
+{
+ document.write('<span class="symbol">r</span>');
+}
+else
+{
+ document.write("&nbsp;");
+}
\ No newline at end of file
Index: live/accessng.js
===================================================================
--- live/accessng.js (nonexistent)
+++ live/accessng.js (revision 509)
@@ -0,0 +1,12 @@
+if (!this.dhtml)
+{
+ var dhtml = new Object();
+ dhtml.supported = false;
+}
+
+if (dhtml.supported)
+{
+ document.write(
+ '<div class="standby" id="div_status">ACCESSING FILE <span id="dots"'
+ + '>&nbsp;<\/span><\/div>');
+}
Index: live/jsdoc-note.js
===================================================================
--- live/jsdoc-note.js (nonexistent)
+++ live/jsdoc-note.js (revision 509)
@@ -0,0 +1,12 @@
+/*
+ * The original source file
+ * _foo.js/x.yz/YYYY-MM-DD-HH/foo.js
+ * contains a complete documentation written in JSdoc, see
+ * <http://pointedears.de/scripts/JSdoc/> for details.
+ *
+ * Since JSdoc is not yet ready for production purposes to
+ * generate a HTML documentation from these comments and
+ * including them in the production version means about nm%
+ * of code overhead, most of the JSdoc comments have been
+ * stripped from this file.
+ */
\ No newline at end of file
Index: live/cookie.js
===================================================================
--- live/cookie.js (nonexistent)
+++ live/cookie.js (revision 509)
@@ -0,0 +1,185 @@
+/**
+ * <title>JavaScript Cookie Data Access Prototype</title>
+ */
+// Refer cookie.txt file for general documentation.
+
+// TCookie prototype definition
+
+function Cookie(sData)
+{
+ this.version = "1.4.2004012016";
+ this.msgHeader =
+ "Cookie JavaScript Cookie Data Access Prototype v"
+ + this.version + " \xA9 2000-2004 Thomas Lahn. All rights reserved.\n"
+ + "Web: http://pointedears.de/\n"
+ + "Email: cookie.js@PointedEars.de\n\n";
+// reset properties
+ this.name = "";
+ this.value = "";
+ this.expires = "";
+ this.domain = "";
+ this.path = "";
+ this.secure = false;
+ if (sData)
+ {
+ // properties
+ // Separate the sections of cookie data to retrieve properties */
+ var aCookieData = new Array();
+ var sTempData = "";
+ var i;
+
+ for (i = 0; i < sData.length; i++)
+ {
+ var currentChar = sData.substr(i, 1);
+ sTempData += currentChar;
+ if (currentChar == ";" || i == sData.length - 1)
+ {
+ aCookieData[aCookieData.length] = sTempData;
+ sTempData = "";
+ }
+ }
+
+ for (i = 0; i < aCookieData.length; i++)
+ {
+ var sDataName = aCookieData[i].substring(0, aCookieData[i].indexOf("="));
+ var sDataValue =
+ aCookieData[i].substring(
+ aCookieData[i].indexOf("=") + 1,
+ aCookieData[i].length - 1);
+
+ if (i == 0)
+ {
+ this.name = sDataName;
+ this.value = sDataValue;
+ }
+ else
+ {
+ var sDataNameLower = sDataName.toLowerCase();
+ if (sDataNameLower == "expires") this.expires = sDataValue;
+ if (sDataNameLower == "domain" ) this.domain = sDataValue;
+ if (sDataNameLower == "path" ) this.path = sDataValue;
+ if (sDataNameLower == "secure" ) this.secure = true;
+ }
+ }
+ }
+ // methods
+ this.loadData = cookie_loadData;
+ this.toString = cookie_toString;
+ this.aboutMe = cookie_aboutMe;
+}
+
+function cookie_loadData(sData)
+{
+ // Separate the sections of cookie data */
+ var aCookieData = new Array();
+ var sTempData = "";
+ var i;
+
+ for (i = 0; i < sData.length; i++)
+ {
+ var currentChar = sData.substr(i, 1);
+ sTempData += currentChar;
+
+ if(currentChar == ";")
+ {
+ aCookieData[aCookieData.length] = sTempData;
+ sTempData = "";
+ }
+ }
+ for (i = 0; i < aCookieData.length; i++)
+ {
+ var sDataName = aCookieData[i].substring(0, aCookieData[i].indexOf("="));
+ var sDataValue =
+ aCookieData[i].substring(
+ aCookieData[i].indexOf("=") + 1,
+ aCookieData[i].length - 1);
+
+ if (i == 0)
+ {
+ this.name = sDataName;
+ this.value = sDataValue;
+ }
+ else
+ {
+ var sDataNameLower = sDataName.toLowerCase();
+ (sDataNameLower == "expires"
+ ? this.expires = sDataValue
+ : this.expires = 0);
+ (sDataNameLower == "domain"
+ ? this.domain = sDataValue
+ : this.domain = "");
+ (sDataNameLower == "path"
+ ? this.path = sDataValue
+ : this.path = "");
+ (sDataNameLower == "secure"
+ ? this.secure = true
+ : this.secure = false);
+ }
+ }
+}
+
+function cookie_toString()
+{
+ return (
+ this.name + "=" + this.value
+ + "; Expires=" + this.expires
+ + "; domain=" + this.domain
+ + "; path=" + this.path
+ + (this.secure ? "secure;" : ";"));
+}
+
+function cookie_aboutMe(showMsg)
+{
+ var result = false;
+
+ if (showMsg)
+ {
+ alert(getObjInfo(this, "p", "s"));
+ }
+ else
+ {
+ result = getObjInfo(this, "p", "Ts");
+ }
+
+ return result;
+}
+
+// Create a cookie with the specified name and value.
+function cookie_setCookie(sName, sValue, dDate, iExpirationType)
+{
+ var dExpiration = new Date();
+ if (arguments.length > 3 && iExpirationType < 0)
+ { // Countdown
+ dExpiration.setTime(dExpiration.getTime() + dDate);
+ }
+ else // Expiration Date
+ {
+ dExpiration.setTime(dDate);
+ }
+ document.cookie =
+ sName + "=" + escape(sValue)
+ + "; expires=" + dExpiration + ";";
+}
+
+// Remove the cookie with the specified name.
+function cookie_delCookie(sName)
+{
+ var d = new Date();
+ return cookie_setCookie(sName, "null", d.getTime() - 1);
+}
+
+// Retrieve the value of the cookie with the specified name.
+function cookie_getCookie(sName)
+{
+ // cookies are separated by semicolons
+ var aCookie = document.cookie.split("; ");
+ for (var i=0; i < aCookie.length; i++) {
+ // a name/value pair (a crumb) is separated by an equal sign
+ var aCrumb = aCookie[i].split("=");
+ if (sName == aCrumb[0])
+ return unescape(aCrumb[1]);
+ }
+
+ // a cookie with the requested name does not exist
+ return null;
+}
\ No newline at end of file
Index: live/printf-20020909.c
===================================================================
--- live/printf-20020909.c (nonexistent)
+++ live/printf-20020909.c (revision 509)
@@ -0,0 +1,246 @@
+/* Lisence is GPL2 */
+#include <string.h>
+#include <ctype.h>
+char hextbl[] = "0123456789ABCDEF";
+void sys_write(char*, int);
+#define SCANDEF 0x100000
+#define BARDEF 0x80000
+#define DOTDEF 0x40000
+#define ZERODEF 0x20000
+#define SIZEDEF 0x10000
+#define ESCAPE 1
+
+static int outchar(char c, char *ptr, int off) {
+ if(ptr == (char*)-1) sys_write(&c, 1);
+ else if(ptr > (char*)255) ptr[off] = c;
+ return off + 1;
+}
+
+static int outstring(char *data, int len, char *ptr, int offset, int _num) {
+ int i, num1, siz, off;
+
+ off = offset;
+ num1 = _num & 0xffff;
+ siz = len;
+ if((_num & (SIZEDEF | BARDEF | DOTDEF)) == SIZEDEF)
+ for(i = num1;i > len;i--)
+ off = outchar(' ', ptr, off);
+ if((_num & SIZEDEF) && (_num & DOTDEF) && (siz > num1)) siz = num1;
+ if(ptr == (char*)-1) sys_write(data, siz);
+ else if(ptr > (char*)255) memcpy(&(ptr[off]), data, siz);
+ off += siz;
+ if((_num & (SIZEDEF | BARDEF | DOTDEF)) == (SIZEDEF | BARDEF))
+ for(i = num1;i > len;i--)
+ off = outchar(' ', ptr, off);
+ return off;
+}
+
+static int out_space(int _num, char* ptr, int off) {
+ if(_num & ZERODEF)
+ return outchar('0', ptr, off);
+ else
+ return outchar(' ', ptr, off);
+}
+
+static int input_number(int *value, char *ptr, int offset, int _num, int sel) {
+ char buffer[16], *inptr;
+ int off;
+
+ off = offset;
+ if(ptr == (char*)-1) {
+ read_string(buffer, 15);
+ sys_write("\n", 1);
+ inptr = buffer;
+ } else if(ptr > (char*)255) {
+ while(ptr[off] <= ' ') off++;
+ inptr = &(ptr[off]);
+ while(ptr[off] > ' ') off++;
+ }
+ if(sel == 0) *value = atodec(inptr);
+ else *value = atohex(inptr);
+ return off;
+}
+
+static int number(unsigned int value, char *ptr, int offset, int _num) {
+ unsigned int a, b, dec;
+ int f, i, off, k, num1;
+
+ if(_num & SCANDEF)
+ return input_number((int*)value, ptr, offset, _num, 0);
+ dec = value;
+ off = offset;
+ num1 = _num & 0xffff;
+ for(k = 10, i = 1000000000;i >= 10;i /= 10, k--) if(value / i) break;
+ if((_num & (SIZEDEF | BARDEF)) == SIZEDEF)
+ for(i = num1;i > k;i--)
+ off = out_space(_num, ptr, off);
+ f = 0;
+ for(i = 1000000000;i >= 100;i /= 10) {
+ a = dec % i;
+ b = i / 10;
+ a = a / b;
+ if(a > 0) f = 1;
+ if(f == 1) off = outchar(hextbl[a], ptr, off);
+ }
+ a = dec % 10;
+ off = outchar(hextbl[a], ptr, off);
+ if((_num & (SIZEDEF | BARDEF)) == (SIZEDEF | BARDEF))
+ for(i = num1;i > k;i--)
+ off = out_space(_num, ptr, off);
+ return off;
+}
+
+static int decimal(int value, char *ptr, int offset, int _num) {
+ int num, off;
+
+ if(_num & SCANDEF)
+ return input_number((int*)value, ptr, offset, _num, 0);
+ num = value;
+ off = offset;
+ if(num < 0) {
+ off = outchar('-', ptr, off);
+ num = ~num + 1;
+ }
+ return number(num, ptr, off, _num);
+}
+
+static int hex(unsigned int value, char *ptr, int offset, int _num) {
+ int off, sft, index, num1, nm, f, i;
+ unsigned int bits;
+ char c;
+
+ if(_num & SCANDEF)
+ return input_number((int*)value, ptr, offset, _num, 1);
+ off = offset;
+ num1 = _num & 0xffff;
+ for(nm = 36,bits = 0xffffffff;bits > 0;bits >>= 1, nm--)
+ if(~bits & value) break;
+ nm >>= 2;
+ if((_num & (SIZEDEF | BARDEF)) == SIZEDEF)
+ for(i = num1;i > nm;i--)
+ off = out_space(_num, ptr, off);
+ f = 0;
+ for(sft = 28;sft >= 0;sft -= 4) {
+ index = (value >> sft) & 0xf;
+ if(index > 0) f = 1;
+ if(index > 0 || f == 1 || sft == 0)
+ off = outchar(hextbl[index], ptr, off);
+ }
+ if((_num & (SIZEDEF | BARDEF)) == (SIZEDEF | BARDEF))
+ for(i = num1;i > nm;i--)
+ off = out_space(_num, ptr, off);
+ return off;
+}
+
+int vprintf(char *p, char *form, int a, int b, int *arg, int _opt) {
+ int i, n, off, argc, value, num, numindex, opt, inoff;
+ char flag, numbuf[5], *ptr, *inptr;
+
+ flag = 0;
+ off = 0;
+ argc = -2;
+ n = strlen(form);
+ for(i = 0;i < n;i++) {
+ if(flag & ESCAPE) {
+ if(argc == -2) value = a;
+ else if(argc == -1) value = b;
+ else value = arg[argc];
+ }
+ if(form[i] == '%') {
+ if(i > 0 && form[i - 1] == '%') {
+ flag &= ~ESCAPE;
+ if(!(_opt & SCANDEF)) off = outchar(form[i], p, off);
+ } else {
+ flag |= ESCAPE;
+ numindex = -1;
+ num = 0;
+ opt = _opt;
+ }
+ } else if((flag & ESCAPE) && (form[i] == 'd' || form[i] == 'i')) {
+ argc++;
+ off = decimal(value, p, off, num | opt);
+ flag &= ~ESCAPE;
+ } else if((flag & ESCAPE) && form[i] == 'u') {
+ argc++;
+ off = number(value, p, off, num | opt);
+ flag &= ~ESCAPE;
+ } else if((flag & ESCAPE) && (form[i] == 'x' || form[i] == 'X')) {
+ argc++;
+ off = hex(value, p, off, num | opt);
+ flag &= ~ESCAPE;
+ } else if((flag & ESCAPE) && form[i] == 's') {
+ argc++;
+ ptr = (char*)value;
+ if(opt & SCANDEF) {
+ if(p == (char*)-1) {
+ if(!(opt & SIZEDEF)) num = -1;
+ read_string(ptr, num);
+ sys_write("\n", 1);
+ } else if(p > (char*)255) {
+ while(p[off] <= ' ') off++;
+ inptr = &(p[off]);
+ inoff = off;
+ while(p[off] > ' ') off++;
+ memcpy(ptr, inptr, off - inoff);
+ ptr[off - inoff] = 0;
+ }
+ } else {
+ off = outstring(ptr, strlen(ptr), p, off, num | opt);
+ }
+ flag &= ~ESCAPE;
+ } else if((flag & ESCAPE) && form[i] == 'c') {
+ argc++;
+ if(opt & SCANDEF) {
+ ptr = (char*)value;
+ if(p == (char*)-1) {
+ *ptr = 0;
+ read_string(ptr, 1);
+ sys_write("\n", 1);
+ } else {
+ while(p[off] <= ' ') off++;
+ *ptr = p[off++];
+ }
+ } else {
+ off = outchar((char)value, p, off);
+ }
+ flag &= ~ESCAPE;
+ } else if((flag & ESCAPE) && isdigit(form[i])) {
+ if(numindex > 3) flag &= ~ESCAPE;
+ else {
+ numbuf[++numindex] = form[i];
+ numbuf[numindex + 1] = 0;
+ num = atodec(numbuf);
+ opt |= SIZEDEF;
+ if(form[i] == '0') opt |= ZERODEF;
+ }
+ } else if((flag & ESCAPE) &&
+ (form[i] == '.' || form[i] == ' ' ||
+ form[i] == 'l' || form[i] == '-')) {
+ if(form[i] == '.') opt |= DOTDEF;
+ if(form[i] == '-') opt |= BARDEF;
+ } else {
+ flag &= ~ESCAPE;
+ if(!(_opt & SCANDEF)) off = outchar(form[i], p, off);
+ }
+ }
+ return off;
+}
+
+void print(char *form, int a, int b, int c) {
+ vprintf((char*)-1, form, a, b, &c, 0);
+}
+
+void sprint(char *buf, char *form, int a, int b, int c) {
+ int n;
+
+ n = vprintf(buf, form, a, b, &c, 0);
+ buf[n] = 0;
+}
+
+void scan(char *form, int a, int b, int c) {
+ vprintf((char*)-1, form, a, b, &c, SCANDEF);
+}
+
+void sscan(char *buf, char *form, int a, int b, int c) {
+ vprintf(buf, form, a, b, &c, SCANDEF);
+}
Index: live/enhanced.bak.js
===================================================================
--- live/enhanced.bak.js (nonexistent)
+++ live/enhanced.bak.js (revision 509)
@@ -0,0 +1,981 @@
+/* Original filename: enhanced.js
+ *
+ * <title>Level-1 Enhanced Website Features</title>
+ * Part of PointedEars' JavaScript Extensions (JSX)
+ * Copyright (c) 2001-2003 Thomas Lahn <enhanced.js@PointedEars.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License (GPL) for more details.
+ *
+ * You should have received a copy of the GNU GPL along with this
+ * program (COPYING file); if not, go to [1] or write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * [1] <http://www.gnu.org/licenses/licenses.html#GPL>
+ *
+ * Refer enhanced.htm file for general documentation.
+ */
+
+var enhancedVersion = "1.29.2003.3b3+";
+var enhancedCopyright = "Copyright \xA9 1999-2002";
+var enhancedAuthor = "Thomas Lahn";
+var enhancedEmail = "PointedEars@gmx.de";
+var enhancedPath = "http://www.tu-ilmenau.de/~thla-in/scripts/";
+var enhancedDocURL = enhancedPath + "enhanced.htm";
+
+// Script exceptions
+
+function enhancedException(Msg)
+{
+ alert(
+ "enhanced.js "
+ + enhancedVersion
+ + "\n"
+ + enhancedCopyright
+ + " "
+ + enhancedAuthor
+ + " <"
+ + enhancedEmail
+ + ">\n\n"
+ + Msg);
+ return false;
+}
+
+function ENoBrowser()
+{
+ return enhancedException(
+ "This script is designed to be processed from a web browser only.");
+}
+
+function EInvalidArgNum(sFunctionName, iArg)
+{
+ /* if (arguments.length < 2) iArg = "?";*/
+ return enhancedException(
+ sFunctionName
+ + ": The user script did not pass the required number of arguments ("
+ + iArg
+ + ").\nRefer documentation in script file for correct function call.");
+}
+
+function EInvalidArg(sFunctionName, sArg)
+{
+ return enhancedException(
+ sFunctionName
+ + ": The user script passed an invalid argument ("
+ + sArg
+ + ").\nRefer documentation in script file for correct function call.");
+}
+
+function getError(e)
+{
+ var sError = e;
+
+ if (e.name)
+ sError += "\nName: " + e.name;
+ if (e.number)
+ sError += "\nCode: " + e.number;
+ if (e.message)
+ sError += "\nMessage: " + e.message;
+ if (e.description)
+ sError += "\nDescription: " + e.description;
+ if (e.fileName)
+ sError += "\nFilename: " + e.fileName;
+
+ try
+ {
+ if (e.lineNumber)
+ sError += "\nLine: " + e.lineNumber;
+ }
+ catch (e2)
+ {
+ sError += "\nLine: " + e2;
+ }
+
+ if (e.stack)
+ sError += "\nStack:\n" + e.stack;
+
+ return sError;
+}
+
+// Script features
+
+function isArray(value)
+{
+ if (value.length)
+ return true;
+ else
+ return false;
+}
+
+var CH_NBSP = unescape("%A0");
+
+function replaceText(sText, sReplaced, sReplacement, bForceLoop)
+{
+ var result;
+ var sNewText = sText;
+ // alert(sText);
+ if (sText)
+ {
+ if (sText.replace && !bForceLoop)
+ {
+ sReplaced = sReplaced.replace(/\\/g, "\\\\");
+ /* Version 1.23.2002.4 bugfix: allows to replace \ with other
+ strings, required for proper rxReplaced;
+ Example (no quotes, no escaping):
+ sReplaced (provided) "\\"
+ sReplaced (evaluated) \
+ sReplaced (replaced as formulated above) "\\\\"
+ sReplaced (esc. in RegExp constructor) "\\\\"
+ sReplaced (ev. in RegExp constructor) \\
+ rxReplaced (with RegExp escaping) /\\/g
+ rxReplaced (evaluated) all occurr. of \
+ */
+ var rxReplaced = new RegExp(sReplaced, "g");
+ sText = sText.replace(rxReplaced, sReplacement);
+
+ result = sText;
+ }
+ else
+ {
+ var i = sText.indexOf(sReplaced);
+ if (i > -1)
+ {
+ sNewText = sText.substring(0, i);
+ sNewText += sReplacement
+ + replaceText(
+ sText.substring(i + sReplaced.length),
+ sReplaced,
+ sReplacement);
+ }
+
+ result = sNewText;
+ }
+ }
+ return result;
+}
+
+function trimLeft(s)
+{
+ var iStart = 0, sResult = "";
+
+ if (s != "")
+ {
+ var l = s.length - 1;
+ for (i = 0; i < l; i++)
+ {
+ a = s.charAt(i);
+ if ((a != " ") && (a != CH_NBSP))
+ {
+ iStart = i;
+ break;
+ }
+ }
+ var iRealLength = s.length;
+ iRealLength += 1;
+ sResult = s.substr(iStart, iRealLength);
+ }
+
+ return sResult;
+}
+
+function trimRight(s)
+{
+ var iStop = 0, sResult = "";
+
+ if (s != "")
+ {
+ for (i = (s.length - 1); i > 0; i--)
+ {
+ a = s.charAt(i);
+ if ((a != " ") && (a != CH_NBSP))
+ {
+ iStop = i;
+ iStop += 1;
+ break;
+ }
+ }
+ sResult = s.substr(0, iStop);
+ }
+
+ return sResult;
+}
+
+function trim(s)
+{
+ var sResult = s; // version 1.06.2000.3 bugfix, formerly nullstring assigned
+
+ if (s != "")
+ {
+ sResult = trimLeft(s);
+ // direct processing via trimRight(trimLeft(...)) does not seem to work
+ sResult = trimRight(sResult);
+ }
+
+ return sResult;
+}
+
+function LCaps(s)
+{
+ return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();
+}
+
+function setStatus(sCaption)
+{
+ window.status = sCaption;
+ return true;
+}
+
+function stripTags(taggedStr)
+{
+ var
+ a = "",
+ outOfTag = true,
+ untaggedStr = "",
+ l = taggedStr.length;
+
+ for (var i = 0; i < l; i++)
+ {
+ a = taggedStr.charAt(i);
+ if (outOfTag && (a == "<"))
+ outOfTag = false;
+ if (outOfTag)
+ untaggedStr += a;
+ if ((!outOfTag) && (a == ">"))
+ outOfTag = true;
+ }
+
+ return untaggedStr;
+}
+
+function strCount(s, substr, bCaseSensitive)
+{
+ var result = 0;
+
+ if (!s || !substr)
+ return -1;
+ if (!bCaseSensitive)
+ {
+ if (s.toUpperCase)
+ s = s.toUpperCase();
+ if (substr.toUpperCase)
+ substr = substr.toUpperCase();
+ }
+ if (window.RegExp)
+ {
+ var rxSub = new RegExp(substr, "g");
+ if (s.match && rxSub)
+ {
+ result = s.match(rxSub);
+ if (result && result.length)
+ return result.length;
+ else
+ return 0;
+ }
+ }
+ if (s.substr && substr.length)
+ {
+ for (var i = 0; i < s.length; i++)
+ if (s.substr(i, substr.length) == substr)
+ {
+ result++;
+ i += substr.length - 1;
+ }
+ return result;
+ }
+ else
+ return -1;
+}
+
+var sLinkOutMsg_de =
+ "Dieser Link ist offline nicht verfügbar.\n\n"
+ + "Wenn Sie mit dem Internet verbunden sind, steht Ihnen die Seite online"
+ + " zur Verfügung.\n\n"
+ + "Möchten Sie jetzt eine Verbindung zu dieser Seite herstellen?";
+
+var sLinkOutMsg_us =
+ "This link is not available offline.\n\n"
+ + "If you are connected to the Internet, the website is available online.\n\n"
+ + "Do you wish to connect to this website now?';"; +
+var sLinkOutMsg = sLinkOutMsg_de;
+
+function linkOut(sURL, sLink, bShowURL, aTarget, sWidth, sHeight, sOptions)
+{
+ if (arguments.length < 1)
+ {
+ EInvalidArgNum("linkOut", 1);
+ return false;
+ }
+
+ var arg = sLinkOutMsg;
+ // version 1.05.2000.3 update, formerly bShowURL as 2nd argument; fixed problem with websites created earlier
+ if (arguments.length < 3)
+ bShowURL = true;
+
+ if (((sURL != "") && (bShowURL == true))
+ || ((arguments.length >= 2) && (sLink != "")))
+ {
+ var oldArg = arg;
+ arg = "\n\n";
+ arg += oldArg;
+ }
+
+ if ((sURL != "") && (bShowURL == true))
+ {
+ var oldArg = arg;
+ arg = sURL;
+ arg += oldArg;
+ }
+
+ if ((arguments.length >= 2) && (sLink != ""))
+ {
+ if ((sURL != "") && (bShowURL == true))
+ {
+ var oldArg = arg;
+ arg = sLink;
+ arg += "\n";
+ arg += oldArg;
+ }
+ else
+ {
+ var oldArg = arg;
+ arg = sLink;
+ arg += oldArg;
+ }
+ }
+
+ if (confirm(arg))
+ {
+ var oTarget = document;
+ if ((arguments.length >= 4)
+ && (aTarget != "")
+ && (aTarget.toLowerCase() != "_self"))
+ { // version 1.05.2000.3 update, formerly no nullstrings nor "_self" supported
+ if (isNaN(aTarget))
+ {
+ if ((aTarget.toLowerCase() == "_new")
+ || (aTarget.toLowerCase() == "_blank"))
+ {
+ popUp(sURL, sWidth, sHeight, sOptions);
+ return;
+ }
+ else
+ oTarget = parent.eval(aTarget).document;
+ // and below: v1.09.2000.3 bugfix
+ }
+ else
+ oTarget = parent.frames[aTarget].document;
+ }
+ oTarget.location = "";
+ oTarget.location.href = sURL;
+ }
+
+ return false; // version 1.15.2000.11 update
+}
+
+function popUp(sURL, iWidth, iHeight, sOptions)
+{
+ var sFeatures = "height=";
+ sFeatures += String(iHeight);
+ sFeatures += ",width=";
+ sFeatures += String(iWidth);
+ if (arguments.length > 3)
+ {
+ sFeatures += ",";
+ sFeatures += sOptions;
+ }
+ var wndChild = window.open(sURL, null, sFeatures);
+ return false;
+}
+
+// OpenChildWin(...) call redirected to popUp(...) for compatibility to previous versions
+
+function OpenChildWin(sURL, iWidth, iHeight, sOptions)
+{
+ return popUp(sURL, iWidth, iHeight, sOptions);
+}
+
+function LoadFrame(sURL, targetFrame)
+{
+ if (arguments.length < 2)
+ {
+ // Raise exception if required arguments are missing
+ return EInvalidArgNum("LoadFrame", 2);
+ }
+ if (isNaN(targetFrame))
+ {
+ if (parent.eval(targetFrame))
+ {
+ parent.eval(targetFrame).location.href = sURL;
+ return sURL;
+ }
+ else
+ return targetFrame;
+ }
+ else
+ {
+ if (parent.frames[targetFrame])
+ {
+ parent.frames[targetFrame].location.href = sURL;
+ return sURL;
+ }
+ else
+ return targetFrame;
+ }
+}
+
+var sDefaultInspectorPath = enhancedPath + "obj-insp.html";
+
+function noError()
+{
+ this.onerror = null;
+ return true;
+}
+
+function getObjInfo(aObject, aWhat, sStyle, sHeader, sFooter, sInspectorPath) {
+ var sErrPrefix = "JSX:getObjInfo " + enhancedVersion + ": ";
+ var sNoObj = "not an object";
+ // alert("1: " + aObject + "[" + typeof aObject + "]");
+ if (aObject) {
+ /* check if `try {'...`} catch {'...`} finally {'...`}' is supported,
+ do not guess object otherwise; Netscape 4.x workaround
+ */
+ tcf = false;
+ window.onerror = noError; // JavaScript 1.0 compatible
+ eval("try { tcf = false; } finally { tcf = true; };");
+// alert(aObject);
+ window.onerror = null;
+ var sObject = aObject;
+ if (typeof aObject == "string") {
+ if (tcf) {
+ var bFailed = false;
+ eval('\
+ try { \
+ // alert("2: " + aObject + "[" + typeof sObject + "]"); \n\
+ aObject = eval(aObject); \
+ } catch (e) { \
+ // alert("3: " + sObject + "[" + typeof sObject + "]"); \n\
+ var sObject = "window." + sObject; \
+ try { \
+ // alert("4: " + aObject + "[" + typeof aObject + "]"); \n\
+ aObject = eval(sObject); \
+ } catch (e) { \
+ // alert("5: " + "[Not an object]"); \n\
+ bFailed = true; \
+ } \
+ } \
+ ');
+ if (bFailed)
+ return sErrPrefix + sObject + " is " + sNoObj + ".";
+ }
+ else {
+ aObject = eval(aObject);
+ if (!aObject)
+ return (sErrPrefix + sObject + " is " + sNoObj + ".");
+ // alert("6: " + "[Not an object]");
+ }
+ }
+ // alert("7: " + aObject);
+ } else{
+ // alert("8: " + "[Not an object]");
+ return (sErrPrefix + "[" + sNoObj + "]");
+ }
+ if (!aWhat) aWhat = ""; // v1.29.2002.10b3 bugfix
+ var bShowProps = (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("P") > -1));
+ var bShowMethods = (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("M") > -1));
+ var bShowObjects = (aWhat && (!aWhat.test && aWhat.toUpperCase().indexOf("O") > -1));
+ var bFormatAsArray = (sStyle && (sStyle.toUpperCase().indexOf("A") > -1));
+ var bTextLineStyle = (sStyle && (sStyle.toUpperCase().indexOf("L") > -1));
+ var bFormatAsLines = (sStyle && (sStyle.toUpperCase().indexOf("H") > -1));
+ var bFormatAsTable = (sStyle && (sStyle.toUpperCase().indexOf("T") > -1));
+ var bShowType = (sStyle && (sStyle.toUpperCase().indexOf("S") > -1));
+ var bFormatAsHTML = (bFormatAsLines || bFormatAsTable);
+
+ if (sHeader && (sHeader == "-"))
+ sHeader = "";
+ else if (!sHeader || (sHeader == "")) {
+ sHeader = "";
+ if (bShowObjects || bShowProps || bShowMethods) {
+ if (bShowProps)
+ sHeader = "Properties";
+ else if (bShowObjects)
+ sHeader = "Composed Objects";
+ if (bShowMethods) {
+ if (bShowObjects || bShowProps)
+ sHeader += " and ";
+ sHeader += "Methods";
+ }
+ } else
+ sHeader = "Attributes";
+ sHeader += " of " + (bFormatAsHTML ? '<code>' : '') + sObject
+ + (aWhat.test ? ' matching ' + String(aWhat) : '') + (bFormatAsHTML ? '<\/code>' : '');
+ }
+ var sAttr =
+ (bFormatAsTable ? '<table border="1" cellpadding="5" cellspacing="0">\n' : '')
+ + ((sHeader != "") ?
+ (bFormatAsTable ? '<tr><th align="left" colspan="' + (bShowType ? 3 : 2) + '">' : '')
+ + sHeader
+ + (bFormatAsHTML && bFormatAsLines ? "<br />\n" : (!bFormatAsHTML ? "\n__________________________________________________\n" : ""))
+ + (bFormatAsTable ?
+ ('<\/th><\/tr>\n<tr><th align="left">Name<\/th>'
+ + (bShowType ? '<th align="left">Type<\/th>' : '')
+ + '<th align="left">Value<\/th><\/tr>\n') : ''
+ ) :
+ "");
+ var bCondition = false;
+ var aAttributes = new Array();
+ for (var Attribute in aObject) {
+ if (!aWhat.test || aWhat.test(Attribute))
+ aAttributes[aAttributes.length] = Attribute;
+ }
+ if (aAttributes.sort) // sort attributes lexically
+ aAttributes.sort();
+ if (bFormatAsArray) // return an array instead of text
+ return aAttributes;
+ for (var i = 0; i < aAttributes.length; i++) {
+ var bCondition = false;
+ var isError = false;
+ if (tcf) // see above
+ eval('\
+ try { \
+ if (aObject[aAttributes[i]]) \
+ var attrValue = aObject[aAttributes[i]]; \
+ else \
+ var attrValue = eval("aObject." + aAttributes[i]); \
+ var bMethod = (String(attrValue).toLowerCase().indexOf("function ") > -1); \
+ } catch (e) { \
+ var attrValue = "[" + e + "]"; \
+ var bMethod = false; \
+ isError = true; \
+ } \
+ ');
+ else {
+ if (aObject[aAttributes[i]])
+ var attrValue = aObject[aAttributes[i]];
+ else
+ var attrValue = eval("aObject." + aAttributes[i]);
+ var bMethod = (String(attrValue).toLowerCase().indexOf("function ") > -1);
+ }
+ var bProperty = !bMethod;
+ var attrType = typeof attrValue;
+ var bObject = (attrType == "object");
+ if (aWhat && (aWhat != "") && (!aWhat.test))
+ bCondition =
+ (bProperty && bShowProps) || (bMethod && bShowMethods) || (bObject && bShowObjects);
+ else
+ bCondition = true;
+ if (bCondition) {
+ var s = ((isNaN(attrValue) || String(attrValue) == "")
+ && !bObject && !isError) ? "\"" : "";
+
+ var attrName = String(aAttributes[i]);
+ var sAttrName = attrName;
+ if (bFormatAsHTML) {
+ sAttrName = "<code><b>" + attrName + "<\/b><\/code>";
+ attrValue = replaceText(replaceText(String(attrValue), "<", "&lt;"), ">", "&gt;");
+ }
+ sAttr +=
+ (bFormatAsTable ? '<tr valign="top"><td>' : '')
+ + ((bObject && bFormatAsHTML) ?
+ ("<a href='javascript:ObjectInspector(\"" + sObject + ")'>") : '')
+ + sAttrName
+ + (bObject && bFormatAsHTML ? '<\/a>' : '')
+ + (bFormatAsTable ? '<\/td>' : "")
+ + (bShowType ? (bFormatAsTable ? ('<td><code>' + attrType + '<\/code><\/td>') : (CH_NBSP + ":" + CH_NBSP + attrType)) : "")
+ + (bFormatAsTable ? '<\/td><td><code>' : (CH_NBSP + "=" + CH_NBSP))
+ + s + attrValue + s;
+// ("<a href='javascript:ObjectInspector(\'' + sObject + '[\"' + attrName + '\"]\'', \'' + aWhat + '\', \'' + sStyle +'\');"'
+// + ' !onclick="window.open(\''
+// + (sInspectorPath ? escape(sInspectorPath) : sDefaultInspectorPath)
+// + '?obj=' + escape(sObject) + "." + escape(attrName)
+// + '&what=' + escape(aWhat)
+// + '&style=' + escape(sStyle)
+// + '\', \'wndObjectInspector\', \'scrollbars=yes,resizable=yes\'); return false;"'
+ if (bFormatAsHTML) {
+ if (bFormatAsTable)
+ sAttr += "<\/code><\/td><\/tr>\n";
+ else
+ sAttr += "<br />\n";
+ } else if (bTextLineStyle)
+ sAttr += "; ";
+ else
+ sAttr += "\n";
+ }
+ }
+
+ switch (String(sFooter)) {
+ case "-":
+ sFooter = "";
+ break;
+
+ case "undefined":
+ case "":
+ case "null":
+ if (bFormatAsHTML)
+ sFooter = '<code><a href="' + enhancedDocURL + '" target="_blank" title="Show documentation for JSX:enhanced.js.">JSX:enhanced.js<\/a>:<a href="' + enhancedDocURL + '#getObjInfo" target="_blank" title="Show documentation for JSX:enhanced.js:getObjInfo(...).">getObjInfo<\/a>(...)<\/code><br>';
+ else
+ sFooter = "JSX:enhanced.js:getObjInfo(...)\n";
+ sFooter += "Library version " + enhancedVersion;
+ sFooter += (bFormatAsHTML ? "<br />" : "\n");
+ sFooter += enhancedCopyright + (bFormatAsHTML ? "&nbsp;&nbsp;" : " ") + enhancedAuthor + " ";
+ if (bFormatAsHTML) {
+ sFooter = replaceText(sFooter, "©", "&copy;");
+ sFooter += '&lt;<a href="mailto:Thomas%20\'PointedEars\'%20Lahn%20<' + enhancedEmail + '>" title="E-mail the author of this fabulous script ;-) E-mail client required.">' + enhancedEmail + '<\/a>&gt;'
+ } else
+ sFooter += "<" + enhancedEmail + ">"
+ }
+ if (sFooter != "") {
+ sAttr += (bFormatAsHTML ? (bFormatAsTable ? '<tr>\n<td colspan="' + (bShowType ? 3 : 2) + '">' : '') : "\n__________________________________________________\n")
+ + sFooter
+ + (bFormatAsHTML ? (bFormatAsTable ? '<\/td>\n<\/tr>\n' : '<br>') : "");
+ }
+ if (bFormatAsTable) sAttr += '<\/table>';
+ return sAttr;
+}
+
+var sInspectorVersion = "0.71";
+
+function ObjectInspector(sObject, aWhat, sStyle, sHeader, sFooter, iRecursionLevel) {
+ var wInspector = window.open("enhanced.htm", "wndObjectInspector", "scrollbars=yes,resizable=yes");
+ if (wInspector) {
+ wInspector.document.open("text/html");
+ var s = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n'
+ + ' "http://www.w3.org/TR/html4/strict.dtd">\n'
+ + '<html>\n'
+ + ' <head>\n'
+ + ' <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\n'
+ + ' <meta name="author" value="' + enhancedCopyright + ' ' + enhancedAuthor + ' (' + enhancedEmail + ')">\n'
+ + ' <title>JavaScript ObjectInspector ' + sInspectorVersion + '<\/title>\n'
+ + ' <script type="text/javascript">\n'
+ + ' <!--\n'
+ + ' ' + getObjInfo + '\n'
+ + ' ' + arguments.callee + '\n'
+ + ' //-->\n'
+ + ' <\/script>\n'
+ + ' <\/head>\n'
+ + ' <body>\n'
+ + ' <script type="text/javascript">\n'
+ + ' <!--\n'
+ + ' document.write(getObjInfo(' + sObject + ', "' + aWhat + '", "' + sStyle + '"));\n'
+ + ' //-->\n'
+ + ' <\/script>\n'
+ + ' <\/body>\n'
+ + '<\/html>';
+ wInspector.document.write(s);
+ wInspector.document.close();
+ } else
+ enhancedException("Error: Unable to create ObjectInspector window.\n\n"
+ + "Disable popup blocking, or try alert(getObjInfo(...)) or"
+ + " document.write(getObjInfo(...)) instead.");
+// return false;
+}
+
+function ObjectInspector2(sObject) {
+ var sMsgClose_en = "Close Window"
+ var sMsgClose_de = "Fenster schlie&szlig;en"
+ var sInspector = "ObjectInspector " + sInspectorVersion;
+ var sMsgClose = sMsgClose_en;
+ var wImage = false;
+ var iWidth = 640, iHeight = 480;
+
+// preset also window position and size in the case the temporary script below fails
+ var sOptions = "toolbar=no,location=no,menubar=no,scrollbars=no,resizable=yes"
+ + ",left=0,top=0,width=" + (iWidth) + ",height=" + (iHeight);
+ var wInspector = window.open( "", null, sOptions );
+ if (wInspector != null) {
+ var dImage = wInspector.document.open("text/html");
+ with(wInspector.document) {
+ write(
+'<html>',
+
+'<head>',
+
+'<meta name="generator" value="JSX:enhanced.js:ObjectInspector(...) © 2001-2002 Thomas Lahn (webmaster@PointedEars.de)">',
+
+'<title>JavaScript ObjectInspector 0.7<\/title>',
+
+'<script language="JavaScript" type="text/javascript"><!--\n',
+
+'window.moveTo(screen.width/2 - 640/2, screen.height/2 - 480/2);\n',
+
+'function radioChkdVal(aForm, sRadioBtnGrpName) {',
+ 'for (var i = 0; i < aForm.elements.length; i++) {',
+ 'if ((aForm.elements[i].name == sRadioBtnGrpName) && aForm.elements[i].checked) return (aForm.elements[i].value);',
+ '}',
+ 'return "";',
+'}\n',
+
+'var CH_NBSP = unescape("%A0");\n',
+
+'function removeOptionsns(aSelect) {',
+ 'if(aSelect && (aSelect.tagName) && (aSelect.tagName.toLowerCase() == "select"))',
+ 'while(aSelect.options.length > 0) {',
+ 'if (document.all)',
+ 'aSelect.options.remove(aSelect.options.length - 1);',
+ 'else {',
+ 'aSelect.options[aSelect.options.length - 1] = null;',
+ 'if (! document.all) history.go(0);',
+ '}',
+
+ '}',
+'}\n',
+
+'function addOption(aSelect, sText, iPosition) {',
+ 'if(aSelect && (aSelect.tagName) && (aSelect.tagName.toLowerCase() == "select")) {',
+ 'var newElement = new Option(sText);',
+ 'if (document.all) {',
+ 'if(arguments.length > 2)',
+ 'aSelect.options.add(newElement, iPosition);',
+ 'else\n',
+ 'aSelect.options.add(newElement);',
+ '} else {',
+ 'aSelect.options[aSelect.options.length] = newElement;',
+ 'aSelect.options[aSelect.options.length - 1].value = "";',
+ '}',
+ '}',
+'}\n',
+
+'function inspect(sObject, aWhat) {',
+ 'if (sObject.toLowerCase().indexOf("document.all") > -1) {',
+ 'alert ("Retrieval of the attributes of document.all canceled. This would have resulted in recursive listing and would have caused your browser to hang.");',
+ 'up();',
+ 'return false;',
+ '}\n',
+ 'var aObject = eval(sObject);',
+ 'if(! aObject) {',
+ 'alert (sObject + " is not an object.");',
+ 'up();',
+ 'return false;',
+ '}\n',
+ 'var bCondition = false;',
+ 'removeOptions(document.forms[0].attr);',
+ 'for(var Attribute in aObject) {',
+ 'switch (Attribute) {',
+ 'case "dataFormatAs":\n',
+ 'case "clientInformation":\n',
+ 'case "external":\n',
+ 'case "navigator": break;\n',
+ 'default:\n',
+ 'var bCondition = false;',
+ 'var bMethod = ( String(aObject[Attribute]).toLowerCase().indexOf("function") > -1 );',
+ 'var bProperty = ! bMethod;',
+ 'var bObject = ( String(aObject[Attribute]).toLowerCase().indexOf("object") > -1 );',
+ 'if(arguments.length > 1) {',
+ 'if(aWhat.toLowerCase() == "p")',
+ 'bCondition = bProperty;',
+ 'else if(aWhat.toLowerCase() == "m")',
+ 'bCondition = bMethod;',
+ 'else if(aWhat.toLowerCase() == "o")',
+ 'bCondition = bObject;',
+ 'else\n',
+ 'bCondition = true;',
+ '} else\n',
+ 'bCondition = true;',
+ 'if (bCondition) {',
+
+ 'var sAttr = "[";',
+ 'if (bObject)',
+ 'sAttr += "O";',
+ 'else if (bProperty)',
+ 'sAttr += "P";',
+ 'else if (bMethod)',
+ 'sAttr += "M";',
+ 'else\n',
+ 'sAttr += "?";',
+ 'sAttr += "]" + CH_NBSP + Attribute;',
+ 'addOption(document.forms[0].attr, sItem);',
+
+ '}',
+ '}',
+ '}',
+'}\n',
+
+'function up() {',
+ 's = document.forms[0].identifier.value;',
+ 'if (s.indexOf(".") > -1) {',
+ 'document.forms[0].identifier.value = s.substr(0, s.lastIndexOf("."));',
+ 'EditEnter();',
+ '} else\n',
+ 'alert("You are on the uppermost level of aggregation.");',
+'}\n',
+
+'function down(sAttrib) {',
+ 'if (sAttrib.charAt(1) != "M") {',
+ 'document.forms[0].identifier.value += "." + sAttrib.substr(sAttrib.lastIndexOf(CH_NBSP)+1);',
+ 'EditEnter();',
+ '}',
+'}\n',
+
+'function EditEnter() {',
+ 'document.forms[0].val.value = "";',
+ 'inspect(document.forms[0].identifier.value, radioChkdVal(document.forms[0], "attrib"));',
+ 'return( false );',
+'}\n',
+
+'function showVal(sAttrib) {',
+ 'if (sAttrib.charAt(1) != "M") {',
+ 'var attrValue = eval(document.forms[0].identifier.value + "." + sAttrib.substr(sAttrib.lastIndexOf(CH_NBSP)+1));',
+ 'var s = ( ( isNaN(attrValue) || (String(attrValue) == "") )',
+ '&& ( String(attrValue).indexOf("object") < 0 ) ) ? "\\"" : "";',
+
+ 'document.forms[0].val.value = s + attrValue + s;',
+ '} else\n',
+ 'document.forms[0].val.value = "";',
+'}',
+
+'//-->\n<\/script>',
+
+'<style type="text/css"><!--\n',
+
+'.bold { font-weight: bold; }',
+'.fixed { font-family: Lucida Console, Courier New, Courier; }',
+'hr { position: relative; left:-10px; width:100%; }',
+
+'//-->\n<\/style>',
+
+'<\/head>',
+'<body bgcolor="#d8dcd8" text="#000000">',
+'<div style="position:absolute; top:0px; left:0px;">',
+'<div style="background-color:#ffffff; width:101%; text-indent:10px; border-width: 1px; border-style: inset;"><h1>JavaScript ObjectInspector 0.7<\/h1>',
+'<p style="position:relative; top:-10px;">Copyright &copy; 2001 Thomas Lahn (<a href="mailto:webmaster@PointedEars.de">webmaster@PointedEars.de<\/a>)<\/p><\/div>',
+'<div style="position:relative; left:10px;">',
+'<form onSubmit="return EditEnter();">',
+'<p><span class="bold">Object: <\/span><input type="text" size=40 value="', ((arguments.length > 0) ? sObject : 'window'),
+'" name="identifier"> <input type="submit" value="Apply" id="btApply"> <input type="button" value="Up" onClick=\'up();\'><br>',
+'<span class="bold">Attributes to retrieve: <\/span><nobr><input name="attrib" value="" type="radio" checked lang="en-us" dir="ltr" onClick=\'EditEnter();\'>All<\/nobr> <nobr><input name="attrib" value="p" type="radio" lang="en-us" dir="ltr" onClick=\'EditEnter();\'>All&nbsp;[P]roperties<\/nobr> <nobr><input name="attrib" value="o" type="radio" lang="en-us" dir="ltr" onClick=\'EditEnter();\'>Composed&nbsp;[O]bjects<\/nobr> <nobr><input name="attrib" value="m" type="radio" lang="en-us" dir="ltr" onClick=\'EditEnter();\'>[M]ethods<\/nobr><\/p>',
+'<hr size=1 noshade>',
+'<table border=0 cellspacing=5 cellpadding=0 width="100%">',
+'<tr valign="top">',
+ '<td width="50%" class="bold">Attribute:<\/td>',
+ '<td class="bold">Value:<\/td><\/tr>',
+'<tr valign="top">',
+ '<td><select size=13 name="attr" class="fixed" style="width:100%;" onChange=\'showVal(this.options[this.options.selectedIndex].text);\' onDblClick=\'if (this.options.selectedIndex > -1) down(this.options[this.options.selectedIndex].text);\'><\/select><\/td>',
+ '<td><textarea rows=13 cols=40 name="val" class="fixed"><\/textarea><\/td><\/tr>',
+'<\/table>',
+'<hr size=2>',
+'<input type="button" value="Exit" onClick="window.close();">',
+'<\/form>',
+'<script language="JavaScript" type="text/javascript"><!--\n',
+ 'EditEnter();',
+'//--><\/script><\/div>',
+'<\/div>',
+'<\/body>',
+'<\/html>');
+ close();
+ }
+ if(wInspector.opener) wInspector.opener.blur();
+ wInspector.focus();
+ }
+ return(false);
+}
+
+function ObjectInspector3(sRoot) {
+ var s =
+ '<script src="../enhanced.js" type="text/javascript"><\/script>\n' +
+ '<script src="../dhtml.js" type="text/javascript"><\/script>\n' +
+ '<script src="../search.js" type="text/javascript"><\/script>\n' +
+ '<script type="text/javascript" language="JavaScript">\n <!--\n' +
+ ' var s = new TSearchStr(location.search);\n' +
+ ' var sRoot = "' + (sRoot ? sRoot : 'window') + '";\n' +
+ ' if (s.hasValue("object"))\n' +
+ ' sRoot = s.getValue("object");\n\n' +
+
+ ' function ExpandCollapse(s, o2) {\n' +
+ ' var o = getElem("id", s);\n' +
+ ' if (o && o.style && (typeof o.style.display != "undefined")) {\n' +
+ ' if (o.style.display == "none") {\n' +
+ ' o.style.display = "";\n' +
+ ' o2.innerHTML = "[-]";\n' +
+ ' } else {\n' +
+ ' o.style.display = "none";\n' +
+ ' o2.innerHTML = "[+]";\n' +
+ ' }\n' +
+ ' }\n' +
+ ' return false;\n' +
+ ' }\n\n' +
+
+ ' function writeProps(s) {\n' +
+ ' var o = eval(s);\n' +
+ ' var s2 = s;\n' +
+ ' var iLastDot = s2.lastIndexOf("[");\n' +
+ ' if (iLastDot < 0) iLastDot = s2.lastIndexOf(".");\n' +
+ ' var sParent = s.substring(0, iLastDot);\n' +
+ ' var sLoc = "";\n' +
+ ' if (window.opera) {\n' +
+ ' sLoc = String(location);\n' +
+ ' var iQuery = sLoc.indexOf("?");\n' +
+ ' if (iQuery < 0) iQuery = sLoc.length;\n' +
+ ' sLoc = sLoc.substring(0, iQuery);\n' +
+ ' }\n' +
+ ' if (iLastDot >= 0)\n' +
+ " s2 = '<a href=\"' + sLoc + '?object=' + sParent + '\">' + sParent + '<\\/a>' + s.substr(iLastDot);\n" +
+ ' document.write("<b>" + s2 + "<\\/b> = " + o + "\\n");\n' +
+ ' var a = new Array();\n' +
+ ' var bShowLoc = true;\n' +
+ ' var bShowDoc = true;\n' +
+ ' var bShowNavi = true;\n' +
+ ' var bShowItems = true;\n' +
+ ' for (var Attr in o) {\n' +
+ ' a[a.length] = Attr;\n' +
+ ' if (Attr == "location") bShowLoc = false;\n' +
+ ' if (Attr == "document") bShowDoc = false;\n' +
+ ' if (Attr == "navigator") bShowNavi = false;\n' +
+ ' if (Attr == "0") bShowItems = false;\n' +
+ ' }\n' +
+ ' if ((s == "window") && bShowLoc) a[a.length] = "location";\n' +
+ ' if ((s == "window") && bShowDoc) a[a.length] = "document";\n' +
+ ' if ((s == "window") && bShowNavi) a[a.length] = "navigator";\n' +
+ ' if (o.length && bShowItems) {\n' +
+ ' for (var i = 0; i < o.length; i++)\n' +
+ ' a[a.length] = i;\n' +
+ ' }\n' +
+ ' if (a.sort) // sort attributes lexically\n' +
+ ' a.sort();\n' +
+ ' for (var i = 0; i < a.length; i++) {\n' +
+ ' var val = replaceText(replaceText(String(o[a[i]]), "<", "&lt;"), ">", "&gt;");\n' +
+ ' var t = typeof o[a[i]];\n' +
+ ' if (t == "boolean")\n' +
+ " val = '<a href=\"#\" title=\"Click to toggle value\" onclick=\"try {' + s + '.' + a[i] + '=' + !o[a[i]] + '; location.reload() } catch(e) { alert(\'Unable to toggle property value. Maybe there is no setter for this property.\') }; return false\">' + val + '<\\/a>';\n" +
+ ' if (t == "string")\n' +
+ " val = '\"' + val + '\"';\n" +
+ ' if ((String(o[a[i]]).indexOf("\\n") >= 0) || (String(o[a[i]]).length > 72))\n' +
+ " val = \"<a href='#'\"" +
+ ' + " onclick=\"return ExpandCollapse(\'span" + i + "\', this)\"' +
+ " + ' style=\"text-decoration:none\">' + (!window.opera ? '[+]' : '')" +
+ " + '<\\/a> <span ' + (!window.opera ? 'style=\"display:none\" ' : '')" +
+ " + 'id=\"span' + i + '\">' + val + '<\\/span>';\n" +
+ ' document.write(" <b>."' +
+ " + (((t == 'object') || ((t == 'function') && window.opera)) && o[a[i]] ? ('<a href=\"' + sLoc + '?object=' + s + '[\'' + a[i] + '\']\">') : '') + a[i] + (((t == 'object') || ((t == 'function') && window.opera)) ? '<\\/a>' : '') + '<\\/b> : '" +
+ ' + t + " = " + val + "\\n");\n' +
+ ' }\n' +
+ ' }\n' +
+ ' \/\/-->\n' +
+ '<\/script>\n' +
+ "<h1>PointedEars' ObjectInspector 0.8<\/h1>" +
+ '<p style="font-size:small">Copyright &copy; 2003 Thomas Lahn &lt;<a href="mailto:obj-insp@PointedEars.de">obj-insp@PointedEars.de<\/a>&gt;<\/p>\n' +
+ '<hr>\n' +
+ '<script type="text/javascript" language="JavaScript">\n <!--\n' +
+ ' s = \'<form action="">\\n\'\n' +
+ ' + \' Object: <input name="object" value="\' + sRoot + \'" size="\' + ((sRoot.length > 20) ? sRoot.length : 20) + \'">\\n\'\n' +
+ ' + \' <input type="submit" value="Inspect">\\n\'\n' +
+ ' + \'<\/form>\\n\'\n' +
+ ' document.write(s);\n' +
+ ' document.write(\'<pre>\');\n' +
+ ' writeProps(sRoot);\n' +
+ ' document.write(\'<\/pre>\');\n' +
+ ' \/\/-->\n' +
+ '<\/script>';
+ return s;
+}
+
+if(! document)
+ ENoBrowser(); // Raise exception if not processed from a web browser
+
Index: live
===================================================================
--- live (nonexistent)
+++ live (revision 509)
/live
Property changes:
Added: svn:ignore
## -0,0 +1,63 ##
+_*.js
+
+bookmarklets
+
+cgi_buffer
+
+comp.lang.javascript
+
+Fortu-Net_de Private Nachricht senden-Dateien
+
+Greasemonkey
+
+how-to
+
+php.bak
+
+python
+
+MozPref
+
+perl
+
+sprintf.txt
+
+filedates.txt
+
+CHANGELOG
+
+dependencies.txt
+
+maketree.sh
+
+unicode-ranger.awk
+
+object.html
+
+ChangeLog.next
+
+tmp
+
+js-reserved-words.txt
+
+types.html
+
+dhtml.js.diff
+
+js-get-symbols
+
+tags
+
+js-tokens.txt
+
+js-tokenizer
+
+.directory
+
+php
+
+parallel.js
+
+*.swp
+
+faq