From: Han-Wen Nienhuys Date: Sun, 21 Mar 2004 13:24:26 +0000 (+0000) Subject: * scripts/convert-ly.py (conv): add rule for breakAlignOrder. X-Git-Tag: release/2.1.33~6 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=604261d8a143f04ee130e679fe1b649758250bda;p=lilypond.git * 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. * ly/engraver-init.ly (breakAlignOrder): put staff-bar behind key-signature. * lily/paper-outputter.cc (output_line): don't add Stencil::origin. --- diff --git a/ChangeLog b/ChangeLog index bf1d21424c..5bb38b0ef3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2004-03-21 Han-Wen Nienhuys + * 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. diff --git a/input/regression/ambitus.ly b/input/regression/ambitus.ly index eb653a386e..9a1bb058f8 100644 --- a/input/regression/ambitus.ly +++ b/input/regression/ambitus.ly @@ -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 diff --git a/input/regression/prefatory-spacing-matter.ly b/input/regression/prefatory-spacing-matter.ly index 7cfb98e0f3..edd6c7d6a2 100644 --- a/input/regression/prefatory-spacing-matter.ly +++ b/input/regression/prefatory-spacing-matter.ly @@ -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 index 0000000000..87f3eb264d --- /dev/null +++ b/input/regression/staff-halfway.ly @@ -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 {} + } diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index 45f8a85acd..ef66a137bb 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -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 */ ""); diff --git a/lily/break-align-interface.cc b/lily/break-align-interface.cc index b828248d23..aadb89a998 100644 --- a/lily/break-align-interface.cc +++ b/lily/break-align-interface.cc @@ -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 (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 (me); + Item * me = dynamic_cast (grob); + + order_elements (me); + Link_array 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"); diff --git a/lily/global-context.cc b/lily/global-context.cc index 53d60a549d..7cd21b0246 100644 --- a/lily/global-context.cc +++ b/lily/global-context.cc @@ -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 (); +} diff --git a/lily/include/break-align-interface.hh b/lily/include/break-align-interface.hh index 7eb1e21352..123fca1315 100644 --- a/lily/include/break-align-interface.hh +++ b/lily/include/break-align-interface.hh @@ -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)); diff --git a/lily/include/context.hh b/lily/include/context.hh index b9d08f1969..8a651e2a7f 100644 --- a/lily/include/context.hh +++ b/lily/include/context.hh @@ -60,7 +60,7 @@ public: String id, SCM ops); Link_array path_to_acceptable_context (SCM alias, Music_output_def*) const; - Context *get_default_interpreter (); + virtual Context *get_default_interpreter (); String id_string_; SCM implementation_; diff --git a/lily/include/global-context.hh b/lily/include/global-context.hh index f48f943138..c3f1834f02 100644 --- a/lily/include/global-context.hh +++ b/lily/include/global-context.hh @@ -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: diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index f3ff1e1898..4882386cfc 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -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)); } diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index a680a7bc9a..faee7c5eb0 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -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: diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 736e5bd296..3509616f82 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -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 diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 3461bf407f..aafaa937bb 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -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.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 1fcac56145..5b9f029167 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -189,6 +189,18 @@ . ( (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))))) diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index fbf8fadf71..df5e455b27 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -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(Score\.)?)breakAlignOrder\s*=\s*#'(?P[^\)]+)", + r"\n\\override \gBreakAlignment #'break-align-orders = " + + "#(make-vector 3 '\g)", str) + + return str + +conversions.append (((2,1,33), conv, + '''breakAlignOrder -> break-align-orders.''')) + ################################ # END OF CONVERSIONS ################################