int main(int argc, char **argv) { xmlInitMemory(); if (argc == 1) { int ret; xmlAutomataPtr am; xmlAutomataStatePtr start, cur; xmlRegexpPtr regexp; xmlRegExecCtxtPtr exec; am = xmlNewAutomata(); start = xmlAutomataGetInitState(am); cur = xmlAutomataNewTransition(am, start, NULL, BAD_CAST"a", NULL); xmlAutomataNewTransition(am, cur, cur, BAD_CAST"b", NULL); xmlAutomataNewTransition(am, cur, cur, BAD_CAST"a", NULL); cur = xmlAutomataNewCountTrans(am, cur, NULL, BAD_CAST"a", 2, 3, NULL); xmlAutomataSetFinalState(am, cur); regexp = xmlAutomataCompile(am); xmlFreeAutomata(am); xmlRegexpPrint(stdout, regexp); exec = xmlRegNewExecCtxt(regexp, NULL, NULL); ret = xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"b", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); if (ret == 0) { ret = xmlRegExecPushString(exec, NULL, NULL); if (ret == 1) printf("final\n"); else if (ret < 0) printf("error\n"); } xmlRegFreeExecCtxt(exec); xmlRegFreeRegexp(regexp); } else { int i; for (i = 1;i < argc;i++) testRegexpFile(argv[i]); } xmlCleanupParser(); xmlMemoryDump(); return(0); }
int main(int argc, char **argv) { xmlRegexpPtr comp = NULL; #ifdef LIBXML_EXPR_ENABLED xmlExpNodePtr expr = NULL; int use_exp = 0; xmlExpCtxtPtr ctxt = NULL; #endif const char *pattern = NULL; char *filename = NULL; int i; xmlInitMemory(); if (argc <= 1) { usage(argv[0]); return(1); } for (i = 1; i < argc ; i++) { if (!strcmp(argv[i], "-")) break; if (argv[i][0] != '-') continue; if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) { debug++; } else if ((!strcmp(argv[i], "-repeat")) || (!strcmp(argv[i], "--repeat"))) { repeat++; #ifdef LIBXML_EXPR_ENABLED } else if ((!strcmp(argv[i], "-expr")) || (!strcmp(argv[i], "--expr"))) { use_exp++; #endif } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "-f")) || (!strcmp(argv[i], "--input"))) filename = argv[++i]; else { fprintf(stderr, "Unknown option %s\n", argv[i]); usage(argv[0]); } } #ifdef LIBXML_EXPR_ENABLED if (use_exp) ctxt = xmlExpNewCtxt(0, NULL); #endif if (filename != NULL) { #ifdef LIBXML_EXPR_ENABLED if (use_exp) runFileTest(ctxt, filename); else #endif testRegexpFile(filename); } else { #ifdef LIBXML_EXPR_ENABLED if (use_exp) { for (i = 1; i < argc ; i++) { if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) { if (pattern == NULL) { pattern = argv[i]; printf("Testing expr %s:\n", pattern); expr = xmlExpParse(ctxt, pattern); if (expr == NULL) { printf(" failed to compile\n"); break; } if (debug) { exprDebug(ctxt, expr); } } else { testReduce(ctxt, expr, argv[i]); } } } if (expr != NULL) xmlExpFree(ctxt, expr); } else #endif { for (i = 1; i < argc ; i++) { if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) { if (pattern == NULL) { pattern = argv[i]; printf("Testing %s:\n", pattern); comp = xmlRegexpCompile((const xmlChar *) pattern); if (comp == NULL) { printf(" failed to compile\n"); break; } if (debug) xmlRegexpPrint(stdout, comp); } else { testRegexp(comp, argv[i]); } } } if (comp != NULL) xmlRegFreeRegexp(comp); } } #ifdef LIBXML_EXPR_ENABLED if (ctxt != NULL) { printf("Ops: %d nodes, %d cons\n", xmlExpCtxtNbNodes(ctxt), xmlExpCtxtNbCons(ctxt)); xmlExpFreeCtxt(ctxt); } #endif xmlCleanupParser(); xmlMemoryDump(); return(0); }