view release on metacpan or search on metacpan
lib/ChordPro/Config.pm view on Meta::CPAN
my $cfg = Data::Properties->new;
$cfg->parse_file($from);
$new = $cfg->data;
}
else { # assume JSON, RJSON, RRJSON
$new = $parser->decode($data);
}
# And re-encode it using the schema.
my $res = $parser->encode( data => $new, pretty => 1,
nounicodeescapes => 1, schema => $schema );
# use DDP; p $res;
# Add trailer.
$res .= "\n// End of Config.\n";
# Write if out.
if ( $to && $to ne "-" ) {
open( my $fd, '>', $to )
or die("$to: $!\n");
print $fd $res;
$fd->close;
lib/ChordPro/Config.pm view on Meta::CPAN
# For debugging messages.
sub qd ( $val, $compact = 0 ) {
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = !$compact;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $x = Data::Dumper::Dumper($val);
if ( $compact ) {
$x =~ s/^bless\( (.*), '[\w:]+' \)$/$1/s;
$x =~ s/\s+/ /gs;
}
defined wantarray ? $x : warn($x,"\n");
}
1;
lib/ChordPro/Files.pm view on Meta::CPAN
#! perl
use v5.26;
use feature qw( signatures );
no warnings qw( experimental::signatures );
use utf8;
package ChordPro::Files;
# Generalize some file system operations so they use LongPath on Windows.
# This is necessary for long filenames and unicode filenames.
# NOTE: FILENAMES SHOULD AT ALL TIMES BE PERL STRINGS!
# Where do filenames come from?
#
# 1. Command line arguments. Decode ASAP.
# 2. File (and directory) dialogs: Always perl string.
# 3. Preferences, configs, recents: should all be perl strings.
# 4. From filelists. We expect these lists to have UTF8 filenames that
# get decoded when the list is read.
lib/ChordPro/Output/LaTeX.pm view on Meta::CPAN
$chord = $gchordstart_tag.@{$lineobject->{chords}}[$index]->key .$gchordend_tag; #songbook format \\[chord]
$has_chord = 1;
}}
$line .= $chord . latex_encode($phrase);
$index += 1;
$chord = "";
}
my $empty = $line;
my $textline = $line;
my $nbsp = $start_spaces_songline; #unicode for nbsp sign # start_spaces_songline
if($empty =~ /^\s+/){ # starts with spaces
$empty =~ s/^(\s+).*$/$1/; # not the elegant solution - but working - replace all spaces in the beginning of a line
my $replaces = $empty; #with a nbsp symbol as the intend tend to be intentional
$replaces =~ s/\s+/$nbsp/g;
$textline =~ s/$empty/$replaces/;
}
$line = $textline;
if ($has_chord) { $line = $chorded_line . $line; } else { $line = $unchorded_line . $line; }
return $line.$eol;
}
lib/ChordPro/Output/Markdown.pm view on Meta::CPAN
return "" unless length($c);
return $c->key if $c->info->is_annotation;
$text_layout->set_markup($c->chord_display);
return $text_layout->render;
}
sub md_textline{
my ( $songline ) = @_;
my $empty = $songline;
my $textline = $songline;
my $nbsp = "\x{00A0}"; #unicode for nbsp sign
if($empty =~ /^\s+/){ # starts with spaces
$empty =~ s/^(\s+).*$/$1/; # not the elegant solution - but working - replace all spaces in the beginning of a line
my $replaces = $empty; #with a nbsp symbol as the intend tend to be intentional
$replaces =~ s/\s/$nbsp/g;
$textline =~ s/$empty/$replaces/;
}
$textline = $textline." "; # append two spaces to force linebreak in Markdown
return $textline;
}
lib/ChordPro/Wx/Main.pm view on Meta::CPAN
Wx::Event::EVT_SYS_COLOUR_CHANGED( $self,
$self->can("OnSysColourChanged") );
$self->init_theme;
if ( @ARGV ) {
# use DDP;
use charnames ':full';
require _charnames;
push( @{$state{msgs}},
"ARGV: " . np(@ARGV,
show_unicode => 1,
escape_chars => 'nonascii',
unicode_charnames => 1 ) ) if 0;
my $arg = shift(@ARGV); # ignore rest
$arg = decode_utf8($arg);
push( @{$state{msgs}},
'DECODED: ' . np($arg,
show_unicode => 1,
escape_chars => 'nonascii',
unicode_charnames => 1 ) ) if 0;
if ( fs_test( 'd', $arg ) ) {
return 1 if $self->select_mode("sbexport")->open_dir($arg);
}
elsif ( !fs_test( 'r', $arg ) ) {
return 1 if $self->select_mode("editor")->newfile($arg);
Wx::MessageDialog->new( $self, "Error opening $arg",
"File Open Error",
wxOK | wxICON_ERROR )->ShowModal;
}
lib/ChordPro/lib/Data/Printer/Theme/Zellner.pm view on Meta::CPAN
regex => '#000087', # regular expressions
code => '#870087', # code references
glob => '#870087', # globs (usually file handles)
vstring => '#ff00ff', # version strings (v5.30.1, etc)
lvalue => '#000000', # lvalue label
format => '#000000', # format type
repeated => '#000000', # references to seen values
caller_info => '#878787', # details on what's being printed
weak => '#000000', # weak references flag
tainted => '#870000', # tainted flag
unicode => '#000000', # utf8 flag
escaped => '#ff00ff', # escaped characters (\t, \n, etc)
brackets => '#000000', # (), {}, []
separator => '#000000', # the "," between hash pairs, array elements, etc
quotes => '#000000', # q(")
unknown => '#878787', # any (potential) data type unknown to Data::Printer
};
}
1;
lib/ChordPro/lib/Data/Printer/Theme/Zellner.pm view on Meta::CPAN
regex => '#000087', # regular expressions
code => '#870087', # code references
glob => '#870087', # globs (usually file handles)
vstring => '#ff00ff', # version strings (v5.30.1, etc)
lvalue => '#000000', # lvalue label
format => '#000000', # format type
repeated => '#000000', # references to seen values
caller_info => '#878787', # details on what's being printed
weak => '#000000', # weak references flag
tainted => '#870000', # tainted flag
unicode => '#000000', # utf8 flag
escaped => '#ff00ff', # escaped characters (\t, \n, etc)
brackets => '#000000', # (), {}, []
separator => '#000000', # the "," between hash pairs, array elements, etc
quotes => '#000000', # q(")
unknown => '#878787', # any (potential) data type unknown to Data::Printer
=head1 COPYRIGHT
E<copy> MMXXIII - Abe Timmerman <abeltje@cpan.org>
lib/ChordPro/lib/JSON/Relaxed.pm view on Meta::CPAN
Enabled by default, overruled by C<strict>.
=head2 Extended Unicode escapes
Unicode escapes in strings may contain an arbitrary number of hexadecimal
digits enclosed in braces:
\u{1d10e}
This eliminates the need to use
L<surrogates|https://unicode.org/faq/utf_bom.html#utf16-2>
to obtain the same character:
\uD834\uDD0E
Enabled by default, overruled by C<strict>.
=head2 Combined hash keys
Hash keys that contain periods are considered subkeys, e.g.
lib/ChordPro/lib/JSON/Relaxed/Parser.pm view on Meta::CPAN
method encode(%opts) {
my $schema = $opts{schema};
my $level = $opts{level} // 0;
my $rv = $opts{data}; # allow undef
my $indent = $opts{indent} // 2;
my $impoh = $opts{implied_outer_hash} // $implied_outer_hash;
my $ckeys = $opts{combined_keys} // $combined_keys;
my $prpmode = $opts{prp} // $prp;
my $pretty = $opts{pretty} // $pretty;
my $strict = $opts{strict} // $strict;
my $nouesc = $opts{nounicodeescapes} // 0;
if ( $strict ) {
$ckeys = $prpmode = $impoh = 0;
}
$schema = resolve( $schema, $schema ) if $schema;
my $s = "";
my $i = 0;
my $props = $schema->{properties};
lib/ChordPro/lib/JSON/Relaxed/Parser.pm view on Meta::CPAN
################ Strings ################
class JSON::Relaxed::String :isa(JSON::Relaxed::Token);
field $content :param = undef;
field $quote :accessor :param = undef;
# Quoted strings are assembled from complete substrings, so escape
# processing is done on the substrings. This prevents ugly things
# when unicode escapes are split across substrings.
# Unquotes strings are collected token by token, so escape processing
# can only be done on the complete string (on output).
ADJUST {
$content = $self->unescape($content) if defined($quote);
};
method append ($str) {
$str = $self->unescape($str) if defined $quote;
$content .= $str;
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
j = i + 1
continue
default:
c2 = abc_utf[src.slice(i, i + 2)]
if (c2) {
dst += c2;
j = i + 2
continue
}
// try unicode combine characters
c2 = src[i + 1]
if (!c2)
break // !! the next test is true if c2 is undefined !!
if (!/[A-Za-z]/.test(c2))
break
switch (c) {
case '`':
dst += c2 + "\u0300" // grave
j = i + 2
continue
lib/ChordPro/res/config/config.schema view on Meta::CPAN
],
"default": "pct_chords"
}
}
}
}
},
{
"title": "Settings for the parser/preprocessor",
"type": "object",
"description": "For selected lines, you can specify a series of `{ \"target\" : \"xxx\", \"replace\" : \"yyy\" }`.\nEvery occurrence of \"xxx\" will be replaced by \"yyy\".\nUse \"pattern\" instead of \"target\" for regular expression replaceme...
"properties": {
"parser": {
"$ref": "#/definitions/parserspec",
"description": "Settings for the parser/preprocessor.\nFor selected lines, you can specify a series of \n{ \"target\" : \"xxx\", \"replace\" : \"yyy\" }\nEvery occurrence of \"xxx\" will be replaced by \"yyy\".\nUse \"pattern\" instead of \...
}
}
},
{
"title": "Text Output",
"type": "object",
t/105_chords.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
C { bass => '', ext => '', ext_canon => '', name => 'C', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C+ { bass => '', ext => '', ext_canon => '', name => 'C+', qual => '+', qual_canon => '+', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
t/107_chords_latin.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Do { bass => '', ext => '', ext_canon => '', name => 'Do', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do+ { bass => '', ext => '', ext_canon => '', name => 'Do+', qual => '+', qual_canon => '+', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
t/107_chords_latin_dash.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Do#7(-5) { bass => '', ext => '7-5', ext_canon => '7-5', name => 'Do#7-5', qual => '', qual_canon => '', root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
Mi7(-5) { bass => '', ext => '7-5', ext_canon => '7-5', name => 'Mi7-5', qual => '', qual_canon => '', root => 'Mi', root_canon => 'Mi', root_mod => 0, root_ord => 4, system => 'latin' }
t/107_chords_latin_o.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Doo { bass => '', ext => '', ext_canon => '', name => 'Doo', qual => 'o', qual_canon => 0, root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'latin' }
Do#o { bass => '', ext => '', ext_canon => '', name => 'Do#o', qual => 'o', qual_canon => 0, root => 'Do#', root_canon => 'Do#', root_mod => 1, root_ord => 1, system => 'latin' }
t/108_chords_solfege.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Do { bass => '', ext => '', ext_canon => '', name => 'Do', qual => '', qual_canon => '', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'solfege' }
Do+ { bass => '', ext => '', ext_canon => '', name => 'Do+', qual => '+', qual_canon => '+', root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'solfege' }
t/108_chords_solfege_dash.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Tim7-5 { bass => '', ext => '7-5', ext_canon => '7-5', name => 'Tim7-5', qual => 'm', qual_canon => '-', root => 'Ti', root_canon => 'Ti', root_mod => 0, root_ord => 11, system => 'solfege' }
Di7(-5) { bass => '', ext => '7-5', ext_canon => '7-5', name => 'Di7-5', qual => '', qual_canon => '', root => 'Di', root_canon => 'Di', root_mod => 1, root_ord => 1, system => 'solfege' }
t/108_chords_solfege_o.t view on Meta::CPAN
$res = {%$res};
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
Doo { bass => '', ext => '', ext_canon => '', name => 'Doo', qual => 'o', qual_canon => 0, root => 'Do', root_canon => 'Do', root_mod => 0, root_ord => 0, system => 'solfege' }
Dio { bass => '', ext => '', ext_canon => '', name => 'Dio', qual => 'o', qual_canon => 0, root => 'Di', root_canon => 'Di', root_mod => 1, root_ord => 1, system => 'solfege' }
t/109_chords_nashville.t view on Meta::CPAN
$res = {%$res}; # unbless
delete($res->{parser});
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
1 { bass => '', ext => '', ext_canon => '', name => 1, qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
17 { bass => '', ext => 7, ext_canon => 7, name => 17, qual => '', qual_canon => '', root => 1, root_canon => 1, root_mod => 0, root_ord => 0, system => 'nashville' }
t/10_files.t view on Meta::CPAN
dd($name, "X2" );
}
}
is( 0+keys(%files), 0, "All files found" );
sub dd {
return;
use DDP;
diag np( $_[0],
show_unicode => 1,
escape_chars=>'nonascii',
unicode_charnames => 1,
$_[1] ? ( as => $_[1] ) : () );
}
t/110_chords_roman.t view on Meta::CPAN
delete($res->{parser});
$res = {%$res}; # unbless
use Data::Dumper qw();
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Quotekeys = 0;
local $Data::Dumper::Deparse = 1;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Trailingcomma = 1;
local $Data::Dumper::Useperl = 1;
local $Data::Dumper::Useqq = 0; # I want unicode visible
my $s = Data::Dumper::Dumper($res);
$s =~ s/\s+/ /gs;
$s =~ s/, \}/ }/gs;
$s =~ s/\s+$//;
return $s;
}
__DATA__
I { bass => '', ext => '', ext_canon => '', name => 'I', qual => '', qual_canon => '', root => 'I', root_canon => 'I', root_mod => 0, root_ord => 0, system => 'roman' }
i { bass => '', ext => '', ext_canon => '', name => 'i', qual => '', qual_canon => '-', root => 'i', root_canon => 'i', root_mod => 0, root_ord => 0, system => 'roman' }