App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro.pm view on Meta::CPAN
binmode STDOUT => ':raw';
copy( $cfg, \*STDOUT );
exit 0;
}
if ( $tmplcfg || $defcfg ) {
use File::Copy;
my $cfg = fn_catfile( CP->findresdirs("config")->[-1],
"config.tmpl" );
binmode STDOUT => ':raw';
copy( $cfg, \*STDOUT );
exit 0;
}
if ( $fincfg || $deltacfg ) {
print ChordPro::Config::config_final( delta => $deltacfg );
exit 0;
}
if ( $about ) {
$::config = ChordPro::Config::configurator({});
app_about( \*STDOUT, $about, 0 );
}
if ( $dump_chords ) {
$::config = ChordPro::Config::configurator($options);
require ChordPro::Chords;
ChordPro::Chords::dump_chords($dump_chords);
exit 0;
}
if ( $clo->{filelist} ) {
my @files;
foreach ( @{ $clo->{filelist} } ) {
push( @files, "--filelist=" . qquote($_) );
my $dir = fn_dirname($_);
my $list = fs_load( $_, $clo );
push( @files, "--dir=" . qquote($dir) );
foreach ( @$list ) {
next unless /\S/;
next if /^#/;
s/[\r\n]+$//;
push( @files, $_ );
}
push( @files, "--filelist", "--dir" );
}
if ( @files ) {
if ( $files[0] =~ /\.pdf$/i ) {
$options->{'front-matter'} //= $files[0];
shift(@files);
}
if ( $files[-1] =~ /\.pdf$/i ) {
$options->{'back-matter'} //= $files[-1];
pop(@files);
}
}
unshift( @ARGV, @files ) if @files;
}
# At this point, there should be filename argument(s)
# unless we're embedded or just dumping chords.
app_usage(\*STDERR, 1)
unless $::__EMBEDDED__
|| $clo->{'dump-chords'}
|| $clo->{'convert-config'}
|| @ARGV;
# Return result.
$options;
}
sub app_ident {
my ($fh, $exit) = @_;
print {$fh} ("This is ChordPro ",
$::options->{reference} ? "reference " : "core ",
$VERSION,
$VERSION =~ /_/ ? " (Unsupported development snapshot)" : "",
"\n"
);
exit $exit if defined $exit;
}
sub app_about {
my ($fh, $level, $exit) = @_;
if ( $level > 2 ) {
require JSON::XS;
select $fh; $| = 1; # otherwise no output on MacOS
print ${fh} ( JSON::XS->new->canonical->
# pretty->
utf8->convert_blessed->encode(runtime_info()) );
}
else {
print ${fh} <<EndOfAbout,
ChordPro: A lyrics and chords formatting program.
ChordPro will read a text file containing the lyrics of one or many
songs plus chord information. ChordPro will then generate a
photo-ready, professional looking, impress-your-friends sheet-music
suitable for printing on your nearest printer.
To learn more about ChordPro, look for the man page or do
"chordpro --help" for the list of options.
For more information, see https://www.chordpro.org .
Run-time information:
EndOfAbout
::runtimeinfo( $level > 1 ? "extensive" : "normal" );
}
exit $exit if defined $exit;
}
use List::Util qw(uniq);
sub ::runtimeinfo {
my $level = shift // "normal";
my %i = %{runtime_info($level)};
my $fmt0 = " %-26.26s %-10s";
my $fmt2 = $fmt0 . "\n";
my $fmt3 = $fmt0 . " (%s)\n";
( run in 1.127 second using v1.01-cache-2.11-cpan-71847e10f99 )