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 
25  NULL,
26 };
27 
40 {
44  parserutils_error error;
45 
46  if (charset == NULL || codec == NULL)
47  return PARSERUTILS_BADPARM;
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)
90  return PARSERUTILS_BADPARM;
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 
Codec factory component definition.
Definition: codec_impl.h:39
parserutils_charset_handler charset_8859_codec_handler
Definition: codec_8859.c:587
parserutils_error parserutils_charset_codec_reset(parserutils_charset_codec *codec)
Clear a charset codec's encoding state.
Definition: codec.c:182
parserutils_charset_codec_errormode mode
The desired error handling mode.
Definition: codec.h:86
parserutils_error(* destroy)(parserutils_charset_codec *codec)
Definition: codec_impl.h:25
parserutils_charset_codec_opttype
Charset codec option types.
Definition: codec.h:74
Set codec error mode.
Definition: codec.h:76
struct parserutils_charset_codec_optparams::@0 error_mode
Parameters for error mode setting.
parserutils_error
Definition: errors.h:18
parserutils_charset_handler charset_ascii_codec_handler
Definition: codec_ascii.c:527
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
parserutils_error parserutils_charset_codec_destroy(parserutils_charset_codec *codec)
Destroy a charset codec.
Definition: codec.c:86
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
uint16_t mibenum
MIB enum for charset.
Definition: codec_impl.h:20
parserutils_charset_codec_errormode errormode
error mode
Definition: codec_impl.h:22
parserutils_charset_handler charset_ext8_codec_handler
Definition: codec_ext8.c:579
Charset codec option parameters.
Definition: codec.h:82
static parserutils_charset_handler * handler_table[]
Definition: codec.c:19
struct parserutils_charset_codec::@3 handler
Vtable for handler code.
parserutils_charset_handler charset_utf16_codec_handler
Definition: codec_utf16.c:542
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 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
Core charset codec definition; implementations extend this.
Definition: codec_impl.h:19
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(* reset)(parserutils_charset_codec *codec)
Definition: codec_impl.h:32
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_handler charset_utf8_codec_handler
Definition: codec_utf8.c:542
Replace unrepresentable characters with single alternate.
Definition: codec.h:66