]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scripts/convert-ly.py (conv): add rule for breakAlignOrder.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 21 Mar 2004 13:24:26 +0000 (13:24 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 21 Mar 2004 13:24:26 +0000 (13:24 +0000)
* scm/define-grobs.scm (all-grob-descriptions): add  property break-align-orders

* lily/global-context.cc (get_default_interpreter): new
function. Override from base class, so no new Score contexts are
created.

* ly/engraver-init.ly (breakAlignOrder): put staff-bar behind key-signature.

* lily/paper-outputter.cc (output_line): don't add Stencil::origin.

16 files changed:
ChangeLog
input/regression/ambitus.ly
input/regression/prefatory-spacing-matter.ly
input/regression/staff-halfway.ly [new file with mode: 0644]
lily/break-align-engraver.cc
lily/break-align-interface.cc
lily/global-context.cc
lily/include/break-align-interface.hh
lily/include/context.hh
lily/include/global-context.hh
lily/paper-outputter.cc
ly/engraver-init.ly
scm/define-context-properties.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scripts/convert-ly.py

index bf1d21424cd66ae6b0e64bbd61f028ece95dd68f..5bb38b0ef30e9f8a04200ab044237cfd9f088530 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2004-03-21  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * scripts/convert-ly.py (conv): add rule for breakAlignOrder.
+
+       * scm/define-grobs.scm (all-grob-descriptions): add  property break-align-orders
+
+       * lily/global-context.cc (get_default_interpreter): new
+       function. Override from base class, so no new Score contexts are
+       created.
+
+       * lily/include/stencil.hh (class Stencil): document origin field.
+
        * lily/staff-symbol.cc (print): span staff-symbol on column
        extents for non-broken columns. 
 
index eb653a386e87159d299a133f07103158fc31e8e5..9a1bb058f8a6b4c425454beb43de68b270015c65 100644 (file)
@@ -25,7 +25,7 @@ paper block:
 @example
 \context @{
   \ScoreContext
-  breakAlignOrder = #'(
+\override BreakAlignment #'break-align-orders = #(make-vector 3 '(
     instrument-name
     left-edge
     span-bar
@@ -36,7 +36,7 @@ paper block:
     staff-bar
     time-signature
     custos
-  )
+  ))
 @}
 @end example
 
@@ -52,7 +52,7 @@ paper block:
 
 
  %}
-\version "2.1.30"
+\version "2.1.33"
 
 upper = \notes \relative c {
        \clef "treble"
@@ -78,7 +78,7 @@ lower = \notes \relative c {
        \paper {
               \context {
                        \ScoreContext
-                       breakAlignOrder = #'(
+\override BreakAlignment #'break-align-orders = #(make-vector 3 '(
                                instrument-name
                                left-edge
                                ambitus
@@ -89,7 +89,7 @@ lower = \notes \relative c {
                                staff-bar
                                time-signature
                                custos
-                       )
+                       ))
                }
                \context {
                        \VoiceContext
index 7cfb98e0f36a9735a9bef73d7d652400c790fcc6..edd6c7d6a27ee596871b25f6f058a9572a244513 100644 (file)
@@ -2,9 +2,11 @@
 \version "2.1.30"
 \header {
 
-    texidoc = "Distances between prefatory items (e.g. clef, bar, etc.)
-   are determined by engraving standards.  These distances
-   depend on which items are combined."
+    texidoc = "Distances between prefatory items (e.g. clef, bar,
+etc.)  are determined by engraving standards.  These distances depend
+on which items are combined.  Mid-line, the order for clef and
+bar-line is different from the start of line.
+"
 
 }
 
@@ -15,6 +17,8 @@
        cis4 cis4 cis4 cis4 \clef bass  cis,1
        \clef treble
        \bar ":|"
+       \key g \minor
+       c1
 }
 \paper  { raggedright = ##t}
 }
diff --git a/input/regression/staff-halfway.ly b/input/regression/staff-halfway.ly
new file mode 100644 (file)
index 0000000..87f3eb2
--- /dev/null
@@ -0,0 +1,11 @@
+
+\header { texidoc = " Staves starting and ending halfway include clefs
+    and bar lines.  " }
+
+\score {
+    \new StaffGroup \notes \relative c''  <<
+       \new Staff { c4  c c c \bar "||" c c c c }
+       { \skip 4 \new Staff { c c c } }
+    >>
+       \paper {}              
+        }
index 45f8a85acde47c5e5c22bc262e1c2f59eb014684..ef66a137bb7df0893785f3623b35bb408712185f 100644 (file)
@@ -48,24 +48,11 @@ Break_align_engraver::finalize ()
 void
 Break_align_engraver::stop_translation_timestep ()
 {
-  SCM order = get_property ("breakAlignOrder");
-  for (; gh_pair_p (order); order = ly_cdr (order))
-    {
-      SCM p = scm_assoc (ly_car (order), column_alist_);
-      if (gh_pair_p (p))
-       {
-         add_column (ly_cdr (p));
-         column_alist_ = scm_assoc_remove_x (column_alist_, ly_car (order));
-       }
-    }
-
   for (SCM p = column_alist_; gh_pair_p (p); p = ly_cdr (p))
     {
       SCM pair = ly_car (p);
       add_column (ly_cdr (pair));
     }
-
-  
   column_alist_ = SCM_EOL;
 
   if (align_)
@@ -153,5 +140,5 @@ ENTER_DESCRIPTION (Break_align_engraver,
 /* creats*/       "BreakAlignment BreakAlignGroup LeftEdge",
 /* accepts */     "",
 /* acks  */       "break-aligned-interface"
-,/* reads */       "breakAlignOrder",
+,/* reads */       "",
 /* write */       "");
index b828248d23cdfb8c81423b315c0672d5635cea09..aadb89a9987fb977833f67032b98d3389c63daf2 100644 (file)
@@ -62,6 +62,52 @@ Break_align_interface::self_align_callback (SCM element_smob, SCM axis)
   return Self_alignment_interface::aligned_on_self (element_smob, axis);  
 }
 
+
+void
+Break_align_interface::order_elements (Grob *grob)
+{
+  Item *me  = dynamic_cast<Item*> (grob);
+  SCM elts = me->get_property ("elements");
+  SCM order_vec = me->get_property ("break-align-orders");
+  if (!gh_vector_p (order_vec)
+      || gh_vector_length (order_vec) < 3)
+    return ;
+
+  SCM order = scm_vector_ref (order_vec,
+                             gh_int2scm (me->break_status_dir() + 1));
+
+  /*
+    Copy in order specified in BREAK-ALIGN-ORDER. We use
+    Pointer_group_interface__extract_grobs (which reverses the list)
+    down the line, so it's ok to prepend onto newlist.
+   */
+  SCM new_list = SCM_EOL;
+  for (; gh_pair_p (order); order = ly_cdr (order))
+    {
+      SCM sym = gh_car (order);
+
+      SCM *tail = &elts;
+      for (; gh_pair_p (*tail); tail = SCM_CDRLOC(*tail))
+       {
+         Grob * g = unsmob_grob (gh_car (*tail));
+         if (sym == g->get_property ("break-align-symbol"))
+           {
+             SCM new_pair = *tail;
+             *tail = gh_cdr (*tail);
+             if (gh_pair_p (*tail))
+               tail = SCM_CDRLOC(*tail);
+
+             gh_set_cdr_x (new_pair, new_list);
+             new_list = new_pair;
+             break;
+           }
+       }
+    }
+
+  new_list = scm_reverse_x (elts, new_list);
+  me->set_property ("elements", new_list);
+}
+
 void
 Break_align_interface::add_element (Grob*me, Grob *toadd)
 {
@@ -69,9 +115,12 @@ Break_align_interface::add_element (Grob*me, Grob *toadd)
 }
 
 void
-Break_align_interface::do_alignment (Grob *me)
+Break_align_interface::do_alignment (Grob *grob)
 {
-  Item * item = dynamic_cast<Item*> (me);
+  Item * me = dynamic_cast<Item*> (grob);
+
+  order_elements (me);
+  
   Link_array<Grob> elems
     = Pointer_group_interface__extract_grobs (me, (Grob*)0,
                                                 "elements");
@@ -214,7 +263,7 @@ Break_align_interface::do_alignment (Grob *me)
     }
 
 
-  if (item->break_status_dir () == LEFT)
+  if (me->break_status_dir () == LEFT)
     {
       alignment_off = - total_extent[RIGHT] - extra_right_space;
     }
@@ -257,7 +306,7 @@ ADD_INTERFACE (Break_aligned_interface, "break-aligned-interface",
 
 ADD_INTERFACE (Break_align_interface, "break-alignment-interface",
               "The object that performs break aligment. See @ref{break-aligned-interface}.",
-              "positioning-done");
+              "positioning-done break-align-orders");
 
 
 
index 53d60a549d90766aca4791a147cee7c4d94a17df..7cd21b0246e5c4d1d0cb1e16911f361402e72871 100644 (file)
@@ -188,3 +188,12 @@ Global_context::previous_moment () const
 {
   return prev_mom_;
 }
+
+Context *
+Global_context::get_default_interpreter ()
+{
+  if (get_score_context ())
+    return get_score_context ()->get_default_interpreter ();
+  else
+    return Context::get_default_interpreter ();
+}
index 7eb1e213525a872082d076a06144b56f4fb1be86..123fca1315115612021f51fb855042ba4f8d5909 100644 (file)
@@ -17,7 +17,7 @@ class Break_align_interface
 public:
   static void do_alignment (Grob*);
   static void new_do_alignment (Grob*);  
-  
+  static void order_elements (Grob *me);
   static bool has_interface (Grob*);
   static void add_element (Grob*me, Grob*add);
   DECLARE_SCHEME_CALLBACK (alignment_callback, (SCM element, SCM axis));
index b9d08f196984bb07fc0f6cee94468125bf089f9f..8a651e2a7f49ffd94e24077c6d1273ebef05aa29 100644 (file)
@@ -60,7 +60,7 @@ public:
                                            String id, SCM ops);
   Link_array<Context> path_to_acceptable_context (SCM alias,
                                                  Music_output_def*) const;
-  Context *get_default_interpreter ();
+  virtual Context *get_default_interpreter ();
   String id_string_;
 
   SCM implementation_;
index f48f94313805301c779c6d7338a17769d8543e26..c3f1834f02af9532da6a3a5d2fe3022fe502b4f4 100644 (file)
@@ -36,6 +36,8 @@ public:
   virtual void finish ();
   virtual Music_output_def* get_output_def () const; 
   virtual Moment now_mom () const;
+  virtual Context *get_default_interpreter ();
+
 
   Moment previous_moment () const;
 protected:
index f3ff1e18986a51052839de07fb87bed1ac468397..4882386cfcd5ef785d41eced4abc49012646e48e 100644 (file)
@@ -131,10 +131,8 @@ Paper_outputter::output_metadata (Paper_def *paper, SCM scopes)
                 fields);
   output_scheme (scm_list_n (ly_symbol2scm ("output-scopes"),
                             paper->self_scm (),
-                            scm_list_n (ly_symbol2scm ("quote"),
-                                        scopes, SCM_UNDEFINED),
-                            scm_list_n (ly_symbol2scm ("quote"),
-                                        fields, SCM_UNDEFINED),
+                            ly_quote_scm (scopes),
+                            ly_quote_scm (fields),
                             scm_makfrom0str (basename_.to_str0 ()), 
                             SCM_UNDEFINED));
 }
index a680a7bc9a0b83e04b23368086d69aae78c4df1c..faee7c5eb08c38137cbd2a35d7901815f8bfaf91 100644 (file)
@@ -503,17 +503,7 @@ AncientRemoveEmptyStaffContext = \context {
     is the proper order.
     
     %}
-    breakAlignOrder = #'(
-    instrument-name
-    left-edge
-    ambitus
-    breathing-sign
-    clef
-    key-signature
-    staff-bar
-    time-signature
-    custos
-    )
+    
     barCheckSynchronize = ##f
     
     %% chord names:
index 736e5bd296b289680c26ba9c8c2e8f15a102bd8c..3509616f82eca6d929d1713a5ecfae94e755712a 100644 (file)
@@ -107,21 +107,6 @@ list of @code{BassFigureEvent}s, a context, and the grob to format.")
                   "List of beatgroups. Eg. in 5/8 time @code{'(2 3)}.")
 
 
-     (breakAlignOrder ,list? "Defines the order in which
-prefatory matter (clefs, key signatures) appears, eg. this puts the
-key signatures after the bar lines:
-
-@example
-       \\property Score.breakAlignOrder = #'(
-         span-bar
-         breathing-sign
-         clef
-         staff-bar
-         key
-         time-signature
-       )
-@end example
-")
 
      (middleCPosition ,number? "Place of the middle C, measured in half
 staffspaces.  Usually determined by looking at @code{clefPosition} and
index 3461bf407f5ebbc922cb9be9abf6a28f69b5d369..aafaa937bbfa333e3389a3190952c00a24e3c86d 100644 (file)
@@ -110,6 +110,21 @@ potential line breaks.")
      (bracket-thick ,number? "width of a system start bracket.")
      (break-align-symbol ,symbol? "This key is used for aligning and
 spacing breakable items.")
+     (break-align-orders ,vector? " Defines the order in which
+prefatory matter (clefs, key signatures) appears. The format is a
+vector of length 3. Each element is an order for (end-of-line, middle
+of line, and start-of-line). The order is a list of  symbols.
+Clefs are put after key signatures by setting 
+
+@example
+       \\property Score.breakAlignOrder = #(make-vector  3
+         '(span-bar
+         breathing-sign
+         staff-bar
+         key
+         clef
+         time-signature))
+@end example")
      (break-glyph-function ,procedure? "This function determines the
 appearance of a barline at the line break.  It takes a glyph and
 break-direction and returns the glyph at a line break.")
index 1fcac561456f03b3e8548e0b16b3baf04e41b544..5b9f0291672be6d46c3a556da786cd8d4baade8d 100644 (file)
      . (
        (breakable . #t)
        (stacking-dir . 1)
+       (break-align-orders . #((instrument-name left-edge ambitus breathing-sign
+                                                clef key-signature staff-bar
+                                                time-signature custos)
+                               (instrument-name left-edge ambitus breathing-sign
+                                                clef  staff-bar key-signature
+                                                staff
+                                                time-signature custos)
+                               (instrument-name left-edge ambitus breathing-sign
+                                                clef key-signature staff-bar
+                                                time-signature custos)
+
+                               ))
        (axes . (0))
        (X-extent-callback . ,Axis_group_interface::group_extent_callback)
        (meta . ((interfaces . (break-alignment-interface item-interface axis-group-interface)))))
index fbf8fadf7183f8f6914d562ad01154f7b229170a..df5e455b2796f84b20ce37148342e6d4d9a7f378 100644 (file)
@@ -2013,6 +2013,7 @@ ly:translator-find -> ly:context-find
 ly:get-stencil-extent -> ly:stencil-extent
 '''))
 
+
 def conv (str):
        str = re.sub (r'\\alias\s*"?Timing"?', '', str)
        return str
@@ -2020,6 +2021,16 @@ def conv (str):
 conversions.append (((2,1,31), conv,
                     '''remove \\alias Timing'''))
 
+def conv (str):
+       str = re.sub (r"(\set)?\s+(?P<context>(Score\.)?)breakAlignOrder\s*=\s*#'(?P<list>[^\)]+)",
+                     r"\n\\override \g<context>BreakAlignment #'break-align-orders = "
+                     + "#(make-vector 3 '\g<list>)", str)
+                     
+       return str
+
+conversions.append (((2,1,33), conv,
+                    '''breakAlignOrder -> break-align-orders.'''))
+
 ################################
 #      END OF CONVERSIONS      
 ################################