App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Config.pm view on Meta::CPAN
$cfg->split_fc_aliases;
$cfg->expand_font_shortcuts;
push( @res, $cfg );
return @res;
}
sub process_config ( $cfg, $file ) {
my $verbose = $options->{verbose};
warn("Process: $file\n") if $verbose > 1;
if ( $cfg->{tuning} ) {
my $res =
ChordPro::Chords::set_tuning( $cfg );
warn( "Invalid tuning in config: ", $res, "\n" ) if $res;
$cfg->{_tuning} = $cfg->{tuning};
$cfg->{tuning} = [];
}
ChordPro::Chords::reset_parser;
ChordPro::Chords::Parser->reset_parsers;
local $::config = dclone(hmerge( $::config, $cfg ));
if ( $cfg->{chords} ) {
ChordPro::Chords::push_parser($cfg->{notes}->{system});
my $c = $cfg->{chords};
if ( @$c && $c->[0] eq "append" ) {
shift(@$c);
}
foreach ( @$c ) {
my $res =
ChordPro::Chords::add_config_chord($_);
warn( "Invalid chord in config: ",
$_->{name}, ": ", $res, "\n" ) if $res;
}
if ( $verbose > 1 ) {
warn( "Processed ", scalar(@$c), " chord entries\n");
warn( "Totals: ",
ChordPro::Chords::chord_stats(), "\n" );
}
$cfg->{_chords} = delete $cfg->{chords};
ChordPro::Chords::pop_parser();
}
$cfg->split_fc_aliases;
$cfg->expand_font_shortcuts;
}
# Expand pdf.fonts.foo: bar to pdf.fonts.foo { description: bar }.
sub expand_font_shortcuts ( $cfg ) {
return unless exists $cfg->{pdf}->{fonts};
for my $f ( keys %{$cfg->{pdf}->{fonts}} ) {
next if ref($cfg->{pdf}->{fonts}->{$f}) eq 'HASH';
for ( $cfg->{pdf}->{fonts}->{$f} ) {
my $v = $_;
$v =~ s/\s*;\s*$//;
my $i = {};
# Break out ;xx=yy properties.
while ( $v =~ s/\s*;\s*(\w+)\s*=\s*(.*?)\s*(;|$)/$3/ ) {
my ( $k, $v ) = ( $1, $2 );
if ( $k =~ /^(colou?r|background|frame|numbercolou?r|size)$/ ) {
$k =~ s/colour/color/;
$v =~ s/^(['"]?)(.*)\1$/$2/;
$i->{$k} = $v;
}
else {
warn("Unknown font property: $k (ignored)\n");
}
}
# Break out size.
if ( $v =~ /(.*?)(?:\s+(\d+(?:\.\d+)?))?\s*(?:;|$)/ ) {
$i->{size} //= $2 if $2;
$v = $1;
}
# Check for filename.
if ( $v =~ /^.*\.(ttf|otf)$/i ) {
$i->{file} = $v;
}
# Check for corefonts.
elsif ( is_corefont($v) ) {
$i->{name} = is_corefont($v);
}
else {
$i->{description} = $v;
$i->{description} .= " " . delete($i->{size})
if $i->{size};
}
$_ = $i;
}
}
}
use Storable qw(dclone);
# Split fontconfig aliases into separate entries.
sub split_fc_aliases ( $cfg ) {
if ( $cfg->{pdf}->{fontconfig} ) {
# Orig.
my $fc = $cfg->{pdf}->{fontconfig};
# Since we're going to delete/insert keys, we need a copy.
my %fc = %$fc;
while ( my($k,$v) = each(%fc) ) {
# Split on comma.
my @k = split( /\s*,\s*/, $k );
if ( @k > 1 ) {
# We have aliases. Delete the original.
delete( $fc->{$k} );
# And insert individual entries.
$fc->{$_} = dclone($v) for @k;
}
}
}
}
# Reverse of config_expand_font_shortcuts.
sub simplify_fonts( $cfg ) {
( run in 1.882 second using v1.01-cache-2.11-cpan-e1769b4cff6 )