| '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; |
| }; |