Improve elbowed-hairpin (issue 324800043 by thomasmorle...@gmail.com)

2017-04-22 Thread thomasmorley65

Reviewers: ,

Message:
Please review.

Description:
Improve elbowed-hairpin

Let the lines be printed by the new make-connected-line-procedure,
using ly:line-interface::line. The new stencil now reacts on
overrides for style and dash-period/fraction.
Not closing Hairpins created by elbowed-hairpin are possible now.
Single disadvantage: The point-list needs to have (0 . 0) first,
if a closing Hairpin is wished.
The previous used make-connected-path did that automatically and
thus was not flexible enough.

Give the final stencil proper extents.

Cleanup, more descriptive naming, extent docstring.

Please review this at https://codereview.appspot.com/324800043/

Affected files (+56, -32 lines):
  M scm/output-lib.scm


Index: scm/output-lib.scm
diff --git a/scm/output-lib.scm b/scm/output-lib.scm
index  
56e348da3dbcb0c2bf6951d9e8913f357e38e6e9..76d17cb7c07251986b2b99150219c0bbc91b6203  
100644

--- a/scm/output-lib.scm
+++ b/scm/output-lib.scm
@@ -1165,21 +1165,43 @@ between the two text elements."
  '(bound-details left padding)
  (+ my-padding  
script-padding)))


+(define-public (make-connected-line pts grob)
+  "Returns a line connecting @var{pts}, gets layout information from  
@var{grob}"

+  (define (connected-points grob ls pts)
+(if (not (pair? (cdr pts)))
+(apply ly:stencil-add empty-stencil ls)
+(connected-points
+  grob
+  (cons
+(ly:line-interface::line
+  grob
+  (car (first pts))
+  (cdr (first pts))
+  (car (second pts))
+  (cdr (second pts)))
+ls)
+  (cdr pts
+  (connected-points grob '() pts))
+
 (define ((elbowed-hairpin coords mirrored?) grob)
   "Create hairpin based on a list of @var{coords} in @code{(cons x y)}
 form.  @code{x} is the portion of the width consumed for a given line
 and @code{y} is the portion of the height.  For example,
-@code{'((0.3 . 0.7) (0.8 . 0.9) (1.0 . 1.0))} means that at the point
+@code{'((0 . 0) (0.3 . 0.7) (0.8 . 0.9) (1.0 . 1.0))} means that at the  
point

 where the hairpin has consumed 30% of its width, it must
 be at 70% of its height.  Once it is to 80% width, it
-must be at 90% height.  It finishes at
-100% width and 100% height.  @var{mirrored?} indicates if the hairpin
-is mirrored over the Y-axis or if just the upper part is drawn.
+must be at 90% height.  It finishes at 100% width and 100% height.
+If @var{coords} does not begin with @code{'(0 . 0)} the final hairpin may  
have
+an open tip.  For example '(0 . 0.5) will cause an open end of 50% of the  
usual

+height.
+@var{mirrored?} indicates if the hairpin is mirrored over the Y-axis or if
+just the upper part is drawn.
 Returns a function that accepts a hairpin grob as an argument
 and draws the stencil based on its coordinates.
+
 @lilypond[verbatim,quote]
 #(define simple-hairpin
-  (elbowed-hairpin '((1.0 . 1.0)) #t))
+  (elbowed-hairpin '((0 . 0)(1.0 . 1.0)) #t))

 \\relative c' {
   \\override Hairpin #'stencil = #simple-hairpin
@@ -1187,50 +1209,52 @@ and draws the stencil based on its coordinates.
 }
 @end lilypond
 "
-  (define (pair-to-list pair)
-(list (car pair) (cdr pair)))
-  (define (normalize-coords goods x y)
+  (define (scale-coords coords-list x y)
 (map
- (lambda (coord)
-   (cons (* x (car coord)) (* y (cdr coord
- goods))
-  (define (my-c-p-s points thick decresc?)
-(make-connected-path-stencil
- points
- thick
- (if decresc? -1.0 1.0)
- 1.0
- #f
- #f))
+  (lambda (coord) (cons (* x (car coord)) (* y (cdr coord
+  coords-list))
+
+  (define (hairpin::print-part points decresc? me)
+(let ((stil (make-connected-line points me)))
+  (if decresc? (ly:stencil-scale stil -1 1) stil)))
+
   ;; outer let to trigger suicide
   (let ((sten (ly:hairpin::print grob)))
 (if (grob::is-live? grob)
 (let* ((decresc? (eqv? (ly:grob-property grob 'grow-direction)  
LEFT))

-   (thick (ly:grob-property grob 'thickness 0.1))
-   (thick (* thick (layout-line-thickness grob)))
(xex (ly:stencil-extent sten X))
(lenx (interval-length xex))
(yex (ly:stencil-extent sten Y))
(leny (interval-length yex))
(xtrans (+ (car xex) (if decresc? lenx 0)))
(ytrans (car yex))
-   (uplist (map pair-to-list
-(normalize-coords coords lenx (/ leny 2
-   (downlist (map pair-to-list
-  (normalize-coords coords lenx (/ leny -2)
-  (ly:stencil-translate
-   (ly:stencil-add
-(my-c-p-s uplist thick decresc?)
-(if mirrored? (my-c-p-s downlist thick decresc?)  
empty-stencil))

-   (cons xtrans ytrans)))
+   (uplist (scale-coords coords lenx (/ leny 2)

Re: help with bash script to translate @ref{} items in translated manuals

2017-04-22 Thread karl
Federico Bruni:
> Il giorno ven 21 apr 2017 alle 7:08, Federico Bruni 
>  ha scritto:
> > I guess I'll have to revert to my almost manual replacement I've used 
> > so far.
> 
> Or I may try a  different approach and script a replacement from a file 
> like:
> 
> @ref{Different editions from one source},@ref{Edizioni diverse da un 
> unico sorgente}
> @ref{Dimensions},@ref{Dimensioni}
> @ref{Direction and placement},@ref{Direzione e posizionamento}
> 
> that replace first instance of @ref with the second instance (after the 
> comma)

Well, that is about the same as putting the translation in the po file 
and running the attached script. Then if and when gettext is working 
again for doc., as someone said it has been, then you don't have to 
convert your replacement file to po style.

$ read_po.pl Documentation/po/it.po .itely | head
File: Documentation/essay/engraving.itely
 @ref{Music engraving} -> @ref{}
 @ref{The LilyPond story} -> @ref{}
 @ref{Engraving details} -> @ref{}
 @ref{Music fonts} -> @ref{}
 @ref{Optical spacing} -> @ref{}
 @ref{Ledger lines} -> @ref{}
 @ref{Optical sizing} -> @ref{}
 @ref{Why work so hard?} -> @ref{}
 @ref{Automated engraving} -> @ref{}
$

Regards,
/Karl Hammar

---
Aspö Data
Lilla Aspö 148
S-742 94 Östhammar
Sweden
+46 173 140 57

#!/usr/bin/perl -w

use strict;
use Data::Dumper;

my %file_list;

sub read_po() {
my $po_file = $ARGV[0];
my @arr;

open(FH, $po_file) || die("cannot open $po_file");

my $nxt = [ [], "", "" ];

while () {
	chomp;
	s/^\s*//;
	s/\s*$//;

	if (m/^$/) {
	my %file;
	my @lst;
	for my $r (@{$$nxt[0]}) {
		next if ($r =~ m|Documentation/cs/|);
		if ($r =~ m| in (Documentation/.*\.itely)$|) {
		$file{$1} = 1;
		}
		push @lst, $r;
	}
	my @Keys = sort keys %file;
	if (@Keys) {
		$$nxt[0] = [ @lst ];
		push @arr, $nxt;
		for my $f (@Keys) {
		if (!defined($file_list{$f})) {
			$file_list{$f} = [];
		}
		my $r = [ $$nxt[1], $$nxt[2] ];
		push @{$file_list{$f}}, $r;
		}
	}
	$nxt = [ [], "", "" ];
	next;
	}

	if (m/^\#/) {
	push @{$$nxt[0]}, $_;
	next;
	}

	if (m/^msgid\s*\"(.*)\"$/) {
	my $str = $1;
	$$nxt[1] = $str;
	next;
	}

	if (m/^msgstr\s*\"(.*)\"$/) {
	my $str = $1;
	$$nxt[2] = $str;
	next;
	}

	if (m/^\"(.*)\"$/) {
	my $str = $1;
	if ($$nxt[2] eq "") {
		$$nxt[1] .= $str;
	} else {
		$$nxt[2] .= $str;
	}
	next;
	}

	warn("unhandled data: <$_>");
}

close(FH);
@arr;
}

sub print_arr(@) {
my @arr = @_;

for my $r (@arr) {
	print join("\n", @{$$r[0]}), "\n";
	print "msgid \"$$r[1]\"\n";
	print "msgstr \"$$r[2]\"\n";
	print "\n";
}
}

sub mk_subst(@) {
my @arr = @_;

#print Dumper(\%file_list);
my @k = sort keys %file_list;
for my $k (@k) {
	my @val = @{$file_list{$k}};
	print "File: $k\n";
	for my $r (@val) {
	print " \@ref{$$r[0]} -> \@ref{$$r[1]}\n";
	}
	print "\n";
}
}

sub main() {
my @arr = read_po();
#print_arr(@arr);
mk_subst();
}

main();___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: LilyPond Slack channel

2017-04-22 Thread Rachael Carlson
The #lilypond channel IRC is a public space.  I've used it for
communicating with a GSoC student in the past.


Here is a nice little article on the subject:
https://drewdevault.com/2015/11/01/Please-stop-using-slack.html. It's a
little old.

Given that LilyPond is a Gnu project it certainly makes more sense to me to
use IRC --- the whole respecting your freedom thing.

Rachael Carlson
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: LilyPond Slack channel

2017-04-22 Thread David Kastrup
Jeffery Shivers  writes:

> Hi everyone,
>
> I thought it might be useful to create a Slack channel for LilyPond,
> particularly with the advent of another Google Summer of Code term.
>
> Most GSoC orgs encourage some sort of IRC or other chat protocol for
> students / mentors / admins to interact, but of course the downside is
> that these aren't usually public spaces.

The #lilypond channel IRC is a public space.  I've used it for
communicating with a GSoC student in the past.

Anything wrong with that that a proprietary non-standard tool likely to
go away in few years at most would fix?

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel