|
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
|