Libparserutils
codec.c
Go to the documentation of this file.
1/*
2 * This file is part of LibParserUtils.
3 * Licensed under the MIT License,
4 * http://www.opensource.org/licenses/mit-license.php
5 * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
6 */
7
8#include <string.h>
9
10#include "charset/aliases.h"
12
18
27
40{
45
46 if (charset == NULL || codec == NULL)
48
49 /* Canonicalise parserutils_charset name. */
51 strlen(charset));
52 if (canon == NULL)
54
55 /* Search for handler class */
56 for (handler = handler_table; *handler != NULL; handler++) {
57 if ((*handler)->handles_charset(canon->name))
58 break;
59 }
60
61 /* None found */
62 if ((*handler) == NULL)
64
65 /* Instantiate class */
66 error = (*handler)->create(canon->name, &c);
67 if (error != PARSERUTILS_OK)
68 return error;
69
70 /* and initialise it */
71 c->mibenum = canon->mib_enum;
72
74
75 *codec = c;
76
77 return PARSERUTILS_OK;
78}
79
88{
89 if (codec == NULL)
91
92 codec->handler.destroy(codec);
93
94 free(codec);
95
96 return PARSERUTILS_OK;
97}
98
111{
112 if (codec == NULL || params == NULL)
113 return PARSERUTILS_BADPARM;
114
115 switch (type) {
117 codec->errormode = params->error_mode.mode;
118 break;
119 }
120
121 return PARSERUTILS_OK;
122}
123
138 const uint8_t **source, size_t *sourcelen,
139 uint8_t **dest, size_t *destlen)
140{
141 if (codec == NULL || source == NULL || *source == NULL ||
142 sourcelen == NULL || dest == NULL || *dest == NULL ||
143 destlen == NULL)
144 return PARSERUTILS_BADPARM;
145
146 return codec->handler.encode(codec, source, sourcelen, dest, destlen);
147}
148
165 const uint8_t **source, size_t *sourcelen,
166 uint8_t **dest, size_t *destlen)
167{
168 if (codec == NULL || source == NULL || *source == NULL ||
169 sourcelen == NULL || dest == NULL || *dest == NULL ||
170 destlen == NULL)
171 return PARSERUTILS_BADPARM;
172
173 return codec->handler.decode(codec, source, sourcelen, dest, destlen);
174}
175
184{
185 if (codec == NULL)
186 return PARSERUTILS_BADPARM;
187
188 return codec->handler.reset(codec);
189}
190
parserutils_charset_aliases_canon * parserutils__charset_alias_canonicalise(const char *alias, size_t len)
Retrieve the canonical form of an alias name.
Definition aliases.c:79
parserutils_error parserutils_charset_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 data into a codec's charset.
Definition codec.c:136
parserutils_charset_handler charset_utf16_codec_handler
parserutils_charset_handler charset_utf8_codec_handler
Definition codec_utf8.c:542
parserutils_error parserutils_charset_codec_destroy(parserutils_charset_codec *codec)
Destroy a charset codec.
Definition codec.c:86
parserutils_charset_handler charset_8859_codec_handler
Definition codec_8859.c:587
static parserutils_charset_handler * handler_table[]
Definition codec.c:19
parserutils_charset_handler charset_ext8_codec_handler
Definition codec_ext8.c:579
parserutils_error parserutils_charset_codec_decode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Decode a chunk of data in a codec's charset into UCS-4.
Definition codec.c:163
parserutils_error parserutils_charset_codec_reset(parserutils_charset_codec *codec)
Clear a charset codec's encoding state.
Definition codec.c:182
parserutils_charset_handler charset_ascii_codec_handler
parserutils_error parserutils_charset_codec_setopt(parserutils_charset_codec *codec, parserutils_charset_codec_opttype type, parserutils_charset_codec_optparams *params)
Configure a charset codec.
Definition codec.c:107
parserutils_error parserutils_charset_codec_create(const char *charset, parserutils_charset_codec **codec)
Create a charset codec.
Definition codec.c:38
parserutils_charset_codec_opttype
Charset codec option types.
Definition codec.h:74
@ PARSERUTILS_CHARSET_CODEC_ERROR_MODE
Set codec error mode.
Definition codec.h:76
@ PARSERUTILS_CHARSET_CODEC_ERROR_LOOSE
Replace unrepresentable characters with single alternate.
Definition codec.h:66
parserutils_error
Definition errors.h:18
@ PARSERUTILS_OK
Definition errors.h:19
@ PARSERUTILS_BADENCODING
Definition errors.h:26
@ PARSERUTILS_BADPARM
Definition errors.h:22
Core charset codec definition; implementations extend this.
Definition codec_impl.h:19
parserutils_charset_codec_errormode errormode
error mode
Definition codec_impl.h:22
parserutils_error(* encode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Definition codec_impl.h:26
parserutils_error(* destroy)(parserutils_charset_codec *codec)
Definition codec_impl.h:25
parserutils_error(* decode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Definition codec_impl.h:29
struct parserutils_charset_codec::@271367034342366162232062053053007137175253257255 handler
Vtable for handler code.
parserutils_error(* reset)(parserutils_charset_codec *codec)
Definition codec_impl.h:32
uint16_t mibenum
MIB enum for charset.
Definition codec_impl.h:20
Codec factory component definition.
Definition codec_impl.h:39
Charset codec option parameters.
Definition codec.h:82
struct parserutils_charset_codec_optparams::@067345123165375117204121135306061273315042212215 error_mode
Parameters for error mode setting.
parserutils_charset_codec_errormode mode
The desired error handling mode.
Definition codec.h:86