view release on metacpan or search on metacpan
lib/ChordPro/Config/Properties.pm view on Meta::CPAN
GitHub.
=head1 ACKNOWLEDGEMENTS
This module was initially developed in 1994 as part of the Multihouse
MH-Doc (later: MMDS) software suite. Multihouse kindly waived copyrights.
In 2002 it was revamped as part of the Compuware OptimalJ development
process. Compuware kindly waived copyrights.
In 2020 it was updated to support arrays and released to the general
public.
=head1 COPYRIGHT & LICENSE
Copyright 1994,2002,2020 Johan Vromans, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
lib/ChordPro/Output/PDF.pm view on Meta::CPAN
my $t = fmt_subst( $s, $fmt->[2] );
if ( $t ne "" ) {
$pr->setfont($font) unless $havefont++;
$pr->text( $t, $rm-$pr->strwidth($t), $y );
}
}
$y -= $font->{size} * ($ps->{spacing}->{$type} || 1);
}
# Return updated baseline.
return $y;
}
sub wrap {
my ( $pr, $elt, $x ) = @_;
my $res = [];
my @chords = @{ $elt->{chords} // [] };
my @phrases = @{ defrag( $elt->{phrases} // [] ) };
my @rchords;
my @rphrases;
lib/ChordPro/lib/SVGPDF/Contrib/PathExtract.pm view on Meta::CPAN
my $absolute = $options_ref->{absolute};
my $no_smooth = $options_ref->{no_shortcuts} || $options_ref->{no_smooth};
if ($absolute) {
if ($verbose) {
print "Making all coordinates absolute.\n";
}
my @abs_pos = (0, 0);
my @start_drawing;
my $previous;
my $begin_drawing = 1; ##This will get updated after
for my $element (@path_info) {
if ($element->{type} eq 'moveto') {
$begin_drawing = 1;
if ($element->{position} eq 'relative') {
my $ip = $options_ref->{initial_position};
if ($ip) {
if (ref $ip ne 'ARRAY' ||
scalar @$ip != 2) {
croak "$me: The initial position supplied doesn't look like a pair of coordinates";
}
lib/ChordPro/lib/SVGPDF/Element.pm view on Meta::CPAN
BUILD {
$css = $root->css;
$xo = $root->xoforms->[-1]->{xo};
};
method _dbg (@args) {
$root->_dbg(@args);
}
method css_push ( $updated_atts = undef ) {
$style = $css->push( element => $name, %{$updated_atts // $atts} );
}
method css_pop () {
$css->pop;
}
method set_transform ( $tf ) {
return unless $tf;
my $nooptimize = 1;
lib/ChordPro/lib/SVGPDF/Element.pm view on Meta::CPAN
if $param =~ /^(.*):(.*)$/;
$param = lc($param);
# Get and remove the attribute.
my $p = delete( $atts{$param} );
# Queue.
push( @todo, [ $param, $flags, $p ] );
}
# CSS push with updated attributes.
$self->css_push( \%atts );
# Now we can process the values.
for ( @todo ) {
my ( $param, $flags, $p ) = @$_;
unless ( defined $p ) {
if ( $flags =~ /s/ ) { $p = ""; }
elsif ( $flags =~ /[0HUV]/ ) { $p = 0; }
else {
lib/ChordPro/res/abc/abc2svg/README.md view on Meta::CPAN
after `-o` (default `abc.odt`).
Example:
`Â Â Â Â Â Â Â Â abcqjs toodt.js my_file.abc -o my_file.odt`
- `toparam.js`
This script just outputs the abc2svg parameters.
- `tosvg.js`
This script creates a SVG file that includes all the SVGs of the generation.
The included SVG images are updated for being correctly rendered by tools
that use librsvg, the SVG library for GNOME (feh, viewnior, swayimg...).
#### 2.3 PDF generation
`abctopdf` is a shell script which converts ABC to PDF using one of the
previous shell scripts and, either a chrome/chromium compatible web browser
(settable by the environment variable 'BROWSER'),
or the program [weasyprint](https://weasyprint.org/).
Note also that, with `weasyprint`, the paper size is forced to A4.
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
}
}
// if slur on 2 staves, define it, but don't output it now
// this will be done in draw_sl2()
if (s_st2 && !recurr) { // if not 2nd call to draw_slur()
if (!gene.a_sl)
gene.a_sl = []
// replace the symbols of the other staff
// by symbols in the current staff but with updated y offsets
h = 24 + k1.fmt.sysstaffsep // delta y
if (s_st2.st > k1.st)
h = -h
for (i = 0; i < n; i++) {
k = path[i]
if (k.st == k1.st) {
if (k.dur)
a = k // (used for types // and \\)
continue
}
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
// s3.prev.st = st
}
return clef_type_start
}
/* set the clefs */
/* this function is called once at start of tune generation */
/*
* global variables:
* - staff_tb[st].clef = clefs at start of line (here, start of tune)
* (created here, updated on clef draw)
* - voice_tb[v].clef = clefs at end of generation
* (created on voice creation, updated here)
*/
function set_clefs() {
var s, s2, st, v, p_voice, g, new_type, new_line, p_staff, pit,
staff_clef = new Array(nstaff + 1), // st -> { clef, autoclef }
sy = cur_sy,
mid = []
// create the staff table
staff_tb = new Array(nstaff + 1)
for (st = 0; st <= nstaff; st++) {
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
}
function a_start(s, t) {
anno_out(s, t, user.anno_start)
}
function a_stop(s, t) {
anno_out(s, t, user.anno_stop)
}
function empty_function() {
}
// the values are updated on generate()
var anno_start = empty_function,
anno_stop = empty_function
// output the stop user annotations
function anno_put() {
var s
while (1) {
s = anno_a.shift()
if (!s)
break