tal             Thu Sep 26 06:43:42 2002 EDT

  Modified files:              
    /php4/ext/fribidi   fribidi.c README 
  Log:
  
  - Reverted back to old param parsing api (and eliminated a segfault by doing that)
  - Added the CapRTL charset -- should be used for testing on machines without 
Hebrew/Arabic/Persian
   fonts
  - Changed the note about deprecated behaviour from E_WARNING to E_NOTICE
  
  
Index: php4/ext/fribidi/fribidi.c
diff -u php4/ext/fribidi/fribidi.c:1.23 php4/ext/fribidi/fribidi.c:1.24
--- php4/ext/fribidi/fribidi.c:1.23     Wed Sep 25 09:49:55 2002
+++ php4/ext/fribidi/fribidi.c  Thu Sep 26 06:43:42 2002
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fribidi.c,v 1.23 2002/09/25 13:49:55 tal Exp $ */
+/* $Id: fribidi.c,v 1.24 2002/09/26 10:43:42 tal Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -64,6 +64,7 @@
        REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1255", FRIBIDI_CHARSET_CP1255, 
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1256", FRIBIDI_CHARSET_CP1256, 
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_ISIRI_3342", 
FRIBIDI_CHARSET_ISIRI_3342, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CAP_RTL", FRIBIDI_CHARSET_CAP_RTL, 
+CONST_CS | CONST_PERSISTENT);
        
        /* Directions */
        REGISTER_LONG_CONSTANT("FRIBIDI_AUTO", FRIBIDI_TYPE_ON, CONST_CS | 
CONST_PERSISTENT);
@@ -102,7 +103,7 @@
 |             Possible values:                               |
 |             a) FRIBIDI_LTR  - left to right.               |
 |             b) FRIBIDI_RTL  - right to left.               |
-|             c) FRIBIDI_AUTO - autodetected by the BiDi     |
+|             c) FRIBIDI_AUTO - autodetected by the Unicode  |
 |                               BiDi algorithm.              |
 |        3) Character code being used -                      |
 |             Possible values (i.e., charsets supported)     |
@@ -112,31 +113,35 @@
 |              FRIBIDI_CHARSET_CP1255                        |
 |              FRIBIDI_CHARSET_CP1256                        |
 |              FRIBIDI_CHARSET_ISIRI_3342                    |
+|              FRIBIDI_CHARSET_CAP_RTL                       |
 |                                                            |
 | Output: on success: The visual string.                     |
 |         on failure: FALSE                                  |
 +------------------------------------------------------------+
 */           
 
-/* {{{ proto string fribidi_log2vis(string v_str, long direction, long charset)
+/* {{{ proto string fribidi_log2vis(string logical_str, long direction, long charset)
    Convert a logical string to a visual one */
 PHP_FUNCTION(fribidi_log2vis)
 {
-       zval **direction;
-       long charset;
+       zval **logical_str, **direction, **charset;
        FriBidiChar *u_logical_str, *u_visual_str;  /* unicode strings .... */
-       char *v_str, *in_string, *out_string;
+       char *in_string, *out_string;
        int len, alloc_len;
        FriBidiCharType base_dir;
        FriBidiStrIndex *position_L_to_V_list;
        FriBidiStrIndex *position_V_to_L_list;
        FriBidiLevel    *embedding_level_list;
-                                  
-       /* parse parameters from input */
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szl", &v_str, &len, 
&direction, &charset) == FAILURE) {
-               return;
+
+       /* get parameters from input */
+       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &logical_str, 
+&direction, &charset) == FAILURE) {
+               WRONG_PARAM_COUNT;
        }
 
+       /* convert argument types */
+       convert_to_string_ex(logical_str);
+       convert_to_long_ex(charset);
+       
        if (Z_TYPE_PP(direction) == IS_LONG) {
                convert_to_long_ex(direction);
                base_dir = Z_LVAL_PP(direction);
@@ -150,11 +155,11 @@
                        base_dir = FRIBIDI_TYPE_ON;
                }
                        
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The use of strings to 
mark the base direction is deprecated, please use the FRIBIDI_LTR, FRIBIDI_RTL and 
FRIBIDI_AUTO constants");
+               php_error_docref(NULL TSRMLS_CC, E_NOTICE, "The use of strings to mark 
+the base direction is deprecated, please use the FRIBIDI_LTR, FRIBIDI_RTL and 
+FRIBIDI_AUTO constants");
        }
 
        /* allocate space and prepare all local variables */
-       in_string = estrndup(v_str, len);
+       in_string = estrndup(Z_STRVAL_PP(logical_str), len);
        alloc_len = len+1;
 
        u_logical_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len);
@@ -168,14 +173,15 @@
                in_string[len-1] = '\0';
        }
 
-       switch(charset) {
+       switch(Z_LVAL_PP(charset)) {
                case FRIBIDI_CHARSET_UTF8:
                case FRIBIDI_CHARSET_ISO8859_6:
                case FRIBIDI_CHARSET_ISO8859_8:
                case FRIBIDI_CHARSET_CP1255:
                case FRIBIDI_CHARSET_CP1256:
                case FRIBIDI_CHARSET_ISIRI_3342:
-                       len = fribidi_charset_to_unicode(charset, in_string, len, 
u_logical_str);
+               case FRIBIDI_CHARSET_CAP_RTL:
+                       len = fribidi_charset_to_unicode(Z_LVAL_PP(charset), 
+in_string, len, u_logical_str);
                        break;
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown charset");
@@ -195,14 +201,15 @@
        fribidi_log2vis(u_logical_str, len, &base_dir, u_visual_str, 
position_L_to_V_list, position_V_to_L_list, embedding_level_list);
        
        /* convert back to original char set */
-       switch(charset) {
+       switch(Z_LVAL_PP(charset)) {
                case FRIBIDI_CHARSET_UTF8:
                case FRIBIDI_CHARSET_ISO8859_6:
                case FRIBIDI_CHARSET_ISO8859_8:
                case FRIBIDI_CHARSET_CP1255:
                case FRIBIDI_CHARSET_CP1256:
                case FRIBIDI_CHARSET_ISIRI_3342:
-                       fribidi_unicode_to_charset(charset, u_visual_str, len, 
out_string);
+               case FRIBIDI_CHARSET_CAP_RTL:
+                       fribidi_unicode_to_charset(Z_LVAL_PP(charset), u_visual_str, 
+len, out_string);
                        break;                                                         
         
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown charset");
Index: php4/ext/fribidi/README
diff -u php4/ext/fribidi/README:1.5 php4/ext/fribidi/README:1.6
--- php4/ext/fribidi/README:1.5 Tue Sep 17 12:27:27 2002
+++ php4/ext/fribidi/README     Thu Sep 26 06:43:42 2002
@@ -18,12 +18,13 @@
                  c) FRIBIDI_AUTO - autodetect the base direction
             3) The char code being used, which can be one of the following
                constants:
-                 a) FRIBIDI_CHARSET_UTF8
-                 b) FRIBIDI_CHARSET_8859_6
-                 c) FRIBIDI_CHARSET_8859_8
-                 d) FRIBIDI_CHARSET_CP1255
-                 e) FRIBIDI_CHARSET_CP1256
-                 f) FRIBIDI_CHARSET_ISIRI_3342
+                 a) FRIBIDI_CHARSET_UTF8       (Unicode)
+                 b) FRIBIDI_CHARSET_8859_6     (Arabic)
+                 c) FRIBIDI_CHARSET_8859_8     (Hebrew)
+                 d) FRIBIDI_CHARSET_CP1255     (Hebrew/Yiddish)
+                 e) FRIBIDI_CHARSET_CP1256     (Arabic)
+                 f) FRIBIDI_CHARSET_ISIRI_3342 (Persian)
+                 g) FRIBIDI_CHARSET_CAP_RTL - Used for test purposes, will treat CAPS 
+as non-English letetrs
 
 Note: Currently, FriBidi supports the above Character Codes alone. 
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to