From 60b4f9c7372dbed592f8c3b592d19872fad8adda Mon Sep 17 00:00:00 2001 From: Bertrand Bordage Date: Tue, 16 Aug 2011 01:17:51 +0200 Subject: [PATCH] New short and long lyric ties. --- Documentation/de/notation/vocal.itely | 10 ++-- Documentation/es/notation/vocal.itely | 10 ++-- Documentation/fr/notation/vocal.itely | 10 ++-- Documentation/notation/vocal.itely | 10 ++-- mf/feta-ties.mf | 46 ++++++++++++++---- scm/define-markup-commands.scm | 70 ++++++++++++++++++++------- 6 files changed, 109 insertions(+), 47 deletions(-) diff --git a/Documentation/de/notation/vocal.itely b/Documentation/de/notation/vocal.itely index 71af9dd1eb..4cff6af4e7 100644 --- a/Documentation/de/notation/vocal.itely +++ b/Documentation/de/notation/vocal.itely @@ -629,11 +629,11 @@ gesetzt werden. @lilypond[quote,ragged-right,verbatim] { - \time 3/4 - \relative c' { c2 e4 g2 e4 } - \addlyrics { gran -- de_a -- mi -- go } - \addlyrics { pu -- "ro y ho" -- nes -- to } - \addlyrics { pu -- ro~y~ho -- nes -- to } + \relative c'' { \autoBeamOff + r8 b c fis, fis c' b e, } + \addlyrics { Che_in ques -- ta_è_in quel -- l'al -- tr'on -- da } + \addlyrics { "Che in" ques -- "ta è in" quel -- l'al -- tr'on -- da } + \addlyrics { Che~in ques -- ta~è~in quel -- l'al -- tr'on -- da } } @end lilypond diff --git a/Documentation/es/notation/vocal.itely b/Documentation/es/notation/vocal.itely index f6d352c94e..892a7e8199 100644 --- a/Documentation/es/notation/vocal.itely +++ b/Documentation/es/notation/vocal.itely @@ -644,11 +644,11 @@ texto. @lilypond[quote,ragged-right,verbatim] { - \time 3/4 - \relative c' { c2 e4 g2 e4 } - \addlyrics { gran -- de_a -- mi -- go } - \addlyrics { pu -- "ro y ho" -- nes -- to } - \addlyrics { pu -- ro~y~ho -- nes -- to } + \relative c'' { \autoBeamOff + r8 b c fis, fis c' b e, } + \addlyrics { Che_in ques -- ta_è_in quel -- l'al -- tr'on -- da } + \addlyrics { "Che in" ques -- "ta è in" quel -- l'al -- tr'on -- da } + \addlyrics { Che~in ques -- ta~è~in quel -- l'al -- tr'on -- da } } @end lilypond diff --git a/Documentation/fr/notation/vocal.itely b/Documentation/fr/notation/vocal.itely index 5460e4a500..f1d6745712 100644 --- a/Documentation/fr/notation/vocal.itely +++ b/Documentation/fr/notation/vocal.itely @@ -615,11 +615,11 @@ mettre entre guillemets, soit utiliser le caractère souligné @lilypond[quote,ragged-right,verbatim] { - \time 3/4 - \relative c' { c2 e4 g2 e4 } - \addlyrics { gran -- de_a -- mi -- go } - \addlyrics { pu -- "ro y ho" -- nes -- to } - \addlyrics { pu -- ro~y~ho -- nes -- to } + \relative c'' { \autoBeamOff + r8 b c fis, fis c' b e, } + \addlyrics { Che_in ques -- ta_è_in quel -- l'al -- tr'on -- da } + \addlyrics { "Che in" ques -- "ta è in" quel -- l'al -- tr'on -- da } + \addlyrics { Che~in ques -- ta~è~in quel -- l'al -- tr'on -- da } } @end lilypond diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely index 1a01f09a1d..d2f32683e9 100644 --- a/Documentation/notation/vocal.itely +++ b/Documentation/notation/vocal.itely @@ -613,11 +613,11 @@ the tilde symbol (@code{~}) to get a lyric tie. @lilypond[quote,ragged-right,verbatim] { - \time 3/4 - \relative c' { c2 e4 g2 e4 } - \addlyrics { gran -- de_a -- mi -- go } - \addlyrics { pu -- "ro y ho" -- nes -- to } - \addlyrics { pu -- ro~y~ho -- nes -- to } + \relative c'' { \autoBeamOff + r8 b c fis, fis c' b e, } + \addlyrics { Che_in ques -- ta_è_in quel -- l'al -- tr'on -- da } + \addlyrics { "Che in" ques -- "ta è in" quel -- l'al -- tr'on -- da } + \addlyrics { Che~in ques -- ta~è~in quel -- l'al -- tr'on -- da } } @end lilypond diff --git a/mf/feta-ties.mf b/mf/feta-ties.mf index 4378d576d8..c218769768 100644 --- a/mf/feta-ties.mf +++ b/mf/feta-ties.mf @@ -18,21 +18,37 @@ fet_begingroup ("ties"); -fet_beginchar ("lyric tie", "lyric"); - save padding; +save min_width, max_width, min_height, max_height, thin, thick; - padding := .4 staff_space; +min_width:= .5 staff_space#; +max_width:= 5 staff_space#; +min_height := .2 staff_space#; +max_height := .4 staff_space#; +thin := 1.2 linethickness; +thick := 2 linethickness; + +def draw_lyric_tie (expr width_sharp) = + save padding, angularity, width, height, depth; + + padding# := .4 staff_space#; + angularity := 2.5; + width# := max (min (width_sharp, max_width), min_width); + height# := (max (width# - min_width, 0) / (max_width - min_width)) + [min_height, max_height]; + depth# := padding# + height#; set_char_box (0, 0, - .7 staff_space#, 0); + depth#, 0); - z1 = (-staff_space, -padding); + define_pixels (width, padding); + + z1 = (-width / 2, -padding); z2 = (0, -d); - z3 = (staff_space, -padding); + z3 = (width / 2, -padding); - penpos1 (1.2 linethickness, 50); - penpos2 (2 linethickness, 90); - penpos3 (1.2 linethickness, 130); + penpos1 (thin, angularity * angle (z2 - z1) + 90); + penpos2 (thick, 90); + penpos3 (thin, angularity * angle (z3 - z2) + 90); fill z2l .. simple_serif (z3l, z3r, 90) @@ -41,6 +57,18 @@ fet_beginchar ("lyric tie", "lyric"); .. cycle; penlabels (1, 2, 3); +enddef; + +fet_beginchar ("short lyric tie", "lyric.short"); + draw_lyric_tie (1.25 staff_space#); +fet_endchar; + +fet_beginchar ("medium lyric tie", "lyric.medium"); + draw_lyric_tie (2 staff_space#); +fet_endchar; + +fet_beginchar ("long lyric tie", "lyric.long"); + draw_lyric_tie (3 staff_space#); fet_endchar; fet_endgroup ("ties"); diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index d60191decf..76d8f2441a 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -937,25 +937,59 @@ the use of @code{\\simple} is unnecessary. Like simple-markup, but use tie characters for @q{~} tilde symbols. @lilypond[verbatim,quote] -\\markup { - \\tied-lyric #\"Lasciate~i monti\" -} -@end lilypond" - (if (string-contains str "~") - (let* - ((half-space (/ word-space 2)) - (parts (string-split str #\~)) - (tie-str (markup #:hspace half-space - #:musicglyph "ties.lyric" - #:hspace half-space)) - (joined (list-join parts tie-str)) - (join-stencil (interpret-markup layout props tie-str)) - ) +\\markup \\column { + \\tied-lyric #\"Siam navi~all'onde~algenti Lasciate~in abbandono\" + \\tied-lyric #\"Impetuosi venti I nostri~affetti sono\" + \\tied-lyric #\"Ogni diletto~è scoglio Tutta la vita~è~un mar.\" +} +@end lilypond" + (define (replace-ties tie str) + (if (string-contains str "~") + (let* + ((half-space (/ word-space 2)) + (parts (string-split str #\~)) + (tie-str (markup #:hspace half-space + #:musicglyph tie + #:hspace half-space)) + (joined (list-join parts tie-str))) + (make-concat-markup joined)) + str)) + + (define short-tie-regexp (make-regexp "~[^.]~")) + (define long-tie-regexp (make-regexp "\\w{3,}+~+\\w{3,}")) + (define (match-short str) (regexp-exec short-tie-regexp str)) + (define (match-long str) (regexp-exec long-tie-regexp str)) + + (define (replace-short str mkp) + (let ((match (match-short str))) + (if (not match) + (make-concat-markup (list + mkp + (replace-ties "ties.lyric.medium" str))) + (let ((new-str (match:suffix match)) + (new-mkp (make-concat-markup (list + mkp + (replace-ties "ties.lyric.medium" + (match:prefix match)) + (replace-ties "ties.lyric.short" + (match:substring match)))))) + (replace-short new-str new-mkp))))) + + (define (replace-long str mkp) + (let ((match (match-long str))) + (if (not match) + (replace-short str mkp) + (let ((new-str (match:suffix match)) + (new-mkp (make-concat-markup (list + (replace-short (match:prefix match) + mkp) + (replace-ties "ties.lyric.long" + (match:substring match)))))) + (replace-long new-str new-mkp))))) - (interpret-markup layout - props - (make-concat-markup joined))) - (interpret-markup layout props str))) + (interpret-markup layout + props + (replace-long str (markup)))) (define-public empty-markup (make-simple-markup "")) -- 2.39.2