App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Utils.pm view on Meta::CPAN
# Simple progress message. Suppress if $index = 0 or total = 1.
$callback =
'%{index=0||' .
'%{total=1||Progress[%{phase}]: %{index}%{total|/%{}}%{msg| - %{}}}' .
'}';
}
my $msg = ChordPro::Output::Common::fmt_subst
( { meta => $args }, $callback );
$msg =~ s/\n+$//;
warn( $msg, "\n" ) if $msg;
}
return $ret;
}
push( @EXPORT, "progress" );
# Common items for property directives ({textsize} etc.).
sub propitems() {
qw( chord chorus diagrams footer grid label tab text title toc );
}
sub propitems_re() {
my $re = join( '|', propitems() );
qr/(?:$re)/;
}
push( @EXPORT, "propitems_re" );
push( @EXPORT_OK, "propitems" );
# For debugging encoding problems.
sub as( $s ) {
return "<undef>" unless defined $s;
$s =~ s{ ( [^\x{20}-\x{7f}] ) }
{ join( '', map { sprintf '\x{%02x}', ord $_ } split //, $1) }gex;
return $s;
}
push( @EXPORT_OK, "as" );
sub enumerated( @s ) {
return "" unless @s;
my $last = pop(@s);
my $ret = "";
$ret .= join(", ", @s) . " and " if @s;
$ret .= $last;
return $ret;
}
push( @EXPORT_OK, "enumerated" );
# Determine image type.
sub _detect_image_format( $test ) {
for ( ref($test) ? $$test : $test ) {
/^GIF\d\d[a-z]/ and return 'gif';
/^\xFF\xD8\xFF/ and return 'jpeg';
/^\x89PNG\x0D\x0A\x1A\x0A/ and return 'png';
/^\s*P[1-6]/ and return 'pnm';
/^II\x2A\x00/ and return 'tiff';
/^MM\x00\x2A/ and return 'tiff';
/^<svg\s/is and return 'svg';
}
# Not recognized.
return;
}
sub detect_image_format( $test ) {
my $format = _detect_image_format($test);
if ( $format ) {
return { file_ext => $format, error => "" };
}
return { file_ext => "", error => "Unrecognized image type." };
}
push( @EXPORT_OK, "detect_image_format" );
# Transpose types
sub XP_DEFAULT() { 0 }
sub XP_FOLLOW() { 0 }
sub XP_SHARP() { 1 }
sub XP_FLAT() { 2 }
sub XP_KEY() { 3 }
$EXPORT_TAGS{"xp"} = [ qw( XP_DEFAULT XP_FOLLOW XP_SHARP XP_FLAT XP_KEY ) ];
push( @EXPORT_OK, @{ $EXPORT_TAGS{"xp"} } );
1;
( run in 0.923 second using v1.01-cache-2.11-cpan-df04353d9ac )