1/*
2   +----------------------------------------------------------------------+
3   | Zend Engine                                                          |
4   +----------------------------------------------------------------------+
5   | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) |
6   +----------------------------------------------------------------------+
7   | This source file is subject to version 2.00 of the Zend license,     |
8   | that is bundled with this package in the file LICENSE, and is        |
9   | available through the world-wide-web at                              |
10   | http://www.zend.com/license/2_00.txt.                                |
11   | If you did not receive a copy of the Zend license and are unable to  |
12   | obtain it through the world-wide-web, please send a note to          |
13   | license@zend.com so we can mail you a copy immediately.              |
14   +----------------------------------------------------------------------+
15   | Authors: Masaki Fujimoto <fujimoto@php.net>                          |
16   |          Rui Hirokawa <hirokawa@php.net>                             |
17   +----------------------------------------------------------------------+
18*/
19
20/* $Id$ */
21
22#ifndef ZEND_MULTIBYTE_H
23#define ZEND_MULTIBYTE_H
24
25typedef struct _zend_encoding zend_encoding;
26
27typedef size_t (*zend_encoding_filter)(unsigned char **str, size_t *str_length, const unsigned char *buf, size_t length);
28
29typedef const zend_encoding* (*zend_encoding_fetcher)(const char *encoding_name);
30typedef const char* (*zend_encoding_name_getter)(const zend_encoding *encoding);
31typedef int (*zend_encoding_lexer_compatibility_checker)(const zend_encoding *encoding);
32typedef const zend_encoding *(*zend_encoding_detector)(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size);
33typedef size_t (*zend_encoding_converter)(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from);
34typedef int (*zend_encoding_list_parser)(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, int persistent);
35typedef const zend_encoding *(*zend_encoding_internal_encoding_getter)(void);
36typedef int (*zend_encoding_internal_encoding_setter)(const zend_encoding *encoding);
37
38typedef struct _zend_multibyte_functions {
39    const char *provider_name;
40    zend_encoding_fetcher encoding_fetcher;
41    zend_encoding_name_getter encoding_name_getter;
42    zend_encoding_lexer_compatibility_checker lexer_compatibility_checker;
43    zend_encoding_detector encoding_detector;
44    zend_encoding_converter encoding_converter;
45    zend_encoding_list_parser encoding_list_parser;
46    zend_encoding_internal_encoding_getter internal_encoding_getter;
47    zend_encoding_internal_encoding_setter internal_encoding_setter;
48} zend_multibyte_functions;
49
50/*
51 * zend multibyte APIs
52 */
53BEGIN_EXTERN_C()
54
55ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32be;
56ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32le;
57ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16be;
58ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16le;
59ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf8;
60
61/* multibyte utility functions */
62ZEND_API int zend_multibyte_set_functions(const zend_multibyte_functions *functions);
63ZEND_API const zend_multibyte_functions *zend_multibyte_get_functions(void);
64
65ZEND_API const zend_encoding *zend_multibyte_fetch_encoding(const char *name);
66ZEND_API const char *zend_multibyte_get_encoding_name(const zend_encoding *encoding);
67ZEND_API int zend_multibyte_check_lexer_compatibility(const zend_encoding *encoding);
68ZEND_API const zend_encoding *zend_multibyte_encoding_detector(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size);
69ZEND_API size_t zend_multibyte_encoding_converter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from);
70ZEND_API int zend_multibyte_parse_encoding_list(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, int persistent);
71
72ZEND_API const zend_encoding *zend_multibyte_get_internal_encoding(void);
73ZEND_API const zend_encoding *zend_multibyte_get_script_encoding(void);
74ZEND_API int zend_multibyte_set_script_encoding(const zend_encoding **encoding_list, size_t encoding_list_size);
75ZEND_API int zend_multibyte_set_internal_encoding(const zend_encoding *encoding);
76ZEND_API int zend_multibyte_set_script_encoding_by_string(const char *new_value, size_t new_value_length);
77
78END_EXTERN_C()
79
80#endif /* ZEND_MULTIBYTE_H */
81
82/*
83 * Local variables:
84 * tab-width: 4
85 * c-basic-offset: 4
86 * End:
87 * vim600: sw=4 ts=4 tw=78
88 * vim<600: sw=4 ts=4 tw=78
89 */
90