First fully working recursive bundler
This commit is contained in:
parent
08d014713a
commit
c4845ed7c6
68
bundle.php
68
bundle.php
@ -6,36 +6,58 @@ function line(string $text): void
|
||||
echo $text . PHP_EOL;
|
||||
}
|
||||
|
||||
if (count($argv) < 2) {
|
||||
line('Usage: bundle.php <file>');
|
||||
if (count($argv) < 3) {
|
||||
line('Usage: bundle.php <inFile> <outFile>');
|
||||
exit(1);
|
||||
}
|
||||
$targetFile = $argv[1];
|
||||
if (!file_exists($targetFile)) {
|
||||
line('File not found: ' . $targetFile);
|
||||
$fromFile = $argv[1];
|
||||
if (!file_exists($fromFile)) {
|
||||
line('File not found: ' . $fromFile);
|
||||
exit(1);
|
||||
}
|
||||
$toFile = $argv[2];
|
||||
if (file_exists($toFile)) {
|
||||
line('File already exists: ' . $toFile);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
function getIncludes(string $file): array
|
||||
function getLineIncludeFile(string $line): false|string
|
||||
{
|
||||
$content = file_get_contents($file);
|
||||
$files = [];
|
||||
foreach (explode("\n", $content) as $line) {
|
||||
if (str_starts_with($line, 'include')) {
|
||||
$line = "include 'test.include.php';";
|
||||
preg_match("/include\s+'([^']+)'/", $line, $matches);
|
||||
$files[] = $matches[1];
|
||||
if (str_starts_with($line, 'include')) {
|
||||
preg_match("/include\s+'([^']+)'/", $line, $matches);
|
||||
return $matches[1];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getAllLines(string $file): iterable
|
||||
{
|
||||
$handle = fopen($file, 'r');
|
||||
while (!feof($handle)) {
|
||||
yield fgets($handle);
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
function replaceIncludes(string $file, int $depth = 0): iterable
|
||||
{
|
||||
foreach (getAllLines($file) as $line) {
|
||||
$includeFile = getLineIncludeFile($line);
|
||||
if ($includeFile) {
|
||||
yield from replaceIncludes($includeFile, $depth + 1);
|
||||
} else {
|
||||
if ($depth > 0 && str_starts_with($line, '<?php')) continue;
|
||||
if (empty(trim($line))) continue;
|
||||
yield $line;
|
||||
}
|
||||
}
|
||||
return $files;
|
||||
}
|
||||
|
||||
var_dump(getIncludes($targetFile));
|
||||
|
||||
function buildIncludeTree(string $file): array
|
||||
{
|
||||
$includes = getIncludes($file);
|
||||
foreach ($includes as $include) {
|
||||
|
||||
}
|
||||
}
|
||||
$lines = replaceIncludes($fromFile);
|
||||
$toFileHandle = fopen($toFile, 'w');
|
||||
foreach ($lines as $line) {
|
||||
fwrite($toFileHandle, $line);
|
||||
chmod($toFile, 0755);
|
||||
}
|
||||
fwrite($toFileHandle, PHP_EOL);
|
||||
fclose($toFileHandle);
|
@ -1,3 +1,5 @@
|
||||
<?php
|
||||
|
||||
echo 'test.include' . PHP_EOL;
|
||||
include 'test2.include.php';
|
||||
|
||||
echo 'test.include' . PHP_EOL;
|
||||
|
3
test2.include.php
Normal file
3
test2.include.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
echo 'test2.include' . PHP_EOL;
|
Loading…
x
Reference in New Issue
Block a user