プログラムを生成します。
<?
/**
* phpのマニュアルの cvs から、関数の使い方を抜き出す
* まず cvs で phpdoc をとりだしてください。
* cvs -d :pserver:cvsread@cvs.php.net:/repository login
* cvs -q checkout -P phpdoc-ja/reference
* てなかんじで( cvs のインストールは自分で..)
* で、そのディレクトリで
* php xyzzy_php_infotip.php
* とかすると、phpfunc.txt が生まれます。
*/
set_time_limit(0);
$funcout = fopen( "phpfunc.txt","w" ) or die("phpfunc.txt に書き込めない");
$refdir = dir( "./phpdoc-ja/reference" );
if( !is_object($refdir)){
print( "phpdoc-ja というディレクトリがありません\n");
print( " cvs -d :pserver:cvsread@cvs.php.net:/repository login\n");
print( " cvs -q checkout -P phpdoc-ja/reference\n");
}
while (false !== ($category = $refdir->read())) {
$catdir = @dir( $refdir->path ."/". $category."/functions" );
if( !is_object( $catdir) )continue;
while (false !== ($func = $catdir->read())) {
$filename = $catdir->path ."/". $func;
if( is_readable($filename) && ! is_dir($filename) ){
$info = kansuuyomi( $filename );
if( $info ){
fwrite( $funcout, $info."\n" );
}
}
}
}
fclose($funcout);
function kansuuyomi( $filename ){
$info=null;
$fp = @fopen( $filename,"r" );
if( $fp ){
$text = fread( $fp, filesize( $filename ) );
fclose( $fp );
// せっかく xml なのに正規表現で抜き出し(;´Д`)
if( preg_match('{\<methodsynopsis\>(.*?)</methodsynopsis\>}s',$text, $reg) ){
$info = $reg[1];
$info = str_replace( '\n',' ',$info );
$info = str_replace( '<optional>','[',$info );
$info = str_replace( '</optional>',']',$info );
$info = str_replace( '<void/>','()',$info );
$info = preg_replace( '{\<\/?(type|methodname|parameter|replaceable)\/?\>}',' ',$info);
$info = preg_replace( '{\<methodparam(.*)\<\/methodparam\>}s','($0)',$info);
$info = preg_replace( '{(\<methodparam choice\=(?:\"|\')opt(?:\"|\')\>)(.*?)(\<\/methodparam\>)}s','<methodparam>[$2]$3',$info);
$info = preg_replace( '{(\<methodparam rep\=\"repeat\"\>)(.*?)(\<\/methodparam\>)}s','<methodparam>$2$3',$info);
$info = preg_replace( '{(\<\/methodparam\>)(\s|\n)*(\<\methodparam)}s','$1,$3',$info);
$info = preg_replace( '{\<\/?methodparam\>}',' ',$info);
$info = preg_replace( '{\&\;}','&',$info);
$info = preg_replace( '{\s+}s',' ',$info);
$info = trim($info);
if( preg_match('{\<refpurpose\>(.*?)</refpurpose\>}s',$text, $reg) ){
$tip = trim(mb_convert_encoding($reg[1],"sjis","utf-8"));
$tip = strip_tags($tip);
// $tip = preg_replace( '{\<\/?(function|acronym)\/?\>}',' ',$tip);
$tip = preg_replace( '{\&false\;}','FALSE',$tip);
$tip = preg_replace( '{\&true\;}','TRUE',$tip);
$tip = preg_replace( '{\&null\;}','NULL',$tip);
$tip = preg_replace( '{\&url\.iptc\;}','http://www.IPTC.org/',$tip);
$tip = preg_replace( '{\s*\n\s*}','',$tip);
$info .= ";$tip";
}
if( strpos( $info, "<")!==false ) die($info);
}
}
return $info;
}
?>