27static int create_transliterator(
char *str_id,
size_t str_id_len,
zend_long direction,
zval *
object )
30 UChar *ustr_id =
NULL;
31 int32_t ustr_id_len = 0;
32 UTransliterator *utrans;
33 UParseError parse_error;
57 utrans = utrans_openU( ustr_id, ustr_id_len, (UTransDirection ) direction,
67 spprintf( &
buf, 0,
"transliterator_create: unable to open ICU transliterator"
68 " with id \"%s\"", str_id );
71 "transliterator_create: unable to open ICU transliterator", 0 );
88 "transliterator_create: internal constructor call failed", 0 );
115 res = create_transliterator( str_id, str_id_len, direction,
object );
127 size_t str_rules_len;
128 UChar *ustr_rules =
NULL;
129 int32_t ustr_rules_len = 0;
131 UParseError parse_error;
132 UTransliterator *utrans;
133 UChar
id[] = {0x52, 0x75, 0x6C, 0x65, 0x73, 0x54, 0x72,
134 0x61, 0x6E, 0x73, 0x50, 0x48, 0x50, 0};
160 utrans = utrans_openU(
id, (
sizeof(
id ) - 1 ) / (
sizeof( *
id ) ), (UTransDirection ) direction,
172 spprintf( &
msg, 0,
"transliterator_create_from_rules: unable to "
173 "create ICU transliterator from rules (%s)", parse_error_str.
s?
ZSTR_VAL(parse_error_str.
s) :
"" );
174 smart_str_free( &parse_error_str );
193 UTransliterator *utrans;
211 "inverse ICU transliterator" );
230 en = utrans_openIDs( &
status );
232 "transliterator_list_ids: Failed to obtain registered transliterators" );
235 while( (elem = uenum_unext( en, &elem_len, &
status )) )
256 "Failed to build array of registered transliterators", 0 );
268 int32_t ustr_len = 0,
281 if (
object ==
NULL) {
296 object = &tmp_object;
303 zend_string_free( message );
311 object = &tmp_object;
327 if (limit != -1 &&
start > limit) {
341 if( (
start > ustr_len ) || (( limit != -1 ) && (limit > ustr_len ) ) )
345 "transliterator_transliterate: Neither \"start\" nor the \"end\" "
346 "arguments can exceed the number of UTF-16 code units "
347 "(in this case, %d)", (
int) ustr_len );
357 uresult =
safe_emalloc( ustr_len,
sizeof( UChar ), 1 *
sizeof( UChar ) );
358 capacity = ustr_len + 1;
362 int32_t temp_limit = ( limit == -1 ? ustr_len : (int32_t) limit );
363 memcpy( uresult, ustr, ustr_len *
sizeof( UChar ) );
364 uresult_len = ustr_len;
366 utrans_transUChars( to->
utrans, uresult, &uresult_len, capacity, (int32_t)
start,
372 uresult =
safe_emalloc( uresult_len,
sizeof( UChar ), 1 *
sizeof( UChar ) );
373 capacity = uresult_len + 1;
379 uresult =
safe_erealloc( uresult, uresult_len,
sizeof( UChar ), 1 *
sizeof( UChar ) );
388 "transliterator_transliterate: transliteration failed", 0 );
395 uresult[uresult_len] = (UChar) 0;
423 "An object of this type cannot be created with the new operator.",
const U_BUFFER_OVERFLOW_ERROR
const U_STRING_NOT_TERMINATED_WARNING
const U_ILLEGAL_ARGUMENT_ERROR
zend_ffi_ctype_name_buf buf
void intl_convert_utf8_to_utf16(UChar **target, int32_t *target_len, const char *src, size_t src_len, UErrorCode *status)
zend_string * intl_convert_utf16_to_utf8(const UChar *src, int32_t src_len, UErrorCode *status)
#define INTL_DATA_ERROR_P(obj)
#define INTL_CHECK_STATUS(err, msg)
#define INTL_DATA_ERROR_CODE(obj)
#define INTL_METHOD_CHECK_STATUS_OR_GOTO(obj, msg, label)
#define INTL_METHOD_RETVAL_UTF8(obj, ustring, ulen, free_it)
#define INTL_METHOD_CHECK_STATUS_OR_NULL(obj, msg)
void intl_errors_set_custom_msg(intl_error *err, const char *msg, int copyMsg)
void intl_errors_set(intl_error *err, UErrorCode code, const char *msg, int copyMsg)
void intl_error_reset(intl_error *err)
void intl_error_set_code(intl_error *err, UErrorCode err_code)
void intl_error_set_custom_msg(intl_error *err, const char *msg, int copyMsg)
smart_str intl_parse_error_to_string(UParseError *pe)
zend_string * intl_error_get_message(intl_error *err)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
transliterator_get_error_code(Transliterator $transliterator)
transliterator_create_from_rules(string $rules, int $direction=Transliterator::FORWARD)
transliterator_transliterate(Transliterator|string $transliterator, string $string, int $start=0, int $end=-1)
transliterator_create(string $id, int $direction=Transliterator::FORWARD)
transliterator_list_ids()
transliterator_create_inverse(Transliterator $transliterator)
transliterator_get_error_message(Transliterator $transliterator)
zend_class_entry * Transliterator_ce_ptr
int transliterator_object_construct(zval *object, UTransliterator *utrans, UErrorCode *status)
#define TRANSLITERATOR_REVERSE
#define TRANSLITERATOR_ERROR_P(co)
#define TRANSLITERATOR_METHOD_FETCH_OBJECT
#define TRANSLITERATOR_FORWARD
#define TRANSLITERATOR_ERROR_CODE(co)
#define TRANSLITERATOR_METHOD_INIT_VARS
#define Z_INTL_TRANSLITERATOR_P(zv)
#define TRANSLITERATOR_ERROR_CODE_P(co)
#define TRANSLITERATOR_METHOD_FETCH_OBJECT_NO_CHECK
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str)
#define Z_PARAM_OBJ_OF_CLASS_OR_STR(destination_object, base_ce, destination_string)
#define ZEND_PARSE_PARAMETERS_END()
#define ZEND_PARSE_PARAMETERS_NONE()
#define Z_PARAM_STRING(dest, dest_len)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define Z_PARAM_LONG(dest)
#define safe_erealloc(ptr, nmemb, size, offset)
#define safe_emalloc(nmemb, size, offset)
ZEND_API ZEND_COLD zend_object * zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
struct _zend_string zend_string
struct _zend_object zend_object
#define ZVAL_OBJ_COPY(z, o)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)