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 + ";"); 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 () { export var test_XmlParser_OnErrorIsCalledWhenAnErrorOccurs = function () {
var e; var e;
var xmlParser = new xmlModule.XmlParser( var xmlParser = new xmlModule.XmlParser(

View File

@ -188,10 +188,10 @@ function rpEntities(s, d, x, z) {
}; };
if (d) { 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) { function unEntities(s, i) {

View File

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