mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-31 20:31:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			220 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| /* 
 | |
|  PLEASE DO NOT MAKE ANY MAJOR MODIFICATIONS TO THIS CODE!
 | |
|  There is a new script collection on the way to replace
 | |
|  these scripts. Please see the htmlhelp folder for the new
 | |
|  build system.
 | |
|  
 | |
|  See make_chm.README for information about this system.
 | |
| */
 | |
| 
 | |
| include_once('common.php');
 | |
| include_once('chm_settings.php');
 | |
| 
 | |
| $INDEX_IN_HTML = "index.html";
 | |
| 
 | |
| if (empty($FANCY_PATH)) { $FANCY_PATH = $HTML_PATH; }
 | |
| 
 | |
| // Files on the top level of the TOC
 | |
| $MAIN_FILES = array(
 | |
|     'getting.started.html',
 | |
|     'smarty.for.designers.html',
 | |
|     'smarty.for.programmers.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 type="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("chm/smarty_manual_$LANGUAGE.hhc", "w");
 | |
|     $index = fopen("chm/smarty_manual_$LANGUAGE.hhk", "w");
 | |
| 
 | |
|     // Write out file headers
 | |
|     fputs_wrapper($toc,   $HEADER);
 | |
|     fputs_wrapper($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=\"TOC\" *><DL *><DT *><B *>(.*)</B|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);
 | |
| 
 | |
|     // Now autofind the main pages
 | |
|     $MAIN_REGEXP = join("|", $MAIN_FILES);
 | |
| 
 | |
|     preg_match_all("![IVX]+\. <A\\s+HREF=\"($MAIN_REGEXP)\"\\s*>([^<]+)</A\\s*>.*</DT\\s*></DL\\s*>(?:</DD\\s*></DL\\s*>)?(?:</DD\\s*><DT\\s*>[IVX]|</DIV)!Ui", $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_wrapper($toc, "\n      <ul>\n");
 | |
|         preg_match_all('!\d+\. <A\\s+HREF="([^"]+)"\\s*>([^<]*)</A\\s*>!iSU', $matchinfo[0], $subpages, PREG_SET_ORDER);
 | |
| 
 | |
|         foreach ($subpages as $spinfo) {
 | |
|             mapAndIndex($spinfo[2], $spinfo[1], "        ", $toc, $index);
 | |
|             findDeeperLinks($spinfo[1], $toc, $index);
 | |
|         }
 | |
|         fputs_wrapper($toc, "\n      </ul>\n");
 | |
|     }
 | |
| 
 | |
|     // Write out closing line, and end files
 | |
|     fputs_wrapper($index, "  </ul>\n</body>\n</html>");
 | |
|     fputs_wrapper($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;
 | |
|     }
 | |
| 
 | |
|     $FIRST_PAGEP = substr($FANCY_PATH, 4) . "\\$FIRST_PAGE";
 | |
| 
 | |
|     // Start writing the project file
 | |
|     $project = fopen("chm/smarty_manual_$LANGUAGE.hhp", "w");
 | |
|     fputs_wrapper($project, "[OPTIONS]\n");
 | |
|     fputs_wrapper($project, "Compatibility=1.1 or later\n");
 | |
|     fputs_wrapper($project, "Compiled file=smarty_manual_$LANGUAGE.chm\n");
 | |
|     fputs_wrapper($project, "Contents file=smarty_manual_$LANGUAGE.hhc\n");
 | |
|     fputs_wrapper($project, "Index file=smarty_manual_$LANGUAGE.hhk\n");
 | |
|     fputs_wrapper($project, "Default Window=smarty\n");
 | |
|     fputs_wrapper($project, "Default topic=$FIRST_PAGEP\n");
 | |
|     fputs_wrapper($project, "Display compile progress=Yes\n");
 | |
|     fputs_wrapper($project, "Full-text search=Yes\n");
 | |
| 
 | |
|     // Get the proper language code from the array
 | |
|     fputs_wrapper($project, "Language={$LANGUAGES[$LANGUAGE]["langcode"]}\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\s*>([^<]*)</TITLE\s*>|U", $content, $found)) {
 | |
|         $MANUAL_TITLE = $found[1];
 | |
|     } else { // Fallback
 | |
|         $MANUAL_TITLE = "Smarty Manual";
 | |
|     }
 | |
| 
 | |
|     fputs_wrapper($project, "Title=$MANUAL_TITLE\n");
 | |
|     fputs_wrapper($project, "Default Font={$LANGUAGES[$LANGUAGE]['preferred_font']}\n");
 | |
| 
 | |
|     // Define the phpdoc window style (adds more functionality)
 | |
|     fputs_wrapper($project, "\n[WINDOWS]\nsmarty=\"$MANUAL_TITLE\",\"smarty_manual_$LANGUAGE.hhc\",\"smarty_manual_$LANGUAGE.hhk\"," .
 | |
|           "\"$FIRST_PAGEP\",\"$FIRST_PAGEP\",,,,,0x23520,,0x386e,,,,,,,,0\n");
 | |
| 
 | |
|     // Write out all the filenames as in FANCY_PATH
 | |
|     fputs_wrapper($project, "\n[FILES]\n");
 | |
|     $handle = opendir($FANCY_PATH);
 | |
|     while (false !== ($file = readdir($handle))) {
 | |
|         if ($file != "." && $file != "..") {
 | |
|             fputs_wrapper($project, substr($FANCY_PATH, 4)."\\$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_wrapper($toc, "
 | |
| $tabs<li><object type=\"text/sitemap\">
 | |
| $tabs  <param name=\"Name\" value=\"$name\">
 | |
| $tabs  <param name=\"Local\" value=\"".substr($FANCY_PATH, 4)."\\$local\">
 | |
| ");
 | |
| 
 | |
|     if ($imgnum != "auto") {
 | |
|         fputs_wrapper($toc, "$tabs  <param name=\"ImageNumber\" value=\"$imgnum\">\r\n");
 | |
|     }
 | |
|     fputs_wrapper($toc, "$tabs  </object>\r\n");
 | |
| 
 | |
|     fputs_wrapper($index, "
 | |
|     <li><object type=\"text/sitemap\">
 | |
|       <param name=\"Local\" value=\"".substr($FANCY_PATH, 4)."\\$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_wrapper($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_wrapper($toc, "        </ul>\n");
 | |
| 
 | |
|     } else {
 | |
|         echo "no deeper TOC info found in $filename\n";
 | |
|     }
 | |
|     
 | |
| } // findDeeperLinks() function end
 | |
| ?>
 |