php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
encode.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2019-2024 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
11
12
13#define LXB_ENCODING_ENCODE_APPEND(ctx, cp) \
14 do { \
15 if ((ctx)->buffer_used == (ctx)->buffer_length) { \
16 return LXB_STATUS_SMALL_BUFFER; \
17 } \
18 \
19 (ctx)->buffer_out[(ctx)->buffer_used++] = (lxb_char_t) cp; \
20 } \
21 while (0)
22
23#define LXB_ENCODING_ENCODE_APPEND_P(ctx, cp) \
24 do { \
25 if ((ctx)->buffer_used == (ctx)->buffer_length) { \
26 *cps = p; \
27 return LXB_STATUS_SMALL_BUFFER; \
28 } \
29 \
30 (ctx)->buffer_out[(ctx)->buffer_used++] = (lxb_char_t) cp; \
31 } \
32 while (0)
33
34#define LXB_ENCODING_ENCODE_ERROR(ctx) \
35 do { \
36 if (ctx->replace_to == NULL) { \
37 return LXB_STATUS_ERROR; \
38 } \
39 \
40 if ((ctx->buffer_used + ctx->replace_len) > ctx->buffer_length) { \
41 return LXB_STATUS_SMALL_BUFFER; \
42 } \
43 \
44 memcpy(&ctx->buffer_out[ctx->buffer_used], ctx->replace_to, \
45 ctx->replace_len); \
46 \
47 ctx->buffer_used += ctx->replace_len; \
48 } \
49 while (0)
50
51#define LXB_ENCODING_ENCODE_ERROR_P(ctx) \
52 do { \
53 if (ctx->replace_to == NULL) { \
54 *cps = p; \
55 return LXB_STATUS_ERROR; \
56 } \
57 \
58 if ((ctx->buffer_used + ctx->replace_len) > ctx->buffer_length) { \
59 *cps = p; \
60 return LXB_STATUS_SMALL_BUFFER; \
61 } \
62 \
63 memcpy(&ctx->buffer_out[ctx->buffer_used], ctx->replace_to, \
64 ctx->replace_len); \
65 \
66 ctx->buffer_used += ctx->replace_len; \
67 } \
68 while (0)
69
70#define LXB_ENCODING_ENCODE_SINGLE_BYTE(table, table_size) \
71 do { \
72 lxb_codepoint_t cp; \
73 const lxb_codepoint_t *p = *cps; \
74 const lexbor_shs_hash_t *hash; \
75 \
76 for (; p < end; p++) { \
77 cp = *p; \
78 \
79 if (cp < 0x80) { \
80 LXB_ENCODING_ENCODE_APPEND_P(ctx, cp); \
81 continue; \
82 } \
83 \
84 hash = lexbor_shs_hash_get_static(table, table_size, cp); \
85 if (hash == NULL) { \
86 LXB_ENCODING_ENCODE_ERROR_P(ctx); \
87 continue; \
88 } \
89 \
90 LXB_ENCODING_ENCODE_APPEND_P(ctx, (uintptr_t) hash->value); \
91 } \
92 \
93 return LXB_STATUS_OK; \
94 } \
95 while (0)
96
97#define LXB_ENCODING_ENCODE_BYTE_SINGLE(table, table_size) \
98 const lexbor_shs_hash_t *hash; \
99 \
100 if (cp < 0x80) { \
101 *(*data)++ = (lxb_char_t) cp; \
102 return 1; \
103 } \
104 \
105 hash = lexbor_shs_hash_get_static(table, table_size, cp); \
106 if (hash == NULL) { \
107 return LXB_ENCODING_ENCODE_ERROR; \
108 } \
109 \
110 *(*data)++ = (lxb_char_t) (uintptr_t) hash->value; \
111 return 1
112
113
120
123 const lxb_codepoint_t *end)
124{
125 *cps = end;
126 return LXB_STATUS_ERROR;
127}
128
131 const lxb_codepoint_t *end)
132{
133 *cps = end;
134 return LXB_STATUS_ERROR;
135}
136
139 const lxb_codepoint_t *end)
140{
142 const lexbor_shs_hash_t *hash;
143
144 for (; *cps < end; (*cps)++) {
145 cp = **cps;
146
147 if (cp < 0x80) {
149 continue;
150 }
151
154 if (hash == NULL) {
156 continue;
157 }
158
159 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
161 }
162
163 ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value) / 157 + 0x81;
164
165 if ((((uint32_t) (uintptr_t) hash->value) % 157) < 0x3F) {
166 ctx->buffer_out[ ctx->buffer_used++ ] = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x40;
167 }
168 else {
169 ctx->buffer_out[ ctx->buffer_used++ ] = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x62;
170 }
171 }
172
173 return LXB_STATUS_OK;
174}
175
178 const lxb_codepoint_t *end)
179{
181 const lexbor_shs_hash_t *hash;
182
183 for (; *cps < end; (*cps)++) {
184 cp = **cps;
185
186 if (cp < 0x80) {
188 continue;
189 }
190
191 if (cp == 0x00A5) {
193 continue;
194 }
195
196 if (cp == 0x203E) {
198 continue;
199 }
200
201 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
202 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
204 }
205
206 ctx->buffer_out[ ctx->buffer_used++ ] = 0x8E;
207 ctx->buffer_out[ ctx->buffer_used++ ] = cp - 0xFF61 + 0xA1;
208
209 continue;
210 }
211
212 if (cp == 0x2212) {
213 cp = 0xFF0D;
214 }
215
218 if (hash == NULL) {
220 continue;
221 }
222
223 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
225 }
226
227 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 94 + 0xA1;
228 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 94 + 0xA1;
229 }
230
231 return LXB_STATUS_OK;
232}
233
236 const lxb_codepoint_t *end)
237{
239 const lexbor_shs_hash_t *hash;
240
241 for (; *cps < end; (*cps)++) {
242 cp = **cps;
243
244 if (cp < 0x80) {
246 continue;
247 }
248
251 if (hash == NULL) {
253 continue;
254 }
255
256 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
258 }
259
260 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
261 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 190 + 0x41;
262 }
263
264 return LXB_STATUS_OK;
265}
266
269 const lxb_codepoint_t *end)
270{
272 const lexbor_shs_hash_t *hash;
273
274 for (; *cps < end; (*cps)++) {
275 cp = **cps;
276
277 if (cp < 0x80) {
279 continue;
280 }
281
282 if (cp == 0xE5E5) {
284 continue;
285 }
286
287 if (cp == 0x20AC) {
289 continue;
290 }
291
294 if (hash == NULL) {
296 continue;
297 }
298
299 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
301 }
302
303 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (uintptr_t) hash->value / 190 + 0x81;
304
305 if (((lxb_char_t) (uintptr_t) hash->value % 190) < 0x3F) {
306 ctx->buffer_out[ ctx->buffer_used++ ] = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x40;
307 }
308 else {
309 ctx->buffer_out[ ctx->buffer_used++ ] = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x41;
310 }
311 }
312
313 return LXB_STATUS_OK;
314}
315
324
327 const lxb_codepoint_t *end)
328{
329 int8_t size;
330 unsigned state;
332 const lexbor_shs_hash_t *hash;
333
334 size = 0;
335 state = ctx->state;
336
337 for (; *cps < end; (*cps)++) {
338 cp = **cps;
339
340 begin:
341
342 switch (ctx->state) {
344 if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
345 goto failed;
346 }
347
348 if (cp < 0x80) {
350 continue;
351 }
352
353 if (cp == 0x00A5 || cp == 0x203E) {
354 /*
355 * Do not switch to the ROMAN stage with prepend code point
356 * to stream, add it immediately.
357 */
358 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
359 goto small_buffer;
360 }
361
363
364 if (cp == 0x00A5) {
365 memcpy(&ctx->buffer_out[ctx->buffer_used],
366 "\x1B\x28\x4A\x5C", 4);
367 ctx->buffer_used += 4;
368
369 continue;
370 }
371
372 memcpy(&ctx->buffer_out[ctx->buffer_used],
373 "\x1B\x28\x4A\x7E", 4);
374 ctx->buffer_used += 4;
375
376 continue;
377 }
378
379 break;
380
382 if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
383 goto failed;
384 }
385
386 if (cp < 0x80) {
387 switch (cp) {
388 case 0x005C:
389 case 0x007E:
390 break;
391
392 default:
394 continue;
395 }
396
397 /*
398 * Do not switch to the ANSI stage with prepend code point
399 * to stream, add it immediately.
400 */
401 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
402 goto small_buffer;
403 }
404
406
407 memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
408 ctx->buffer_used += 3;
409
410 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
411 continue;
412 }
413 else if (cp == 0x00A5) {
415 continue;
416 }
417 else if (cp == 0x203E) {
419 continue;
420 }
421
422 break;
423
425 if (cp < 0x80) {
426 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
427 goto small_buffer;
428 }
429
431
432 memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
433 ctx->buffer_used += 3;
434
435 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
436 continue;
437 }
438
439 if (cp == 0x00A5 || cp == 0x203E) {
440 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
441 goto small_buffer;
442 }
443
445
446 if (cp == 0x00A5) {
447 memcpy(&ctx->buffer_out[ctx->buffer_used],
448 "\x1B\x28\x4A\x5C", 4);
449 ctx->buffer_used += 4;
450
451 continue;
452 }
453
454 memcpy(&ctx->buffer_out[ctx->buffer_used],
455 "\x1B\x28\x4A\x7E", 4);
456 ctx->buffer_used += 4;
457
458 continue;
459 }
460
461 break;
462 }
463
464 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
465 goto small_buffer;
466 }
467
468 if (cp == 0x2212) {
469 cp = 0xFF0D;
470 }
471
472 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
474 }
475
478 if (hash == NULL) {
479 goto failed;
480 }
481
483 if ((ctx->buffer_used + 3) > ctx->buffer_length) {
484 goto small_buffer;
485 }
486
487 memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x24\x42", 3);
488 ctx->buffer_used += 3;
489
491 size += 3;
492
493 goto begin;
494 }
495
496 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 94 + 0x21;
497 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 94 + 0x21;
498
499 continue;
500
501 small_buffer:
502
503 ctx->state = state;
504 ctx->buffer_used -= size;
505
507
508 failed:
509
510 ctx->buffer_used -= size;
512 }
513
514 return LXB_STATUS_OK;
515}
516
519{
521 if ((ctx->buffer_used + 3) > ctx->buffer_length) {
523 }
524
525 memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
526 ctx->buffer_used += 3;
527 }
528
529 return LXB_STATUS_OK;
530}
531
539
547
555
563
571
579
587
595
603
611
619
627
635
643
651
654{
655 const lexbor_shs_hash_t *entry;
656
658
659 do {
660 if (entry->key == cp) {
661 if ((unsigned) ((uint32_t) (uintptr_t) entry->value - 8272) > (8835 - 8272)) {
662 return entry;
663 }
664 }
665
666 entry = &lxb_encoding_multi_hash_jis0208[entry->next];
667 }
668 while (entry != lxb_encoding_multi_hash_jis0208);
669
670 return NULL;
671}
672
675 const lxb_codepoint_t *end)
676{
677 uint32_t lead, trail;
679 const lexbor_shs_hash_t *hash;
680
681 for (; *cps < end; (*cps)++) {
682 cp = **cps;
683
684 if (cp <= 0x80) {
686 continue;
687 }
688
689 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
690 LXB_ENCODING_ENCODE_APPEND(ctx, cp - 0xFF61 + 0xA1);
691 continue;
692 }
693
694 switch (cp) {
695 case 0x00A5:
697 continue;
698
699 case 0x203E:
701 continue;
702
703 case 0x2212:
704 cp = 0xFF0D;
705 break;
706 }
707
709 if (hash == NULL) {
711 continue;
712 }
713
714 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
716 }
717
718 lead = (uint32_t) (uintptr_t) hash->value / 188;
719 trail = (uint32_t) (uintptr_t) hash->value % 188;
720
721 ctx->buffer_out[ctx->buffer_used++ ] = lead + ((lead < 0x1F) ? 0x81 : 0xC1);
722 ctx->buffer_out[ctx->buffer_used++ ] = trail + ((trail < 0x3F) ? 0x40 : 0x41);
723 }
724
725 return LXB_STATUS_OK;
726}
727
728lxb_inline void
731{
732 if (is_be) {
733 ctx->buffer_out[ctx->buffer_used++] = cp >> 8;
734 ctx->buffer_out[ctx->buffer_used++] = cp & 0x00FF;
735
736 return;
737 }
738
739 ctx->buffer_out[ctx->buffer_used++] = cp & 0x00FF;
740 ctx->buffer_out[ctx->buffer_used++] = cp >> 8;
741}
742
743lxb_inline int8_t
745 const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
746{
748
749 for (; *cps < end; (*cps)++) {
750 cp = **cps;
751
752 if (cp < 0x10000) {
753 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
755 }
756
758
759 continue;
760 }
761
762 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
764 }
765
766 cp -= 0x10000;
767
768 lxb_encoding_encode_utf_16_write(ctx, is_be, (0xD800 | (cp >> 0x0A)));
769 lxb_encoding_encode_utf_16_write(ctx, is_be, (0xDC00 | (cp & 0x03FF)));
770 }
771
772 return LXB_STATUS_OK;
773}
774
777 const lxb_codepoint_t *end)
778{
779 return lxb_encoding_encode_utf_16(ctx, true, cps, end);
780}
781
784 const lxb_codepoint_t *end)
785{
786 return lxb_encoding_encode_utf_16(ctx, false, cps, end);
787}
788
791 const lxb_codepoint_t *end)
792{
794 const lxb_codepoint_t *p = *cps;
795
796 for (; p < end; p++) {
797 cp = *p;
798
799 if (cp < 0x80) {
800 if ((ctx->buffer_used + 1) > ctx->buffer_length) {
801 *cps = p;
802
804 }
805
806 /* 0xxxxxxx */
807 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
808 }
809 else if (cp < 0x800) {
810 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
811 *cps = p;
812
814 }
815
816 /* 110xxxxx 10xxxxxx */
817 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xC0 | (cp >> 6 ));
818 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | (cp & 0x3F));
819 }
820 else if (cp < 0x10000) {
821 if ((ctx->buffer_used + 3) > ctx->buffer_length) {
822 *cps = p;
823
825 }
826
827 /* 1110xxxx 10xxxxxx 10xxxxxx */
828 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xE0 | ((cp >> 12)));
829 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
830 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ( cp & 0x3F));
831 }
832 else if (cp < 0x110000) {
833 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
834 *cps = p;
835
837 }
838
839 /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
840 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xF0 | ( cp >> 18));
841 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 12) & 0x3F));
842 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
843 ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ( cp & 0x3F));
844 }
845 else {
846 *cps = p;
848 }
849 }
850
851 *cps = p;
852
853 return LXB_STATUS_OK;
854}
855
856lxb_inline uint32_t
858{
859 size_t mid, left, right;
860 const lxb_encoding_range_index_t *range;
861
862 if (cp == 0xE7C7) {
863 return 7457;
864 }
865
866 left = 0;
869
870 /* Some compilers say about uninitialized mid */
871 mid = 0;
872
873 while (left < right) {
874 mid = left + (right - left) / 2;
875
876 if (range[mid].codepoint < cp) {
877 left = mid + 1;
878
879 if (left < right && range[left].codepoint > cp) {
880 break;
881 }
882 }
883 else if (range[mid].codepoint > cp) {
884 right = mid - 1;
885
886 if (right > 0 && range[right].codepoint <= cp) {
887 mid = right;
888 break;
889 }
890 }
891 else {
892 break;
893 }
894 }
895
896 return range[mid].index + cp - range[mid].codepoint;
897}
898
901 const lxb_codepoint_t *end)
902{
903 uint32_t index;
905 const lexbor_shs_hash_t *hash;
906
907 for (; *cps < end; (*cps)++) {
908 cp = **cps;
909
910 if (cp < 0x80) {
912 continue;
913 }
914
915 if (cp == 0xE5E5) {
917 continue;
918 }
919
922 if (hash != NULL) {
923 if ((ctx->buffer_used + 2) > ctx->buffer_length) {
925 }
926
927 ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
928
929 if (((uint32_t) (uintptr_t) hash->value % 190) < 0x3F) {
930 ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value % 190) + 0x40;
931 }
932 else {
933 ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value % 190) + 0x41;
934 }
935
936 continue;
937 }
938
939 if ((ctx->buffer_used + 4) > ctx->buffer_length) {
941 }
942
944
945 ctx->buffer_out[ ctx->buffer_used++ ] = (index / (10 * 126 * 10)) + 0x81;
946 ctx->buffer_out[ ctx->buffer_used++ ] = ((index % (10 * 126 * 10)) / (10 * 126)) + 0x30;
947
948 index = (index % (10 * 126 * 10)) % (10 * 126);
949
950 ctx->buffer_out[ ctx->buffer_used++ ] = (index / 10) + 0x81;
951 ctx->buffer_out[ ctx->buffer_used++ ] = (index % 10) + 0x30;
952 }
953
954 return LXB_STATUS_OK;
955}
956
964
967 const lxb_codepoint_t *end)
968{
969 *cps = end;
970 return LXB_STATUS_ERROR;
971}
972
980
988
996
1004
1012
1020
1028
1036
1044
1052
1060
1063 const lxb_codepoint_t *end)
1064{
1066
1067 for (; *cps < end; (*cps)++) {
1068 cp = **cps;
1069
1070 if (cp < 0x80) {
1072 }
1073 else if (cp >= 0xF780 && cp <= 0xF7FF) {
1074 LXB_ENCODING_ENCODE_APPEND(ctx, (cp - 0xF780 + 0x80));
1075 }
1076 else {
1078 }
1079 }
1080
1081 return LXB_STATUS_OK;
1082}
1083
1084/*
1085 * Single
1086 */
1087int8_t
1093
1094int8_t
1100
1101int8_t
1107
1108int8_t
1111{
1112 const lexbor_shs_hash_t *hash;
1113
1114 if (cp < 0x80) {
1115 *(*data)++ = (lxb_char_t) cp;
1116
1117 return 1;
1118 }
1119
1122 if (hash == NULL) {
1124 }
1125
1126 if ((*data + 2) > end) {
1128 }
1129
1130 *(*data)++ = ((uint32_t) (uintptr_t) hash->value) / 157 + 0x81;
1131
1132 if ((((uint32_t) (uintptr_t) hash->value) % 157) < 0x3F) {
1133 *(*data)++ = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x40;
1134 }
1135 else {
1136 *(*data)++ = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x62;
1137 }
1138
1139 return 2;
1140}
1141
1142int8_t
1145{
1146 const lexbor_shs_hash_t *hash;
1147
1148 if (cp < 0x80) {
1149 *(*data)++ = (lxb_char_t) cp;
1150
1151 return 1;
1152 }
1153
1154 if (cp == 0x00A5) {
1155 *(*data)++ = 0x5C;
1156
1157 return 1;
1158 }
1159
1160 if (cp == 0x203E) {
1161 *(*data)++ = 0x7E;
1162
1163 return 1;
1164 }
1165
1166 if ((*data + 2) > end) {
1168 }
1169
1170 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1171 *(*data)++ = 0x8E;
1172 *(*data)++ = cp - 0xFF61 + 0xA1;
1173
1174 return 2;
1175 }
1176
1177 if (cp == 0x2212) {
1178 cp = 0xFF0D;
1179 }
1180
1183 if (hash == NULL) {
1185 }
1186
1187 *(*data)++ = (uint32_t) (uintptr_t) hash->value / 94 + 0xA1;
1188 *(*data)++ = (uint32_t) (uintptr_t) hash->value % 94 + 0xA1;
1189
1190 return 2;
1191}
1192
1193int8_t
1196{
1197 const lexbor_shs_hash_t *hash;
1198
1199 if (cp < 0x80) {
1200 *(*data)++ = (lxb_char_t) cp;
1201
1202 return 1;
1203 }
1204
1205 if ((*data + 2) > end) {
1207 }
1208
1211 if (hash == NULL) {
1213 }
1214
1215 *(*data)++ = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
1216 *(*data)++ = (uint32_t) (uintptr_t) hash->value % 190 + 0x41;
1217
1218 return 2;
1219}
1220
1221int8_t
1224{
1225 const lexbor_shs_hash_t *hash;
1226
1227 if (cp < 0x80) {
1228 *(*data)++ = (lxb_char_t) cp;
1229
1230 return 1;
1231 }
1232
1233 if (cp == 0xE5E5) {
1235 }
1236
1237 if (cp == 0x20AC) {
1238 *(*data)++ = 0x80;
1239
1240 return 1;
1241 }
1242
1245 if (hash != NULL) {
1246 if ((*data + 2) > end) {
1248 }
1249
1250 *(*data)++ = (lxb_char_t) (uintptr_t) hash->value / 190 + 0x81;
1251
1252 if (((lxb_char_t) (uintptr_t) hash->value % 190) < 0x3F) {
1253 *(*data)++ = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x40;
1254 }
1255 else {
1256 *(*data)++ = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x41;
1257 }
1258
1259 return 2;
1260 }
1261
1263}
1264
1265int8_t
1272
1273int8_t
1276{
1277 int8_t size;
1278 unsigned state;
1279 const lexbor_shs_hash_t *hash;
1280
1281 size = 0;
1282 state = ctx->state;
1283
1284begin:
1285
1286 switch (ctx->state) {
1288 if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
1289 goto failed;
1290 }
1291
1292 if (cp < 0x80) {
1293 *(*data)++ = (lxb_char_t) cp;
1294
1295 return size + 1;
1296 }
1297
1298 if (cp == 0x00A5 || cp == 0x203E) {
1299 /*
1300 * Do not switch to the ROMAN stage with prepend code point
1301 * to stream, add it immediately.
1302 */
1303 if ((*data + 4) > end) {
1304 goto small_buffer;
1305 }
1306
1308
1309 if (cp == 0x00A5) {
1310 memcpy(*data, "\x1B\x28\x4A\x5C", 4);
1311 *data = *data + 4;
1312
1313 return size + 4;
1314 }
1315
1316 memcpy(*data, "\x1B\x28\x4A\x7E", 4);
1317 *data = *data + 4;
1318
1319 return size + 4;
1320 }
1321
1322 break;
1323
1325 if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
1326 goto failed;
1327 }
1328
1329 if (cp < 0x80) {
1330 switch (cp) {
1331 case 0x005C:
1332 case 0x007E:
1333 break;
1334
1335 default:
1336 *(*data)++ = (lxb_char_t) cp;
1337 return size + 1;
1338 }
1339
1340 /*
1341 * Do not switch to the ANSI stage with prepend code point
1342 * to stream, add it immediately.
1343 */
1344 if ((*data + 4) > end) {
1345 goto small_buffer;
1346 }
1347
1349
1350 memcpy(*data, "\x1B\x28\x42", 3);
1351 *data = *data + 3;
1352
1353 *(*data)++ = (lxb_char_t) cp;
1354
1355 return size + 4;
1356 }
1357 else if (cp == 0x00A5) {
1358 *(*data)++ = 0x5C;
1359 return size + 1;
1360 }
1361 else if (cp == 0x203E) {
1362 *(*data)++ = 0x7E;
1363 return size + 1;
1364 }
1365
1366 break;
1367
1369 if (cp < 0x80) {
1370 if ((*data + 4) > end) {
1371 goto small_buffer;
1372 }
1373
1375
1376 memcpy(*data, "\x1B\x28\x42", 3);
1377 *data = *data + 3;
1378
1379 *(*data)++ = (lxb_char_t) cp;
1380
1381 return size + 4;
1382 }
1383
1384 if (cp == 0x00A5 || cp == 0x203E) {
1385 if ((*data + 4) > end) {
1386 goto small_buffer;
1387 }
1388
1390
1391 if (cp == 0x00A5) {
1392 memcpy(*data, "\x1B\x28\x4A\x5C", 4);
1393 *data = *data + 4;
1394
1395 return size + 4;
1396 }
1397
1398 memcpy(*data, "\x1B\x28\x4A\x7E", 4);
1399 *data = *data + 4;
1400
1401 return size + 4;
1402 }
1403
1404 break;
1405 }
1406
1407 if ((*data + 2) > end) {
1408 goto small_buffer;
1409 }
1410
1411 if (cp == 0x2212) {
1412 cp = 0xFF0D;
1413 }
1414
1415 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1417 }
1418
1421 if (hash == NULL) {
1422 goto failed;
1423 }
1424
1426 if ((*data + 3) > end) {
1427 goto small_buffer;
1428 }
1429
1430 memcpy(*data, "\x1B\x24\x42", 3);
1431 *data = *data + 3;
1432
1434 size += 3;
1435
1436 goto begin;
1437 }
1438
1439 *(*data)++ = (uint32_t) (uintptr_t) hash->value / 94 + 0x21;
1440 *(*data)++ = (uint32_t) (uintptr_t) hash->value % 94 + 0x21;
1441
1442 return size + 2;
1443
1444small_buffer:
1445
1446 ctx->state = state;
1447 *data = *data - size;
1448
1450
1451failed:
1452
1453 *data = *data - size;
1454
1456}
1457
1458int8_t
1460 lxb_char_t **data, const lxb_char_t *end)
1461{
1463 if ((*data + 3) > end) {
1465 }
1466
1467 memcpy(*data, "\x1B\x28\x42", 3);
1468 *data = *data + 3;
1469
1471
1472 return 3;
1473 }
1474
1475 return 0;
1476}
1477
1478int8_t
1485
1486int8_t
1493
1494int8_t
1501
1502int8_t
1509
1510int8_t
1517
1518int8_t
1525
1526int8_t
1533
1534int8_t
1541
1542int8_t
1549
1550int8_t
1557
1558int8_t
1565
1566int8_t
1573
1574int8_t
1581
1582int8_t
1589
1590int8_t
1597
1598int8_t
1601{
1602 uint32_t lead, trail;
1603 const lexbor_shs_hash_t *hash;
1604
1605 if (cp <= 0x80) {
1606 *(*data)++ = (lxb_char_t) cp;
1607
1608 return 1;
1609 }
1610
1611 if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1612 *(*data)++ = cp - 0xFF61 + 0xA1;
1613
1614 return 1;
1615 }
1616
1617 switch (cp) {
1618 case 0x00A5:
1619 *(*data)++ = 0x5C;
1620 return 1;
1621
1622 case 0x203E:
1623 *(*data)++ = 0x7E;
1624 return 1;
1625
1626 case 0x2212:
1627 cp = 0xFF0D;
1628 break;
1629 }
1630
1632 if (hash == NULL) {
1634 }
1635
1636 if ((*data + 2) > end) {
1638 }
1639
1640 lead = (uint32_t) (uintptr_t) hash->value / 188;
1641 trail = (uint32_t) (uintptr_t) hash->value % 188;
1642
1643 *(*data)++ = lead + ((lead < 0x1F) ? 0x81 : 0xC1);
1644 *(*data)++ = trail + ((trail < 0x3F) ? 0x40 : 0x41);
1645
1646 return 2;
1647}
1648
1649lxb_inline void
1652{
1653 if (is_be) {
1654 *(*data)++ = cp >> 8;
1655 *(*data)++ = cp & 0x00FF;
1656
1657 return;
1658 }
1659
1660 *(*data)++ = cp & 0x00FF;
1661 *(*data)++ = cp >> 8;
1662}
1663
1664lxb_inline int8_t
1667{
1668 if ((*data + 2) > end) {
1670 }
1671
1672 if (cp < 0x10000) {
1674
1675 return 2;
1676 }
1677
1678 if ((*data + 4) > end) {
1680 }
1681
1682 cp -= 0x10000;
1683
1684 lxb_encoding_encode_utf_16_write_single(is_be, data, (0xD800 | (cp >> 0x0A)));
1685 lxb_encoding_encode_utf_16_write_single(is_be, data, (0xDC00 | (cp & 0x03FF)));
1686
1687 return 4;
1688}
1689
1690int8_t
1696
1697int8_t
1703
1704int8_t
1707{
1708 if (cp < 0x80) {
1709 /* 0xxxxxxx */
1710 *(*data)++ = (lxb_char_t) cp;
1711
1712 return 1;
1713 }
1714
1715 if (cp < 0x800) {
1716 if ((*data + 2) > end) {
1718 }
1719
1720 /* 110xxxxx 10xxxxxx */
1721 *(*data)++ = (lxb_char_t) (0xC0 | (cp >> 6 ));
1722 *(*data)++ = (lxb_char_t) (0x80 | (cp & 0x3F));
1723
1724 return 2;
1725 }
1726
1727 if (cp < 0x10000) {
1728 if ((*data + 3) > end) {
1730 }
1731
1732 /* 1110xxxx 10xxxxxx 10xxxxxx */
1733 *(*data)++ = (lxb_char_t) (0xE0 | ((cp >> 12)));
1734 *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
1735 *(*data)++ = (lxb_char_t) (0x80 | ( cp & 0x3F));
1736
1737 return 3;
1738 }
1739
1740 if (cp < 0x110000) {
1741 if ((*data + 4) > end) {
1743 }
1744
1745 /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
1746 *(*data)++ = (lxb_char_t) (0xF0 | ( cp >> 18));
1747 *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 12) & 0x3F));
1748 *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
1749 *(*data)++ = (lxb_char_t) (0x80 | ( cp & 0x3F));
1750
1751 return 4;
1752 }
1753
1755}
1756
1757int8_t
1759{
1760 if (cp < 0x80) {
1761 return 1;
1762 }
1763 else if (cp < 0x800) {
1764 return 2;
1765 }
1766 else if (cp < 0x10000) {
1767 return 3;
1768 }
1769 else if (cp < 0x110000) {
1770 return 4;
1771 }
1772
1773 return 0;
1774}
1775
1776int8_t
1779{
1780 uint32_t index;
1781 const lexbor_shs_hash_t *hash;
1782
1783 if (cp < 0x80) {
1784 *(*data)++ = (lxb_char_t) cp;
1785
1786 return 1;
1787 }
1788
1789 if (cp == 0xE5E5) {
1791 }
1792
1795 if (hash != NULL) {
1796 if ((*data + 2) > end) {
1798 }
1799
1800 *(*data)++ = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
1801
1802 if (((uint32_t) (uintptr_t) hash->value % 190) < 0x3F) {
1803 *(*data)++ = ((uint32_t) (uintptr_t) hash->value % 190) + 0x40;
1804 }
1805 else {
1806 *(*data)++ = ((uint32_t) (uintptr_t) hash->value % 190) + 0x41;
1807 }
1808
1809 return 2;
1810 }
1811
1812 if ((*data + 4) > end) {
1814 }
1815
1817
1818 *(*data)++ = (index / (10 * 126 * 10)) + 0x81;
1819 *(*data)++ = ((index % (10 * 126 * 10)) / (10 * 126)) + 0x30;
1820
1821 index = (index % (10 * 126 * 10)) % (10 * 126);
1822
1823 *(*data)++ = (index / 10) + 0x81;
1824 *(*data)++ = (index % 10) + 0x30;
1825
1826 return 4;
1827}
1828
1829int8_t
1836
1837int8_t
1844
1845int8_t
1852
1853int8_t
1860
1861int8_t
1868
1869int8_t
1876
1877int8_t
1884
1885int8_t
1892
1893int8_t
1900
1901int8_t
1908
1909int8_t
1916
1917int8_t
1924
1925int8_t
1932
1933int8_t
1936{
1937 if (cp < 0x80) {
1938 *(*data)++ = (lxb_char_t) cp;
1939
1940 return 1;
1941 }
1942
1943 if (cp >= 0xF780 && cp <= 0xF7FF) {
1944 *(*data)++ = (lxb_char_t) (cp - 0xF780 + 0x80);
1945
1946 return 1;
1947 }
1948
1950}
LXB_API const lexbor_shs_hash_t lxb_encoding_multi_hash_big5[23033]
Definition big5.c:19805
@ LXB_STATUS_SMALL_BUFFER
Definition base.h:64
@ LXB_STATUS_OK
Definition base.h:49
@ LXB_STATUS_ERROR
Definition base.h:50
int begin
Definition eaw_table.h:20
int8_t lxb_encoding_encode_undefined_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1102
lxb_status_t lxb_encoding_encode_windows_1253(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:998
lxb_status_t lxb_encoding_encode_iso_8859_3(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:581
lxb_status_t lxb_encoding_encode_windows_874(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1046
#define LXB_ENCODING_ENCODE_BYTE_SINGLE(table, table_size)
Definition encode.c:97
int8_t lxb_encoding_encode_default_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1088
int8_t lxb_encoding_encode_iso_8859_14_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1495
lxb_status_t lxb_encoding_encode_windows_1254(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1006
lxb_status_t lxb_encoding_encode_iso_8859_14(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:549
int8_t lxb_encoding_encode_iso_8859_5_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1543
int8_t lxb_encoding_encode_iso_8859_15_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1503
lxb_status_t lxb_encoding_encode_iso_8859_7(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:613
lxb_inline int8_t lxb_encoding_encode_utf_16_single(lxb_encoding_encode_t *ctx, bool is_be, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1665
lxb_status_t lxb_encoding_encode_koi8_u(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:645
int8_t lxb_encoding_encode_windows_1258_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1910
int8_t lxb_encoding_encode_replacement_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1838
lxb_status_t lxb_encoding_encode_iso_8859_6(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:605
lxb_inline void lxb_encoding_encode_utf_16_write_single(bool is_be, lxb_char_t **data, lxb_codepoint_t cp)
Definition encode.c:1650
lxb_status_t lxb_encoding_encode_iso_8859_8(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:621
lxb_inline const lexbor_shs_hash_t * lxb_encoding_encode_shift_jis_index(lxb_codepoint_t cp)
Definition encode.c:653
lxb_status_t lxb_encoding_encode_windows_1251(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:982
int8_t lxb_encoding_encode_iso_8859_10_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1479
int8_t lxb_encoding_encode_x_mac_cyrillic_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1926
lxb_inline int8_t lxb_encoding_encode_utf_16(lxb_encoding_encode_t *ctx, bool is_be, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:744
lxb_status_t lxb_encoding_encode_iso_8859_15(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:557
lxb_status_t lxb_encoding_encode_macintosh(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:958
lxb_status_t lxb_encoding_encode_x_mac_cyrillic(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1054
int8_t lxb_encoding_encode_utf_8_length(lxb_codepoint_t cp)
Definition encode.c:1758
lxb_status_t lxb_encoding_encode_iso_8859_10(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:533
int8_t lxb_encoding_encode_macintosh_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1830
lxb_status_t lxb_encoding_encode_big5(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:138
lxb_status_t lxb_encoding_encode_shift_jis(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:674
lxb_status_t lxb_encoding_encode_windows_1255(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1014
int8_t lxb_encoding_encode_windows_1255_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1886
lxb_inline void lxb_encoding_encode_utf_16_write(lxb_encoding_encode_t *ctx, bool is_be, lxb_codepoint_t cp)
Definition encode.c:729
lxb_status_t lxb_encoding_encode_utf_8(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:790
int8_t lxb_encoding_encode_windows_1250_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1846
lxb_status_t lxb_encoding_encode_windows_1252(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:990
lxb_status_t lxb_encoding_encode_default(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:115
lxb_status_t lxb_encoding_encode_iso_8859_16(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:565
lxb_status_t lxb_encoding_encode_gbk(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:268
lxb_status_t lxb_encoding_encode_iso_2022_jp(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:326
lxb_status_t lxb_encoding_encode_windows_1256(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1022
lxb_status_t lxb_encoding_encode_replacement(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:966
lxb_status_t lxb_encoding_encode_utf_16le(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:783
int8_t lxb_encoding_encode_windows_1251_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1854
int8_t lxb_encoding_encode_windows_1257_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1902
lxb_status_t lxb_encoding_encode_windows_1258(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1038
#define LXB_ENCODING_ENCODE_SINGLE_BYTE(table, table_size)
Definition encode.c:70
int8_t lxb_encoding_encode_utf_16be_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1691
int8_t lxb_encoding_encode_ibm866_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1266
int8_t lxb_encoding_encode_euc_jp_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1143
lxb_status_t lxb_encoding_encode_undefined(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:130
#define LXB_ENCODING_ENCODE_ERROR(ctx)
Definition encode.c:34
int8_t lxb_encoding_encode_windows_1254_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1878
int8_t lxb_encoding_encode_koi8_u_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1591
int8_t lxb_encoding_encode_windows_1256_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1894
int8_t lxb_encoding_encode_windows_1253_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1870
int8_t lxb_encoding_encode_auto_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1095
int8_t lxb_encoding_encode_iso_8859_13_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1487
int8_t lxb_encoding_encode_koi8_r_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1583
lxb_status_t lxb_encoding_encode_gb18030(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:900
int8_t lxb_encoding_encode_iso_8859_2_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1519
int8_t lxb_encoding_encode_iso_8859_16_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1511
int8_t lxb_encoding_encode_iso_8859_7_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1559
int8_t lxb_encoding_encode_iso_8859_8_i_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1575
int8_t lxb_encoding_encode_x_user_defined_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1934
lxb_status_t lxb_encoding_encode_x_user_defined(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1062
#define LXB_ENCODING_ENCODE_APPEND(ctx, cp)
Definition encode.c:13
int8_t lxb_encoding_encode_shift_jis_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1599
lxb_inline uint32_t lxb_encoding_encode_gb18030_range(lxb_codepoint_t cp)
Definition encode.c:857
int8_t lxb_encoding_encode_iso_8859_4_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1535
lxb_status_t lxb_encoding_encode_euc_jp(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:177
int8_t lxb_encoding_encode_euc_kr_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1194
int8_t lxb_encoding_encode_gb18030_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1777
int8_t lxb_encoding_encode_windows_1252_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1862
int8_t lxb_encoding_encode_iso_8859_8_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1567
lxb_status_t lxb_encoding_encode_auto(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:122
lxb_status_t lxb_encoding_encode_utf_16be(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:776
int8_t lxb_encoding_encode_gbk_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1222
lxb_status_t lxb_encoding_encode_windows_1257(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:1030
int8_t lxb_encoding_encode_iso_8859_6_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1551
lxb_status_t lxb_encoding_encode_koi8_r(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:637
lxb_status_t lxb_encoding_encode_ibm866(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:317
lxb_status_t lxb_encoding_encode_windows_1250(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:974
lxb_status_t lxb_encoding_encode_iso_8859_4(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:589
int8_t lxb_encoding_encode_utf_8_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1705
int8_t lxb_encoding_encode_iso_2022_jp_eof_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end)
Definition encode.c:1459
int8_t lxb_encoding_encode_big5_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1109
int8_t lxb_encoding_encode_iso_8859_3_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1527
lxb_status_t lxb_encoding_encode_iso_8859_13(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:541
lxb_status_t lxb_encoding_encode_iso_8859_5(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:597
int8_t lxb_encoding_encode_iso_2022_jp_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1274
lxb_status_t lxb_encoding_encode_iso_8859_8_i(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:629
int8_t lxb_encoding_encode_utf_16le_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1698
lxb_status_t lxb_encoding_encode_iso_8859_2(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:573
int8_t lxb_encoding_encode_windows_874_single(lxb_encoding_encode_t *ctx, lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
Definition encode.c:1918
lxb_status_t lxb_encoding_encode_iso_2022_jp_eof(lxb_encoding_encode_t *ctx)
Definition encode.c:518
lxb_status_t lxb_encoding_encode_euc_kr(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
Definition encode.c:235
@ LXB_ENCODING_ENCODE_SMALL_BUFFER
Definition base.h:48
@ LXB_ENCODING_ENCODE_2022_JP_ROMAN
Definition base.h:70
@ LXB_ENCODING_ENCODE_2022_JP_JIS0208
Definition base.h:71
@ LXB_ENCODING_ENCODE_2022_JP_ASCII
Definition base.h:69
LXB_API const lexbor_shs_hash_t lxb_encoding_multi_hash_euc_kr[30109]
Definition euc_kr.c:23773
new_type size
Definition ffi.c:4365
memcpy(ptr1, ptr2, size)
LXB_API const lexbor_shs_hash_t lxb_encoding_multi_hash_gb18030[23941]
Definition gb18030.c:23963
#define NULL
Definition gdcache.h:45
hash(string $algo, string $data, bool $binary=false, array $options=[])
Definition hash.stub.php:12
LXB_API const lxb_encoding_multi_index_t lxb_encoding_multi_index_iso_2022_jp_katakana[63]
LXB_API const lexbor_shs_hash_t lxb_encoding_multi_hash_jis0208[11349]
Definition jis0208.c:11127
lu_byte right
Definition minilua.c:4267
lu_byte left
Definition minilua.c:4266
#define LXB_ENCODING_MULTI_HASH_GB18030_SIZE
Definition multi.h:28
#define LXB_ENCODING_MULTI_HASH_EUC_KR_SIZE
Definition multi.h:27
#define LXB_ENCODING_MULTI_HASH_BIG5_SIZE
Definition multi.h:26
#define LXB_ENCODING_MULTI_HASH_JIS0208_SIZE
Definition multi.h:30
unsigned const char * end
Definition php_ffi.h:51
zend_constant * data
LXB_API const lxb_encoding_range_index_t lxb_encoding_range_index_gb18030[207]
Definition range.c:16
#define LXB_ENCODING_RANGE_INDEX_GB18030_SIZE
Definition range.h:24
p
Definition session.c:1105
lxb_inline const lexbor_shs_hash_t * lexbor_shs_hash_get_static(const lexbor_shs_hash_t *table, const size_t table_size, const uint32_t key)
Definition shs.h:53
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_16[414]
Definition single.c:5391
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_14[408]
Definition single.c:4630
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_koi8_u[381]
Definition single.c:8766
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1255[468]
Definition single.c:11406
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1254[355]
Definition single.c:11047
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_koi8_r[487]
Definition single.c:8275
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_13[346]
Definition single.c:4280
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_5[344]
Definition single.c:6878
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1251[363]
Definition single.c:9943
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_6[344]
Definition single.c:7226
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_x_mac_cyrillic[374]
Definition single.c:13373
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1256[357]
Definition single.c:11878
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_8[348]
Definition single.c:7923
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_4[344]
Definition single.c:6530
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1258[406]
Definition single.c:12599
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_7[345]
Definition single.c:7574
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_2[369]
Definition single.c:5809
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1252[374]
Definition single.c:10310
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1250[433]
Definition single.c:9506
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_10[344]
Definition single.c:3932
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_ibm866[345]
Definition single.c:3583
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_874[360]
Definition single.c:13009
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_15[345]
Definition single.c:5042
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_macintosh[351]
Definition single.c:9151
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1253[355]
Definition single.c:10688
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_iso_8859_3[344]
Definition single.c:6182
LXB_API const lexbor_shs_hash_t lxb_encoding_single_hash_windows_1257[356]
Definition single.c:12239
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_15_SIZE
Definition single.h:30
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_13_SIZE
Definition single.h:28
#define LXB_ENCODING_SINGLE_HASH_IBM866_SIZE
Definition single.h:26
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1255_SIZE
Definition single.h:47
#define LXB_ENCODING_SINGLE_HASH_KOI8_R_SIZE
Definition single.h:39
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_16_SIZE
Definition single.h:31
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1252_SIZE
Definition single.h:44
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1256_SIZE
Definition single.h:48
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_3_SIZE
Definition single.h:33
#define LXB_ENCODING_SINGLE_HASH_MACINTOSH_SIZE
Definition single.h:41
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1254_SIZE
Definition single.h:46
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1253_SIZE
Definition single.h:45
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_4_SIZE
Definition single.h:34
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_7_SIZE
Definition single.h:37
#define LXB_ENCODING_SINGLE_HASH_KOI8_U_SIZE
Definition single.h:40
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1250_SIZE
Definition single.h:42
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_874_SIZE
Definition single.h:51
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_6_SIZE
Definition single.h:36
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_14_SIZE
Definition single.h:29
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1258_SIZE
Definition single.h:50
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_5_SIZE
Definition single.h:35
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_2_SIZE
Definition single.h:32
#define LXB_ENCODING_SINGLE_HASH_X_MAC_CYRILLIC_SIZE
Definition single.h:52
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1251_SIZE
Definition single.h:43
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_10_SIZE
Definition single.h:27
#define LXB_ENCODING_SINGLE_HASH_WINDOWS_1257_SIZE
Definition single.h:49
#define LXB_ENCODING_SINGLE_HASH_ISO_8859_8_SIZE
Definition single.h:38
uint32_t value
Definition shs.h:30
uint32_t key
Definition shs.h:29
uint32_t next
Definition shs.h:32
lxb_char_t * buffer_out
Definition base.h:142
size_t buffer_length
Definition base.h:143
unsigned int lxb_status_t
Definition types.h:28
#define lxb_inline
Definition types.h:21
unsigned char lxb_char_t
Definition types.h:27
uint32_t lxb_codepoint_t
Definition types.h:26