hholzgra                Wed Apr  3 16:05:14 2002 EDT

  Added files:                 
    /phpdoc/scripts     reference-split.php 
  Log:
  ... as now i face the final curtain ... ;)
  
  

Index: phpdoc/scripts/reference-split.php
+++ phpdoc/scripts/reference-split.php
# todo create different outdir pathes

<script language="php">

set_time_limit(0);
error_reporting(E_ALL);
ob_implicit_flush();

# {{{ convert_file 

function convert_file($dir,$file) {
        echo "convert $dir $file\n";

        // open input stream
        $fin = fopen("$dir/$file","r");

        // get extension basename 
        $name = str_replace(".xml","",$file); 
        $name = str_replace("_","-",$name);

        // get language from path
        $parts=explode("/",$dir);
        $lang=$parts[1];

        // create directories for generated extension files 
        $base="./$lang/reference/$name";
        if(!file_exists("./$lang/reference")) mkdir("./$lang/reference",0777);
        if(file_exists($base)) exec("rm -rf $base"); // cleanup
        mkdir($base,0777);
        mkdir("$base/functions",0777);
        
        // append filename to function entity list
        $fent= fopen("functions.ent","a");
        fwrite($fent,"<!ENTITY $name.entities SYSTEM '$base/functions.ent'>\n");
        fclose($fent);

        // push dir
        $olddir = getcwd();
        chdir($base);

        // create master documentation file
        $fmaster= fopen("reference.xml","w");

        // current output stream is master file
        $fout = &$fmaster;

        // initialize entity collector
        $entity = array();

        // process input file
        $flag=false;
        $xmlhead="<?xml version='1.0' encoding='iso-8859-1' ?>\n";
        $lineno=0;
        while ($line = fgets($fin, 4096)) {
                $lineno++;

    $line = ereg_replace("(</?)sect[123456]","\\1section",$line);
    $line = str_replace('../../manual.ced','../../../manual.ced',$line);

                if(strstr($line,("<refentry "))) {
                        // start of function description 
                        
                        // extract id 
                        ereg("id=['\"](.*)['\"]",$line,$matches);
                        $id=str_replace("_","-",$matches[1]);
                        $id=ereg_replace("^function\.","",$id);

                        // register entity
                        $entity[]="&$base.$id;";

                        // open new output stream for this function
                        $fslave=fopen("functions/$id.xml","w");
                        $fout=&$fslave;
                        fwrite($fout,$xmlhead);
                        fwrite($fout,$line);
                } else if(strstr($line,("<partintro"))) {
      
fwrite($fout,preg_replace("/<partintro(.*?)>/","<section\\1><title>Introduction</title>\n",$line));
                } else if(strstr($line,("</partintro>"))) {
      fwrite($fout,"</section>\n");
                } else if(strstr($line,("<funcsynopsis>"))) {
                        
                        $xml=$xmlhead.$line;
                        do {
                                $line=fgets($fin,4096);
                                $xml.=$line;
                        } while(!strstr($line,("</funcsynopsis>")));
      $result = $xml;
                        if(is_string($result))
                                fwrite($fout,strstr($result,"\n"));
                        else {
                                echo $xml; 
                        }
                } else if (strstr($line,("<?xml"))&&($lineno==1)) {
                        $xmlhead=$line;
                        fwrite($fout,$line);
                } else if (strstr($line,("</refentry>"))) {
                        // end of function description
                        
                        // close output stream and switch 
                        fwrite($fout,$line);
                        if(@is_resource($fslave)) {
                                fwrite($fout,'
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
');                             
                                fclose($fslave);
                                $fout = &$fmaster;
                        }
                } else if (strstr($line,("<reference "))) {
      fwrite($fout,str_replace("<reference","<section role='reference' ",$line));
                } else if (strstr($line,("</reference>"))) {
                        // end of master file

                        // write entity file
                        sort($entity);

                        // generate entity include for entity file
                        
fwrite($fout,"<section><title>Functions</title>&$name.entities;</section>\n\n");
      fwrite($fout,str_replace("</reference","</section",$line));
                } else {
                        // default -> just copy to current output stream,
      // filter out duplicate blank lines
                        if(trim($line)) {
                                fwrite($fout,$line);                            
                                $flag=false;
                        } else {
                                if(!$flag)
                                        fwrite($fout,$line);
                                $flag=true; 
                        }
                }
        }

        fclose($fmaster); 
        // pop dir
        chdir($olddir);

        // close input stream
        fclose($fin);
}

# }}} 

# {{{ convert_dir

// convert dir -> search for XML files to convert 
//    and recurse into subdirs
function convert_dir($dirname) {

        if ($dir = opendir($dirname)) {

                // for each file in dir
                while (($file = readdir($dir)) !== false) {                     

                        if($file{0}==".") continue; // ignore hidden files
                        if($file=="CVS") continue;  // ignore CVS information

                        if(is_dir("$dirname/$file")) { // is directory?
                                if(!strstr("$dirname/","/reference/")!==false) {
                                        convert_dir("$dirname/$file"); // recurse if 
not 'reference'
                                }
                        } else if(ereg("xml$",$file)) { // is XML file?
                                if(strpos("$dirname/","/functions/")>0) {
                                        convert_file($dirname,$file); // process if in 
'functions'
                                }
                        }

                }

                closedir($dir);

        }

}

# }}}

// convert the current directory
convert_dir(".");

</script>


Reply via email to