goba            Sat Jan 13 07:58:43 2001 EDT

  Modified files:              
    /phpdoc     make_chm.php 
  Log:
  Heavy modifications...
  
   - Grouping frequently used code
   - Correcting regex errors, so now it finds ref.oci8.html
   - getting in the manual.html copyright.html and preface.html files
   - organizing things a bit
  
  It should work now... Although please do not make new docs,
  because now I will work on making a design for the HTML docs...
  
  
  
Index: phpdoc/make_chm.php
diff -u phpdoc/make_chm.php:1.2 phpdoc/make_chm.php:1.3
--- phpdoc/make_chm.php:1.2     Wed Jan 10 15:08:41 2001
+++ phpdoc/make_chm.php Sat Jan 13 07:58:42 2001
@@ -1,72 +1,138 @@
 <?php
-       function MakeProjectFile ()
-       {
-               $f = fopen ("manual.hhp", "w");
+
+       // USE ONLY PHP 4.x TO RUN THIS SCRIPT!!!
+       // IT WONT WORK WITH PHP 3
+       
+       /* input :::::: we need three env params
+               
+                 PHP_HELP_COMPILER
+                   hcc.exe path including hcc.exe (eg. d:\hhw\hcc.exe)
+                 PHP_HELP_COMPILE_DIR
+                   dir where the html manual resides (eg. html)
+                 PHP_HELP_COMPILE_LANG
+                   the actual manual language (eg. hu)
+               
+               output :::::: we write out four files needed to compile
+               
+                 manual_lang.hhp :: manual project file (lang comes from env)
+                       manual_lang.hhc :: manual contents file
+                       index.hhk       :: just a dummy epmty index file
+                       compile.bat     :: a call to the compiler (lang used)
+
+       */
+       
+       ob_start();
+       
+       $htmldir = getenv("PHP_HELP_COMPILE_DIR");
+       $language = getenv("PHP_HELP_COMPILE_LANG");
+
+       MakeProjectFile();
+
+       function MakeProjectFile () {
+
+               global $htmldir, $language, $manual_title;
+
+               // define language array (manual code -> HTML Help Code)
+               $languages = Array (
+               
+                       "de"    => "0x407 German (Germany)",
+                       "en"    => "0x809 Enlish (United Kingdom)",
+                       "es"    => "0xc0a Spanish (International Sort)",
+                       "fr"    => "0x40c French (France)",
+                       "hu"    => "0x40e Hungarian",
+                       "il"    => "0x410 Italian (Italy)",
+                       "kr"    => "0x412 Korean",
+                       "nl"    => "0x413 Dutch (Netherlands)",
+                       "pt_BR" => "0x416 Portuguese (Brazil)"
+               
+               );
+
+               // Start writing the project file
+               $f = fopen ("manual_$language.hhp", "w");
                fputs ($f, "[OPTIONS]\n");
-               fputs ($f, "Contents file=manual.hhc\n");
                fputs ($f, "Auto Index=Yes\n");
                fputs ($f, "Binary TOC=Yes\n");
                fputs ($f, "Compatibility=1.1 or later\n");
-               fputs ($f, "Compiled file=manual.chm\n");
-               fputs ($f, "Contents file=manual.hhc\n");
+               fputs ($f, "Compiled file=manual_$language.chm\n");
+               fputs ($f, "Contents file=manual_$language.hhc\n");
                fputs ($f, "Default Font=Arial,10,0\n");
-               fputs ($f, "Default topic=html\manual.html\n");
+               fputs ($f, "Default topic=$htmldir\manual.html\n");
                fputs ($f, "Display compile progress=Yes\n");
                fputs ($f, "Full-text search=Yes\n");
-               fputs ($f, "Index file=Index.hhk\n");
-               fputs ($f, "Language=0x413 Nederlands (standaard)\n");
-               fputs ($f, "Title=PHP Manual\n");
+               fputs ($f, "Index file=index.hhk\n");
+               
+               // get the proper language code from the array
+               fputs ($f, "Language=" . $languages[$language] . "\n");
+               
+               // now try to find out how the manual named in the actual language
+               // this must be in the manual.html file as the title (DSSSL generated)
+               $content = join("", file("$htmldir/manual.html"));
+               $content = preg_replace("/[\\r|\\n]/", "", $content);
+               if (preg_match("|<TITLE>(.*)</TITLE>|U", $content, $found)) {
+                       $manual_title = $found[1];
+               } else { $manual_title = "PHP Manual"; }
+               
+               fputs ($f, "Title=$manual_title\n");
+               
+               // write out all the filenames as in $htmldir           
                fputs ($f, "\n[FILES]\n");
-               $handle=opendir('manual'); 
+               $handle=opendir($htmldir);
                while (false!==($file = readdir($handle))) { 
                        if ($file != "." && $file != "..") { 
-                                fputs ($f, "html\\$file\n"); 
+                                fputs ($f, "$htmldir\\$file\n"); 
                        } 
                }
                closedir($handle); 
                fclose ($f);
+
        }
        
-       MakeProjectFile();
+       function SiteMapObj ($name, $local, $tabs, $imgnum = 'auto') {
 
-       function DoFile ($filename)
-       {
-?>
-               <UL>
-<?php
-               $ar = file ($filename);
-               for ($i = 0; $i < count ($ar); $i++)
-               {
-                       if (ereg ("><DT", $ar[$i]) &&
-                           ereg ("><A", $ar[$i+1]) &&
-                           ereg ("HREF=\"([a-z0-9-]+\.)+html(\#[0-9a-z\.-]+)?\"", 
$ar[$i+2]))
-                       {
-                               preg_match 
("/HREF=\"(([0-9a-z-]+\.)+html)(\#[0-9a-z\.-]+)?\"/", $ar[$i+2], $matches);
-                               $par["html"] = $matches[1];
-                               if (ereg ("CLASS=\"literal\"", $ar[$i+4]))
-                               {
-                                       preg_match ("/>([^<]+)/", $ar[$i+5], $matches);
-                               }
-                               else if ($ar[$i+2] == $ar[$i+4])
-                               {
-                                       preg_match ("/>([^<]+)/", $ar[$i+7], $matches);
-                               }
-                               else
-                               {
-                                       preg_match ("/>([^<]+)/", $ar[$i+3], $matches);
+               global $htmldir;
+               echo "\n$tabs<LI> <OBJECT type=\"text/sitemap\">
+$tabs  <param name=\"Name\" value=\"$name\">
+$tabs  <param name=\"Local\" value=\"$htmldir\\$local\">";
+
+               if ($imgnum != 'auto') { 
+                       echo "\n$tabs <param name=\"ImageNumber\" value=\"$imgnum\">";
+               }
+               echo "\n$tabs   </OBJECT>\n";
+       
+       }
+
+       function DoFile ($filename) {
+
+               global $htmldir;
+               echo "          <UL>";
+               if (file_exists("$htmldir/$filename")) { 
+                       $content = file ("$htmldir/$filename");
+                       for ($i = 0; $i < count ($content); $i++) {
+       
+                               if (ereg ("><DT", $content[$i]) &&
+                                   ereg ("><A", $content[$i+1]) &&
+                                   ereg 
+("HREF=\"([a-z0-9-]+\.)+html(\#[0-9a-z\.-]+)?\"", $content[$i+2])) {
+       
+                                       preg_match 
+("/HREF=\"(([0-9a-z-]+\.)+html)(\#[0-9a-z\.-]+)?\"/", $content[$i+2], $matches);
+                                       $param["html"] = $matches[1];
+                                       if (isset($matches[3])) { $param["html"] .= 
+$matches[3]; }
+
+                                       if (ereg ("CLASS=\"literal\"", 
+$content[$i+4])) {
+                                               preg_match ("/>([^<]+)/", 
+$content[$i+5], $matches);
+                                       }
+                                       elseif ($content[$i+2] == $content[$i+4]) {
+                                               preg_match ("/>([^<]+)/", 
+$content[$i+7], $matches);
+                                       }
+                                       else {
+                                               preg_match ("/>([^<]+)/", 
+$content[$i+3], $matches);
+                                       }
+                                       $param["title"] = $matches[1];
+                                       SiteMapObj($param["title"], $param["html"], "  
+                 ");
                                }
-                               $par["title"] = $matches[1];
-?>
-                       <LI> <OBJECT type="text/sitemap">
-                               <param name="Name" value="<?php echo $par["title"]; 
?>">
-                               <param name="Local" value="html\<?php echo 
$par["html"]; ?>">
-                               </OBJECT>
-<?php
+       
                        }
                }
-?>
-               </UL>
-<?php
+               echo "          </UL>\n";
        }       
 ?>
 
@@ -82,62 +148,104 @@
 </OBJECT>
 <UL>
 <?php
+       
        $index_a = file ("html/manual.html");
-       for ($i = 0; $i < count ($index_a); $i++)
-       {
-/* Chapters */
-               if (ereg (">[IVX]+\.\ <A", $index_a[$i]) && !ereg 
("HREF=\"ref\.[a-z]+\.html", $index_a[$i+1]))
-               {
+       $ijoin = join("", $index_a);
+       $ijoin = preg_replace("/[\r|\n]/", " ", $ijoin);
+       
+       // print out the objects autoparsing didnt find
+       // some automation may there in the future
+       
+       preg_match('|<DIV CLASS="TOC" ><DL ><DT ><B >(.*)</B >|U', $ijoin, $match);
+       SiteMapObj($match[1], "manual.html", "  ", 21);
+
+       preg_match('|<A HREF="preface.html" >(.*)</A >|U', $ijoin, $match);
+       SiteMapObj($match[1], "preface.html", " ");
+       
+       echo "\n        <UL>";
+       preg_match('|<A HREF="preface.html#about" >(.*)</A >|U', $ijoin, $match);
+       SiteMapObj($match[1], "preface.html#about", "           ");
+       echo "  </UL>\n";
+       
+       // now autofind the chapters/subchapters
+       
+       for ($i = 0; $i < count ($index_a); $i++) {
+
+               /* Chapters */
+               if (ereg (">[IVX]+\.\ <A", $index_a[$i]) && !ereg 
+("HREF=\"ref\.[a-z]+\.html", $index_a[$i+1])) {
+
                        $new_list = 1;
-                       if ($not_closed == 1)
-                       {
-?>
-       </UL>
-<?php
-                       }
-                       preg_match ("/>([IVX]+)\. <A/", $index_a[$i], $matches);
-                       $chapter["nr"] = $matches[1];
-                       preg_match ("/HREF=\"([a-z-]+\.html)(\#[a-z]+)?\"/", 
$index_a[$i+1], $matches);
+                       if ($not_closed == 1) { echo "\n        </UL>\n"; }
+
+                       //preg_match ("/>([IVX]+)\. <A/", $index_a[$i], $matches);
+                       //$chapter["nr"] = $matches[1];
+                       preg_match ("/HREF=\"([a-z0-9-]+\.html)(\#[a-z0-9]+)?\"/", 
+$index_a[$i+1], $matches);
                        $chapter["html"] = $matches[1];
                        preg_match ("/>([^<]+)/", $index_a[$i+2], $matches);
                        $chapter["title"] = $matches[1];
-?>
-       <LI> <OBJECT type="text/sitemap">
-               <param name="Name" value="<?php echo $chapter["title"]; ?>">
-               <param name="Local" value="html\<?php echo $chapter["html"]; ?>">
-               </OBJECT>
-<?php
+                       SiteMapObj($chapter["title"], $chapter["html"], "       ");
+
                }
-               else
-/* Sub chapters */
-//             if (ereg (">[0-9]+\.\ <A", $index_a[$i]) && !ereg 
("HREF=\"ref\.[a-z]+\.html", $index_a[$i+1]))
-               if (ereg (">([0-9]+|[IVXL]+|[A-Z])\.\ <A", $index_a[$i]))
-               {
+
+               /* Sub chapters */
+               elseif (ereg (">([0-9]+|[IVXL]+|[A-Z])\.\ <A", $index_a[$i])) {
+
                        if ($new_list == 1) {
                                $new_list = 0;
                                $not_closed = 1;
-?>
-       <UL>
-<?php
+                               echo "\n        <UL>\n";
                        }
-                       preg_match ("/>([0-9]+|[IVXL]+|[A-Z])\. <A/", $index_a[$i], 
$matches);
-                       $schapter["nr"] = $matches[1];
-                       preg_match 
("/HREF=\"([a-z-]+\.([a-z-]+\.)?html)(\#[a-z]+)?\"/", $index_a[$i+1], $matches);
+                       
+                       //preg_match ("/>([0-9]+|[IVXL]+|[A-Z])\. <A/", $index_a[$i], 
+$matches);
+                       //$schapter["nr"] = $matches[1];
+                       preg_match 
+("/HREF=\"([a-z0-9-]+\.([a-z0-9-]+\.)?html)(\#[a-z0-9]+)?\"/", $index_a[$i+1], 
+$matches);
                        $schapter["html"] = $matches[1];
                        preg_match ("/>([^<]+)/", $index_a[$i+2], $matches);
                        $schapter["title"] = $matches[1];
-?>
-               <LI> <OBJECT type="text/sitemap">
-                       <param name="Name" value="<?php echo $schapter["title"]; ?>">
-                       <param name="Local" value="html\<?php echo $schapter["html"]; 
?>">
-                       </OBJECT>
-<?php
-                       DoFile ("html/".$schapter["html"]);
+                       SiteMapObj($schapter["title"], $schapter["html"], "            
+ ");
+
+                       DoFile ($schapter["html"]);
                }       
        }
+
+       echo "  </UL>\n";
+
+       // link in directly the copyright page
+       preg_match('|<A HREF="copyright.html" >(.*)</A > &copy;|U', $ijoin, $match);
+       SiteMapObj($match[1], "copyright.html", "       ", 17);
+
 ?>
-               </UL>
-       </UL>
 </UL>
 </BODY></HTML>
 
+<?php
+
+       // grab all the output at this point and
+       // write out to the proper language .hcc file
+       $writeout = ob_get_contents();
+       $fp = fopen("manual_$language.hhc", "w");
+       fputs($fp, $writeout);
+       fclose($fp);
+       
+       // make a compile.bat file according to the actual language
+       $fp = fopen("compile.bat", "w");
+       fputs($fp, "@" . getenv("PHP_HELP_COMPILER") . " manual_$language.hhp\n");
+       fclose($fp);
+       
+       // make a default index file (no content, no index)
+       // this is needed by the compiler, to compile errorfree ...
+       $index_hhk = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML>
+<HEAD>
+<meta name="GENERATOR" content="PHP 4 - Auto TOC script">
+<!-- Sitemap 1.0 -->
+</HEAD><BODY>
+<UL>
+</UL>
+</BODY></HTML>';
+
+       $fp = fopen("index.hhk", "w");
+       fputs($fp, $index_hhk);
+       fclose($fp);
+
+?>

Reply via email to