From 8bcab38894d0ec3451045356146d875c1d4f08b9 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 20 Jun 2002 22:30:57 +0000 Subject: [PATCH] input/test/script-priority.ly: New file. lily/fingering-engraver.cc (make_script): lily/script-engraver.cc (process_music): lily/text-engraver.cc: (process_acknowledged_grobs): Remove hard coded script-priority. flower/warn.cc: Cleanup. lily/voice-devnull-engraver.cc: Also eat multi-measure rest, a spanner now. --- ChangeLog | 14 ++++++++++++++ flower/warn.cc | 29 +++++++++++++++++++---------- input/test/script-priority.ly | 18 ++++++++++++++++++ lily/fingering-engraver.cc | 13 +++++++++++-- lily/script-engraver.cc | 11 +++++++++-- lily/text-engraver.cc | 15 ++++++++++----- lily/voice-devnull-engraver.cc | 1 + scm/grob-description.scm | 7 +++++-- 8 files changed, 87 insertions(+), 21 deletions(-) create mode 100644 input/test/script-priority.ly diff --git a/ChangeLog b/ChangeLog index 956e9ec900..2c91989327 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,23 @@ +2002-06-21 Jan Nieuwenhuizen + + * input/test/script-priority.ly: New file. + 2002-06-20 Han-Wen * lily/system.cc (output_lines): kill grobs that are only for spacing. 2002-06-20 Jan Nieuwenhuizen + * lily/fingering-engraver.cc (make_script): + * lily/script-engraver.cc (process_music): + * lily/text-engraver.cc: + (process_acknowledged_grobs): Remove hard coded script-priority. + + * flower/warn.cc: Cleanup. + + * lily/voice-devnull-engraver.cc: Also eat multi-measure rest, a + spanner now. + * aclocal.m4: Regenerate. * stepmake/aclocal.m4: Also set GUILE_PATCH_LEVEL. diff --git a/flower/warn.cc b/flower/warn.cc index 4ad8e947d8..aef1f38333 100644 --- a/flower/warn.cc +++ b/flower/warn.cc @@ -1,3 +1,11 @@ +/* + warn.cc -- implement warnings + + source file of the Flower Library + + (c) 1997--2000 Han-Wen Nienhuys +*/ + #include #include @@ -5,33 +13,34 @@ void -error (String s) +message (String s) { - fputs ( _f("error: %s\n", s.ch_C()).ch_C(), stderr); - exit (1); + fputs (s.ch_C (), stderr); } void -non_fatal_error (String s) +warning (String s) { - fputs ( _f("error: %s\n", s.ch_C()).ch_C(), stderr); + message (_f ("warning: %s\n", s.ch_C ())); } void -warning (String m) +non_fatal_error (String s) { - fputs ( _f("warning: %s\n", m.ch_C()).ch_C(), stderr); + message (_f ("error: %s\n", s.ch_C ())); } void -message (String m) +error (String s) { - fprintf (stderr, "%s\n",m.ch_C()); + non_fatal_error (s); + exit (1); } void programming_error (String s) { - fputs ( _f("programming error: %s (Continuing; cross thumbs)\n", s.ch_C()).ch_C(), stderr); + message (_f ("programming error: %s (Continuing; cross thumbs)\n", + s.ch_C ())); } diff --git a/input/test/script-priority.ly b/input/test/script-priority.ly new file mode 100644 index 0000000000..c7cbd8befd --- /dev/null +++ b/input/test/script-priority.ly @@ -0,0 +1,18 @@ +\header { + texidoc = "Relative placements of different script types can be controlled +by overriding script-priority." +} +\paper { linewidth = -1. } +\score{ + \context Staff \notes \relative g''{ + + \property Score.TextScript \override #'script-priority = #-100 + a4^\prall^#'((music (font-relative-size . -2)) "accidentals-1") + + + \property Score.Script \override #'script-priority = #-100 + \property Score.TextScript \revert #'script-priority + + a4^\prall^#'((music (font-relative-size . -2)) "accidentals-1") + } +} diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index 841673358e..e5df1718f5 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -185,8 +185,17 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a, int i) fingering->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, other); fingering->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, other); - fingering->set_grob_property ("script-priority", - gh_int2scm (100 + d* i)); + + // Hmm + int priority = 200; + SCM s = fingering->get_grob_property ("script-priority"); + if (gh_number_p (s)) + priority = gh_scm2int (s); + + /* Make sure they're in order of user input by adding index i. */ + priority += d*i; + + fingering->set_grob_property ("script-priority", gh_int2scm (priority)); if (!ly_dir_p (fingering->get_grob_property ("direction"))) diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 10cbfe9d93..924bde701f 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -83,7 +83,14 @@ Script_engraver::process_music () force_dir = ly_car (art); art = ly_cdr (art); - SCM priority = ly_car (art); + int priority = gh_scm2int (ly_car (art)); + + SCM s = p->get_grob_property ("script-priority"); + if (gh_number_p (s)) + priority = gh_scm2int (s); + + /* Make sure they're in order of user input by adding index i. */ + priority += i * (to_dir (force_dir) ? to_dir (force_dir) : 1); if (ly_dir_p (force_dir) && to_dir (force_dir)) p->set_grob_property ("direction", force_dir); @@ -105,7 +112,7 @@ Script_engraver::process_music () p->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS); - p->set_grob_property ("script-priority", priority); + p->set_grob_property ("script-priority", gh_int2scm (priority)); script_p_arr_.push (p); diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index 308df0ee55..9df187cf54 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -99,11 +99,16 @@ Text_engraver::process_acknowledged_grobs () Axis ax = to_boolean (axisprop) ? X_AXIS : Y_AXIS; Side_position_interface::set_axis (text, ax); - /* - make sure they're in order by adding i to the priority field. - */ - text->set_grob_property ("script-priority", - gh_int2scm (200 + i)); + // Hmm + int priority = 200; + SCM s = text->get_grob_property ("script-priority"); + if (gh_number_p (s)) + priority = gh_scm2int (s); + + /* Make sure they're in order of user input by adding index i. */ + priority += i * (r->get_direction () ? r->get_direction () : 1); + + text->set_grob_property ("script-priority", gh_int2scm (priority)); if (r->get_direction ()) Side_position_interface::set_direction (text, r->get_direction ()); diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc index ef97171b40..daa3e5dfc7 100644 --- a/lily/voice-devnull-engraver.cc +++ b/lily/voice-devnull-engraver.cc @@ -27,6 +27,7 @@ static char const *eat_spanners[] = { "beam", "crescendo", "decrescendo", + "rest", "slur", 0 }; diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 63ed593126..f9a0bd1ce2 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -298,9 +298,10 @@ (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent ,Self_alignment_interface::aligned_on_self)) (padding . 0.6) - ; (direction . -1) + ;; (direction . -1) (self-alignment-X . 0) (self-alignment-Y . 0) + (script-priority . 100) (font-family . number) (font-relative-size . -3) (font-shape . upright) @@ -667,7 +668,8 @@ ;; This value is sensitive: if too large, staccato dots will move a ;; space a away. - (padding . 0.25) + (padding . 0.25) + ;; (script-priority . 0) priorities for scripts, see script.scm (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent)) (before-line-breaking-callback . ,Script_interface::before_line_breaking) (font-family . music) @@ -914,6 +916,7 @@ (no-spacing-rods . #t) (direction . -1) (padding . 0.5) + (script-priority . 200) ;; todo: add X self alignment? (baseline-skip . 2) (font-family . roman) -- 2.39.2