1 /*
2 Copyright (C) 2016-2017 Alexander Borisov
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18 Author: lex.borisov@gmail.com (Alexander Borisov)
19 */
20
21 #include "mycss/tokenizer_end.h"
22
mycss_tokenizer_end_run_state_single(mycss_entry_t * entry,mycss_tokenizer_state_t state,const char * css,size_t css_offset,size_t css_size)23 size_t mycss_tokenizer_end_run_state_single(mycss_entry_t* entry, mycss_tokenizer_state_t state, const char* css, size_t css_offset, size_t css_size)
24 {
25 mycss_t* mycss = entry->mycss;
26 mycss_tokenizer_state_f* state_f = mycss->parse_state_func;
27
28 return state_f[state + MyCSS_TOKENIZER_STATE_LAST_ENTRY](entry, entry->token, css, css_offset, css_size);
29 }
30
31 /////////////////////////////////////////////////////////
32 //// whitespace
33 ////
34 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_whitespace(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)35 size_t mycss_tokenizer_end_state_whitespace(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
36 {
37 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
38
39 if(token->length) {
40 token->type = MyCSS_TOKEN_TYPE_WHITESPACE;
41 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
42 }
43
44 return css_size;
45 }
46
47 /////////////////////////////////////////////////////////
48 //// U+0022 QUOTATION MARK (")
49 ////
50 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_quotation_mark(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)51 size_t mycss_tokenizer_end_state_quotation_mark(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
52 {
53 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
54 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
55
56 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
57
58 return css_size;
59 }
60
mycss_tokenizer_end_state_quotation_mark_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)61 size_t mycss_tokenizer_end_state_quotation_mark_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
62 {
63 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
64 return css_size;
65 }
66
67 /////////////////////////////////////////////////////////
68 //// U+0023 NUMBER SIGN (#)
69 ////
70 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_number_sign(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)71 size_t mycss_tokenizer_end_state_number_sign(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
72 {
73 token->length = 1;
74 token->type = MyCSS_TOKEN_TYPE_DELIM;
75
76 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
77
78 return css_size;
79 }
80
mycss_tokenizer_end_state_number_sign_name_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)81 size_t mycss_tokenizer_end_state_number_sign_name_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
82 {
83 token->type = MyCSS_TOKEN_TYPE_HASH;
84 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
85
86 return css_size;
87 }
88
mycss_tokenizer_end_state_number_sign_name_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)89 size_t mycss_tokenizer_end_state_number_sign_name_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
90 {
91 size_t begin = token->begin;
92
93 // and '#' character
94 token->length = 1;
95 token->type = MyCSS_TOKEN_TYPE_DELIM;
96
97 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
98
99 // and '\' character
100 token->length = 1;
101 token->begin = begin + 1;
102 token->type = MyCSS_TOKEN_TYPE_DELIM;
103
104 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
105
106 return css_size;
107 }
108
109 /////////////////////////////////////////////////////////
110 //// U+0024 DOLLAR SIGN ($)
111 ////
112 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_dollar_sign(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)113 size_t mycss_tokenizer_end_state_dollar_sign(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
114 {
115 token->length = 1;
116 token->type = MyCSS_TOKEN_TYPE_DELIM;
117
118 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
119
120 return css_size;
121 }
122
123 /////////////////////////////////////////////////////////
124 //// U+0027 APOSTROPHE (')
125 ////
126 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_apostrophe(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)127 size_t mycss_tokenizer_end_state_apostrophe(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
128 {
129 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
130 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
131
132 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
133
134 return css_size;
135 }
136
mycss_tokenizer_end_state_apostrophe_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)137 size_t mycss_tokenizer_end_state_apostrophe_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
138 {
139 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
140 return css_size;
141 }
142
143 /////////////////////////////////////////////////////////
144 //// U+0028 LEFT PARENTHESIS (()
145 ////
146 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_left_parenthesis(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)147 size_t mycss_tokenizer_end_state_left_parenthesis(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
148 {
149 token->length = 1;
150 token->type = MyCSS_TOKEN_TYPE_LEFT_PARENTHESIS;
151
152 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
153 return css_size;
154 }
155
156 /////////////////////////////////////////////////////////
157 //// U+0029 RIGHT PARENTHESIS ())
158 ////
159 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_right_parenthesis(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)160 size_t mycss_tokenizer_end_state_right_parenthesis(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
161 {
162 token->length = 1;
163 token->type = MyCSS_TOKEN_TYPE_RIGHT_PARENTHESIS;
164
165 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
166 return css_size;
167 }
168
169 /////////////////////////////////////////////////////////
170 //// U+002A ASTERISK (*)
171 ////
172 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_asterisk(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)173 size_t mycss_tokenizer_end_state_asterisk(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
174 {
175 token->length = 1;
176 token->type = MyCSS_TOKEN_TYPE_DELIM;
177
178 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
179 return css_size;
180 }
181
182 /////////////////////////////////////////////////////////
183 //// U+002B PLUS SIGN (+)
184 ////
185 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_plus_sign(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)186 size_t mycss_tokenizer_end_state_plus_sign(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
187 {
188 token->length = 1;
189 token->type = MyCSS_TOKEN_TYPE_DELIM;
190
191 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
192 return css_size;
193 }
194
mycss_tokenizer_end_state_plus_sign_full_stop(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)195 size_t mycss_tokenizer_end_state_plus_sign_full_stop(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
196 {
197 size_t begin = token->begin;
198
199 // '+' character
200 token->length = 1;
201 token->type = MyCSS_TOKEN_TYPE_DELIM;
202
203 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
204
205 // and '.' character
206 token->length = 1;
207 token->begin = begin + 1;
208 token->type = MyCSS_TOKEN_TYPE_DELIM;
209
210 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
211
212 return css_size;
213 }
214
215 /////////////////////////////////////////////////////////
216 //// U+002C COMMA (,)
217 ////
218 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_comma(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)219 size_t mycss_tokenizer_end_state_comma(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
220 {
221 token->length = 1;
222 token->type = MyCSS_TOKEN_TYPE_COMMA;
223
224 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
225 return css_size;
226 }
227
228 /////////////////////////////////////////////////////////
229 //// U+002D HYPHEN-MINUS (-)
230 ////
231 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_hyphen_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)232 size_t mycss_tokenizer_end_state_hyphen_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
233 {
234 token->length = 1;
235 token->type = MyCSS_TOKEN_TYPE_DELIM;
236
237 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
238 return css_size;
239 }
240
mycss_tokenizer_end_state_hyphen_minus_full_stop(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)241 size_t mycss_tokenizer_end_state_hyphen_minus_full_stop(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
242 {
243 size_t begin = token->begin;
244
245 // '-' character
246 token->length = 1;
247 token->type = MyCSS_TOKEN_TYPE_DELIM;
248
249 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
250
251 // and '.' character
252 token->length = 1;
253 token->begin = begin + 1;
254 token->type = MyCSS_TOKEN_TYPE_DELIM;
255
256 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
257
258 return css_size;
259 }
260
mycss_tokenizer_end_state_hyphen_minus_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)261 size_t mycss_tokenizer_end_state_hyphen_minus_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
262 {
263 size_t begin = token->begin;
264
265 // '-' character
266 token->length = 1;
267 token->type = MyCSS_TOKEN_TYPE_DELIM;
268
269 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
270
271 // and '-' character
272 token->length = 1;
273 token->begin = begin + 1;
274 token->type = MyCSS_TOKEN_TYPE_DELIM;
275
276 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
277
278 return css_size;
279 }
280
mycss_tokenizer_end_state_hyphen_minus_minus_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)281 size_t mycss_tokenizer_end_state_hyphen_minus_minus_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
282 {
283 size_t begin = token->begin;
284
285 // '-' character
286 token->length = 1;
287 token->type = MyCSS_TOKEN_TYPE_DELIM;
288
289 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
290
291 // and '-' character
292 token->length = 1;
293 token->begin = begin + 1;
294 token->type = MyCSS_TOKEN_TYPE_DELIM;
295
296 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
297
298 // and '\' character
299 token->length = 1;
300 token->begin = begin + 2;
301 token->type = MyCSS_TOKEN_TYPE_DELIM;
302
303 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
304
305 return css_size;
306 }
307
mycss_tokenizer_end_state_hyphen_minus_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)308 size_t mycss_tokenizer_end_state_hyphen_minus_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
309 {
310 size_t begin = token->begin;
311
312 // '-' character
313 token->length = 1;
314 token->type = MyCSS_TOKEN_TYPE_DELIM;
315
316 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
317
318 // and '\' character
319 token->length = 1;
320 token->begin = begin + 1;
321 token->type = MyCSS_TOKEN_TYPE_DELIM;
322
323 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
324
325 return css_size;
326 }
327
328 /////////////////////////////////////////////////////////
329 //// U+002E FULL STOP (.)
330 ////
331 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_full_stop(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)332 size_t mycss_tokenizer_end_state_full_stop(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
333 {
334 token->length = 1;
335 token->type = MyCSS_TOKEN_TYPE_DELIM;
336
337 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
338 return css_size;
339 }
340
341 /////////////////////////////////////////////////////////
342 //// U+002F SOLIDUS (/)
343 ////
344 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_solidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)345 size_t mycss_tokenizer_end_state_solidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
346 {
347 token->length = 1;
348 token->type = MyCSS_TOKEN_TYPE_DELIM;
349
350 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
351 return css_size;
352 }
353
mycss_tokenizer_end_state_solidus_comment_end(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)354 size_t mycss_tokenizer_end_state_solidus_comment_end(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
355 {
356 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
357 token->type = MyCSS_TOKEN_TYPE_COMMENT;
358
359 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
360 return css_size;
361 }
362
363 /////////////////////////////////////////////////////////
364 //// U+003A COLON (:)
365 ////
366 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_colon(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)367 size_t mycss_tokenizer_end_state_colon(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
368 {
369 token->length = 1;
370 token->type = MyCSS_TOKEN_TYPE_COLON;
371
372 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
373 return css_size;
374 }
375
376 /////////////////////////////////////////////////////////
377 //// U+003B SEMICOLON (;)
378 ////
379 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_semicolon(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)380 size_t mycss_tokenizer_end_state_semicolon(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
381 {
382 token->length = 1;
383 token->type = MyCSS_TOKEN_TYPE_SEMICOLON;
384
385 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
386 return css_size;
387 }
388
389 /////////////////////////////////////////////////////////
390 //// U+003C LESS-THAN SIGN (<)
391 ////
392 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_less_than_sign(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)393 size_t mycss_tokenizer_end_state_less_than_sign(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
394 {
395 token->length = 1;
396 token->type = MyCSS_TOKEN_TYPE_DELIM;
397
398 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
399 return css_size;
400 }
401
mycss_tokenizer_end_state_less_than_sign_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)402 size_t mycss_tokenizer_end_state_less_than_sign_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
403 {
404 size_t begin = token->begin;
405
406 // '<' character
407 token->length = 1;
408 token->type = MyCSS_TOKEN_TYPE_DELIM;
409
410 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
411
412 // and '-' character
413 token->length = 1;
414 token->begin = begin + 1;
415 token->type = MyCSS_TOKEN_TYPE_DELIM;
416
417 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
418
419 return css_size;
420 }
421
mycss_tokenizer_end_state_less_than_sign_minus_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)422 size_t mycss_tokenizer_end_state_less_than_sign_minus_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
423 {
424 size_t begin = token->begin;
425
426 // '<' character
427 token->length = 1;
428 token->type = MyCSS_TOKEN_TYPE_DELIM;
429
430 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
431
432 // and '-' character
433 token->length = 1;
434 token->begin = begin + 1;
435 token->type = MyCSS_TOKEN_TYPE_DELIM;
436
437 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
438
439 // and '-' character
440 token->length = 1;
441 token->begin = begin + 2;
442 token->type = MyCSS_TOKEN_TYPE_DELIM;
443
444 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
445 return css_size;
446 }
447
448 /////////////////////////////////////////////////////////
449 //// U+0040 COMMERCIAL AT (@)
450 ////
451 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_commercial_at(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)452 size_t mycss_tokenizer_end_state_commercial_at(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
453 {
454 token->length = 1;
455 token->type = MyCSS_TOKEN_TYPE_DELIM;
456
457 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
458 return css_size;
459 }
460
mycss_tokenizer_end_state_commercial_at_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)461 size_t mycss_tokenizer_end_state_commercial_at_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
462 {
463 size_t begin = token->begin;
464
465 // '@' character
466 token->length = 1;
467 token->type = MyCSS_TOKEN_TYPE_DELIM;
468
469 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
470
471 // and '-' character
472 token->length = 1;
473 token->begin = begin + 1;
474 token->type = MyCSS_TOKEN_TYPE_DELIM;
475
476 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
477 return css_size;
478 }
479
mycss_tokenizer_end_state_commercial_at_minus_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)480 size_t mycss_tokenizer_end_state_commercial_at_minus_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
481 {
482 size_t begin = token->begin;
483
484 // '@' character
485 token->length = 1;
486 token->type = MyCSS_TOKEN_TYPE_DELIM;
487
488 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
489
490 // and '-' character
491 token->length = 1;
492 token->begin = begin + 1;
493 token->type = MyCSS_TOKEN_TYPE_DELIM;
494
495 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
496
497 // and '\' character
498 token->length = 1;
499 token->begin = begin + 2;
500 token->type = MyCSS_TOKEN_TYPE_DELIM;
501
502 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
503 return css_size;
504 }
505
mycss_tokenizer_end_state_commercial_at_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)506 size_t mycss_tokenizer_end_state_commercial_at_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
507 {
508 size_t begin = token->begin;
509
510 // '@' character
511 token->length = 1;
512 token->type = MyCSS_TOKEN_TYPE_DELIM;
513
514 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
515
516 // and '\' character
517 token->length = 1;
518 token->begin = begin + 1;
519 token->type = MyCSS_TOKEN_TYPE_DELIM;
520
521 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
522 return css_size;
523 }
524
mycss_tokenizer_end_state_commercial_at_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)525 size_t mycss_tokenizer_end_state_commercial_at_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
526 {
527 token->type = MyCSS_TOKEN_TYPE_AT_KEYWORD;
528
529 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
530 return css_size;
531 }
532
533 /////////////////////////////////////////////////////////
534 //// U+005B LEFT SQUARE BRACKET ([)
535 ////
536 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_left_square_bracket(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)537 size_t mycss_tokenizer_end_state_left_square_bracket(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
538 {
539 token->length = 1;
540 token->type = MyCSS_TOKEN_TYPE_LEFT_SQUARE_BRACKET;
541
542 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
543 return css_size;
544 }
545
546 /////////////////////////////////////////////////////////
547 //// U+005C REVERSE SOLIDUS (\)
548 ////
549 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_reverse_solidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)550 size_t mycss_tokenizer_end_state_reverse_solidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
551 {
552 token->length = 1;
553 token->type = MyCSS_TOKEN_TYPE_DELIM;
554
555 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
556 return css_size;
557 }
558
559 /////////////////////////////////////////////////////////
560 //// U+005D RIGHT SQUARE BRACKET (])
561 ////
562 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_right_square_bracket(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)563 size_t mycss_tokenizer_end_state_right_square_bracket(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
564 {
565 token->length = 1;
566 token->type = MyCSS_TOKEN_TYPE_RIGHT_SQUARE_BRACKET;
567
568 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
569 return css_size;
570 }
571
572 /////////////////////////////////////////////////////////
573 //// U+005E CIRCUMFLEX ACCENT (^)
574 ////
575 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_circumflex_accent(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)576 size_t mycss_tokenizer_end_state_circumflex_accent(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
577 {
578 token->length = 1;
579 token->type = MyCSS_TOKEN_TYPE_DELIM;
580
581 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
582 return css_size;
583 }
584
585 /////////////////////////////////////////////////////////
586 //// U+007B LEFT CURLY BRACKET ({)
587 ////
588 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_left_curly_bracket(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)589 size_t mycss_tokenizer_end_state_left_curly_bracket(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
590 {
591 token->length = 1;
592 token->type = MyCSS_TOKEN_TYPE_LEFT_CURLY_BRACKET;
593
594 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
595 return css_size;
596 }
597
598 /////////////////////////////////////////////////////////
599 //// U+007D RIGHT CURLY BRACKET (})
600 ////
601 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_right_curly_bracket(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)602 size_t mycss_tokenizer_end_state_right_curly_bracket(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
603 {
604 token->length = 1;
605 token->type = MyCSS_TOKEN_TYPE_RIGHT_CURLY_BRACKET;
606
607 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
608 return css_size;
609 }
610
611 /////////////////////////////////////////////////////////
612 //// Digit
613 ////
614 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_digit(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)615 size_t mycss_tokenizer_end_state_digit(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
616 {
617 token->length = 1;
618 token->type = MyCSS_TOKEN_TYPE_NUMBER;
619
620 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
621 return css_size;
622 }
623
624 /////////////////////////////////////////////////////////
625 //// U+0055 LATIN CAPITAL LETTER U (U) || U+0075 LATIN SMALL LETTER U (u)
626 ////
627 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_letter_u(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)628 size_t mycss_tokenizer_end_state_letter_u(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
629 {
630 token->length = 1;
631 token->type = MyCSS_TOKEN_TYPE_IDENT;
632
633 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
634 return css_size;
635 }
636
mycss_tokenizer_end_state_letter_u_next(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)637 size_t mycss_tokenizer_end_state_letter_u_next(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
638 {
639 size_t begin = token->begin;
640
641 // 'u' or 'U' character
642 token->length = 1;
643 token->type = MyCSS_TOKEN_TYPE_IDENT;
644
645 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
646
647 // and '+' character
648 token->length = 1;
649 token->begin = begin + 1;
650 token->type = MyCSS_TOKEN_TYPE_DELIM;
651
652 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
653 return css_size;
654 }
655
656 /////////////////////////////////////////////////////////
657 //// name-start code point
658 ////
659 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_name_start_code_point(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)660 size_t mycss_tokenizer_end_state_name_start_code_point(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
661 {
662 token->length = 1;
663 token->type = MyCSS_TOKEN_TYPE_IDENT;
664
665 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
666 return css_size;
667 }
668
669 /////////////////////////////////////////////////////////
670 //// U+007C VERTICAL LINE (|)
671 ////
672 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_vertical_line(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)673 size_t mycss_tokenizer_end_state_vertical_line(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
674 {
675 token->length = 1;
676 token->type = MyCSS_TOKEN_TYPE_DELIM;
677
678 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
679 return css_size;
680 }
681
682 /////////////////////////////////////////////////////////
683 //// U+007E TILDE (~)
684 ////
685 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_tilde(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)686 size_t mycss_tokenizer_end_state_tilde(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
687 {
688 token->length = 1;
689 token->type = MyCSS_TOKEN_TYPE_DELIM;
690
691 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
692 return css_size;
693 }
694
695 /////////////////////////////////////////////////////////
696 //// anything else
697 ////
698 /////////////////////////////////////////////////////////
mycss_tokenizer_end_state_delim_single_code_point(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)699 size_t mycss_tokenizer_end_state_delim_single_code_point(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
700 {
701 token->length = css_offset - token->begin;
702 token->type = MyCSS_TOKEN_TYPE_DELIM;
703
704 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
705 return css_size;
706 }
707
708
709 /////////////////////////////////////////////////////////
710 //// Global
711
712 /////////////////////////////////////////////////////////
713 //// Global back
714 ////
715 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)716 size_t mycss_tokenizer_end_global_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
717 {
718 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
719 return css_size;
720 }
721
722 /////////////////////////////////////////////////////////
723 //// Consume a numeric
724 ////
725 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_numeric(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)726 size_t mycss_tokenizer_end_global_state_numeric(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
727 {
728 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
729 token->type = MyCSS_TOKEN_TYPE_NUMBER;
730
731 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
732 return css_size;
733 }
734
mycss_tokenizer_end_global_state_numeric_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)735 size_t mycss_tokenizer_end_global_state_numeric_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
736 {
737 // numbers
738 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
739 token->type = MyCSS_TOKEN_TYPE_NUMBER;
740
741 size_t begin = token->begin + token->length;
742
743 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
744
745 // and '-' character
746 token->length = 1;
747 token->begin = begin;
748 token->type = MyCSS_TOKEN_TYPE_DELIM;
749
750 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
751 return css_size;
752 }
753
mycss_tokenizer_end_global_state_numeric_minus_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)754 size_t mycss_tokenizer_end_global_state_numeric_minus_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
755 {
756 // numbers
757 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 2;
758 token->type = MyCSS_TOKEN_TYPE_NUMBER;
759
760 size_t begin = token->begin + token->length;
761
762 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
763
764 // and '-' character
765 token->length = 1;
766 token->begin = begin;
767 token->type = MyCSS_TOKEN_TYPE_DELIM;
768
769 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
770
771 // and '\' character
772 token->length = 1;
773 token->begin = begin + 1;
774 token->type = MyCSS_TOKEN_TYPE_DELIM;
775
776 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
777 return css_size;
778 }
779
mycss_tokenizer_end_global_state_numeric_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)780 size_t mycss_tokenizer_end_global_state_numeric_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
781 {
782 // numbers
783 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
784 token->type = MyCSS_TOKEN_TYPE_NUMBER;
785
786 size_t begin = token->begin + token->length;
787
788 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
789
790 // and '\' character
791 token->length = 1;
792 token->begin = begin;
793 token->type = MyCSS_TOKEN_TYPE_DELIM;
794
795 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
796 return css_size;
797 }
798
799 /////////////////////////////////////////////////////////
800 //// Consume a number
801 ////
802 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_number_digit(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)803 size_t mycss_tokenizer_end_global_state_number_digit(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
804 {
805 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
806 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
807
808 return css_size;
809 }
810
mycss_tokenizer_end_global_state_number_dot(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)811 size_t mycss_tokenizer_end_global_state_number_dot(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
812 {
813 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
814 size_t begin = token->begin + token->length;
815
816 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
817
818 // '.' character
819 token->length = 1;
820 token->begin = begin;
821 token->type = MyCSS_TOKEN_TYPE_DELIM;
822
823 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
824 return css_size;
825 }
826
mycss_tokenizer_end_global_state_number_decimal(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)827 size_t mycss_tokenizer_end_global_state_number_decimal(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
828 {
829 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
830 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
831
832 return css_size;
833 }
834
mycss_tokenizer_end_global_state_number_e(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)835 size_t mycss_tokenizer_end_global_state_number_e(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
836 {
837 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
838 size_t begin = token->begin + token->length;
839
840 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
841
842 // 'e' or 'E' character
843 token->length = 1;
844 token->begin = begin;
845 token->type = MyCSS_TOKEN_TYPE_IDENT;
846
847 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
848 return css_size;
849 }
850
mycss_tokenizer_end_global_state_number_e_plus_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)851 size_t mycss_tokenizer_end_global_state_number_e_plus_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
852 {
853 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 2;
854 size_t begin = token->begin + token->length;
855
856 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
857
858 // 'e' or 'E' character
859 token->length = 1;
860 token->begin = begin;
861 token->type = MyCSS_TOKEN_TYPE_IDENT;
862
863 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
864
865 // and '+' or '-' character
866 token->length = 1;
867 token->begin = begin + 1;
868 token->type = MyCSS_TOKEN_TYPE_DELIM;
869
870 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
871 return css_size;
872 }
873
mycss_tokenizer_end_global_state_number_e_decimal(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)874 size_t mycss_tokenizer_end_global_state_number_e_decimal(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
875 {
876 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
877 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
878
879 return css_size;
880 }
881
882 /////////////////////////////////////////////////////////
883 //// Consume a url token
884 ////
885 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_url(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)886 size_t mycss_tokenizer_end_global_state_url(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
887 {
888 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
889 token->type = MyCSS_TOKEN_TYPE_BAD_URL;
890
891 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
892 return css_size;
893 }
894
mycss_tokenizer_end_global_state_url_string_back(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)895 size_t mycss_tokenizer_end_global_state_url_string_back(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
896 {
897 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
898
899 if(token->type == MyCSS_TOKEN_TYPE_BAD_STRING)
900 token->type = MyCSS_TOKEN_TYPE_BAD_URL;
901 else
902 token->type = MyCSS_TOKEN_TYPE_URL;
903
904 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
905 return css_size;
906 }
907
mycss_tokenizer_end_global_state_url_after(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)908 size_t mycss_tokenizer_end_global_state_url_after(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
909 {
910 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
911 token->type = MyCSS_TOKEN_TYPE_URL;
912
913 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
914 return css_size;
915 }
916
mycss_tokenizer_end_global_state_url_after_whitespace(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)917 size_t mycss_tokenizer_end_global_state_url_after_whitespace(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
918 {
919 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
920 token->type = MyCSS_TOKEN_TYPE_URL;
921
922 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
923 return css_size;
924 }
925
mycss_tokenizer_end_global_state_url_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)926 size_t mycss_tokenizer_end_global_state_url_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
927 {
928 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
929 token->type = MyCSS_TOKEN_TYPE_BAD_URL;
930
931 size_t begin = token->begin + token->length;
932
933 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
934
935 // '\' character
936 token->length = 1;
937 token->begin = begin;
938 token->type = MyCSS_TOKEN_TYPE_DELIM;
939
940 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
941 return css_size;
942 }
943
mycss_tokenizer_end_global_state_bad_url(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)944 size_t mycss_tokenizer_end_global_state_bad_url(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
945 {
946 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
947 token->type = MyCSS_TOKEN_TYPE_BAD_URL;
948
949 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
950 return css_size;
951 }
952
953 /////////////////////////////////////////////////////////
954 //// Consume a string token
955 ////
956 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_string_double_quoted(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)957 size_t mycss_tokenizer_end_global_state_string_double_quoted(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
958 {
959 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
960 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
961
962 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
963
964 return css_size;
965 }
966
mycss_tokenizer_end_global_state_string_double_quoted_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)967 size_t mycss_tokenizer_end_global_state_string_double_quoted_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
968 {
969 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
970 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
971
972 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
973
974 return css_size;
975 }
976
mycss_tokenizer_end_global_state_string_single_quoted(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)977 size_t mycss_tokenizer_end_global_state_string_single_quoted(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
978 {
979 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
980 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
981
982 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
983
984 return css_size;
985 }
986
mycss_tokenizer_end_global_state_string_single_quoted_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)987 size_t mycss_tokenizer_end_global_state_string_single_quoted_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
988 {
989 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
990 token->type = MyCSS_TOKEN_TYPE_BAD_STRING;
991
992 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
993
994 return css_size;
995 }
996
997 /////////////////////////////////////////////////////////
998 //// Consume an ident-like token
999 ////
1000 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_ident(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1001 size_t mycss_tokenizer_end_global_state_ident(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1002 {
1003 token->type = MyCSS_TOKEN_TYPE_IDENT;
1004
1005 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1006 return css_size;
1007 }
1008
1009 /////////////////////////////////////////////////////////
1010 //// Consume a name
1011 ////
1012 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_name(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1013 size_t mycss_tokenizer_end_global_state_name(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1014 {
1015 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
1016
1017 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
1018
1019 return css_size;
1020 }
1021
mycss_tokenizer_end_global_state_name_rsolidus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1022 size_t mycss_tokenizer_end_global_state_name_rsolidus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1023 {
1024 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
1025 size_t begin = token->begin + token->length;
1026
1027 mycss_tokenizer_end_run_state_single(entry, entry->state_back, css, css_offset, css_size);
1028
1029 // '\' character
1030 token->length = 1;
1031 token->begin = begin;
1032 token->type = MyCSS_TOKEN_TYPE_DELIM;
1033
1034 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1035 return css_size;
1036 }
1037
1038 /////////////////////////////////////////////////////////
1039 //// Consume a unicode-range token
1040 ////
1041 /////////////////////////////////////////////////////////
mycss_tokenizer_end_global_state_unicode_range_before(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1042 size_t mycss_tokenizer_end_global_state_unicode_range_before(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1043 {
1044 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
1045 token->type = MyCSS_TOKEN_TYPE_UNICODE_RANGE;
1046
1047 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1048 return css_size;
1049 }
1050
mycss_tokenizer_end_global_state_unicode_range(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1051 size_t mycss_tokenizer_end_global_state_unicode_range(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1052 {
1053 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
1054 token->type = MyCSS_TOKEN_TYPE_UNICODE_RANGE;
1055
1056 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1057 return css_size;
1058 }
1059
mycss_tokenizer_end_global_state_unicode_range_question(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1060 size_t mycss_tokenizer_end_global_state_unicode_range_question(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1061 {
1062 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
1063 token->type = MyCSS_TOKEN_TYPE_UNICODE_RANGE;
1064
1065 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1066 return css_size;
1067 }
1068
mycss_tokenizer_end_global_state_unicode_range_minus(mycss_entry_t * entry,mycss_token_t * token,const char * css,size_t css_offset,size_t css_size)1069 size_t mycss_tokenizer_end_global_state_unicode_range_minus(mycss_entry_t* entry, mycss_token_t* token, const char* css, size_t css_offset, size_t css_size)
1070 {
1071 if(entry->help_counter == 0) {
1072 token->length = ((entry->current_buffer->offset + css_offset) - token->begin) - 1;
1073 }
1074 else {
1075 token->length = (entry->current_buffer->offset + css_offset) - token->begin;
1076 }
1077
1078 token->type = MyCSS_TOKEN_TYPE_UNICODE_RANGE;
1079 size_t begin = token->begin + token->length;
1080
1081 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1082
1083 // character
1084 token->length = 1;
1085 token->begin = begin;
1086 token->type = MyCSS_TOKEN_TYPE_DELIM;
1087
1088 MyCSS_TOKEN_READY_CALLBACK_FUNCTION(entry, token);
1089 return css_offset;
1090 }
1091
1092
1093
1094