Blame lib/enca.h

Packit 57a33d
/* This header file is in the public domain. */
Packit 57a33d
#ifndef ENCA_H
Packit 57a33d
#define ENCA_H
Packit 57a33d
Packit 57a33d
#include <stdlib.h>
Packit 57a33d
/* According to autoconf stdlib may not be enough for size_t */
Packit 57a33d
#include <sys/types.h>
Packit 57a33d
Packit 57a33d
#ifdef __cplusplus
Packit 57a33d
extern "C" {
Packit 57a33d
#endif /* __cplusplus */
Packit 57a33d
Packit 57a33d
/* Enumerated types */
Packit 57a33d
Packit 57a33d
typedef enum { /*< flags >*/
Packit 57a33d
  ENCA_SURFACE_EOL_CR    = 1 << 0,
Packit 57a33d
  ENCA_SURFACE_EOL_LF    = 1 << 1,
Packit 57a33d
  ENCA_SURFACE_EOL_CRLF  = 1 << 2,
Packit 57a33d
  ENCA_SURFACE_EOL_MIX   = 1 << 3,
Packit 57a33d
  ENCA_SURFACE_EOL_BIN   = 1 << 4,
Packit 57a33d
  ENCA_SURFACE_MASK_EOL  = (ENCA_SURFACE_EOL_CR
Packit 57a33d
                            | ENCA_SURFACE_EOL_LF
Packit 57a33d
                            | ENCA_SURFACE_EOL_CRLF
Packit 57a33d
                            | ENCA_SURFACE_EOL_MIX
Packit 57a33d
                            | ENCA_SURFACE_EOL_BIN),
Packit 57a33d
  ENCA_SURFACE_PERM_21    = 1 << 5,
Packit 57a33d
  ENCA_SURFACE_PERM_4321  = 1 << 6,
Packit 57a33d
  ENCA_SURFACE_PERM_MIX   = 1 << 7,
Packit 57a33d
  ENCA_SURFACE_MASK_PERM  = (ENCA_SURFACE_PERM_21
Packit 57a33d
                             | ENCA_SURFACE_PERM_4321
Packit 57a33d
                             | ENCA_SURFACE_PERM_MIX),
Packit 57a33d
  ENCA_SURFACE_QP        = 1 << 8,
Packit 57a33d
  ENCA_SURFACE_REMOVE    = 1 << 13,
Packit 57a33d
  ENCA_SURFACE_UNKNOWN   = 1 << 14,
Packit 57a33d
  ENCA_SURFACE_MASK_ALL  = (ENCA_SURFACE_MASK_EOL
Packit 57a33d
                            | ENCA_SURFACE_MASK_PERM
Packit 57a33d
                            | ENCA_SURFACE_QP
Packit 57a33d
                            | ENCA_SURFACE_REMOVE)
Packit 57a33d
} EncaSurface;
Packit 57a33d
Packit 57a33d
typedef enum {
Packit 57a33d
  ENCA_NAME_STYLE_ENCA,
Packit 57a33d
  ENCA_NAME_STYLE_RFC1345,
Packit 57a33d
  ENCA_NAME_STYLE_CSTOCS,
Packit 57a33d
  ENCA_NAME_STYLE_ICONV,
Packit 57a33d
  ENCA_NAME_STYLE_HUMAN,
Packit 57a33d
  ENCA_NAME_STYLE_MIME
Packit 57a33d
} EncaNameStyle;
Packit 57a33d
Packit 57a33d
typedef enum { /*< flags >*/
Packit 57a33d
  ENCA_CHARSET_7BIT      = 1 << 0,
Packit 57a33d
  ENCA_CHARSET_8BIT      = 1 << 1,
Packit 57a33d
  ENCA_CHARSET_16BIT     = 1 << 2,
Packit 57a33d
  ENCA_CHARSET_32BIT     = 1 << 3,
Packit 57a33d
  ENCA_CHARSET_FIXED     = 1 << 4,
Packit 57a33d
  ENCA_CHARSET_VARIABLE  = 1 << 5,
Packit 57a33d
  ENCA_CHARSET_BINARY    = 1 << 6,
Packit 57a33d
  ENCA_CHARSET_REGULAR   = 1 << 7,
Packit 57a33d
  ENCA_CHARSET_MULTIBYTE = 1 << 8
Packit 57a33d
} EncaCharsetFlags;
Packit 57a33d
Packit 57a33d
typedef enum {
Packit 57a33d
  ENCA_EOK = 0,
Packit 57a33d
  ENCA_EINVALUE,
Packit 57a33d
  ENCA_EEMPTY,
Packit 57a33d
  ENCA_EFILTERED,
Packit 57a33d
  ENCA_ENOCS8,
Packit 57a33d
  ENCA_ESIGNIF,
Packit 57a33d
  ENCA_EWINNER,
Packit 57a33d
  ENCA_EGARBAGE
Packit 57a33d
} EncaErrno;
Packit 57a33d
Packit 57a33d
#define ENCA_CS_UNKNOWN (-1)
Packit 57a33d
Packit 57a33d
#define ENCA_NOT_A_CHAR 0xffff
Packit 57a33d
Packit 57a33d
/* Published (opaque) typedefs  */
Packit 57a33d
typedef struct _EncaAnalyserState *EncaAnalyser;
Packit 57a33d
Packit 57a33d
/* Public (transparent) typedefs */
Packit 57a33d
typedef struct _EncaEncoding EncaEncoding;
Packit 57a33d
Packit 57a33d
struct _EncaEncoding { int charset; EncaSurface surface; };
Packit 57a33d
Packit 57a33d
/* Basic interface. */
Packit 57a33d
EncaAnalyser  enca_analyser_alloc (const char *langname);
Packit 57a33d
void          enca_analyser_free  (EncaAnalyser analyser);
Packit 57a33d
EncaEncoding  enca_analyse        (EncaAnalyser analyser,
Packit 57a33d
                                   unsigned char *buffer,
Packit 57a33d
                                   size_t size);
Packit 57a33d
EncaEncoding  enca_analyse_const  (EncaAnalyser analyser,
Packit 57a33d
                                   const unsigned char *buffer,
Packit 57a33d
                                   size_t size);
Packit 57a33d
int           enca_double_utf8_check (EncaAnalyser analyser,
Packit 57a33d
                                      const unsigned char *buffer,
Packit 57a33d
                                      size_t size);
Packit 57a33d
int*          enca_double_utf8_get_candidates (EncaAnalyser analyser);
Packit 57a33d
int           enca_errno          (EncaAnalyser analyser);
Packit 57a33d
const char*   enca_strerror       (EncaAnalyser analyser,
Packit 57a33d
                                   int errnum);
Packit 57a33d
Packit 57a33d
/* Options. */
Packit 57a33d
void          enca_set_multibyte              (EncaAnalyser analyser,
Packit 57a33d
                                               int multibyte);
Packit 57a33d
int           enca_get_multibyte              (EncaAnalyser analyser);
Packit 57a33d
void          enca_set_interpreted_surfaces   (EncaAnalyser analyser,
Packit 57a33d
                                               int interpreted_surfaces);
Packit 57a33d
int           enca_get_interpreted_surfaces   (EncaAnalyser analyser);
Packit 57a33d
void          enca_set_ambiguity              (EncaAnalyser analyser,
Packit 57a33d
                                               int ambiguity);
Packit 57a33d
int           enca_get_ambiguity              (EncaAnalyser analyser);
Packit 57a33d
void          enca_set_filtering              (EncaAnalyser analyser,
Packit 57a33d
                                               int filtering);
Packit 57a33d
int           enca_get_filtering              (EncaAnalyser analyser);
Packit 57a33d
void          enca_set_garbage_test           (EncaAnalyser analyser,
Packit 57a33d
                                               int garabage_test);
Packit 57a33d
int           enca_get_garbage_test           (EncaAnalyser analyser);
Packit 57a33d
void          enca_set_termination_strictness (EncaAnalyser analyser,
Packit 57a33d
                                               int termination_strictness);
Packit 57a33d
int           enca_get_termination_strictness (EncaAnalyser analyser);
Packit 57a33d
int           enca_set_significant            (EncaAnalyser analyser,
Packit 57a33d
                                               size_t significant);
Packit 57a33d
size_t        enca_get_significant            (EncaAnalyser analyser);
Packit 57a33d
int           enca_set_threshold              (EncaAnalyser analyser,
Packit 57a33d
                                               double threshold);
Packit 57a33d
double        enca_get_threshold              (EncaAnalyser analyser);
Packit 57a33d
Packit 57a33d
/* Names and properties. */
Packit 57a33d
const char*       enca_charset_name            (int charset,
Packit 57a33d
                                                EncaNameStyle whatname);
Packit 57a33d
const char**      enca_get_charset_aliases     (int charset,
Packit 57a33d
                                                size_t *n);
Packit 57a33d
char*             enca_get_surface_name        (EncaSurface surface,
Packit 57a33d
                                                EncaNameStyle whatname);
Packit 57a33d
EncaEncoding      enca_parse_encoding_name     (const char *name);
Packit 57a33d
EncaSurface       enca_charset_natural_surface (int charset);
Packit 57a33d
EncaCharsetFlags  enca_charset_properties      (int charset);
Packit 57a33d
Packit 57a33d
#define enca_charset_is_known(cs) \
Packit 57a33d
  ((cs) != ENCA_CS_UNKNOWN)
Packit 57a33d
#define enca_charset_is_7bit(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_7BIT)
Packit 57a33d
#define enca_charset_is_8bit(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_8BIT)
Packit 57a33d
#define enca_charset_is_16bit(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_16BIT)
Packit 57a33d
#define enca_charset_is_32bit(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_32BIT)
Packit 57a33d
#define enca_charset_is_fixed(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_FIXED)
Packit 57a33d
#define enca_charset_is_variable(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_VARIABLE)
Packit 57a33d
#define enca_charset_is_binary(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_BINARY)
Packit 57a33d
#define enca_charset_is_regular(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_REGULAR)
Packit 57a33d
#define enca_charset_is_multibyte(cs) \
Packit 57a33d
  (enca_charset_properties(cs) & ENCA_CHARSET_MULTIBYTE)
Packit 57a33d
Packit 57a33d
/* Auxiliary functions. */
Packit 57a33d
int           enca_charset_has_ucs2_map  (int charset);
Packit 57a33d
int           enca_charset_ucs2_map      (int charset,
Packit 57a33d
                                          unsigned int *buffer);
Packit 57a33d
size_t        enca_number_of_charsets    (void);
Packit 57a33d
const char*   enca_analyser_language     (EncaAnalyser analyser);
Packit 57a33d
const char*   enca_language_english_name (const char *lang);
Packit 57a33d
const char**  enca_get_languages         (size_t *n);
Packit 57a33d
int*          enca_get_language_charsets (const char *langname,
Packit 57a33d
                                          size_t *n);
Packit 57a33d
#ifdef __cplusplus
Packit 57a33d
}
Packit 57a33d
#endif /* __cplusplus */
Packit 57a33d
Packit 57a33d
#endif