110 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'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;
 | 
						|
};
 |