fix: full Unicode support in xml (#7428)

This commit is contained in:
Eduardo Speroni
2019-07-03 05:52:52 -03:00
committed by Manol Donev
parent 250eb31c6e
commit b8659e67c3
3 changed files with 31 additions and 5 deletions

View File

@ -54,6 +54,32 @@ export var test_XmlParser_EntityReferencesInAttributeValuesAreDecoded = function
TKUnit.assert(data === "<>\"&'", "Expected result: <>\"&'; Actual result: " + data + ";");
};
export var test_XmlParser_UnicodeEntitiesAreDecoded = function () {
var data;
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
switch (event.eventType) {
case xmlModule.ParserEventType.Text:
data = event.data;
break;
}
});
xmlParser.parse("<element>&#x1f923;&#x2713;</element>");
TKUnit.assert(data === "\uD83E\uDD23\u2713", "Expected result: \uD83E\uDD23\u2713; Actual result: " + data + ";");
};
export var test_XmlParser_UnicodeEntitiesInAttributeValuesAreDecoded = function () {
var data;
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
switch (event.eventType) {
case xmlModule.ParserEventType.StartElement:
data = event.attributes["text"];
break;
}
});
xmlParser.parse("<Label text=\"&#x1f923;&#x2713;\"/>");
TKUnit.assert(data === "\uD83E\uDD23\u2713", "Expected result: \uD83E\uDD23\u2713; Actual result: " + data + ";");
};
export var test_XmlParser_OnErrorIsCalledWhenAnErrorOccurs = function () {
var e;
var xmlParser = new xmlModule.XmlParser(

View File

@ -188,10 +188,10 @@ function rpEntities(s, d, x, z) {
};
if (d) {
return String.fromCharCode(d);
return String.fromCodePoint(d);
};
return String.fromCharCode(parseInt(x, 16));
return String.fromCodePoint(parseInt(x, 16));
};
function unEntities(s, i) {

View File

@ -100,17 +100,17 @@ function _HandleAmpEntities(found: string, decimalValue: string, hexValue: strin
}
const res = _ampCodes.get(wordValue);
if (res) {
return String.fromCharCode(res);
return String.fromCodePoint(res);
}
// Invalid word; so we just return it
return found;
}
if (decimalValue) {
return String.fromCharCode(parseInt(decimalValue, 10));
return String.fromCodePoint(parseInt(decimalValue, 10));
}
return String.fromCharCode(parseInt(hexValue, 16));
return String.fromCodePoint(parseInt(hexValue, 16));
}
export class XmlParser implements definition.XmlParser {