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