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