App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Output/ChordPro.pm view on Meta::CPAN
#! perl
package main;
our $options;
our $config;
package ChordPro::Output::ChordPro;
use v5.26;
use utf8;
use Carp;
use feature qw( signatures );
no warnings "experimental::signatures";
use ChordPro::Output::Common;
use ChordPro::Utils qw( fq qquote demarkup is_true is_ttrue );
use Ref::Util qw( is_arrayref );
my $re_meta;
sub generate_songbook ( $self, $sb ) {
# Skip empty songbooks.
return [] unless eval { $sb->{songs}->[0]->{body} };
# Build regex for the known metadata items.
$re_meta = join( '|',
map { quotemeta }
"title", "subtitle",
"artist", "composer", "lyricist", "arranger",
"album", "copyright", "year",
"key", "time", "tempo", "capo", "duration" );
$re_meta = qr/^($re_meta)$/;
my @book;
foreach my $song ( @{$sb->{songs}} ) {
if ( @book ) {
push(@book, "") if $options->{'backend-option'}->{tidy};
push(@book, "{new_song}");
}
push(@book, @{generate_song($song)});
}
push( @book, "");
\@book;
}
my $lyrics_only = 0;
my $variant = 'cho';
my $rechorus;
sub upd_config () {
$rechorus = $::config->{chordpro}->{chorus}->{recall};
$lyrics_only = 2 * $::config->{settings}->{'lyrics-only'};
}
sub generate_song ( $s ) {
my $tidy = $options->{'backend-option'}->{tidy};
my $structured = ( $options->{'backend-option'}->{structure} // '' ) eq 'structured';
# $s->structurize if ++$structured;
$variant = $options->{'backend-option'}->{variant} || 'cho';
my $seq = $options->{'backend-option'}->{seq};
my $expand = $options->{'backend-option'}->{expand};
my $msp = $variant eq "msp";
my $movable = ChordPro::Chords::Parser->get_parser($s->{system})->movable;
upd_config();
my @s;
my %imgs;
if ( $s->{preamble} ) {
@s = @{ $s->{preamble} };
}
push(@s, "{title: " . fq($s->{meta}->{title}->[0]) . "}")
( run in 0.650 second using v1.01-cache-2.11-cpan-ceb78f64989 )