App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Wx/Preview.pm view on Meta::CPAN
#! perl
use v5.26;
use Object::Pad;
use utf8;
use Carp;
class ChordPro::Wx::Preview;
use ChordPro;
use ChordPro::Files;
use ChordPro::Paths;
use ChordPro::Wx::Config;
use ChordPro::Utils qw( demarkup :xp );
use Wx ':everything';
use Wx::Locale gettext => '_T';
use File::Temp qw( tempfile tempdir );
use File::Basename qw(basename);
use Ref::Util qw( is_hashref );
field $panel :param;
field $msgs;
field $fatal;
field $died;
field $tmpdir;
field $preview_cho :accessor;
field $preview_file;
field $preview_tmp;
field $unsaved_preview :mutator;
BUILD {
$tmpdir = tempdir( CLEANUP => 1 );
$preview_cho = fn_catfile( $tmpdir, "preview.cho" );
}
method _warn( @m ) {
$self->log( 'W', join("",@m) );
$msgs++;
}
method _info( @m ) {
$self->log( 'I', join("",@m) );
}
method _die( @m ) {
$self->log( 'E', join("", @m) );
$msgs++;
$fatal++;
$died++;
}
method log( $level, $msg ) {
$panel->log( $level, $msg );
}
method preview( $args, %opts ) {
unlink($preview_file) if $preview_file;
my $annotate = eval { $panel->prepare_annotations };
#### ChordPro
@ARGV = (); # just to make sure
push( @ARGV, "--debug" ) if $state{debug};
push( @ARGV, "--trace" ) if $state{trace};
push( @ARGV, "--verbose" ) for 1..($state{verbose}//0);
$msgs = $fatal = $died = 0;
local $SIG{__WARN__} = sub {
if ( $state{debuginfo} && $_[0] =~ /^ChordPro invoked/ ) {
$self->log( 'I', "@_" );
}
else {
$self->_warn(@_);
$panel->add_annotation( $1-1, $2 )
if $annotate && "@_" =~ /^Line (\d+),\s+(.*)/;
}
};
( run in 0.495 second using v1.01-cache-2.11-cpan-5735350b133 )