Subversion Repositories JSX

Compare Revisions

Last modification

Ignore whitespace Rev 445 → Rev 446

/trunk/regexp.js
46,9 → 46,9
* @namespace
*/
jsx.regexp = (/** @constructor */ function () {
var _getClass = jsx.object.getClass;
var jsx_object = jsx.object;
var _getDataObject = jsx_object.getDataObject;
var _jsx_object = jsx.object;
var _getClass = _jsx_object.getClass;
var _getDataObject = _jsx_object.getDataObject;
 
/**
* @type jsx.regexp.RegExp
98,15 → 98,97
var _RegExp2 = jsx.object.extend(
(/** @constructor */function () {
var
sPropertyEscapes = "\\\\(p)\\{([^\\}]+)\\}",
rxPropertyEscapes = new RegExp(sPropertyEscapes, "gi"),
sNonPropEscInRange = "([^\\]\\\\]|\\\\[^p])*",
sEscapes =
"\\[(\\^?(" + sNonPropEscInRange + "(" + sPropertyEscapes
+ ")+" + sNonPropEscInRange + ")+)\\]"
+ "|" + sPropertyEscapes + "",
rxEscapes = new RegExp(sEscapes, "gi"),
_UCDfields = ["codePoint",, "propertyClass"],
_destructure = jsx.array.destructure,
 
_parseUCDText = function () {
(new jsx.net.http.Request(
_RegExp2.ucdTextPath, "GET", false,
function (xhr) {
var lines = xhr.responseText.split(/\r?\n|\r/).map(
function (e) {
return _destructure(e.split(";"), _UCDfields);
});
 
lines.sort(function (a, b) {
return (a.propertyClass < b.propertyClass
|| (a.propertyClass === b.propertyClass
&& a.codePoint < b.codePoint))
? -1
: ((a.propertyClass === b.propertyClass
&& a.codePoint === b.codePoint)
? 0 : 1);
});
 
var 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,
num = parseInt(codePoint, 16),
prevNum;
 
if (codePoint == "" || num > 0xFFFF)
{
continue;
}
 
if (propertyClass != prevClass)
{
if (num != prevNum + 1)
{
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
}
}
 
propertyClasses[propertyClass] = "\\u" + codePoint;
 
var startRange = false;
}
else
{
if (num != prevNum + 1)
{
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
 
startRange = false;
}
 
propertyClasses[propertyClass] += "\\u" + codePoint;
}
else
{
startRange = true;
}
}
 
prevClass = propertyClass,
prevCodePoint = codePoint,
prevNum = num;
}
 
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
}
}
)).send();
},
 
/**
* @param {String} charClassContent
* @param {boolean} bUnicodeMode
* @return {string}
*/
_normalizeCharClass = function (charClassContent, bUnicodeMode) {
var negEscapes = [];
 
158,6 → 240,15
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) {
var propertyClasses = _RegExp2.propertyClasses;
182,87 → 273,7
}
 
/* parse the text version of the UCD */
var req = new jsx.net.http.Request(_RegExp2.ucdTextPath, "GET", false,
function (xhr) {
var lines = xhr.responseText.split(/\r?\n|\r/).map(
function (e) {
return e.split(";");
});
 
lines.sort(function (a, b) {
var
a2 = a[2],
b2 = b[2],
a0 = a[0],
b0 = b[0];
 
return (a2 < b2 || (a2 === b2 && a0 < b0))
? -1
: (a2 === b2 && a0 === b0 ? 0 : 1);
});
 
propertyClasses = _RegExp2.propertyClasses = {};
 
for (var i = 0, len = lines.length; i < len; ++i)
{
var
fields = lines[i],
propertyClass = fields[2],
prevClass,
codePoint = fields[0],
prevCodePoint,
num = parseInt(codePoint, 16),
prevNum;
 
if (codePoint == "" || num > 0xFFFF)
{
continue;
}
 
if (propertyClass != prevClass)
{
if (num != prevNum + 1)
{
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
}
}
 
propertyClasses[propertyClass] = "\\u" + codePoint;
 
var startRange = false;
}
else
{
if (num != prevNum + 1)
{
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
 
startRange = false;
}
 
propertyClasses[propertyClass] += "\\u" + codePoint;
}
else
{
startRange = true;
}
}
 
prevClass = propertyClass,
prevCodePoint = codePoint,
prevNum = num;
}
 
if (startRange)
{
propertyClasses[prevClass] += "-\\u" + prevCodePoint;
}
});
req.send();
_parseUCDText();
}
}
 
308,7 → 319,7
 
_rangesStack.push(propertyClass);
 
var escapedRange = jsx_object.getProperty(propertyClasses, propertyClass);
var escapedRange = _jsx_object.getProperty(propertyClasses, propertyClass);
 
/*
* Resolve property class references in property class values,