]> git.donarmstrong.com Git - lilypond.git/commitdiff
New short and long lyric ties.
authorBertrand Bordage <bordage.bertrand@gmail.com>
Mon, 15 Aug 2011 23:17:51 +0000 (01:17 +0200)
committerBertrand Bordage <bordage.bertrand@gmail.com>
Sun, 21 Aug 2011 14:29:38 +0000 (16:29 +0200)
Documentation/de/notation/vocal.itely
Documentation/es/notation/vocal.itely
Documentation/fr/notation/vocal.itely
Documentation/notation/vocal.itely
mf/feta-ties.mf
scm/define-markup-commands.scm

index 71af9dd1eb6c800819eed046ac6af906089be874..4cff6af4e7772a005ed91f57c1c796b1bc8e082c 100644 (file)
@@ -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
 
index f6d352c94e014ae2d1dcb725db109a7412351cd0..892a7e819925c2a383e1058f3c815cf6fbcbb7c1 100644 (file)
@@ -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
 
index 5460e4a5004183a395e642315bf748df8b82b3b2..f1d6745712ba766e13d27f355c9b7f4ce460c9a8 100644 (file)
@@ -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
 
index 1a01f09a1d6c292e48ac21f8f0c7513f2fb0e83c..d2f32683e9af2e337d9d84f7bdead71272b0b590 100644 (file)
@@ -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
 
index 4378d576d85b1b08c7d3629141eff4bf320ca3c0..c218769768092077db883810f356a8cee68b1038 100644 (file)
 
 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");
index d60191decf0465e3615dc09ed66ad9ba1fc7fb94..76d8f2441ad0207ba7e7d85af1c0263e609eeb46 100644 (file)
@@ -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 ""))