diff --git a/bundle.php b/bundle.php index 84116cd..a88f3a9 100755 --- a/bundle.php +++ b/bundle.php @@ -6,36 +6,58 @@ function line(string $text): void echo $text . PHP_EOL; } -if (count($argv) < 2) { - line('Usage: bundle.php '); +if (count($argv) < 3) { + line('Usage: bundle.php '); 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, '