sean            Tue Feb  6 05:36:24 2007 UTC

  Modified files:              
    /phpdoc/scripts     functable.php 
  Log:
  parse source
  
http://cvs.php.net/viewvc.cgi/phpdoc/scripts/functable.php?r1=1.10&r2=1.11&diff_format=u
Index: phpdoc/scripts/functable.php
diff -u phpdoc/scripts/functable.php:1.10 phpdoc/scripts/functable.php:1.11
--- phpdoc/scripts/functable.php:1.10   Sun Feb  4 21:45:01 2007
+++ phpdoc/scripts/functable.php        Tue Feb  6 05:36:24 2007
@@ -15,7 +15,7 @@
 +----------------------------------------------------------------------+
 | Authors:    Sean Coates <[EMAIL PROTECTED]>                               |
 +----------------------------------------------------------------------+
-$Id: functable.php,v 1.10 2007/02/04 21:45:01 sean Exp $
+$Id: functable.php,v 1.11 2007/02/06 05:36:24 sean Exp $
 */
 
 // direct the output of this file into phpdoc/phpbook/phpbook-xsl/version.xml
@@ -184,17 +184,22 @@
     $funcs = array();
     $protoFuncs = array();
 
+    $protoRegex = '/
+        {{{\s*proto\s+              # proto identifier
+        (.*?)\s+                    # type
+        ([^(\s]+?)\s?               # functon name
+        \((.*)\)\s*                 # params
+        ([^*;{]*)                   # suffix
+        /ix';                           // }}} annoying folding
+    $ZendFB_regex  = "`^[ \t]*(?:static)?[ 
\t]*(?:zend_)?function_entry\s*(?!php_hw_api_)\w+(?<!_class_functions)\s*\[\]\s*=\s*\{(.*)(?:\{\s*NULL\s*,\s*NULL\s*,\s*NULL\s*\}|\{0\})`msU";
+    $FB_instance_regex = "`^[ \t]*(?:($macronames)\s*\(|\{)\s*\"?(\w+)`im";
+    $macronames = 
"ZEND_FE|ZEND_FALIAS|PHP_FE|PHP_FALIAS|ZEND_NAMED_FE|PHP_NAMED_FE|PHP_STATIC_FE";
+
     $files = get_src_files($path);
+
     foreach ($files AS $f) {
 
-        $protoRegex = '/
-            {{{\s*proto\s+              # proto identifier
-            (.*?)\s+                    # type
-            ([^(\s]+?)\s?               # functon name
-            \((.*)\)\s*                 # params
-            ([^*;{]*)                   # suffix
-            /ix'; /* }}} annoying folding */
-    
+        // protos are more verbose than source, check them first
         $protos = preg_grep($protoRegex, file($f));
         if ($protos) {
             foreach ($protos AS $line => $p) {
@@ -217,7 +222,34 @@
                 $protoFuncs[] = $m[2];
 
             }
-           }
+        }
+
+        // check source
+        // this section from phpdoc/scripts/genfunclist.php, see that file for 
(c) info
+        // same goes for ZendFB_regex, above
+        // macronames and FB_instance_regex
+
+        // this could probably be optimized -- please feel free
+
+        // function blocks
+        $file_contents = file_get_contents($f);
+        if (preg_match_all($ZendFB_regex, $file_contents, $matches)) {
+            foreach ($matches[0] as $mk => $mv) {
+                $block_titles[$mk] = strtok($mv, "\n");
+            }
+            $tok = strtok($matches[1], "\n");
+            while ($tok) {
+                if (preg_match($FB_instance_regex, $tok, $matches)) {
+                    if (!in_array($matches[2], $protoFuncs)) {
+                        $funcs[] = array(
+                            'file' => substr($f, strlen(SRC_DIR) + 1),
+                            'func' => strtolower($matches[2]),
+                        );
+                    }
+                }
+                $tok = strtok("\n");
+            }
+        }
     }
     return $funcs;
 }

Reply via email to