1'use strict'; 2 3const UNDEFINED_CODE_POINTS = [ 4 0xfffe, 5 0xffff, 6 0x1fffe, 7 0x1ffff, 8 0x2fffe, 9 0x2ffff, 10 0x3fffe, 11 0x3ffff, 12 0x4fffe, 13 0x4ffff, 14 0x5fffe, 15 0x5ffff, 16 0x6fffe, 17 0x6ffff, 18 0x7fffe, 19 0x7ffff, 20 0x8fffe, 21 0x8ffff, 22 0x9fffe, 23 0x9ffff, 24 0xafffe, 25 0xaffff, 26 0xbfffe, 27 0xbffff, 28 0xcfffe, 29 0xcffff, 30 0xdfffe, 31 0xdffff, 32 0xefffe, 33 0xeffff, 34 0xffffe, 35 0xfffff, 36 0x10fffe, 37 0x10ffff 38]; 39 40exports.REPLACEMENT_CHARACTER = '\uFFFD'; 41 42exports.CODE_POINTS = { 43 EOF: -1, 44 NULL: 0x00, 45 TABULATION: 0x09, 46 CARRIAGE_RETURN: 0x0d, 47 LINE_FEED: 0x0a, 48 FORM_FEED: 0x0c, 49 SPACE: 0x20, 50 EXCLAMATION_MARK: 0x21, 51 QUOTATION_MARK: 0x22, 52 NUMBER_SIGN: 0x23, 53 AMPERSAND: 0x26, 54 APOSTROPHE: 0x27, 55 HYPHEN_MINUS: 0x2d, 56 SOLIDUS: 0x2f, 57 DIGIT_0: 0x30, 58 DIGIT_9: 0x39, 59 SEMICOLON: 0x3b, 60 LESS_THAN_SIGN: 0x3c, 61 EQUALS_SIGN: 0x3d, 62 GREATER_THAN_SIGN: 0x3e, 63 QUESTION_MARK: 0x3f, 64 LATIN_CAPITAL_A: 0x41, 65 LATIN_CAPITAL_F: 0x46, 66 LATIN_CAPITAL_X: 0x58, 67 LATIN_CAPITAL_Z: 0x5a, 68 RIGHT_SQUARE_BRACKET: 0x5d, 69 GRAVE_ACCENT: 0x60, 70 LATIN_SMALL_A: 0x61, 71 LATIN_SMALL_F: 0x66, 72 LATIN_SMALL_X: 0x78, 73 LATIN_SMALL_Z: 0x7a, 74 REPLACEMENT_CHARACTER: 0xfffd 75}; 76 77exports.CODE_POINT_SEQUENCES = { 78 DASH_DASH_STRING: [0x2d, 0x2d], //-- 79 DOCTYPE_STRING: [0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE 80 CDATA_START_STRING: [0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b], //[CDATA[ 81 SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script 82 PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4c, 0x49, 0x43], //PUBLIC 83 SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4d] //SYSTEM 84}; 85 86//Surrogates 87exports.isSurrogate = function(cp) { 88 return cp >= 0xd800 && cp <= 0xdfff; 89}; 90 91exports.isSurrogatePair = function(cp) { 92 return cp >= 0xdc00 && cp <= 0xdfff; 93}; 94 95exports.getSurrogatePairCodePoint = function(cp1, cp2) { 96 return (cp1 - 0xd800) * 0x400 + 0x2400 + cp2; 97}; 98 99//NOTE: excluding NULL and ASCII whitespace 100exports.isControlCodePoint = function(cp) { 101 return ( 102 (cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) || 103 (cp >= 0x7f && cp <= 0x9f) 104 ); 105}; 106 107exports.isUndefinedCodePoint = function(cp) { 108 return (cp >= 0xfdd0 && cp <= 0xfdef) || UNDEFINED_CODE_POINTS.indexOf(cp) > -1; 109}; 110