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
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs