goba Fri Dec 21 08:55:46 2001 EDT
Modified files:
/phpdoc make_chm.php
Log:
Add new CHM script, backported from the NewCHM projects scripts.
Note, this script is not enough to make the NewCHM style of CHMs.
This is a backport for the regular versions distributed, to make
things work here until we are ready with the NewCHM things - we
are working on them :))
Index: phpdoc/make_chm.php
diff -u /dev/null phpdoc/make_chm.php:1.21
--- /dev/null Fri Dec 21 08:55:46 2001
+++ phpdoc/make_chm.php Fri Dec 21 08:55:46 2001
@@ -0,0 +1,266 @@
+<?php
+
+/*
+ PLEASE DO NOT MAKE ANY MAJOR MODIFICATIONS TO THIS CODE!
+ There is a new script collection on the way to replace
+ these scripts. This script is updated to handle many
+ things. Code backported from the new script collection.
+ Please be patient while it will be ready to put here.
+ See make_chm.README for information until then.
+*/
+
+// Used directories and files
+$HTML_PATH = getenv("PHP_HELP_COMPILE_DIR");
+$FANCY_PATH = getenv("PHP_HELP_COMPILE_FANCYDIR");
+$LANGUAGE = getenv("PHP_HELP_COMPILE_LANG");
+$INDEX_IN_HTML = "index.html";
+
+if (empty($FANCY_PATH)) { $FANCY_PATH = $HTML_PATH; }
+
+// Array to manual code -> HTML Help Code conversion
+$LANGUAGES = array(
+ "cs" => "0x405 Czech",
+ "de" => "0x407 German (Germany)",
+ "en" => "0x809 Enlish (United Kingdom)",
+ "es" => "0xc0a Spanish (International Sort)",
+ "fr" => "0x40c French (France)",
+ "hu" => "0x40e Hungarian",
+ "it" => "0x410 Italian (Italy)",
+ "ja" => "0x411 Japanese",
+ "kr" => "0x412 Korean",
+ "nl" => "0x413 Dutch (Netherlands)",
+ "pt_BR" => "0x416 Portuguese (Brazil)"
+);
+
+// Files on the top level of the TOC
+$MAIN_FILES = array(
+ "getting-started.html",
+ "langref.html",
+ "features.html",
+ "funcref.html",
+ "pear.html",
+ "faq.html",
+ "appendixes.html"
+);
+
+// Header for index and toc
+$HEADER = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+ <meta name="generator" content="PHP 4 - Auto TOC script">
+ <!-- Sitemap 1.0 -->
+</head>
+<body>
+ <object typre="text/site properties">
+ <param name="Window Styles" value="0x800227">
+ </object>
+ <ul>';
+
+makeProjectFile();
+makeContentFiles();
+
+// Generate the HTML Help content files
+function makeContentFiles()
+{
+ global $LANGUAGE, $MANUAL_TITLE, $HEADER, $MAIN_FILES,
+ $HTML_PATH, $INDEX_IN_HTML, $FIRST_PAGE;
+
+ $toc = fopen("php_manual_$LANGUAGE.hhc", "w");
+ $index = fopen("php_manual_$LANGUAGE.hhk", "w");
+
+ // Write out file headers
+ fputs($toc, $HEADER);
+ fputs($index, $HEADER);
+
+ // Read original index file and drop out newlines
+ $indexline = oneLiner("$HTML_PATH/$INDEX_IN_HTML");
+
+ // Print out the objects, autoparsing won't find
+ mapAndIndex($MANUAL_TITLE, $FIRST_PAGE, " ", $toc, $index, 21);
+
+ // There is a fancy index
+ if ($FIRST_PAGE != $INDEX_IN_HTML) {
+
+ // Find the name of the Table of Contents
+ preg_match('|CLASS=\"title\" ><A NAME=\"manual\" >(.+)</A|U', $indexline,
+$match);
+ if (empty($match[1])) { // Fallback
+ $match[1] = "Table of Contents";
+ }
+ mapAndIndex($match[1], $INDEX_IN_HTML, " ", $toc, $index, 21);
+
+ }
+
+ // Find the name of the Preface
+ preg_match('|<A HREF="preface.html" >(.*)</A >|U', $indexline, $match);
+ if (empty($match[1])) { // Fallback
+ $match[1] = "Preface";
+ }
+ mapAndIndex($match[1], "preface.html", " ", $toc, $index);
+
+ // Find the name of the Preface/About this Manual
+ fputs($toc, "\n <ul>");
+ preg_match('|<A HREF="preface.html#about" >(.*)</A >|U', $indexline, $match);
+ if (empty($match[1])) { // Fallback
+ $match[1]="About this Manual";
+ }
+ mapAndIndex($match[1], "preface.html#about", " ", $toc, $index);
+ fputs($toc, " </ul>\n");
+
+ // Now autofind the main pages
+ $MAIN_REGEXP = join("|", $MAIN_FILES);
+ preg_match_all("![IVX]+\. <A HREF=\"($MAIN_REGEXP)\" >(.+)</A >(.+)(?=[IVX]+\. <A
+HREF=\"($MAIN_REGEXP)|</DT ></DL ></DD ></DL)!U", $indexline, $matches,
+PREG_SET_ORDER);
+
+ // Go through the main files, and link in subpages
+ foreach ($matches as $matchinfo) {
+ mapAndIndex($matchinfo[2], $matchinfo[1], " ", $toc, $index);
+
+ fputs($toc, "\n <ul>\n");
+ preg_match_all("!<A HREF=\"(.+)\" >(.+)</A >!U", $matchinfo[3], $subpages,
+PREG_SET_ORDER);
+ foreach ($subpages as $spinfo) {
+ mapAndIndex($spinfo[2], $spinfo[1], " ", $toc, $index);
+ findDeeperLinks($spinfo[1], $toc, $index);
+ }
+ fputs($toc, "\n </ul>\n");
+ }
+
+ // Link in directly the copyright page
+ $copyline = oneLiner("$HTML_PATH/copyright.html");
+ preg_match('|<A NAME="copyright" ></A ><P ><B >(.*)</B|U', $copyline, $match);
+ if (empty($match[1])) { // Fallback
+ $match[1] = "Copyright";
+ }
+ mapAndIndex($match[1], "copyright.html", " ", $toc, $index, 17);
+
+ // Write out closing line, and end files
+ fputs($index, " </ul>\n</body>\n</html>");
+ fputs($toc, " </ul>\n</body>\n</html>");
+ fclose($index);
+ fclose($toc);
+} // makeContentfiles() function end
+
+// Generates the HTML Help project file
+function makeProjectFile()
+{
+ global $LANGUAGE, $MANUAL_TITLE, $LANGUAGES,
+ $HTML_PATH, $FANCY_PATH, $INDEX_IN_HTML,
+ $FIRST_PAGE;
+
+ // Try to find the fancy index file
+ if (file_exists("$FANCY_PATH/fancy-index.html")) {
+ $FIRST_PAGE = "fancy-index.html";
+ } else {
+ $FIRST_PAGE = $INDEX_IN_HTML;
+ }
+
+ // Start writing the project file
+ $project = fopen("php_manual_$LANGUAGE.hhp", "w");
+ fputs($project, "[OPTIONS]\n");
+ fputs($project, "Compatibility=1.1 or later\n");
+ fputs($project, "Compiled file=php_manual_$LANGUAGE.chm\n");
+ fputs($project, "Contents file=php_manual_$LANGUAGE.hhc\n");
+ fputs($project, "Index file=php_manual_$LANGUAGE.hhk\n");
+ fputs($project, "Default Font=Arial,10,0\n");
+ fputs($project, "Default Window=phpdoc\n");
+ fputs($project, "Default topic=$FANCY_PATH\\$FIRST_PAGE\n");
+ fputs($project, "Display compile progress=Yes\n");
+ fputs($project, "Full-text search=Yes\n");
+
+ // Get the proper language code from the array
+ fputs($project, "Language=" . $LANGUAGES[$LANGUAGE] . "\n");
+
+ // Now try to find out how the manual named in the actual language
+ // this must be in the index.html file as the title (DSSSL generated)
+ $content = oneLiner("$HTML_PATH/$INDEX_IN_HTML");
+ if (preg_match("|<TITLE >(.*)</TITLE >|U", $content, $found)) {
+ $MANUAL_TITLE = $found[1];
+ } else { // Fallback
+ $MANUAL_TITLE = "PHP Manual";
+ }
+
+ fputs($project, "Title=$MANUAL_TITLE\n");
+
+ // Define the phpdoc window style (adds more functionality)
+ fputs($project,
+"\n[WINDOWS]\nphpdoc=\"$MANUAL_TITLE\",\"php_manual_$LANGUAGE.hhc\",\"php_manual_$LANGUAGE.hhk\","
+ .
+
+"\"$FANCY_PATH\\$FIRST_PAGE\",\"$FANCY_PATH\\$FIRST_PAGE\",,,,,0x23520,,0x386e,,,,,,,,0\n");
+
+ // Write out all the filenames as in FANCY_PATH
+ fputs($project, "\n[FILES]\n");
+ $handle = opendir($FANCY_PATH);
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ fputs($project, "$FANCY_PATH\\$file\n");
+ }
+ }
+ closedir($handle);
+ fclose($project);
+} // makeProjectFile() function end
+
+// Print out a SiteMap object for a file
+function mapAndIndex($name, $local, $tabs, $toc, $index, $imgnum = "auto")
+{
+ global $FANCY_PATH;
+ $name = str_replace('"', '"', $name);
+
+ fputs($toc, "
+$tabs<li><object type=\"text/sitemap\">
+$tabs <param name=\"Name\" value=\"$name\">
+$tabs <param name=\"Local\" value=\"$FANCY_PATH\\$local\">
+");
+
+ if ($imgnum != "auto") {
+ fputs($toc, "$tabs <param name=\"ImageNumber\" value=\"$imgnum\">\n");
+ }
+ fputs($toc, "$tabs </object>\n");
+
+ fputs($index, "
+ <li><object type=\"text/sitemap\">
+ <param name=\"Local\" value=\"$FANCY_PATH\\$local\">
+ <param name=\"Name\" value=\"$name\">
+ </object></li>
+");
+
+} // mapAndIndex() function end
+
+
+// Process a file, and find any links need to be presented in tree
+function findDeeperLinks ($filename, $toc, $index)
+{
+ global $HTML_PATH;
+ $contents = oneLiner("$HTML_PATH/$filename");
+
+ // Find all sublinks
+ if
+(preg_match_all("!<DT\s+><A\s+HREF=\"(([\w\.-]+\.)+html)(\#[\w\.-]+)?\"\s+>(.*)</A\s+>!U",
+ $contents, $matches, PREG_SET_ORDER)) {
+
+ // Print out the file informations for all the links
+ fputs($toc, "\n <ul>");
+ foreach ($matches as $onematch) {
+ $param["html"] = $onematch[1];
+ if (!empty($onematch[3])) {
+ $param["html"] .= $onematch[3];
+ }
+ $param["title"] = strip_tags($onematch[4]);
+ mapAndIndex($param["title"], $param["html"], " ", $toc, $index);
+ }
+ fputs($toc, " </ul>\n");
+
+ } else {
+
+ // Uncomment this if you want to debug the above pregs
+ // Note: there are many files normally without deeper
+ // TOC info, eg. language.expressions.html
+
+ // echo "no deeper TOC info found in $filename\n";
+ // return;
+
+ }
+
+} // findDeeperLinks() function end
+
+
+// Return a file joined on one line
+function oneLiner($filename)
+{
+ return preg_replace("/[\r|\n]{1,2}/", " ", join("", file($filename)));
+} // oneLiner() function end
+
+?>
\ No newline at end of file