mirror of
https://git.srhtnin.garden/sarah/srhtnin.github.io.git
synced 2026-10-14 02:38:12 +02:00
Hopefully this works.
This commit is contained in:
1 parent
3222f5aa99
commit
2c8ccd51db
6 files changed
+318
-47
No files matched your search
@@ -0,0 +1,235 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$RootDirectory = __DIR__;
|
||||
$OutputDirectory = $RootDirectory . "/_Site";
|
||||
$PagesDirectory = $RootDirectory . "/Pages";
|
||||
|
||||
|
||||
function RemoveDirectory(string $Directory): void
|
||||
{
|
||||
if (!is_dir($Directory)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$Iterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator(
|
||||
$Directory,
|
||||
FilesystemIterator::SKIP_DOTS
|
||||
),
|
||||
RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
|
||||
foreach ($Iterator as $Item) {
|
||||
if ($Item->isDir()) {
|
||||
rmdir($Item->getPathname());
|
||||
} else {
|
||||
unlink($Item->getPathname());
|
||||
}
|
||||
}
|
||||
|
||||
rmdir($Directory);
|
||||
}
|
||||
|
||||
|
||||
function CopyDirectory(
|
||||
string $Source,
|
||||
string $Destination
|
||||
): void {
|
||||
if (!is_dir($Destination)) {
|
||||
mkdir($Destination, 0777, true);
|
||||
}
|
||||
|
||||
$Iterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator(
|
||||
$Source,
|
||||
FilesystemIterator::SKIP_DOTS
|
||||
),
|
||||
RecursiveIteratorIterator::SELF_FIRST
|
||||
);
|
||||
|
||||
foreach ($Iterator as $Item) {
|
||||
$RelativePath = $Iterator->getSubPathName();
|
||||
$DestinationPath = $Destination . "/" . $RelativePath;
|
||||
|
||||
if ($Item->isDir()) {
|
||||
if (!is_dir($DestinationPath)) {
|
||||
mkdir($DestinationPath, 0777, true);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
copy(
|
||||
$Item->getPathname(),
|
||||
$DestinationPath
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function RenderPage(
|
||||
string $SourceFile,
|
||||
string $DestinationFile,
|
||||
string $RootPath
|
||||
): void {
|
||||
$DestinationDirectory = dirname($DestinationFile);
|
||||
|
||||
if (!is_dir($DestinationDirectory)) {
|
||||
mkdir($DestinationDirectory, 0777, true);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
try {
|
||||
require $SourceFile;
|
||||
$Contents = ob_get_clean();
|
||||
} catch (Throwable $Exception) {
|
||||
ob_end_clean();
|
||||
|
||||
throw $Exception;
|
||||
}
|
||||
|
||||
if ($Contents === false) {
|
||||
throw new RuntimeException(
|
||||
"Failed to render: " . $SourceFile
|
||||
);
|
||||
}
|
||||
|
||||
file_put_contents(
|
||||
$DestinationFile,
|
||||
$Contents
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Remove the previous build.
|
||||
*/
|
||||
|
||||
RemoveDirectory($OutputDirectory);
|
||||
|
||||
mkdir(
|
||||
$OutputDirectory,
|
||||
0777,
|
||||
true
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Copy static directories.
|
||||
*/
|
||||
|
||||
$StaticDirectories = [
|
||||
"Assets",
|
||||
"Scripts",
|
||||
"Styles"
|
||||
];
|
||||
|
||||
foreach ($StaticDirectories as $Directory) {
|
||||
CopyDirectory(
|
||||
$RootDirectory . "/" . $Directory,
|
||||
$OutputDirectory . "/" . $Directory
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Copy index.html.
|
||||
*/
|
||||
|
||||
copy(
|
||||
$RootDirectory . "/index.html",
|
||||
$OutputDirectory . "/index.html"
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Build PHP pages.
|
||||
*/
|
||||
|
||||
$Iterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator(
|
||||
$PagesDirectory,
|
||||
FilesystemIterator::SKIP_DOTS
|
||||
)
|
||||
);
|
||||
|
||||
foreach ($Iterator as $File) {
|
||||
if (!$File->isFile()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strtolower($File->getExtension()) !== "php") {
|
||||
continue;
|
||||
}
|
||||
|
||||
$SourceFile = $File->getPathname();
|
||||
|
||||
$RelativePath = substr(
|
||||
$SourceFile,
|
||||
strlen($PagesDirectory) + 1
|
||||
);
|
||||
|
||||
$RelativePath = str_replace(
|
||||
DIRECTORY_SEPARATOR,
|
||||
"/",
|
||||
$RelativePath
|
||||
);
|
||||
|
||||
/*
|
||||
* Anything under Pages/Bits is a partial.
|
||||
* Do not generate HTML pages from these.
|
||||
*/
|
||||
|
||||
if (str_starts_with($RelativePath, "Bits/")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$OutputPath = preg_replace(
|
||||
"/\.php$/i",
|
||||
".html",
|
||||
$RelativePath
|
||||
);
|
||||
|
||||
if ($OutputPath === null) {
|
||||
throw new RuntimeException(
|
||||
"Failed to create output path for: " . $SourceFile
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Pages/Home.html
|
||||
* RootPath = ../
|
||||
*
|
||||
* Pages/Stuff/Page.html
|
||||
* RootPath = ../../
|
||||
*/
|
||||
|
||||
$Depth = substr_count(
|
||||
$OutputPath,
|
||||
"/"
|
||||
) + 1;
|
||||
|
||||
$RootPath = str_repeat(
|
||||
"../",
|
||||
$Depth
|
||||
);
|
||||
|
||||
$DestinationFile =
|
||||
$OutputDirectory .
|
||||
"/Pages/" .
|
||||
$OutputPath;
|
||||
|
||||
echo "Building Pages/" . $OutputPath . PHP_EOL;
|
||||
|
||||
RenderPage(
|
||||
$SourceFile,
|
||||
$DestinationFile,
|
||||
$RootPath
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
echo "Build complete." . PHP_EOL;
|
||||
Reference in new issue
Block a user