'use strict';
|
|
|
|
const UNDEFINED_CODE_POINTS = [
|
|
0xfffe,
|
|
0xffff,
|
|
0x1fffe,
|
|
0x1ffff,
|
|
0x2fffe,
|
|
0x2ffff,
|
|
0x3fffe,
|
|
0x3ffff,
|
|
0x4fffe,
|
|
0x4ffff,
|
|
0x5fffe,
|
|
0x5ffff,
|
|
0x6fffe,
|
|
0x6ffff,
|
|
0x7fffe,
|
|
0x7ffff,
|
|
0x8fffe,
|
|
0x8ffff,
|
|
0x9fffe,
|
|
0x9ffff,
|
|
0xafffe,
|
|
0xaffff,
|
|
0xbfffe,
|
|
0xbffff,
|
|
0xcfffe,
|
|
0xcffff,
|
|
0xdfffe,
|
|
0xdffff,
|
|
0xefffe,
|
|
0xeffff,
|
|
0xffffe,
|
|
0xfffff,
|
|
0x10fffe,
|
|
0x10ffff
|
|
];
|
|
|
|
exports.REPLACEMENT_CHARACTER = '\uFFFD';
|
|
|
|
exports.CODE_POINTS = {
|
|
EOF: -1,
|
|
NULL: 0x00,
|
|
TABULATION: 0x09,
|
|
CARRIAGE_RETURN: 0x0d,
|
|
LINE_FEED: 0x0a,
|
|
FORM_FEED: 0x0c,
|
|
SPACE: 0x20,
|
|
EXCLAMATION_MARK: 0x21,
|
|
QUOTATION_MARK: 0x22,
|
|
NUMBER_SIGN: 0x23,
|
|
AMPERSAND: 0x26,
|
|
APOSTROPHE: 0x27,
|
|
HYPHEN_MINUS: 0x2d,
|
|
SOLIDUS: 0x2f,
|
|
DIGIT_0: 0x30,
|
|
DIGIT_9: 0x39,
|
|
SEMICOLON: 0x3b,
|
|
LESS_THAN_SIGN: 0x3c,
|
|
EQUALS_SIGN: 0x3d,
|
|
GREATER_THAN_SIGN: 0x3e,
|
|
QUESTION_MARK: 0x3f,
|
|
LATIN_CAPITAL_A: 0x41,
|
|
LATIN_CAPITAL_F: 0x46,
|
|
LATIN_CAPITAL_X: 0x58,
|
|
LATIN_CAPITAL_Z: 0x5a,
|
|
RIGHT_SQUARE_BRACKET: 0x5d,
|
|
GRAVE_ACCENT: 0x60,
|
|
LATIN_SMALL_A: 0x61,
|
|
LATIN_SMALL_F: 0x66,
|
|
LATIN_SMALL_X: 0x78,
|
|
LATIN_SMALL_Z: 0x7a,
|
|
REPLACEMENT_CHARACTER: 0xfffd
|
|
};
|
|
|
|
exports.CODE_POINT_SEQUENCES = {
|
|
DASH_DASH_STRING: [0x2d, 0x2d], //--
|
|
DOCTYPE_STRING: [0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE
|
|
CDATA_START_STRING: [0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b], //[CDATA[
|
|
SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script
|
|
PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4c, 0x49, 0x43], //PUBLIC
|
|
SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4d] //SYSTEM
|
|
};
|
|
|
|
//Surrogates
|
|
exports.isSurrogate = function(cp) {
|
|
return cp >= 0xd800 && cp <= 0xdfff;
|
|
};
|
|
|
|
exports.isSurrogatePair = function(cp) {
|
|
return cp >= 0xdc00 && cp <= 0xdfff;
|
|
};
|
|
|
|
exports.getSurrogatePairCodePoint = function(cp1, cp2) {
|
|
return (cp1 - 0xd800) * 0x400 + 0x2400 + cp2;
|
|
};
|
|
|
|
//NOTE: excluding NULL and ASCII whitespace
|
|
exports.isControlCodePoint = function(cp) {
|
|
return (
|
|
(cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||
|
|
(cp >= 0x7f && cp <= 0x9f)
|
|
);
|
|
};
|
|
|
|
exports.isUndefinedCodePoint = function(cp) {
|
|
return (cp >= 0xfdd0 && cp <= 0xfdef) || UNDEFINED_CODE_POINTS.indexOf(cp) > -1;
|
|
};
|