CVSROOT: /cvsroot/lilypond Module name: lilypond Branch: Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/05/08 23:17:49
Modified files: . : ChangeLog THANKS Documentation/topdocs: NEWS.tely lily : accidental-engraver.cc align-interface.cc context.cc engraver-group-engraver.cc font-size-engraver.cc function-documentation.cc grob-info.cc output-property-engraver.cc score-engraver.cc vertical-align-engraver.cc lily/include : grob-info.hh scm : define-context-properties.scm lily.scm Added files: input/regression: alignment-order.ly Log message: * input/regression/alignment-order.ly: new file. * lily/vertical-align-engraver.cc (acknowledge_grob): read alignAboveContext and alignBelowContext CVSWeb URLs: http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3565&tr2=1.3566&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/THANKS.diff?tr1=1.111&tr2=1.112&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/Documentation/topdocs/NEWS.tely.diff?tr1=1.34&tr2=1.35&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/input/regression/alignment-order.ly?rev=1.1 http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/accidental-engraver.cc.diff?tr1=1.96&tr2=1.97&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/align-interface.cc.diff?tr1=1.74&tr2=1.75&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/context.cc.diff?tr1=1.55&tr2=1.56&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/engraver-group-engraver.cc.diff?tr1=1.55&tr2=1.56&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/font-size-engraver.cc.diff?tr1=1.40&tr2=1.41&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/function-documentation.cc.diff?tr1=1.17&tr2=1.18&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/grob-info.cc.diff?tr1=1.19&tr2=1.20&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/output-property-engraver.cc.diff?tr1=1.38&tr2=1.39&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-engraver.cc.diff?tr1=1.143&tr2=1.144&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/vertical-align-engraver.cc.diff?tr1=1.60&tr2=1.61&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/grob-info.hh.diff?tr1=1.17&tr2=1.18&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-context-properties.scm.diff?tr1=1.42&tr2=1.43&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/lily.scm.diff?tr1=1.331&tr2=1.332&r1=text&r2=text Patches: Index: lilypond/ChangeLog diff -u lilypond/ChangeLog:1.3565 lilypond/ChangeLog:1.3566 --- lilypond/ChangeLog:1.3565 Sun May 8 19:12:23 2005 +++ lilypond/ChangeLog Sun May 8 23:17:49 2005 @@ -1,3 +1,10 @@ +2005-05-09 Han-Wen Nienhuys <[EMAIL PROTECTED]> + + * input/regression/alignment-order.ly: new file. + + * lily/vertical-align-engraver.cc (acknowledge_grob): read + alignAboveContext and alignBelowContext + 2005-05-08 Han-Wen Nienhuys <[EMAIL PROTECTED]> * lily/pfb.cc (LY_DEFINE): add cast. Index: lilypond/Documentation/topdocs/NEWS.tely diff -u lilypond/Documentation/topdocs/NEWS.tely:1.34 lilypond/Documentation/topdocs/NEWS.tely:1.35 --- lilypond/Documentation/topdocs/NEWS.tely:1.34 Thu May 5 23:45:29 2005 +++ lilypond/Documentation/topdocs/NEWS.tely Sun May 8 23:17:49 2005 @@ -34,6 +34,15 @@ @itemize @bullet @item +Newly created staves and lyric lines, can be put in any vertical order, +by setting @code{alignBelowContext} or @code{alignAboveContext} +properties in the newly created context. An example of the use of this +is in @inputfileref{input/regression,alignment-order.ly}. + +This feature has been sponsored by Bertalan Fodor. + + [EMAIL PROTECTED] Staves may be stopped and started halfway a line, e.g. @lilypond[relative=2,fragment,verbatim] Index: lilypond/THANKS diff -u lilypond/THANKS:1.111 lilypond/THANKS:1.112 --- lilypond/THANKS:1.111 Fri May 6 00:03:43 2005 +++ lilypond/THANKS Sun May 8 23:17:49 2005 @@ -36,6 +36,7 @@ SPONSORS +Bertalan Fodor Jonathan Walther Steve Doonan Marcus Macauley Index: lilypond/lily/accidental-engraver.cc diff -u lilypond/lily/accidental-engraver.cc:1.96 lilypond/lily/accidental-engraver.cc:1.97 --- lilypond/lily/accidental-engraver.cc:1.96 Tue Apr 12 22:49:29 2005 +++ lilypond/lily/accidental-engraver.cc Sun May 8 23:17:49 2005 @@ -492,8 +492,8 @@ Accidental_entry entry; entry.head_ = info.grob_; - entry.origin_trans_ = dynamic_cast<Engraver *> (info.origin_trans_); - entry.origin_ = info.origin_trans_->context (); + entry.origin_trans_ = dynamic_cast<Engraver *> (info.origin_translator ()); + entry.origin_ = entry.origin_trans_->context (); entry.melodic_ = note; accidentals_.push (entry); Index: lilypond/lily/align-interface.cc diff -u lilypond/lily/align-interface.cc:1.74 lilypond/lily/align-interface.cc:1.75 --- lilypond/lily/align-interface.cc:1.74 Sat Apr 30 23:43:03 2005 +++ lilypond/lily/align-interface.cc Sun May 8 23:17:49 2005 @@ -225,10 +225,10 @@ } void -Align_interface::add_element (Grob *me, Grob *s, SCM cb) +Align_interface::add_element (Grob *me, Grob *element, SCM call_back) { - s->add_offset_callback (cb, Align_interface::axis (me)); - Axis_group_interface::add_element (me, s); + element->add_offset_callback (call_back, Align_interface::axis (me)); + Axis_group_interface::add_element (me, element); } void Index: lilypond/lily/context.cc diff -u lilypond/lily/context.cc:1.55 lilypond/lily/context.cc:1.56 --- lilypond/lily/context.cc:1.55 Tue May 3 12:13:28 2005 +++ lilypond/lily/context.cc Sun May 8 23:17:49 2005 @@ -221,14 +221,14 @@ { String type = ly_symbol2string (cdef->get_context_name ()); Object_key const *key = get_context_key (type, id); - Context *new_group + Context *new_context = cdef->instantiate (ops, key); - new_group->id_string_ = id; - add_context (new_group); - apply_property_operations (new_group, ops); + new_context->id_string_ = id; + add_context (new_context); + apply_property_operations (new_context, ops); - return new_group; + return new_context; } Object_key const * Index: lilypond/lily/engraver-group-engraver.cc diff -u lilypond/lily/engraver-group-engraver.cc:1.55 lilypond/lily/engraver-group-engraver.cc:1.56 --- lilypond/lily/engraver-group-engraver.cc:1.55 Wed Mar 16 19:19:15 2005 +++ lilypond/lily/engraver-group-engraver.cc Sun May 8 23:17:49 2005 @@ -67,7 +67,7 @@ { Translator *t = unsmob_translator (scm_car (p)); Engraver *eng = dynamic_cast<Engraver *> (t); - if (eng && eng != info.origin_trans_) + if (eng && eng != info.origin_translator ()) eng->acknowledge_grob (info); } } Index: lilypond/lily/font-size-engraver.cc diff -u lilypond/lily/font-size-engraver.cc:1.40 lilypond/lily/font-size-engraver.cc:1.41 --- lilypond/lily/font-size-engraver.cc:1.40 Wed Mar 16 19:19:15 2005 +++ lilypond/lily/font-size-engraver.cc Sun May 8 23:17:49 2005 @@ -30,7 +30,7 @@ /* We only want to process a grob once. */ - if (gi.origin_trans_->context () != context ()) + if (gi.context () != context ()) return; if (scm_is_number (sz) && scm_to_double (sz)) Index: lilypond/lily/function-documentation.cc diff -u lilypond/lily/function-documentation.cc:1.17 lilypond/lily/function-documentation.cc:1.18 --- lilypond/lily/function-documentation.cc:1.17 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/function-documentation.cc Sun May 8 23:17:49 2005 @@ -22,7 +22,7 @@ return; if (!scm_is_vector (doc_hash_table)) - doc_hash_table = scm_make_vector (scm_int2num (59), SCM_EOL); + doc_hash_table = scm_c_make_hash_table (59); String s = String (" - ") + "LilyPond procedure: " + fname + " " + varlist + "\n" + doc; Index: lilypond/lily/grob-info.cc diff -u lilypond/lily/grob-info.cc:1.19 lilypond/lily/grob-info.cc:1.20 --- lilypond/lily/grob-info.cc:1.19 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/grob-info.cc Sun May 8 23:17:49 2005 @@ -7,12 +7,18 @@ */ #include "grob-info.hh" - #include "grob.hh" #include "music.hh" #include "translator-group.hh" #include "context.hh" + +Grob_info::Grob_info (Translator *t, Grob *g) +{ + origin_trans_ = t; + grob_ = g; +} + Grob_info::Grob_info () { grob_ = 0; @@ -41,3 +47,10 @@ return r; } + +Context* +Grob_info::context () const +{ + return origin_trans_->context (); +} + Index: lilypond/lily/include/grob-info.hh diff -u lilypond/lily/include/grob-info.hh:1.17 lilypond/lily/include/grob-info.hh:1.18 --- lilypond/lily/include/grob-info.hh:1.17 Thu Mar 10 14:36:12 2005 +++ lilypond/lily/include/grob-info.hh Sun May 8 23:17:49 2005 @@ -16,16 +16,18 @@ /* Data container for broadcasts. */ -struct Grob_info +class Grob_info { Translator *origin_trans_; friend class Engraver; - Grob *grob_; - public: + Grob *grob_; + Context *context () const; + Translator *origin_translator () const { return origin_trans_; } Music *music_cause (); Link_array<Context> origin_contexts (Translator *) const; + Grob_info (Translator *, Grob *); Grob_info (); }; Index: lilypond/lily/output-property-engraver.cc diff -u lilypond/lily/output-property-engraver.cc:1.38 lilypond/lily/output-property-engraver.cc:1.39 --- lilypond/lily/output-property-engraver.cc:1.38 Tue Mar 8 13:02:05 2005 +++ lilypond/lily/output-property-engraver.cc Sun May 8 23:17:49 2005 @@ -59,12 +59,7 @@ } else { - Context * d = - dynamic_cast<Context *> (inf.origin_trans_); - - if (!d) - d = dynamic_cast<Context *> (inf.origin_trans_->context ()); - + Context * d = inf.context (); SCM proc = o->get_property ("procedure"); scm_call_3 (proc, inf.grob_->self_scm (), Index: lilypond/lily/score-engraver.cc diff -u lilypond/lily/score-engraver.cc:1.143 lilypond/lily/score-engraver.cc:1.144 --- lilypond/lily/score-engraver.cc:1.143 Mon Apr 18 00:36:45 2005 +++ lilypond/lily/score-engraver.cc Sun May 8 23:17:49 2005 @@ -53,16 +53,10 @@ Object_key const *key2 = context ()->get_grob_key ("PaperColumn"); set_columns (new Paper_column (nmp, key1), new Paper_column (pc, key2)); - Grob_info i1; - i1.grob_ = command_column_; - i1.origin_trans_ = this; - + Grob_info i1 (this, command_column_); announce_grob (i1); - Grob_info i2; - i2.grob_ = musical_column_; - i2.origin_trans_ = this; - + Grob_info i2 (this, musical_column_); announce_grob (i2); } } Index: lilypond/lily/vertical-align-engraver.cc diff -u lilypond/lily/vertical-align-engraver.cc:1.60 lilypond/lily/vertical-align-engraver.cc:1.61 --- lilypond/lily/vertical-align-engraver.cc:1.60 Sat May 7 14:49:37 2005 +++ lilypond/lily/vertical-align-engraver.cc Sun May 8 23:17:49 2005 @@ -18,22 +18,50 @@ { Spanner *valign_; bool qualifies (Grob_info) const; - + SCM id_to_group_hashtab_; + public: TRANSLATOR_DECLARATIONS (Vertical_align_engraver); protected: + virtual void derived_mark () const; virtual void acknowledge_grob (Grob_info); virtual void process_music (); virtual void finalize (); + virtual void initialize (); }; + +ADD_TRANSLATOR (Vertical_align_engraver, + "Catch groups (staffs, lyrics lines, etc.) and stack " + "them vertically.", + /* creats*/ "VerticalAlignment", + /* accepts */ "", + /* acks */ "axis-group-interface", + /* reads */ "", + /* write */ ""); + + Vertical_align_engraver::Vertical_align_engraver () { valign_ = 0; + id_to_group_hashtab_ = SCM_EOL; +} + +void +Vertical_align_engraver::derived_mark () const +{ + scm_gc_mark (id_to_group_hashtab_); } void +Vertical_align_engraver::initialize () +{ + id_to_group_hashtab_ = scm_c_make_hash_table (11); +} + + +void Vertical_align_engraver::process_music () { if (!valign_) @@ -67,14 +95,46 @@ { if (qualifies (i)) { - Align_interface::add_element (valign_, i.grob_, get_property ("verticalAlignmentChildCallback")); + String id = i.context ()->id_string (); + + scm_hash_set_x (id_to_group_hashtab_, scm_makfrom0str (id.to_str0 ()), + i.grob_->self_scm ()); + + + SCM before_id = i.context ()->get_property ("alignAboveContext"); + SCM after_id = i.context ()->get_property ("alignBelowContext"); + + SCM before = scm_hash_ref (id_to_group_hashtab_, before_id, SCM_BOOL_F); + SCM after = scm_hash_ref (id_to_group_hashtab_, after_id, SCM_BOOL_F); + + + Align_interface::add_element (valign_, i.grob_, + get_property ("verticalAlignmentChildCallback")); + + if (unsmob_grob (before) || unsmob_grob (after)) + { + SCM elts = valign_->get_property ("elements"); + SCM new_order = scm_cdr (elts); + SCM *current = &new_order; + + for (SCM s = new_order; scm_is_pair (s); s = scm_cdr (s)) + { + if (scm_car (s) == after) + { + *current = scm_cons (i.grob_->self_scm(), s); + break; + } + else if (scm_car (s) == before) + { + scm_set_cdr_x (s, scm_cons (i.grob_->self_scm (), + scm_cdr (s))); + break; + } + + current = SCM_CDRLOC (s); + } + + valign_->set_property ("elements", new_order); + } } } - -ADD_TRANSLATOR (Vertical_align_engraver, - /* descr */ "Catch Vertical axis groups and stack them.", - /* creats*/ "VerticalAlignment", - /* accepts */ "", - /* acks */ "axis-group-interface", - /* reads */ "", - /* write */ ""); Index: lilypond/scm/define-context-properties.scm diff -u lilypond/scm/define-context-properties.scm:1.42 lilypond/scm/define-context-properties.scm:1.43 --- lilypond/scm/define-context-properties.scm:1.42 Thu May 5 23:45:30 2005 +++ lilypond/scm/define-context-properties.scm Sun May 8 23:17:49 2005 @@ -23,6 +23,8 @@ (apply translator-property-description x)) `( (aDueText ,string? "Text to print at a unisono passage.") + (alignBelowContext ,string? "Where to insert newly created context in vertiical alignment.") + (alignAboveContext ,string? "Where to insert newly created context in vertiical alignment.") (alignBassFigureAccidentals ,boolean? "If true, then the accidentals are aligned in bass figure context.") Index: lilypond/scm/lily.scm diff -u lilypond/scm/lily.scm:1.331 lilypond/scm/lily.scm:1.332 --- lilypond/scm/lily.scm:1.331 Tue May 3 11:31:51 2005 +++ lilypond/scm/lily.scm Sun May 8 23:17:49 2005 @@ -36,8 +36,6 @@ (debug-enable 'backtrace) (read-enable 'positions))) - - ;; initialize defaults. (ly:set-option 'command-line-settings '((resolution . 90) _______________________________________________ Lilypond-cvs mailing list Lilypond-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-cvs