Rendering working with rough initial content
This commit is contained in:
+214
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
// This is pretty bad code. Sorry. I will clean it up.
|
||||
|
||||
foreach (glob("configs/*.php") as $config_file) {
|
||||
if (is_file($config_file)) {
|
||||
echo "Processing render configuration $config_file\n";
|
||||
render_with_config_path($config_file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function render_with_config_path($config_file) {
|
||||
$config = array();
|
||||
include($config_file);
|
||||
|
||||
if (!isset($config["pages"])) {
|
||||
echo "Not a valid configuration; skipping\n";
|
||||
return;
|
||||
}
|
||||
|
||||
// Prepare substitutions
|
||||
$substitutions = array("{TITLE}" => $config["title"]);
|
||||
|
||||
$rev_id = exec("git rev-parse --short HEAD", $output, $retval);
|
||||
if ($retval != 0) {
|
||||
$rev_id = "unknown";
|
||||
}
|
||||
$substitutions["{GIT_REV_ID}"] = $rev_id;
|
||||
date_default_timezone_set('UTC');
|
||||
$substitutions["{TIMESTAMP}"] = date("Y-m-d H:i:s e");
|
||||
|
||||
|
||||
// Copy resources across
|
||||
$resources_to_copy = array_merge(glob("resources/common/*"), glob($config["resources_dir"] . "/*"));
|
||||
$res_out_dir = $config["output_dir"] . "/" . $config["resources_output_dir"];
|
||||
|
||||
if (!is_dir($res_out_dir)) {
|
||||
mkdir($res_out_dir, 0777, true);
|
||||
}
|
||||
foreach ($resources_to_copy as $res) {
|
||||
$res_name = basename($res);
|
||||
$substitutions["{RES:$res_name}"] = $config["resources_output_dir"] . "/$res_name";
|
||||
copy($res, "$res_out_dir/$res_name");
|
||||
}
|
||||
|
||||
if (!is_dir($config["output_dir"])) {
|
||||
mkdir($config["output_dir"], 0777, true);
|
||||
}
|
||||
|
||||
// We need to pre-process all the pages to get the section headings ready
|
||||
$sections = array(); // entries are associative arrays
|
||||
$template_texts = array();
|
||||
$page_no = 1;
|
||||
foreach ($config["pages"] as $page) {
|
||||
// Read in the text
|
||||
$template_html = $config["html_dir"] . "/" . $page["id"] . ".html";
|
||||
$text = file_get_contents($template_html);
|
||||
|
||||
$section_no = 0;
|
||||
$subsection_no = 0;
|
||||
|
||||
// Look for things we need to convert to h1, h2, h3
|
||||
preg_match_all("/{HEADING:(PAGE|SECTION|SUBSECTION):([^:]*):([^}]+)}/", $text, $section_matches);
|
||||
$originals = $section_matches[0];
|
||||
$types = $section_matches[1];
|
||||
$ids = $section_matches[2];
|
||||
$titles = $section_matches[3];
|
||||
|
||||
// TOC gets its info from the config file, not from an h1 which may or may not be present
|
||||
$page_id = $page["id"];
|
||||
$sections[] = array("type" => "PAGE", "page" => "$page_id.html", "section" => "", "number" => "$page_no.", "title" => $page["title"]);
|
||||
|
||||
for ($i = 0; $i < count($types); $i++) {
|
||||
$tag = "h1";
|
||||
$number = "$page_no.";
|
||||
if ($types[$i] == "SECTION") {
|
||||
$tag = "h2";
|
||||
$section_no++;
|
||||
$number = "$page_no.$section_no.";
|
||||
}
|
||||
if ($types[$i] == "SUBSECTION") {
|
||||
$tag = "h3";
|
||||
$subsection_no++;
|
||||
$number = "$page_no.$section_no.$subsection_no.";
|
||||
}
|
||||
|
||||
// If we have an ID
|
||||
$anchor_start = "";
|
||||
$anchor_end = "";
|
||||
if (strlen($ids[$i]) > 0 && $types[$i] != "PAGE") { // pages are always added the TOC and have empty section_id
|
||||
// Add it to the TOC array
|
||||
$sections[] = array("type" => $types[$i], "page" => "$page_id.html", "section" => $ids[$i], "number" => $number, "title" => $titles[$i]);
|
||||
// Also create an internal anchor
|
||||
$anchor_start = "<a name=\"$ids[$i]\">";
|
||||
$anchor_end = "</a>";
|
||||
}
|
||||
|
||||
$final_tag = "<$tag>$anchor_start$number $titles[$i]$anchor_end</$tag>";
|
||||
|
||||
// Replace the template with the tag
|
||||
$text = str_replace($originals[$i], $final_tag, $text);
|
||||
|
||||
// Now create substitutions for this tag so other pages can refer to them
|
||||
$page_id = $page["id"];
|
||||
$section_id = $ids[$i];
|
||||
$title = $titles[$i];
|
||||
$substitutions["{LINK:$section_id}"] = "<a href=\"$page_id.html#$section_id\">$title</a>";
|
||||
$substitutions["{TITLE:$section_id}"] = $title;
|
||||
}
|
||||
|
||||
// Save the text for later
|
||||
$template_texts[$page["id"]] = $text;
|
||||
$page_no++;
|
||||
}
|
||||
|
||||
// Render each page
|
||||
for ($i = 0; $i < count($config["pages"]); $i++) {
|
||||
$page = $config["pages"][$i];
|
||||
|
||||
// Configure page-specific substitutions
|
||||
$substitutions["{PREV_URL}"] = "";
|
||||
$substitutions["{PREV_TITLE}"] = "";
|
||||
$substitutions["{NEXT_URL}"] = "";
|
||||
$substitutions["{NEXT_TITLE}"] = "";
|
||||
$substitutions["{TOC_URL}"] = "index.html";
|
||||
$substitutions["{TOC_TITLE}"] = "Contents";
|
||||
|
||||
if (isset($config["pages"][$i-1])) {
|
||||
$prev_page = $config["pages"][$i-1];
|
||||
$substitutions["{PREV_URL}"] = $prev_page["id"] . ".html";
|
||||
$substitutions["{PREV_TITLE}"] = $prev_page["title"];
|
||||
}
|
||||
if (isset($config["pages"][$i+1])) {
|
||||
$next_page = $config["pages"][$i+1];
|
||||
$substitutions["{NEXT_URL}"] = $next_page["id"] . ".html";
|
||||
$substitutions["{NEXT_TITLE}"] = $next_page["title"];
|
||||
}
|
||||
|
||||
|
||||
$template_html = $config["html_dir"] . "/" . $page["id"] . ".html";
|
||||
$out_html = $config["output_dir"] . "/" . $page["id"] . ".html";
|
||||
|
||||
if (is_file($out_html)) {
|
||||
unlink($out_html);
|
||||
}
|
||||
|
||||
append_file_and_sub($out_html, "html/common/header.html", $substitutions);
|
||||
$text = do_substitutions($template_texts[$page["id"]], $substitutions);
|
||||
file_put_contents($out_html, $text, FILE_APPEND);
|
||||
append_file_and_sub($out_html, "html/common/footer.html", $substitutions);
|
||||
}
|
||||
|
||||
// Render the index / TOC now that we have all the information at hand
|
||||
$toc_html = $config["output_dir"] . "/index.html";
|
||||
$toc_text = file_get_contents("html/common/toc.html");
|
||||
$toc_h1 = file_get_contents("html/common/toc-h1.html");
|
||||
$toc_h2 = file_get_contents("html/common/toc-h2.html");
|
||||
$toc_h3 = file_get_contents("html/common/toc-h3.html");
|
||||
|
||||
foreach ($sections as $section) {
|
||||
$start = $toc_h1;
|
||||
if ($section["type"] == "SECTION") $start = $toc_h2;
|
||||
if ($section["type"] == "SUBSECTION") $start = $toc_h3;
|
||||
|
||||
$toc_subs["{TOC_ENTRY_NUMBER}"] = $section["number"];
|
||||
$toc_subs["{TOC_ENTRY_TITLE}"] = $section["title"];
|
||||
$toc_subs["{TOC_ENTRY_PAGE}"] = $section["page"];
|
||||
$toc_subs["{TOC_ENTRY_SECTION}"] = $section["section"];
|
||||
|
||||
$line = do_substitutions($start, $toc_subs);
|
||||
$toc_text .= "$line\n";
|
||||
}
|
||||
|
||||
$substitutions["{PREV_URL}"] = "";
|
||||
$substitutions["{PREV_TITLE}"] = "";
|
||||
$substitutions["{NEXT_URL}"] = $config["pages"][0]["id"] . ".html";
|
||||
$substitutions["{NEXT_TITLE}"] = $config["pages"][0]["title"];
|
||||
|
||||
// Write it to disk
|
||||
if (is_file($toc_html)) {
|
||||
unlink($toc_html);
|
||||
}
|
||||
append_file_and_sub($toc_html, "html/common/header.html", $substitutions);
|
||||
file_put_contents($toc_html, $toc_text, FILE_APPEND);
|
||||
append_file_and_sub($toc_html, "html/common/footer.html", $substitutions);
|
||||
|
||||
// This manual is all done
|
||||
}
|
||||
|
||||
function append_file_and_sub($dest, $src, $substitutions) {
|
||||
// Read in starting text
|
||||
$text = file_get_contents($src);
|
||||
|
||||
$text = do_substitutions($text, $substitutions);
|
||||
|
||||
// Append processed text to the destination file
|
||||
touch($dest);
|
||||
file_put_contents($dest, $text, FILE_APPEND);
|
||||
}
|
||||
|
||||
|
||||
function do_substitutions($text, $substitutions) {
|
||||
// Perform all template substitutions
|
||||
foreach ($substitutions as $from => $to) {
|
||||
$text = str_replace($from, $to, $text);
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user