+2002-09-28 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * lily/*.cc: specify accepts for many engravers.
+
+ * scm/music-documentation-lib.scm: dump music expressions and
+ music subtypes.
+
+ * scm/documentation-lib.scm: complete revision.
+ Use GOOPS objects to store document tree explicitly. Cleanedup and
+ sped up doco generation a lot.
+
2002-09-27 Han-Wen Nienhuys <hanwen@cs.uu.nl>
* input/trip.ly (fugaIILeft): add arpeggio
",
/* creats*/ "TextScript",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "multi-measure-rest-interface
slur-interface stem-interface tie-interface note-head-interface dynamic-interface text-interface"
,/* reads */ "combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm",
with note heads), this needs to be in a context higher than Tie_engraver.",
"Accidental",
-/* accepts */ "general-music",
+/* accepts */ "",
"rhythmic-head-interface tie-interface arpeggio-interface",
"localKeySignature extraNatural autoAccidentals autoCautionaries",
"localKeySignature");
ENTER_DESCRIPTION(Ambitus_engraver,
/* descr */ "",
/* creats*/ "Ambitus",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "note-head-interface",
/* reads */ "",
/* write */ "");
stemRightBeamCount.
",
/* creats*/ "Beam",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "stem-interface rest-interface beam-interface bar-line-interface",
/* reads */ "autoBeaming autoBeamSettings beatLength subdivideBeams",
/* write */ "");
interesting items (ie. note heads, lyric syllables and normal rests)
",
/* creats*/ "HaraKiriVerticalGroup",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Axis_group_engraver,
/* descr */ "Group all objects created in this context in a VerticalAxisGroup spanner.",
/* creats*/ "VerticalAxisGroup",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "grob-interface",
/* reads */ "verticalExtent minimumVerticalExtent extraVerticalExtent",
/* write */ "");
/* 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",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "",
/* reads */ "whichBar",
/* write */ "");
/* 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",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "break-aligned-interface",
/* reads */ "currentBarNumber stavesFound" ,
/* write */ "");
/* descr */ "Handles Beam_requests by engraving Beams. If omitted, then notes will be
printed with flags instead of beams.",
/* creats*/ "Beam",
-/* accepts */ "general-music",
+/* accepts */ "beam-event abort-event",
/* acks */ "stem-interface rest-interface",
/* reads */ "beamMelismaBusy beatLength subdivideBeams",
/* write */ "");
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",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "break-aligned-interface"
,/* reads */ "breakAlignOrder",
/* write */ "");
ENTER_DESCRIPTION(Chord_tremolo_engraver,
/* descr */ "Generates beams for tremolo repeats.",
/* creats*/ "Beam",
-/* accepts */ "general-music",
+/* accepts */ "repeated-music",
/* acks */ "stem-interface note-head-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Clef_engraver,
/* descr */ "Determine and set reference point for pitches",
/* creats*/ "Clef OctavateEight",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "bar-line-interface",
/* reads */ "clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility",
/* write */ "");
ENTER_DESCRIPTION(Collision_engraver,
/* descr */ "",
/* creats*/ "NoteCollision",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "note-column-interface",
/* reads */ "",
/* write */ "");
@code{Note_heads_engraver}. It plays some trickery to
break long notes and automatically tie them into the next measure.",
/* creats*/ "NoteHead Dots",
-/* accepts */ "general-music",
+/* accepts */ "busy-playing-event note-event",
/* acks */ "",
/* reads */ "centralCPosition measurePosition measureLength",
/* write */ "");
ENTER_DESCRIPTION(Custos_engraver,
/* descr */ "",
/* creats*/ "Custos",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "bar-line-interface note-head-interface",
/* reads */ "",
/* write */ "");
If omitted, then dots appear on top of the notes.
",
/* creats*/ "DotColumn",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "rhythmic-head-interface dot-column-interface stem-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Dynamic_performer,
/*descr*/ "",
/* creats*/ "",
- /* accepts */ "general-music",
+ /* accepts */ "note-column-interface script-interface",
/* acks */ "",
/*reads */"dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",
/*writes*/"");
ENTER_DESCRIPTION(Figured_bass_engraver,
/* descr */ "Make figured bass numbers.",
/* creats*/ "BassFigure",
-/* accepts */ "general-music",
+/* accepts */ "rest-event bass-figure-event",
/* acks */ "",
/* reads */ "",
/* write */ "");
bool
Fingering_engraver::try_music (Music *m)
{
- if (dynamic_cast<Text_script_req*> (m))
+ if (m->is_mus_type ("text-script-event"))
{
if (m->get_mus_property ("text-type") != ly_symbol2scm ("finger"))
return false;
ENTER_DESCRIPTION(Fingering_engraver,
/* descr */ "Create fingering-scripts",
/* creats*/ "Fingering",
-/* accepts */ "general-music",
+/* accepts */ "text-script-event",
/* acks */ "rhythmic-head-interface stem-interface",
/* reads */ "scriptHorizontal",
/* write */ "");
ENTER_DESCRIPTION(Font_size_engraver,
/* descr */ "Puts fontSize into font-relative-size grob property.",
/* creats*/ "",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "font-interface",
/* reads */ "fontSize",
/* write */ "");
/* descr */ "Forbid line breaks when note heads are still playing
at some point.",
/* creats*/ "",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "",
/* reads */ "busyGrobs",
/* write */ "");
engraver is a sort-of a failure, since it doesn't handle all sorts of borderline cases very well.
",
/* creats*/ "",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "grob-interface",
/* reads */ "busyGrobs",
/* write */ "busyGrobs");
at the left of the
staff.",
/* creats*/ "InstrumentName",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "bar-line-interface axis-group-interface",
/* reads */ "instrument instr",
/* write */ "");
ENTER_DESCRIPTION(Key_performer,
"","",
- "general-music",
+ "key-change-event",
"","","");
ENTER_DESCRIPTION(Ligature_bracket_engraver,
/* descr */ "Handles Ligature_requests by engraving Ligature brackets.",
/* creats*/ "LigatureBracket",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "ligature-head-interface rest-interface",
/* reads */ "",
/* write */ "");
processing of orchestral scores.
",
/* creats*/ "",
- /* accepts */ "general-music",
+ /* accepts */ "",
/* acks */ "lyric-syllable-interface note-head-interface lyric-extender-interface",
/* reads */ "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
/* write */ "");
ENTER_DESCRIPTION (Mensural_ligature_engraver,
/* descr */ "Handles Mensural_ligature_requests by glueing special ligature heads together.",
/* creats*/ "MensuralLigature",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "ligature-head-interface note-head-interface rest-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Time_signature_engraver,
/* descr */ "Create a TimeSignature whenever @code{timeSignatureFraction} changes",
/* creats*/ "TimeSignature",
-/* accepts */ "general-music",
+/* accepts */ "",
/* acks */ "",
/* reads */ "",
/* write */ "");
bool
Tuplet_engraver::try_music (Music *r)
{
- if (Time_scaled_music * c = dynamic_cast<Time_scaled_music *> (r))
+ if ( c->is_mus_type ("time-scaled-music"))
{
Music *el = c->element ();
if (!dynamic_cast<Request_chord*> (el))
ENTER_DESCRIPTION(Tuplet_engraver,
/* descr */ "Catch Time_scaled_music and generate appropriate bracket ",
/* creats*/ "TupletBracket",
-/* accepts */ "general-music",
+/* accepts */ "time-scaled-music",
/* acks */ "note-column-interface",
/* reads */ "tupletNumberFormatFunction tupletSpannerDuration tupletInvisible",
/* write */ "");
)
))
+
+(define all-engravers-list (ly-get-all-translators))
+(set! all-engravers-list
+ (sort all-engravers-list
+ (lambda (a b) (string<? (ly-translator-name a)
+ (ly-translator-name b)))))
+
(define (all-engravers-doc)
(make <texi-node>
#:name "Engravers"
#:desc "All separate engravers"
#:children
- (map engraver-doc (ly-get-all-translators))))
+ (map engraver-doc all-engravers-list)))
-(define all-engravers-list (ly-get-all-translators))
(define (all-translation-properties-doc)
(let*