root/ext/mbstring/oniguruma/regtrav.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. capture_tree_traverse
  2. onig_capture_tree_traverse

   1 /**********************************************************************
   2   regtrav.c -  Oniguruma (regular expression library)
   3 **********************************************************************/
   4 /*-
   5  * Copyright (c) 2002-2004  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
   6  * All rights reserved.
   7  *
   8  * Redistribution and use in source and binary forms, with or without
   9  * modification, are permitted provided that the following conditions
  10  * are met:
  11  * 1. Redistributions of source code must retain the above copyright
  12  *    notice, this list of conditions and the following disclaimer.
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  *
  17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27  * SUCH DAMAGE.
  28  */
  29 
  30 #include "regint.h"
  31 
  32 #ifdef USE_CAPTURE_HISTORY
  33 
  34 static int
  35 capture_tree_traverse(OnigCaptureTreeNode* node, int at,
  36                       int(*callback_func)(int,int,int,int,int,void*),
  37                       int level, void* arg)
  38 {
  39   int r, i;
  40 
  41   if (node == (OnigCaptureTreeNode* )0)
  42     return 0;
  43 
  44   if ((at & ONIG_TRAVERSE_CALLBACK_AT_FIRST) != 0) {
  45     r = (*callback_func)(node->group, node->beg, node->end,
  46                          level, ONIG_TRAVERSE_CALLBACK_AT_FIRST, arg);
  47     if (r != 0) return r;
  48   }
  49 
  50   for (i = 0; i < node->num_childs; i++) {
  51     r = capture_tree_traverse(node->childs[i], at,
  52                               callback_func, level + 1, arg);
  53     if (r != 0) return r;
  54   }
  55 
  56   if ((at & ONIG_TRAVERSE_CALLBACK_AT_LAST) != 0) {
  57     r = (*callback_func)(node->group, node->beg, node->end,
  58                          level, ONIG_TRAVERSE_CALLBACK_AT_LAST, arg);
  59     if (r != 0) return r;
  60   }
  61 
  62   return 0;
  63 }
  64 #endif /* USE_CAPTURE_HISTORY */
  65 
  66 extern int
  67 onig_capture_tree_traverse(OnigRegion* region, int at,
  68                   int(*callback_func)(int,int,int,int,int,void*), void* arg)
  69 {
  70 #ifdef USE_CAPTURE_HISTORY
  71   return capture_tree_traverse(region->history_root, at,
  72                                callback_func, 0, arg);
  73 #else
  74   return ONIG_NO_SUPPORT_CONFIG;
  75 #endif
  76 }

/* [<][>][^][v][top][bottom][index][help] */