#!/usr/bin/env php \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"; } }