App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro.pm view on Meta::CPAN
%configs = %{ CP->configs };
my $options =
{
verbose => 0, # verbose processing
encoding => "", # input encoding, default UTF-8
### ADDITIONAL CLI OPTIONS ###
'vertical-space' => 0, # extra vertical space between lines
### NON-CLI OPTIONS ###
'chords-column' => 0, # chords in a separate column
# Development options (not shown with -help).
debug => 0, # debugging
trace => 0, # trace (show process)
# Service.
_package => $my_package,
_name => $my_name,
_version => $my_version,
_stdin => \*STDIN,
_stdout => \*STDOUT,
_stderr => \*STDERR,
_argv => [ @ARGV ],
};
# Colled command line options in a hash, for they will be needed
# later.
my $clo = {};
# When running in reference mode, we carefully defeat everything
# the user could change to the built-in default config.
my $reference = 0;
# Sorry, layout is a bit ugly...
my $ok =
GetOptions
($clo,
### Options ###
"a2crd!", # perform ascii to cho
"crd", # input is ascii, not cho
"output|o=s", # Saves the output to FILE
"generate=s",
"backend-option|bo=s\%",
"diagrams=s", # Prints chord diagrams
"encoding=s",
"csv!", # Generates contents CSV
"front-matter=s", # Front matter page(s)
"cover=s", # Cover page(s)
"back-matter|back=s", # Back matter page(s)
"filelist=s@", # List of input files
"title=s", # Title (for books)
"subtitle=s", # Subtitle (for books)
"meta=s\%", # Command line meta data
"decapo", # remove capo
"fragment|F", # partial (incomplete) song
"strict!", # strict conformance
### Experimental ###
"progress_callback=s",
### Standard Chordii Options ###
"about|A+" => \$about, # About...
"chord-font|C=s", # Sets chord font
"chord-grid-size|s=f", # Sets chord diagram size [30]
"chord-grids-sorted|S!", # Prints chord diagrams ordered
"chord-size|c=i", # Sets chord size [9]
"dump-chords|D", # Dumps chords definitions (PostScript)
"dump-chords-text|d" => \$dump_chords, # Dumps chords definitions (Text)
"dump-chords-json" => sub { $dump_chords = 2}, # Dumps instrument defs (json).
"even-pages-number-left|L", # Even pages numbers on left
"odd-pages-number-left", # Odd pages numbers on left
"lyrics-only|l", # Only prints lyrics
"G" => sub { $clo->{'chord-grids'} = 0 },
"chord-grids!", # En[dis]ables printing of chord diagrams
"easy-chord-grids|g!", # Do[esn't] print diagrams for built-in "easy" chords. Ignored.
"page-number-logical|n", # Numbers logical pages, not physical
"page-size|P=s", # Specifies page size [letter, a4 (default)]
"single-space|a!", # Automatic single space lines without chords
"start-page-number|p=i", # Starting page number [1]
"text-size|t=i", # Sets text size [12]
"text-font|T=s", # Sets text font
"i" => sub { $clo->{toc} = 1 },
"toc!", # Generates a table of contents
"transpose|x=s", # Transposes by N semi-tones
"transcode|xc=s", # Transcodes to another notation
"user-chord-grids!", # Do[esn't] print diagrams for user defined chords.
"version|V" => \$version, # Prints version and exits
"vertical-space|w=f", # Extra vertical space between lines
"2-up|2", # 2 pages per sheet
"4-up|4", # 4 pages per sheet
### Configuration handling ###
'config|cfg=s@',
'noconfig|no-config',
'sysconfig=s',
'nosysconfig|no-sysconfig',
'nolegacyconfig|no-legacyconfig', # legacy
'userconfig=s',
'nosongconfig|no-songconfig',
'nouserconfig|no-userconfig',
'nodefaultconfigs|no-default-configs|X',
'define=s%',
'print-default-config+' => \$defcfg,
'print-final-config' => \$fincfg,
'print-delta-config' => \$deltacfg,
'print-template-config' => \$tmplcfg,
'convert-config=s',
# This aborts option scanning.
'reference|R' => sub { $reference++;
CORE::die("!FINISH!"); },
lib/ChordPro.pm view on Meta::CPAN
@p = ( qw(title subtitle),
( grep { !/^(sub)?title$/ } sort(@{$::config->{metadata}{keys}//[]}) ),
grep { !/^(sub)?title$/ } (keys(%{ChordPro::Song::_directives()})) );
$res->{directives} = [ @p ];
$res->{directive_abbrevs} = ChordPro::Song::_directive_abbrevs();
return $res;
}
sub splitpath {
my ( $path ) = @_;
return () unless $path;
if ( $^O =~ /Win/ ) {
return split( /;/, $path );
}
return split( /;/, $path );
}
sub app_usage {
my ($fh, $exit) = @_;
my %cfg;
for ( qw( config userconfig sysconfig) ) {
$cfg{$_} = $configs{$_} || "no default";
}
if ( $::options->{reference} ) {
print ${fh} <<EndOfUsage;
Usage: $0 [ options ] [ file ... ]
Options:
--[no]strict Strict conformance
--output=FILE -o Saves the output to FILE
--about -A About ChordPro...
--version -V Prints version and exits
--help -h This message
--ident Show identification
--verbose Verbose information. Repeat for more.
EndOfUsage
exit $exit if defined $exit;
return;
}
####TODO: weed out for --reference.
print ${fh} <<EndOfUsage;
Usage: $0 [ options ] [ file ... ]
Options:
--a2crd Perform text to ChordPro conversion only
--noa2crd Do not auto-sense text to ChordPro conversion
--about -A About ChordPro...
--back-matter=FILE Add back matter pages from PDF document
--config=JSON --cfg Config definitions (multiple)
--cover=FILE Add cover pages from PDF document
--crd Input is text, not ChordPro
--csv (with PDF) Also generate CSV
--decapo Eliminate capo settings
--diagrams=WHICH Prints chord diagrams
--encoding=ENC Encoding for input files (UTF-8)
--filelist=FILE Reads song file names from FILE
--fragment -F Partial (incomplete) song
--front-matter=FILE Add front matter pages from PDF document
--lyrics-only -l Only prints lyrics
--meta KEY=VALUE Add meta data
--output=FILE -o Saves the output to FILE
--[no]strict Strict conformance
--start-page-number=N -p Starting page number [1]
--subtitle=VALUE Use with --title for a nice subtitle.
--title=VALUE Adds a nice cover page using this title.
--toc --notoc -i Generates/suppresses a table of contents
--transcode=SYS -xc Transcodes to notation system
--transpose=N -x Transposes by N semi-tones
--version -V Prints version and exits
Chordii compatibility.
Options marked with * are better handled in the config file.
--chord-font=FONT -C *Sets chord font
--chord-grid-size=N -s *Sets chord diagram size [30]
--chord-grids-sorted -S *Prints chord diagrams ordered by key
--chord-size=N -c *Sets chord size [9]
--dump-chords -D Dumps chords definitions (PDF)
--dump-chords-text -d Dumps chords definitions (Text)
--even-pages-number-left -L *Not supported
--odd-pages-number-left *Not supported.
--no-chord-grids -G *Disables printing of chord diagrams
--no-easy-chord-grids -g Not supported
--page-number-logical -n Not supported
--page-size=FMT -P *Specifies page size [letter, a4 (default)]
--single-space -a *Automatic single space lines without chords
--text-size=N -t *Sets text size [12]
--text-font=FONT -T *Sets text font
--user-chord-grids *Prints the user defined chords in the song
--vertical-space=N -w *Extra vertical space between lines
--2-up -2 Not supported
--4-up -4 Not supported
Configuration options:
--config=CFG Project specific config file ($cfg{config})
--define=XXX=YYY Sets config item XXX to value YYY
--noconfig Don't use a project specific config file
--nodefaultconfigs -X Don't use any default config files
--nosongconfig Don't use song specific configs
--nosysconfig Don't use a system specific config file
--nouserconfig Don't use a user specific config file
--print-default-config Prints the default config and exits
--print-delta-config Prints the diffs for the resultant config and exits
--print-final-config Prints the resultant config and exits
--reference -R Reference mode (no configs etc.)
--sysconfig=CFG System specific config file ($cfg{sysconfig})
--userconfig=CFG User specific config file ($cfg{userconfig})
Missing default configuration files are silently ignored.
Miscellaneous options:
--help -h This message
--help-config Help for ChordPro configuration
--ident Show identification
--manual The full manual.
--verbose Verbose information. Repeat for more.
EndOfUsage
exit $exit if defined $exit;
}
( run in 2.144 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )