hholzgra Thu Oct 23 03:15:07 2003 EDT
Added files:
/functable checkdoc.php protos.php
Log:
additional scripts ....
Index: functable/checkdoc.php
+++ functable/checkdoc.php
#!/usr/local/bin/php
<?php
require_once "PEAR.php";
require_once "File/Find.php";
require_once "XML/Parser.php";
require_once "config.php";
require_once "lib/dbconnect.php";
/**
* Scan file for <refname> tags and store their positions
*
* @author Hartmut Holzgraefe <[EMAIL PROTECTED]>
*/
class func_finder extends XML_Parser {
/**
* Name of file being scanned
*
* @type string
*/
var $filename = "";
/**
* Remember last chunk of plain data here
*
* @type string
*/
var $last_data = "";
/**
* Data handler just stores last data seen
*
* @access private
* @param resource XML parser
* @param string cdata
*/
function cdataHandler($xp, $cdata) {
$this->last_data = $cdata;
}
/**
* <refname> end tag handler stores tag position in database
*
* We assume that <refname>...</refname> is on a single line
* and that the cdata within is just a single chunk
*
* @access private
* @param resource XML parser
* @param string tag name
*/
function xmltag_refname_($xp, $elem) {
$query = sprintf("INSERT INTO docfile (function, docfile, lineno)
VALUES ('%s', '%s', %d);\n",
$this->last_data,
ereg_replace("^sources/", "",
$this->filename),
xml_get_current_line_number($xp)
);
mysql_query($query);
}
/**
* Constructor
*
* @access public
* @param string file to scan
*/
function func_finder($filename) {
parent::XML_Parser(null, "func");
$this->filename = $filename;
$this->setInputFile($filename);
$this->parse();
}
}
/* _ _ _ _
* __ _| | ___ | |__ __ _| | ___ ___ __| | ___
* / _` | |/ _ \| '_ \ / _` | | / __/ _ \ / _` |/ _ \
*| (_| | | (_) | |_) | (_| | | | (_| (_) | (_| | __/
* \__, |_|\___/|_.__/ \__,_|_| \___\___/ \__,_|\___|
* |___/
*/
// purge database
mysql_query("TRUNCATE TABLE docfile");
// get a file finder helper object
$find = new File_Find;
// now let it search for all relevant XML files
foreach ($find->search('.*\.xml', 'sources/phpdoc/en/reference') as $file) {
// and scan them
$ff = new func_finder($file); unset($ff);
}
?>
Index: functable/protos.php
+++ functable/protos.php
#!/usr/local/bin/php
<?php
require_once "PEAR.php";
require_once "File/Find.php";
require_once "config.php";
require_once "lib/dbconnect.php";
function proto_scan ($version, $filename) {
$fp = fopen($filename, "r");
if ($fp) {
$lineno = 0;
while (!feof($fp)) {
$line = fgets($fp);
$lineno++;
// check for proto lines
if (preg_match('|/\*\s*\{\{\{\s+proto\s(.*)|', $line,
$matches)) {
$proto = $matches[1];
$proto_line = $lineno;
// ignore protos for object methods
if (strstr($proto, "::") || strstr($proto, "->")) {
continue;
}
// ingore anything that does not look like a function
if (!preg_match('|(\w+)\s*\(|', $proto, $matches)) {
continue;
}
$function = $matches[1];
// the rest of the comment is the description
$comment = "";
while (!feof($fp)) {
$comment .= trim(fgets($fp))." ";
$lineno++;
// check for comment end and cut where
appropriate
$pos = strpos($comment, "*/");
if ($pos !== false) {
$comment = substr($comment, 0, $pos);
break;
}
}
// store into the database
store_proto($version, $filename, $proto_line,
$function, $proto, $comment);
}
}
fclose($fp);
}
}
function store_proto($version, $filename, $proto_line, $function, $proto, $comment) {
echo "
INSERT INTO proto$version
SET function = '".mysql_escape_string($function)."'
, proto = '".mysql_escape_string($proto)."'
, proto_desc = '".mysql_escape_string($comment)."';
";
}
/* _ _ _ _
* __ _| | ___ | |__ __ _| | ___ ___ __| | ___
* / _` | |/ _ \| '_ \ / _` | | / __/ _ \ / _` |/ _ \
*| (_| | | (_) | |_) | (_| | | | (_| (_) | (_| | __/
* \__, |_|\___/|_.__/ \__,_|_| \___\___/ \__,_|\___|
* |___/
*/
// purge database
mysql_query("TRUNCATE TABLE docfile");
// get a file finder helper object
$find = new File_Find;
// now let it search for all relevant source files
foreach ($find->search('.*\.e?[chy]', 'sources/php_5_cvs') as $file) {
proto_scan("5", $file);
}
?>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php