From 02861542ddbae022658890bdd44720e4a00cce3b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 15 Sep 2003 19:48:53 +0000 Subject: [PATCH] * input/regression/clef-oct.ly: new file. * scm/clef.scm (make-clef-set): use regexps, support arbitrary transposition. --- ChangeLog | 5 +++++ Documentation/user/refman.itely | 3 ++- input/regression/clef-oct.ly | 30 ++++++++++++++++++++++++++++++ input/regression/clefs.ly | 3 --- lily/clef-engraver.cc | 10 ++++++++-- scm/clef.scm | 26 +++++++++++++------------- scm/define-grobs.scm | 1 - 7 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 input/regression/clef-oct.ly diff --git a/ChangeLog b/ChangeLog index 7e84582c17..d33c37e997 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2003-09-15 Han-Wen Nienhuys + * input/regression/clef-oct.ly: new file. + + * scm/clef.scm (make-clef-set): use regexps, support arbitrary + transposition. + * input/template/*.ly: remove old relative. * ly/english.ly: add X names for double sharp. diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 853dda01c1..4678dfe7f5 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -946,7 +946,8 @@ G clef on 2nd line @end table By adding @code{_8} or @code{^8} to the clef name, the clef is -transposed one octave down or up, respectively. Argument @var{clefname} +transposed one octave down or up, respectively, and @code{_15} and +@code{^15} transposes by two octaves. The argument @var{clefname} must be enclosed in quotes when it contains underscores or digits. For example, diff --git a/input/regression/clef-oct.ly b/input/regression/clef-oct.ly new file mode 100644 index 0000000000..099726fad7 --- /dev/null +++ b/input/regression/clef-oct.ly @@ -0,0 +1,30 @@ + +\version "1.9.5" \header { + + texidoc = "Octavation signs may be added to clefs. These +octavation signs may be placed below or above (meaning an octave +higher or lower), and can take any value, including 15 for two octaves." + +} + +\score { \notes + + \relative c'' { + + \clef "G_8" + c4 + \clef "G_15" + c4 + \clef "G_7" + c4 + \clef "G_6" + c4 + \clef "G^8" + c4 + \clef "G^15" + c4 + \clef "G^9" + c4 +} + \paper { raggedright = ##t } + } diff --git a/input/regression/clefs.ly b/input/regression/clefs.ly index 754aad477c..a04f59e2d2 100644 --- a/input/regression/clefs.ly +++ b/input/regression/clefs.ly @@ -23,9 +23,6 @@ way, so this is fragile as well. \clef "tenor"c'1^"{tenor}" \bar "||" \clef "baritone"c'1^"{baritone}" \bar "||" \clef "varbaritone"c'1^"{varbaritone}" \bar "||" - \clef "G_8"c'1^"{sub 8?}" c'1 \bar "||" - \clef "F_8"c'1^"{sub 8?}" c'1 \bar "||" - \clef "G^8"c'1^"{sup 8?}" c'1 \bar "||" \clef "bass"c'1^"{bass}" \bar "||" \clef "subbass"c'1^"{subbass}" \bar "||" \property Staff.Clef \override #'transparent = ##t diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 9125084f2f..44b8be7cba 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -101,12 +101,18 @@ Clef_engraver::create_clef () { Item * g = new Item (get_property ("OctavateEight")); + int abs_oct = gh_scm2int (oct) ; + int dir = sign (abs_oct); + abs_oct = abs (abs_oct) + 1; + + g->set_grob_property ("text", + scm_number_to_string (gh_int2scm (abs_oct), + SCM_MAKINUM (10))); Side_position_interface::add_support (g,clef_); g->set_parent (clef_, Y_AXIS); g->set_parent (clef_, X_AXIS); - - g->set_grob_property ("direction", scm_int2num (sign (gh_scm2int (oct)))); + g->set_grob_property ("direction", scm_int2num (dir)); octavate_ = g; announce_grob(octavate_, SCM_EOL); } diff --git a/scm/clef.scm b/scm/clef.scm index a9c7ef79b3..d58fd23708 100644 --- a/scm/clef.scm +++ b/scm/clef.scm @@ -88,7 +88,7 @@ ) ) -(define-public (make-clef-set cl) +(define-public (make-clef-set clef-name) "Generate the clef setting commands for a clef with name CL." (define (make-prop-set props) (let* @@ -103,20 +103,20 @@ (let ((e '()) (c0 0) (oct 0) - (l (string-length cl)) - ) + (match (string-match "^(.*)([_^])([0-9]+)$" clef-name))) - ;; ugh. cleanme - (if (equal? "8" (substring cl (- l 1) l)) + (if match (begin - (if (equal? "^" (substring cl (- l 2) (- l 1))) - (set! oct -7) - (set! oct 7)) - - (set! cl (substring cl 0 (- l 2))))) - + (set! clef-name (match:substring match 1)) + (set! oct + (* + (if (equal? (match:substring match 2) "^") + -1 1) + (- (string->number (match:substring match 3)) 1)) + ))) + - (set! e (assoc cl supported-clefs)) + (set! e (assoc clef-name supported-clefs)) (if (pair? e) (let* @@ -144,7 +144,7 @@ (context-spec-music seq 'Staff)) (begin (ly:warn (format "Unknown clef type `~a' -See scm/lily.scm for supported clefs" cl)) +See scm/lily.scm for supported clefs" clef-name)) (make-music-by-name 'Music) ) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 12887a80bd..b39448d9b3 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -650,7 +650,6 @@ (OctavateEight . ( (self-alignment-X . 0) - (text . "8") (break-visibility . ,begin-of-line-visible) (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent ,Self_alignment_interface::aligned_on_self)) (Y-offset-callbacks . (,Side_position_interface::aligned_side)) -- 2.39.2