andrei          Fri Feb  2 20:53:50 2001 EDT

  Modified files:              
    /php4       NEWS 
    /php4/ext/pcre      php_pcre.c 
  Log:
  Adding delimiter capturing functionality.
  
  As far as NEWS, compilation fixed don't belong here.
  
  
Index: php4/NEWS
diff -u php4/NEWS:1.578 php4/NEWS:1.579
--- php4/NEWS:1.578     Fri Feb  2 18:09:20 2001
+++ php4/NEWS   Fri Feb  2 20:53:49 2001
@@ -2,8 +2,9 @@
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 ?? ??? 200?, Version 4.0.5
-- pspell .12 fix (Hugh Jones)
-- Fix strip_tags to not strip a lone > character (Rasmus)
+- Added PREG_SPLIT_DELIM_CAPTURE flag to preg_split() that allows for Perl-like
+  functionality of capturing parenthesized delimiter expression. (Andrei)
+- Fixed strip_tags() to not strip a lone > character. (Rasmus)
 - Added new UDM_PARAM_STOPTABLE and UDM_PARAM_STOPFILE parameters
   for Udm_Set_Agent_Params mnoGoSearch module. Now it can use stopwords
   stored either in database or in the plain text files. Added php warnings.
Index: php4/ext/pcre/php_pcre.c
diff -u php4/ext/pcre/php_pcre.c:1.84 php4/ext/pcre/php_pcre.c:1.85
--- php4/ext/pcre/php_pcre.c:1.84       Thu Feb  1 07:25:53 2001
+++ php4/ext/pcre/php_pcre.c    Fri Feb  2 20:53:49 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_pcre.c,v 1.84 2001/02/01 15:25:53 andrei Exp $ */
+/* $Id: php_pcre.c,v 1.85 2001/02/03 04:53:49 andrei Exp $ */
 
 /*
        TODO:
@@ -33,13 +33,14 @@
 
 #include "ext/standard/php_string.h"
 
-#define PREG_PATTERN_ORDER     0
-#define PREG_SET_ORDER         1
+#define PREG_PATTERN_ORDER                     0
+#define PREG_SET_ORDER                         1
 
-#define        PREG_SPLIT_NO_EMPTY     (1<<0)
+#define        PREG_SPLIT_NO_EMPTY                     (1<<0)
+#define PREG_SPLIT_DELIM_CAPTURE       (1<<1)
 
-#define PREG_REPLACE_EVAL      (1<<0)
-#define PREG_REPLACE_FUNC      (1<<1)
+#define PREG_REPLACE_EVAL                      (1<<0)
+#define PREG_REPLACE_FUNC                      (1<<1)
 
 #ifdef ZTS
 int pcre_globals_id;
@@ -110,6 +111,7 @@
        REGISTER_LONG_CONSTANT("PREG_PATTERN_ORDER", PREG_PATTERN_ORDER, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PREG_SET_ORDER", PREG_SET_ORDER, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PREG_SPLIT_NO_EMPTY", PREG_SPLIT_NO_EMPTY, CONST_CS | 
CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("PREG_SPLIT_DELIM_CAPTURE", PREG_SPLIT_DELIM_CAPTURE, 
+CONST_CS | CONST_PERSISTENT);
        return SUCCESS;
 }
 /* }}} */
@@ -1064,8 +1066,9 @@
        int                              exoptions = 0;         /* Execution options */
        int                              preg_options = 0;      /* Custom preg options 
*/
        int                              argc;                          /* Argument 
count */
-       int                              limit_val;                     /* Integer 
value of limit */
+       int                              limit_val = -1;        /* Integer value of 
+limit */
        int                              no_empty = 0;          /* If NO_EMPTY flag is 
set */
+       int                              delim_capture = 0; /* If delimiters should be 
+captured */
        int                              count = 0;                     /* Count of 
matched subpatterns */
        int                              start_offset;          /* Where the new 
search starts */
        int                              g_notempty = 0;        /* If the match should 
not be empty */
@@ -1078,16 +1081,15 @@
                WRONG_PARAM_COUNT;
        }
        
-       if (argc == 3) {
+       if (argc > 2) {
                convert_to_long_ex(limit);
                limit_val = Z_LVAL_PP(limit);
-       }
-       else
-               limit_val = -1;
-       
-       if (argc == 4) {
-               convert_to_long_ex(flags);
-               no_empty = Z_LVAL_PP(flags) & PREG_SPLIT_NO_EMPTY;
+
+               if (argc > 3) {
+                       convert_to_long_ex(flags);
+                       no_empty = Z_LVAL_PP(flags) & PREG_SPLIT_NO_EMPTY;
+                       delim_capture = Z_LVAL_PP(flags) & PREG_SPLIT_DELIM_CAPTURE;
+               }
        }
        
        /* Make sure we're dealing with strings */
@@ -1133,6 +1135,17 @@
                                                                           
&Z_STRVAL_PP(subject)[offsets[0]]-last_match, 1);
                        
                        last_match = &Z_STRVAL_PP(subject)[offsets[1]];
+
+                       if (delim_capture) {
+                               int i, match_len;
+                               for (i = 1; i < count; i++) {
+                                       match_len = offsets[(i<<1)+1] - offsets[i<<1];
+                                       if (!no_empty || match_len > 0)
+                                               add_next_index_stringl(return_value,
+                                                                                      
+    &Z_STRVAL_PP(subject)[offsets[i<<1]],
+                                                                                      
+    match_len, 1);
+                               }
+                       }
                        
                        /* One less left to do */
                        if (limit_val != -1)



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to