diff --git a/qse/include/qse/cmn/rex.h b/qse/include/qse/cmn/rex.h index 0c600958..f0f28a0c 100644 --- a/qse/include/qse/cmn/rex.h +++ b/qse/include/qse/cmn/rex.h @@ -1,5 +1,5 @@ /* - * $Id: rex.h 307 2009-11-25 13:32:20Z hyunghwan.chung $ + * $Id: rex.h 309 2009-11-27 13:46:49Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -236,11 +236,10 @@ qse_rex_node_t* qse_rex_comp ( ); int qse_rex_exec ( - qse_rex_t* rex, - const qse_char_t* str, - qse_size_t len, - const qse_char_t* substr, - qse_size_t sublen + qse_rex_t* rex, + const qse_cstr_t* str, + const qse_cstr_t* substr, + qse_cstr_t* matstr ); void* qse_buildrex ( diff --git a/qse/lib/cmn/rex1.c b/qse/lib/cmn/rex1.c index 7ac8cf10..2fb37c90 100644 --- a/qse/lib/cmn/rex1.c +++ b/qse/lib/cmn/rex1.c @@ -739,7 +739,7 @@ static qse_rex_node_t* comp2 (comp_t* com) /* enter a subgroup */ qse_rex_node_t* x, * ge; - + n = newgroupnode (com, QSE_NULL); if (n == QSE_NULL) return QSE_NULL; @@ -765,7 +765,6 @@ static qse_rex_node_t* comp2 (comp_t* com) break; } - case QSE_T('.'): n = newnode (com, QSE_REX_NODE_ANY); if (n == QSE_NULL) return QSE_NULL; @@ -1036,8 +1035,11 @@ static group_t* dupgroupstack (exec_t* e, group_t* gs) return head; } -/* creates a new group stack duplicating 'gs' and push 'gn' to it */ -static group_t* dupgroupstackpush (exec_t* e, group_t* gs, qse_rex_node_t* gn) +/* push 'gn' to the group stack 'gs'. + * if dup is non-zero, the group stack is duplicated and 'gn' is pushed to + * its top */ +static group_t* __groupstackpush ( + exec_t* e, group_t* gs, qse_rex_node_t* gn, int dup) { group_t* head, * elem; @@ -1064,9 +1066,16 @@ static group_t* dupgroupstackpush (exec_t* e, group_t* gs, qse_rex_node_t* gn) } else { - /* duplicate existing stack */ - head = dupgroupstack (e, gs); - if (head == QSE_NULL) return QSE_NULL; + if (dup) + { + /* duplicate existing stack */ + head = dupgroupstack (e, gs); + if (head == QSE_NULL) return QSE_NULL; + } + else + { + head = gs; + } } /* create a new stack element */ @@ -1076,7 +1085,8 @@ static group_t* dupgroupstackpush (exec_t* e, group_t* gs, qse_rex_node_t* gn) /* rollback */ if (gs == QSE_NULL) QSE_MMGR_FREE (e->rex->mmgr, head); - else freegroupstack (head, e->rex->mmgr); + else if (dup) + freegroupstack (head, e->rex->mmgr); e->rex->errnum = QSE_REX_ENOMEM; return QSE_NULL; @@ -1093,6 +1103,9 @@ static group_t* dupgroupstackpush (exec_t* e, group_t* gs, qse_rex_node_t* gn) return head; } +#define dupgroupstackpush(e,gs,gn) __groupstackpush(e,gs,gn,1) +#define groupstackpush(e,gs,gn) __groupstackpush(e,gs,gn,0) + /* duplidate a group stack excluding the top data element */ static group_t* dupgroupstackpop (exec_t* e, group_t* gs) { @@ -1195,7 +1208,7 @@ static int addcands ( { case QSE_REX_NODE_END: { -qse_printf (QSE_T("== ADDING THE END(MATCH) NODE MEANING MATCH FOUND == \n")); +/*qse_printf (QSE_T("== ADDING THE END(MATCH) NODE MEANING MATCH FOUND == \n"));*/ if (e->matchend == QSE_NULL || mptr >= e->matchend) e->matchend = mptr; e->nmatches++; @@ -1258,12 +1271,19 @@ qse_printf (QSE_T("== ADDING THE END(MATCH) NODE MEANING MATCH FOUND == \n")); group_t* gx; /* push the current group node (candnode) to - * the group stack duplicated. */ + * the group stack. if candnode->next is + * added to the candidate array, which means + * the group stack has already been used to + * a different path, the group stack is + * duplicated for this path. */ - gx = dupgroupstackpush (e, group, candnode); + gx = (candnode->occ.min <= 0)? + dupgroupstackpush (e, group, candnode): + groupstackpush (e, group, candnode); if (gx == QSE_NULL) return -1; - /* add the first node in the group */ + /* add the first node in the group to + * the candidate array */ refupgroupstack (gx); n = addcands (e, gx, candnode, candnode->u.g.head, mptr); @@ -1287,7 +1307,14 @@ qse_printf (QSE_T("== ADDING THE END(MATCH) NODE MEANING MATCH FOUND == \n")); if (prevnode == candnode) { -qse_printf (QSE_T("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n")); + /* consider a pattern like (x*)*. + * when GROUPEND is reached, an 'if' block below + * tries to add the first node(node->u.g.head) + * in the group again. however, it('x') is optional, + * a possible path reach GROUPEND directly without + * adding a candidate. this check is needed to + * avoid the infinite loop, which otherwise is not + * avoidable. */ break; } @@ -1302,7 +1329,10 @@ qse_printf (QSE_T("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n")); { group_t* gx; - /* take the next atom as a candidate. + /* the lower bound has been met. + * for a pattern (abc){3,4}, 'abc' has been + * repeated 3 times. in this case, the next + * node can be added to the candiate array. * it is actually a branch case. move on. */ if (top->next == QSE_NULL) @@ -1354,7 +1384,6 @@ qse_printf (QSE_T("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n")); break; } - default: { int n; @@ -1373,10 +1402,14 @@ qse_printf (QSE_T("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n")); { group_t* gx; + /* if the upper bound is greater than 0, + * this node is added to the candidate array */ + if (group != QSE_NULL && candnode->occ.min <= 0) { - /* if it belongs to a group and it has been - * pushed to a different path above, + /* if a group stack exists(group != QSE_NULL) + * for this path and it has been + * used for a different path above, * duplicate the group stack */ gx = dupgroupstack (e, group); if (gx == QSE_NULL) return -1; @@ -1511,7 +1544,7 @@ static int match (exec_t* e) * next chracter.*/ nmptr = cand->mptr + 1; } -//qse_printf (QSE_T("matched %c\n"), node->u.c); +/*qse_printf (QSE_T("matched %c\n"), node->u.c);*/ break; case QSE_REX_NODE_CSET: @@ -1626,6 +1659,7 @@ static int exec (exec_t* e) /* clear the pending set */ qse_lda_clear (&e->cand.set[e->cand.pending]); +#if 0 { int i; qse_printf (QSE_T("SET=")); @@ -1645,20 +1679,24 @@ for (i = 0; i < QSE_LDA_SIZE(&e->cand.set[e->cand.active]); i++) } qse_printf (QSE_T("\n")); } +#endif if (match (e) <= -1) return -1; } while (1); +#if 0 if (e->nmatches > 0) { - qse_printf (QSE_T("MATCH: %d [%.*s]\n"), - (int)(e->matchend - e->sub.ptr), - (int)(e->matchend - e->sub.ptr), e->sub.ptr); +qse_printf (QSE_T("MATCH: %d [%.*s]\n"), + (int)(e->matchend - e->sub.ptr), + (int)(e->matchend - e->sub.ptr), e->sub.ptr); } - qse_printf (QSE_T("TOTAL MATCHES FOUND... %d\n"), e->nmatches); - return 0; +qse_printf (QSE_T("TOTAL MATCHES FOUND... %d\n"), e->nmatches); +#endif + + return (e->nmatches > 0)? 1: 0; } static void refdowngroupstack_incand (qse_lda_t* lda, void* dptr, qse_size_t dlen) @@ -1700,9 +1738,9 @@ static void fini_exec_dds (exec_t* e) qse_lda_fini (&e->cand.set[0]); } -int qse_rex_exec (qse_rex_t* rex, - const qse_char_t* str, qse_size_t len, - const qse_char_t* substr, qse_size_t sublen) +int qse_rex_exec ( + qse_rex_t* rex, const qse_cstr_t* str, + const qse_cstr_t* substr, qse_cstr_t* matstr) { exec_t e; int n = 0; @@ -1716,10 +1754,10 @@ int qse_rex_exec (qse_rex_t* rex, QSE_MEMSET (&e, 0, QSE_SIZEOF(e)); e.rex = rex; - e.str.ptr = str; - e.str.end = str + len; - e.sub.ptr = substr; - e.sub.end = substr + sublen; + e.str.ptr = str->ptr; + e.str.end = str->ptr + str->len; + e.sub.ptr = substr->ptr; + e.sub.end = substr->ptr + substr->len; if (init_exec_dds (&e, rex->mmgr) <= -1) return -1; @@ -1732,7 +1770,14 @@ int qse_rex_exec (qse_rex_t* rex, break; } - if (e.nmatches > 0) break; + if (n >= 1) + { + QSE_ASSERT (e.nmatches > 0); + QSE_ASSERT (e.matchend != QSE_NULL); + matstr->ptr = e.sub.ptr; + matstr->len = e.matchend - e.sub.ptr; + break; + } e.sub.ptr++; } diff --git a/qse/samples/cmn/Makefile.am b/qse/samples/cmn/Makefile.am index 49aa0d61..64bb2bef 100644 --- a/qse/samples/cmn/Makefile.am +++ b/qse/samples/cmn/Makefile.am @@ -18,9 +18,9 @@ rex01_SOURCES = rex01.c if ENABLE_CXX -bin_PROGRAMS += rex02 -rex02_SOURCES = rex02.cpp -rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread -rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8 +#bin_PROGRAMS += rex02 +#rex02_SOURCES = rex02.cpp +#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread +#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8 endif diff --git a/qse/samples/cmn/Makefile.in b/qse/samples/cmn/Makefile.in index 7a70668f..95af257e 100644 --- a/qse/samples/cmn/Makefile.in +++ b/qse/samples/cmn/Makefile.in @@ -36,8 +36,7 @@ build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = chr$(EXEEXT) str$(EXEEXT) sll$(EXEEXT) map$(EXEEXT) \ lda$(EXEEXT) fio$(EXEEXT) pio$(EXEEXT) sio$(EXEEXT) \ - time$(EXEEXT) rex01$(EXEEXT) $(am__EXEEXT_1) -@ENABLE_CXX_TRUE@am__append_1 = rex02 + time$(EXEEXT) rex01$(EXEEXT) subdir = samples/cmn DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -52,7 +51,6 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/qse/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -@ENABLE_CXX_TRUE@am__EXEEXT_1 = rex02$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_chr_OBJECTS = chr.$(OBJEXT) @@ -79,14 +77,6 @@ am_rex01_OBJECTS = rex01.$(OBJEXT) rex01_OBJECTS = $(am_rex01_OBJECTS) rex01_LDADD = $(LDADD) rex01_DEPENDENCIES = -am__rex02_SOURCES_DIST = rex02.cpp -@ENABLE_CXX_TRUE@am_rex02_OBJECTS = rex02-rex02.$(OBJEXT) -rex02_OBJECTS = $(am_rex02_OBJECTS) -rex02_LDADD = $(LDADD) -rex02_DEPENDENCIES = -rex02_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(rex02_CXXFLAGS) $(CXXFLAGS) \ - $(rex02_LDFLAGS) $(LDFLAGS) -o $@ am_sio_OBJECTS = sio.$(OBJEXT) sio_OBJECTS = $(am_sio_OBJECTS) sio_LDADD = $(LDADD) @@ -116,22 +106,12 @@ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) $(map_SOURCES) \ - $(pio_SOURCES) $(rex01_SOURCES) $(rex02_SOURCES) \ - $(sio_SOURCES) $(sll_SOURCES) $(str_SOURCES) $(time_SOURCES) -DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \ - $(map_SOURCES) $(pio_SOURCES) $(rex01_SOURCES) \ - $(am__rex02_SOURCES_DIST) $(sio_SOURCES) $(sll_SOURCES) \ + $(pio_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) $(sll_SOURCES) \ $(str_SOURCES) $(time_SOURCES) +DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \ + $(map_SOURCES) $(pio_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) \ + $(sll_SOURCES) $(str_SOURCES) $(time_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -284,13 +264,10 @@ pio_SOURCES = pio.c sio_SOURCES = sio.c time_SOURCES = time.c rex01_SOURCES = rex01.c -@ENABLE_CXX_TRUE@rex02_SOURCES = rex02.cpp -@ENABLE_CXX_TRUE@rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread -@ENABLE_CXX_TRUE@rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8 all: all-am .SUFFIXES: -.SUFFIXES: .c .cpp .lo .o .obj +.SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -382,9 +359,6 @@ pio$(EXEEXT): $(pio_OBJECTS) $(pio_DEPENDENCIES) rex01$(EXEEXT): $(rex01_OBJECTS) $(rex01_DEPENDENCIES) @rm -f rex01$(EXEEXT) $(LINK) $(rex01_OBJECTS) $(rex01_LDADD) $(LIBS) -rex02$(EXEEXT): $(rex02_OBJECTS) $(rex02_DEPENDENCIES) - @rm -f rex02$(EXEEXT) - $(rex02_LINK) $(rex02_OBJECTS) $(rex02_LDADD) $(LIBS) sio$(EXEEXT): $(sio_OBJECTS) $(sio_DEPENDENCIES) @rm -f sio$(EXEEXT) $(LINK) $(sio_OBJECTS) $(sio_LDADD) $(LIBS) @@ -410,7 +384,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rex01.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rex02-rex02.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Po@am__quote@ @@ -437,41 +410,6 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< -.cpp.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -rex02-rex02.o: rex02.cpp -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex02_CXXFLAGS) $(CXXFLAGS) -MT rex02-rex02.o -MD -MP -MF $(DEPDIR)/rex02-rex02.Tpo -c -o rex02-rex02.o `test -f 'rex02.cpp' || echo '$(srcdir)/'`rex02.cpp -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/rex02-rex02.Tpo $(DEPDIR)/rex02-rex02.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rex02.cpp' object='rex02-rex02.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex02_CXXFLAGS) $(CXXFLAGS) -c -o rex02-rex02.o `test -f 'rex02.cpp' || echo '$(srcdir)/'`rex02.cpp - -rex02-rex02.obj: rex02.cpp -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex02_CXXFLAGS) $(CXXFLAGS) -MT rex02-rex02.obj -MD -MP -MF $(DEPDIR)/rex02-rex02.Tpo -c -o rex02-rex02.obj `if test -f 'rex02.cpp'; then $(CYGPATH_W) 'rex02.cpp'; else $(CYGPATH_W) '$(srcdir)/rex02.cpp'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/rex02-rex02.Tpo $(DEPDIR)/rex02-rex02.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rex02.cpp' object='rex02-rex02.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rex02_CXXFLAGS) $(CXXFLAGS) -c -o rex02-rex02.obj `if test -f 'rex02.cpp'; then $(CYGPATH_W) 'rex02.cpp'; else $(CYGPATH_W) '$(srcdir)/rex02.cpp'; fi` - mostlyclean-libtool: -rm -f *.lo @@ -679,6 +617,11 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binPROGRAMS +#bin_PROGRAMS += rex02 +#rex02_SOURCES = rex02.cpp +#rex02_CXXFLAGS = -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread +#rex02_LDFLAGS = -pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8 + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/qse/samples/cmn/rex01.c b/qse/samples/cmn/rex01.c index 4f463d27..9b30f0c4 100644 --- a/qse/samples/cmn/rex01.c +++ b/qse/samples/cmn/rex01.c @@ -8,6 +8,9 @@ static int rex_main (int argc, qse_char_t* argv[]) { qse_rex_t* rex; qse_rex_node_t* start; + qse_cstr_t str; + qse_cstr_t matstr; + int n; if (argc != 3) { @@ -32,15 +35,23 @@ static int rex_main (int argc, qse_char_t* argv[]) return -1; } - if (qse_rex_exec (rex, - argv[2], qse_strlen(argv[2]), - argv[2], qse_strlen(argv[2])) <= -1) + str.ptr = argv[2]; + str.len = qse_strlen(argv[2]); + + n = qse_rex_exec (rex, &str, &str, &matstr); + if (n <= -1) { qse_printf (QSE_T("ERROR: cannot execute - %s\n"), qse_rex_geterrmsg(rex)); qse_rex_close (rex); return -1; } + if (n >= 1) + { + qse_printf (QSE_T("MATCH: [%.*s] beginning from char #%d\n"), + (int)matstr.len, matstr.ptr, + (int)(matstr.ptr, matstr.ptr - str.ptr + 1)); + } qse_rex_close (rex); return 0;