hholzgra                Thu Apr  4 03:15:10 2002 EDT

  Modified files:              
    /phpdoc/scripts     reference-split.php 
  Log:
  revcheck issues solved, almost done :)
  
  
Index: phpdoc/scripts/reference-split.php
diff -u phpdoc/scripts/reference-split.php:1.3 phpdoc/scripts/reference-split.php:1.4
--- phpdoc/scripts/reference-split.php:1.3      Wed Apr  3 17:21:30 2002
+++ phpdoc/scripts/reference-split.php  Thu Apr  4 03:15:09 2002
@@ -4,30 +4,48 @@
 error_reporting(E_ALL);
 ob_implicit_flush();
 
+$en_revs = array();
+
 # {{{ cvs stuff
 
+  // compare two revision numbter arrays
+  function rev_cmp($a1,$a2) {
+    foreach($a1 as $key=>$val) {
+      if($a1[$key]>$a2[$key]) return 1;
+      if($a1[$key]<$a2[$key]) return -1;
+    }
+    if(count($a1)>count($a2)) return 1;
+    if(count($a1)<count($a2)) return -1;
+    return 0;
+  }
+
+  // get max. revision for a region in a cvs file 
+  // (witch simple data caching)
   function cvs_max_rev($filename,$start,$end) {
     static $lastfile = "";
     static $array = array();
     
     if($filename!=$lastfile) {
-      $fp=popen("cvs annotate $filename 2>/dev/null","r");
+      $cmd="/usr/bin/cvs annotate $filename 2>/dev/null";
+      $fp=popen($cmd,"r");
+      if(!$fp) return false;
+
       $n=0;
-      if(!$fp) die("gaga");           ;
       $array = array();
       $lastfile = $filename;
+
       while(!feof($fp)) {
         $line = fgets($fp);
         if(empty($line)) continue;
         $tokens=explode(" ",$line);
-        $rev = $tokens[0];
-        $array[++$n]=explode(".",$rev);
+        $array[++$n]=explode(".",$tokens[0]);
       }
       pclose($fp);
     }
-    $max=0;
+
+    $max=array();
     for($n=$start;$n<=$end;$n++)
-      if($max < $array[$n][1]) $max = $array[$n][1];
+      if(rev_cmp($max,$array[$n])) $max = $array[$n];
     return $max;
   }
 # }}}
@@ -35,6 +53,8 @@
 # {{{ convert_file 
 
 function convert_file($dir,$file) {
+  global $en_revs;
+
        echo "convert $dir $file\n";
 
        // open input stream
@@ -56,16 +76,12 @@
        mkdir("$base/functions",0777);
        
        // append filename to function entity list
-       $fent= fopen("functions.ent","a");
+       $fent= fopen("$base/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");
+       $fmaster= fopen("$base/reference.xml","w");
 
        // current output stream is master file
        $fout = &$fmaster;
@@ -74,18 +90,33 @@
        $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 = 0;
+       $lastline_empty = false;
+       $xmlhead = "<?xml version='1.0' encoding='iso-8859-1' ?>\n"; //default
+  $en_revision = false;
+  $maintainer = "";
+  $trans_status = "";
+
+       while ($line = fgets($fin)) {
                $lineno++;
 
+    // convert numbered sections to generic ones, prep. for hierachical ref
     $line = ereg_replace("(</?)sect[123456]","\\1section",$line);
+
+    // file will move one level down, so path to emacs dtd-file needs one more ..
     $line = str_replace('../../manual.ced','../../../manual.ced',$line);
 
-               if(strstr($line,("<refentry "))) {
-                       // start of function description 
-                       
+               if (strstr($line,("<?xml"))&&($lineno==1)) { // remember xml header
+                       $xmlhead=$line;
+                       fwrite($fout,$line);
+    } elseif (strstr($line,"<!-- EN-Revision:")) {
+      $array = explode(" ",$line);
+      foreach($array as $key => $value) {
+        if($value=="EN-Revision:") $en_revision  = explode(".",$array[$key+1]);
+        if($value=="Maintainer:")  $maintainer   = $array[$key+1];
+        if($value=="Status:")      $trans_status = $array[$key+1];
+      }
+               } elseif(strstr($line,("<refentry "))) { // start of function 
+description 
                        // extract id 
                        ereg("id=['\"](.*)['\"]",$line,$matches);
                        $id=str_replace("_","-",$matches[1]);
@@ -95,36 +126,39 @@
                        $entity[]="&$base.$id;";
 
                        // open new output stream for this function
-                       $fslave=fopen("functions/$id.xml","w");
+                       $fslave=fopen("$base/functions/$id.xml","w");
                        $fout=&$fslave;
+
+      // xml header
                        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);
+
+      // start collecting stuff
+                 $block = $line;
+      $blockstart=$lineno;
                } else if (strstr($line,("</refentry>"))) {
                        // end of function description
                        
                        // close output stream and switch 
-                       fwrite($fout,$line);
-                       if(@is_resource($fslave)) {
+                       if(!isset($block)) {
+        fwrite($fout,$line);
+      }else{
+        $cvs_rev = cvs_max_rev("$dir/$file",$blockstart,$lineno);
+        fwrite($fout,"<!-- splitted from $dir/$file, last change in rev 
+".join(".",$cvs_rev)." -->\n");
+        if(!isset($en_revs[$id])) {
+          $en_revs[$id] = $cvs_rev;
+        } else {
+          fwrite($fout,"<!-- last change to '$id' in en/ tree in rev 
+".join(".",$en_revs[$id])." -->\n");
+        }
+        // revcheck header
+        if(is_array($en_revision)) {
+          if(rev_cmp($en_revision,$en_revs[$id])>=0) { // new enough
+            fwrite($fout,"<!-- EN-Revision: 1.1 Maintainer: $maintainer Status: 
+$trans_status -->\n");
+          } else {
+            fwrite($fout,"<!-- EN-Revision: 0.0 Maintainer: $maintainer Status: 
+$trans_status -->\n");
+          }
+          fwrite($fout,"<!-- OLD-Revision: 
+".join(".",$en_revision)."/EN.".join(".",$en_revs[$id])." -->\n");
+        }
+        fwrite($fout,$block.$line);
                                fwrite($fout,'
 <!-- Keep this comment at the end of the file
 Local variables:
@@ -149,9 +183,8 @@
 ');                            
                                fclose($fslave);
                                $fout = &$fmaster;
+        unset($block);
                        }
-               } else if (strstr($line,("<reference "))) {
-      fwrite($fout,str_replace("<reference","<section role='reference' ",$line));
                } else if (strstr($line,("</reference>"))) {
                        // end of master file
 
@@ -159,26 +192,30 @@
                        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));
+                       fwrite($fout,"&$name.entities;\n\n");
+      fwrite($fout,$line);
                } else {
                        // default -> just copy to current output stream,
       // filter out duplicate blank lines
                        if(trim($line)) {
-                               fwrite($fout,$line);                            
-                               $flag=false;
+        if(isset($block))
+          $block .= $line;
+        else
+          fwrite($fout,$line);                         
+                               $lastline_empty=false;
                        } else {
-                               if(!$flag)
-                                       fwrite($fout,$line);
-                               $flag=true; 
+                               if(!$lastline_empty) {
+          if(isset($block))
+            $block .= $line;
+          else
+            fwrite($fout,$line);                               
+        }
+                               $lastline_empty=true; 
                        }
                }
        }
 
        fclose($fmaster); 
-       // pop dir
-       chdir($olddir);
-
        // close input stream
        fclose($fin);
 }
@@ -191,6 +228,10 @@
 //    and recurse into subdirs
 function convert_dir($dirname) {
 
+  if(@is_dir("$dirname/en")) {
+    convert_dir("$dirname/en");
+  }
+
        if ($dir = opendir($dirname)) {
 
                // for each file in dir
@@ -200,9 +241,9 @@
                        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'
-                               }
+                               if($file!="en" && $file!="reference") {
+          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'
@@ -212,9 +253,7 @@
                }
 
                closedir($dir);
-
        }
-
 }
 
 # }}}


Reply via email to