php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
encoding.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2019 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7#ifndef LEXBOR_ENCODING_ENCODING_H
8#define LEXBOR_ENCODING_ENCODING_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14
16#include "lexbor/encoding/res.h"
19
20#include "lexbor/core/shs.h"
21
22
23/*
24 * Before searching will be removed any leading and trailing
25 * ASCII whitespace in name.
26 */
28lxb_encoding_data_by_pre_name(const lxb_char_t *name, size_t length);
29
30
31/*
32 * Inline functions
33 */
34
35/*
36 * Encode
37 */
40 const lxb_encoding_data_t *encoding_data,
41 lxb_char_t *buffer_out, size_t buffer_length)
42{
43 if (encoding_data == NULL) {
45 }
46
48
49 encode->buffer_out = buffer_out;
50 encode->buffer_length = buffer_length;
51 encode->encoding_data = encoding_data;
52
53 return LXB_STATUS_OK;
54}
55
65
71
72lxb_inline void
74 lxb_char_t *buffer_out, size_t buffer_length)
75{
76 encode->buffer_out = buffer_out;
77 encode->buffer_length = buffer_length;
78 encode->buffer_used = 0;
79}
80
81lxb_inline void
83 size_t buffer_used)
84{
85 encode->buffer_used = buffer_used;
86}
87
88lxb_inline size_t
93
96 const lxb_char_t *replace, size_t length)
97{
98 if (encode->buffer_out == NULL || encode->buffer_length < length) {
100 }
101
102 encode->replace_to = replace;
103 encode->replace_len = length;
104
105 return LXB_STATUS_OK;
106}
107
110 lxb_char_t *data, size_t length)
111{
112 if ((encode->buffer_used + length) > encode->buffer_length) {
114 }
115
116 memcpy(&encode->buffer_out[encode->buffer_used], data, length);
117
118 encode->buffer_used += length;
119
120 return LXB_STATUS_OK;
121}
122
123/*
124 * Decode
125 */
128 const lxb_codepoint_t *data, size_t length)
129{
130 if ((decode->buffer_used + length) > decode->buffer_length) {
132 }
133
134 memcpy(&decode->buffer_out[decode->buffer_used], data,
135 sizeof(lxb_codepoint_t) * length);
136
137 decode->buffer_used += length;
138
139 return LXB_STATUS_OK;
140}
141
144 const lxb_encoding_data_t *encoding_data,
145 lxb_codepoint_t *buffer_out, size_t buffer_length)
146{
147 if (encoding_data == NULL) {
149 }
150
151 memset(decode, 0, sizeof(lxb_encoding_decode_t));
152
153 decode->buffer_out = buffer_out;
154 decode->buffer_length = buffer_length;
155 decode->encoding_data = encoding_data;
156
157 return LXB_STATUS_OK;
158}
159
162{
164
165 if (decode->status != LXB_STATUS_OK) {
166
169 {
170 return LXB_STATUS_OK;
171 }
172
173 if (decode->replace_to == NULL) {
174 return LXB_STATUS_ERROR;
175 }
176
178 decode->replace_len);
180 return status;
181 }
182 }
183
184 return LXB_STATUS_OK;
185}
186
189{
190 return decode->buffer_out;
191}
192
193lxb_inline void
195 lxb_codepoint_t *buffer_out, size_t buffer_length)
196{
197 decode->buffer_out = buffer_out;
198 decode->buffer_length = buffer_length;
199 decode->buffer_used = 0;
200}
201
202lxb_inline void
204 size_t buffer_used)
205{
206 decode->buffer_used = buffer_used;
207}
208
209lxb_inline size_t
214
217 const lxb_codepoint_t *replace, size_t length)
218{
219 if (decode->buffer_out == NULL || decode->buffer_length < length) {
221 }
222
223 decode->replace_to = replace;
224 decode->replace_len = length;
225
226 return LXB_STATUS_OK;
227}
228
229/*
230 * Single encode.
231 */
234 const lxb_encoding_data_t *encoding_data)
235{
236 if (encoding_data == NULL) {
238 }
239
241
242 encode->encoding_data = encoding_data;
243
244 return LXB_STATUS_OK;
245}
246
247lxb_inline int8_t
249 lxb_char_t **data, const lxb_char_t *end)
250{
251 if (encode->encoding_data->encoding == LXB_ENCODING_ISO_2022_JP) {
253 }
254
255 return 0;
256}
257
258/*
259 * Single decode.
260 */
263 const lxb_encoding_data_t *encoding_data)
264{
265 if (encoding_data == NULL) {
267 }
268
269 memset(decode, 0, sizeof(lxb_encoding_decode_t));
270
271 decode->encoding_data = encoding_data;
272
273 return LXB_STATUS_OK;
274}
275
278{
279 if (decode->status != LXB_STATUS_OK) {
280
283 {
284 return LXB_STATUS_OK;
285 }
286
287 return LXB_STATUS_ERROR;
288 }
289
290 return LXB_STATUS_OK;
291}
292
293/*
294 * Encoding data.
295 */
298{
299 const lexbor_shs_entry_t *entry;
300
301 if (length == 0) {
302 return NULL;
303 }
304
306 name, length);
307 if (entry == NULL) {
308 return NULL;
309 }
310
311 return (const lxb_encoding_data_t *) entry->value;
312}
313
323
333
343
346 const lxb_codepoint_t **cp, const lxb_codepoint_t *end)
347{
348 return encoding_data->encode(ctx, cp, end);
349}
350
353 const lxb_char_t **data, const lxb_char_t *end)
354{
355 return encoding_data->decode(ctx, data, end);
356}
357
360{
361 return data->encoding;
362}
363
364/*
365 * No inline functions for ABI.
366 */
369 const lxb_encoding_data_t *encoding_data,
370 lxb_char_t *buffer_out, size_t buffer_length);
371
374
377
378LXB_API void
380 lxb_char_t *buffer_out, size_t buffer_length);
381
382LXB_API void
384 size_t buffer_used);
385
386LXB_API size_t
388
391 const lxb_char_t *replace, size_t buffer_length);
392
395 lxb_char_t *data, size_t length);
396
399 const lxb_encoding_data_t *encoding_data,
400 lxb_codepoint_t *buffer_out, size_t buffer_length);
401
404
407
408LXB_API void
410 lxb_codepoint_t *buffer_out, size_t buffer_length);
411
412LXB_API void
414 size_t buffer_used);
415
416LXB_API size_t
418
421 const lxb_codepoint_t *replace, size_t length);
422
425 const lxb_codepoint_t *data, size_t length);
426
429 const lxb_encoding_data_t *encoding_data);
430
431LXB_API int8_t
433 lxb_char_t **data, const lxb_char_t *end);
434
437 const lxb_encoding_data_t *encoding_data);
438
441
443lxb_encoding_data_by_name_noi(const lxb_char_t *name, size_t length);
444
447
450
453
456 const lxb_codepoint_t **cp, const lxb_codepoint_t *end);
459 const lxb_char_t **data, const lxb_char_t *end);
460
463
464LXB_API size_t
466
467LXB_API size_t
469
470
471#ifdef __cplusplus
472} /* extern "C" */
473#endif
474
475#endif /* LEXBOR_ENCODING_ENCODING_H */
@ LXB_STATUS_SMALL_BUFFER
Definition base.h:64
@ LXB_STATUS_ERROR_WRONG_ARGS
Definition base.h:58
@ LXB_STATUS_OK
Definition base.h:49
@ LXB_STATUS_ERROR
Definition base.h:50
#define LXB_API
Definition def.h:48
DNS_STATUS status
Definition dns_win32.c:49
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
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_f)(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cp, const lxb_codepoint_t *end)
Definition base.h:174
struct lxb_encoding_data lxb_encoding_data_t
Definition base.h:103
lxb_status_t(* lxb_encoding_decode_f)(lxb_encoding_decode_t *ctx, const lxb_char_t **data, const lxb_char_t *end)
Definition base.h:178
@ LXB_ENCODING_DECODE_2022_JP_ASCII
Definition base.h:58
lxb_encoding_t
Definition const.h:17
@ LXB_ENCODING_LAST_ENTRY
Definition const.h:61
@ LXB_ENCODING_ISO_2022_JP
Definition const.h:26
lxb_inline lxb_status_t lxb_encoding_data_call_decode(lxb_encoding_data_t *encoding_data, lxb_encoding_decode_t *ctx, const lxb_char_t **data, const lxb_char_t *end)
Definition encoding.h:352
LXB_API size_t lxb_encoding_decode_t_sizeof(void)
Definition encoding.c:249
LXB_API const lxb_encoding_data_t * lxb_encoding_data_by_pre_name(const lxb_char_t *name, size_t length)
Definition encoding.c:11
LXB_API lxb_encoding_encode_f lxb_encoding_encode_function_noi(lxb_encoding_t encoding)
Definition encoding.c:211
lxb_inline lxb_status_t lxb_encoding_decode_buf_add_to(lxb_encoding_decode_t *decode, const lxb_codepoint_t *data, size_t length)
Definition encoding.h:127
lxb_inline lxb_status_t lxb_encoding_encode_finish(lxb_encoding_encode_t *encode)
Definition encoding.h:57
LXB_API void lxb_encoding_encode_buf_set_noi(lxb_encoding_encode_t *encode, lxb_char_t *buffer_out, size_t buffer_length)
Definition encoding.c:83
LXB_API lxb_status_t lxb_encoding_decode_finish_single_noi(lxb_encoding_decode_t *decode)
Definition encoding.c:193
LXB_API int8_t lxb_encoding_encode_finish_single_noi(lxb_encoding_encode_t *encode, lxb_char_t **data, const lxb_char_t *end)
Definition encoding.c:179
lxb_inline lxb_status_t lxb_encoding_encode_init(lxb_encoding_encode_t *encode, const lxb_encoding_data_t *encoding_data, lxb_char_t *buffer_out, size_t buffer_length)
Definition encoding.h:39
LXB_API lxb_status_t lxb_encoding_decode_init_noi(lxb_encoding_decode_t *decode, const lxb_encoding_data_t *encoding_data, lxb_codepoint_t *buffer_out, size_t buffer_length)
Definition encoding.c:117
LXB_API lxb_status_t lxb_encoding_encode_init_single_noi(lxb_encoding_encode_t *encode, const lxb_encoding_data_t *encoding_data)
Definition encoding.c:172
LXB_API lxb_status_t lxb_encoding_encode_buf_add_to_noi(lxb_encoding_encode_t *encode, lxb_char_t *data, size_t length)
Definition encoding.c:110
LXB_API void lxb_encoding_decode_buf_used_set_noi(lxb_encoding_decode_t *decode, size_t buffer_used)
Definition encoding.c:145
lxb_inline const lxb_encoding_data_t * lxb_encoding_data_by_name(const lxb_char_t *name, size_t length)
Definition encoding.h:297
lxb_inline const lxb_encoding_data_t * lxb_encoding_data(lxb_encoding_t encoding)
Definition encoding.h:315
lxb_inline lxb_status_t lxb_encoding_data_call_encode(lxb_encoding_data_t *encoding_data, lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cp, const lxb_codepoint_t *end)
Definition encoding.h:345
LXB_API lxb_encoding_decode_f lxb_encoding_decode_function_noi(lxb_encoding_t encoding)
Definition encoding.c:217
LXB_API lxb_status_t lxb_encoding_decode_init_single_noi(lxb_encoding_decode_t *decode, const lxb_encoding_data_t *encoding_data)
Definition encoding.c:186
LXB_API lxb_codepoint_t * lxb_encoding_decode_buf_noi(lxb_encoding_decode_t *decode)
Definition encoding.c:132
LXB_API lxb_status_t lxb_encoding_encode_init_noi(lxb_encoding_encode_t *encode, const lxb_encoding_data_t *encoding_data, lxb_char_t *buffer_out, size_t buffer_length)
Definition encoding.c:62
lxb_inline lxb_encoding_decode_f lxb_encoding_decode_function(lxb_encoding_t encoding)
Definition encoding.h:335
lxb_inline lxb_status_t lxb_encoding_decode_replace_set(lxb_encoding_decode_t *decode, const lxb_codepoint_t *replace, size_t length)
Definition encoding.h:216
lxb_inline lxb_status_t lxb_encoding_decode_init(lxb_encoding_decode_t *decode, const lxb_encoding_data_t *encoding_data, lxb_codepoint_t *buffer_out, size_t buffer_length)
Definition encoding.h:143
lxb_inline void lxb_encoding_decode_buf_set(lxb_encoding_decode_t *decode, lxb_codepoint_t *buffer_out, size_t buffer_length)
Definition encoding.h:194
lxb_inline void lxb_encoding_decode_buf_used_set(lxb_encoding_decode_t *decode, size_t buffer_used)
Definition encoding.h:203
LXB_API size_t lxb_encoding_encode_buf_used_noi(lxb_encoding_encode_t *encode)
Definition encoding.c:97
LXB_API void lxb_encoding_decode_buf_set_noi(lxb_encoding_decode_t *decode, lxb_codepoint_t *buffer_out, size_t buffer_length)
Definition encoding.c:138
lxb_inline size_t lxb_encoding_decode_buf_used(lxb_encoding_decode_t *decode)
Definition encoding.h:210
LXB_API const lxb_encoding_data_t * lxb_encoding_data_by_name_noi(const lxb_char_t *name, size_t length)
Definition encoding.c:199
LXB_API lxb_status_t lxb_encoding_decode_replace_set_noi(lxb_encoding_decode_t *decode, const lxb_codepoint_t *replace, size_t length)
Definition encoding.c:158
LXB_API size_t lxb_encoding_decode_buf_used_noi(lxb_encoding_decode_t *decode)
Definition encoding.c:152
lxb_inline void lxb_encoding_encode_buf_set(lxb_encoding_encode_t *encode, lxb_char_t *buffer_out, size_t buffer_length)
Definition encoding.h:73
lxb_inline lxb_status_t lxb_encoding_encode_init_single(lxb_encoding_encode_t *encode, const lxb_encoding_data_t *encoding_data)
Definition encoding.h:233
lxb_inline lxb_encoding_t lxb_encoding_data_encoding(lxb_encoding_data_t *data)
Definition encoding.h:359
LXB_API lxb_encoding_t lxb_encoding_data_encoding_noi(lxb_encoding_data_t *data)
Definition encoding.c:237
LXB_API lxb_char_t * lxb_encoding_encode_buf_noi(lxb_encoding_encode_t *encode)
Definition encoding.c:77
lxb_inline lxb_char_t * lxb_encoding_encode_buf(lxb_encoding_encode_t *encode)
Definition encoding.h:67
lxb_inline int8_t lxb_encoding_encode_finish_single(lxb_encoding_encode_t *encode, lxb_char_t **data, const lxb_char_t *end)
Definition encoding.h:248
lxb_inline lxb_codepoint_t * lxb_encoding_decode_buf(lxb_encoding_decode_t *decode)
Definition encoding.h:188
lxb_inline lxb_encoding_encode_f lxb_encoding_encode_function(lxb_encoding_t encoding)
Definition encoding.h:325
LXB_API lxb_status_t lxb_encoding_data_call_encode_noi(lxb_encoding_data_t *encoding_data, lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cp, const lxb_codepoint_t *end)
Definition encoding.c:223
LXB_API size_t lxb_encoding_encode_t_sizeof(void)
Definition encoding.c:243
lxb_inline lxb_status_t lxb_encoding_encode_replace_set(lxb_encoding_encode_t *encode, const lxb_char_t *replace, size_t length)
Definition encoding.h:95
LXB_API lxb_status_t lxb_encoding_data_call_decode_noi(lxb_encoding_data_t *encoding_data, lxb_encoding_decode_t *ctx, const lxb_char_t **data, const lxb_char_t *end)
Definition encoding.c:230
lxb_inline lxb_status_t lxb_encoding_decode_finish(lxb_encoding_decode_t *decode)
Definition encoding.h:161
LXB_API lxb_status_t lxb_encoding_encode_finish_noi(lxb_encoding_encode_t *encode)
Definition encoding.c:71
LXB_API lxb_status_t lxb_encoding_decode_finish_noi(lxb_encoding_decode_t *decode)
Definition encoding.c:126
LXB_API lxb_status_t lxb_encoding_encode_replace_set_noi(lxb_encoding_encode_t *encode, const lxb_char_t *replace, size_t buffer_length)
Definition encoding.c:103
lxb_inline lxb_status_t lxb_encoding_encode_buf_add_to(lxb_encoding_encode_t *encode, lxb_char_t *data, size_t length)
Definition encoding.h:109
lxb_inline lxb_status_t lxb_encoding_decode_init_single(lxb_encoding_decode_t *decode, const lxb_encoding_data_t *encoding_data)
Definition encoding.h:262
lxb_inline lxb_status_t lxb_encoding_decode_finish_single(lxb_encoding_decode_t *decode)
Definition encoding.h:277
LXB_API lxb_status_t lxb_encoding_decode_buf_add_to_noi(lxb_encoding_decode_t *decode, const lxb_codepoint_t *data, size_t length)
Definition encoding.c:165
lxb_inline size_t lxb_encoding_encode_buf_used(lxb_encoding_encode_t *encode)
Definition encoding.h:89
lxb_inline void lxb_encoding_encode_buf_used_set(lxb_encoding_encode_t *encode, size_t buffer_used)
Definition encoding.h:82
LXB_API const lxb_encoding_data_t * lxb_encoding_data_noi(lxb_encoding_t encoding)
Definition encoding.c:205
LXB_API void lxb_encoding_encode_buf_used_set_noi(lxb_encoding_encode_t *encode, size_t buffer_used)
Definition encoding.c:90
memcpy(ptr1, ptr2, size)
memset(ptr, 0, type->size)
#define NULL
Definition gdcache.h:45
unsigned const char * end
Definition php_ffi.h:51
xmlCharEncodingHandlerPtr encoding
Definition php_soap.h:170
struct _encode encode
Definition php_soap.h:42
zend_constant * data
LXB_API const lxb_encoding_data_t lxb_encoding_res_map[LXB_ENCODING_LAST_ENTRY]
Definition res.c:20
LXB_API const lexbor_shs_entry_t lxb_encoding_res_shs_entities[220]
Definition res.c:110
const lexbor_shs_entry_t * lexbor_shs_entry_get_lower_static(const lexbor_shs_entry_t *root, const lxb_char_t *key, size_t key_len)
Definition shs.c:63
Definition shs.h:19
void * value
Definition shs.h:21
lxb_encoding_encode_f encode
Definition base.h:191
lxb_encoding_t encoding
Definition base.h:190
lxb_encoding_decode_f decode
Definition base.h:192
size_t buffer_length
Definition base.h:110
lxb_status_t status
Definition base.h:126
const lxb_codepoint_t * replace_to
Definition base.h:117
const lxb_encoding_data_t * encoding_data
Definition base.h:106
union lxb_encoding_decode_t::@302274252113053227061303304053361346350151303155 u
lxb_codepoint_t * buffer_out
Definition base.h:109
lxb_encoding_ctx_2022_jp_t iso_2022_jp
Definition base.h:133
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
zend_string * name