26 { 0,
"ISO-8859-1",
SLEN(
"ISO-8859-1"),
t1 },
27 { 0,
"ISO-8859-2",
SLEN(
"ISO-8859-2"),
t2 },
28 { 0,
"ISO-8859-3",
SLEN(
"ISO-8859-3"),
t3 },
29 { 0,
"ISO-8859-4",
SLEN(
"ISO-8859-4"),
t4 },
30 { 0,
"ISO-8859-5",
SLEN(
"ISO-8859-5"),
t5 },
31 { 0,
"ISO-8859-6",
SLEN(
"ISO-8859-6"),
t6 },
32 { 0,
"ISO-8859-7",
SLEN(
"ISO-8859-7"),
t7 },
33 { 0,
"ISO-8859-8",
SLEN(
"ISO-8859-8"),
t8 },
34 { 0,
"ISO-8859-9",
SLEN(
"ISO-8859-9"),
t9 },
35 { 0,
"ISO-8859-10",
SLEN(
"ISO-8859-10"),
t10 },
36 { 0,
"ISO-8859-11",
SLEN(
"ISO-8859-11"),
t11 },
37 { 0,
"ISO-8859-13",
SLEN(
"ISO-8859-13"),
t13 },
38 { 0,
"ISO-8859-14",
SLEN(
"ISO-8859-14"),
t14 },
39 { 0,
"ISO-8859-15",
SLEN(
"ISO-8859-15"),
t15 },
40 { 0,
"ISO-8859-16",
SLEN(
"ISO-8859-16"),
t16 }
51#define READ_BUFSIZE (8)
57#define WRITE_BUFSIZE (8)
72 const uint8_t **source,
size_t *sourcelen,
73 uint8_t **dest,
size_t *destlen);
76 const uint8_t **source,
size_t *sourcelen,
77 uint8_t **dest,
size_t *destlen);
82 const uint8_t **source,
size_t *sourcelen,
83 uint8_t **dest,
size_t *destlen);
86 uint32_t ucs4, uint8_t **dest,
size_t *destlen);
88 uint32_t ucs4, uint8_t **s,
size_t *
len);
90 const uint8_t *s,
size_t len, uint32_t *ucs4);
136 charset, strlen(charset));
137 uint32_t *
table = NULL;
146 assert(
table != NULL);
212 const uint8_t **source,
size_t *sourcelen,
213 uint8_t **dest,
size_t *destlen)
245 while (*sourcelen > 0) {
251 while (towritelen > 0) {
331 const uint8_t **source,
size_t *sourcelen,
332 uint8_t **dest,
size_t *destlen)
342 *((uint32_t *) (
void *) *dest) =
352 if (*destlen < c->read_len * 4) {
365 while (*sourcelen > 0) {
367 source, sourcelen, dest, destlen);
425 const uint8_t **source,
size_t *sourcelen,
426 uint8_t **dest,
size_t *destlen)
436 ucs4, dest, destlen);
458 0xFFFD, dest, destlen);
482 uint32_t ucs4, uint8_t **dest,
size_t *destlen)
516 uint32_t ucs4, uint8_t **s,
size_t *
len)
529 for (i = 0; i < 96; i++) {
530 if (ucs4 == c->
table[i])
564 const uint8_t *s,
size_t len, uint32_t *ucs4)
573 }
else if (*s >= 0xA0) {
574 if (c->
table[*s - 0xA0] == 0xFFFF)
577 out = c->
table[*s - 0xA0];
@ PARSERUTILS_CHARSET_CODEC_ERROR_STRICT
Abort processing if unrepresentable character encountered.
static parserutils_error charset_8859_codec_encode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Encode a chunk of UCS-4 (big endian) data into ISO-8859-n.
struct charset_8859_codec charset_8859_codec
ISO-8859-n charset codec.
static parserutils_error charset_8859_codec_create(const char *charset, parserutils_charset_codec **codec)
Create an ISO-8859-n codec.
static parserutils_error charset_8859_to_ucs4(charset_8859_codec *c, const uint8_t *s, size_t len, uint32_t *ucs4)
Convert an ISO-8859-n character to UCS4 (host endian)
static struct @1 known_charsets[]
static parserutils_error charset_8859_codec_decode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Decode a chunk of ISO-8859-n data into UCS-4 (big endian)
static parserutils_error charset_8859_codec_reset(parserutils_charset_codec *codec)
Clear an ISO-8859-n codec's encoding state.
static parserutils_error charset_8859_codec_output_decoded_char(charset_8859_codec *c, uint32_t ucs4, uint8_t **dest, size_t *destlen)
Output a UCS-4 character (big endian)
static parserutils_error charset_8859_codec_destroy(parserutils_charset_codec *codec)
Destroy an ISO-8859-n codec.
const parserutils_charset_handler charset_8859_codec_handler
static parserutils_error charset_8859_from_ucs4(charset_8859_codec *c, uint32_t ucs4, uint8_t **s, size_t *len)
Convert a UCS4 (host endian) character to ISO-8859-n.
static parserutils_error charset_8859_codec_read_char(charset_8859_codec *c, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Read a character from the ISO-8859-n to UCS-4 (big endian)
static bool charset_8859_codec_handles_charset(const char *charset)
Determine whether this codec handles a specific charset.
static uint32_t endian_host_to_big(uint32_t host)
static uint32_t endian_big_to_host(uint32_t big)
uint16_t parserutils_charset_mibenum_from_name(const char *alias, size_t len)
Retrieve the MIB enum value assigned to an encoding name.
ISO-8859-n charset codec.
uint32_t * table
Mapping table for 0xA0-0xFF.
uint32_t write_buf[WRITE_BUFSIZE]
Buffer for partial output sequences (encode) (host-endian)
size_t write_len
Character length of write_buf.
parserutils_charset_codec base
Base class.
size_t read_len
Character length of read_buf.
uint32_t read_buf[READ_BUFSIZE]
Buffer for partial output sequences (decode) (host-endian)
Core charset codec definition; implementations extend this.
parserutils_charset_codec_errormode errormode
error mode
parserutils_error(* encode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
parserutils_error(* destroy)(parserutils_charset_codec *codec)
parserutils_error(* decode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
parserutils_error(* reset)(parserutils_charset_codec *codec)
struct parserutils_charset_codec::@3 handler
Vtable for handler code.
Codec factory component definition.