> what's this? :) Did you get interested?
Hmm, it went on like following... p.s. please keep quiet on this for now though I guess you'll find a lot to say about :) Moriyoshi ----- translated message begins here ----- Hi, I'm now planning on a new mbstring API as referencing to HEAD on cvs.php.net and that on sourceforge.jp. I hope this helps us determine the final API spec so that we can integrate those two different code bases, though I doesn't mean a faster development without consensus should come first. The most significant change you may find is that error number values are no longer stored in a thread-local structure (tsrm resource). IMO this could improve code readabilities while it would also make debugging harder. Besides, I'm trying to add to each API function an argument that is a pointer to the error reporting function specified by the caller. The purpose is that we can choose the way in which the error messages are shown since we cannot invoke a kind of php_error_docref() from everywhere, as I mentioned. Your comments will be greatly appreciated. Regards, Moriyoshi ----- translated message ends -----
/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Moriyoshi Koizumi <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ /* $Id$ */ #ifndef _PHP_MB_API_H #define _PHP_MB_API_H #include "php.h" #if HAVE_MBSTRING /* {{{ includes */ #ifdef USE_MBSTRING1 # include "mbfilter.h" #endif /* USE_MBSTRING1 */ /* }}} */ /* {{{ type definitions */ /* {{{ typedef enum php_mb_err_t */ typedef enum _php_mb_err_t { PHP_MB_FAILURE = -1, PHP_MB_SUCCESS = 0, PHP_MB_ERR_NO_MEMORY, PHP_MB_ERR_NULL_POINTER, PHP_MB_ERR_BUFFER_OVER_FLOW, PHP_MB_ERR_UNSUPPORTED_ENCODING, PHP_MB_ERR_UNSUPPORTED_LANGUAGE, PHP_MB_ERR_UNSUPPORTED_CONVERT, PHP_MB_ERR_UNSUPPORTED_IDENTIFY, PHP_MB_ERR_ILLEGAL_ARGUMENT, PHP_MB_ERR_MISSING_PROPERTY, PHP_MB_ERR_INDEX_OUT_OF_BOUNDS, PHP_MB_ERR_ENCODING_DETECT_FAILURE, PHP_MB_ERR_NOT_FOUND, PHP_MB_ERR_NOT_IMPLEMENTED } php_mb_err_t; /* }}} */ #ifdef USE_MBSTRING1 /* compatibility stuff */ typedef mbfl_no_encoding php_mb_encid; typedef mbfl_encoding php_mb_enc; typedef mbfl_language php_mb_lang; #define php_mb_langid_invalid mbfl_no_language_invalid #define php_mb_langid_neutral mbfl_no_language_neutral #define php_mb_langid_jajp mbfl_no_language_japanese #define php_mb_langid_enuk mbfl_no_language_english #define php_mb_langid_enus mbfl_no_language_english #define php_mb_langid_kokr mbfl_no_language_korean #define php_mb_langid_zhcn mbfl_no_language_simplied_chinese #define php_mb_langid_zhtw mbfl_no_language_traditional_chinese #define php_mb_encid_invalid mbfl_no_encoding_invalid #define php_mb_encid_pass mbfl_no_encoding_pass #define php_mb_encid_auto mbfl_no_encoding_auto #define php_mb_encid_wchar mbfl_no_encoding_wchar #define php_mb_encid_byte2be mbfl_no_encoding_byte2be #define php_mb_encid_byte2le mbfl_no_encoding_byte2le #define php_mb_encid_byte4be mbfl_no_encoding_byte4be #define php_mb_encid_byte4le mbfl_no_encoding_byte4le #define php_mb_encid_base64 mbfl_no_encoding_base64 #define php_mb_encid_uuencode mbfl_no_encoding_uuencode #define php_mb_encid_qprint mbfl_no_encoding_qprint #define php_mb_encid_7bit mbfl_no_encoding_7bit #define php_mb_encid_8bit mbfl_no_encoding_8bit #define php_mb_encid_ucs4 mbfl_no_encoding_ucs4 #define php_mb_encid_ucs4be mbfl_no_encoding_ucs4be #define php_mb_encid_ucs4le mbfl_no_encoding_ucs4le #define php_mb_encid_ucs2 mbfl_no_encoding_ucs2 #define php_mb_encid_ucs2be mbfl_no_encoding_ucs2be #define php_mb_encid_ucs2le mbfl_no_encoding_ucs2le #define php_mb_encid_utf32 mbfl_no_encoding_utf32 #define php_mb_encid_utf32be mbfl_no_encoding_utf32be #define php_mb_encid_utf32le mbfl_no_encoding_utf32le #define php_mb_encid_utf16 mbfl_no_encoding_utf16 #define php_mb_encid_utf16be mbfl_no_encoding_utf16be #define php_mb_encid_utf16le mbfl_no_encoding_utf16le #define php_mb_encid_utf8 mbfl_no_encoding_utf8 #define php_mb_encid_utf7 mbfl_no_encoding_utf7 #define php_mb_encid_utf7imap mbfl_no_encoding_utf7imap #define php_mb_encid_ascii mbfl_no_encoding_ascii #define php_mb_encid_euc_jp mbfl_no_encoding_euc_jp #define php_mb_encid_sjis mbfl_no_encoding_sjis #define php_mb_encid_eucjp_win mbfl_no_encoding_eucjp_win #define php_mb_encid_sjis_win mbfl_no_encoding_sjis_win #define php_mb_encid_sjis_mac mbfl_no_encoding_sjis_mac #define php_mb_encid_jis mbfl_no_encoding_jis #define php_mb_encid_2022jp mbfl_no_encoding_2022jp #define php_mb_encid_cp1252 mbfl_no_encoding_cp1252 #define php_mb_encid_8859_1 mbfl_no_encoding_8859_1 #define php_mb_encid_8859_2 mbfl_no_encoding_8859_2 #define php_mb_encid_8859_3 mbfl_no_encoding_8859_3 #define php_mb_encid_8859_4 mbfl_no_encoding_8859_4 #define php_mb_encid_8859_5 mbfl_no_encoding_8859_5 #define php_mb_encid_8859_6 mbfl_no_encoding_8859_6 #define php_mb_encid_8859_7 mbfl_no_encoding_8859_7 #define php_mb_encid_8859_8 mbfl_no_encoding_8859_8 #define php_mb_encid_8859_9 mbfl_no_encoding_8859_9 #define php_mb_encid_8859_10 mbfl_no_encoding_8859_10 #define php_mb_encid_8859_13 mbfl_no_encoding_8859_13 #define php_mb_encid_8859_14 mbfl_no_encoding_8859_14 #define php_mb_encid_8859_15 mbfl_no_encoding_8859_15 #define php_mb_encid_euc_cn mbfl_no_encoding_euc_cn #define php_mb_encid_cp936 mbfl_no_encoding_cp936 #define php_mb_encid_hz mbfl_no_encoding_hz #define php_mb_encid_euc_tw mbfl_no_encoding_euc_tw #define php_mb_encid_big5 mbfl_no_encoding_big5 #define php_mb_encid_euc_kr mbfl_no_encoding_euc_kr #define php_mb_encid_uhc mbfl_no_encoding_uhc #define php_mb_encid_koi8r mbfl_no_encoding_koi8r #define php_mb_encid_cp866 mbfl_no_encoding_cp866 #define PHP_MB_ENCTYPE_SBCS MBFL_ENCTYPE_SBCS #define PHP_MB_ENCTYPE_MBCS MBFL_ENCTYPE_MBCS #define PHP_MB_ENCTYPE_WCS2BE MBFL_ENCTYPE_WCS2BE #define PHP_MB_ENCTYPE_WCS2LE MBFL_ENCTYPE_WCS2LE #define PHP_MB_ENCTYPE_MWC2BE MBFL_ENCTYPE_MWC2BE #define PHP_MB_ENCTYPE_MWC2LE MBFL_ENCTYPE_MWC2LE #define PHP_MB_ENCTYPE_WCS4BE MBFL_ENCTYPE_WCS4BE #define PHP_MB_ENCTYPE_WCS4LE MBFL_ENCTYPE_WCS4LE #define PHP_MB_ENCTYPE_MWC4BE MBFL_ENCTYPE_MWC4BE #define PHP_MB_ENCTYPE_MWC4LE MBFL_ENCTYPE_MWC4LE #define PHP_MB_ENCTYPE_SHFTCODE MBFL_ENCTYPE_SHFTCODE #define PHP_MB_ENCTYPE_HTML_ENT MBFL_ENCTYPE_HTML_ENT typedef struct _php_mb_mime_hdr_encoder { mime_header_encoder_data *inst; } php_mb_mime_hdr_encoder; typedef struct _php_mb_mime_hdr_decoder { mime_header_decoder_data *inst; } php_mb_mime_hdr_decoder; #else typedef struct _php_mb_mime_hdr_encoder { mbfl_convert_filter *conv1_filter; mbfl_convert_filter *block_filter; mbfl_convert_filter *conv2_filter; mbfl_convert_filter *encod_filter; php_mb_str *result; php_mb_str *strtmp; php_mb_str *strenc; php_mb_str *strlwsp; int status1; int status2; size_t linehead; size_t firstindent; } php_mb_mime_hdr_encoder; typedef struct _php_mb_mime_hdr_decoder { mbfl_convert_filter *deco_filter; mbfl_convert_filter *conv1_filter; mbfl_convert_filter *conv2_filter; php_mb_str *result; php_mb_str *strcs; php_mb_str *strtmp; php_mb_enc *encoding_charset; php_mb_enc *encoding_transfer; php_mb_enc *encoding_output; int status; } php_mb_mime_hdr_decoder; #endif /* USE_MBSTRING1 */ typedef struct _php_mb_strtok_t { char *last; size_t nbytes_left; } php_mb_strtok_t; typedef struct _php_mb_enc_list { php_mb_enc **elems; unsigned int nelems; unsigned int alloced_size; } php_mb_enc_list; typedef void (*php_mb_err_report_func)(int type, const char *format, ...); /* }}} */ /* {{{ prototypes */ /* {{{ encoding descriptor related functions */ /* PHPAPI php_mb_err_t php_mb_enc_ctor(php_mb_enc *lang, php_mb_err_report_func report_err); */ PHPAPI void php_mb_enc_dtor(php_mb_enc *lang, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_get_enc_by_name(php_mb_enc **enc, const char *name, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_get_enc_by_id(php_mb_enc **enc, php_mb_enc_id id, php_mb_err_report_func report_err); /* }}} */ /* {{{ language descriptor related functions */ /* PHPAPI php_mb_err_t php_mb_lang_ctor(php_mb_lang *l, php_mb_err_report_func report_err); */ PHPAPI void php_mb_lang_dtor(php_mb_lang *lang, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_lang_create_mime_hdr_encoder(php_mb_lang *lang, php_mb_mime_hdr_encoder *encoder, php_mb_enc *from_Enc, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_get_lang_by_name(php_mb_lang **lang, const char *name, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_get_lang_by_id(php_mb_lang **lang, php_mb_langid id, php_mb_err_report_func report_err); /* }}} */ /* {{{ encoding list related functions */ PHPAPI php_mb_err_t php_mb_enc_list_ctor(php_mb_enc_list *list, php_mb_err_report_func report_err); PHPAPI void php_mb_enc_list_dtor(php_mb_enc_list *list, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_enc_list_add_encoding(php_mb_enc_list *list, php_mb_enc *enc, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_enc_list_init(php_mb_enc_list *list, const char *cstring, php_mb_err_report_func report_err); /* }}} */ /* {{{ mime header encoder / decoder */ PHPAPI php_mb_err_t php_mb_mime_hdr_encoder_ctor(php_mb_mime_hdr_encoder *encoder, php_mb_enc *trans_enc, php_mb_enc *to_enc, php_mb_enc *from_enc, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_mime_hdr_encoder_dtor(php_mb_mime_hdr_encoder *encoderi, php_mb_err_report_func report_err); PHPAPI php_mb_err_t php_mb_mime_hdr_decoder_ctor(php_mb_mime_hdr_decoder *decoder, php_mb_enc *to_enc); PHPAPI void php_mb_mime_hdr_decoder_dtor(php_mb_mime_hdr_decoder *decoder); /* }}} */ /* {{{ encoding detector related functions */ PHPAPI php_mb_err_t php_mb_detector_ctor(php_mb_detector *identd, const php_mb_enc_list *list); PHPAPI void php_mb_detector_dtor(php_mb_detector *identd); PHPAPI php_mb_err_t php_mb_detector_feed(php_mb_detector *identd, const char *value, size_t length); PHPAPI php_mb_err_t php_mb_detector_close(php_mb_detector *identd); PHPAPI php_mb_err_t php_mb_detector_judge(php_mb_detector *identd, php_mb_enc *candidate); /* }}} */ /* {{{ utility functions */ PHPAPI php_mb_err_t php_mb_convert_encoding(char **out_p, size_t *out_len, const char *in_p, size_t in_len, const php_mb_enc *to, const php_mb_enc *from); PHPAPI php_mb_err_t php_mb_detect_encoding(php_mb_enc **pretval, const char *str_val, size_t str_len, php_mb_enc **list, int listsize); PHPAPI php_mb_err_t php_mb_strlen(unsigned int *pretval, const char *str, size_t str_len, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_strpos(unsigned int *pretval, const char *haystack, size_t haystack_len, const char *needle, size_t needle_len, const php_mb_enc *encoding, unsigned int offset, int reverse_flag); PHPAPI php_mb_err_t php_mb_replace(char **pretval, size_t *retval_len, const char *search, size_t search_len, const char *replace, size_t replace_len, const char *subject, size_t subject_len, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_substr(char **pretval, size_t *retval_len, const char *str, size_t str_len, unsigned int start, unsigned int count, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_strcut(char **pretval, size_t *retval_len, const char *str, size_t str_len, unsigned int start, unsigned int size, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_strwidth(unsigned int *pretval, const char *str, size_t str_len, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_strimwidth(char **pretval, size_t *retval_len, const char *str, size_t str_len, const char *marker_val, size_t marker_len, size_t start, size_t width, const php_mb_enc *encoding); PHPAPI php_mb_err_t php_mb_html_numeric_entity(char **pretval, size_t *retval_len, const char *str, size_t str_len, int *convmap, unsigned int mapsize, int type, php_mb_enc *encoding TSRMLS_DC); PHPAPI php_mb_err_t php_mb_mbchar_bytes_ex(size_t *pretval, const char *s, const php_mb_enc *enc); PHPAPI php_mb_err_t php_mb_strtok(char **pretval, char *s1, size_t s1_len, const char *s2, size_t s2_len, php_mb_strtok_t *tok_d, php_mb_enc *enc); PHPAPI php_mb_err_t php_mb_strtok_r(char **pretval, char *str, size_t str_len, const char *needle, size_t needle_len, php_mb_strtok_t *tok_d, php_mb_enc *enc); PHPAPI php_mb_err_t php_mb_strchr(char **pretval, const char *str, unsigned int c, size_t nbytes, php_mb_enc *enc); PHPAPI char *php_mb_strrchr(const char *s, unsigned int c, size_t nbytes, php_mb_enc *enc); /* }}} */ /* }}} */ #endif /* HAVE_MBSTRING */ #endif /* _PHP_MB_API_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php