1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci * 3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci * You may obtain a copy of the License at 6425bb815Sopenharmony_ci * 7425bb815Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci * 9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci * limitations under the License. 14425bb815Sopenharmony_ci */ 15425bb815Sopenharmony_ci 16425bb815Sopenharmony_ci#ifndef LIT_CHAR_HELPERS_H 17425bb815Sopenharmony_ci#define LIT_CHAR_HELPERS_H 18425bb815Sopenharmony_ci 19425bb815Sopenharmony_ci#include "lit-globals.h" 20425bb815Sopenharmony_ci 21425bb815Sopenharmony_ci/* 22425bb815Sopenharmony_ci * Format control characters (ECMA-262 v5, Table 1) 23425bb815Sopenharmony_ci */ 24425bb815Sopenharmony_ci#define LIT_CHAR_ZWNJ ((ecma_char_t) 0x200C) /* zero width non-joiner */ 25425bb815Sopenharmony_ci#define LIT_CHAR_ZWJ ((ecma_char_t) 0x200D) /* zero width joiner */ 26425bb815Sopenharmony_ci#define LIT_CHAR_BOM ((ecma_char_t) 0xFEFF) /* byte order mark */ 27425bb815Sopenharmony_ci 28425bb815Sopenharmony_ci/* 29425bb815Sopenharmony_ci * Whitespace characters (ECMA-262 v5, Table 2) 30425bb815Sopenharmony_ci */ 31425bb815Sopenharmony_ci#define LIT_CHAR_TAB ((ecma_char_t) 0x0009) /* tab */ 32425bb815Sopenharmony_ci#define LIT_CHAR_VTAB ((ecma_char_t) 0x000B) /* vertical tab */ 33425bb815Sopenharmony_ci#define LIT_CHAR_FF ((ecma_char_t) 0x000C) /* form feed */ 34425bb815Sopenharmony_ci#define LIT_CHAR_SP ((ecma_char_t) 0x0020) /* space */ 35425bb815Sopenharmony_ci#define LIT_CHAR_NBSP ((ecma_char_t) 0x00A0) /* no-break space */ 36425bb815Sopenharmony_ci/* LIT_CHAR_BOM is defined above */ 37425bb815Sopenharmony_ci 38425bb815Sopenharmony_cibool lit_char_is_white_space (lit_code_point_t c); 39425bb815Sopenharmony_ci 40425bb815Sopenharmony_ci/* 41425bb815Sopenharmony_ci * Line terminator characters (ECMA-262 v5, Table 3) 42425bb815Sopenharmony_ci */ 43425bb815Sopenharmony_ci#define LIT_CHAR_LF ((ecma_char_t) 0x000A) /* line feed */ 44425bb815Sopenharmony_ci#define LIT_CHAR_CR ((ecma_char_t) 0x000D) /* carriage return */ 45425bb815Sopenharmony_ci#define LIT_CHAR_LS ((ecma_char_t) 0x2028) /* line separator */ 46425bb815Sopenharmony_ci#define LIT_CHAR_PS ((ecma_char_t) 0x2029) /* paragraph separator */ 47425bb815Sopenharmony_ci 48425bb815Sopenharmony_cibool lit_char_is_line_terminator (ecma_char_t c); 49425bb815Sopenharmony_ci 50425bb815Sopenharmony_ci/* 51425bb815Sopenharmony_ci * String Single Character Escape Sequences (ECMA-262 v5, Table 4) 52425bb815Sopenharmony_ci */ 53425bb815Sopenharmony_ci#define LIT_CHAR_BS ((ecma_char_t) 0x0008) /* backspace */ 54425bb815Sopenharmony_ci/* LIT_CHAR_TAB is defined above */ 55425bb815Sopenharmony_ci/* LIT_CHAR_LF is defined above */ 56425bb815Sopenharmony_ci/* LIT_CHAR_VTAB is defined above */ 57425bb815Sopenharmony_ci/* LIT_CHAR_FF is defined above */ 58425bb815Sopenharmony_ci/* LIT_CHAR_CR is defined above */ 59425bb815Sopenharmony_ci#define LIT_CHAR_DOUBLE_QUOTE ((ecma_char_t) '"') /* double quote */ 60425bb815Sopenharmony_ci#define LIT_CHAR_SINGLE_QUOTE ((ecma_char_t) '\'') /* single quote */ 61425bb815Sopenharmony_ci#define LIT_CHAR_BACKSLASH ((ecma_char_t) '\\') /* reverse solidus (backslash) */ 62425bb815Sopenharmony_ci 63425bb815Sopenharmony_ci/* 64425bb815Sopenharmony_ci * Comment characters (ECMA-262 v5, 7.4) 65425bb815Sopenharmony_ci */ 66425bb815Sopenharmony_ci#define LIT_CHAR_SLASH ((ecma_char_t) '/') /* solidus */ 67425bb815Sopenharmony_ci#define LIT_CHAR_ASTERISK ((ecma_char_t) '*') /* asterisk */ 68425bb815Sopenharmony_ci 69425bb815Sopenharmony_ci/* 70425bb815Sopenharmony_ci * Identifier name characters (ECMA-262 v5, 7.6) 71425bb815Sopenharmony_ci */ 72425bb815Sopenharmony_ci#define LIT_CHAR_DOLLAR_SIGN ((ecma_char_t) '$') /* dollar sign */ 73425bb815Sopenharmony_ci#define LIT_CHAR_UNDERSCORE ((ecma_char_t) '_') /* low line (underscore) */ 74425bb815Sopenharmony_ci/* LIT_CHAR_BACKSLASH defined above */ 75425bb815Sopenharmony_ci 76425bb815Sopenharmony_cibool lit_code_point_is_identifier_start (lit_code_point_t code_point); 77425bb815Sopenharmony_cibool lit_code_point_is_identifier_part (lit_code_point_t code_point); 78425bb815Sopenharmony_ci 79425bb815Sopenharmony_ci/* 80425bb815Sopenharmony_ci * Punctuator characters (ECMA-262 v5, 7.7) 81425bb815Sopenharmony_ci */ 82425bb815Sopenharmony_ci#define LIT_CHAR_LEFT_BRACE ((ecma_char_t) '{') /* left curly bracket */ 83425bb815Sopenharmony_ci#define LIT_CHAR_RIGHT_BRACE ((ecma_char_t) '}') /* right curly bracket */ 84425bb815Sopenharmony_ci#define LIT_CHAR_LEFT_PAREN ((ecma_char_t) '(') /* left parenthesis */ 85425bb815Sopenharmony_ci#define LIT_CHAR_RIGHT_PAREN ((ecma_char_t) ')') /* right parenthesis */ 86425bb815Sopenharmony_ci#define LIT_CHAR_LEFT_SQUARE ((ecma_char_t) '[') /* left square bracket */ 87425bb815Sopenharmony_ci#define LIT_CHAR_RIGHT_SQUARE ((ecma_char_t) ']') /* right square bracket */ 88425bb815Sopenharmony_ci#define LIT_CHAR_DOT ((ecma_char_t) '.') /* dot */ 89425bb815Sopenharmony_ci#define LIT_CHAR_SEMICOLON ((ecma_char_t) ';') /* semicolon */ 90425bb815Sopenharmony_ci#define LIT_CHAR_COMMA ((ecma_char_t) ',') /* comma */ 91425bb815Sopenharmony_ci#define LIT_CHAR_LESS_THAN ((ecma_char_t) '<') /* less-than sign */ 92425bb815Sopenharmony_ci#define LIT_CHAR_GREATER_THAN ((ecma_char_t) '>') /* greater-than sign */ 93425bb815Sopenharmony_ci#define LIT_CHAR_EQUALS ((ecma_char_t) '=') /* equals sign */ 94425bb815Sopenharmony_ci#define LIT_CHAR_PLUS ((ecma_char_t) '+') /* plus sign */ 95425bb815Sopenharmony_ci#define LIT_CHAR_MINUS ((ecma_char_t) '-') /* hyphen-minus */ 96425bb815Sopenharmony_ci/* LIT_CHAR_ASTERISK is defined above */ 97425bb815Sopenharmony_ci#define LIT_CHAR_PERCENT ((ecma_char_t) '%') /* percent sign */ 98425bb815Sopenharmony_ci#define LIT_CHAR_AMPERSAND ((ecma_char_t) '&') /* ampersand */ 99425bb815Sopenharmony_ci#define LIT_CHAR_VLINE ((ecma_char_t) '|') /* vertical line */ 100425bb815Sopenharmony_ci#define LIT_CHAR_CIRCUMFLEX ((ecma_char_t) '^') /* circumflex accent */ 101425bb815Sopenharmony_ci#define LIT_CHAR_EXCLAMATION ((ecma_char_t) '!') /* exclamation mark */ 102425bb815Sopenharmony_ci#define LIT_CHAR_TILDE ((ecma_char_t) '~') /* tilde */ 103425bb815Sopenharmony_ci#define LIT_CHAR_QUESTION ((ecma_char_t) '?') /* question mark */ 104425bb815Sopenharmony_ci#define LIT_CHAR_COLON ((ecma_char_t) ':') /* colon */ 105425bb815Sopenharmony_ci 106425bb815Sopenharmony_ci/* 107425bb815Sopenharmony_ci * Special characters for String.prototype.replace. 108425bb815Sopenharmony_ci */ 109425bb815Sopenharmony_ci#define LIT_CHAR_GRAVE_ACCENT ((ecma_char_t) '`') /* grave accent */ 110425bb815Sopenharmony_ci 111425bb815Sopenharmony_ci/** 112425bb815Sopenharmony_ci * Uppercase ASCII letters 113425bb815Sopenharmony_ci */ 114425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_A ((ecma_char_t) 'A') 115425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_B ((ecma_char_t) 'B') 116425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_C ((ecma_char_t) 'C') 117425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_D ((ecma_char_t) 'D') 118425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_E ((ecma_char_t) 'E') 119425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_F ((ecma_char_t) 'F') 120425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_G ((ecma_char_t) 'G') 121425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_H ((ecma_char_t) 'H') 122425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_I ((ecma_char_t) 'I') 123425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_J ((ecma_char_t) 'J') 124425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_K ((ecma_char_t) 'K') 125425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_L ((ecma_char_t) 'L') 126425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_M ((ecma_char_t) 'M') 127425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_N ((ecma_char_t) 'N') 128425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_O ((ecma_char_t) 'O') 129425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_P ((ecma_char_t) 'P') 130425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_Q ((ecma_char_t) 'Q') 131425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_R ((ecma_char_t) 'R') 132425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_S ((ecma_char_t) 'S') 133425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_T ((ecma_char_t) 'T') 134425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_U ((ecma_char_t) 'U') 135425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_V ((ecma_char_t) 'V') 136425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_W ((ecma_char_t) 'W') 137425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_X ((ecma_char_t) 'X') 138425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_Y ((ecma_char_t) 'Y') 139425bb815Sopenharmony_ci#define LIT_CHAR_UPPERCASE_Z ((ecma_char_t) 'Z') 140425bb815Sopenharmony_ci 141425bb815Sopenharmony_ci/** 142425bb815Sopenharmony_ci * Lowercase ASCII letters 143425bb815Sopenharmony_ci */ 144425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_A ((ecma_char_t) 'a') 145425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_B ((ecma_char_t) 'b') 146425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_C ((ecma_char_t) 'c') 147425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_D ((ecma_char_t) 'd') 148425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_E ((ecma_char_t) 'e') 149425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_F ((ecma_char_t) 'f') 150425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_G ((ecma_char_t) 'g') 151425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_H ((ecma_char_t) 'h') 152425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_I ((ecma_char_t) 'i') 153425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_J ((ecma_char_t) 'j') 154425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_K ((ecma_char_t) 'k') 155425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_L ((ecma_char_t) 'l') 156425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_M ((ecma_char_t) 'm') 157425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_N ((ecma_char_t) 'n') 158425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_O ((ecma_char_t) 'o') 159425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_P ((ecma_char_t) 'p') 160425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_Q ((ecma_char_t) 'q') 161425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_R ((ecma_char_t) 'r') 162425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_S ((ecma_char_t) 's') 163425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_T ((ecma_char_t) 't') 164425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_U ((ecma_char_t) 'u') 165425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_V ((ecma_char_t) 'v') 166425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_W ((ecma_char_t) 'w') 167425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_X ((ecma_char_t) 'x') 168425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_Y ((ecma_char_t) 'y') 169425bb815Sopenharmony_ci#define LIT_CHAR_LOWERCASE_Z ((ecma_char_t) 'z') 170425bb815Sopenharmony_ci 171425bb815Sopenharmony_ci/** 172425bb815Sopenharmony_ci * ASCII decimal digits 173425bb815Sopenharmony_ci */ 174425bb815Sopenharmony_ci#define LIT_CHAR_0 ((ecma_char_t) '0') 175425bb815Sopenharmony_ci#define LIT_CHAR_1 ((ecma_char_t) '1') 176425bb815Sopenharmony_ci#define LIT_CHAR_2 ((ecma_char_t) '2') 177425bb815Sopenharmony_ci#define LIT_CHAR_3 ((ecma_char_t) '3') 178425bb815Sopenharmony_ci#define LIT_CHAR_4 ((ecma_char_t) '4') 179425bb815Sopenharmony_ci#define LIT_CHAR_5 ((ecma_char_t) '5') 180425bb815Sopenharmony_ci#define LIT_CHAR_6 ((ecma_char_t) '6') 181425bb815Sopenharmony_ci#define LIT_CHAR_7 ((ecma_char_t) '7') 182425bb815Sopenharmony_ci#define LIT_CHAR_8 ((ecma_char_t) '8') 183425bb815Sopenharmony_ci#define LIT_CHAR_9 ((ecma_char_t) '9') 184425bb815Sopenharmony_ci 185425bb815Sopenharmony_ci/** 186425bb815Sopenharmony_ci * ASCII character ranges 187425bb815Sopenharmony_ci */ 188425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_UPPERCASE_LETTERS_BEGIN LIT_CHAR_UPPERCASE_A /* uppercase letters range */ 189425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_UPPERCASE_LETTERS_END LIT_CHAR_UPPERCASE_Z 190425bb815Sopenharmony_ci 191425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_LOWERCASE_LETTERS_BEGIN LIT_CHAR_LOWERCASE_A /* lowercase letters range */ 192425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_LOWERCASE_LETTERS_END LIT_CHAR_LOWERCASE_Z 193425bb815Sopenharmony_ci 194425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_UPPERCASE_LETTERS_HEX_BEGIN LIT_CHAR_UPPERCASE_A /* uppercase letters for 195425bb815Sopenharmony_ci * hexadecimal digits range */ 196425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_UPPERCASE_LETTERS_HEX_END LIT_CHAR_UPPERCASE_F 197425bb815Sopenharmony_ci 198425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_LOWERCASE_LETTERS_HEX_BEGIN LIT_CHAR_LOWERCASE_A /* lowercase letters for 199425bb815Sopenharmony_ci * hexadecimal digits range */ 200425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_LOWERCASE_LETTERS_HEX_END LIT_CHAR_LOWERCASE_F 201425bb815Sopenharmony_ci 202425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_OCTAL_DIGITS_BEGIN LIT_CHAR_0 /* octal digits range */ 203425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_OCTAL_DIGITS_END LIT_CHAR_7 204425bb815Sopenharmony_ci 205425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_DIGITS_BEGIN LIT_CHAR_0 /* decimal digits range */ 206425bb815Sopenharmony_ci#define LIT_CHAR_ASCII_DIGITS_END LIT_CHAR_9 207425bb815Sopenharmony_ci 208425bb815Sopenharmony_ci#define LEXER_TO_ASCII_LOWERCASE(character) ((character) | LIT_CHAR_SP) 209425bb815Sopenharmony_ci 210425bb815Sopenharmony_cibool lit_char_is_octal_digit (ecma_char_t c); 211425bb815Sopenharmony_cibool lit_char_is_decimal_digit (ecma_char_t c); 212425bb815Sopenharmony_cibool lit_char_is_hex_digit (ecma_char_t c); 213425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015) 214425bb815Sopenharmony_cibool lit_char_is_binary_digit (ecma_char_t c); 215425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015) */ 216425bb815Sopenharmony_ciuint32_t lit_char_hex_to_int (ecma_char_t c); 217425bb815Sopenharmony_cisize_t lit_code_point_to_cesu8_bytes (uint8_t *dst_p, lit_code_point_t code_point); 218425bb815Sopenharmony_cisize_t lit_code_point_get_cesu8_length (lit_code_point_t code_point); 219425bb815Sopenharmony_civoid lit_four_byte_utf8_char_to_cesu8 (uint8_t *dst_p, const uint8_t *source_p); 220425bb815Sopenharmony_ciuint32_t lit_char_hex_lookup (const lit_utf8_byte_t *buf_p, const lit_utf8_byte_t *const buf_end_p, uint32_t lookup); 221425bb815Sopenharmony_ciuint32_t lit_parse_decimal (const lit_utf8_byte_t **buffer_p, const lit_utf8_byte_t *const buffer_end_p); 222425bb815Sopenharmony_ci 223425bb815Sopenharmony_ci/** 224425bb815Sopenharmony_ci * Null character 225425bb815Sopenharmony_ci */ 226425bb815Sopenharmony_ci#define LIT_CHAR_NULL ((ecma_char_t) '\0') 227425bb815Sopenharmony_ci 228425bb815Sopenharmony_ci/* 229425bb815Sopenharmony_ci * Part of IsWordChar abstract operation (ECMA-262 v5, 15.10.2.6, step 3) 230425bb815Sopenharmony_ci */ 231425bb815Sopenharmony_cibool lit_char_is_word_char (lit_code_point_t c); 232425bb815Sopenharmony_ci 233425bb815Sopenharmony_ci/* 234425bb815Sopenharmony_ci * Utility functions for uppercasing / lowercasing 235425bb815Sopenharmony_ci */ 236425bb815Sopenharmony_ci 237425bb815Sopenharmony_ci/** 238425bb815Sopenharmony_ci * Minimum buffer size for lit_char_to_lower_case / lit_char_to_upper_case functions. 239425bb815Sopenharmony_ci */ 240425bb815Sopenharmony_ci#define LIT_MAXIMUM_OTHER_CASE_LENGTH (3) 241425bb815Sopenharmony_ci 242425bb815Sopenharmony_ciecma_length_t lit_char_to_lower_case (ecma_char_t character, ecma_char_t *output_buffer_p, ecma_length_t buffer_size); 243425bb815Sopenharmony_ciecma_length_t lit_char_to_upper_case (ecma_char_t character, ecma_char_t *output_buffer_p, ecma_length_t buffer_size); 244425bb815Sopenharmony_ci 245425bb815Sopenharmony_ci#endif /* !LIT_CHAR_HELPERS_H */ 246