From 787484fefa682325d65f46fcf6b2f1cb5241c1c2 Mon Sep 17 00:00:00 2001 From: hanwen Date: Fri, 21 Oct 2005 17:02:51 +0000 Subject: [PATCH] * scm/define-grobs.scm (all-grob-descriptions): remove RemoveEmptyVerticalGroup * lily/hara-kiri-engraver.cc (get_spanner): create VerticalAxisGroup. * python/convertrules.py (conv): add rules. * scm/define-grob-properties.scm (all-user-grob-properties): remove callback property. * scm/define-grob-properties.scm (all-internal-grob-properties): remove ligature-primitive-callback --- ChangeLog | 5 +++++ input/regression/apply-output.ly | 2 +- input/regression/stencil-hacking.ly | 2 +- input/wilhelmus.ly | 3 +-- lily/beam.cc | 21 +++++++++++++++++---- lily/hara-kiri-engraver.cc | 9 ++++++--- lily/hara-kiri-group-spanner.cc | 11 ++++++++--- ly/engraver-init.ly | 15 ++++++++------- python/convertrules.py | 8 ++++++++ scm/define-grob-properties.scm | 3 +++ scm/define-grobs.scm | 16 +++------------- 11 files changed, 61 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index f7962d78f2..87059675f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2005-10-21 Han-Wen Nienhuys + * scm/define-grobs.scm (all-grob-descriptions): remove + RemoveEmptyVerticalGroup + + * lily/hara-kiri-engraver.cc (get_spanner): create VerticalAxisGroup. + * lily/include/lily-guile.hh (GUILE_ELLIPSIS): define to get clean compile on MOSX diff --git a/input/regression/apply-output.ly b/input/regression/apply-output.ly index 59025e1044..1b2791c819 100644 --- a/input/regression/apply-output.ly +++ b/input/regression/apply-output.ly @@ -21,7 +21,7 @@ position. (if (and (memq 'note-head-interface ifs) (memq sp '(-2 -3 -5))) (begin - (ly:grob-set-callback! gr 'stencil Text_interface::print) + (ly:grob-set-property! gr 'stencil Text_interface::print) (ly:grob-set-property! gr 'font-family 'roman) (ly:grob-set-property! gr 'text diff --git a/input/regression/stencil-hacking.ly b/input/regression/stencil-hacking.ly index 9cdf19d0df..525b844499 100644 --- a/input/regression/stencil-hacking.ly +++ b/input/regression/stencil-hacking.ly @@ -57,7 +57,7 @@ GROB. The dimensions of the stencil is not affected. = #(parenthesize-callback Note_head::print) g bes - \revert NoteHead % stencil + \revert NoteHead #'stencil \override Beam #'stencil = diff --git a/input/wilhelmus.ly b/input/wilhelmus.ly index aee4e03844..78b3bb6d76 100644 --- a/input/wilhelmus.ly +++ b/input/wilhelmus.ly @@ -96,8 +96,7 @@ voice = \relative c' { stich = \relative c'' { \override Staff.NoteCollision #'merge-differently-dotted = ##t \set fontSize = #-3 - %% broken? - \override Stem #'beamed-lengths = #(map (lambda (x) (* 0.2 x)) '(3.26)) + \override Stem #'length-fraction = #(magstep -3) \voiceTwo \partial 4 diff --git a/lily/beam.cc b/lily/beam.cc index 6285c72a97..32d6a08be5 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -118,6 +118,8 @@ Beam::calc_direction (SCM smob) For a beam that only has one stem, we try to do some disappearance magic: we revert the flag, and move on to The Eternal Engraving Fields. */ + Direction d = CENTER; + int count = visible_stem_count (me); if (count < 2) { @@ -136,21 +138,32 @@ Beam::calc_direction (SCM smob) me->suicide (); return SCM_UNSPECIFIED; } + else + { + /* + ugh. + + can happen in stem-tremolo case. + TODO: fixme. + */ + d = Stem::get_default_dir (stems[0]); + } } - Direction d = CENTER; if (count >= 1) { d = get_default_dir (me); consider_auto_knees (me); - set_stem_directions (me, d); + } + if (d) + { + set_stem_directions (me, d); connect_beams (me); - set_stem_shorten (me); } - + return scm_from_int (d); } diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 30eda507cd..a704fa91f8 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -13,6 +13,10 @@ #include "translator.icc" +/* + TODO: fold together with axis_group_engraver? + */ + class Hara_kiri_engraver : public Axis_group_engraver { protected: @@ -48,8 +52,7 @@ Hara_kiri_engraver::add_element (Grob *e) Spanner * Hara_kiri_engraver::get_spanner () { - Spanner *sp = make_spanner ("RemoveEmptyVerticalGroup", SCM_EOL); - + Spanner *sp = make_spanner ("VerticalAxisGroup", SCM_EOL); return sp; } @@ -76,7 +79,7 @@ ADD_ACKNOWLEDGER (Hara_kiri_engraver, grob); ADD_TRANSLATOR (Hara_kiri_engraver, /* doc */ "Like Axis_group_engraver, but make a hara-kiri spanner, and add " "interesting items (ie. note heads, lyric syllables and normal rests) ", - /* create */ "RemoveEmptyVerticalGroup", + /* create */ "VerticalAxisGroup", /* accept */ "", /* read */ "keepAliveInterfaces", /* write */ ""); diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index 8d7eb003e5..1fc7edc6dd 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -29,6 +29,8 @@ void Hara_kiri_group_spanner::consider_suicide (Grob *me) { Spanner *sp = dynamic_cast (me); + if (!to_boolean (me->get_property ("remove-empty"))) + return ; extract_grob_set (me, "items-worth-living", worth); if (worth.size ()) @@ -58,9 +60,9 @@ Hara_kiri_group_spanner::consider_suicide (Grob *me) before asking for offsets. */ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_callback, 2); SCM -Hara_kiri_group_spanner::force_hara_kiri_callback (SCM element_smob, SCM axis) +Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob, SCM axis) { - Grob *me = unsmob_grob (element_smob); + Grob *me = unsmob_grob (smob); (void) axis; assert (scm_to_int (axis) == Y_AXIS); @@ -100,5 +102,8 @@ ADD_INTERFACE (Hara_kiri_group_spanner, "hara-kiri-group-interface", /* properties */ "items-worth-living " - "remove-first"); + "remove-empty " + "remove-first " + ); + diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 44bdc1ee51..5550b278ff 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,4 +1,4 @@ -\version "2.7.6" +\version "2.7.14" \context { \name Global @@ -39,7 +39,7 @@ \consists "String_number_engraver" \consists "Axis_group_engraver" - minimumVerticalExtent = #'(-4 . 4) + \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) extraVerticalExtent = ##f verticalExtent = ##f localKeySignature = #'() @@ -116,7 +116,7 @@ contained staves are not connected vertically." \context{ \type "Engraver_group" - minimumVerticalExtent = ##f + \override VerticalAxisGroup #'minimum-Y-extent = ##f extraVerticalExtent = ##f verticalExtent = ##f localKeySignature = #'() @@ -330,7 +330,7 @@ connected vertically. " \context{ \type "Engraver_group" - minimumVerticalExtent = #'(-1.2 . 2.4) + \override VerticalAxisGroup #'minimum-Y-extent = #'(-1.2 . 2.4) extraVerticalExtent = ##f verticalExtent = ##f @@ -348,6 +348,7 @@ printing of a single line of lyrics. " \consists "Font_size_engraver" \consists "Hara_kiri_engraver" \override RemoveEmptyVerticalGroup #'remove-first = ##t + \override RemoveEmptyVerticalGroup #'remove-empty = ##t \override SeparationItem #'padding = #0.2 } @@ -356,7 +357,7 @@ printing of a single line of lyrics. " \name NoteNames \consists "Axis_group_engraver" - minimumVerticalExtent = ##f + \override VerticalAxisGroup #'minimum-Y-extent = ##f extraVerticalExtent = ##f verticalExtent = ##f @@ -383,7 +384,7 @@ printing of a single line of lyrics. " \consists "Hara_kiri_engraver" voltaOnThisStaff = ##f - minimumVerticalExtent = #'(0 . 2.5) + \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2.5) extraVerticalExtent = ##f \override SeparatingGroupSpanner #'padding = #0.8 \override RemoveEmptyVerticalGroup #'remove-first = ##t @@ -585,7 +586,7 @@ AncientRemoveEmptyStaffContext = \context { \consists "Separating_line_group_engraver" \consists "Hara_kiri_engraver" \override RemoveEmptyVerticalGroup #'remove-first = ##t - minimumVerticalExtent = #'(-0.5 . 2.5) + \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.5 . 2.5) } \context { diff --git a/python/convertrules.py b/python/convertrules.py index 9ab036371e..4d5fdf06e5 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -2624,6 +2624,14 @@ def conv (str): str = re.sub (r"\\revert ([A-Z.a-z]+) #'callbacks % ([a-zA-Z]+)", r"\\revert \1 #'\2", str) str = re.sub (r"([XY]-extent)-callback", r'\1', str) + str = re.sub (r"RemoveEmptyVerticalGroup", "VerticalAxisGroup", str) + str = re.sub (r"\\set ([a-zA-Z]+\.)?minimumVerticalExtent", + r"\\override \1VerticalAxisGroup #'minimum-Y-extent", + str) + str = re.sub (r"minimumVerticalExtent", + r"\\override VerticalAxisGroup #'minimum-Y-extent", + str) + return str conversions.append (((2, 7, 14), conv, diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 7e9519b275..aa88de25b1 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -337,6 +337,9 @@ as a real penalty.") staff-space unit of the current staff.") (ratio ,number? "Parameter for slur shape. The higher this number, the quicker the slur attains it @code{height-limit}.") + + (remove-empty ,boolean? "If set, remove group if it contains no +@code{interesting-items}") (remove-first ,boolean? "Remove the first staff of a orchestral score?") (right-padding ,ly:dimension? "Space to insert between note and accidentals.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 4dedcc156e..9284ff078a 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1262,18 +1262,6 @@ mark-interface self-alignment-interface)))))) - (RemoveEmptyVerticalGroup - . ( - (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback)) - - (Y-extent . ,Hara_kiri_group_spanner::y_extent) - - (axes . (1)) - (meta . ((class . Spanner) - (interfaces . (axis-group-interface - vertically-spaceable-interface - hara-kiri-group-interface - spanner-interface)))))) (RepeatSlash . ( @@ -1850,7 +1838,9 @@ (VerticalAxisGroup . ( (axes . (1)) - (Y-extent . ,Axis_group_interface::height) + (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback)) + + (Y-extent . ,Hara_kiri_group_spanner::y_extent) (X-extent . ,Axis_group_interface::width) (meta . ((class . Spanner) (interfaces . (axis-group-interface -- 2.39.5