RPA Toolkit
work on the PHP extension.
authorMartin Stoilov <martin@rpasearch.com>
Wed, 15 Jun 2011 04:34:29 +0000 (21:34 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Wed, 15 Jun 2011 04:34:29 +0000 (21:34 -0700)
phpext/prpa/php_prpa.h
phpext/prpa/prpa.c
phpext/prpa/tests/003.phpt

index e5c612c..434dca5 100644 (file)
@@ -47,6 +47,10 @@ PHP_FUNCTION(rpa_dbex_open);
 PHP_FUNCTION(rpa_dbex_close);
 PHP_FUNCTION(rpa_dbex_load);
 PHP_FUNCTION(rpa_dbex_compile);
+PHP_FUNCTION(rpa_dbex_lookup);
+PHP_FUNCTION(rpa_stat_create);
+PHP_FUNCTION(rpa_stat_scan);
+PHP_FUNCTION(rpa_stat_match);
 #if 0
 PHP_FUNCTION(rpa_dbex_strmatch);
 PHP_FUNCTION(rpa_dbex_set_encoding);
index 7c183d6..8a04868 100644 (file)
@@ -80,6 +80,9 @@ zend_function_entry prpa_functions[] = {
     PHP_FE(rpa_dbex_close, NULL)
     PHP_FE(rpa_dbex_load, NULL)
     PHP_FE(rpa_dbex_compile, NULL)
+    PHP_FE(rpa_dbex_lookup, NULL)
+    PHP_FE(rpa_stat_create, NULL)
+    PHP_FE(rpa_stat_match, NULL)
 
 #if 0
     PHP_FE(rpa_dbex_strmatch, NULL)
@@ -320,6 +323,25 @@ PHP_FUNCTION(rpa_dbex_load)
 }
 
 
+PHP_FUNCTION(rpa_dbex_lookup)
+{
+       zval *zres;
+    php_rpa_dbex *pPhpDbex;
+       char *name;
+       int name_len;
+       long ret;
+
+    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &zres, &name, &name_len) == FAILURE) {
+               RETURN_LONG(-1);
+    }
+
+    ZEND_FETCH_RESOURCE(pPhpDbex, php_rpa_dbex*, &zres, -1, PHP_RPA_DBEX_RES_NAME, le_rpa_dbex);
+
+    ret = rpa_dbex_lookup(pPhpDbex->hDbex, name, name_len);
+       RETURN_LONG(ret);
+}
+
+
 PHP_FUNCTION(rpa_dbex_compile)
 {
        zval *zres;
@@ -340,6 +362,44 @@ PHP_FUNCTION(rpa_dbex_compile)
 }
 
 
+PHP_FUNCTION(rpa_stat_create)
+{
+       zval *zres;
+    php_rpa_dbex *pPhpDbex;
+    php_rpa_stat *phpstat;
+       int ret;
+       long stackSize = 0L;
+
+
+    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zres, &stackSize) == FAILURE) {
+               RETURN_LONG(-1);
+    }
+
+    ZEND_FETCH_RESOURCE(pPhpDbex, php_rpa_dbex*, &zres, -1, PHP_RPA_DBEX_RES_NAME, le_rpa_dbex);
+    phpstat = emalloc(sizeof(php_rpa_stat));
+    phpstat->stat = rpa_stat_create(pPhpDbex->hDbex, stackSize);
+    ZEND_REGISTER_RESOURCE(return_value, phpstat, le_rpa_stat);
+}
+
+
+PHP_FUNCTION(rpa_stat_match)
+{
+       zval *zstat;
+    php_rpa_stat *phpstat;
+       long rid;
+       long encoding;
+       long ret;
+       char *input;
+       int input_len;
+
+    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &zstat, &rid, &encoding, &input, &input_len) == FAILURE) {
+               RETURN_LONG(-1);
+    }
+    ZEND_FETCH_RESOURCE(phpstat, php_rpa_stat*, &zstat, -1, PHP_RPA_STAT_RES_NAME, le_rpa_stat);
+    ret = rpa_stat_match(phpstat->stat, rid, encoding, input, input, input + input_len);
+       RETURN_LONG(ret);
+}
+
 #if 0
 static php_cbinfo *php_cbinfo_create(php_rpa_dbex *pPhpDbex, const char *php_callback, zval *userdata)
 {
index a7b44ed..f27d628 100644 (file)
@@ -6,23 +6,30 @@ rpa_dbex_match($hDbex, $pattern, $myname)
 <?php 
       $hDbex = rpa_dbex_create();
       rpa_dbex_open($hDbex);
-      rpa_dbex_load_string($hDbex, "name ::= [a-z]+");
-      rpa_dbex_load_string($hDbex, "number ::= [0-9]+");
+      rpa_dbex_load($hDbex, "name ::= [a-z]+");
+      rpa_dbex_load($hDbex, "number ::= [0-9]+");
       rpa_dbex_close($hDbex);
-      $pattern = rpa_dbex_get_pattern($hDbex, "name");
+      if (rpa_dbex_compile($hDbex) < 0) {
+        echo("Compile Failed\n");
+        return -1;
+        }
+      $pattern = rpa_dbex_lookup($hDbex, "name");
       $myname = "Martin Stoilov";
-      rpa_dbex_set_encoding($hDbex, RPA_ENCODING_ICASE_UTF8);
-      $ret = rpa_dbex_match($hDbex, $pattern, $myname);
+      $stat = rpa_stat_create($hDbex, 0);
+      $ret = rpa_stat_match($stat, $pattern, RPA_ENCODING_ICASE_UTF8, $myname);
       $matched = "matched: " . substr($myname, 0, $ret) . "\n";
       echo($matched);
+
+/*
       for ($p = rpa_dbex_first_pattern($hDbex); $p; $p = rpa_dbex_next_pattern($hDbex, $p)) {
          echo(rpa_dbex_pattern_name($hDbex, $p));
          echo(" ::= ");
          echo(rpa_dbex_pattern_regex($hDbex, $p));
          echo("\n");
       }
-
+*/
       unset($hDbex);
+      unset($stat);
 ?>
 --EXPECT--
 matched: Martin