From 6b138c7bd77c082851480c7bf883e9443558f754 Mon Sep 17 00:00:00 2001
From: jan <jan>
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  <janneke@gnu.org>
+
+	* input/test/script-priority.ly: New file.
+
 2002-06-20  Han-Wen  <hanwen@cs.uu.nl>
 
 	* lily/system.cc (output_lines): kill grobs that are only for spacing.
 
 2002-06-20  Jan Nieuwenhuizen  <janneke@gnu.org>
 
+	* 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 <hanwen@cs.uu.nl>
+*/
+
 #include <stdlib.h>
 #include <stdio.h>
 
@@ -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.5