propresenter-php/php/bin/parse-song.php
2026-03-01 16:12:17 +01:00

87 lines
2.5 KiB
PHP
Executable file

#!/usr/bin/env php
<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use ProPresenter\Parser\ProFileReader;
// Check for required argument
if ($argc < 2) {
echo "Usage: parse-song.php <file.pro>\n";
exit(1);
}
$filePath = $argv[1];
// Try to read the song file
try {
$song = ProFileReader::read($filePath);
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
exit(1);
}
// Display song header
echo "Song: " . $song->getName() . "\n";
echo "UUID: " . $song->getUuid() . "\n";
echo "\n";
// Display groups
$groups = $song->getGroups();
echo "Groups (" . count($groups) . "):\n";
foreach ($groups as $index => $group) {
$groupNumber = $index + 1;
$slides = $song->getSlidesForGroup($group);
$slideCount = count($slides);
echo " [" . $groupNumber . "] " . $group->getName() . " (" . $slideCount . " slide" . ($slideCount !== 1 ? "s" : "") . ")\n";
foreach ($slides as $slideIndex => $slide) {
$slideNumber = $slideIndex + 1;
$plainText = $slide->getPlainText();
if ($plainText === '') {
echo " Slide " . $slideNumber . ": (no text)\n";
} else {
// Replace newlines with " / " for single-line display
$displayText = str_replace("\n", " / ", $plainText);
echo " Slide " . $slideNumber . ": " . $displayText . "\n";
}
// Display translation if it exists
if ($slide->hasTranslation()) {
$translation = $slide->getTranslation();
if ($translation !== null) {
$translationText = $translation->getPlainText();
if ($translationText !== '') {
$displayTranslation = str_replace("\n", " / ", $translationText);
echo " Translation: " . $displayTranslation . "\n";
}
}
}
}
}
echo "\n";
// Display arrangements
$arrangements = $song->getArrangements();
if (empty($arrangements)) {
echo "Arrangements: (none)\n";
} else {
echo "Arrangements (" . count($arrangements) . "):\n";
foreach ($arrangements as $index => $arrangement) {
$arrangementNumber = $index + 1;
$groupsInArrangement = $song->getGroupsForArrangement($arrangement);
$groupNames = array_map(fn ($g) => $g->getName(), $groupsInArrangement);
$arrangementSequence = implode(" -> ", $groupNames);
echo " [" . $arrangementNumber . "] " . $arrangement->getName() . ": " . $arrangementSequence . "\n";
}
}