114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/********************************************************************** 214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng regtrav.c - Oniguruma (regular expression library) 314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng**********************************************************************/ 414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/*- 514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> 614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * All rights reserved. 714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * Redistribution and use in source and binary forms, with or without 914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * modification, are permitted provided that the following conditions 1014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * are met: 1114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 1. Redistributions of source code must retain the above copyright 1214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * notice, this list of conditions and the following disclaimer. 1314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 2. Redistributions in binary form must reproduce the above copyright 1414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * notice, this list of conditions and the following disclaimer in the 1514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * documentation and/or other materials provided with the distribution. 1614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 1714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * SUCH DAMAGE. 2814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng */ 2914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 3014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#include "regint.h" 3114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 3214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_CAPTURE_HISTORY 3314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 3414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengstatic int 3514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengcapture_tree_traverse(OnigCaptureTreeNode* node, int at, 3614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng int(*callback_func)(int,int,int,int,int,void*), 3714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng int level, void* arg) 3814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng{ 3914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng int r, i; 4014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 4114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if (node == (OnigCaptureTreeNode* )0) 4214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng return 0; 4314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 4414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if ((at & ONIG_TRAVERSE_CALLBACK_AT_FIRST) != 0) { 4514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng r = (*callback_func)(node->group, node->beg, node->end, 4614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng level, ONIG_TRAVERSE_CALLBACK_AT_FIRST, arg); 4714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if (r != 0) return r; 4814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng } 4914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 5014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng for (i = 0; i < node->num_childs; i++) { 5114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng r = capture_tree_traverse(node->childs[i], at, 5214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng callback_func, level + 1, arg); 5314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if (r != 0) return r; 5414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng } 5514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 5614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if ((at & ONIG_TRAVERSE_CALLBACK_AT_LAST) != 0) { 5714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng r = (*callback_func)(node->group, node->beg, node->end, 5814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng level, ONIG_TRAVERSE_CALLBACK_AT_LAST, arg); 5914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng if (r != 0) return r; 6014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng } 6114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 6214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng return 0; 6314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} 6414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif /* USE_CAPTURE_HISTORY */ 6514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng 6614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int 6714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengonig_capture_tree_traverse(OnigRegion* region, int at, 6814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng int(*callback_func)(int,int,int,int,int,void*), void* arg) 6914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng{ 7014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_CAPTURE_HISTORY 7114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng return capture_tree_traverse(region->history_root, at, 7214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng callback_func, 0, arg); 7314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#else 7414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng return ONIG_NO_SUPPORT_CONFIG; 7514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif 7614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} 77