From d5fb518307ce2a2f46f97679fd3e35d71ceff746 Mon Sep 17 00:00:00 2001 From: fred Date: Wed, 27 Mar 2002 02:03:03 +0000 Subject: [PATCH] lilypond-1.5.13 --- CHANGES | 22 + Documentation/user/GNUmakefile | 2 +- Documentation/user/refman.itely | 15 +- VERSION | 2 +- config.hh.in | 3 + configure.in | 2 +- lily/a2-engraver.cc | 50 +- lily/arpeggio-engraver.cc | 20 +- lily/auto-beam-engraver.cc | 29 +- lily/axis-group-engraver.cc | 35 +- lily/bar-engraver.cc | 12 +- lily/bar-number-engraver.cc | 18 +- lily/beam-engraver.cc | 20 +- lily/break-align-engraver.cc | 13 +- lily/break-align-item.cc | 2 +- lily/breathing-sign-engraver.cc | 11 +- lily/chord-name-engraver.cc | 14 +- lily/chord-tremolo-engraver.cc | 26 +- lily/chord.cc | 4 +- lily/clef-engraver.cc | 28 +- lily/collision-engraver.cc | 17 +- lily/collision.cc | 8 +- lily/command-request.cc | 8 +- lily/custos-engraver.cc | 18 +- lily/dot-column-engraver.cc | 24 +- lily/dot-column.cc | 4 - lily/dynamic-engraver.cc | 18 +- lily/dynamic-performer.cc | 9 +- lily/engraver-group-engraver.cc | 81 +- lily/engraver.cc | 8 + lily/extender-engraver.cc | 17 +- lily/figured-bass-engraver.cc | 13 +- lily/font-interface.cc | 4 +- lily/font-metric.cc | 2 +- lily/font-size-engraver.cc | 18 +- lily/grob-info.cc | 4 +- lily/grob.cc | 8 +- lily/hyphen-engraver.cc | 17 +- lily/include/dot-column.hh | 2 +- lily/include/engraver-group-engraver.hh | 3 +- lily/include/engraver.hh | 3 +- lily/include/grob-info.hh | 3 +- lily/include/line-group-group-engraver.hh | 7 +- lily/include/lyric-phrasing-engraver.hh | 4 +- lily/include/performer-group-performer.hh | 4 +- lily/include/score-engraver.hh | 4 +- lily/include/score-performer.hh | 4 +- lily/include/translator-group.hh | 5 +- lily/include/translator.hh | 57 +- lily/include/type-swallow-translator.hh | 22 +- lily/instrument-name-engraver.cc | 31 +- lily/key-engraver.cc | 18 +- lily/key-item.cc | 10 +- lily/key-performer.cc | 7 +- lily/lily-guile.cc | 31 +- lily/line-group-group-engraver.cc | 10 +- lily/line-of-score.cc | 12 +- lily/local-key-engraver.cc | 27 +- lily/local-key-item.cc | 10 +- lily/lookup.cc | 2 +- lily/lyric-engraver.cc | 12 +- lily/lyric-performer.cc | 8 +- lily/lyric-phrasing-engraver.cc | 38 +- lily/main.cc | 2 +- lily/mark-engraver.cc | 23 +- lily/melisma-engraver.cc | 13 +- lily/molecule.cc | 10 +- lily/multi-measure-rest-engraver.cc | 14 +- lily/music.cc | 4 +- lily/my-lily-lexer.cc | 2 +- lily/my-lily-parser.cc | 4 +- lily/new-spacing-spanner.cc | 6 +- lily/note-head-line-engraver.cc | 16 +- lily/note-heads-engraver.cc | 13 +- lily/note-name-engraver.cc | 15 +- lily/note-performer.cc | 10 +- lily/output-property-engraver.cc | 19 +- lily/paper-def.cc | 4 +- lily/paper-outputter.cc | 22 +- lily/percent-repeat-engraver.cc | 11 +- lily/performer-group-performer.cc | 10 +- lily/phrasing-slur-engraver.cc | 16 +- lily/piano-pedal-engraver.cc | 25 +- lily/piano-pedal-performer.cc | 6 +- lily/pitch-squash-engraver.cc | 20 +- lily/porrectus-engraver.cc | 15 +- lily/property-engraver.cc | 25 +- lily/regular-spacing-engraver.cc | 12 +- lily/repeat-acknowledge-engraver.cc | 12 +- lily/rest-collision-engraver.cc | 16 +- lily/rest-engraver.cc | 11 +- lily/rhythmic-column-engraver.cc | 17 +- lily/score-engraver.cc | 25 +- lily/score-performer.cc | 9 +- lily/score.cc | 6 +- lily/script-column-engraver.cc | 17 +- lily/script-engraver.cc | 31 +- lily/separating-line-group-engraver.cc | 13 +- lily/simple-spacer.cc | 8 +- lily/slur-engraver.cc | 15 +- lily/slur.cc | 8 +- lily/spacing-engraver.cc | 15 +- lily/span-arpeggio-engraver.cc | 17 +- lily/span-bar-engraver.cc | 16 +- lily/span-dynamic-performer.cc | 7 +- lily/staff-performer.cc | 7 +- lily/staff-symbol-engraver.cc | 16 +- lily/stanza-number-engraver.cc | 23 +- lily/stem-engraver.cc | 19 +- lily/swallow-engraver.cc | 4 +- lily/swallow-perf.cc | 18 +- lily/system-start-delimiter-engraver.cc | 27 +- lily/tempo-performer.cc | 7 +- lily/text-engraver.cc | 23 +- lily/text-item.cc | 6 +- lily/text-spanner-engraver.cc | 18 +- lily/thread-devnull-engraver.cc | 21 +- lily/tie-engraver.cc | 19 +- lily/tie-performer.cc | 18 +- lily/time-signature-engraver.cc | 20 +- lily/time-signature-performer.cc | 6 +- lily/timing-engraver.cc | 15 +- lily/timing-translator.cc | 2 - lily/translator-ctors.cc | 21 + lily/translator-def.cc | 6 +- lily/translator-group.cc | 6 +- lily/translator.cc | 44 +- lily/tuplet-engraver.cc | 15 +- lily/type-swallow-translator.cc | 4 +- lily/vertical-align-engraver.cc | 17 +- lily/voice-devnull-engraver.cc | 19 +- lily/volta-engraver.cc | 18 +- ly/engraver-init.ly | 7 +- modules/midi.c | 2 + scm/auto-beam.scm | 1 - scm/backend-documentation-lib.scm | 23 +- scm/context-description.scm | 92 ++ scm/documentation-lib.scm | 5 +- scm/engraver-documentation-lib.scm | 58 +- scm/generate-documentation.scm | 16 +- scm/grob-description.scm | 172 +-- scm/interface-description.scm | 7 +- scm/lily.scm | 10 +- scm/ps.scm | 1 + scm/translator-description.scm | 1397 +++++++++------------ scm/translator-property-description.scm | 20 +- scripts/ly2dvi.py | 5 +- 147 files changed, 2146 insertions(+), 1589 deletions(-) create mode 100644 scm/context-description.scm diff --git a/CHANGES b/CHANGES index 03b0f11b8b..d6cbd881b6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,25 @@ +1.5.12.jcn2 +=========== + +* half-baken --with-kpathsea configuration fix. + +* ly2dvi: add `.' to TEXINPUTS to catch broken TEXINPUTS settings. + +* guile-1.4 compile fix. + +1.5.12.hwn1 +=========== + +* Move engraver descriptions into the C code. They are accessible +from Scheme. Grand rehacking to make stuff work again. + +* Precompute which engravers are eligible to acknowledge a certain +type of grob. Speedup: approx 10 % on interpretation phase. + + +1.5.12 +====== + 1.5.11.jcn1 =========== diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile index 2c30d360d4..85afa59a41 100644 --- a/Documentation/user/GNUmakefile +++ b/Documentation/user/GNUmakefile @@ -119,7 +119,7 @@ ifneq ($(CROSS),yes) # however, this triggers compilation during install, which is a bad thing (tm). $(outdir)/lilypond-internals.nexi $(outdir)/lilypond-internals.texi: $(depth)/$(builddir)/lily/$(outconfbase)/lilypond - cd $(outdir) && ../$(depth)/$(builddir)/lily/$(outconfbase)/lilypond ../$(src-depth)/ly/generate-documentation + cd $(outdir) && GUILE_LOAD_PATH=$(topdir)/scm/ ../$(depth)/$(builddir)/lily/$(outconfbase)/lilypond ../$(src-depth)/ly/generate-documentation -ln $(outdir)/lilypond-internals.texi $(outdir)/lilypond-internals.nexi diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 6b9ac9828a..10a69dcbfc 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -1346,10 +1346,6 @@ The syntax is as follows. \grace @var{musicexpr} @end example -When grace music is interpreted, a score-within-a-score is set up: -@var{musicexpr} has its own time bookkeeping, and you could (for -example) have a separate time signature within the grace notes. While in -this score-within-a-score, you can create notes, beams, slurs, etc. Unbeamed eighth notes and shorter by default have a slash through the stem. @@ -1364,17 +1360,14 @@ stem. } @end lilypond - A grace note expression has duration 0; the next real note is assumed to be the main note. If you want the note to appear after the main note, set @code{Voice.graceAlignPosition} to @code{1}. @refbugs -At present, slurs or ties from the grace notes to the following notes -are not supported. Also, nesting @code{\grace} notes is not -supported. The following may cause run-time errors: -@example +Nesting @code{\grace} notes is not supported. The following may cause +run-time errors: @example @code{\grace @{ \grace c32 c16 @} c4} @end example Since the meaning of such a construct is unclear, we don't consider this @@ -1383,10 +1376,6 @@ syntactically valid, but makes no sense and may cause runtime errors. Ending a staff or score with grace notes may also generate a run-time error, since there will be no main note to attach the grace notes to. -The present implementation of grace notes is not robust and generally -kludgey. We expect it to change after LilyPond 1.4. Syntax changes might -also be implemented. - @menu * Glissando :: * Dynamics:: diff --git a/VERSION b/VERSION index cdb7a38a66..9872a2184a 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=5 -PATCH_LEVEL=12 +PATCH_LEVEL=13 MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a diff --git a/config.hh.in b/config.hh.in index 038a46c661..aa81bd7190 100644 --- a/config.hh.in +++ b/config.hh.in @@ -41,6 +41,9 @@ /* define if you have kpse_find_tfm */ #define HAVE_KPSE_FIND_TFM 0 +/* define if you have python2.0/Python.h header */ +#define HAVE_PYTHON2_0_PYTHON_H 0 + /* define if you have python2/Python.h header */ #define HAVE_PYTHON2_PYTHON_H 0 diff --git a/configure.in b/configure.in index 636d386f35..e0fa5a2f5d 100644 --- a/configure.in +++ b/configure.in @@ -49,7 +49,7 @@ AC_STEPMAKE_MAKEINFO AC_PATH_PROG(PERL, perl, error) -AC_HAVE_HEADERS(python2/Python.h python/Python.h python1.5/Python.h Python.h) +AC_HAVE_HEADERS(python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h) AC_STEPMAKE_END diff --git a/lily/a2-engraver.cc b/lily/a2-engraver.cc index 09d10282d7..6a08f56b79 100644 --- a/lily/a2-engraver.cc +++ b/lily/a2-engraver.cc @@ -18,9 +18,8 @@ class A2_engraver : public Engraver { -public: - A2_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(A2_engraver); + protected: virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); @@ -30,7 +29,7 @@ private: enum State { SOLO, SPLIT_INTERVAL, UNIRHYTHM, UNISILENCE, UNISON } state_; }; -ADD_THIS_TRANSLATOR (A2_engraver); + A2_engraver::A2_engraver () { @@ -94,17 +93,17 @@ A2_engraver::acknowledge_grob (Grob_info i) if (text_p_) { - if (Note_head::has_interface (i.elem_l_)) + if (Note_head::has_interface (i.grob_l_)) { Grob*t = text_p_; - Side_position_interface::add_support (t, i.elem_l_); + Side_position_interface::add_support (t, i.grob_l_); if (Side_position_interface::get_axis (t) == X_AXIS && !t->parent_l (Y_AXIS)) - t->set_parent (i.elem_l_, Y_AXIS); + t->set_parent (i.grob_l_, Y_AXIS); } - if (Stem::has_interface (i.elem_l_)) + if (Stem::has_interface (i.grob_l_)) { - Side_position_interface::add_support (text_p_, i.elem_l_); + Side_position_interface::add_support (text_p_, i.grob_l_); } } @@ -139,10 +138,10 @@ A2_engraver::acknowledge_grob (Grob_info i) /* Must only set direction for VoiceCombines, not for StaffCombines: we can't detect that here, so, ugh, yet another property */ if (!to_boolean (get_property ("noDirection")) - && (Stem::has_interface (i.elem_l_) - || Slur::has_interface (i.elem_l_) - // || Tie::has_interface (i.elem_l_) - || i.elem_l_->has_interface (ly_symbol2scm ("tie-interface")) + && (Stem::has_interface (i.grob_l_) + || Slur::has_interface (i.grob_l_) + // || Tie::has_interface (i.grob_l_) + || i.grob_l_->has_interface (ly_symbol2scm ("tie-interface")) /* Usually, dynamics are removed by *_devnull_engravers for the @@ -151,9 +150,9 @@ A2_engraver::acknowledge_grob (Grob_info i) hand, colliding of scripts may be worse. So, we don't set directions for these when we're playing solo. */ - || (i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface")) + || (i.grob_l_->has_interface (ly_symbol2scm ("dynamic-interface")) && state_ != SOLO) - || (i.elem_l_->has_interface (ly_symbol2scm ("text-interface")) + || (i.grob_l_->has_interface (ly_symbol2scm ("text-interface")) && state_ != SOLO) )) { @@ -170,18 +169,18 @@ A2_engraver::acknowledge_grob (Grob_info i) /* Blunt axe method: every grob gets a propertysetting. */ - i.elem_l_->set_grob_property ("direction", gh_int2scm (d)); + i.grob_l_->set_grob_property ("direction", gh_int2scm (d)); } } /* todo: should we have separate state variable for being "rest while other has solo?" */ - if ( Multi_measure_rest::has_interface (i.elem_l_) && d ) + if ( Multi_measure_rest::has_interface (i.grob_l_) && d ) if (state_ == UNIRHYTHM && unisilence != SCM_BOOL_T) { - i.elem_l_->set_grob_property ("staff-position", gh_int2scm (d * 6)); + i.grob_l_->set_grob_property ("staff-position", gh_int2scm (d * 6)); } } @@ -196,3 +195,18 @@ A2_engraver::stop_translation_timestep () } } +ENTER_DESCRIPTION(A2_engraver, +/* descr */ "Part combine engraver for orchestral scores. + +The markings @emph{a2}, @emph{Solo} and @emph{Solo II}, are +created by this engraver. It also acts upon instructions of the part +combiner. Another thing that the this engraver, is forcing of stem, +slur and tie directions, always when both threads are not identical; +up for the musicexpr called @code{one}, down for the musicexpr called +@code{two}. + +", +/* creats*/ "TextScript", +/* acks */ "grob-interface tie-interface note-head-interface ", +/* reads */ "combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm", +/* write */ ""); diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index b69aeb35bc..8a5513c3e6 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -20,9 +20,7 @@ class Arpeggio_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Arpeggio_engraver (); - + TRANSLATOR_DECLARATIONS(Arpeggio_engraver); protected: virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); @@ -61,18 +59,18 @@ Arpeggio_engraver::acknowledge_grob (Grob_info info) { if (arpeggio_req_) { - if (Stem::has_interface (info.elem_l_)) + if (Stem::has_interface (info.grob_l_)) { - stems_.push (info.elem_l_); + stems_.push (info.grob_l_); } /* We can't catch local key items (accidentals) from Voice context, see Local_key_engraver */ - else if (Rhythmic_head::has_interface (info.elem_l_)) + else if (Rhythmic_head::has_interface (info.grob_l_)) { - supports_.push (info.elem_l_); + supports_.push (info.grob_l_); } } } @@ -111,5 +109,11 @@ Arpeggio_engraver::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Arpeggio_engraver); + +ENTER_DESCRIPTION(Arpeggio_engraver, +/* descr */ "Generate an Arpeggio from a Arpeggio_req", +/* creats*/ "Arpeggio", +/* acks */ "stem-interface rhythmic-head-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index cc3db6529e..97451c6a4e 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -26,10 +26,7 @@ */ class Auto_beam_engraver : public Engraver { -public: - Auto_beam_engraver (); - VIRTUAL_COPY_CONS (Translator); - + TRANSLATOR_DECLARATIONS(Auto_beam_engraver); protected: virtual void stop_translation_timestep (); virtual void start_translation_timestep (); @@ -70,7 +67,7 @@ private: Beaming_info_list*finished_grouping_p_; }; -ADD_THIS_TRANSLATOR (Auto_beam_engraver); + Auto_beam_engraver::Auto_beam_engraver () { @@ -324,7 +321,6 @@ Auto_beam_engraver::start_translation_timestep () void Auto_beam_engraver::stop_translation_timestep () { - typeset_beam (); } @@ -344,23 +340,23 @@ Auto_beam_engraver::acknowledge_grob (Grob_info info) { if (stem_l_arr_p_) { - if (Beam::has_interface (info.elem_l_)) + if (Beam::has_interface (info.grob_l_)) { end_beam (); } - else if (Bar::has_interface (info.elem_l_)) + else if (Bar::has_interface (info.grob_l_)) { end_beam (); } - else if (Rest::has_interface (info.elem_l_)) + else if (Rest::has_interface (info.grob_l_)) { end_beam (); } } - if (Stem::has_interface (info.elem_l_)) + if (Stem::has_interface (info.grob_l_)) { - Item* stem_l = dynamic_cast (info.elem_l_); + Item* stem_l = dynamic_cast (info.grob_l_); Rhythmic_req *rhythmic_req = dynamic_cast (info.req_l_); if (!rhythmic_req) @@ -474,3 +470,14 @@ Auto_beam_engraver::create_grobs () auto-beam-engraver.cc:459: warning: value computed is not used (gcc: 2.96) */ count_i_ = count_i_ + 1; } +ENTER_DESCRIPTION(Auto_beam_engraver, +/* descr */ "Generate beams based on measure characteristics and observed +Stems. Uses beatLength, measureLength and measurePosition to decide +when to start and stop a beam. Overriding beaming is done through +@ref{Stem_engraver} properties stemLeftBeamCount and +stemRightBeamCount. +", +/* creats*/ "Beam", +/* acks */ "stem-interface rest-interface beam-interface bar-line-interface", +/* reads */ "noAutoBeaming autoBeamSettings", +/* write */ ""); diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 3c16796147..413f1b6789 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -28,11 +28,11 @@ protected: virtual Spanner* get_spanner_p () const; virtual void add_element (Grob*) ; public: - VIRTUAL_COPY_CONS (Translator); - Axis_group_engraver (); +TRANSLATOR_DECLARATIONS( + Axis_group_engraver ); }; -ADD_THIS_TRANSLATOR (Axis_group_engraver); + Axis_group_engraver::Axis_group_engraver () { @@ -94,7 +94,7 @@ Axis_group_engraver::finalize () void Axis_group_engraver::acknowledge_grob (Grob_info i) { - elts_.push (i.elem_l_); + elts_.push (i.grob_l_); } /* @@ -135,7 +135,7 @@ protected: virtual void acknowledge_grob (Grob_info); virtual void add_element (Grob *e); public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Hara_kiri_engraver); }; void @@ -157,10 +157,27 @@ void Hara_kiri_engraver::acknowledge_grob (Grob_info i) { Axis_group_engraver::acknowledge_grob (i); - if (Rhythmic_head::has_interface (i.elem_l_) - || i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) + if (Rhythmic_head::has_interface (i.grob_l_) + || i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) { - Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.elem_l_); + Hara_kiri_group_spanner::add_interesting_item (staffline_p_, i.grob_l_); } } -ADD_THIS_TRANSLATOR (Hara_kiri_engraver); + +Hara_kiri_engraver::Hara_kiri_engraver(){} + +ENTER_DESCRIPTION(Hara_kiri_engraver, +/* descr */ "Like Axis_group_engraver, but make a hara kiri spanner, and add +interesting items (ie. note heads, lyric syllables and normal rests) +", +/* creats*/ "HaraKiriVerticalGroup", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); + +ENTER_DESCRIPTION(Axis_group_engraver, +/* descr */ "Group all objects created in this context in a VerticalAxisGroup spanner.", +/* creats*/ "VerticalAxisGroup", +/* acks */ "grob-interface", +/* reads */ "VerticalExtent MinimumVerticalExtent ExtraVerticalExtent", +/* write */ ""); diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index f298b9f667..a070e4f411 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -22,8 +22,7 @@ class Bar_engraver : public Engraver { public: - Bar_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS( Bar_engraver ); void request_bar (String type_str); protected: @@ -111,4 +110,11 @@ Bar_engraver::stop_translation_timestep () typeset_bar (); } -ADD_THIS_TRANSLATOR (Bar_engraver); + +ENTER_DESCRIPTION(Bar_engraver, +/* descr */ "Create barlines. This engraver is controlled through the +@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point", +/* creats*/ "BarLine", +/* acks */ "", +/* reads */ "whichBar stavesFound", +/* write */ ""); diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 84646867d9..d995158924 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -29,10 +29,7 @@ protected: virtual void initialize (); virtual void create_grobs (); void create_items (); - -public: - VIRTUAL_COPY_CONS (Translator); - Bar_number_engraver (); + TRANSLATOR_DECLARATIONS( Bar_number_engraver ); }; @@ -59,7 +56,7 @@ Bar_number_engraver::create_grobs () } } -ADD_THIS_TRANSLATOR (Bar_number_engraver); + Bar_number_engraver::Bar_number_engraver () { @@ -80,11 +77,11 @@ Bar_number_engraver::initialize () void Bar_number_engraver::acknowledge_grob (Grob_info inf) { - Grob * s = inf.elem_l_; + Grob * s = inf.grob_l_; if (Staff_symbol::has_interface (s)) { SCM sts = get_property ("stavesFound"); - SCM thisstaff = inf.elem_l_->self_scm (); + SCM thisstaff = inf.grob_l_->self_scm (); if (scm_memq (thisstaff, sts) == SCM_BOOL_F) daddy_trans_l_->set_property ("stavesFound", gh_cons (thisstaff, sts)); } @@ -124,3 +121,10 @@ Bar_number_engraver::create_items () announce_grob (text_p_, 0); } +ENTER_DESCRIPTION(Bar_number_engraver, +/* descr */ "A bar number is created whenever measurePosition is zero. It is +put on top of all staves, and appears only at left side of the staff.", +/* creats*/ "BarNumber", +/* acks */ "staff-symbol-interface break-aligned-interface", +/* reads */ "currentBarNumber", +/* write */ ""); diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 122a7ecd3c..a927a75f05 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -51,8 +51,7 @@ protected: virtual void process_music (); public: - Beam_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS( Beam_engraver ); }; @@ -234,18 +233,18 @@ Beam_engraver::acknowledge_grob (Grob_info info) { if (beam_p_) { - if (Rest::has_interface (info.elem_l_)) + if (Rest::has_interface (info.grob_l_)) { - info.elem_l_->add_offset_callback (Beam::rest_collision_callback_proc, Y_AXIS); + info.grob_l_->add_offset_callback (Beam::rest_collision_callback_proc, Y_AXIS); } - else if (Stem::has_interface (info.elem_l_)) + else if (Stem::has_interface (info.grob_l_)) { Moment now = now_mom(); if(bool (now.grace_part_ ) != bool (beam_start_mom_.grace_part_)) return ; - Item *stem_l = dynamic_cast (info.elem_l_); + Item *stem_l = dynamic_cast (info.grob_l_); if (Stem::beam_l (stem_l)) return; @@ -285,5 +284,12 @@ Beam_engraver::acknowledge_grob (Grob_info info) -ADD_THIS_TRANSLATOR (Beam_engraver); + +ENTER_DESCRIPTION(Beam_engraver, +/* descr */ "Handles Beam_requests by engraving Beams. If omitted, then notes will be +printed with flags instead of beams.", +/* creats*/ "Beam", +/* acks */ "stem-interface rest-interface", +/* reads */ "beamMelismaBusy", +/* write */ ""); diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index 21551ad5b2..a463ba7bf0 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -25,13 +25,12 @@ protected: void add_column (SCM); public: - VIRTUAL_COPY_CONS (Translator); - Break_align_engraver (); + TRANSLATOR_DECLARATIONS(Break_align_engraver); }; -ADD_THIS_TRANSLATOR (Break_align_engraver); + void Break_align_engraver::add_column (SCM smob) @@ -87,7 +86,7 @@ Break_align_engraver::Break_align_engraver () void Break_align_engraver::acknowledge_grob (Grob_info inf) { - if (Item * item_l = dynamic_cast (inf.elem_l_)) + if (Item * item_l = dynamic_cast (inf.grob_l_)) { if (item_l->empty_b (X_AXIS) || item_l->parent_l (X_AXIS)) return; @@ -155,3 +154,9 @@ Break_align_engraver::acknowledge_grob (Grob_info inf) Axis_group_interface::add_element (group, item_l); } } +ENTER_DESCRIPTION(Break_align_engraver, +/* descr */ "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder", +/* creats*/ "BreakAlignment BreakAlignGroup LeftEdge", +/* acks */ "grob-interface", // break-aligned-interface ? +/* reads */ "breakAlignOrder", +/* write */ ""); diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index 709687ce28..b47d5b0358 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -140,7 +140,7 @@ Break_align_interface::do_alignment (Grob *me) } SCM symbol = ly_car (extra_space); - Real spc = gh_scm2double (gh_cadr (extra_space)); + Real spc = gh_scm2double (ly_cadr (extra_space)); dists.push (spc); symbol_list = gh_cons (symbol, symbol_list); diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index 4207c86683..a8d47464ae 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -24,8 +24,7 @@ TODO: class Breathing_sign_engraver : public Engraver { public: - Breathing_sign_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Breathing_sign_engraver); protected: virtual bool try_music (Music *req_l); @@ -87,4 +86,10 @@ Breathing_sign_engraver::start_translation_timestep () breathing_sign_req_l_ = 0; } -ADD_THIS_TRANSLATOR (Breathing_sign_engraver); + +ENTER_DESCRIPTION(Breathing_sign_engraver, +/* descr */ "", +/* creats*/ "BreathingSign", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index da58ffaaf1..61e1faab4b 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -21,9 +21,8 @@ class Chord_name_engraver : public Engraver { -public: - Chord_name_engraver (); - VIRTUAL_COPY_CONS (Translator); + + TRANSLATOR_DECLARATIONS( Chord_name_engraver); protected: virtual void stop_translation_timestep (); @@ -40,7 +39,7 @@ private: Protected_scm last_chord_; }; -ADD_THIS_TRANSLATOR (Chord_name_engraver); + Chord_name_engraver::Chord_name_engraver () { @@ -114,3 +113,10 @@ Chord_name_engraver::stop_translation_timestep () chord_ = gh_cons (SCM_EOL, gh_cons (SCM_EOL, SCM_EOL)); } +ENTER_DESCRIPTION(Chord_name_engraver, +/* descr */ "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req +and generate the appropriate chordname.", +/* creats*/ "ChordName", +/* acks */ "grob-interface", +/* reads */ "chordChanges", +/* write */ ""); diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 9a9017e663..50f16f5e5c 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -40,9 +40,7 @@ class Chord_tremolo_engraver : public Engraver { void typeset_beam (); -public: - VIRTUAL_COPY_CONS (Translator); - Chord_tremolo_engraver (); +TRANSLATOR_DECLARATIONS(Chord_tremolo_engraver); protected: Repeated_music * repeat_; @@ -159,9 +157,9 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info) { if (beam_p_) { - if (Stem::has_interface (info.elem_l_)) + if (Stem::has_interface (info.grob_l_)) { - Grob * s = info.elem_l_; + Grob * s = info.grob_l_; int f = Stem::flag_i (s); f = (f > 2) ? f - 2 : 1; Stem::set_beaming (s, f, LEFT); @@ -200,17 +198,17 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info) } } } - else if (stem_tremolo_ && Stem::has_interface (info.elem_l_)) + else if (stem_tremolo_ && Stem::has_interface (info.grob_l_)) { - Stem_tremolo::set_stem (stem_tremolo_, info.elem_l_); + Stem_tremolo::set_stem (stem_tremolo_, info.grob_l_); - info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_))); + info.grob_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_))); } - if (repeat_ && Note_head::has_interface (info.elem_l_)) + if (repeat_ && Note_head::has_interface (info.grob_l_)) { - info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_))); + info.grob_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_))); } } @@ -241,5 +239,11 @@ Chord_tremolo_engraver::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Chord_tremolo_engraver); + +ENTER_DESCRIPTION(Chord_tremolo_engraver, +/* descr */ "Generates beams for tremolo repeats.", +/* creats*/ "Beam", +/* acks */ "stem-interface note-head-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/chord.cc b/lily/chord.cc index abe879cdbd..82bfc297d7 100644 --- a/lily/chord.cc +++ b/lily/chord.cc @@ -27,7 +27,7 @@ ly_unique (SCM list) for (SCM i = list; gh_pair_p (i); i = ly_cdr (i)) { if (!gh_pair_p (ly_cdr (i)) - || !gh_equal_p (ly_car (i), gh_cadr (i))) + || !gh_equal_p (ly_car (i), ly_cadr (i))) unique = gh_cons (ly_car (i), unique); } return gh_reverse (unique); @@ -341,7 +341,7 @@ Chord::tonic_add_sub_to_pitches (SCM tonic, SCM add, SCM sub) missing = lower_step (tonic, missing, gh_int2scm (0)); /* if additions include any 3, don't add third */ - SCM third = gh_cadr (base_pitches (tonic)); + SCM third = ly_cadr (base_pitches (tonic)); if (member_notename (third, add) != SCM_BOOL_F) missing = scm_delete (third, missing); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index d16cb8a20b..4d2da95856 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -24,8 +24,7 @@ class Clef_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Clef_engraver (); + TRANSLATOR_DECLARATIONS(Clef_engraver); Direction octave_dir_; @@ -34,7 +33,6 @@ protected: virtual void start_translation_timestep (); virtual void process_music (); virtual void acknowledge_grob (Grob_info); - virtual void do_creation_processing (); private: Item * clef_p_; Item * octavate_p_; @@ -78,10 +76,10 @@ Clef_engraver::set_glyph () void Clef_engraver::acknowledge_grob (Grob_info info) { - Item * item =dynamic_cast (info.elem_l_); + Item * item =dynamic_cast (info.grob_l_); if (item) { - if (Bar::has_interface (info.elem_l_) + if (Bar::has_interface (info.grob_l_) && gh_string_p (get_property ("clefGlyph"))) create_clef (); @@ -135,18 +133,6 @@ Clef_engraver::process_music () inspect_clef_properties (); } -/* - this must be done in creation_proc() since grace notes will be - processed before Clef_engraver::prcoess_music() - - Grace notes and clef changes are still broken. -*/ -void -Clef_engraver::do_creation_processing () -{ - inspect_clef_properties (); -} - void Clef_engraver::inspect_clef_properties () { @@ -213,5 +199,11 @@ Clef_engraver::start_translation_timestep () { } -ADD_THIS_TRANSLATOR (Clef_engraver); + +ENTER_DESCRIPTION(Clef_engraver, +/* descr */ "Determine and set reference point for pitches", +/* creats*/ "Clef OctavateEight", +/* acks */ "bar-line-interface key-interface", +/* reads */ "clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility", +/* write */ ""); diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index ca18e2ddde..eb52ebd0f8 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -24,8 +24,7 @@ protected: virtual void create_grobs (); virtual void stop_translation_timestep (); public: - VIRTUAL_COPY_CONS (Translator); - Collision_engraver (); + TRANSLATOR_DECLARATIONS(Collision_engraver); }; @@ -50,13 +49,13 @@ Collision_engraver::create_grobs () void Collision_engraver::acknowledge_grob (Grob_info i) { - if (Note_column::has_interface (i.elem_l_)) + if (Note_column::has_interface (i.grob_l_)) { /*should check Y axis? */ - if (Note_column::rest_b (i.elem_l_) || i.elem_l_->parent_l (X_AXIS)) + if (Note_column::rest_b (i.grob_l_) || i.grob_l_->parent_l (X_AXIS)) return ; - note_column_l_arr_.push (i.elem_l_); + note_column_l_arr_.push (i.grob_l_); } } @@ -78,4 +77,10 @@ Collision_engraver::Collision_engraver () -ADD_THIS_TRANSLATOR (Collision_engraver); + +ENTER_DESCRIPTION(Collision_engraver, +/* descr */ "", +/* creats*/ "NoteCollision", +/* acks */ "note-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/collision.cc b/lily/collision.cc index 27b3363074..87d9a7671d 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -216,16 +216,16 @@ Collision::do_shifts (Grob* me) for (; gh_pair_p (hand); hand =ly_cdr (hand)) { - Grob * s = unsmob_grob (gh_caar (hand)); - Real amount = gh_scm2double (gh_cdar (hand)); + Grob * s = unsmob_grob (ly_caar (hand)); + Real amount = gh_scm2double (ly_cdar (hand)); s->translate_axis (amount *wid, X_AXIS); done.push (s); } for (; gh_pair_p (autos); autos =ly_cdr (autos)) { - Grob * s = unsmob_grob (gh_caar (autos)); - Real amount = gh_scm2double (gh_cdar (autos)); + Grob * s = unsmob_grob (ly_caar (autos)); + Real amount = gh_scm2double (ly_cdar (autos)); if (!done.find_l (s)) s->translate_axis (amount * wid, X_AXIS); diff --git a/lily/command-request.cc b/lily/command-request.cc index 93e1914010..51bb291202 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -29,8 +29,8 @@ Key_change_req::transpose (Pitch p) SCM pa = get_mus_property ("pitch-alist"); for (SCM s = pa; gh_pair_p (s); s = ly_cdr (s)) { - SCM key = gh_caar (s); - SCM alter = gh_cdar (s); + SCM key = ly_caar (s); + SCM alter = ly_cdar (s); if (gh_pair_p (key)) { Pitch orig (gh_scm2int (ly_car (key)), @@ -66,8 +66,8 @@ alist_equal_p (SCM a, SCM b) for (SCM s = a; gh_pair_p (s); s = ly_cdr (s)) { - SCM key = gh_caar (s); - SCM val = gh_cdar (s); + SCM key = ly_caar (s); + SCM val = ly_cdar (s); SCM l = scm_assoc (key, b); if (l == SCM_BOOL_F diff --git a/lily/custos-engraver.cc b/lily/custos-engraver.cc index 55c8c73f36..0763cd7431 100644 --- a/lily/custos-engraver.cc +++ b/lily/custos-engraver.cc @@ -23,13 +23,13 @@ class Custos_engraver : public Engraver { public: - Custos_engraver (); +TRANSLATOR_DECLARATIONS( Custos_engraver); virtual void start_translation_timestep (); virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); virtual void stop_translation_timestep (); virtual void finalize (); - VIRTUAL_COPY_CONS (Translator); + private: Item * create_custos (); @@ -69,12 +69,12 @@ Custos_engraver::start_translation_timestep () void Custos_engraver::acknowledge_grob (Grob_info info) { - Item *item = dynamic_cast (info.elem_l_); + Item *item = dynamic_cast (info.grob_l_); if (item) { - if (Bar::has_interface (info.elem_l_)) + if (Bar::has_interface (info.grob_l_)) custos_permitted = true; - else if (Note_head::has_interface (info.elem_l_)) + else if (Note_head::has_interface (info.grob_l_)) { /* @@ -142,5 +142,11 @@ Custos_engraver::finalize () custos_arr_.clear (); } -ADD_THIS_TRANSLATOR (Custos_engraver); + +ENTER_DESCRIPTION(Custos_engraver, +/* descr */ "", +/* creats*/ "Custos", +/* acks */ "bar-line-interface note-head-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 9dec1242c2..9523b7ea91 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -20,8 +20,8 @@ class Dot_column_engraver : public Engraver Grob * stem_; Link_array head_l_arr_; public: - VIRTUAL_COPY_CONS (Translator); - Dot_column_engraver (); + TRANSLATOR_DECLARATIONS( + Dot_column_engraver ); protected: virtual void acknowledge_grob (Grob_info); @@ -59,25 +59,31 @@ Dot_column_engraver::stop_translation_timestep () void Dot_column_engraver::acknowledge_grob (Grob_info info) { - Grob *d = unsmob_grob (info.elem_l_->get_grob_property ("dot")); + Grob *d = unsmob_grob (info.grob_l_->get_grob_property ("dot")); if (d) { if (!dotcol_) { dotcol_ = new Item (get_property ("DotColumn")); - - Dot_column::set_interface (dotcol_); announce_grob (dotcol_, 0); } - Dot_column::add_head (dotcol_, info.elem_l_); + Dot_column::add_head (dotcol_, info.grob_l_); } - else if (Stem::has_interface (info.elem_l_)) + else if (Stem::has_interface (info.grob_l_)) { - stem_ = info.elem_l_; + stem_ = info.grob_l_; } } -ADD_THIS_TRANSLATOR (Dot_column_engraver); + +ENTER_DESCRIPTION(Dot_column_engraver, +/* descr */ " Engraves dots on dotted notes shifted to the right of the note. +If omitted, then dots appear on top of the notes. +", +/* creats*/ "DotColumn", +/* acks */ "dot-column-interface stem-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 0023760277..ba07971a1a 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -16,10 +16,6 @@ #include "axis-group-interface.hh" #include "stem.hh" -void -Dot_column::set_interface (Grob* me) -{ -} MAKE_SCHEME_CALLBACK (Dot_column,force_shift_callback,2); SCM Dot_column::force_shift_callback (SCM element_smob, SCM axis) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 23ae1bd020..32dd5b23a4 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -56,9 +56,7 @@ class Dynamic_engraver : public Engraver void typeset_all (); -public: - VIRTUAL_COPY_CONS (Translator); - Dynamic_engraver (); +TRANSLATOR_DECLARATIONS(Dynamic_engraver ); protected: virtual void finalize (); @@ -69,7 +67,7 @@ protected: virtual void start_translation_timestep (); }; -ADD_THIS_TRANSLATOR (Dynamic_engraver); + Dynamic_engraver::Dynamic_engraver () @@ -399,14 +397,20 @@ Dynamic_engraver::typeset_all () void Dynamic_engraver::acknowledge_grob (Grob_info i) { - if (Note_column::has_interface (i.elem_l_)) + if (Note_column::has_interface (i.grob_l_)) { if (line_spanner_ /* Don't refill killed spanner */ && line_spanner_->immutable_property_alist_ != SCM_EOL) { - Side_position_interface::add_support (line_spanner_,i.elem_l_); - add_bound_item (line_spanner_,dynamic_cast (i.elem_l_)); + Side_position_interface::add_support (line_spanner_,i.grob_l_); + add_bound_item (line_spanner_,dynamic_cast (i.grob_l_)); } } } +ENTER_DESCRIPTION(Dynamic_engraver, +/* descr */ "", +/* creats*/ "DynamicLineSpanner DynamicText Hairpin TextSpanner", +/* acks */ "note-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 0b5d1b73b0..a08c500dce 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -22,10 +22,7 @@ class Dynamic_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - - Dynamic_performer (); - + TRANSLATOR_DECLARATIONS(Dynamic_performer); protected: virtual bool try_music (Music* req_l); virtual void stop_translation_timestep (); @@ -36,7 +33,7 @@ private: Audio_dynamic* audio_p_; }; -ADD_THIS_TRANSLATOR (Dynamic_performer); + Dynamic_performer::Dynamic_performer () { @@ -137,3 +134,5 @@ Dynamic_performer::try_music (Music* r) return false; } +ENTER_DESCRIPTION(Dynamic_performer, + "","","","",""); diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 3751625199..56fe566fca 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -13,9 +13,6 @@ #include "paper-score.hh" #include "grob.hh" - -ADD_THIS_TRANSLATOR (Engraver_group_engraver); - void Engraver_group_engraver::announce_grob (Grob_info info) { @@ -37,13 +34,40 @@ Engraver_group_engraver::create_grobs () } } +SCM find_acknowledge_engravers (SCM gravlist, SCM meta); void Engraver_group_engraver::acknowledge_grobs () { + if (!announce_info_arr_.size ()) + return ; + + SCM tab =get_property (ly_symbol2scm ("acknowledgeHashTable")); + SCM name_sym = ly_symbol2scm ("name"); + SCM meta_sym = ly_symbol2scm ("meta"); + + for (int j =0; j < announce_info_arr_.size (); j++) { Grob_info info = announce_info_arr_[j]; - for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p)) + + SCM meta = info.grob_l_->get_grob_property (meta_sym); + SCM nm = scm_assoc (name_sym, meta); + if (gh_pair_p (nm)) + nm = ly_cdr (nm); + else + { + assert (info.grob_l_->immutable_property_alist_ == SCM_EOL); + continue; + } + + SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED); + if (acklist == SCM_BOOL_F) + { + acklist= find_acknowledge_engravers (simple_trans_list_, meta); + scm_hashq_set_x (tab, nm, acklist); + } + + for (SCM p = acklist; gh_pair_p (p); p = ly_cdr (p)) { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); @@ -97,6 +121,55 @@ Engraver_group_engraver::process_music () } } +void find_all_acknowledge_engravers (SCM tab, SCM gravlist, SCM allgrobs); + +void +Engraver_group_engraver::initialize () +{ + SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); // magic -> + set_property (ly_symbol2scm ("acknowledgeHashTable"), tab); + + Translator_group::initialize (); +} + +Engraver_group_engraver::Engraver_group_engraver() {} +ENTER_DESCRIPTION(Engraver_group_engraver, +/* descr */ "A group of engravers taken together", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); + +/*****************/ + + +bool engraver_valid (Translator*tr, SCM ifaces) +{ + SCM ack_ifs = scm_assoc (ly_symbol2scm ("interfaces-acked"), tr->translator_description()); + ack_ifs = gh_cdr (ack_ifs); + for (SCM s = ifaces; ly_pair_p (s); s = ly_cdr (s)) + if (scm_memq (ly_car (s), ack_ifs) != SCM_BOOL_F) + return true; + return false; +} + + +SCM +find_acknowledge_engravers (SCM gravlist, SCM meta_alist) +{ + SCM ifaces = gh_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta_alist)); + + SCM l = SCM_EOL; + for (SCM s = gravlist; ly_pair_p (s); s = ly_cdr (s)) + { + Translator* tr = unsmob_translator (ly_car (s)); + if (engraver_valid (tr, ifaces)) + l = scm_cons (tr->self_scm (), l); + } + l = scm_reverse_x (l, SCM_EOL); + + return l; +} diff --git a/lily/engraver.cc b/lily/engraver.cc index 9059624ce6..9c5c936d90 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -56,3 +56,11 @@ Engraver::process_music () { } + +Engraver::Engraver() +{ +} + + +ENTER_DESCRIPTION(Engraver, + "", "", "", "", ""); diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index d3ae21945f..af30c3ed0f 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -33,8 +33,7 @@ class Extender_engraver : public Engraver Extender_req* req_l_; Spanner* extender_p_; public: - Extender_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Extender_engraver); protected: virtual void acknowledge_grob (Grob_info); @@ -48,7 +47,7 @@ private: }; -ADD_THIS_TRANSLATOR (Extender_engraver); + Extender_engraver::Extender_engraver () { @@ -62,14 +61,14 @@ void Extender_engraver::acknowledge_grob (Grob_info i) { // -> text_item - if (i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) + if (i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) { - current_lyric_l_ = i.elem_l_; + current_lyric_l_ = i.grob_l_; if (extender_p_ && !extender_p_->get_bound (RIGHT) ) { - Lyric_extender::set_textitem (extender_p_, RIGHT, dynamic_cast (i.elem_l_)); + Lyric_extender::set_textitem (extender_p_, RIGHT, dynamic_cast (i.grob_l_)); } } } @@ -142,3 +141,9 @@ Extender_engraver::start_translation_timestep () } +ENTER_DESCRIPTION(Extender_engraver, +/* descr */ "Create lyric extenders", +/* creats*/ "LyricExtender", +/* acks */ "lyric-syllable-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 5bad2d94fa..dc30cf3e2c 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -5,10 +5,8 @@ class Figured_bass_engraver : public Engraver { -public: - VIRTUAL_COPY_CONS(Translator); - Figured_bass_engraver(); - + + TRANSLATOR_DECLARATIONS(Figured_bass_engraver); protected: Link_array figures_; Rest_req * rest_req_; @@ -101,4 +99,9 @@ Figured_bass_engraver::process_music () } -ADD_THIS_TRANSLATOR(Figured_bass_engraver); +ENTER_DESCRIPTION(Figured_bass_engraver, +/* descr */ "Make volta brackets", +/* creats*/ "BassFigure", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/font-interface.cc b/lily/font-interface.cc index c50b4cb316..ec7fa8ffa7 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -200,7 +200,7 @@ Font_interface::properties_to_font_name (SCM fonts, SCM alist_chain) for (SCM s = fonts ; gh_pair_p (s); s = ly_cdr (s)) { - SCM qlist = gh_caar (s); + SCM qlist = ly_caar (s); if (name != SCM_BOOL_F) { @@ -231,7 +231,7 @@ Font_interface::properties_to_font_name (SCM fonts, SCM alist_chain) } - SCM qname = gh_cdar (s); + SCM qname = ly_cdar (s); return qname; } diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 4f5ba93be8..d22da509ee 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -86,7 +86,7 @@ Font_metric::Font_metric () smobify_self (); } -Font_metric::Font_metric (Font_metric const &s) +Font_metric::Font_metric (Font_metric const &) { } diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 56f1555d9d..a8554d4453 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -12,9 +12,8 @@ class Font_size_engraver : public Engraver { -public: - VIRTUAL_COPY_CONS(Translator); - Font_size_engraver (); + + TRANSLATOR_DECLARATIONS(Font_size_engraver); protected: virtual void acknowledge_grob (Grob_info gi); private: @@ -33,10 +32,17 @@ Font_size_engraver::acknowledge_grob (Grob_info gi) if (gh_number_p (sz) && gh_scm2int (sz) - && !gh_number_p (gi.elem_l_->get_grob_property ("font-relative-size"))) + && !gh_number_p (gi.grob_l_->get_grob_property ("font-relative-size"))) { - gi.elem_l_->set_grob_property ("font-relative-size", sz); + gi.grob_l_->set_grob_property ("font-relative-size", sz); } } -ADD_THIS_TRANSLATOR(Font_size_engraver); + + +ENTER_DESCRIPTION(Font_size_engraver, +/* descr */ "Puts fontSize into font-relative-size grob property.", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "fontSize", +/* write */ ""); diff --git a/lily/grob-info.cc b/lily/grob-info.cc index c2ed5bd013..542e9698bb 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -13,7 +13,7 @@ Grob_info::Grob_info (Grob*s_l, Music *r_l) { - elem_l_ = s_l; + grob_l_ = s_l; req_l_ = r_l; origin_trans_l_ = 0; } @@ -21,7 +21,7 @@ Grob_info::Grob_info (Grob*s_l, Music *r_l) Grob_info::Grob_info () { - elem_l_ = 0; + grob_l_ = 0; req_l_ = 0; origin_trans_l_ = 0; } diff --git a/lily/grob.cc b/lily/grob.cc index cdc887eab9..f1f80e720a 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -387,6 +387,12 @@ Grob::handle_broken_grobs (SCM src, SCM criterion) /* now: sc && sc->line_l () == line */ if (!line + /* + This was introduced in 1.3.49 as a measure to prevent + programming errors. It looks expensive (?). TODO: + benchmark , document when (what kind of programming + errors) this happens. + */ || (sc->common_refpoint (line, X_AXIS) && sc->common_refpoint (line, Y_AXIS))) { @@ -672,7 +678,7 @@ Grob::name () const SCM meta = get_grob_property ("meta"); SCM nm = scm_assoc (ly_symbol2scm ("name"), meta); nm = (gh_pair_p (nm)) ? ly_cdr (nm) : SCM_EOL; - return gh_string_p (nm) ?ly_scm2string (nm) : classname (this); + return gh_symbol_p (nm) ? ly_symbol2string (nm) : classname (this); } void diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index d7ebcea02e..2143ea9d9a 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -27,8 +27,7 @@ class Hyphen_engraver : public Engraver Hyphen_req* req_l_; Spanner* hyphen_p_; public: - Hyphen_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Hyphen_engraver); protected: virtual void acknowledge_grob (Grob_info); @@ -41,7 +40,7 @@ private: }; -ADD_THIS_TRANSLATOR (Hyphen_engraver); + Hyphen_engraver::Hyphen_engraver () { @@ -55,14 +54,14 @@ void Hyphen_engraver::acknowledge_grob (Grob_info i) { // -> text-item - if (i.elem_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) + if (i.grob_l_->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) { - current_lyric_l_ = i.elem_l_; + current_lyric_l_ = i.grob_l_; if (hyphen_p_ && !hyphen_p_->get_bound (RIGHT) ) { - Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, i.elem_l_); + Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, i.grob_l_); } } } @@ -134,3 +133,9 @@ Hyphen_engraver::start_translation_timestep () } +ENTER_DESCRIPTION(Hyphen_engraver, +/* descr */ "Create lyric hyphens", +/* creats*/ "LyricHyphen", +/* acks */ "lyric-syllable-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index 6bd445c4d4..65eb4c5a75 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -20,7 +20,7 @@ class Dot_column // interface public: static int compare (Grob * const&,Grob * const&); static void add_head (Grob * dotcol, Grob* rh ); - static void set_interface (Grob*); + static bool has_interface (Grob*); DECLARE_SCHEME_CALLBACK (force_shift_callback, (SCM ,SCM)); DECLARE_SCHEME_CALLBACK (side_position, (SCM ,SCM)); diff --git a/lily/include/engraver-group-engraver.hh b/lily/include/engraver-group-engraver.hh index 9b7c69d50c..5f0f5c6439 100644 --- a/lily/include/engraver-group-engraver.hh +++ b/lily/include/engraver-group-engraver.hh @@ -31,8 +31,9 @@ protected: public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Engraver_group_engraver); + virtual void initialize (); virtual void do_announces (); virtual void announce_grob (Grob_info); virtual void process_music (); diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index 66475cd36e..279b60511c 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -49,12 +49,11 @@ protected: virtual void announce_grob (Grob_info); virtual void process_music (); public: - VIRTUAL_COPY_CONS (Translator); Engraver_group_engraver * daddy_grav_l () const; /** override other ctor */ - Engraver () {} + TRANSLATOR_DECLARATIONS(Engraver); }; diff --git a/lily/include/grob-info.hh b/lily/include/grob-info.hh index 4e00958060..f758b36944 100644 --- a/lily/include/grob-info.hh +++ b/lily/include/grob-info.hh @@ -23,10 +23,9 @@ struct Grob_info { friend class Engraver; public: Link_array origin_trans_l_arr (Translator*) const; - Grob * elem_l_; + Grob * grob_l_; Music *req_l_; - Grob_info (Grob*, Music*); Grob_info (); }; diff --git a/lily/include/line-group-group-engraver.hh b/lily/include/line-group-group-engraver.hh index 49751d8b08..e6bbe25b7e 100644 --- a/lily/include/line-group-group-engraver.hh +++ b/lily/include/line-group-group-engraver.hh @@ -18,7 +18,8 @@ DEPRECATED. */ -class Line_group_engraver_group : public Engraver_group_engraver { +class Line_group_engraver_group : public Engraver_group_engraver +{ protected: Spanner *staffline_p_; @@ -27,9 +28,7 @@ protected: virtual void finalize (); virtual void typeset_grob (Grob*); public: - VIRTUAL_COPY_CONS (Translator); - - Line_group_engraver_group (); + TRANSLATOR_DECLARATIONS(Line_group_engraver_group); }; diff --git a/lily/include/lyric-phrasing-engraver.hh b/lily/include/lyric-phrasing-engraver.hh index 68996710f9..269d5a9658 100644 --- a/lily/include/lyric-phrasing-engraver.hh +++ b/lily/include/lyric-phrasing-engraver.hh @@ -74,9 +74,9 @@ private: Syllable_group * lookup_context_id (const String &context_id); public: - Lyric_phrasing_engraver (); + ~Lyric_phrasing_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS( Lyric_phrasing_engraver); private: /** association list of Syllable_group smobs diff --git a/lily/include/performer-group-performer.hh b/lily/include/performer-group-performer.hh index 2f05ae6604..891271b499 100644 --- a/lily/include/performer-group-performer.hh +++ b/lily/include/performer-group-performer.hh @@ -19,8 +19,8 @@ class Performer_group_performer : public Performer, public virtual Translator_group { public: - VIRTUAL_COPY_CONS (Translator); - + TRANSLATOR_DECLARATIONS(Performer_group_performer); + virtual void do_announces (); virtual void announce_element (Audio_element_info); protected: diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh index 815f04c05e..74631131bc 100644 --- a/lily/include/score-engraver.hh +++ b/lily/include/score-engraver.hh @@ -31,11 +31,11 @@ class Score_engraver : void typeset_all (); public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Score_engraver); Paper_score * pscore_p_; void forbid_breaks (); - Score_engraver (); + virtual Music_output *get_output_p (); protected: virtual void prepare (Moment); diff --git a/lily/include/score-performer.hh b/lily/include/score-performer.hh index 09097470a6..2539c6d5a4 100644 --- a/lily/include/score-performer.hh +++ b/lily/include/score-performer.hh @@ -18,9 +18,7 @@ class Score_performer: public Performer_group_performer, public Global_translator { public: - VIRTUAL_COPY_CONS (Translator); - - Score_performer (); + TRANSLATOR_DECLARATIONS(Score_performer); ~Score_performer (); Performance *performance_p_; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index edc09238fa..1e61749356 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -49,7 +49,6 @@ public: Translator_group (Translator_group const &); Translator_group (); void add_group_translator (Translator *trans_p); - /// Score_register = 0, Staff_registers = 1, etc) Translator_group* ancestor_l (int l=1); @@ -63,9 +62,8 @@ public: Translator_group *find_existing_translator_l (String n, String id); Translator_group *find_create_translator_l (String n, String id); Link_array path_to_acceptable_translator (String alias, Music_output_def*) const; - Translator_group*get_default_interpreter (); - + public: bool try_music_on_nongroup_children (Music *m); @@ -76,7 +74,6 @@ public: virtual void initialize (); virtual void finalize (); virtual void each (Method_pointer); - }; #endif // TRANSLATOR_GROUP_HH diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 112c21496f..9877495be1 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -19,6 +19,14 @@ #include "input.hh" #include "smobs.hh" +#define TRANSLATOR_DECLARATIONS(NAME) \ +public: \ + NAME();\ + VIRTUAL_COPY_CONS (Translator); \ + static SCM static_description_; \ + virtual SCM static_translator_description () const; \ + virtual SCM translator_description () const; + /** Make some kind of #Element#s from Requests. Elements are made by hierarchically grouped #Translator#s */ @@ -28,16 +36,15 @@ public: Music_output_def * output_def_l_; String type_str_; - virtual const char *name () const; bool is_alias_b (String) const; - VIRTUAL_COPY_CONS (Translator); + Translator (Translator const &); - Translator (); + Translator_group * daddy_trans_l_ ; - - + DECLARE_SCHEME_CALLBACK(name, (SCM trans)); + DECLARE_SCHEME_CALLBACK(description,(SCM trans)); void announces (); void removal_processing (); @@ -60,8 +67,9 @@ public: SCM properties_scm_; DECLARE_SMOBS (Translator, dummy); -public: +public: + TRANSLATOR_DECLARATIONS(Translator); /** try to fit the request in this engraver @@ -84,15 +92,52 @@ public: A macro to automate administration of translators. */ #define ADD_THIS_TRANSLATOR(T) \ +SCM T::static_description_ = SCM_EOL;\ static void _ ## T ## _adder () {\ T *t = new T;\ + T::static_description_ = t->static_translator_description ();\ + scm_permanent_object (T::static_description_);\ t->type_str_ = classname (t);\ add_translator (t);\ }\ +SCM T::translator_description() const\ +{ \ + return static_description_;\ +}\ ADD_GLOBAL_CTOR (_ ## T ## _adder); + +#define ENTER_DESCRIPTION(classname,desc,grobs,acked,read,write) \ +ADD_THIS_TRANSLATOR (classname);\ +SCM \ +classname::static_translator_description () const \ +{ \ + SCM static_properties= SCM_EOL; \ + /* static_properties= acons (name ,gh_str02scm (Translator::name (self_scm ())), \ + static_properties_); \ + */ \ + static_properties= scm_acons (ly_symbol2scm ("grobs-created"), \ + parse_symbol_list (grobs), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("description"), \ + ly_str02scm (desc), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("interfaces-acked"), \ + parse_symbol_list (acked), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("properties-read"), \ + parse_symbol_list (read), static_properties); \ + \ + static_properties= scm_acons (ly_symbol2scm ("properties-written"), \ + parse_symbol_list (write), static_properties); \ + \ + return static_properties; \ +} + + + extern Dictionary *global_translator_dict_p; void add_translator (Translator*trans_p); diff --git a/lily/include/type-swallow-translator.hh b/lily/include/type-swallow-translator.hh index b352473e4e..4179e7cc34 100644 --- a/lily/include/type-swallow-translator.hh +++ b/lily/include/type-swallow-translator.hh @@ -24,15 +24,19 @@ public: VIRTUAL_COPY_CONS (Translator); }; -#define DECLARE_REQUEST_SWALLOWER(TYPE) \ -struct TYPE ## _swallow_translator : public Type_swallow_translator {\ - TYPE ## _swallow_translator () { \ - swallow_str_ = #TYPE;\ - }\ - \ - VIRTUAL_COPY_CONS (Translator);\ -};\ -ADD_THIS_TRANSLATOR (TYPE ## _swallow_translator);\ +#define DECLARE_REQUEST_SWALLOWER(TYPE) \ +struct TYPE ## _swallow_translator : public Type_swallow_translator { \ + TRANSLATOR_DECLARATIONS (TYPE ## _swallow_translator); \ +}; \ + TYPE ## _swallow_translator :: TYPE ## _swallow_translator() {\ + swallow_str_ = #TYPE; \ + } \ +ENTER_DESCRIPTION(TYPE ## _swallow_translator, \ + "Swallow requests of " #TYPE " type.", \ + "", \ + "", \ + "", \ + ""); #endif // TYPESWALLOW_GRAV_HH diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index c98bbdd7e9..0f5e9bbbd1 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -23,14 +23,14 @@ class Instrument_name_engraver : public Engraver void create_text (SCM s); public: - VIRTUAL_COPY_CONS (Translator); - Instrument_name_engraver (); + TRANSLATOR_DECLARATIONS(Instrument_name_engraver); + virtual void initialize (); virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); }; -ADD_THIS_TRANSLATOR (Instrument_name_engraver); + Instrument_name_engraver::Instrument_name_engraver () { @@ -77,7 +77,7 @@ Instrument_name_engraver::create_text (SCM txt) void Instrument_name_engraver::acknowledge_grob (Grob_info i) { - if (Bar::has_interface (i.elem_l_)) + if (Bar::has_interface (i.grob_l_)) { SCM s = get_property ("instrument"); @@ -91,8 +91,8 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) create_text (s); } - if (dynamic_cast (i.elem_l_) - && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))) + if (dynamic_cast (i.grob_l_) + && i.grob_l_->has_interface (ly_symbol2scm ("dynamic-interface"))) return; /* @@ -102,12 +102,12 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) therefore the location of its refpoint won't be very useful. */ - if (dynamic_cast (i.elem_l_) - && ((Axis_group_interface::has_interface (i.elem_l_) - && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS))) - && !Align_interface::has_interface (i.elem_l_)) + if (dynamic_cast (i.grob_l_) + && ((Axis_group_interface::has_interface (i.grob_l_) + && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS))) + && !Align_interface::has_interface (i.grob_l_)) { - SCM nl = gh_cons (i.elem_l_->self_scm (), + SCM nl = gh_cons (i.grob_l_->self_scm (), get_property ("instrumentSupport")); daddy_trans_l_->set_property ("instrumentSupport", nl); @@ -117,3 +117,12 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) +ENTER_DESCRIPTION(Instrument_name_engraver, +/* descr */ " Prints the name of the instrument (specified by +@code{Staff.instrument} and @code{Staff.instr}) +at the left of the +staff.", +/* creats*/ "InstrumentName", +/* acks */ "bar-line-interface axis-group-interface", +/* reads */ "instrument instr", +/* write */ ""); diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 37b215fbd6..17ffce3237 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -28,9 +28,7 @@ class Key_engraver : public Engraver void read_req (Key_change_req const * r); public: - Key_engraver (); - - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Key_engraver); Key_change_req * keyreq_l_; Item * item_p_; @@ -111,7 +109,7 @@ Key_engraver::try_music (Music * req_l) void Key_engraver::acknowledge_grob (Grob_info info) { - if (Clef::has_interface (info.elem_l_)) + if (Clef::has_interface (info.grob_l_)) { SCM c = get_property ("createKeyOnClefChange"); if (to_boolean (c)) @@ -119,7 +117,7 @@ Key_engraver::acknowledge_grob (Grob_info info) create_key (false); } } - else if (Bar::has_interface (info.elem_l_) + else if (Bar::has_interface (info.grob_l_) && gh_pair_p (get_property ("keySignature"))) { create_key (true); @@ -165,7 +163,7 @@ Key_engraver::read_req (Key_change_req const * r) } } for (SCM s = n ; gh_pair_p (s); s = ly_cdr (s)) - if (gh_scm2int (gh_cdar (s))) + if (gh_scm2int (ly_cdar (s))) accs = gh_cons (ly_car (s), accs); old_accs_ = get_property ("keySignature"); @@ -187,5 +185,11 @@ Key_engraver::initialize () } -ADD_THIS_TRANSLATOR (Key_engraver); + +ENTER_DESCRIPTION(Key_engraver, +/* descr */ "", +/* creats*/ "KeySignature", +/* acks */ "bar-line-interface clef-interface", +/* reads */ "keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature", +/* write */ ""); diff --git a/lily/key-item.cc b/lily/key-item.cc index 713ae61e27..563910435f 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -103,8 +103,8 @@ Key_item::brew_molecule (SCM smob) for (SCM s = newas; gh_pair_p (s); s = ly_cdr (s)) { - SCM what = gh_caar (s); - int alter = gh_scm2int (gh_cdar (s)); + SCM what = ly_caar (s); + int alter = gh_scm2int (ly_cdar (s)); int pos = alteration_pos (what, alter, c0p); Molecule m = Font_interface::get_default_font (me)-> @@ -135,11 +135,11 @@ Key_item::brew_molecule (SCM smob) for (; gh_pair_p (old); old = ly_cdr (old)) { - SCM found = scm_assoc (gh_caar (old), newas); + SCM found = scm_assoc (ly_caar (old), newas); if (found == SCM_BOOL_F - || ly_cdr (found) != gh_cdar (old)) + || ly_cdr (found) != ly_cdar (old)) { - SCM what = gh_caar (old); + SCM what = ly_caar (old); int alter = 0; int pos = alteration_pos (what, alter, c0p); diff --git a/lily/key-performer.cc b/lily/key-performer.cc index e945412924..22a3f2c84a 100644 --- a/lily/key-performer.cc +++ b/lily/key-performer.cc @@ -14,9 +14,7 @@ class Key_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - - Key_performer (); + TRANSLATOR_DECLARATIONS(Key_performer); ~Key_performer (); protected: @@ -29,8 +27,6 @@ private: Audio_key* audio_p_; }; -ADD_THIS_TRANSLATOR (Key_performer); - Key_performer::Key_performer () { key_req_l_ = 0; @@ -83,3 +79,4 @@ Key_performer::try_music (Music* req_l) return false; } +ENTER_DESCRIPTION(Key_performer,"","","","",""); diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 278dac3694..12b259ea83 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -166,7 +166,8 @@ ly_gulp_file (SCM fn) void read_lily_scm_file (String fn) { - scm_c_eval_string ((char *) gulp_file_to_string (fn).ch_C ()); + gh_eval_str ((char *) gulp_file_to_string (fn).ch_C ()); + // scm_c_eval_string ((char *) gulp_file_to_string (fn).ch_C ()); } extern "C" { @@ -446,7 +447,7 @@ ly_version () { char const* vs = "\' (" MAJOR_VERSION " " MINOR_VERSION " " PATCH_LEVEL " " MY_PATCH_LEVEL ")" ; - return scm_c_eval_string ((char*)vs); + return gh_eval_str ((char*)vs); } static void @@ -499,3 +500,29 @@ ly_assoc_chain (SCM key, SCM achain) else return SCM_BOOL_F; } + +/* + LIST has the form "sym1 sym2 sym3" + */ +SCM +parse_symbol_list (const char * list) +{ + char * s = strdup (list); + char *orig = s; + SCM create_list = SCM_EOL; + if (!s[0] ) + s = 0; + + while (s) + { + char *next = strchr (s, ' '); + if (next) + *next++ = 0; + + create_list = gh_cons (ly_symbol2scm (s), create_list); + s = next; + } + + free (orig); + return create_list; +} diff --git a/lily/line-group-group-engraver.cc b/lily/line-group-group-engraver.cc index d637cdeedd..14f55b6742 100644 --- a/lily/line-group-group-engraver.cc +++ b/lily/line-group-group-engraver.cc @@ -61,8 +61,10 @@ Line_group_engraver_group::create_line_spanner () Axis_group_interface::set_axes (staffline_p_, Y_AXIS,Y_AXIS); } - - - -ADD_THIS_TRANSLATOR (Line_group_engraver_group); +ENTER_DESCRIPTION(Line_group_engraver_group, + "", + "", + "", + "", + ""); diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index b0a042b7c6..e82b544481 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -247,22 +247,22 @@ Line_of_score::output_molecule (SCM expr, Offset o) gh_int2scm (ip->line_number ()), gh_int2scm (ip->column_number ()), SCM_UNDEFINED)); - expr = gh_cadr (expr); + expr = ly_cadr (expr); } else if (head == no_origin_sym) { pscore_l_->outputter_l_->output_scheme (scm_list_n (no_origin_sym, SCM_UNDEFINED)); - expr = gh_cadr (expr); + expr = ly_cadr (expr); } else if (head == offset_sym) { - o += ly_scm2offset (gh_cadr (expr)); - expr = gh_caddr (expr); + o += ly_scm2offset (ly_cadr (expr)); + expr = ly_caddr (expr); } else if (head == combine_sym) { - output_molecule (gh_cadr (expr), o); - expr = gh_caddr (expr); + output_molecule (ly_cadr (expr), o); + expr = ly_caddr (expr); } else { diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index 274883c15a..8ef57ed105 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -33,7 +33,7 @@ struct Local_key_engraver : Engraver { Item *key_item_p_; protected: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Local_key_engraver); virtual void process_music (); virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); @@ -55,13 +55,12 @@ public: Link_array support_l_arr_; Link_array forced_l_arr_; Link_array tie_l_arr_; - Local_key_engraver (); + }; Local_key_engraver::Local_key_engraver () { key_item_p_ =0; - last_keysig_ = SCM_EOL; } @@ -242,18 +241,18 @@ Local_key_engraver::acknowledge_grob (Grob_info info) { Note_req * note_l = dynamic_cast (info.req_l_); - if (note_l && Rhythmic_head::has_interface (info.elem_l_)) + if (note_l && Rhythmic_head::has_interface (info.grob_l_)) { mel_l_arr_.push (note_l); - support_l_arr_.push (info.elem_l_); + support_l_arr_.push (info.grob_l_); } - else if (Tie::has_interface (info.elem_l_)) + else if (Tie::has_interface (info.grob_l_)) { - tie_l_arr_.push (info.elem_l_); + tie_l_arr_.push (info.grob_l_); } - else if (Arpeggio::has_interface (info.elem_l_)) + else if (Arpeggio::has_interface (info.grob_l_)) { - arpeggios_.push (info.elem_l_); + arpeggios_.push (info.grob_l_); } } @@ -286,5 +285,13 @@ Local_key_engraver::process_music () -ADD_THIS_TRANSLATOR (Local_key_engraver); + +ENTER_DESCRIPTION(Local_key_engraver, +/* descr */ "Make accidentals. Catches note heads, ties and notices key-change +events. Due to interaction with ties (which don't come together +with note heads), this needs to be in a context higher than Tie_engraver. FIXME", +/* creats*/ "Accidentals", +/* acks */ "rhythmic-head-interface tie-interface arpeggio-interface", +/* reads */ "localKeySignature forgetAccidentals noResetKey", +/* write */ ""); diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index aefaee8e8c..ff01726169 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -87,17 +87,17 @@ Local_key_item::after_line_breaking (SCM smob) for (SCM s = accs; gh_pair_p (s); s = ly_cdr (s)) { - SCM opts = gh_cdar (s); + SCM opts = ly_cdar (s); SCM t = scm_memq (ly_symbol2scm ("tie-break-reminder"), opts); if (t != SCM_BOOL_F) { - Grob *tie = unsmob_grob (gh_cadr (t)); + Grob *tie = unsmob_grob (ly_cadr (t)); Spanner *sp = dynamic_cast (tie); if (!sp->original_l_) { /* there should be a better way to delete part of me */ - scm_set_car_x (s, scm_list_n (gh_caar (s), + scm_set_car_x (s, scm_list_n (ly_caar (s), ly_symbol2scm ("deleted"), SCM_UNDEFINED)); me->set_grob_property ("molecule", SCM_EOL); @@ -144,8 +144,8 @@ Local_key_item::brew_molecule (SCM smob) for (SCM s = accs; gh_pair_p (s); s = ly_cdr (s)) { - Pitch p (*unsmob_pitch (gh_caar (s))); - SCM opts = gh_cdar (s); + Pitch p (*unsmob_pitch (ly_caar (s))); + SCM opts = ly_cdar (s); if (scm_memq (ly_symbol2scm ("deleted"), opts) != SCM_BOOL_F) continue; diff --git a/lily/lookup.cc b/lily/lookup.cc index 6504472983..036ba88959 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -371,5 +371,5 @@ Lookup::repeat_slash (Real w, Real s, Real t) Box b (Interval (0, w + sqrt (sqr(t/s) + sqr (t))), Interval (0, w * s)); - return Molecule (b, slashnodot); + return Molecule (b, slashnodot); // http://slashnodot.org } diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 929ebf8191..3b2e7b31c3 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -27,15 +27,13 @@ protected: virtual void start_translation_timestep (); public: - Lyric_engraver (); - VIRTUAL_COPY_CONS (Translator); - + TRANSLATOR_DECLARATIONS(Lyric_engraver); private: Lyric_req * req_l_; Item* text_p_; }; -ADD_THIS_TRANSLATOR (Lyric_engraver); + Lyric_engraver::Lyric_engraver () @@ -97,3 +95,9 @@ Lyric_engraver::start_translation_timestep () } +ENTER_DESCRIPTION(Lyric_engraver, +/* descr */ "", +/* creats*/ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index db78f744fe..c8e1acac02 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -14,9 +14,7 @@ class Lyric_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - Lyric_performer (); - + TRANSLATOR_DECLARATIONS(Lyric_performer); protected: virtual bool try_music (Music* req_l); @@ -28,7 +26,8 @@ private: Audio_text* audio_p_; }; -ADD_THIS_TRANSLATOR (Lyric_performer); + + Lyric_performer::Lyric_performer () { @@ -74,3 +73,4 @@ Lyric_performer::try_music (Music* req_l) return false; } +ENTER_DESCRIPTION(Lyric_performer,"","","","",""); diff --git a/lily/lyric-phrasing-engraver.cc b/lily/lyric-phrasing-engraver.cc index a335ca7f61..fd5625551c 100644 --- a/lily/lyric-phrasing-engraver.cc +++ b/lily/lyric-phrasing-engraver.cc @@ -16,7 +16,7 @@ String get_context_id (Translator_group * ancestor, const char * type); String trim_suffix (String &id); -ADD_THIS_TRANSLATOR (Lyric_phrasing_engraver); + /* TODO: this code is too hairy, and does things that should be in the @@ -108,13 +108,13 @@ Lyric_phrasing_engraver::lookup_context_id (const String &context_id) if (! (gh_boolean_p (s) && !to_boolean (s))) { /* match found */ // (key . ((alist_entry . old_entry) . previous_entry)) - if (to_boolean (gh_cdadr (s))) { // it's an old entry ... make it a new one - SCM val = gh_cons (gh_cons (gh_caadr (s), SCM_BOOL_F), gh_cddr (s)); + if (to_boolean (ly_cdadr (s))) { // it's an old entry ... make it a new one + SCM val = gh_cons (gh_cons (ly_caadr (s), SCM_BOOL_F), ly_cddr (s)); voice_alist_ = scm_assoc_set_x (voice_alist_, ly_car (s), val); - return unsmob_voice_entry (gh_caar (val)); + return unsmob_voice_entry (ly_caar (val)); } else { // the entry is current ... return it. - SCM entry_scm = gh_caadr (s); + SCM entry_scm = ly_caadr (s); return unsmob_voice_entry (entry_scm); } } @@ -124,7 +124,7 @@ Lyric_phrasing_engraver::lookup_context_id (const String &context_id) Syllable_group::make_entry ()); voice_alist_ = scm_acons (key, val, voice_alist_); - return unsmob_voice_entry (gh_caar (val)); + return unsmob_voice_entry (ly_caar (val)); } @@ -154,7 +154,7 @@ Lyric_phrasing_engraver::record_extender (const String &context_id, Grob * exten if (! (gh_boolean_p (s) && !to_boolean (s))) { /* match found */ // (key . ((alist_entry . old_entry) . previous_entry)) - SCM previous_scm = gh_cddr (s); + SCM previous_scm = ly_cddr (s); if (previous_scm != SCM_EOL) { Syllable_group * v = unsmob_voice_entry (previous_scm); v->add_extender (extender); @@ -178,7 +178,7 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i) return; - Grob *h = i.elem_l_; + Grob *h = i.grob_l_; if (Note_head::has_interface (h)) { /* caught a note head ... do something with it */ @@ -266,10 +266,10 @@ void Lyric_phrasing_engraver::create_grobs () punc = gh_string_p (sp) ? ly_scm2string (sp) : ".,;:?!\""; for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) { - SCM v_entry = gh_cdar (v); + SCM v_entry = ly_cdar (v); // ((current . oldflag) . previous) - if (!to_boolean (gh_cdar (v_entry))) { // not an old entry left over from a prior note ... - Syllable_group *entry = unsmob_voice_entry (gh_caar (v_entry)); + if (!to_boolean (ly_cdar (v_entry))) { // not an old entry left over from a prior note ... + Syllable_group *entry = unsmob_voice_entry (ly_caar (v_entry)); /* TODO: give context for warning. @@ -297,17 +297,17 @@ void Lyric_phrasing_engraver::stop_translation_timestep () { for (SCM v=voice_alist_; gh_pair_p (v); v = ly_cdr (v)) { - SCM entry_scm = gh_cdar (v); + SCM entry_scm = ly_cdar (v); // ((alist_entry . entry_is_old) . previous_entry) - Syllable_group * entry = unsmob_voice_entry (gh_caar (entry_scm)); + Syllable_group * entry = unsmob_voice_entry (ly_caar (entry_scm)); // set previous_entry, set entry_is_old, and resave it to alist_ // but only change if this current was not old. - if (! to_boolean (gh_cdar (entry_scm))) { + if (! to_boolean (ly_cdar (entry_scm))) { Syllable_group * previous_entry = unsmob_voice_entry (ly_cdr (entry_scm)); previous_entry->copy (entry); - entry_scm = gh_cons (gh_cons (gh_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm)); - voice_alist_ = scm_assoc_set_x (voice_alist_, gh_caar (v), entry_scm); + entry_scm = gh_cons (gh_cons (ly_caar (entry_scm), SCM_BOOL_T), ly_cdr (entry_scm)); + voice_alist_ = scm_assoc_set_x (voice_alist_, ly_caar (v), entry_scm); } entry->next_lyric (); } @@ -316,3 +316,9 @@ Lyric_phrasing_engraver::stop_translation_timestep () +ENTER_DESCRIPTION(Lyric_phrasing_engraver, +/* descr */ "", +/* creats*/ "", +/* acks */ "lyric-syllable-interface note-head-interface lyric-extender-interface", +/* reads */ "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation", +/* write */ ""); diff --git a/lily/main.cc b/lily/main.cc index 226d054d78..50725df2cb 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -324,7 +324,7 @@ main_prog (void * closure, int, char**) all_fonts_global_p = new All_font_metrics (global_path.str ()); init_scheme_code_string += ")"; - scm_c_eval_string ((char *)init_scheme_code_string.ch_C()); + gh_eval_str ((char *)init_scheme_code_string.ch_C()); int p=0; const char *arg = oparser_p_static->get_next_arg (); diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index faaa30c800..1a366e68b4 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -28,8 +28,7 @@ class Mark_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Mark_engraver (); + TRANSLATOR_DECLARATIONS(Mark_engraver); protected: Item* text_p_; @@ -47,7 +46,7 @@ private: }; -ADD_THIS_TRANSLATOR (Mark_engraver); + Mark_engraver::Mark_engraver () @@ -63,15 +62,23 @@ Mark_engraver::initialize () } + + +/* + +which grobs carry INVISIBLE-STAFF ? + +*/ + void Mark_engraver::acknowledge_grob (Grob_info inf) { - Grob * s = inf.elem_l_; + Grob * s = inf.grob_l_; if (Staff_symbol::has_interface (s) || to_boolean (s->get_grob_property ("invisible-staff"))) { SCM sts = get_property ("stavesFound"); - SCM thisstaff = inf.elem_l_->self_scm (); + SCM thisstaff = inf.grob_l_->self_scm (); if (scm_memq (thisstaff, sts) == SCM_BOOL_F) daddy_trans_l_->set_property ("stavesFound", gh_cons (thisstaff, sts)); } @@ -208,3 +215,9 @@ Mark_engraver::process_music () } } +ENTER_DESCRIPTION(Mark_engraver, +/* descr */ "", +/* creats*/ "RehearsalMark", +/* acks */ "grob-interface", +/* reads */ "rehearsalMark stavesFound", +/* write */ ""); diff --git a/lily/melisma-engraver.cc b/lily/melisma-engraver.cc index 83f0773876..fab89dcd9c 100644 --- a/lily/melisma-engraver.cc +++ b/lily/melisma-engraver.cc @@ -18,11 +18,11 @@ class Melisma_engraver:public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Melisma_engraver); bool try_music (Music *); }; -ADD_THIS_TRANSLATOR (Melisma_engraver); + bool Melisma_engraver::try_music (Music *m) @@ -46,3 +46,12 @@ Melisma_engraver::try_music (Music *m) daddy_trans_l_->set_property ("melismaEngraverBusy",SCM_BOOL_F); return false; } +Melisma_engraver::Melisma_engraver() +{ +} +ENTER_DESCRIPTION(Melisma_engraver, +/* descr */ "", +/* creats*/ "", +/* acks */ "", +/* reads */ "melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy", +/* write */ ""); diff --git a/lily/molecule.cc b/lily/molecule.cc index 5e124b2e90..f1aedc2295 100644 --- a/lily/molecule.cc +++ b/lily/molecule.cc @@ -140,7 +140,7 @@ Molecule::ly_set_molecule_extent_x (SCM mol, SCM axis, SCM np) if (m && ly_axis_p (axis) && ly_number_pair_p (np)) { Interval iv = ly_scm2interval (np); - m->dim_[Axis (gh_scm2int (axis))] = ly_scm2interval (np); + m->dim_[Axis (gh_scm2int (axis))] = iv; } else warning ("ly-set-molecule-extent!: invalid arguments"); @@ -245,11 +245,13 @@ IMPLEMENT_SIMPLE_SMOBS (Molecule); int Molecule::print_smob (SCM s, SCM port, scm_print_state *) { - Molecule *r = (Molecule *) ly_cdr (s); scm_puts ("#str ()); - scm_puts ((char *)str.ch_C (), port);*/ +#if 0 + Molecule *r = (Molecule *) ly_cdr (s); + String str (r->str ()); + scm_puts ((char *)str.ch_C (), port); +#endif scm_puts (" >", port); return 1; diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 21c2055324..239db9779f 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -22,8 +22,7 @@ class Multi_measure_rest_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Multi_measure_rest_engraver (); + TRANSLATOR_DECLARATIONS(Multi_measure_rest_engraver); protected: virtual bool try_music (Music*); @@ -43,7 +42,7 @@ private: Spanner *lastrest_p_; }; -ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver); + Multi_measure_rest_engraver::Multi_measure_rest_engraver () { @@ -179,3 +178,12 @@ Multi_measure_rest_engraver::finalize () if (lastrest_p_) typeset_grob (lastrest_p_); } + +ENTER_DESCRIPTION(Multi_measure_rest_engraver, +/* descr */ "Engraves multi-measure rests that are produced with @code{R}. Reads +measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest +", +/* creats*/ "MultiMeasureRest", +/* acks */ "", +/* reads */ "currentBarNumber currentCommandColumn measurePosition", +/* write */ ""); diff --git a/lily/music.cc b/lily/music.cc index ca3f8fe813..c9955845da 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -101,9 +101,9 @@ print_alist (SCM a, SCM port) { for (SCM s = a; gh_pair_p (s); s = ly_cdr (s)) { - scm_display (gh_caar (s), port); + scm_display (ly_caar (s), port); scm_puts (" = ", port); - scm_write (gh_cdar (s), port); + scm_write (ly_cdar (s), port); scm_puts ("\n", port); } } diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index a3d2a62fa2..587b5548b2 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -49,7 +49,7 @@ static Keyword_ent the_key_tab[]={ {"denies", DENIES}, {"duration", DURATION}, {"dynamicscript", DYNAMICSCRIPT}, - {"elementdescriptions", ELEMENTDESCRIPTIONS}, + {"grobdescriptions", GROBDESCRIPTIONS}, {"figures",FIGURES}, {"grace", GRACE}, {"glissando", GLISSANDO}, diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 9e699a5e82..c850a72104 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -122,8 +122,8 @@ My_lily_parser::paper_description () SCM l = SCM_EOL; for (SCM s = al ; gh_pair_p (s); s = ly_cdr (s)) { - Translator_def * td = unsmob_translator_def (gh_cdar (s)); - l = gh_cons (gh_cons (gh_caar (s), td->to_alist ()), l); + Translator_def * td = unsmob_translator_def (ly_cdar (s)); + l = gh_cons (gh_cons (ly_caar (s), td->to_alist ()), l); } return l; } diff --git a/lily/new-spacing-spanner.cc b/lily/new-spacing-spanner.cc index 3daabc0672..682dc0847f 100644 --- a/lily/new-spacing-spanner.cc +++ b/lily/new-spacing-spanner.cc @@ -55,7 +55,7 @@ New_spacing_spanner::do_measure (Grob*me, Link_array *cols) cols->del (i); } - int n = 0; + for (int i =0 ; i < cols->size (); i++) { if (Paper_column::musical_b (cols->elem (i))) @@ -146,8 +146,8 @@ cout << "params for cols " << Paper_column::rank_i (l) << " " << Paper_column::r */ for (SCM s = seq; gh_pair_p (s); s = ly_cdr (s)) { - Grob *lm = unsmob_grob (gh_caar (s)); - Grob *rm = unsmob_grob (gh_cdar (s)); + Grob *lm = unsmob_grob (ly_caar (s)); + Grob *rm = unsmob_grob (ly_cdar (s)); // TODO; configgable. hinterfleisch += -headwid + Separation_item::my_width (lm)[RIGHT] - diff --git a/lily/note-head-line-engraver.cc b/lily/note-head-line-engraver.cc index 58f52a1f35..52ac159c93 100644 --- a/lily/note-head-line-engraver.cc +++ b/lily/note-head-line-engraver.cc @@ -29,8 +29,7 @@ class Note_head_line_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Note_head_line_engraver (); + TRANSLATOR_DECLARATIONS(Note_head_line_engraver); protected: virtual void acknowledge_grob (Grob_info); @@ -76,9 +75,9 @@ Note_head_line_engraver::try_music (Music* m) void Note_head_line_engraver::acknowledge_grob (Grob_info info) { - if (Rhythmic_head::has_interface (info.elem_l_)) + if (Rhythmic_head::has_interface (info.grob_l_)) { - head_ = info.elem_l_; + head_ = info.grob_l_; if (to_boolean (get_property ("followVoice"))) { Translator_group * tr = daddy_trans_l_; @@ -148,5 +147,12 @@ Note_head_line_engraver::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Note_head_line_engraver); + +ENTER_DESCRIPTION(Note_head_line_engraver, +/* descr */ "Engrave a line between two note heads, for example a glissando. +If followVoice is set, staff switches also generate a line.", +/* creats*/ "Glissando VoiceFollower", +/* acks */ "rhythmic-head-interface", +/* reads */ "followVoice", +/* write */ ""); diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 3877dad1d0..8fc1e6f13a 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -26,7 +26,7 @@ class Note_heads_engraver : public Engraver Link_array note_req_l_arr_; Moment note_end_mom_; public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Note_heads_engraver); protected: virtual void start_translation_timestep (); @@ -151,7 +151,12 @@ Note_heads_engraver::start_translation_timestep () } } +Note_heads_engraver::Note_heads_engraver() +{} - -ADD_THIS_TRANSLATOR (Note_heads_engraver); - +ENTER_DESCRIPTION(Note_heads_engraver, +/* descr */ "Generate one or more noteheads from Music of type Note_req.", +/* creats*/ "NoteHead Dots", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index c6e0261b2c..6cb890a6d0 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -14,7 +14,8 @@ class Note_name_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Note_name_engraver); + Link_array req_l_arr_; Link_array texts_; virtual bool try_music (Music*m); @@ -65,4 +66,14 @@ Note_name_engraver::stop_translation_timestep () req_l_arr_.clear (); } -ADD_THIS_TRANSLATOR (Note_name_engraver); + +Note_name_engraver::Note_name_engraver() +{ +} + +ENTER_DESCRIPTION(Note_name_engraver, +/* descr */ "", +/* creats*/ "NoteName", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/note-performer.cc b/lily/note-performer.cc index c5c522405a..a7d2907dae 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -18,7 +18,7 @@ Convert reqs to audio notes. */ class Note_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Note_performer); protected: virtual bool try_music (Music *req_l) ; @@ -33,8 +33,6 @@ private: Array delayed_p_arr_; }; -ADD_THIS_TRANSLATOR (Note_performer); - void Note_performer::create_audio_elements () { @@ -126,3 +124,9 @@ Note_performer::try_music (Music* req_l) } return false; } + +ENTER_DESCRIPTION(Note_performer,"","","","",""); + +Note_performer::Note_performer() +{ +} diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index f022bf56d7..527b0c103a 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -13,8 +13,7 @@ class Output_property_engraver : public Engraver { -public: - VIRTUAL_COPY_CONS (Translator); +TRANSLATOR_DECLARATIONS(Output_property_engraver); protected: /* @@ -61,12 +60,12 @@ Output_property_engraver::acknowledge_grob (Grob_info inf) should typecheck pred. */ SCM result=gh_apply (pred, - scm_list_n (inf.elem_l_->self_scm (), SCM_UNDEFINED)); + scm_list_n (inf.grob_l_->self_scm (), SCM_UNDEFINED)); if (to_boolean (result)) { SCM sym = o->get_mus_property ("grob-property"); SCM val = o->get_mus_property ("grob-value"); - inf.elem_l_->set_grob_property (sym, val); + inf.grob_l_->set_grob_property (sym, val); } } } @@ -77,4 +76,14 @@ Output_property_engraver::stop_translation_timestep () props_.clear (); } -ADD_THIS_TRANSLATOR (Output_property_engraver); +Output_property_engraver::Output_property_engraver() +{ +} + +ENTER_DESCRIPTION(Output_property_engraver, +/* descr */ "Interpret Music of Output_property type, and apply a function +to any Graphic objects that satisfies the predicate.", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 84bb78ff44..551a757b71 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -157,8 +157,8 @@ Paper_def::font_descriptions ()const SCM l = SCM_EOL; for (SCM s = scaled_fonts_; gh_pair_p (s); s = ly_cdr (s)) { - SCM desc = gh_caar (s); - SCM mdesc = unsmob_metrics (gh_cdar (s))->description_; + SCM desc = ly_caar (s); + SCM mdesc = unsmob_metrics (ly_cdar (s))->description_; l = gh_cons (gh_cons (mdesc, desc), l); } diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index e88c81aaa4..157115741b 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -123,6 +123,19 @@ Paper_outputter::output_scheme (SCM scm) dump_scheme (scm); } +void flatten_write (SCM x, Paper_stream*ps) +{ + if (ly_pair_p (x)) + { + flatten_write (ly_car (x),ps); + flatten_write (ly_cdr (x),ps); + } + else if (gh_string_p (x)) + { + *ps << String ( SCM_STRING_CHARS(x)) ; + } +} + /* UGH. @@ -140,10 +153,7 @@ Paper_outputter::dump_scheme (SCM s) else { SCM result = scm_primitive_eval (s); - char *c=gh_scm2newstr (result, NULL); - - *stream_p_ << c; - free (c); + flatten_write (result, stream_p_); } } @@ -153,8 +163,8 @@ Paper_outputter::output_scope (Scope *scope, String prefix) SCM al = scope->to_alist (); for (SCM s = al ; gh_pair_p (s); s = ly_cdr (s)) { - SCM k = gh_caar (s); - SCM v = gh_cdar (s); + SCM k = ly_caar (s); + SCM v = ly_cdar (s); String s = ly_symbol2string (k); diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 193a350c6c..c96237a0c1 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -36,8 +36,7 @@ class Percent_repeat_engraver : public Engraver { void typeset_perc (); public: - VIRTUAL_COPY_CONS (Translator); - Percent_repeat_engraver (); + TRANSLATOR_DECLARATIONS(Percent_repeat_engraver); protected: Repeated_music * repeat_; @@ -244,6 +243,12 @@ Percent_repeat_engraver::stop_translation_timestep () typeset_perc (); } -ADD_THIS_TRANSLATOR (Percent_repeat_engraver); + +ENTER_DESCRIPTION(Percent_repeat_engraver, +/* descr */ "Make beat, whole bar and double bar repeats.", +/* creats*/ "PercentRepeat RepeatSlash DoublePercentRepeat", +/* acks */ "", +/* reads */ "measureLength currentCommandColumn", +/* write */ ""); diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index c13d65505c..20f2bc7ff0 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -13,7 +13,13 @@ #include "debug.hh" -ADD_THIS_TRANSLATOR (Performer_group_performer); +ENTER_DESCRIPTION(Performer_group_performer, +/* descr */ "", +/* creats*/ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); + void @@ -82,3 +88,5 @@ Performer_group_performer::do_announces () announce_info_arr_.clear (); } } + +Performer_group_performer::Performer_group_performer(){} diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index ed78313be5..f402d74f97 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -29,8 +29,8 @@ protected: virtual void create_grobs (); public: - VIRTUAL_COPY_CONS (Translator); - Phrasing_slur_engraver (); + TRANSLATOR_DECLARATIONS(Phrasing_slur_engraver); + }; Phrasing_slur_engraver::Phrasing_slur_engraver () @@ -86,9 +86,9 @@ Phrasing_slur_engraver::try_music (Music *req_l) void Phrasing_slur_engraver::acknowledge_grob (Grob_info info) { - if (Note_column::has_interface (info.elem_l_)) + if (Note_column::has_interface (info.grob_l_)) { - Grob *e =info.elem_l_; + Grob *e =info.grob_l_; for (int i = 0; i < phrasing_slur_l_stack_.size (); i++) Slur::add_column (phrasing_slur_l_stack_[i], e); for (int i = 0; i < end_phrasing_slur_l_arr_.size (); i++) @@ -180,4 +180,10 @@ Phrasing_slur_engraver::start_translation_timestep () } -ADD_THIS_TRANSLATOR (Phrasing_slur_engraver); + +ENTER_DESCRIPTION(Phrasing_slur_engraver, +/* descr */ "Print phrasing slurs. Similar to Slur_engraver", +/* creats*/ "PhrasingSlur", +/* acks */ "note-column-interface", +/* reads */ "slurBeginAttachment slurEndAttachment slurMelismaBusy", +/* write */ ""); diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index df3238a635..cd83bae840 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -20,8 +20,7 @@ class Piano_pedal_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Piano_pedal_engraver (); + TRANSLATOR_DECLARATIONS(Piano_pedal_engraver); ~Piano_pedal_engraver (); protected: virtual void initialize (); @@ -44,7 +43,7 @@ private: Pedal_info *info_list_; }; -ADD_THIS_TRANSLATOR (Piano_pedal_engraver); + Piano_pedal_engraver::Piano_pedal_engraver () { @@ -88,17 +87,17 @@ Piano_pedal_engraver::acknowledge_grob (Grob_info info) { if (p->item_p_) { - if (Rhythmic_head::has_interface (info.elem_l_)) + if (Rhythmic_head::has_interface (info.grob_l_)) { - Side_position_interface::add_support (p->item_p_, info.elem_l_); + Side_position_interface::add_support (p->item_p_, info.grob_l_); if (Side_position_interface::get_axis (p->item_p_) == X_AXIS && !p->item_p_->parent_l (Y_AXIS)) - p->item_p_->set_parent (info.elem_l_, Y_AXIS); + p->item_p_->set_parent (info.grob_l_, Y_AXIS); } - if (Stem::has_interface (info.elem_l_)) + if (Stem::has_interface (info.grob_l_)) { - Side_position_interface::add_support (p->item_p_,info.elem_l_); + Side_position_interface::add_support (p->item_p_,info.grob_l_); } } } @@ -143,7 +142,7 @@ Piano_pedal_engraver::create_grobs () } else { - s = gh_cadr (strings); + s = ly_cadr (strings); } p->start_req_l_ = p->req_l_drul_[START]; } @@ -155,7 +154,7 @@ Piano_pedal_engraver::create_grobs () } else { - s = gh_caddr (strings); + s = ly_caddr (strings); } p->start_req_l_ = 0; } @@ -222,3 +221,9 @@ Piano_pedal_engraver::start_translation_timestep () p->req_l_drul_[START] = 0; } } +ENTER_DESCRIPTION(Piano_pedal_engraver, +/* descr */ "Engrave piano pedal symbols.", +/* creats*/ "SostenutoPedal SustainPedal UnaCordaPedal", +/* acks */ "rhythmic-head-interface stem-interface", +/* reads */ "pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings", +/* write */ ""); diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index 8fe532e60a..798877414b 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -24,8 +24,7 @@ class Piano_pedal_performer : public Performer }; public: - VIRTUAL_COPY_CONS (Translator); - Piano_pedal_performer (); + TRANSLATOR_DECLARATIONS(Piano_pedal_performer); ~Piano_pedal_performer (); protected: @@ -40,8 +39,6 @@ private: Pedal_info * info_alist_; }; -ADD_THIS_TRANSLATOR (Piano_pedal_performer); - Piano_pedal_performer::Piano_pedal_performer () { info_alist_ = 0; @@ -142,3 +139,4 @@ Piano_pedal_performer::try_music (Music* r) } return false; } +ENTER_DESCRIPTION (Piano_pedal_performer, "","","","","" ); diff --git a/lily/pitch-squash-engraver.cc b/lily/pitch-squash-engraver.cc index 4ab2d01f0a..6ea465e781 100644 --- a/lily/pitch-squash-engraver.cc +++ b/lily/pitch-squash-engraver.cc @@ -13,7 +13,7 @@ class Pitch_squash_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Pitch_squash_engraver); virtual void acknowledge_grob (Grob_info); }; @@ -22,12 +22,24 @@ void Pitch_squash_engraver::acknowledge_grob (Grob_info i) { SCM newpos = get_property ("squashedPosition"); - if (Note_head::has_interface (i.elem_l_)) + if (Note_head::has_interface (i.grob_l_)) { - i.elem_l_->set_grob_property ("staff-position", newpos); + i.grob_l_->set_grob_property ("staff-position", newpos); } } -ADD_THIS_TRANSLATOR (Pitch_squash_engraver); +Pitch_squash_engraver::Pitch_squash_engraver() +{ +} + +ENTER_DESCRIPTION(Pitch_squash_engraver, +/* descr */ "Treat all pitches as middle C. Note that the notes move, but +the locations of accidentals stay the same. +Set the position field of all note heads to zero. This useful for +making a single line staff that demonstrates the rhythm of a melody.", +/* creats*/ "", +/* acks */ "note-head-interface", +/* reads */ "squashedPosition", +/* write */ ""); diff --git a/lily/porrectus-engraver.cc b/lily/porrectus-engraver.cc index 311ef312e9..4cc35e910c 100644 --- a/lily/porrectus-engraver.cc +++ b/lily/porrectus-engraver.cc @@ -70,8 +70,7 @@ inline int compare (PHead_melodic_tuple const &a, PHead_melodic_tuple const &b) class Porrectus_engraver : public Engraver { public: - Porrectus_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Porrectus_engraver); protected: virtual bool try_music (Music *req_l); @@ -108,12 +107,12 @@ Porrectus_engraver::try_music (Music *m) void Porrectus_engraver::acknowledge_grob (Grob_info info_l_) { - if (Rhythmic_head::has_interface (info_l_.elem_l_)) + if (Rhythmic_head::has_interface (info_l_.grob_l_)) { Note_req *note_req_l_ = dynamic_cast (info_l_.req_l_); if (!note_req_l_) return; - right_heads_.push (PHead_melodic_tuple (info_l_.elem_l_, note_req_l_, + right_heads_.push (PHead_melodic_tuple (info_l_.grob_l_, note_req_l_, now_mom () + note_req_l_->length_mom ())); } @@ -181,7 +180,7 @@ Porrectus_engraver::start_translation_timestep () left_heads_.push (past_notes_pq_.get ()); } -ADD_THIS_TRANSLATOR (Porrectus_engraver); + // TODO: PHead_melodic_tuple is duplicated code from tie-engraver.cc. // Maybe put this into public class? @@ -222,3 +221,9 @@ PHead_melodic_tuple::time_compare (PHead_melodic_tuple const&h1, int result = Moment::compare(h1.end_, h2.end_); return result; } +ENTER_DESCRIPTION(Porrectus_engraver, +/* descr */ "Join adjacent notes to a porrectus ligature.", +/* creats*/ "Porrectus", +/* acks */ "rhythmic-head-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/property-engraver.cc b/lily/property-engraver.cc index 044f9613c4..775da363b4 100644 --- a/lily/property-engraver.cc +++ b/lily/property-engraver.cc @@ -32,8 +32,7 @@ protected: virtual void finalize (); public: ~Property_engraver (); - Property_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Property_engraver); }; @@ -70,19 +69,19 @@ Property_engraver::initialize () void Property_engraver::acknowledge_grob (Grob_info i) { - SCM ifs = i.elem_l_->get_grob_property ("interfaces"); + SCM ifs = i.grob_l_->get_grob_property ("interfaces"); SCM props; for (; gh_pair_p (ifs); ifs = ly_cdr (ifs)) { if (prop_dict_->try_retrieve (ly_car (ifs), &props)) { - apply_properties (props,i.elem_l_, i.origin_trans_l_->daddy_trans_l_); + apply_properties (props,i.grob_l_, i.origin_trans_l_->daddy_trans_l_); } } if (prop_dict_->try_retrieve (ly_symbol2scm ("all"), &props)) { - apply_properties (props, i.elem_l_, i.origin_trans_l_->daddy_trans_l_); + apply_properties (props, i.grob_l_, i.origin_trans_l_->daddy_trans_l_); } } @@ -100,8 +99,8 @@ Property_engraver::apply_properties (SCM p, Grob *e, Translator_group*origin) SCM entry = ly_car (p); SCM prop_sym = ly_car (entry); - SCM type_p = gh_cadr (entry); - SCM elt_prop_sym = gh_caddr (entry); + SCM type_p = ly_cadr (entry); + SCM elt_prop_sym = ly_caddr (entry); SCM preset = scm_assq (elt_prop_sym, e->mutable_property_alist_); if (preset != SCM_BOOL_F) @@ -152,4 +151,14 @@ Property_engraver::apply_properties (SCM p, Grob *e, Translator_group*origin) } } -ADD_THIS_TRANSLATOR (Property_engraver); + +ENTER_DESCRIPTION(Property_engraver, +/* descr */ "This is a engraver that converts property settings into +back-end grob-property settings. Example: Voice.stemLength will set +#'length in all Stem objects. + +Due to CPU and memory requirements, the use of this engraver is deprecated.", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "Generic_property_list", +/* write */ ""); diff --git a/lily/regular-spacing-engraver.cc b/lily/regular-spacing-engraver.cc index e6cb1300a3..c6590c832e 100644 --- a/lily/regular-spacing-engraver.cc +++ b/lily/regular-spacing-engraver.cc @@ -13,9 +13,7 @@ class Regular_spacing_engraver : public Engraver { public: - Regular_spacing_engraver (); - VIRTUAL_COPY_CONS(Translator); - + TRANSLATOR_DECLARATIONS(Regular_spacing_engraver); Moment last_moment_; SCM last_col_; protected: @@ -57,4 +55,10 @@ Regular_spacing_engraver::process_music () } -ADD_THIS_TRANSLATOR(Regular_spacing_engraver); +ENTER_DESCRIPTION(Regular_spacing_engraver, +/* descr */ ".", +/* creats*/ "", +/* acks */ "", +/* reads */ "regularSpacingDelta", +/* write */ ""); + diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index a134dad1ee..24f8d723d4 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -25,8 +25,7 @@ class Repeat_acknowledge_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Repeat_acknowledge_engraver (); + TRANSLATOR_DECLARATIONS(Repeat_acknowledge_engraver); virtual void start_translation_timestep (); virtual void process_music (); @@ -101,4 +100,11 @@ Repeat_acknowledge_engraver::process_music () } } -ADD_THIS_TRANSLATOR (Repeat_acknowledge_engraver); + +ENTER_DESCRIPTION(Repeat_acknowledge_engraver, +/* descr */ "Acknowledge repeated music, and convert the contents of +repeatCommands ainto an appropriate setting for whichBar", +/* creats*/ "", +/* acks */ "", +/* reads */ "repeatCommands whichBar", +/* write */ ""); diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 1443d70790..1569df6784 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -22,12 +22,10 @@ protected: virtual void create_grobs (); virtual void stop_translation_timestep (); public: - VIRTUAL_COPY_CONS (Translator); - Rest_collision_engraver (); - + TRANSLATOR_DECLARATIONS(Rest_collision_engraver); }; -ADD_THIS_TRANSLATOR (Rest_collision_engraver); + Rest_collision_engraver::Rest_collision_engraver () { @@ -50,8 +48,8 @@ Rest_collision_engraver::create_grobs () void Rest_collision_engraver::acknowledge_grob (Grob_info i) { - if (Note_column::has_interface (i.elem_l_)) - note_column_l_arr_.push (i.elem_l_); + if (Note_column::has_interface (i.grob_l_)) + note_column_l_arr_.push (i.grob_l_); } void @@ -64,3 +62,9 @@ Rest_collision_engraver::stop_translation_timestep () } note_column_l_arr_.clear (); } +ENTER_DESCRIPTION(Rest_collision_engraver, +/* descr */ "Handles collisions of rests.", +/* creats*/ "RestCollision", +/* acks */ "note-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index 702b98b5aa..55e1c8bde0 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -26,8 +26,7 @@ protected: public: - VIRTUAL_COPY_CONS (Translator); - Rest_engraver (); + TRANSLATOR_DECLARATIONS(Rest_engraver); }; @@ -104,4 +103,10 @@ Rest_engraver::try_music (Music *m) } -ADD_THIS_TRANSLATOR (Rest_engraver); + +ENTER_DESCRIPTION(Rest_engraver, +/* descr */ "", +/* creats*/ "Rest Dots", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index 1ebea18a43..8c6faa3d70 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -22,15 +22,14 @@ class Rhythmic_column_engraver :public Engraver Grob * stem_l_; Grob *ncol_p_; Grob *dotcol_l_; - + + TRANSLATOR_DECLARATIONS(Rhythmic_column_engraver); protected: - VIRTUAL_COPY_CONS (Translator); + virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); virtual void stop_translation_timestep (); virtual void start_translation_timestep (); -public: - Rhythmic_column_engraver (); }; @@ -86,7 +85,7 @@ Rhythmic_column_engraver::create_grobs () void Rhythmic_column_engraver::acknowledge_grob (Grob_info i) { - Item * item = dynamic_cast (i.elem_l_); + Item * item = dynamic_cast (i.grob_l_); if (item && Stem::has_interface (item)) { stem_l_ = item; @@ -118,5 +117,11 @@ Rhythmic_column_engraver::start_translation_timestep () stem_l_ =0; } -ADD_THIS_TRANSLATOR (Rhythmic_column_engraver); + +ENTER_DESCRIPTION(Rhythmic_column_engraver, +/* descr */ "Generates NoteColumn, an objects that groups stems, noteheads and rests.", +/* creats*/ "NoteColumn", +/* acks */ "stem-interface note-head-interface dot-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 733aa5a3c0..814bd4d448 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -131,7 +131,7 @@ void Score_engraver::announce_grob (Grob_info info) { announce_info_arr_.push (info); - pscore_p_->line_l_->typeset_grob (info.elem_l_); + pscore_p_->line_l_->typeset_grob (info.grob_l_); } /* All elements are propagated to the top upon announcement. If @@ -145,9 +145,7 @@ Score_engraver::announce_grob (Grob_info info) void Score_engraver::do_announces () { - ////// do - Engraver_group_engraver::do_announces (); - //////while (announce_info_arr_.size ()); + Engraver_group_engraver::do_announces (); } @@ -295,6 +293,23 @@ Score_engraver::forbid_breaks () command_column_l_->remove_grob_property ("breakable"); } -ADD_THIS_TRANSLATOR (Score_engraver); + +ENTER_DESCRIPTION(Score_engraver, +/* descr */ "Top level engraver. Takes care of generating columns and the complete system (ie. LineOfScore) + + +This engraver decides whether a column is breakable. The default is +that a column is always breakable. However, when every Bar_engraver +that does not have a barline at a certain point will call +Score_engraver::forbid_breaks to stop linebreaks. In practice, this +means that you can make a breakpoint by creating a barline (assuming +that there are no beams or notes that prevent a breakpoint.) + + +", +/* creats*/ "LineOfScore PaperColumn NonMusicalPaperColumn", +/* acks */ "grob-interface", +/* reads */ "currentMusicalColumn currentCommandColumn", +/* write */ ""); diff --git a/lily/score-performer.cc b/lily/score-performer.cc index b1267acdce..ea2926c5bc 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -16,7 +16,14 @@ #include "debug.hh" #include "translator-def.hh" -ADD_THIS_TRANSLATOR (Score_performer); + + +ENTER_DESCRIPTION(Score_performer, +/* descr */ "", +/* creats*/ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); Score_performer::Score_performer () diff --git a/lily/score.cc b/lily/score.cc index 0b6680ae95..024810c1b5 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -51,7 +51,9 @@ Score::Score (Score const &s) /* TODO: this is not very elegant.... */ - store_locations_global_b = (scm_c_eval_string ("point-and-click") != SCM_BOOL_F); + /* store_locations_global_b = (scm_c_eval_string ("point-and-click") != SCM_BOOL_F);*/ + store_locations_global_b = (gh_eval_str ("point-and-click") != SCM_BOOL_F); + Music * m =unsmob_music (s.music_); music_ = m?m->clone ()->self_scm () : SCM_EOL; @@ -181,7 +183,7 @@ Score::mark_smob (SCM s) } int -Score::print_smob (SCM s, SCM p, scm_print_state*) +Score::print_smob (SCM , SCM p, scm_print_state*) { scm_puts ("#", p); diff --git a/lily/script-column-engraver.cc b/lily/script-column-engraver.cc index 93083a1cb0..b6b53162cf 100644 --- a/lily/script-column-engraver.cc +++ b/lily/script-column-engraver.cc @@ -21,8 +21,7 @@ class Script_column_engraver : public Engraver Link_array script_l_arr_; public: - Script_column_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Script_column_engraver); protected: virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); @@ -56,11 +55,11 @@ Script_column_engraver::start_translation_timestep () void Script_column_engraver::acknowledge_grob (Grob_info inf) { - Item *thing = dynamic_cast (inf.elem_l_); - if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME + Item *thing = dynamic_cast (inf.grob_l_); + if (thing && Side_position_interface::has_interface (inf.grob_l_)) // ugh FIXME { if (!Item::breakable_b (thing) - && Side_position_interface::get_axis (inf.elem_l_) == Y_AXIS) + && Side_position_interface::get_axis (inf.grob_l_) == Y_AXIS) { script_l_arr_.push (thing); } @@ -85,4 +84,10 @@ Script_column_engraver::create_grobs () script_l_arr_.clear (); } } -ADD_THIS_TRANSLATOR (Script_column_engraver); + +ENTER_DESCRIPTION(Script_column_engraver, +/* descr */ "", +/* creats*/ "ScriptColumn", +/* acks */ "side-position-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index ef0c8266af..90e448e100 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -17,8 +17,7 @@ class Script_engraver : public Engraver Link_array script_req_l_arr_; public: - VIRTUAL_COPY_CONS (Translator); - + TRANSLATOR_DECLARATIONS(Script_engraver); protected: virtual bool try_music (Music*); virtual void initialize (); @@ -116,18 +115,18 @@ Script_engraver::process_music () void Script_engraver::acknowledge_grob (Grob_info inf) { - if (Stem::has_interface (inf.elem_l_)) + if (Stem::has_interface (inf.grob_l_)) { for (int i=0; i < script_p_arr_.size (); i++) { Grob*e = script_p_arr_[i]; - e->set_grob_property ("direction-source", inf.elem_l_->self_scm ()); - e->add_dependency (inf.elem_l_); - Side_position_interface::add_support (e, inf.elem_l_); + e->set_grob_property ("direction-source", inf.grob_l_->self_scm ()); + e->add_dependency (inf.grob_l_); + Side_position_interface::add_support (e, inf.grob_l_); } } - else if (Rhythmic_head::has_interface (inf.elem_l_)) + else if (Rhythmic_head::has_interface (inf.grob_l_)) { for (int i=0; i < script_p_arr_.size (); i++) { @@ -135,15 +134,15 @@ Script_engraver::acknowledge_grob (Grob_info inf) if (!e->parent_l (X_AXIS)) { - e->set_parent (inf.elem_l_, X_AXIS); + e->set_parent (inf.grob_l_, X_AXIS); } if (Side_position_interface::get_axis (e) == X_AXIS && !e->parent_l (Y_AXIS)) { - e->set_parent (inf.elem_l_, Y_AXIS); - e->add_dependency (inf.elem_l_); // ?? + e->set_parent (inf.grob_l_, Y_AXIS); + e->add_dependency (inf.grob_l_); // ?? } - Side_position_interface::add_support (e,inf.elem_l_); + Side_position_interface::add_support (e,inf.grob_l_); } } } @@ -169,6 +168,14 @@ Script_engraver::start_translation_timestep () script_req_l_arr_.clear (); } -ADD_THIS_TRANSLATOR (Script_engraver); +Script_engraver::Script_engraver(){} + +ENTER_DESCRIPTION(Script_engraver, +/* descr */ " Handles note ornaments generated by @code{\\script}. +", +/* creats*/ "Script", +/* acks */ "stem-interface rhythmic-head-interface", +/* reads */ "scriptDefinitions scriptHorizontal", +/* write */ ""); diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 6c3811b8e2..d36a852911 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -27,8 +27,7 @@ protected: virtual void finalize (); virtual void stop_translation_timestep (); public: - Separating_line_group_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Separating_line_group_engraver); }; Separating_line_group_engraver::Separating_line_group_engraver () @@ -58,7 +57,7 @@ Separating_line_group_engraver::finalize () void Separating_line_group_engraver::acknowledge_grob (Grob_info i) { - Item * it = dynamic_cast (i.elem_l_); + Item * it = dynamic_cast (i.grob_l_); if (!it) return; if (it->parent_l (X_AXIS) @@ -105,5 +104,11 @@ Separating_line_group_engraver::stop_translation_timestep () -ADD_THIS_TRANSLATOR (Separating_line_group_engraver); + +ENTER_DESCRIPTION(Separating_line_group_engraver, +/* descr */ "Generates objects for computing spacing parameters.", +/* creats*/ "SeparationItem SeparatingGroupSpanner", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 9a28be14ca..e787fd091b 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -182,11 +182,11 @@ Simple_spacer::add_columns (Link_array cols) !gh_pair_p (spring_params) && gh_pair_p (s); s = ly_cdr (s)) { - Grob *other = unsmob_grob (gh_caar (s)); + Grob *other = unsmob_grob (ly_caar (s)); if (other != cols[i+1]) continue; - spring_params = gh_cdar (s); + spring_params = ly_cdar (s); } Spring_description desc; @@ -223,11 +223,11 @@ Simple_spacer::add_columns (Link_array cols) for (SCM s = Spaceable_grob::get_minimum_distances (cols[i]); gh_pair_p (s); s = ly_cdr (s)) { - Grob * other = unsmob_grob (gh_caar (s)); + Grob * other = unsmob_grob (ly_caar (s)); int oi = cols.find_i (other); if (oi >= 0) { - add_rod (i, oi, gh_scm2double (gh_cdar (s))); + add_rod (i, oi, gh_scm2double (ly_cdar (s))); } } } diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 6eb8973f77..f96a4cb56d 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -31,8 +31,7 @@ protected: virtual void create_grobs (); public: - VIRTUAL_COPY_CONS (Translator); - Slur_engraver (); + TRANSLATOR_DECLARATIONS(Slur_engraver); }; Slur_engraver::Slur_engraver () @@ -94,9 +93,9 @@ Slur_engraver::set_melisma (bool m) void Slur_engraver::acknowledge_grob (Grob_info info) { - if (Note_column::has_interface (info.elem_l_)) + if (Note_column::has_interface (info.grob_l_)) { - Grob *e =info.elem_l_; + Grob *e =info.grob_l_; for (int i = 0; i < slur_l_stack_.size (); i++) Slur::add_column (slur_l_stack_[i], e); for (int i = 0; i < end_slur_l_arr_.size (); i++) @@ -195,4 +194,10 @@ Slur_engraver::start_translation_timestep () } -ADD_THIS_TRANSLATOR (Slur_engraver); + +ENTER_DESCRIPTION(Slur_engraver, +/* descr */ "Build slurs from Slur_reqs", +/* creats*/ "Slur", +/* acks */ "note-column-interface", +/* reads */ "slurBeginAttachment slurEndAttachment slurMelismaBusy", +/* write */ ""); diff --git a/lily/slur.cc b/lily/slur.cc index f2035877bd..4cc9bf3e5a 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -70,8 +70,8 @@ Slur::de_uglyfy (Grob*me, Slur_bezier_bow* bb, Real default_height) SCM up = me->get_grob_property ("de-uglify-parameters"); Real c1 = gh_scm2double (ly_car (up)); - Real c2 = gh_scm2double (gh_cadr (up)); - Real c3 = gh_scm2double (gh_caddr (up)); + Real c2 = gh_scm2double (ly_cadr (up)); + Real c3 = gh_scm2double (ly_caddr (up)); if (h > c1 * f) { @@ -180,12 +180,12 @@ Slur::set_extremities (Grob *me) for (SCM s = me->get_grob_property ("extremity-rules"); s != SCM_EOL; s = ly_cdr (s)) { - SCM r = gh_call2 (gh_caar (s), me->self_scm (), + SCM r = gh_call2 (ly_caar (s), me->self_scm (), gh_int2scm ((int)dir)); if (r != SCM_BOOL_F) { index_set_cell (me->get_grob_property ("attachment"), dir, - gh_cdar (s)); + ly_cdar (s)); break; } } diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 198080648d..be821b012b 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -43,15 +43,14 @@ class Spacing_engraver : public Engraver Array stopped_durations_; Spanner * spacing_p_; + + TRANSLATOR_DECLARATIONS(Spacing_engraver); protected: - VIRTUAL_COPY_CONS (Translator); virtual void acknowledge_grob (Grob_info); virtual void start_translation_timestep (); virtual void stop_translation_timestep (); virtual void initialize (); virtual void finalize (); -public: - Spacing_engraver (); }; inline int @@ -93,7 +92,7 @@ Spacing_engraver::finalize () void Spacing_engraver::acknowledge_grob (Grob_info i) { - if (to_boolean (i.elem_l_->get_grob_property ("non-rhythmic"))) + if (to_boolean (i.grob_l_->get_grob_property ("non-rhythmic"))) return; if (Rhythmic_req * r = dynamic_cast (i.req_l_)) @@ -153,6 +152,12 @@ Spacing_engraver::start_translation_timestep () stopped_durations_.push (playing_durations_.get ()); } -ADD_THIS_TRANSLATOR (Spacing_engraver); + +ENTER_DESCRIPTION(Spacing_engraver, +/* descr */ "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes ", +/* creats*/ "SpacingSpanner", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 75e3779ab1..6d59bb277f 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -22,9 +22,8 @@ class Span_arpeggio_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Span_arpeggio_engraver (); - + TRANSLATOR_DECLARATIONS(Span_arpeggio_engraver); + protected: virtual void acknowledge_grob (Grob_info); virtual void create_grobs (); @@ -45,9 +44,9 @@ void Span_arpeggio_engraver::acknowledge_grob (Grob_info info) { if (info.origin_trans_l_arr (this).size () - && Arpeggio::has_interface (info.elem_l_)) + && Arpeggio::has_interface (info.grob_l_)) { - arpeggios_.push (info.elem_l_); + arpeggios_.push (info.grob_l_); } } @@ -101,5 +100,11 @@ Span_arpeggio_engraver::stop_translation_timestep () arpeggios_.clear (); } -ADD_THIS_TRANSLATOR (Span_arpeggio_engraver); + +ENTER_DESCRIPTION(Span_arpeggio_engraver, +/* descr */ "", +/* creats*/ "Arpeggio", +/* acks */ "arpeggio-interface", +/* reads */ "connectArpeggios", +/* write */ ""); diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index 1d8cdfc0c8..66b317e5b1 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -29,8 +29,7 @@ class Span_bar_engraver : public Engraver Link_array bar_l_arr_; public: - VIRTUAL_COPY_CONS (Translator); - Span_bar_engraver (); + TRANSLATOR_DECLARATIONS(Span_bar_engraver); protected: virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); @@ -50,9 +49,9 @@ Span_bar_engraver::acknowledge_grob (Grob_info i) { int depth = i.origin_trans_l_arr (this).size (); if (depth > 1 - && Bar::has_interface (i.elem_l_)) + && Bar::has_interface (i.grob_l_)) { - Item * it = dynamic_cast (i.elem_l_); + Item * it = dynamic_cast (i.grob_l_); bar_l_arr_.push (it); if (bar_l_arr_.size () >= 2 && !spanbar_p_) @@ -86,7 +85,14 @@ Span_bar_engraver::stop_translation_timestep () -ADD_THIS_TRANSLATOR (Span_bar_engraver); + +ENTER_DESCRIPTION(Span_bar_engraver, +/* descr */ "This engraver makes cross-staff barlines: It catches all normal +bar lines, and draws a single span-bar across them.", +/* creats*/ "SpanBar", +/* acks */ "bar-line-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/span-dynamic-performer.cc b/lily/span-dynamic-performer.cc index f76f7a8876..46a3b3f8ca 100644 --- a/lily/span-dynamic-performer.cc +++ b/lily/span-dynamic-performer.cc @@ -23,9 +23,7 @@ struct Audio_dynamic_tuple class Span_dynamic_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - - Span_dynamic_performer (); + TRANSLATOR_DECLARATIONS(Span_dynamic_performer); protected: virtual bool try_music (Music*); @@ -45,8 +43,6 @@ private: Direction finished_dir_; }; -ADD_THIS_TRANSLATOR (Span_dynamic_performer); - Span_dynamic_performer::Span_dynamic_performer () { span_req_l_drul_[START] = 0; @@ -188,3 +184,4 @@ Span_dynamic_performer::try_music (Music* r) } return false; } +ENTER_DESCRIPTION (Span_dynamic_performer, "","","","","" ); diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index aee7edc6a0..24418337d1 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -20,10 +20,7 @@ class Staff_performer : public Performer_group_performer { public: - VIRTUAL_COPY_CONS (Translator); - - - Staff_performer (); + TRANSLATOR_DECLARATIONS(Staff_performer); ~Staff_performer (); String new_instrument_str (); @@ -44,7 +41,7 @@ private: Audio_tempo* tempo_p_; }; -ADD_THIS_TRANSLATOR (Staff_performer); +ENTER_DESCRIPTION (Staff_performer, "","","","","" ); Staff_performer::Staff_performer () { diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index c1a27bcd17..caca0f8034 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -20,8 +20,7 @@ class Staff_symbol_engraver : public Engraver { Spanner *span_p_; public: - VIRTUAL_COPY_CONS (Translator); - Staff_symbol_engraver (); + TRANSLATOR_DECLARATIONS(Staff_symbol_engraver); protected: virtual ~Staff_symbol_engraver (); @@ -62,12 +61,19 @@ Staff_symbol_engraver::finalize () void Staff_symbol_engraver::acknowledge_grob (Grob_info s) { - s.elem_l_->set_grob_property ("staff-symbol", span_p_->self_scm ()); + s.grob_l_->set_grob_property ("staff-symbol", span_p_->self_scm ()); // remove this. probly not necessary? - s.elem_l_->add_dependency (span_p_); // UGH. UGH. UGH + s.grob_l_->add_dependency (span_p_); // UGH. UGH. UGH } -ADD_THIS_TRANSLATOR (Staff_symbol_engraver); + +ENTER_DESCRIPTION(Staff_symbol_engraver, +/* descr */ "create the constellation of five (default) +staff lines.", +/* creats*/ "StaffSymbol", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index 5d4b0a5e01..ae47a7d189 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -10,26 +10,22 @@ #include "engraver.hh" #include "item.hh" -//#include "system-start-delimiter.hh" -//#include "side-position-interface.hh" -//#include "staff-symbol-referencer.hh" #include "bar.hh" class Stanza_number_engraver : public Engraver { Item *text_; - bool bar_b_;; + bool bar_b_; void create_text (SCM s); public: - VIRTUAL_COPY_CONS (Translator); - Stanza_number_engraver (); + TRANSLATOR_DECLARATIONS(Stanza_number_engraver); - virtual void acknowledge_grob (Grob_info); + virtual void process_music (); virtual void stop_translation_timestep (); }; -ADD_THIS_TRANSLATOR (Stanza_number_engraver); + Stanza_number_engraver::Stanza_number_engraver () { @@ -38,7 +34,7 @@ Stanza_number_engraver::Stanza_number_engraver () } void -Stanza_number_engraver::acknowledge_grob (Grob_info i) +Stanza_number_engraver::process_music () { if (gh_string_p (get_property ("whichBar"))) { @@ -50,10 +46,9 @@ Stanza_number_engraver::acknowledge_grob (Grob_info i) // TODO if (gh_string_p (s)) - /* - if (i.elem_l_->has_interface (symbol ("lyric-syllable-interface"))) + if (i.grob_l_->has_interface (symbol ("lyric-syllable-interface"))) Tried catching lyric items to generate stanza numbers, but it spoils lyric spacing. @@ -96,3 +91,9 @@ Stanza_number_engraver::create_text (SCM txt) +ENTER_DESCRIPTION(Stanza_number_engraver, +/* descr */ "", +/* creats*/ "StanzaNumber", +/* acks */ "", +/* reads */ "stz stanza", +/* write */ ""); diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 9375bd9a7f..faf0b7ab1c 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -16,16 +16,14 @@ #include "translator-group.hh" #include "engraver.hh" + + /** Make stems upon receiving noteheads. */ class Stem_engraver : public Engraver { - -public: - VIRTUAL_COPY_CONS (Translator); - Stem_engraver (); - + TRANSLATOR_DECLARATIONS(Stem_engraver); protected: virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); @@ -38,8 +36,6 @@ private: Tremolo_req* tremolo_req_l_; }; -ADD_THIS_TRANSLATOR (Stem_engraver); - Stem_engraver::Stem_engraver () { tremolo_req_l_ = 0; @@ -52,7 +48,7 @@ Stem_engraver::Stem_engraver () void Stem_engraver::acknowledge_grob (Grob_info i) { - Grob* h = i.elem_l_; + Grob* h = i.grob_l_; if (Rhythmic_head::has_interface (h)) { if (Rhythmic_head::stem_l (h)) @@ -175,3 +171,10 @@ Stem_engraver::try_music (Music* r) return false; } +ENTER_DESCRIPTION(Stem_engraver, +/* descr */ "Create stems and single-stem tremolos. It also works together with +the beam engraver for overriding beaming.", +/* creats*/ "Stem StemTremolo", +/* acks */ "rhythmic-head-interface", +/* reads */ "tremoloFlags stemLeftBeamCount stemRightBeamCount", +/* write */ ""); diff --git a/lily/swallow-engraver.cc b/lily/swallow-engraver.cc index 3823f2c1f5..5a3dcfdfbe 100644 --- a/lily/swallow-engraver.cc +++ b/lily/swallow-engraver.cc @@ -15,12 +15,12 @@ class Swallow_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Swallow_engraver); protected: bool try_music (Music*) ; }; -ADD_THIS_TRANSLATOR (Swallow_engraver); + bool Swallow_engraver::try_music (Music*) diff --git a/lily/swallow-perf.cc b/lily/swallow-perf.cc index 7ff03f174f..7b2884b9fa 100644 --- a/lily/swallow-perf.cc +++ b/lily/swallow-perf.cc @@ -6,8 +6,22 @@ (c) 1997--2001 Han-Wen Nienhuys */ -#include "swallow-perf.hh" +#include "performer.hh" +class Swallow_performer : public Performer +{ +public: + TRANSLATOR_DECLARATIONS(Swallow_performer); +protected: + virtual bool try_music (Music*) { return true; } +}; +Swallow_performer::Swallow_performer() +{} -ADD_THIS_TRANSLATOR (Swallow_performer); +ENTER_DESCRIPTION(Swallow_performer, +/* descr */ "", +/* creats*/ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index 642c222e11..969f3a07e2 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -19,8 +19,7 @@ class System_start_delimiter_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - System_start_delimiter_engraver (); + TRANSLATOR_DECLARATIONS(System_start_delimiter_engraver); protected: Spanner * delim_; @@ -29,22 +28,22 @@ protected: virtual void finalize (); }; -ADD_THIS_TRANSLATOR (System_start_delimiter_engraver); + void System_start_delimiter_engraver::acknowledge_grob (Grob_info inf) { - if (Staff_symbol::has_interface (inf.elem_l_)) + if (Staff_symbol::has_interface (inf.grob_l_)) { /* don't add as Axis_group_interface::add_element (delim_,), because that would set the parent as well */ - Pointer_group_interface::add_element (delim_, "elements", inf.elem_l_); + Pointer_group_interface::add_element (delim_, "elements", inf.grob_l_); } - else if (System_start_delimiter::has_interface (inf.elem_l_)) + else if (System_start_delimiter::has_interface (inf.grob_l_)) { - SCM gl = inf.elem_l_->get_grob_property ("glyph"); + SCM gl = inf.grob_l_->get_grob_property ("glyph"); SCM my_gl = delim_->get_grob_property ("glyph"); /* @@ -52,13 +51,13 @@ System_start_delimiter_engraver::acknowledge_grob (Grob_info inf) */ if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace") && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) - inf.elem_l_->translate_axis (-0.8, X_AXIS); // ugh + inf.grob_l_->translate_axis (-0.8, X_AXIS); // ugh else if (gh_symbol_p (gl) && gl == ly_symbol2scm ("bracket") && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) { - inf.elem_l_->translate_axis ( -0.8, X_AXIS); // ugh - inf.elem_l_->set_grob_property ("arch-height", - gh_double2scm(gh_scm2double(inf.elem_l_->get_grob_property + inf.grob_l_->translate_axis ( -0.8, X_AXIS); // ugh + inf.grob_l_->set_grob_property ("arch-height", + gh_double2scm(gh_scm2double(inf.grob_l_->get_grob_property ("arch-height"))+0.5)); } } @@ -88,3 +87,9 @@ System_start_delimiter_engraver::finalize () typeset_grob (delim_); } +ENTER_DESCRIPTION(System_start_delimiter_engraver, +/* descr */ "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner", +/* creats*/ "SystemStartBar SystemStartBrace SystemStartBracket", +/* acks */ "system-start-delimiter-interface staff-symbol-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/tempo-performer.cc b/lily/tempo-performer.cc index 97be2fd709..fa2f0fd37c 100644 --- a/lily/tempo-performer.cc +++ b/lily/tempo-performer.cc @@ -13,9 +13,7 @@ class Tempo_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - - Tempo_performer (); + TRANSLATOR_DECLARATIONS(Tempo_performer); ~Tempo_performer (); protected: @@ -29,7 +27,8 @@ private: Audio_tempo* audio_p_; }; -ADD_THIS_TRANSLATOR (Tempo_performer); +ENTER_DESCRIPTION (Tempo_performer, "","","","","" ); + Tempo_performer::Tempo_performer () { diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index ed9473e000..3fdc1a3f71 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -24,7 +24,7 @@ class Text_engraver : public Engraver Link_array reqs_; Link_array texts_; public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Text_engraver); protected: virtual bool try_music (Music* m); virtual void stop_translation_timestep (); @@ -48,30 +48,30 @@ Text_engraver::try_music (Music *m) void Text_engraver::acknowledge_grob (Grob_info inf) { - if (Rhythmic_head::has_interface (inf.elem_l_)) + if (Rhythmic_head::has_interface (inf.grob_l_)) { for (int i=0; i < texts_.size (); i++) { Grob*t = texts_[i]; - Side_position_interface::add_support (t,inf.elem_l_); + Side_position_interface::add_support (t,inf.grob_l_); /* ugh. */ if (Side_position_interface::get_axis (t) == X_AXIS && !t->parent_l (Y_AXIS)) - t->set_parent (inf.elem_l_, Y_AXIS); + t->set_parent (inf.grob_l_, Y_AXIS); else if (Side_position_interface::get_axis (t) == Y_AXIS && !t->parent_l (X_AXIS)) - t->set_parent (inf.elem_l_, X_AXIS); + t->set_parent (inf.grob_l_, X_AXIS); } } - if (Stem::has_interface (inf.elem_l_)) + if (Stem::has_interface (inf.grob_l_)) { for (int i=0; i < texts_.size (); i++) { - Side_position_interface::add_support (texts_[i],inf.elem_l_); + Side_position_interface::add_support (texts_[i],inf.grob_l_); } } } @@ -157,5 +157,12 @@ Text_engraver::start_translation_timestep () reqs_.clear (); } -ADD_THIS_TRANSLATOR (Text_engraver); +Text_engraver::Text_engraver(){} + +ENTER_DESCRIPTION(Text_engraver, +/* descr */ "Create text-scripts", +/* creats*/ "TextScript", +/* acks */ "rhythmic-head-interface stem-interface", +/* reads */ "scriptHorizontal textNonEmpty", +/* write */ ""); diff --git a/lily/text-item.cc b/lily/text-item.cc index 5f7c4b8a3a..e4320a3daf 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -166,8 +166,8 @@ Text_item::markup_text2molecule (Grob *me, SCM markup_text, SCM e = ly_assoc_chain (ly_symbol2scm ("extent"), p); if (gh_pair_p (e) && ly_number_pair_p (ly_cdr (e))) { - extent = Interval (gh_scm2double (gh_cadr (e)) * staff_space, - gh_scm2double (gh_cddr (e)) * staff_space); + extent = Interval (gh_scm2double (ly_cadr (e)) * staff_space, + gh_scm2double (ly_cddr (e)) * staff_space); extent_b = true; } @@ -201,7 +201,7 @@ Text_item::markup_text2molecule (Grob *me, SCM markup_text, SCM next_p = SCM_EOL; if (gh_pair_p (ly_car (text))) - next_p = scm_list_n (gh_call2 (f, sheet, gh_caar (text)), SCM_UNDEFINED); + next_p = scm_list_n (gh_call2 (f, sheet, ly_caar (text)), SCM_UNDEFINED); SCM next_k = ly_assoc_chain (ly_symbol2scm ("kern"), next_p); Real next_kern = kern[axis]; if (gh_pair_p (next_k) && gh_number_p (ly_cdr (next_k))) diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index f0321e3532..8698c945a2 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -22,9 +22,7 @@ class Text_spanner_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); - Text_spanner_engraver (); - + TRANSLATOR_DECLARATIONS(Text_spanner_engraver); protected: virtual void finalize (); virtual void acknowledge_grob (Grob_info); @@ -41,7 +39,7 @@ private: void typeset_all (); }; -ADD_THIS_TRANSLATOR (Text_spanner_engraver); + Text_spanner_engraver::Text_spanner_engraver () @@ -136,10 +134,10 @@ Text_spanner_engraver::create_grobs () void Text_spanner_engraver::acknowledge_grob (Grob_info info) { - if (span_ && Note_column::has_interface (info.elem_l_)) + if (span_ && Note_column::has_interface (info.grob_l_)) { - Side_position_interface::add_support (span_, info.elem_l_); - add_bound_item (span_, dynamic_cast (info.elem_l_)); + Side_position_interface::add_support (span_, info.grob_l_); + add_bound_item (span_, dynamic_cast (info.grob_l_)); } } @@ -172,3 +170,9 @@ Text_spanner_engraver::finalize () } } +ENTER_DESCRIPTION(Text_spanner_engraver, +/* descr */ "Create text spanner from a Span_req ", +/* creats*/ "TextSpanner", +/* acks */ "note-column-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc index 9e995b2f74..5fcbda14fb 100644 --- a/lily/thread-devnull-engraver.cc +++ b/lily/thread-devnull-engraver.cc @@ -14,13 +14,13 @@ class Thread_devnull_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Thread_devnull_engraver); protected: virtual void acknowledge_grob (Grob_info); }; -ADD_THIS_TRANSLATOR (Thread_devnull_engraver); + void Thread_devnull_engraver::acknowledge_grob (Grob_info i) @@ -40,6 +40,21 @@ Thread_devnull_engraver::acknowledge_grob (Grob_info i) && to_boolean (get_property ("soloADue")))) { /* Ugh, we can suicide them, but they remain living */ - i.elem_l_->suicide (); + i.grob_l_->suicide (); } } +Thread_devnull_engraver::Thread_devnull_engraver(){} + +ENTER_DESCRIPTION(Thread_devnull_engraver, +/* descr */ "Kill elements whenever we are Voice called `two' and either +unison, unisilence or soloADue is set.@footnote{On unix systems, the +file @file{/dev/null} is special device: anything written to it is +discarded.}. This engraver works closely together with the part +combiner. When the part combiner notices that two threads are +identical, it tells the @code{Thread_devnull_engraver} to discard +everything in the second thread. +", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index d96acb32e9..9f541988d4 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -65,8 +65,7 @@ protected: virtual void create_grobs (); void typeset_tie (Grob*); public: - VIRTUAL_COPY_CONS (Translator); - Tie_engraver (); + TRANSLATOR_DECLARATIONS(Tie_engraver); }; @@ -107,12 +106,12 @@ Tie_engraver::set_melisma (bool m) void Tie_engraver::acknowledge_grob (Grob_info i) { - if (Rhythmic_head::has_interface (i.elem_l_)) + if (Rhythmic_head::has_interface (i.grob_l_)) { Note_req * m = dynamic_cast (i.req_l_); if (!m) return; - now_heads_.push (CHead_melodic_tuple (i.elem_l_, m, now_mom ()+ m->length_mom ())); + now_heads_.push (CHead_melodic_tuple (i.grob_l_, m, now_mom ()+ m->length_mom ())); } } @@ -180,8 +179,8 @@ Tie_engraver::create_grobs () Grob * p = new Spanner (basic); Tie::set_interface (p); - Tie::set_head (p, LEFT, dynamic_cast (unsmob_grob (gh_caar (s)))); - Tie::set_head (p, RIGHT, dynamic_cast (unsmob_grob (gh_cdar (s)))); + Tie::set_head (p, LEFT, dynamic_cast (unsmob_grob (ly_caar (s)))); + Tie::set_head (p, RIGHT, dynamic_cast (unsmob_grob (ly_cdar (s)))); tie_p_arr_.push (p); announce_grob (p, req_l_); @@ -275,7 +274,7 @@ Tie_engraver::start_translation_timestep () } -ADD_THIS_TRANSLATOR (Tie_engraver); + CHead_melodic_tuple::CHead_melodic_tuple () @@ -312,3 +311,9 @@ CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1, { return Moment::compare(h1.end_, h2.end_); } +ENTER_DESCRIPTION(Tie_engraver, +/* descr */ "Generate ties between noteheads of equal pitch.", +/* creats*/ "Tie TieColumn", +/* acks */ "rhythmic-head-interface", +/* reads */ "sparseTies tieMelismaBusy", +/* write */ ""); diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index e25e6cb4b2..f343ffaadb 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -39,8 +39,7 @@ inline int compare (CNote_melodic_tuple const &a, CNote_melodic_tuple const &b) class Tie_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - Tie_performer (); + TRANSLATOR_DECLARATIONS(Tie_performer); private: bool done_; PQueue past_notes_pq_; @@ -65,20 +64,9 @@ Tie_performer::Tie_performer () done_ = false; } -ADD_THIS_TRANSLATOR (Tie_performer); +ENTER_DESCRIPTION (Tie_performer, "", "", "", "", ""); -#if 0 -Tie_performer::Tie_performer () -{ - // URG - // if we don't do this, lily dumps core - // which means that ``initialize'' and - // ``start_translation_timestep'' did not happen?! - initialize (); -} -#endif - void Tie_performer::initialize () { @@ -175,6 +163,7 @@ Tie_performer::create_audio_elements () } } + void Tie_performer::stop_translation_timestep () { @@ -233,3 +222,4 @@ CNote_melodic_tuple::time_compare (CNote_melodic_tuple const&h1, { return (h1.end_ - h2.end_).main_part_.sign (); } + diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 4d9f071010..b7a2b26448 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -17,15 +17,17 @@ /** generate time_signatures. */ -class Time_signature_engraver : public Engraver { +class Time_signature_engraver : public Engraver +{ + Item * time_signature_p_; + SCM last_time_fraction_; + protected: virtual void stop_translation_timestep (); virtual void create_grobs (); public: - VIRTUAL_COPY_CONS (Translator); - Item * time_signature_p_; - SCM last_time_fraction_; - Time_signature_engraver (); + TRANSLATOR_DECLARATIONS(Time_signature_engraver); + }; @@ -67,6 +69,12 @@ Time_signature_engraver::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Time_signature_engraver); + +ENTER_DESCRIPTION(Time_signature_engraver, +/* descr */ "Create a TimeSignature whenever @code{timeSignatureFraction} changes", +/* creats*/ "TimeSignature", +/* acks */ "", +/* reads */ "", +/* write */ ""); diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index c518f96ed6..cb3f1322a9 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -14,9 +14,7 @@ class Time_signature_performer : public Performer { public: - VIRTUAL_COPY_CONS (Translator); - - Time_signature_performer (); + TRANSLATOR_DECLARATIONS(Time_signature_performer); ~Time_signature_performer (); protected: @@ -68,5 +66,5 @@ Time_signature_performer::stop_translation_timestep () audio_p_ = 0; } } -ADD_THIS_TRANSLATOR (Time_signature_performer); +ENTER_DESCRIPTION (Time_signature_performer, "","","","","" ); diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index fb02109583..909039db3a 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -28,8 +28,7 @@ protected: virtual void process_music (); public: - Timing_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Timing_engraver); }; @@ -38,7 +37,7 @@ Timing_engraver::Timing_engraver () last_moment_.main_part_ = Rational (-1); } -ADD_THIS_TRANSLATOR (Timing_engraver); + void Timing_engraver::start_translation_timestep () @@ -90,3 +89,13 @@ Timing_engraver::process_music () { Timing_translator::process_music (); } + +ENTER_DESCRIPTION(Timing_engraver, +/* descr */ " Responsible for synchronizing timing information from staves. +Normally in @code{Score}. In order to create polyrhythmic music, +this engraver should be removed from @code{Score} and placed in +@code{Staff}.", +/* creats*/ "", +/* acks */ "", +/* reads */ "timeSignatureFraction barCheckNoSynchronize barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber", +/* write */ ""); diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 7c05a7d14b..79b741034c 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -80,8 +80,6 @@ Timing_translator::stop_translation_timestep () } -ADD_THIS_TRANSLATOR (Timing_translator); - void Timing_translator::initialize () { diff --git a/lily/translator-ctors.cc b/lily/translator-ctors.cc index 3a66cefb75..0f41169106 100644 --- a/lily/translator-ctors.cc +++ b/lily/translator-ctors.cc @@ -19,6 +19,27 @@ */ Dictionary *global_translator_dict_p=0; + +SCM +ly_get_all_translators () +{ + SCM l = SCM_EOL; + for (std::map::const_iterator (ci (global_translator_dict_p->begin())); + ci != global_translator_dict_p->end (); ci++) + { + l = scm_cons ((*ci).second->self_scm (), l); + } + return l; +} + +static void +all_trans_init() +{ + scm_c_define_gsubr ("ly-get-all-translators", 0, 0, 0, (Scheme_function_unknown) ly_get_all_translators); +} + +ADD_SCM_INIT_FUNC(all_trans_init,all_trans_init); + void add_translator (Translator *t) { diff --git a/lily/translator-def.cc b/lily/translator-def.cc index 7f0a2bb34a..1d1f65aeb5 100644 --- a/lily/translator-def.cc +++ b/lily/translator-def.cc @@ -270,14 +270,14 @@ Translator_def::apply_property_operations (Translator_group*tg) if (type == push_sym) { - SCM val = gh_cddr (entry); + SCM val = ly_cddr (entry); val = gh_pair_p (val) ? ly_car (val) : SCM_UNDEFINED; - apply_pushpop_property (tg, ly_car (entry), gh_cadr (entry), val); + apply_pushpop_property (tg, ly_car (entry), ly_cadr (entry), val); } else if (type == assign_sym) { - tg->set_property (ly_car (entry), gh_cadr (entry)); + tg->set_property (ly_car (entry), ly_cadr (entry)); } } } diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 763bdc8997..bb7f8cb187 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -130,10 +130,12 @@ Translator_group::find_create_translator_l (String n, String id) { Translator_group * new_group = path[i]->instantiate (output_def_l_); + if (i == path.size () -1) + new_group->id_str_ = id; current->add_group_translator (new_group); current = new_group; } - current->id_str_ = id; + return current; } @@ -346,7 +348,7 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va SCM prev = get_property (prop); SCM newprops= SCM_EOL ; - while (gh_pair_p (prev) && gh_caar (prev) != eltprop) + while (gh_pair_p (prev) && ly_caar (prev) != eltprop) { newprops = gh_cons (ly_car (prev), newprops); prev = ly_cdr (prev); diff --git a/lily/translator.cc b/lily/translator.cc index a2e780f31d..6820044530 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -15,11 +15,6 @@ #include "moment.hh" #include "ly-smobs.icc" -char const* -Translator::name () const -{ - return classname (this); -} Translator::~Translator () { @@ -158,6 +153,37 @@ Translator::mark_smob (SCM sm) return me->properties_scm_; } +MAKE_SCHEME_CALLBACK(Translator,name,1); +SCM +Translator::name (SCM trans) +{ + if (unsmob_translator (trans)) + { + char const* nm = classname (unsmob_translator (trans)); + return gh_str02scm (nm); + } + return + SCM_EOL; +} + +MAKE_SCHEME_CALLBACK(Translator,description,1) +SCM +Translator::description (SCM me) +{ + if (unsmob_translator (me)) + return unsmob_translator(me)->translator_description (); + else + { + programming_error ("Translator::description ()"); + return SCM_EOL; + } +} + +SCM +Translator::translator_description () const +{ + return SCM_EOL; +} int Translator::print_smob (SCM s, SCM port, scm_print_state *) @@ -165,7 +191,7 @@ Translator::print_smob (SCM s, SCM port, scm_print_state *) Translator *sc = (Translator *) ly_cdr (s); scm_puts ("#name (), port); + scm_display (name (s), port); scm_display (sc->simple_trans_list_, port); /* don't try to print properties, that is too much hassle. @@ -175,6 +201,12 @@ Translator::print_smob (SCM s, SCM port, scm_print_state *) return 1; } +SCM +Translator::static_translator_description ()const +{ + return SCM_EOL; +} + IMPLEMENT_UNSMOB (Translator, translator); IMPLEMENT_SMOBS (Translator); IMPLEMENT_DEFAULT_EQUAL_P (Translator); diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index aa3f0065e5..1aaa75a3c8 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -20,7 +20,7 @@ class Tuplet_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Tuplet_engraver); protected: Link_array time_scaled_music_arr_; @@ -96,11 +96,11 @@ Tuplet_engraver::create_grobs () void Tuplet_engraver::acknowledge_grob (Grob_info i) { - if (Note_column::has_interface (i.elem_l_)) + if (Note_column::has_interface (i.grob_l_)) { for (int j =0; j (i.elem_l_)); + Tuplet_bracket::add_column (started_span_p_arr_[j], dynamic_cast (i.grob_l_)); } } @@ -148,6 +148,13 @@ Tuplet_engraver::finalize () } } -ADD_THIS_TRANSLATOR (Tuplet_engraver); +Tuplet_engraver::Tuplet_engraver(){} + +ENTER_DESCRIPTION(Tuplet_engraver, +/* descr */ "Catch Time_scaled_music and generate appropriate bracket ", +/* creats*/ "TupletBracket", +/* acks */ "note-column-interface", +/* reads */ "tupletNumberFormatFunction tupletSpannerDuration tupletInvisible", +/* write */ ""); diff --git a/lily/type-swallow-translator.cc b/lily/type-swallow-translator.cc index e16b9e316a..abc1540d77 100644 --- a/lily/type-swallow-translator.cc +++ b/lily/type-swallow-translator.cc @@ -18,6 +18,4 @@ Type_swallow_translator::try_music (Music*r) return false; } - - -DECLARE_REQUEST_SWALLOWER (Skip_req); +DECLARE_REQUEST_SWALLOWER(Skip_req); diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index c91890775f..65eb757387 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -18,8 +18,7 @@ class Vertical_align_engraver : public Engraver Spanner * valign_p_; bool qualifies_b (Grob_info) const; public: - VIRTUAL_COPY_CONS (Translator); - Vertical_align_engraver (); + TRANSLATOR_DECLARATIONS(Vertical_align_engraver); protected: virtual void acknowledge_grob (Grob_info); virtual void initialize (); @@ -53,8 +52,8 @@ Vertical_align_engraver::qualifies_b (Grob_info i) const { int sz = i.origin_trans_l_arr ((Translator*)this).size () ; - return sz > 1 && Axis_group_interface::has_interface (i.elem_l_) - && !i.elem_l_->parent_l (Y_AXIS) && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS); + return sz > 1 && Axis_group_interface::has_interface (i.grob_l_) + && !i.grob_l_->parent_l (Y_AXIS) && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS); } void @@ -62,8 +61,14 @@ Vertical_align_engraver::acknowledge_grob (Grob_info i) { if (qualifies_b (i)) { - Align_interface::add_element (valign_p_,i.elem_l_, get_property ("verticalAlignmentChildCallback")); + Align_interface::add_element (valign_p_,i.grob_l_, get_property ("verticalAlignmentChildCallback")); } } -ADD_THIS_TRANSLATOR (Vertical_align_engraver); + +ENTER_DESCRIPTION(Vertical_align_engraver, +/* descr */ "Catch Vertical axis groups and stack them.", +/* creats*/ "VerticalAlignment", +/* acks */ "axis-group-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc index 7a8d460f99..0a27f98ca1 100644 --- a/lily/voice-devnull-engraver.cc +++ b/lily/voice-devnull-engraver.cc @@ -14,14 +14,14 @@ class Voice_devnull_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Voice_devnull_engraver); protected: virtual bool try_music (Music *m); virtual void acknowledge_grob (Grob_info); }; -ADD_THIS_TRANSLATOR (Voice_devnull_engraver); + static char const *eat_spanners[] = { "beam", @@ -95,19 +95,26 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i) && (to_boolean (get_property ("unison")) || to_boolean (get_property ("unisilence"))))) for (char const **p = junk_interfaces; *p; p++) - if (i.elem_l_->has_interface (ly_symbol2scm (*p))) + if (i.grob_l_->has_interface (ly_symbol2scm (*p))) { #if 0 /* Ugh: virtual mmrest::suicide () ? */ - if (i.elem_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface"))) - i.elem_l_->set_grob_property ("skip-timestep", SCM_BOOL_T); + if (i.grob_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface"))) + i.grob_l_->set_grob_property ("skip-timestep", SCM_BOOL_T); else ; #endif /* Ugh, we can suicide them, but they remain living */ - i.elem_l_->suicide (); + i.grob_l_->suicide (); return; } } +Voice_devnull_engraver::Voice_devnull_engraver(){} +ENTER_DESCRIPTION(Voice_devnull_engraver, +/* descr */ "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ ""); diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 68d849c1c2..cc163f9bc9 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -22,8 +22,7 @@ class Volta_engraver : public Engraver { public: - Volta_engraver (); - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Volta_engraver); protected: virtual void acknowledge_grob (Grob_info); @@ -39,8 +38,6 @@ protected: SCM start_str_; }; -ADD_THIS_TRANSLATOR (Volta_engraver); - Volta_engraver::Volta_engraver () { volta_span_p_ = 0; @@ -62,10 +59,10 @@ Volta_engraver::process_music () if (gh_pair_p (c) && ly_car (c) == ly_symbol2scm ("volta") && gh_pair_p (ly_cdr (c))) { - if (gh_cadr (c) == SCM_BOOL_F) + if (ly_cadr (c) == SCM_BOOL_F) end = true; else - start_str_ = gh_cadr (c); + start_str_ = ly_cadr (c); } cs = ly_cdr (cs); @@ -135,7 +132,7 @@ Volta_engraver::create_grobs () void Volta_engraver::acknowledge_grob (Grob_info i) { - if (Item* item = dynamic_cast (i.elem_l_)) + if (Item* item = dynamic_cast (i.grob_l_)) { if (Note_column::has_interface (item)) { @@ -182,3 +179,10 @@ Volta_engraver::stop_translation_timestep () /* TODO: should attach volta to paper-column if no bar is found. */ + +ENTER_DESCRIPTION(Volta_engraver, +/* descr */ "Make volta brackets", +/* creats*/ "VoltaBracket", +/* acks */ "bar-line-interface note-column-interface", +/* reads */ "repeatCommands voltaSpannerDuration", +/* write */ ""); diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 1c86fc7a3b..6261811a13 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -321,7 +321,6 @@ ScoreContext = \translator { \type Score_engraver \name Score - \consists "Repeat_acknowledge_engraver" \consists "Timing_engraver" \consists "Output_property_engraver" @@ -330,7 +329,6 @@ ScoreContext = \translator { \consists "Break_align_engraver" \consists "Spacing_engraver" \consists "Vertical_align_engraver" - \consists "Lyric_phrasing_engraver" \consists "Bar_number_engraver" \consists "Span_arpeggio_engraver" @@ -369,7 +367,8 @@ ScoreContext = \translator { explicitClefVisibility = #all-visible explicitKeySignatureVisibility = #all-visible - + autoBeamSettings = #auto-beam-settings + scriptDefinitions = #default-script-alist verticalAlignmentChildCallback = #Align_interface::alignment_callback @@ -399,7 +398,7 @@ ScoreContext = \translator { ) - \elementdescriptions #all-grob-descriptions + \grobdescriptions #all-grob-descriptions } OrchestralScoreContext= \translator { diff --git a/modules/midi.c b/modules/midi.c index 747ed1b5ab..768e6308e9 100644 --- a/modules/midi.c +++ b/modules/midi.c @@ -23,6 +23,8 @@ midi.parse (s) /* urg */ #if HAVE_PYTHON2_PYTHON_H #include +#elif HAVE_PYTHON2_0_PYTHON_H +#include #elif HAVE_PYTHON1_5_PYTHON_H #include #elif HAVE_PYTHON_PYTHON_H diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 4475fd390c..88992926cf 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -81,7 +81,6 @@ ((end * * 12 8) . ,(make-moment 3 8)) ((end 1 16 12 8) . ,(make-moment 3 8)) ((end 1 32 12 8) . ,(make-moment 1 8)) - (meta . ,(grob-description "autoBeamSettings")) )) ;;; Users may override in most cases, simply by issuing diff --git a/scm/backend-documentation-lib.scm b/scm/backend-documentation-lib.scm index 4c14181208..63d2937e15 100644 --- a/scm/backend-documentation-lib.scm +++ b/scm/backend-documentation-lib.scm @@ -84,25 +84,22 @@ (node (grob-name name)) (texi-section 2 (grob-name name) #f) "\n" - (let* ((grob (string->symbol name)) - (engravers - (apply append - (map (lambda (x) - (let ((engraver (car x)) - (objs (cadddr x))) - (if (member grob objs) - (list engraver) - '()))) - engraver-description-alist)))) + (engravers (filter-list + (lambda (x) (engraver-makes-grob? name x)) all-engravers-list)) + (engraver-names (map Translator::name engravers)) + ) + (string-append name " grobs are created by: " (human-listify (map ref-ify - (map engraver-name - (map symbol->string engravers)))))) + (map engraver-name engraver-names))))) - (apply string-append ifacedoc)))) + (apply string-append ifacedoc)))) +(define (engraver-makes-grob? name grav) + (memq name (assoc 'grobs-created (Translator::description grav))) + ) (define (document-all-grobs name) (let* ((doc (apply string-append diff --git a/scm/context-description.scm b/scm/context-description.scm new file mode 100644 index 0000000000..505bc079cc --- /dev/null +++ b/scm/context-description.scm @@ -0,0 +1,92 @@ + +;; todo: move this to engraver-init.ly + +(define context-description-alist + '( + (Grace . " + The context for handling grace notes. It used to be instantiated + automatically when you use @code{\grace}. Basically, it is an + `embedded' miniature of the Score context. Since this context + needs special interaction with the rest of LilyPond, you should + not explicitly instantiate it. + + DEPRECATED. +") + (LyricsVoice . " + Corresponds to a voice with lyrics. Handles the printing of a + single line of lyrics. +") + (Thread . " + Handles note heads, and is contained in the Voice context. You + have to instantiate this explicitly if you want to adjust the + style of individual note heads. +") + (Voice . " + Corresponds to a voice on a staff. This context handles the + conversion of dynamic signs, stems, beams, super- and subscripts, + slurs, ties, and rests. + + You have to instantiate this explicitly if you want to have + multiple voices on the same staff.") + + (ChordNamesVoice . " + A voice with chord names. Handles printing of a line of chord + names.") + + (ChordNames . " + Typesets chord names. Can contain @code{ChordNamesVoice} + contexts.") + + (Lyrics . " + Typesets lyrics. It can contain @code{LyricsVoice} contexts. +") + (Staff . " + Handles clefs, bar lines, keys, accidentals. It can contain + @code{Voice} contexts. +") + (RhythmicStaff . " + A context like @code{Staff} but for printing rhythms. Pitches are + ignored; the notes are printed on one line. It can contain + @code{Voice} contexts. +") + (GrandStaff . " + Contains @code{Staff} or @code{RhythmicStaff} contexts. It adds a + brace on the left side, grouping the staves together. The bar + lines of the contained staves are connected vertically. It can + contain @code{Staff} contexts.") + + (PianoStaff . " + Just like @code{GrandStaff} but with @code{minVerticalAlign} set + equal to @code{maxVerticalAlign} so that interstaff beaming and + slurring can be used.") + + (StaffGroup . " + Contains @code{Staff} or @code{RhythmicStaff} contexts. Adds a + bracket on the left side, grouping the staves together. The bar + lines of the contained staves are connected vertically. It can + contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or + @code{Lyrics} contexts. +") + (ChoirStaff . " + Identical to @code{StaffGroup} except that the contained staves + are not connected vertically. +") + (Score . " + This is the top level notation context. No other context can + contain a @code{Score} context. This context handles the + administration of time signatures. It also makes sure that items + such as clefs, time signatures, and key-signatures are aligned + across staves. It can contain @code{Lyrics}, @code{Staff}, + @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and + @code{ChoirStaff} contexts. + + You cannot explicitly instantiate a Score context (since it is + not contained in any other context). It is instantiated + automatically when an output definition (a @code{\score} or + @code{\paper} block) is processed. +") + ) + ) + +(set! context-description-alist + (sort context-description-alist aliststring name) + name)) (define (interface-name name) name) diff --git a/scm/engraver-documentation-lib.scm b/scm/engraver-documentation-lib.scm index 862a1da057..6183686e0c 100644 --- a/scm/engraver-documentation-lib.scm +++ b/scm/engraver-documentation-lib.scm @@ -1,5 +1,5 @@ -;;; engraver-documentation-lib.scm -- Functions for engraver documentation +;;; engraver-doumentation-lib.scm -- Functions for engraver documentation ;;; ;;; source file of the GNU LilyPond music typesetter ;;; @@ -19,31 +19,39 @@ ;; First level Engraver description and ;; second level Context description -(define (document-engraver where engraver-descr) +(define (document-engraver where engraver) + (let* ( (level (if (eq? where 'context) 3 2)) - (props (car (cdddr engraver-descr))) - (name (car engraver-descr)) + (propsr (cdr (assoc 'properties-read (Translator::description engraver)))) + (propsw (cdr (assoc 'properties-written (Translator::description engraver)))) + (name (Translator::name engraver)) (name-sym (string->symbol name)) - (desc (cadr engraver-descr)) - (objs (map symbol->string (caddr engraver-descr))) + (desc (cdr (assoc 'description (Translator::description engraver)))) + (grobs (cdr (assoc 'grobs-created (Translator::description engraver)))) ) (string-append (texi-section level (engraver-name name) (eq? where 'context)) desc "\n\n" - (if (null? props) + (if (null? propsr) "" (string-append - (texi-section (+ level 1) "Properties" #f) + (texi-section (+ level 1) "Properties (read)" #f) (description-list->texi - (map (lambda (x) (document-translator-property x)) props)))) - (if (null? objs) + (map (lambda (x) (document-translator-property x)) propsr)))) + (if (null? propsw) + "" + (string-append + (texi-section (+ level 1) "Properties (write)" #f) + (description-list->texi + (map (lambda (x) (document-translator-property x)) propsw)))) + (if (null? grobs) "" (string-append "This engraver creates the following grobs: \n " - (human-listify (map ref-ify (uniq-list (sort objs stringsymbol name) engraver-description-alist)) + (eg (find-engraver-by-name name all-engravers-list)) ) (if (eq? eg #f) (string-append "Engraver " name ", not documented.\n") - (document-engraver 'context (cdr eg)) + (document-engraver 'context eg) ) )) @@ -128,12 +143,12 @@ (define (engraver-grobs name) (let* ( - (eg (assoc (string->symbol name) engraver-description-alist)) + (eg (find-engraver-by-name name all-engravers-list)) ) (if (eq? eg #f) '() - (map symbol->string (caddr (cdr eg))) + (cdr (assoc 'grobs-created (Translator::description eg))) ) )) @@ -179,12 +194,13 @@ names)) doc))) +(define all-engravers-list (ly-get-all-translators)) (define (document-all-engravers name) - (let* ((descs (map cdr engraver-description-alist)) - (names (map symbol->string (map car engraver-description-alist))) + (let* ((gravs all-engravers-list) + (names (map Translator::name gravs)) (doc (apply string-append (map (lambda (x) (document-separate-engraver name x)) - descs)))) + gravs)))) (string-append (texi-node-menu name (map (lambda (x) (cons (engraver-name x) "")) names)) diff --git a/scm/generate-documentation.scm b/scm/generate-documentation.scm index 114d5f2de7..5e3f8f805f 100644 --- a/scm/generate-documentation.scm +++ b/scm/generate-documentation.scm @@ -11,17 +11,13 @@ ;;; Running LilyPond on this file generates the documentation +(define load-files '("documentation-lib.scm" + "engraver-documentation-lib.scm" + "music-documentation-lib.scm" + "backend-documentation-lib.scm")) + +(map load-from-path load-files) -;; We use ly-gulp because these files live in -;; -;; PATH=$LILYPONDPREFIX/scm:/scm -;; -(eval-string - (apply string-append - (map ly-gulp-file '("documentation-lib.scm" - "engraver-documentation-lib.scm" - "music-documentation-lib.scm" - "backend-documentation-lib.scm")))) ;;(define no-copies #t) ; from 490 to 410K, but doesn't look nice yet ;; diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 98f29a9d6d..3683ebda1e 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -1,3 +1,4 @@ + ;;;; grob-description.scm -- part of generated backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter @@ -18,6 +19,7 @@ )) +;;; WARNING: the meta field should be the last one. (define all-grob-descriptions `( (Accidentals . ( @@ -27,7 +29,7 @@ (direction . -1) (left-padding . 0.2) (right-padding . 0.4) - (meta . ,(grob-description "Accidentals" accidentals-interface font-interface side-position-interface)) + (meta . ,(grob-description accidentals-interface font-interface side-position-interface)) )) (Arpeggio . ( @@ -38,11 +40,9 @@ (X-offset-callbacks . (,Side_position_interface::aligned_side)) (direction . -1) (staff-position . 0.0) - (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface)) + (meta . ,(grob-description arpeggio-interface side-position-interface font-interface)) )) - (autoBeamSettings . ,auto-beam-settings) - (BarLine . ( (break-align-symbol . Staff_bar) (glyph . "|") @@ -59,7 +59,7 @@ (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) - (meta . ,(grob-description "BarLine" bar-line-interface font-interface)) + (meta . ,(grob-description bar-line-interface font-interface)) )) (BarNumber . ( @@ -71,7 +71,7 @@ (font-family . roman) (font-relative-size . -1) (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (meta . ,(grob-description "BarNumber" + (meta . ,(grob-description side-position-interface text-interface font-interface break-aligned-interface)) )) @@ -83,7 +83,7 @@ (accidental-alist . ,default-alteration-alist) (font-family . number) (font-relative-size . -1) - (meta . ,(grob-description "BassFigure" text-interface font-interface )) + (meta . ,(grob-description text-interface font-interface )) )) (Beam . ( ;; todo: clean this up a bit: the list is getting @@ -110,7 +110,7 @@ (space-function . ,default-beam-space-function) (damping . 1) (auto-knee-gap . 7) - (meta . ,(grob-description "Beam" beam-interface)) + (meta . ,(grob-description beam-interface)) )) (BreakAlignment . ( @@ -118,7 +118,7 @@ (stacking-dir . 1) (axes 0) (space-alist . ,default-break-align-space-alist) - (meta . ,(grob-description "BreakAlignment" + (meta . ,(grob-description axis-group-interface align-interface ) ) @@ -128,7 +128,7 @@ (axes . (0)) (X-offset-callbacks . (,Break_align_interface::alignment_callback)) - (meta . ,(grob-description "BreakAlignGroup" axis-group-interface)) + (meta . ,(grob-description axis-group-interface)) )) (BreathingSign . ( @@ -137,7 +137,7 @@ (molecule-callback . ,Breathing_sign::brew_molecule) (Y-offset-callbacks . (,Breathing_sign::offset_callback)) (visibility-lambda . ,begin-of-line-invisible) - (meta . ,(grob-description "BreathingSign" break-aligned-interface)) + (meta . ,(grob-description break-aligned-interface)) )) (Clef . ( @@ -148,7 +148,7 @@ (break-align-symbol . Clef_item) (visibility-lambda . ,begin-of-line-visible) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) - (meta . ,(grob-description "Clef" clef-interface font-interface break-aligned-interface )) + (meta . ,(grob-description clef-interface font-interface break-aligned-interface )) )) (ChordName . ( @@ -156,7 +156,7 @@ (after-line-breaking-callback . ,Chord_name::after_line_breaking) (chord-name-function . ,default-chord-name-function) (font-family . roman) - (meta . ,(grob-description "ChordName" font-interface text-interface chord-name-interface)) + (meta . ,(grob-description font-interface text-interface chord-name-interface)) )) (Custos . ( @@ -166,7 +166,7 @@ (visibility-lambda . ,end-of-line-visible) (style . vaticana) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) - (meta . ,(grob-description "Custos" custos-interface staff-symbol-referencer-interface break-aligned-interface) ) + (meta . ,(grob-description custos-interface staff-symbol-referencer-interface break-aligned-interface) ) )) @@ -176,7 +176,7 @@ (X-extent-callback . ,Axis_group_interface::group_extent_callback) (X-offset-callbacks . (,Dot_column::side_position)) - (meta . ,(grob-description "DotColumn" dot-column-interface axis-group-interface)) + (meta . ,(grob-description dot-column-interface axis-group-interface)) )) (Dots . ( @@ -184,7 +184,7 @@ (dot-count . 1) (staff-position . 0.0) (Y-offset-callbacks . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback)) - (meta . ,(grob-description "Dots" font-interface dots-interface )) + (meta . ,(grob-description font-interface dots-interface )) )) (DoublePercentRepeat . ((molecule-callback . ,Percent_repeat_item_interface::double_percent) @@ -195,7 +195,7 @@ (thickness . 0.48) (break-align-symbol . Staff_bar) (visibility-lambda . ,begin-of-line-invisible) - (meta . ,(grob-description "DoublePercentRepeat" font-interface percent-repeat-interface)) + (meta . ,(grob-description font-interface percent-repeat-interface)) )) (DynamicText . ( @@ -210,7 +210,7 @@ (font-family . dynamic) (font-shape . italic) (self-alignment-Y . 0) - (meta . ,(grob-description "DynamicText" font-interface text-interface dynamic-interface)) + (meta . ,(grob-description font-interface text-interface dynamic-interface)) )) (DynamicLineSpanner . ( @@ -218,14 +218,14 @@ (padding . 0.6) (minimum-space . 1.2) (direction . -1) - (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface)) + (meta . ,(grob-description dynamic-interface axis-group-interface side-position-interface)) )) (LeftEdge . ( (break-align-symbol . Left_edge_item) (X-offset-callbacks . (,Break_align_interface::alignment_callback)) (breakable . #t) - (meta . ,(grob-description "LeftEdge" break-aligned-interface)) + (meta . ,(grob-description break-aligned-interface)) )) (Fingering . ( @@ -237,7 +237,7 @@ (font-family . number) (font-relative-size . -3) (font-shape . upright) - (meta . ,(grob-description "Fingering" finger-interface font-interface text-script-interface text-interface side-position-interface)) + (meta . ,(grob-description finger-interface font-interface text-script-interface text-interface side-position-interface)) )) @@ -245,7 +245,7 @@ (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback)) (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent) (axes 1) - (meta . ,(grob-description "HaraKiriVerticalGroup" axis-group-interface hara-kiri-group-interface)) + (meta . ,(grob-description axis-group-interface hara-kiri-group-interface)) )) (Hairpin . ( (molecule-callback . ,Hairpin::brew_molecule) @@ -260,7 +260,7 @@ (dash-length . 4.0) (self-alignment-Y . 0) (Y-offset-callbacks . (,Side_position_interface::aligned_on_self)) - (meta . ,(grob-description "Hairpin" hairpin-interface dynamic-interface)) + (meta . ,(grob-description hairpin-interface dynamic-interface)) )) (InstrumentName . ( @@ -275,7 +275,7 @@ (visibility-lambda . ,begin-of-line-visible) (baseline-skip . 2) (font-family . roman) - (meta . ,(grob-description "InstrumentName" font-interface text-interface break-aligned-interface)) + (meta . ,(grob-description font-interface text-interface break-aligned-interface)) )) (KeySignature . ( @@ -283,7 +283,7 @@ (break-align-symbol . Key_item) (visibility-lambda . ,begin-of-line-visible) (breakable . #t) - (meta . ,(grob-description "KeySignature" key-signature-interface font-interface break-aligned-interface)) + (meta . ,(grob-description key-signature-interface font-interface break-aligned-interface)) )) @@ -294,12 +294,12 @@ (maximum-length . 100) (molecule-callback . ,Hyphen_spanner::brew_molecule) (Y-extent-callback . ,Grob::point_dimension_callback) - (meta . ,(grob-description "LyricHyphen" lyric-hyphen-interface )) + (meta . ,(grob-description lyric-hyphen-interface )) )) (LineOfScore . ( (axes . (0 1)) - (meta . ,(grob-description "LineOfScore" line-of-score-interface axis-group-interface)) + (meta . ,(grob-description line-of-score-interface axis-group-interface)) )) (LyricExtender . ( @@ -307,7 +307,7 @@ (height . 0.8) ; stafflinethickness; (right-trim-amount . 0.5) (Y-extent-callback . ,Grob::point_dimension_callback) - (meta . ,(grob-description "LyricExtender" lyric-extender-interface)) + (meta . ,(grob-description lyric-extender-interface)) )) (LyricText . ( @@ -318,7 +318,7 @@ (word-space . 0.6) (font-family . roman) (font-shape . upright) - (meta . ,(grob-description "LyricText" lyric-syllable-interface text-interface font-interface )) + (meta . ,(grob-description lyric-syllable-interface text-interface font-interface )) )) (Porrectus . ( @@ -330,7 +330,7 @@ (add-stem . #t) (stem-direction . 1) (molecule-callback . ,Porrectus::brew_molecule) - (meta . ,(grob-description "Porrectus" + (meta . ,(grob-description porrectus-interface)) )) @@ -346,7 +346,7 @@ (font-relative-size . 1) (visibility-lambda . ,end-of-line-invisible) (padding . 0.8) - (meta . ,(grob-description "RehearsalMark" mark-interface side-position-interface)) + (meta . ,(grob-description mark-interface side-position-interface)) )) (MultiMeasureRest . ( @@ -359,31 +359,28 @@ (minimum-width . 12.5) ; staffspace (font-family . number) (font-relative-size . 1) - (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface rest-interface font-interface )) + (meta . ,(grob-description multi-measure-rest-interface rest-interface font-interface )) )) (NoteCollision . ( (axes 0 1) ;; Ugh, should not be hard-coded. (note-width . 1.321) - (meta . ,(grob-description "NoteCollision" + (meta . ,(grob-description note-collision-interface axis-group-interface )) )) (NoteColumn . ( (axes . (0 1)) - (meta . ,(grob-description "NoteColumn" axis-group-interface note-column-interface)) + (meta . ,(grob-description axis-group-interface note-column-interface)) )) (NoteHead . ( (style . default) (molecule-callback . ,Note_head::brew_molecule) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) - (stem-attachment-function - . ,note-head-style->attachment-coordinates) - (meta . ,(grob-description "NoteHead" - rhythmic-head-interface font-interface - note-head-interface )) + (stem-attachment-function . ,note-head-style->attachment-coordinates) + (meta . ,(grob-description rhythmic-head-interface font-interface note-head-interface)) )) (Glissando . ( (type . line) @@ -392,8 +389,7 @@ (X-extent-callback . #f) (Y-extent-callback . #f) (molecule-callback . ,Line_spanner::brew_molecule) - (meta . ,(grob-description "Glissando" - line-spanner-interface)) + (meta . ,(grob-description line-spanner-interface)) )) (VoiceFollower . ( (type . line) @@ -402,16 +398,13 @@ (X-extent-callback . #f) (Y-extent-callback . #f) (molecule-callback . ,Line_spanner::brew_molecule) - (meta . ,(grob-description "VoiceFollower" - line-spanner-interface)) + (meta . ,(grob-description line-spanner-interface)) )) (NoteName . ( (molecule-callback . ,Text_item::brew_molecule) (font-family . roman) - (meta . ,(grob-description "NoteName" - note-name-interface font-interface - )) + (meta . ,(grob-description note-name-interface font-interface)) )) (OctavateEight . ( @@ -423,14 +416,14 @@ (molecule-callback . ,Text_item::brew_molecule) (font-shape . italic) (font-family . roman) - (meta . ,(grob-description "OctavateEight" text-interface font-interface )) + (meta . ,(grob-description text-interface font-interface )) )) (PaperColumn . ( (axes 0) (before-grace-spacing-factor . 1.2) (before-musical-spacing-factor . 0.4) - (meta . ,(grob-description "PaperColumn" paper-column-interface axis-group-interface spaceable-element-interface)) + (meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface)) )) (PhrasingSlur . ( (molecule-callback . ,Slur::brew_molecule) @@ -451,14 +444,14 @@ (attachment . (#f . #f)) (attachment-offset . ((0 . 0) . (0 . 0))) (slope-limit . 0.8) - (meta . ,(grob-description "PhrasingSlur" slur-interface)) + (meta . ,(grob-description slur-interface)) )) (NonMusicalPaperColumn . ( (axes 0) (before-musical-spacing-factor . 1.0) (column-space-strength . 2.0) - (meta . ,(grob-description "NonMusicalPaperColumn" paper-column-interface axis-group-interface spaceable-element-interface)) + (meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface)) )) (PercentRepeat . ( @@ -468,7 +461,7 @@ (thickness . 0.48) (minimum-width . 12.5) ; staffspace (font-family . music) - (meta . ,(grob-description "PercentRepeat" multi-measure-rest-interface font-interface percent-repeat-interface)) + (meta . ,(grob-description multi-measure-rest-interface font-interface percent-repeat-interface)) )) @@ -476,7 +469,7 @@ (molecule-callback . , Percent_repeat_item_interface::beat_slash) (thickness . 0.48) (slope . 1.7) - (meta . ,(grob-description "RepeatSlash" percent-repeat-interface)) + (meta . ,(grob-description percent-repeat-interface)) )) (Rest . ( (after-line-breaking-callback . ,Rest::after_line_breaking) @@ -485,14 +478,14 @@ (molecule-callback . ,Rest::brew_molecule) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) (minimum-beam-collision-distance . 1.5) - (meta . ,(grob-description "Rest" + (meta . ,(grob-description rhythmic-head-interface staff-symbol-referencer-interface rest-interface)) )) (RestCollision . ( (minimum-distance . 0.75) - (meta . ,(grob-description "RestCollision" rest-collision-interface )) + (meta . ,(grob-description rest-collision-interface )) )) (Script . ( @@ -501,12 +494,12 @@ (padding . 0.29) (X-offset-callbacks . (,Side_position_interface::centered_on_parent)) (before-line-breaking-callback . ,Script::before_line_breaking) - (meta . ,(grob-description "Script" script-interface side-position-interface font-interface)) + (meta . ,(grob-description script-interface side-position-interface font-interface)) )) (ScriptColumn . ( (before-line-breaking-callback . ,Script_column::before_line_breaking) - (meta . ,(grob-description "ScriptColumn" script-column-interface)) + (meta . ,(grob-description script-column-interface)) )) (Slur . ( @@ -528,7 +521,7 @@ (attachment . (#f . #f)) (attachment-offset . ((0 . 0) . (0 . 0))) (slope-limit . 0.8) - (meta . ,(grob-description "Slur" slur-interface)) + (meta . ,(grob-description slur-interface)) )) (SpacingSpanner . ( @@ -541,7 +534,7 @@ (arithmetic-multiplier . ,(* 0.9 1.32)) ;; assume that notes at least this long are present. (maximum-duration-for-spacing . ,(make-moment 1 8)) - (meta . ,(grob-description "SpacingSpanner" spacing-spanner-interface)) + (meta . ,(grob-description spacing-spanner-interface)) )) (SpanBar . ( (break-align-symbol . Staff_bar) @@ -561,7 +554,7 @@ (thin-kern . 3.0) (hair-thickness . 1.6) (thick-thickness . 6.0) - (meta . ,(grob-description "SpanBar" span-bar-interface bar-line-interface )) + (meta . ,(grob-description span-bar-interface bar-line-interface )) )) (StanzaNumber . ( @@ -570,7 +563,7 @@ (break-align-symbol . Clef_item) (visibility-lambda . ,begin-of-line-visible) (font-family . roman) - (meta . ,(grob-description "StanzaNumber" break-aligned-interface text-interface font-interface)) + (meta . ,(grob-description break-aligned-interface text-interface font-interface)) )) (StaffSymbol . ( @@ -578,7 +571,7 @@ (staff-space . 1.0) (line-count . 5) (layer . 0) - (meta . ,(grob-description "StaffSymbol" staff-symbol-interface )) + (meta . ,(grob-description staff-symbol-interface )) )) (SostenutoPedal . ( (molecule-callback . ,Text_item::brew_molecule) @@ -590,7 +583,7 @@ (no-spacing-rods . #t) (font-shape . italic) (self-alignment-X . 0) - (meta . ,(grob-description "SostenutoPedal" text-interface font-interface)) + (meta . ,(grob-description text-interface font-interface)) )) (Stem . ( @@ -611,7 +604,7 @@ (X-offset-callbacks . (,Stem::off_callback)) (X-extent-callback . ,Stem::dim_callback) (Y-extent-callback . ,Stem::height) - (meta . ,(grob-description "Stem" stem-interface font-interface)) + (meta . ,(grob-description stem-interface font-interface)) )) (StemTremolo . ( @@ -622,15 +615,15 @@ (beam-width . 2.0) ; staff-space (beam-thickness . 0.42) ; staff-space (beam-space-function . ,default-beam-space-function) - (meta . ,(grob-description "StemTremolo" stem-tremolo-interface )) + (meta . ,(grob-description stem-tremolo-interface )) )) (SeparationItem . ( - (meta . ,(grob-description "SeparationItem" separation-item-interface )) + (meta . ,(grob-description separation-item-interface )) )) (SeparatingGroupSpanner . ( (spacing-procedure . ,Separating_group_spanner::set_spacing_rods) - (meta . ,(grob-description "SeparatingGroupSpanner" separation-spanner-interface)) + (meta . ,(grob-description separation-spanner-interface)) )) (SustainPedal . ( @@ -643,7 +636,7 @@ (,Side_position_interface::aligned_side ,Side_position_interface::centered_on_parent)) - (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface)) + (meta . ,(grob-description sustain-pedal-interface side-position-interface font-interface)) )) ;; TODO: should split in 3 @@ -653,7 +646,7 @@ (collapse-height . 5.0) (font-family . braces) (Y-extent-callback . #f) - (meta . ,(grob-description "SystemStartBrace" system-start-delimiter-interface font-interface)) + (meta . ,(grob-description system-start-delimiter-interface font-interface)) )) (SystemStartBracket . ( (Y-extent-callback . #f) @@ -663,9 +656,9 @@ (arch-angle . 50.0) (arch-thick . 0.25) (arch-width . 1.5) - (thickness . 0.25) - (meta . ,(grob-description "SystemStartBracket" system-start-delimiter-interface )) (bracket-collapse-height . 1) + (thickness . 0.25) + (meta . ,(grob-description system-start-delimiter-interface )) )) (SystemStartBar . ( (Y-extent-callback . #f) @@ -673,7 +666,7 @@ (glyph . bar-line) (thickness . 1.6) (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking) - (meta . ,(grob-description "SystemStartBar" system-start-delimiter-interface )) + (meta . ,(grob-description system-start-delimiter-interface )) )) (TextScript . ( @@ -684,7 +677,7 @@ ;; todo: add X self alignment? (baseline-skip . 2) (font-family . roman) - (meta . ,(grob-description "TextScript" text-script-interface text-interface side-position-interface font-interface )) + (meta . ,(grob-description text-script-interface text-interface side-position-interface font-interface )) )) (TextSpanner . ( (molecule-callback . ,Text_spanner::brew_molecule) @@ -696,7 +689,7 @@ (width-correct . -1) (direction . 1) - (meta . ,(grob-description "TextSpanner" text-spanner-interface font-interface)) + (meta . ,(grob-description text-spanner-interface font-interface)) )) (Tie . ( (molecule-callback . ,Tie::brew_molecule) @@ -707,12 +700,12 @@ (x-gap . 0.2) (y-offset . 0.6) (minimum-length . 2.5) - (meta . ,(grob-description "Tie" tie-interface )) + (meta . ,(grob-description tie-interface )) )) (TieColumn . ( (after-line-breaking-callback . ,Tie_column::after_line_breaking) - (meta . ,(grob-description "TieColumn" tie-column-interface )) + (meta . ,(grob-description tie-column-interface )) )) (TimeSignature . ( @@ -722,7 +715,7 @@ (breakable . #t) (style . C) (font-family . number) - (meta . ,(grob-description "TimeSignature" time-signature-interface font-interface)) + (meta . ,(grob-description time-signature-interface font-interface)) )) (TupletBracket . ( @@ -733,7 +726,7 @@ (font-family . roman) (font-shape . italic) (font-relative-size . -1) - (meta . ,(grob-description "TupletBracket" text-interface + (meta . ,(grob-description text-interface tuplet-bracket-interface font-interface)) )) @@ -748,7 +741,7 @@ (Y-offset-callbacks . (,Side_position_interface::aligned_side ,Side_position_interface::centered_on_parent)) - (meta . ,(grob-description "UnaCordaPedal" text-interface font-interface)) + (meta . ,(grob-description text-interface font-interface)) )) (VoltaBracket . ( @@ -763,25 +756,38 @@ (minimum-space . 5) (font-family . number) (font-relative-size . -2) - (meta . ,(grob-description "VoltaBracket" volta-bracket-interface side-position-interface font-interface)) + (meta . ,(grob-description volta-bracket-interface side-position-interface font-interface)) )) - (VerticalAlignment . ( (axes 1) (Y-extent-callback . ,Axis_group_interface::group_extent_callback) (X-extent-callback . #f) (stacking-dir . -1) - (meta . ,(grob-description "VerticalAlignment" align-interface axis-group-interface)) + (meta . ,(grob-description align-interface axis-group-interface)) )) - (VerticalAxisGroup . ( (axes 1) - (meta . ,(grob-description "VerticalAxisGroup" axis-group-interface)) + (meta . ,(grob-description axis-group-interface)) )) )) + +(define (completize-grob-entry x) + "transplant assoc key into 'name entry of 'meta of X +" + (let* ((name-sym (car x)) + (entry (cdr x)) + (metaentry (cdr (assoc 'meta entry))) + (new-metaentry (assoc-set! metaentry 'name name-sym)) + ) + + (cons name-sym (assoc-set! entry 'meta new-metaentry)) + )) + +(set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions)) + ; (display (map pair? all-grob-descriptions)) diff --git a/scm/interface-description.scm b/scm/interface-description.scm index 9a375415ad..8bd3ca2ed7 100644 --- a/scm/interface-description.scm +++ b/scm/interface-description.scm @@ -24,15 +24,14 @@ ) ) -(define (grob-description name . interfaces) - (let* ((ifs (cons general-grob-interface interfaces)) +(define (grob-description . interfaces) + (let* ((ifs (cons grob-interface interfaces)) (props (map caddr ifs)) ; (prop-typep-pairs (map (lambda (x) (cons (car x) (cadr x))) ; (apply append props))) (syms (map car ifs)) ) (list (cons 'separator "\n\n\n") ;easy printing. - (cons 'name name) (cons 'interfaces syms) (cons 'interface-descriptions ifs) ; (cons 'interface-descriptions (cadr merged)) @@ -42,7 +41,7 @@ (lily-interface - 'general-grob-interface + 'grob-interface "All grobs support this" '( X-offset-callbacks diff --git a/scm/lily.scm b/scm/lily.scm index b8f28858fe..df53f375c2 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -119,11 +119,18 @@ "ascii-script.scm" )) +(define ctor list) + + +(define (ly-load x) (eval-string (ly-gulp-file x))) + (if (not standalone) - (map (lambda (x) (eval-string (ly-gulp-file x))) + (map ly-load + ; load-from-path '("c++.scm" "grob-property-description.scm" "translator-property-description.scm" + "context-description.scm" "interface-description.scm" "beam.scm" "clef.scm" @@ -142,3 +149,4 @@ ))) + diff --git a/scm/ps.scm b/scm/ps.scm index 9875dd3904..ac32281bb2 100644 --- a/scm/ps.scm +++ b/scm/ps.scm @@ -6,6 +6,7 @@ ;;; Han-Wen Nienhuys + (define (ps-scm action-name) ;; alist containing fontname -> fontcommand assoc (both strings) diff --git a/scm/translator-description.scm b/scm/translator-description.scm index d83944620f..3e5f63ab05 100644 --- a/scm/translator-description.scm +++ b/scm/translator-description.scm @@ -1,110 +1,11 @@ -(define (engraver-description name description created-elts properties) - (list name description created-elts properties) - ) - - -(define engraver-description-alist - (list - (cons - 'Stem_engraver - (engraver-description - "Stem_engraver" - "Create stems and single-stem tremolos. It also works together with -the beam engraver for overriding beaming." - '(Stem StemTremolo) - '(tremoloFlags - stemLeftBeamCount - stemRightBeamCount - ))) - - (cons - 'Hyphen_engraver - (engraver-description - "Hyphen_engraver" - "Create lyric hyphens" - '(LyricHyphen) - '( - ))) - - (cons - 'Extender_engraver - (engraver-description - "Extender_engraver" - "Create lyric extenders" - '(LyricExtender) - '( - ))) - - - (cons - 'Separating_line_group_engraver - (engraver-description - "Separating_line_group_engraver" - "Generates objects for computing spacing parameters." - '(SeparationItem SeparatingGroupSpanner) - '( - ))) - - (cons - 'Axis_group_engraver - (engraver-description - "Axis_group_engraver" - "Group all objects created in this context in a VerticalAxisGroup spanner." - '(VerticalAxisGroup) - '(VerticalExtent MinimumVerticalExtent ExtraVerticalExtent) - )) - - (cons - 'Hara_kiri_engraver - (engraver-description - "Hara_kiri_engraver" - "Like Axis_group_engraver, but make a hara kiri spanner, and add -interesting items (ie. note heads, lyric syllables and normal rests)" - '(HaraKiriVerticalGroup) - '() - )) - - - (cons - 'Local_key_engraver - (engraver-description - "Local_key_engraver" - "Make accidentals. Catches note heads, ties and notices key-change - events. Due to interaction with ties (which don't come together - with note heads), this needs to be in a context higher than Tie_engraver. - (FIXME)." - '(Accidentals) - '( - localKeySignature - forgetAccidentals - noResetKey - - ))) - - - (cons - 'Volta_engraver - (engraver-description - "Volta_engraver" - "Make volta brackets" - '(VoltaBracket) - '(repeatCommands voltaSpannerDuration) - )) - - (cons - 'Clef_engraver - (engraver-description - "Clef_engraver" - "Determine and set reference point for pitches" - '(Clef OctavateEight) - '( clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility ))) - - (cons - 'A2_engraver - (engraver-description - "A2_engraver" - "Part combine engraver for orchestral scores. +;; +;; TODO: this should come from the C++ code, really. +;; +(define engraver-description-alist-old +'((A2_engraver + (name . "A2_engraver") + (description . "Part combine engraver for orchestral scores. The markings @emph{a2}, @emph{Solo} and @emph{Solo II}, are created by this engraver. It also acts upon instructions of the part @@ -113,424 +14,377 @@ slur and tie directions, always when both threads are not identical; up for the musicexpr called @code{one}, down for the musicexpr called @code{two}. -" - '(TextScript) - '( - combineParts - noDirection - soloADue - soloText - soloIIText - aDueText - split-interval - unison - solo - unisilence - unirhythm - ))) - - (cons - 'Arpeggio_engraver - (engraver-description - "Arpeggio_engraver" - "Generate an Arpeggio from a Arpeggio_req" - '(Arpeggio) - '( - ))) - - (cons - 'Auto_beam_engraver - (engraver-description - "Auto_beam_engraver" - "Generate beams based on measure characteristics and observed +") + (grobs-created TextScript) + (interfaces-acked all) + (properties-read combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm) + ) + (Arpeggio_engraver + + (name . "Arpeggio_engraver") + (description . "Generate an Arpeggio from a Arpeggio_req") + (grobs-created Arpeggio) + (interfaces-acked grob-interface) + (properties-read) + ) + (Auto_beam_engraver + + (name . "Auto_beam_engraver") + (description . "Generate beams based on measure characteristics and observed Stems. Uses beatLength, measureLength and measurePosition to decide when to start and stop a beam. Overriding beaming is done through @ref{Stem_engraver} properties stemLeftBeamCount and stemRightBeamCount. -" - '( - Beam) - '( - noAutoBeaming - autoBeamSettings))) - - (cons - 'Bar_engraver - (engraver-description - "Bar_engraver" - "Create barlines. This engraver is controlled through the -@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point" - '(BarLine) - '( - whichBar - stavesFound - ))) - - - (cons - 'Bar_number_engraver - (engraver-description - "Bar_number_engraver" - "A bar number is created whenever measurePosition is zero. It is -put on top of all staves, and appears only at left side of the staff." - '(BarNumber) - '( - currentBarNumber - ))) - - - (cons - 'Beam_engraver - (engraver-description - "Beam_engraver" - "Handles Beam_requests by engraving Beams. If omitted, then notes will be - printed with flags instead of beams." - '(Beam) - '( - beamMelismaBusy - ))) - - (cons - 'Break_align_engraver - (engraver-description - "Break_align_engraver" - "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder" - '(BreakAlignment BreakAlignGroup LeftEdge) - '( - breakAlignOrder - - ))) - - - (cons - 'Breathing_sign_engraver - (engraver-description - "Breathing_sign_engraver" - "" - '(BreathingSign) - '( - ))) - - - (cons - 'Chord_name_engraver - (engraver-description - "Chord_name_engraver" - "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req -and generate the appropriate chordname." - '(ChordName) - '(chordChanges))) - - - (cons - 'Chord_tremolo_engraver - (engraver-description - "Chord_tremolo_engraver" - "Generates beams for the \repeat X tremolo ... construct" - '(Beam) - '( - ))) - - - - (cons - 'Collision_engraver - (engraver-description - "Collision_engraver" - "" - '(NoteCollision - ) - '( - ))) - - (cons - 'Custos_engraver - (engraver-description - "Custos_engraver" - "" - '(Custos) - '( - ))) - - - (cons - 'Dot_column_engraver - (engraver-description - "Dot_column_engraver" - " Engraves dots on dotted notes shifted to the right of the note. +") + (grobs-created Beam) + (interfaces-acked grob-interface) + (properties-read noAutoBeaming autoBeamSettings) + ) + (Axis_group_engraver + + (name . "Axis_group_engraver") + (description . "Group all objects created in this context in a VerticalAxisGroup spanner.") + (grobs-created VerticalAxisGroup) + (interfaces-acked grob-interface) + (properties-read VerticalExtent MinimumVerticalExtent ExtraVerticalExtent) + ) + (Bar_engraver + + (name . "Bar_engraver") + (description . "Create barlines. This engraver is controlled through the +@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point") + (grobs-created BarLine) + (interfaces-acked grob-interface) + (properties-read whichBar stavesFound) + ) + (Bar_number_engraver + + (name . "Bar_number_engraver") + (description . "A bar number is created whenever measurePosition is zero. It is +put on top of all staves, and appears only at left side of the staff.") + (grobs-created BarNumber) + (interfaces-acked grob-interface) + (properties-read currentBarNumber) + ) + (Beam_engraver + + (name . "Beam_engraver") + (description . "Handles Beam_requests by engraving Beams. If omitted, then notes will be +printed with flags instead of beams.") + (grobs-created Beam) + (interfaces-acked grob-interface) + (properties-read beamMelismaBusy) + ) + (Break_align_engraver + + (name . "Break_align_engraver") + (description . "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder") + (grobs-created BreakAlignment BreakAlignGroup LeftEdge) + (interfaces-acked grob-interface) + (properties-read breakAlignOrder) + ) + (Breathing_sign_engraver + + (name . "Breathing_sign_engraver") + (description . "") + (grobs-created BreathingSign) + (interfaces-acked grob-interface) + (properties-read) + ) + (Chord_name_engraver + + (name . "Chord_name_engraver") + (description . "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req +and generate the appropriate chordname.") + (grobs-created ChordName) + (interfaces-acked grob-interface) + (properties-read chordChanges) + ) + (Chord_tremolo_engraver + + (name . "Chord_tremolo_engraver") + (description . "Generates beams for tremolo repeats.") + (grobs-created Beam) + (interfaces-acked grob-interface) + (properties-read) + ) + (Clef_engraver + + (name . "Clef_engraver") + (description . "Determine and set reference point for pitches") + (grobs-created Clef OctavateEight) + (interfaces-acked grob-interface) + (properties-read clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility) + ) + (Collision_engraver + + (name . "Collision_engraver") + (description . "") + (grobs-created NoteCollision) + (interfaces-acked grob-interface) + (properties-read) + ) + (Custos_engraver + + (name . "Custos_engraver") + (description . "") + (grobs-created Custos) + (interfaces-acked grob-interface) + (properties-read) + ) + (Dot_column_engraver + + (name . "Dot_column_engraver") + (description . " Engraves dots on dotted notes shifted to the right of the note. If omitted, then dots appear on top of the notes. -" - '(DotColumn - ) - '( - ))) - - - (cons - 'Dynamic_engraver - (engraver-description - "Dynamic_engraver" - "" - '(DynamicLineSpanner - DynamicText Hairpin - TextSpanner) - '( - ))) - - - - - - - (cons - 'Instrument_name_engraver - (engraver-description - "Instrument_name_engraver" - " Prints the name of the instrument (specified by - @code{Staff.instrument} and @code{Staff.instr}) at the left of the - staff." - '(InstrumentName) - '( - instrument - instr - ))) - - (cons - 'Engraver_group_engraver - (engraver-description - "Engraver_group_engraver" - "A group of engravers taken together" - '() - '( - ))) - - (cons - 'Key_engraver - (engraver-description - "Key_engraver" - "" - '(KeySignature - ) - '( keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature ))) - - (cons 'Lyric_engraver - (engraver-description - "Lyric_engraver" - "" - '() - '( - ;; FIXME - ))) - - (cons 'Lyric_phrasing_engraver - (engraver-description - "Lyric_phrasing_engraver" - "" - '() - '( - automaticPhrasing - - melismaEngraverBusy - associatedVoice - phrasingPunctuation - ))) - - (cons - 'Mark_engraver - (engraver-description - "Mark_engraver" - "" - '(RehearsalMark) - '( - - rehearsalMark - stavesFound - ))) - - - (cons - 'Melisma_engraver - (engraver-description - "Melisma_engraver" - "" - '() - '( - - melismaBusy - slurMelismaBusy - tieMelismaBusy - beamMelismaBusy - ))) - - - (cons - 'Multi_measure_rest_engraver - (engraver-description - "Multi_measure_rest_engraver" - "Engraves multi-measure rests that are produced with @code{R}. Reads +") + (grobs-created DotColumn) + (interfaces-acked grob-interface) + (properties-read) + ) + (Dynamic_engraver + + (name . "Dynamic_engraver") + (description . "") + (grobs-created DynamicLineSpanner DynamicText Hairpin TextSpanner) + (interfaces-acked grob-interface) + (properties-read) + ) + (Engraver_group_engraver + + (name . "Engraver_group_engraver") + (description . "A group of engravers taken together") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read) + ) + (Extender_engraver + + (name . "Extender_engraver") + (description . "Create lyric extenders") + (grobs-created LyricExtender) + (interfaces-acked grob-interface) + (properties-read) + ) + (Font_size_engraver + (name . "Font_size_engraver") + (description . "Puts fontSize into font-relative-size grob property.") + (grobs-created ) + (interfaces-acked grob-interface) + (properties-read fontSize) + ) + (Hara_kiri_engraver + + (name . "Hara_kiri_engraver") + (description . "Like Axis_group_engraver, but make a hara kiri spanner, and add +interesting items (ie. note heads, lyric syllables and normal rests) +") + (grobs-created HaraKiriVerticalGroup) + (interfaces-acked grob-interface) + (properties-read) + ) + (Hyphen_engraver + + (name . "Hyphen_engraver") + (description . "Create lyric hyphens") + (grobs-created LyricHyphen) + (interfaces-acked grob-interface) + (properties-read) + ) + (Instrument_name_engraver + + (name . "Instrument_name_engraver") + (description . " Prints the name of the instrument (specified by +@code{Staff.instrument} and @code{Staff.instr}) +at the left of the +staff.") + (grobs-created InstrumentName) + (interfaces-acked bar-line-interface dynamic-interface axis-group-interface) + (properties-read instrument instr) + ) + (Key_engraver + + (name . "Key_engraver") + (description . "") + (grobs-created KeySignature) + (interfaces-acked grob-interface) + (properties-read keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature) + ) + (Local_key_engraver + (name . "Local_key_engraver") + (description . "Make accidentals. Catches note heads, ties and notices key-change +events. Due to interaction with ties (which don't come together +with note heads), this needs to be in a context higher than Tie_engraver. FIXME") + (grobs-created Accidentals) + (interfaces-acked grob-interface) + (properties-read localKeySignature forgetAccidentals noResetKey) + ) + (Lyric_engraver + + (name . "Lyric_engraver") + (description . "") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read) + ) + (Lyric_phrasing_engraver + + (name . "Lyric_phrasing_engraver") + (description . "") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation) + ) + (Mark_engraver + + (name . "Mark_engraver") + (description . "") + (grobs-created RehearsalMark) + (interfaces-acked grob-interface) + (properties-read rehearsalMark stavesFound) + ) + (Melisma_engraver + + (name . "Melisma_engraver") + (description . "") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy) + ) + (Multi_measure_rest_engraver + + (name . "Multi_measure_rest_engraver") + (description . "Engraves multi-measure rests that are produced with @code{R}. Reads measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest - " - '(MultiMeasureRest) - '(currentBarNumber currentCommandColumn measurePosition - ))) - - (cons - 'Note_heads_engraver - (engraver-description - "Note_heads_engraver" - "Generate one or more noteheads from Music of type Note_req." - '(NoteHead Dots) - '( - ))) - - (cons - 'Note_head_line_engraver - (engraver-description - "Note_head_line_engraver" - "Engrave a line between two note heads, for example a glissando. -If followVoice is set, staff switches also generate a line." - '(Glissando VoiceFollower) - '(followVoice))) - - (cons - 'Note_name_engraver - (engraver-description - "Note_name_engraver" - "" - '(NoteName) - '( - ))) - - - (cons - 'Output_property_engraver - (engraver-description - "Output_property_engraver" - "Interpret Music of Output_property type, and apply a function -to any Graphic objects that satisfies the predicate." - '() - '( - ))) - - - (cons - 'Piano_pedal_engraver - (engraver-description - "Piano_pedal_engraver" - "Engrave piano pedal symbols." - '(SostenutoPedal SustainPedal UnaCordaPedal) - '(pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings - ))) - - (cons - 'Pitch_squash_engraver - (engraver-description - "Pitch_squash_engraver" - "Treat all pitches as middle C. Note that the notes move, but +") + (grobs-created MultiMeasureRest) + (interfaces-acked grob-interface) + (properties-read currentBarNumber currentCommandColumn measurePosition) + ) + (Note_head_line_engraver + + (name . "Note_head_line_engraver") + (description . "Engrave a line between two note heads, for example a glissando. +If followVoice is set, staff switches also generate a line.") + (grobs-created Glissando VoiceFollower) + (interfaces-acked grob-interface) + (properties-read followVoice) + ) + (Note_heads_engraver + + (name . "Note_heads_engraver") + (description . "Generate one or more noteheads from Music of type Note_req.") + (grobs-created NoteHead Dots) + (interfaces-acked grob-interface) + (properties-read) + ) + (Note_name_engraver + + (name . "Note_name_engraver") + (description . "") + (grobs-created NoteName) + (interfaces-acked grob-interface) + (properties-read) + ) + (Output_property_engraver + + (name . "Output_property_engraver") + (description . "Interpret Music of Output_property type, and apply a function +to any Graphic objects that satisfies the predicate.") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read) + ) + (Percent_repeat_engraver + (name . "Percent_repeat_engraver") + (description . "Make beat, whole bar and double bar repeats.") + (grobs-created PercentRepeat RepeatSlash DoublePercentRepeat) + (interfaces-acked grob-interface) + (properties-read measureLength currentCommandColumn) + ) + + (Piano_pedal_engraver + (name . "Piano_pedal_engraver") + (description . "Engrave piano pedal symbols.") + (grobs-created SostenutoPedal SustainPedal UnaCordaPedal) + (interfaces-acked rhythmic-head-interface stem-interface) + (properties-read pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings) + ) + (Pitch_squash_engraver + (name . "Pitch_squash_engraver") + (description . "Treat all pitches as middle C. Note that the notes move, but the locations of accidentals stay the same. Set the position field of all note heads to zero. This useful for -making a single line staff that demonstrates the rhythm of a melody." - '() - '( - squashedPosition - ))) - - (cons - 'Porrectus_engraver - (engraver-description - "Porrectus_engraver" - "Join adjacent notes to a porrectus ligature." - '(Porrectus) - '( - ))) - - - (cons - 'Property_engraver - (engraver-description - "Property_engraver" -"This is a engraver that converts \property settings into +making a single line staff that demonstrates the rhythm of a melody.") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read squashedPosition) + ) + (Phrasing_slur_engraver + (name . "Phrasing_slur_engraver") + (description . "Print phrasing slurs. Similar to Slur_engraver") + (grobs-created PhrasingSlur) + (interfaces-acked grob-interface) + (properties-read slurBeginAttachment slurEndAttachment slurMelismaBusy) + ) + (Porrectus_engraver + + (name . "Porrectus_engraver") + (description . "Join adjacent notes to a porrectus ligature.") + (grobs-created Porrectus) + (interfaces-acked grob-interface) + (properties-read) + ) + (Property_engraver + + (name . "Property_engraver") + (description . "This is a engraver that converts property settings into back-end grob-property settings. Example: Voice.stemLength will set #'length in all Stem objects. -Due to CPU and memory requirements, the use of this engraver is deprecated." - '() - '(Generic_property_list) - )) - - - (cons - 'Repeat_acknowledge_engraver - (engraver-description - "Repeat_acknowledge_engraver" - - "Acknowledge repeated music, and convert the contents of -repeatCommands ainto an appropriate setting for whichBar" - '() - '( - repeatCommands - whichBar - - ))) - - - (cons - 'Rest_collision_engraver - (engraver-description - "Rest_collision_engraver" - "Handles collisions of rests." - '(RestCollision) - '( - ))) - - - (cons - 'Rest_engraver - (engraver-description - "Rest_engraver" - "" - '(Rest Dots) - '( - ))) - - - (cons - 'Rhythmic_column_engraver - (engraver-description - "Rhythmic_column_engraver" - "Generates NoteColumn, an objects that groups stems, noteheads and rests." - '(NoteColumn) - '( - ))) - - - (cons - 'Script_column_engraver - (engraver-description - "Script_column_engraver" - "" - '(ScriptColumn) - '( - ))) - - - (cons - 'Script_engraver - (engraver-description - "Script_engraver" - " Handles note ornaments generated by @code{\script}. -" - '(Script) - '( - scriptDefinitions - scriptHorizontal - ))) - - (cons - 'Score_engraver - (engraver-description - "Score_engraver" - "Top level engraver. Takes care of generating columns and the complete system (ie. LineOfScore) +Due to CPU and memory requirements, the use of this engraver is deprecated.") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read Generic_property_list) + ) + (Repeat_acknowledge_engraver + + (name . "Repeat_acknowledge_engraver") + (description . "Acknowledge repeated music, and convert the contents of +repeatCommands ainto an appropriate setting for whichBar") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read repeatCommands whichBar) + ) + (Rest_collision_engraver + + (name . "Rest_collision_engraver") + (description . "Handles collisions of rests.") + (grobs-created RestCollision) + (interfaces-acked grob-interface) + (properties-read) + ) + (Rest_engraver + + (name . "Rest_engraver") + (description . "") + (grobs-created Rest Dots) + (interfaces-acked grob-interface) + (properties-read) + ) + (Rhythmic_column_engraver + + (name . "Rhythmic_column_engraver") + (description . "Generates NoteColumn, an objects that groups stems, noteheads and rests.") + (grobs-created NoteColumn) + (interfaces-acked grob-interface) + (properties-read) + ) + (Score_engraver + + (name . "Score_engraver") + (description . "Top level engraver. Takes care of generating columns and the complete system (ie. LineOfScore) + This engraver decides whether a column is breakable. The default is that a column is always breakable. However, when every Bar_engraver @@ -539,308 +393,243 @@ Score_engraver::forbid_breaks to stop linebreaks. In practice, this means that you can make a breakpoint by creating a barline (assuming that there are no beams or notes that prevent a breakpoint.) -" - '(LineOfScore PaperColumn NonMusicalPaperColumn) - '( - currentMusicalColumn - currentCommandColumn - ))) - - (cons 'Skip_req_swallow_translator - (engraver-description - "Skip_req_swallow_translator" - "" - '() - '( - ;; FIXME - ))) - - (cons - 'Slur_engraver - (engraver-description - "Slur_engraver" - "Build slurs from Slur_reqs" - '(Slur) - - '( - slurBeginAttachment - slurEndAttachment - slurMelismaBusy - ))) - - - (cons - 'Spacing_engraver - (engraver-description - "Spacing_engraver" - "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes " - '(SpacingSpanner) - '( - ))) - - - (cons - 'Span_arpeggio_engraver - (engraver-description - "Span_arpeggio_engraver" - "" - '(Arpeggio) - '( - connectArpeggios - ))) - - - (cons - 'Span_bar_engraver - (engraver-description - "Span_bar_engraver" - "This engraver makes cross-staff barlines: It catches all normal -bar lines, and draws a single span-bar across them." - - '(SpanBar) - '( - ))) - - - (cons - 'Staff_symbol_engraver - (engraver-description - "Staff_symbol_engraver" - "create the constellation of five (default) staff lines." - '(StaffSymbol) - '( - ))) - - - (cons - 'Stanza_number_engraver - (engraver-description - "Stanza_number_engraver" - "" - '(StanzaNumber - ) - '( - stz - stanza - ))) - - - - (cons - 'System_start_delimiter_engraver - (engraver-description - "System_start_delimiter_engraver" - "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner" - '(SystemStartBar SystemStartBrace SystemStartBracket) - '( - ))) - - - (cons - 'Text_engraver - (engraver-description - "Text_engraver" - "Create text-scripts" - '(TextScript) - '( - scriptHorizontal - textNonEmpty - ))) - - - (cons - 'Text_spanner_engraver - (engraver-description - "Text_spanner_engraver" - "Create text spanner from a Span_req " - '(TextSpanner) - '( - ))) - - - (cons - 'Thread_devnull_engraver - (engraver-description - "Thread_devnull_engraver" - "Kill elements whenever we are Voice called `two' and either + +") + (grobs-created LineOfScore PaperColumn NonMusicalPaperColumn) + (interfaces-acked grob-interface) + (properties-read currentMusicalColumn currentCommandColumn) + ) + (Script_column_engraver + + (name . "Script_column_engraver") + (description . "") + (grobs-created ScriptColumn) + (interfaces-acked grob-interface) + (properties-read) + ) + (Script_engraver + + (name . "Script_engraver") + (description . " Handles note ornaments generated by @code{\\script}. +") + (grobs-created Script) + (interfaces-acked grob-interface) + (properties-read scriptDefinitions scriptHorizontal) + ) + (Separating_line_group_engraver + + (name . "Separating_line_group_engraver") + (description . "Generates objects for computing spacing parameters.") + (grobs-created SeparationItem SeparatingGroupSpanner) + (interfaces-acked grob-interface) + (properties-read) + ) + (Skip_req_swallow_translator + + (name . "Skip_req_swallow_translator") + (description . "") + (grobs-created) + (interfaces-acked grob-interface) + (properties-read) + ) + (Slur_engraver + + (name . "Slur_engraver") + (description . "Build slurs from Slur_reqs") + (grobs-created Slur) + (interfaces-acked grob-interface) + (properties-read slurBeginAttachment slurEndAttachment slurMelismaBusy) + ) + (Spacing_engraver + + (name . "Spacing_engraver") + (description . "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes ") + (grobs-created SpacingSpanner) + (interfaces-acked grob-interface) + (properties-read) + ) + (Span_arpeggio_engraver + + (name . "Span_arpeggio_engraver") + (description . "") + (grobs-created Arpeggio) + (interfaces-acked grob-interface) + (properties-read connectArpeggios) + ) + (Span_bar_engraver + + (name . "Span_bar_engraver") + (description . "This engraver makes cross-staff barlines: It catches all normal +bar lines, and draws a single span-bar across them.") + (grobs-created SpanBar) + (interfaces-acked grob-interface) + (properties-read) + ) + (Staff_symbol_engraver + + (name . "Staff_symbol_engraver") + (description . "create the constellation of five (default) +staff lines.") + (grobs-created Sta + ffSymbol) + (interfaces-acked grob-interface) + (properties-read) + ) + (Stanza_number_engraver + + (name . "Stanza_number_engraver") + (description . "") + (grobs-created StanzaNumber) + (interfaces-acked grob-interface) + (properties-read stz stanza) + ) + (Stem_engraver + + (name . "Stem_engraver") + (description . "Create stems and single-stem tremolos. It also works together with +the beam engraver for overriding beaming.") + (grobs-created Stem StemTremolo) + (interfaces-acked rhythmic-head-interface) + (properties-read tremoloFlags stemLeftBeamCount stemRightBeamCount) + ) + (System_start_delimiter_engraver + + (name . "System_start_delimiter_engraver") + (description . "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner") + (grobs-created SystemStartBar SystemStartBrace SystemStartBracket) + (interfaces-acked grob-interface) + (properties-read) + ) + (Text_engraver + + (name . "Text_engraver") + (description . "Create text-scripts") + (grobs-created TextScript) + (interfaces-acked grob-interface) + (properties-read scriptHorizontal textNonEmpty) + ) + (Text_spanner_engraver + + (name . "Text_spanner_engraver") + (description . "Create text spanner from a Span_req ") + (grobs-created TextSpanner) + (interfaces-acked grob-interface) + (properties-read) + ) + (Thread_devnull_engraver + + (name . "Thread_devnull_engraver") + (description . "Kill elements whenever we are Voice called `two' and either unison, unisilence or soloADue is set.@footnote{On unix systems, the file @file{/dev/null} is special device: anything written to it is discarded.}. This engraver works closely together with the part combiner. When the part combiner notices that two threads are identical, it tells the @code{Thread_devnull_engraver} to discard everything in the second thread. -" - - '() - '())) - - - (cons - 'Tie_engraver - (engraver-description - "Tie_engraver" - "Generate ties between noteheads of equal pitch." - '(Tie TieColumn) - '(sparseTies - tieMelismaBusy - ))) - - - (cons - 'Time_signature_engraver - (engraver-description - "Time_signature_engraver" - "Create a TimeSignature whenever @code{timeSignatureFraction} changes" - '(TimeSignature) - '( - ))) - - - (cons - 'Timing_engraver - (engraver-description - "Timing_engraver" - " Responsible for synchronizing timing information from staves. - Normally in @code{Score}. In order to create polyrhythmic music, - this engraver should be removed from @code{Score} and placed in - @code{Staff}." - '() - '( - timeSignatureFraction - barCheckNoSynchronize - barNonAuto - whichBar - barAlways - defaultBarType - skipBars - timing - oneBeat - measureLength - measurePosition - currentBarNumber - ))) - - - (cons - 'Tuplet_engraver - (engraver-description - "Tuplet_engraver" - "Catch Time_scaled_music and generate appropriate bracket " - '( TupletBracket) - '(tupletNumberFormatFunction tupletSpannerDuration tupletInvisible))) - - - (cons - 'Vertical_align_engraver - (engraver-description - "Vertical_align_engraver" - "Catch Vertical axis groups and stack them." - '(VerticalAlignment) - '( - ))) - - - (cons - 'Voice_devnull_engraver - (engraver-description - "Voice_devnull_engraver" - "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set." - '() - '( - ))) - )) - - -(set! engraver-description-alist - (sort engraver-description-alist aliststring (car x)) + (symbol->string (car y)))) + +;(set! engraver-description-alist +; (sort engraver-description-alist aliststring (car l))) + (else (string-append (symbol->string (car l)) " " (human-listify (cdr l))) + + ))) + +(define (print-entry x) + (define (mungle x) + (string-append (string-downcase (regexp-substitute/global #f "_" x 'pre "-" 'post)) ".cc")) + + (let ((cop (open-file (mungle (car x)) "a"))) + (define (w y) + (write y cop)) + (define (d y) + (display y cop)) + + (d "ENTER_DESCRIPTION(") + (d (car x)) + (d ",\n/* descr */ ") + (w (cdr (assoc 'description (cdr x)))) + (d ",\n/* creats*/ ") + (w (human-listify (cdr (assoc 'grobs-created (cdr x))))) + (d ",\n/* acks */ ") + (w (human-listify (cdr (assoc 'interfaces-acked (cdr x))))) + (d ",\n/* reads */ ") + (w (human-listify (cdr (assoc 'properties-read (cdr x))))) + (d ",\n/* write */ \"\");\n") +)) + +;(map print-entry engraver-description-alist) diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 22c77623d3..fe6c8252fd 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -15,9 +15,17 @@ +(translator-property-description 'ExtraVerticalExtent + number-pair? "extra vertical extent, same format as MinimumVerticalExtent") +(translator-property-description 'Generic_property_list list? "description of the conversion. + +Defines names and types for generic properties. These are properties +than can be plugged into the backend directly. See the init file +@file{generic-property.scm} for details. For internal use only, +deprecated. +") (translator-property-description 'MinimumVerticalExtent number-pair? "minimum vertical extent, same format as VerticalExtent") - (translator-property-description 'VerticalExtent number-pair? "hard coded vertical extent. The format is a pair of dimensions, for example, this sets the sizes @@ -36,16 +44,7 @@ and therefore only work in contexts which contain an @code{Axis_group_engraver}. ") -(translator-property-description 'ExtraVerticalExtent - number-pair? "extra vertical extent, same format as MinimumVerticalExtent") -(translator-property-description 'Generic_property_list list? "description of the conversion. - -Defines names and types for generic properties. These are properties -than can be plugged into the backend directly. See the init file -@file{generic-property.scm} for details. For internal use only, -deprecated. -") (translator-property-description 'aDueText string? "text for begin of a due") (translator-property-description 'associatedVoice string? "Name of the Voice that has the melody for this LyricsVoice.") (translator-property-description 'autoBeamSettings list? " @@ -248,6 +247,7 @@ this is done with the pedal.") (translator-property-description 'phrasingPunctuation string? "") (translator-property-description 'rehearsalMark number-or-string? "") +(translator-property-description 'regularSpacingDelta moment? "TODO") (translator-property-description 'repeatCommands list? "This property is read to find any command of the form (volta . X), where X is a string or #f") (translator-property-description 'scriptDefinitions list? " Description of scripts. This is used by Script_engraver for typesetting note-super/subscripts. See @file{scm/script.scm} for more information diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 50fa1bca87..e67d6988a3 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -159,7 +159,8 @@ verbose_p = 0 # environment = { 'MFINPUTS' : datadir + '/mf' + ':', - 'TEXINPUTS': datadir + '/tex:' + datadir + '/ps:' + os.getcwd() + ':', + 'TEXINPUTS': datadir + '/tex:' + datadir + '/ps:' + '.:' + + os.getcwd() + ':', 'TFMFONTS' : datadir + '/tfm' + ':', 'GS_FONTPATH' : datadir + '/afm:' + datadir + '/pfa', 'GS_LIB' : datadir + '/ps', @@ -777,6 +778,8 @@ if files and files[0] != '-': os.chdir (outdir) cp_to_dir (PK_PATTERN, tmpdir) + # to be sure, add tmpdir *in front* of inclusion path. + #os.environ['TEXINPUTS'] = tmpdir + ':' + os.environ['TEXINPUTS'] os.chdir (tmpdir) if lily_p: -- 2.39.5