andrei Tue Jul 11 17:48:14 2006 UTC
Modified files:
/php-src/ext/unicode unicode_iterators.c
Log:
Implement getRuleStatus() and getRuleStatusArray() as well as related
constants.
http://cvs.php.net/viewvc.cgi/php-src/ext/unicode/unicode_iterators.c?r1=1.40&r2=1.41&diff_format=u
Index: php-src/ext/unicode/unicode_iterators.c
diff -u php-src/ext/unicode/unicode_iterators.c:1.40
php-src/ext/unicode/unicode_iterators.c:1.41
--- php-src/ext/unicode/unicode_iterators.c:1.40 Tue Jul 11 16:20:21 2006
+++ php-src/ext/unicode/unicode_iterators.c Tue Jul 11 17:48:14 2006
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: unicode_iterators.c,v 1.40 2006/07/11 16:20:21 andrei Exp $ */
+/* $Id: unicode_iterators.c,v 1.41 2006/07/11 17:48:14 andrei Exp $ */
/*
* TODO
@@ -99,7 +99,6 @@
UBRK_SENTENCE,
};
-PHPAPI zend_class_entry* text_iterator_aggregate_ce;
PHPAPI zend_class_entry* text_iterator_ce;
PHPAPI zend_class_entry* rev_text_iterator_ce;
@@ -1123,7 +1122,7 @@
}
/*
- * ReverseTextIterator will behave the same as the normal one.
+ * ReverseTextIterator will behave in the same way as the normal one.
*/
flags = intern->flags | ITER_REVERSE;
iter_ops[intern->type]->following(intern, offset, flags TSRMLS_CC);
@@ -1141,7 +1140,7 @@
}
/*
- * ReverseTextIterator will behave the same as the normal one.
+ * ReverseTextIterator will behave in the same way as the normal one.
*/
RETURN_BOOL(iter_ops[intern->type]->isBoundary(intern, offset,
intern->flags TSRMLS_CC));
}
@@ -1154,10 +1153,6 @@
return;
}
- if (!return_value_used) {
- return;
- }
-
array_init(return_value);
count = ubrk_countAvailable();
for (i = 0; i < count; i++) {
@@ -1165,6 +1160,56 @@
}
}
+PHP_METHOD(TextIterator, getRuleStatus)
+{
+ zval *object = getThis();
+ text_iter_obj *intern = (text_iter_obj*)
zend_object_store_get_object(object TSRMLS_CC);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
+ return;
+ }
+
+ if (intern->type >= ITER_CHARACTER && intern->type < ITER_TYPE_LAST) {
+ RETURN_LONG(ubrk_getRuleStatus(intern->u.brk.iter));
+ } else {
+ RETURN_LONG(0);
+ }
+}
+
+PHP_METHOD(TextIterator, getRuleStatusArray)
+{
+ int32_t status_vec[32], *vec_ptr = status_vec;
+ int32_t vec_size, i;
+ zval *object = getThis();
+ text_iter_obj *intern = (text_iter_obj*)
zend_object_store_get_object(object TSRMLS_CC);
+ UErrorCode status = U_ZERO_ERROR;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
+ return;
+ }
+
+ array_init(return_value);
+ if (intern->type < ITER_CHARACTER) {
+ add_next_index_long(return_value, 0);
+ } else {
+ vec_size = sizeof(status_vec) / sizeof(status_vec[0]);
+ vec_size = ubrk_getRuleStatusVec(intern->u.brk.iter, vec_ptr,
vec_size, &status);
+ if (status == U_BUFFER_OVERFLOW_ERROR) {
+ vec_ptr = safe_emalloc(vec_size, sizeof(int32_t), 0);
+ status = U_ZERO_ERROR;
+ vec_size = ubrk_getRuleStatusVec(intern->u.brk.iter,
vec_ptr, vec_size, &status);
+ }
+
+ for (i = 0; i < vec_size; i++) {
+ add_next_index_long(return_value, vec_ptr[i]);
+ }
+
+ if (vec_ptr != status_vec) {
+ efree(vec_ptr);
+ }
+ }
+}
+
static zend_function_entry text_iterator_funcs[] = {
PHP_ME(TextIterator, __construct, NULL, ZEND_ACC_PUBLIC)
@@ -1183,6 +1228,9 @@
PHP_ME(TextIterator, preceding, NULL, ZEND_ACC_PUBLIC)
PHP_ME(TextIterator, isBoundary, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(TextIterator, getRuleStatus, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(TextIterator, getRuleStatusArray, NULL, ZEND_ACC_PUBLIC)
+
PHP_ME(TextIterator, getAvailableLocales, NULL, ZEND_ACC_PUBLIC |
ZEND_ACC_STATIC)
PHP_MALIAS(TextIterator, first, rewind, NULL, ZEND_ACC_PUBLIC)
@@ -1207,14 +1255,35 @@
rev_text_iterator_ce->ce_flags |= ZEND_ACC_FINAL_CLASS;
zend_class_implements(rev_text_iterator_ce TSRMLS_CC, 1,
zend_ce_iterator);
- zend_declare_class_constant_long(text_iterator_ce, "CODE_POINT",
sizeof("CODE_POINT")-1, ITER_CODE_POINT TSRMLS_CC);
- zend_declare_class_constant_long(text_iterator_ce, "COMB_SEQUENCE",
sizeof("COMB_SEQUENCE")-1, ITER_COMB_SEQUENCE TSRMLS_CC);
- zend_declare_class_constant_long(text_iterator_ce, "CHARACTER",
sizeof("CHARACTER")-1, ITER_CHARACTER TSRMLS_CC);
- zend_declare_class_constant_long(text_iterator_ce, "WORD",
sizeof("WORD")-1, ITER_WORD TSRMLS_CC);
- zend_declare_class_constant_long(text_iterator_ce, "LINE",
sizeof("LINE")-1, ITER_LINE TSRMLS_CC);
- zend_declare_class_constant_long(text_iterator_ce, "SENTENCE",
sizeof("SENTENCE")-1, ITER_SENTENCE TSRMLS_CC);
-
- zend_declare_class_constant_long(text_iterator_ce, "DONE",
sizeof("DONE")-1, UBRK_DONE TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "CODE_POINT",
sizeof("CODE_POINT")-1, ITER_CODE_POINT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "COMB_SEQUENCE",
sizeof("COMB_SEQUENCE")-1, ITER_COMB_SEQUENCE TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "CHARACTER",
sizeof("CHARACTER")-1, ITER_CHARACTER TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD",
sizeof("WORD")-1, ITER_WORD TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "LINE",
sizeof("LINE")-1, ITER_LINE TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "SENTENCE",
sizeof("SENTENCE")-1, ITER_SENTENCE TSRMLS_CC);
+
+ zend_declare_class_constant_long(text_iterator_ce, "DONE",
sizeof("DONE")-1, UBRK_DONE TSRMLS_CC);
+
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_NONE",
sizeof("WORD_NONE")-1, UBRK_WORD_NONE TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_NONE_LIMIT",
sizeof("WORD_NONE_LIMIT")-1, UBRK_WORD_NONE_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_NUMBER",
sizeof("WORD_NUMBER")-1, UBRK_WORD_NUMBER TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_NUMBER_LIMIT",
sizeof("WORD_NUMBER_LIMIT")-1, UBRK_WORD_NUMBER_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_LETTER",
sizeof("WORD_LETTER")-1, UBRK_WORD_LETTER TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_LETTER_LIMIT",
sizeof("WORD_LETTER_LIMIT")-1, UBRK_WORD_LETTER_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_KANA",
sizeof("WORD_KANA")-1, UBRK_WORD_KANA TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_KANA_LIMIT",
sizeof("WORD_KANA_LIMIT")-1, UBRK_WORD_KANA_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_IDEO",
sizeof("WORD_IDEO")-1, UBRK_WORD_IDEO TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "WORD_IDEO_LIMIT",
sizeof("WORD_IDEO_LIMIT")-1, UBRK_WORD_IDEO_LIMIT TSRMLS_CC);
+
+ zend_declare_class_constant_long(text_iterator_ce, "LINE_SOFT",
sizeof("LINE_SOFT")-1, UBRK_LINE_SOFT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "LINE_SOFT_LIMIT",
sizeof("LINE_SOFT_LIMIT")-1, UBRK_LINE_SOFT_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "LINE_HARD",
sizeof("LINE_HARD")-1, UBRK_LINE_HARD TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "LINE_HARD_LIMIT",
sizeof("LINE_HARD_LIMIT")-1, UBRK_LINE_HARD_LIMIT TSRMLS_CC);
+
+ zend_declare_class_constant_long(text_iterator_ce, "SENTENCE_TERM",
sizeof("SENTENCE_TERM")-1, UBRK_SENTENCE_TERM TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "SENTENCE_TERM_LIMIT",
sizeof("SENTENCE_TERM_LIMIT")-1, UBRK_SENTENCE_TERM_LIMIT TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "SENTENCE_SEP",
sizeof("SENTENCE_SEP")-1, UBRK_SENTENCE_SEP TSRMLS_CC);
+ zend_declare_class_constant_long(text_iterator_ce, "SENTENCE_SEP_LIMIT",
sizeof("SENTENCE_SEP_LIMIT")-1, UBRK_SENTENCE_SEP_LIMIT TSRMLS_CC);
}
/*
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php