Magical Logic Laboratory

プログラムを生成します。

<?
/**
 * 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$fpfilesize$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'{\&amp\;}','&',$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;
}
?>