> 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

Reply via email to