+2002-02-04 Han-Wen <hanwen@cs.uu.nl>
+
+ * VERSION: 1.5.30 released
+
+ * lily/dynamic-engraver.cc: add doco about DynamicLineSpanner
+
+ * Documentation/user/refman.itely (Dynamics): add a note about
+ DynamicLineSpanner.
+
+ * scm/grob-description.scm: add a 'translator-type? object
+ property, so that \property Foo.Bar =\turnOff doesn't cause
+ type check warning.
+
+ * lily/translator-group.cc (add_fresh_group_translator): make
+ new add-translator functions to make distinction between fresh and
+ used group-translators. Fixes problem with scripts on auto-changing voice
+
+ * lily/timing-engraver.cc: make Timing_engraver instantiatable,
+ add to Score_performer. Fixes bar checks in MIDI
+
+ * lily/tie-engraver.cc (create_grobs): Use pitches to compare note
+ heads. Fixes many quirks with ties.
+
+ * lily/engraver.cc (announce_grob): Use SCM argument. Store cause
+ in the grob property #'cause, instead of using Grob_info.
+
+ * ly/engraver-init.ly (StaffContext): move Dot_column_engraver to
+ staff context, fixing dot alignment on collisions.
+
+ * lily/beam-engraver.cc (try_music): remove can't find beam start
+ warning, so that skipTypesetting won't complain.
+
+2002-02-01 Mats Bengtsson <mats.bengtsson@s3.kth.se>
+
+ * Documentation/user/refman.itely (Paper size): Documentation fix,
+ papersize
+
+ * lily/text-engraver.cc: Bugfix: textNonEmpty works again
+
+ * scm/grob-description.scm: \breathe: Use feta font comma by default
+
+2002-01-23 Mats Bengtsson <mats.bengtsson@s3.kth.se>
+
+ * input/template/piano-dynamics.ly (pedal): Simplified
+
+2002-01-18 Mats Bengtsson <mats.bengtsson@s3.kth.se>
+
+ * ly/engraver-init.ly: avoid warnings on \skip in lyrics
+
+2002-01-10 Mats Bengtsson <matsb@s3.kth.se>
+
+ * lilypond-mode.el (LilyPond-command-query): ignore case.
+
2002-02-01 Han-Wen Nienhuys <hanwen@cs.uu.nl>
* VERSION: 1.5.29 released
@item pagenumber
If set to @code{no}, no page numbers will be printed.
+
+
+
+ @item fontenc
+ The font encoding, should be set identical to the @code{font-encoding}
+ property in the score.
@end table
@unnumberedsubsec Environment variables
@refbugs
- Currently, only tick marks are supported, not comma style breath marks.
+The current layout of the default comma style breath marks
+could be improved and more optional symbols should be added to the
+font.
+
@c . {Tempo}
@cindex diminuendo
Dynamics are grobs of @internalsref{DynamicText} and
-@internalsref{Hairpin}. They are put together on
-@internalsref{DynamicLineSpanner} to align them vertically.
-
+@internalsref{Hairpin}. Vertical positioning of these symbols is handled
+by the @internalsref{DynamicLineSpanner} grob. If you want to adjust
+padding or vertical direction of the dynamics, you must set properties
+for the @internalsref{DynamicLineSpanner} grob. Predefined identifiers
+to set the vertical direction are \dynamicUp and \dynamicDown.
+
+@cindex direction, of dynamics
+@cindex @code{\dynamicDown}
+@cindex @code{\dynamicUp}
@c . {Repeats}
@node Repeats
@c maybe legend here?
-Rests are entered just like notes with the name ``@code{r}'':
+Normal rests are entered just like notes with the name ``@code{r}'':
@quotation
@example
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=29
+PATCH_LEVEL=30
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
--- /dev/null
+%
+% space after barline on 1st staff due to time sig.
+%
+
+\score{
+ \notes\relative c'\context GrandStaff{
+
+c4 d e f |
+g a b c | \break
+
+<{
+d c b a |
+ g f e d}
+ \context Staff=lower{
+% \property Staff.TimeSignature = \turnOff
+
+b' a g f |
+ e d c b |}> \break
+
+c1
+}
+\paper{
+ \translator{
+ \GrandStaffContext
+ \consists "Instrument_name_engraver"
+ }
+}
+}
{
text_p_ = new Item (get_property ("TextScript"));
Side_position_interface::set_axis (text_p_, Y_AXIS);
- announce_grob (text_p_, 0);
+ announce_grob(text_p_, SCM_EOL);
Direction dir = UP;
SCM text = SCM_EOL;
if (gh_number_p (c0))
Staff_symbol_referencer::set_position (key_item_p_, gh_scm2int (c0));
- announce_grob (key_item_p_, 0);
+ announce_grob(key_item_p_, SCM_EOL);
}
}
-/*
- ugh. repeated deep_copy generates lots of garbage.
- */
void
Accidental_engraver::process_music ()
{
+#if 0
SCM smp = get_property ("measurePosition");
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
-
+#endif
+
SCM sig = get_property ("keySignature");
/* Detect key sig changes. */
{
Side_position_interface::add_support (arpeggio_, supports_[i]);
}
- announce_grob (arpeggio_, arpeggio_req_);
+ announce_grob(arpeggio_, arpeggio_req_->self_scm());
}
}
Beam::add_stem (beam_p, (*stem_l_arr_p_)[i]);
}
- announce_grob (beam_p, 0);
+ announce_grob(beam_p, SCM_EOL);
return beam_p;
}
Translator_group * dest =
it->report_to_l ()->find_create_translator_l (to_type, to_id);
current->remove_translator_p (last);
- dest->add_group_translator (last);
+ dest->add_used_group_translator (last);
}
else
{
staffline_p_->set_bound (LEFT,it);
- announce_grob (staffline_p_, 0);
+ announce_grob(staffline_p_, SCM_EOL);
}
Spanner*
if (scm_equal_p (gl, bar_p_->get_grob_property ("glyph")) != SCM_BOOL_T)
bar_p_->set_grob_property ("glyph", gl);
- announce_grob (bar_p_, 0);
+ announce_grob(bar_p_, SCM_EOL);
}
}
text_p_ = new Item (b);
Side_position_interface::set_axis (text_p_,Y_AXIS);
- announce_grob (text_p_, 0);
+ announce_grob(text_p_, SCM_EOL);
}
ENTER_DESCRIPTION(Bar_number_engraver,
class Beam_engraver : public Engraver
{
Drul_array<Span_req*> reqs_drul_;
-
- Link_array<Stem> stems_;
-
Spanner *finished_beam_p_;
Spanner *beam_p_;
virtual void stop_translation_timestep ();
virtual void start_translation_timestep ();
virtual void finalize ();
- virtual void create_grobs ();
+
virtual void acknowledge_grob (Grob_info);
virtual bool try_music (Music*);
virtual void process_music ();
Direction d =c->get_span_dir ();
- if (d == STOP && !beam_p_)
- {
- m->origin ()->warning (_ ("can't find start of beam"));
- return false;
- }
-
if (d == STOP)
{
SCM m = get_property ("automaticMelismata");
{
top_engraver ()->forbid_breaks ();
}
-}
-
-
-void
-Beam_engraver::create_grobs ()
-{
if (reqs_drul_[START])
{
if (beam_p_)
/* urg, must copy to Auto_beam_engraver too */
- announce_grob (beam_p_, reqs_drul_[START]);
+ announce_grob(beam_p_, reqs_drul_[START]->self_scm());
}
- reqs_drul_[STOP] = 0;
- reqs_drul_[START] = 0;
+
}
+
void
Beam_engraver::typeset_beam ()
{
delete finished_beam_info_p_;
finished_beam_info_p_ =0;
finished_beam_p_ = 0;
-
- reqs_drul_[STOP] = 0;
}
}
Beam_engraver::start_translation_timestep ()
{
reqs_drul_ [START] =0;
- if (beam_p_) {
- SCM m = get_property ("automaticMelismata");
- SCM b = get_property ("noAutoBeaming");
- if (to_boolean (m) && to_boolean (b)) {
- set_melisma (true);
+ reqs_drul_[STOP] = 0;
+
+ if (beam_p_)
+ {
+ SCM m = get_property ("automaticMelismata");
+ SCM b = get_property ("noAutoBeaming");
+ if (to_boolean (m) && to_boolean (b))
+ {
+ set_melisma (true);
+ }
+ subdivide_beams_ = to_boolean(get_property("subdivideBeams"));
}
- subdivide_beams_ = gh_scm2bool(get_property("subdivideBeams"));
- }
}
void
{
align_l_ = new Item (get_property ("BreakAlignment"));
Break_align_interface::set_interface (align_l_);
- announce_grob (align_l_,0);
+ announce_grob (align_l_, SCM_EOL);
SCM edge_sym = ly_symbol2scm ("Left_edge_item");
Item * edge = new Item (get_property ("LeftEdge"));
*/
align_l_->set_grob_property ("self-alignment-X", edge->self_scm ());
- announce_grob (edge, 0);
+ announce_grob(edge, SCM_EOL);
column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm ());
}
group->set_grob_property ("break-align-symbol", align_name);
group->set_parent (align_l_, Y_AXIS);
- announce_grob (group, 0);
+ announce_grob(group, SCM_EOL);
column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm ());
}
Breathing_sign::set_interface (breathing_sign_p_);
- announce_grob (breathing_sign_p_, breathing_sign_req_l_);
+ announce_grob(breathing_sign_p_, breathing_sign_req_l_->self_scm());
breathing_sign_req_l_ = 0;
}
}
Translator_group * dest =
report_to_l ()->find_create_translator_l (to_type, to_id);
current->remove_translator_p (last);
- dest->add_group_translator (last);
+ dest->add_used_group_translator (last);
}
else
{
{
chord_name_p_ = new Item (get_property ("ChordName"));
chord_name_p_->set_grob_property ("chord", chord_);
- announce_grob (chord_name_p_, 0);
+ announce_grob(chord_name_p_, SCM_EOL);
SCM s = get_property ("chordChanges");
if (to_boolean (s) && ly_car (last_chord_) != SCM_EOL
&& gh_equal_p (chord_, last_chord_))
Moment mp
= (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
beam_start_location_ = mp;
- announce_grob (beam_p_, repeat_);
+ announce_grob(beam_p_, repeat_->self_scm());
}
else if (!sequential_body_b_ && !stem_tremolo_)
{
stem_tremolo_ = new Item (get_property ("StemTremolo"));
Stem_tremolo::set_interface (stem_tremolo_);
- announce_grob (stem_tremolo_, repeat_);
+ announce_grob(stem_tremolo_, repeat_->self_scm());
stem_tremolo_->set_grob_property ("tremolo-flags",
gh_int2scm (flags));
if (!clef_p_)
{
Item *c= new Item (get_property ("Clef"));
- announce_grob (c, 0);
+ announce_grob(c, SCM_EOL);
Staff_symbol_referencer::set_interface (c);
g->set_grob_property ("direction", gh_int2scm (sign (gh_scm2int (oct))));
octavate_p_ = g;
- announce_grob (octavate_p_, 0);
+ announce_grob(octavate_p_, SCM_EOL);
}
}
Axis_group_interface::set_interface (col_p_);
Axis_group_interface::set_axes (col_p_, X_AXIS, Y_AXIS);
- announce_grob (col_p_,0);
+ announce_grob (col_p_, SCM_EOL);
}
for (int i=0; i< note_column_l_arr_.size (); i++)
if (scratch_note_reqs_.size())
{
req = scratch_note_reqs_[i];
- req->set_mus_property ("pitch",
- note_req_l_arr_[i]->get_mus_property ("pitch"));
+ SCM pits = note_req_l_arr_[i]->get_mus_property ("pitch");
+ req->set_mus_property ("pitch",pits);
}
+
note_p->set_grob_property ("duration-log",
gh_int2scm (note_dur.duration_log ()));
-
+
int dots= note_dur.dot_count ();
if (dots)
{
d->set_grob_property ("dot-count", gh_int2scm (dots));
d->set_parent (note_p, Y_AXIS);
- announce_grob (d,0);
+ announce_grob (d, SCM_EOL);
dot_p_arr_.push (d);
}
note_p->set_grob_property ("note-character", ly_str02scm (s));
}
- announce_grob (note_p,req);
+ announce_grob (note_p,req->self_scm ());
note_p_arr_.push (note_p);
}
SCM basicProperties = get_property ("Custos");
Item* custos = new Item (basicProperties);
- announce_grob (custos, 0);
+ announce_grob(custos, SCM_EOL);
custos_arr_.push (custos);
return custos;
if (!dotcol_)
{
dotcol_ = new Item (get_property ("DotColumn"));
- announce_grob (dotcol_, 0);
+ announce_grob(dotcol_, SCM_EOL);
}
Dot_column::add_head (dotcol_, info.grob_l_);
Music * rq = accepted_spanreqs_drul_[START];
if (script_req_l_)
rq = script_req_l_ ;
- announce_grob (line_spanner_, rq);
+ announce_grob(line_spanner_, rq->self_scm());
}
Axis_group_interface::add_element (line_spanner_, script_p_);
- announce_grob (script_p_, script_req_l_);
+ announce_grob(script_p_, script_req_l_->self_scm());
}
if (accepted_spanreqs_drul_[STOP])
add_bound_item (line_spanner_, cresc_p_->get_bound (LEFT));
- announce_grob (cresc_p_, accepted_spanreqs_drul_[START]);
+ announce_grob(cresc_p_, accepted_spanreqs_drul_[START]->self_scm());
}
}
}
}
}
ENTER_DESCRIPTION(Dynamic_engraver,
-/* descr */ "",
+/* descr */ "
+This engraver creates hairpins, dynamic texts, and their vertical
+alignments. The symbols are collected onto a DynamicLineSpanner grob
+which takes care of vertical positioning.
+",
+
/* creats*/ "DynamicLineSpanner DynamicText Hairpin TextSpanner",
/* acks */ "note-column-interface",
/* reads */ "",
}
void
-Engraver::announce_grob (Grob* e, Music *m)
+Engraver::announce_grob (Grob* e, SCM cause)
{
/*
TODO: junk grob-info, and make a cause grob-property to store
`causes' generically.
*/
- if (m && store_locations_global_b
- && m->origin ()->location_str ().length_i ())
- {
- e->set_grob_property ("origin", m->get_mus_property ("origin"));
- }
-
- Grob_info i (e, m ? m->self_scm () : SCM_UNDEFINED);
+ if (unsmob_music (cause) || unsmob_grob (cause))
+ e->set_grob_property ("cause", cause);
+
+ Grob_info i (e);
if (!i.origin_trans_l_)
i.origin_trans_l_ = this;
daddy_grav_l ()->announce_grob (i);
Lyric_extender::set_textitem (extender_p_, LEFT, last_lyric_l_);
- announce_grob (extender_p_, req_l_);
+ announce_grob(extender_p_, req_l_->self_scm());
}
}
if (rest_req_)
{
figure_ = new Item (get_property ("BassFigure"));
- announce_grob (figure_, rest_req_); // todo
+ announce_grob(figure_, rest_req_->self_scm()); // todo
figure_->set_grob_property ("text" , ly_str02scm ("-"));
}
else if (figures_.size ())
{
figure_ = new Item (get_property ("BassFigure"));
- announce_grob (figure_, figures_[0]); // todo
+ announce_grob(figure_, figures_[0]->self_scm()); // todo
SCM flist = SCM_EOL;
for (int i = 0; i < figures_.size (); i++)
{
*/
fingering->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
- announce_grob (fingering, r);
+ announce_grob (fingering, r->self_scm());
fingerings_.push (fingering);
}
(c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-
+#include "grob.hh"
#include "grob-info.hh"
#include "request.hh"
#include "translator.hh"
#include "translator-group.hh"
-Grob_info::Grob_info (Grob*s_l, SCM c)
+Grob_info::Grob_info (Grob*s_l)
{
grob_l_ = s_l;
- cause_ = c;
origin_trans_l_ = 0;
}
Grob_info::Grob_info ()
{
grob_l_ = 0;
- cause_ = SCM_EOL;
origin_trans_l_ = 0;
}
Music*
Grob_info::music_cause ()
+
{
- return unsmob_music (cause_);
+ SCM cause = grob_l_->get_grob_property ("cause");
+ return unsmob_music (cause);
}
Link_array<Translator>
hyphen_p_ = new Spanner (get_property ("LyricHyphen"));
Hyphen_spanner (hyphen_p_).set_textitem (LEFT, last_lyric_l_);
- announce_grob (hyphen_p_, req_l_);
+ announce_grob(hyphen_p_, req_l_->self_scm());
}
}
/**
Announce element. Default: pass on to daddy. Utility
*/
- virtual void announce_grob (Grob*, Music*);
+ virtual void announce_grob (Grob*, SCM cause);
virtual void announce_grob (Grob_info);
virtual void process_music ();
/**
Data container for broadcasts.
-
- TODO: Store this in element info!
*/
struct Grob_info {
Translator * origin_trans_l_;
Grob * grob_l_;
- /*
- Notice that CAUSE is not GC protected ; this might be a cause for
- GC errors if you don't use music or grobs as a cause.
- */
- SCM cause_;
public:
Music * music_cause ();
Link_array<Translator> origin_trans_l_arr (Translator*) const;
- Grob_info (Grob*, SCM);
+ Grob_info (Grob*);
Grob_info ();
};
-
#endif // STAFFELEMINFO_HH
class Timing_translator : public virtual Translator
{
public:
- VIRTUAL_COPY_CONS (Translator);
- Timing_translator ();
+ // VIRTUAL_COPY_CONS (Translator);
+ TRANSLATOR_DECLARATIONS(Timing_translator);
+
protected:
virtual void initialize ();
int iterator_count_;
friend class Interpretation_context_handle;
+ SCM add_translator (SCM, Translator*);
+
protected:
~Translator_group ();
public:
- SCM add_translator (SCM, Translator*);
void execute_single_pushpop_property (SCM prop, SCM sym, SCM val);
SCM internal_get_property (SCM name_sym) const;
VIRTUAL_COPY_CONS (Translator);
Translator_group (Translator_group const &);
Translator_group ();
- void add_group_translator (Translator *trans_p);
+ void add_fresh_group_translator (Translator *trans_p);
+ void add_fresh_simple_translator (Translator *trans_p);
+ void add_used_group_translator (Translator *trans_p);
/// Score_register = 0, Staff_registers = 1, etc)
Translator_group* ancestor_l (int l=1);
if (delim_)
text_->set_parent (delim_, Y_AXIS);
- announce_grob (text_,0);
+ announce_grob (text_, SCM_EOL);
}
}
Staff_symbol_referencer::set_interface (item_p_);
Key_item::set_interface (item_p_);
- announce_grob (item_p_,keyreq_l_);
+
+
+ announce_grob(item_p_, keyreq_l_ ? keyreq_l_->self_scm() : SCM_EOL);
}
if (!def)
= unsmob_grob (get_property ("currentCommandColumn"));
staffline_p_->set_bound (LEFT,it);
- Engraver::announce_grob (staffline_p_,0);
+ Engraver::announce_grob (staffline_p_, SCM_EOL);
}
void
text_p_->translate_axis (0.66, X_AXIS);
- announce_grob (text_p_, req_l_);
+ announce_grob(text_p_, req_l_->self_scm());
req_l_ = 0;
}
}
Side_position_interface::set_axis (text_p_, Y_AXIS);
- announce_grob (text_p_, rq);
+ announce_grob(text_p_, rq->self_scm());
}
Multi_measure_rest::set_interface (mmrest_p_);
Staff_symbol_referencer::set_interface (mmrest_p_);
- announce_grob (mmrest_p_, busy_span_req_l_);
+ announce_grob(mmrest_p_, busy_span_req_l_->self_scm());
start_measure_i_
= gh_scm2int (get_property ("currentBarNumber"));
}
line_->set_parent (Staff_symbol_referencer::staff_symbol_l (last_head_),
Y_AXIS);
- announce_grob (line_, last_req_);
+ SCM c = last_req_? last_req_->self_scm () : SCM_EOL;
+ announce_grob(line_, c);
last_req_ = 0;
follow_ = false;
d->set_grob_property ("dot-count", gh_int2scm (dur.dot_count ()));
d->set_parent (note_p, Y_AXIS);
- announce_grob (d,0);
+ announce_grob (d, SCM_EOL);
dot_p_arr_.push (d);
}
note_p->set_grob_property ("note-character", ly_str02scm (s));
}
- announce_grob (note_p,req);
+ announce_grob (note_p,req->self_scm());
note_p_arr_.push (note_p);
}
}
{
Item * t = new Item (get_property ("NoteName"));
t->set_grob_property ("text", ly_str02scm (s.ch_C ()));
- announce_grob (t, req_l_arr_[0]);
+ announce_grob(t, req_l_arr_[0]->self_scm());
texts_.push (t);
}
}
Translator_group * dest =
it->report_to_l ()->find_create_translator_l (to_type, to_id);
current->remove_translator_p (last);
- dest->add_group_translator (last);
+ dest->add_used_group_translator (last);
}
else
{
if (repeat_sign_type_ == BEAT)
{
beat_slash_ = new Item (get_property ("RepeatSlash"));
- announce_grob (beat_slash_, repeat_);
+ announce_grob(beat_slash_, repeat_->self_scm());
}
else if (repeat_sign_type_ == MEASURE)
{
perc_p_ = new Spanner (get_property ("PercentRepeat"));
SCM col =get_property ("currentCommandColumn");
perc_p_->set_bound (LEFT, unsmob_grob (col));
- announce_grob (perc_p_, repeat_);
+ announce_grob(perc_p_, repeat_->self_scm());
}
else if (repeat_sign_type_ == DOUBLE_MEASURE)
{
double_percent_ = new Item (get_property ("DoublePercentRepeat"));
- announce_grob (double_percent_, repeat_);
+ announce_grob(double_percent_, repeat_->self_scm());
/*
forbid breaks on a % line. Should forbid all breaks, really.
}
start_phrasing_slur_l_arr.push (phrasing_slur);
requests_arr_.push (phrasing_slur_req_l);
- announce_grob (phrasing_slur, phrasing_slur_req_l);
+ announce_grob(phrasing_slur, phrasing_slur_req_l->self_scm());
}
}
for (int i=0; i < start_phrasing_slur_l_arr.size (); i++)
p->item_p_ = new Item (get_property (propname.ch_C ()));
p->item_p_->set_grob_property ("text", s);
- announce_grob (p->item_p_,
- p->req_l_drul_[START]
- ? p->req_l_drul_[START]
- : p->req_l_drul_[STOP]);
+
+ Music * c = p->req_l_drul_[START]
+ ? p->req_l_drul_[START]
+ : p->req_l_drul_[STOP];
+ announce_grob (p->item_p_, c ? c->self_scm() : SCM_EOL);
+
}
p->req_l_drul_[START] = 0;
p->req_l_drul_[STOP] = 0;
Porrectus::set_left_head(porrectus_p_, left_head);
Porrectus::set_right_head(porrectus_p_, right_head);
porrectus_p_arr_.push (porrectus_p_);
- announce_grob (porrectus_p_, porrectus_req_l_);
+ announce_grob(porrectus_p_, porrectus_req_l_->self_scm());
past_notes_pq_. insert (right_heads_[i]);
left_heads_.del (i);
rest_collision_p_ = new Item (get_property ("RestCollision"));
Rest_collision::set_interface (rest_collision_p_);
- announce_grob (rest_collision_p_, 0);
+ announce_grob(rest_collision_p_, SCM_EOL);
for (int i=0; i< note_column_l_arr_.size (); i++)
Rest_collision::add_column (rest_collision_p_,note_column_l_arr_[i]);
}
Rhythmic_head::set_dots (rest_p_, dot_p_);
dot_p_->set_parent (rest_p_, Y_AXIS);
dot_p_->set_grob_property ("dot-count", gh_int2scm (dots));
- announce_grob (dot_p_,0);
+ announce_grob (dot_p_, SCM_EOL);
}
- announce_grob (rest_p_, rest_req_l_);
+ announce_grob(rest_p_, rest_req_l_->self_scm());
}
}
{
note_column_ = new Item (get_property ("NoteColumn"));
Note_column::set_interface (note_column_);
- announce_grob (note_column_, 0);
+ announce_grob(note_column_, SCM_EOL);
spacing_ = new Item (get_property ("NoteSpacing"));
spacing_->set_grob_property ("left-items", gh_cons (note_column_->self_scm (), SCM_EOL));
- announce_grob (spacing_, 0);
+ announce_grob(spacing_, SCM_EOL);
if (last_spacing_)
{
command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
- Grob_info i1 (command_column_l_, SCM_EOL);
+ Grob_info i1 (command_column_l_);
i1.origin_trans_l_ = this;
- Grob_info i2 (musical_column_l_, SCM_EOL);
+ Grob_info i2 (musical_column_l_);
i2.origin_trans_l_ = this;
announce_grob (i1);
process_music ();
announces ();
}
-
stop_translation_timestep ();
check_removal ();
if (!scol_p_ && script_l_arr_.size () > 1)
{
scol_p_ = new Item (get_property ("ScriptColumn"));
- announce_grob (scol_p_, 0);
+ announce_grob(scol_p_, SCM_EOL);
}
if (scol_p_)
script_p_arr_.push (p);
- announce_grob (p, l);
+ announce_grob (p, l->self_scm());
}
}
{
sep_span_p_ = new Spanner (get_property ("SeparatingGroupSpanner"));
- announce_grob (sep_span_p_, 0);
+ announce_grob(sep_span_p_, SCM_EOL);
sep_span_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
}
if (ib)
p_ref_->set_grob_property ("breakable", SCM_BOOL_T);
- announce_grob (p_ref_, 0);
+ announce_grob(p_ref_, SCM_EOL);
if (p_ref_ == break_malt_p_)
{
current_spacings_.staff_spacing_ = it;
it->set_grob_property ("left-items", gh_cons (break_malt_p_->self_scm (), SCM_EOL));
- announce_grob (it, 0);
+ announce_grob(it, SCM_EOL);
if (int i = last_spacings_.note_spacings_.size ())
{
}
start_slur_l_arr.push (slur);
requests_arr_.push (slur_req_l);
- announce_grob (slur, slur_req_l);
+ announce_grob(slur, slur_req_l->self_scm());
}
}
for (int i=0; i < start_slur_l_arr.size (); i++)
spacing_p_ =new Spanner (get_property ("SpacingSpanner"));
Spacing_spanner::set_interface (spacing_p_);
spacing_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
- announce_grob (spacing_p_, 0);
+ announce_grob(spacing_p_, SCM_EOL);
}
void
&& to_boolean (get_property ("connectArpeggios")))
{
span_arpeggio_ = new Item (get_property ("Arpeggio"));
- announce_grob (span_arpeggio_, 0);
+ announce_grob(span_arpeggio_, SCM_EOL);
}
}
Span_bar::set_interface (spanbar_p_);
spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
- announce_grob (spanbar_p_,0);
+ announce_grob (spanbar_p_, SCM_EOL);
}
}
}
span_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
- announce_grob (span_p_, 0);
+ announce_grob(span_p_, SCM_EOL);
}
void
{
text_ = new Item (get_property ("StanzaNumber"));
text_->set_grob_property ("text", txt);
- announce_grob (text_,0);
+ announce_grob (text_, SCM_EOL);
}
}
tremolo_p_ = new Item (get_property ("StemTremolo"));
Stem_tremolo::set_interface (tremolo_p_);
- announce_grob (tremolo_p_, tremolo_req_l_);
+ announce_grob(tremolo_p_, tremolo_req_l_->self_scm());
/*
The number of tremolo flags is the number of flags of
the tremolo-type minus the number of flags of the note
/*
We announce the cause of the head as cause of the stem.
The stem needs a rhythmic structure to fit it into a beam. */
- announce_grob (stem_p_, i.music_cause ());
+ announce_grob(stem_p_, i.music_cause ()->self_scm());
}
if (Stem::flag_i (stem_p_) != duration_log)
delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
- announce_grob (delim_,0);
+ announce_grob (delim_, SCM_EOL);
}
void
*/
text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
- announce_grob (text, r);
+ announce_grob (text, r->self_scm ());
texts_.push (text);
}
}
Grob *e = unsmob_grob (get_property ("currentMusicalColumn"));
span_->set_bound (LEFT, e);
- announce_grob (span_, req_drul_[START]);
+ announce_grob (span_, req_drul_[START]->self_scm());
req_drul_[START] = 0;
}
}
TODO: Remove the dependency on musical info. We should tie on the
basis of position and duration-log of the heads (not of the reqs).
-
- TODO: figure this out: currently, this engravers ties note heads
- that have the same Y-position (and does not look at pitch). This
- means that we will fuck up with a clef-change. How should
- clef-changes during ties be handled, or should they not?
-
-
*/
class Tie_engraver : public Engraver
{
}
int
-head_position_compare (Grob *const&a,Grob *const&b)
+head_pitch_compare (Grob *const&a,Grob *const&b)
{
- return sign (gh_scm2double (a->get_grob_property ("staff-position"))
- - gh_scm2double (b->get_grob_property ("staff-position")));
+ Music *m1 =unsmob_music (a->get_grob_property ("cause"));
+ Music *m2 =unsmob_music (b->get_grob_property ("cause"));
+
+ return Pitch::compare (* unsmob_pitch (m1->get_mus_property ("pitch")),
+ * unsmob_pitch (m2->get_mus_property ("pitch")));
}
void
{
if (req_l_)
{
- now_heads_.sort (&head_position_compare);
- stopped_heads_.sort (&head_position_compare);
+ now_heads_.sort (&head_pitch_compare);
+ stopped_heads_.sort (&head_pitch_compare);
SCM head_list = SCM_EOL;
while (i >= 0 && j >=0)
{
int comp
- = head_position_compare (now_heads_[i], stopped_heads_[j]);
+ = head_pitch_compare (now_heads_[i], stopped_heads_[j]);
if (comp)
{
Tie::set_head (p,RIGHT, dynamic_cast<Item*> (unsmob_grob (ly_cdr (pair))));
tie_p_arr_.push (p);
- announce_grob (p, req_l_);
+ announce_grob(p, req_l_->self_scm());
}
else for (SCM s = head_list; gh_pair_p (s); s = ly_cdr (s))
{
Tie::set_head (p, RIGHT, dynamic_cast<Item*> (unsmob_grob (ly_cdar (s))));
tie_p_arr_.push (p);
- announce_grob (p, req_l_);
+ announce_grob(p, req_l_->self_scm());
}
if (tie_p_arr_.size () > 1 && !tie_column_p_)
Tie_column::set_interface (tie_column_p_);
for (int i = tie_p_arr_.size (); i--;)
Tie_column::add_tie (tie_column_p_,tie_p_arr_ [i]);
- announce_grob (tie_column_p_, 0);
+ announce_grob(tie_column_p_, SCM_EOL);
}
}
}
/*
- time_signature-reg.cc -- implement Time_signature_engraver
+ time-signature-engraver.cc -- implement Time_signature_engraver
source file of the GNU LilyPond music typesetter
#include "time-signature.hh"
#include "command-request.hh"
#include "engraver.hh"
-
-
#include "engraver-group-engraver.hh"
-
/**
generate time_signatures.
*/
virtual void create_grobs ();
public:
TRANSLATOR_DECLARATIONS(Time_signature_engraver);
-
};
time_signature_p_->set_grob_property ("fraction",fr);
if (time_signature_p_)
- announce_grob (time_signature_p_, 0);
+ announce_grob(time_signature_p_, SCM_EOL);
}
-
}
-
-
void
Time_signature_engraver::stop_translation_timestep ()
{
time_signature_p_ =0;
}
}
-
-
-
ENTER_DESCRIPTION(Time_signature_engraver,
void
Timing_translator::stop_translation_timestep ()
{
-
Translator *t = this;
Global_translator *global_l =0;
do
daddy_trans_l_->set_property ("measurePosition", measposp.smobbed_copy ());
}
+ENTER_DESCRIPTION (Timing_translator, "","","","","" );
}
}
-
SCM
Translator_group::add_translator (SCM list, Translator *t)
{
+ /*
+ Must append, since list ordering must be preserved.
+ */
list = gh_append2 (list, gh_cons (t->self_scm (), SCM_EOL));
t->daddy_trans_l_ = this;
t->output_def_l_ = output_def_l_;
- if (Translator_group*tg = dynamic_cast<Translator_group*> (t))
- {
- unsmob_translator_def (tg->definition_)->apply_property_operations (tg);
- }
-
- t->initialize ();
+
return list;
}
+
void
-Translator_group::add_group_translator (Translator *t)
+Translator_group::add_fresh_simple_translator (Translator*t)
+{
+ simple_trans_list_ = add_translator (simple_trans_list_, t);
+ t->initialize ();
+}
+
+void
+Translator_group::add_used_group_translator (Translator *t)
{
trans_group_list_ = add_translator (trans_group_list_,t);
}
+void
+Translator_group::add_fresh_group_translator (Translator*t)
+{
+ Translator_group*tg = dynamic_cast<Translator_group*> (t);
+ assert (tg);
+
+ trans_group_list_ = add_translator (trans_group_list_,t);
+ unsmob_translator_def (tg->definition_)->apply_property_operations (tg);
+ t->initialize ();
+
+}
+
bool
Translator_group::removable_b () const
if (i == path.size () -1)
new_group->id_str_ = id;
- current->add_group_translator (new_group);
+ current->add_fresh_group_translator (new_group);
current = new_group;
}
t = unsmob_translator_def (this->definition_);
}
Translator_group *tg = t->instantiate (output_def_l_);
- add_group_translator (tg);
+ add_fresh_group_translator (tg);
if (!tg->is_bottom_translator_b ())
return tg->get_default_interpreter ();
glep->set_grob_property ("text", t);
}
- announce_grob (glep, time_scaled_music_arr_ [i]);
+ announce_grob(glep, time_scaled_music_arr_ [i]->self_scm());
}
}
{
valign_p_ =new Spanner (get_property ("VerticalAlignment"));
valign_p_->set_bound (LEFT,unsmob_grob (get_property ("currentCommandColumn")));
- announce_grob (valign_p_ , 0);
+ announce_grob(valign_p_ , SCM_EOL);
}
void
volta_span_p_ = new Spanner (get_property ("VoltaBracket"));
Volta_spanner::set_interface (volta_span_p_);
- announce_grob (volta_span_p_,0);
+ announce_grob (volta_span_p_, SCM_EOL);
volta_span_p_->set_grob_property ("text", start_str_);
}
}
\consists "Separating_line_group_engraver"
SeparatingGroupSpanner \override #'spacing-procedure
= #Separating_group_spanner::set_spacing_rods_and_seqs
+ \consists "Dot_column_engraver"
\consists "Clef_engraver"
\consists "Key_engraver"
\consists "Breathing_sign_engraver"
% \consists "Rest_engraver"
- \consists "Dot_column_engraver"
\consists "Stem_engraver"
\consists "Beam_engraver"
\consists "Auto_beam_engraver"
\accepts ChoirStaff
\accepts RhythmicStaff
\accepts ChordNames
- \consists "Swallow_performer"
+ \consists "Timing_translator"
+ \consists "Swallow_performer"
+
dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
instrumentEqualizer = #default-instrument-equalizer
}
Begin3
Title: LilyPond
-Version: 1.5.29
-Entered-date: 01FEB02
+Version: 1.5.30
+Entered-date: 04FEB02
Description: @BLURB@
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.5.29.tar.gz
+ 1000k lilypond-1.5.30.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.29.tar.gz
+ 1000k lilypond-1.5.30.tar.gz
Copying-policy: GPL
End
%define name lilypond
-%define version 1.5.29
+%define version 1.5.30
%define release 1mdk
Name: %{name}
%define info yes
Name: lilypond
-Version: 1.5.29
+Version: 1.5.30
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.29.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
Summary: Create and print music notation
URL: http://www.lilypond.org/
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.29
+Version: 1.5.30
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.29.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
enddef;
fet_beginchar("Whole slashhead","0slash","wholeslashhead")
- draw_slash(staff_space#);
+ draw_slash(staff_space#);
fet_endchar;
fet_beginchar("Half slashhead","1slash","halfslashhead")
))
-;;; WARNING: the meta field should be the last one.
+;;; WARNING: the meta field should be the last one.
+
+;; TODO: junk the meta field in favor of something more compact?
(define all-grob-descriptions
`(
(Accidentals . (
(set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
+
+
; (display (map pair? all-grob-descriptions))
+
+;; make sure that \property Foo.Bar =\turnOff doesn't complain
+
+(map (lambda (x) (set-object-property! (car x) 'translator-type? list?))
+ all-grob-descriptions)
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
- ; should include default value?
+; should include default value?
;;; FIXME: naming.
"pdftex.scm"
"c++.scm"
"grob-property-description.scm"
- "translator-property-description.scm"
"context-description.scm"
"interface-description.scm"
"beam.scm"
"basic-properties.scm"
"chord-name.scm"
"grob-description.scm"
+ "translator-property-description.scm"
"script.scm"
"drums.scm"
"midi.scm"