mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-24 18:01:37 +02: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
|
|
?>
|