events-accepted field.
* scm/music-types.scm: new file.
* lily/parser.yy: put music type initialization into scheme,
similar to grob initialization. Changes throughout.
+2002-09-22 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * lily/include/translator.hh (ENTER_DESCRIPTION): add
+ events-accepted field.
+
+ * scm/music-types.scm: new file.
+
+ * lily/parser.yy: put music type initialization into scheme,
+ similar to grob initialization. Changes throughout.
+
2002-09-22 Jan Nieuwenhuizen <janneke@gnu.org>
* Documentation/user/tutorial.itely: Fix links.
",
/* creats*/ "TextScript",
+/* accepts */ "general-music",
/* 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",
"rhythmic-head-interface tie-interface arpeggio-interface",
"localKeySignature extraNatural autoAccidentals autoCautionaries",
"localKeySignature");
ENTER_DESCRIPTION(Ambitus_engraver,
/* descr */ "",
/* creats*/ "Ambitus",
-/* acks */ "note-head-interface",
+/* accepts */ "general-music",
+/* acks */ "note-head-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Arpeggio_engraver,
/* descr */ "Generate an Arpeggio from a Arpeggio_req",
/* creats*/ "Arpeggio",
-/* acks */ "stem-interface rhythmic-head-interface note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "stem-interface rhythmic-head-interface note-column-interface",
/* reads */ "",
/* write */ "");
stemRightBeamCount.
",
/* creats*/ "Beam",
-/* acks */ "stem-interface rest-interface beam-interface bar-line-interface",
+/* accepts */ "general-music",
+/* 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",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* 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",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "verticalExtent minimumVerticalExtent extraVerticalExtent",
/* write */ "");
};
IMPLEMENT_CTOR_CALLBACK(Bar_check_iterator);
-
-Music * get_barcheck ()
-{
- Music *bc = new Music;
- bc->set_mus_property ("iterator-ctor", Bar_check_iterator::constructor_proc);
- return bc;
-}
-
Bar_check_iterator::Bar_check_iterator()
{
}
/* 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 */ "",
+/* accepts */ "general-music",
+/* 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",
-/* acks */ "break-aligned-interface",
+/* accepts */ "general-music",
+/* 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",
-/* acks */ "stem-interface rest-interface",
+/* accepts */ "general-music",
+/* acks */ "stem-interface rest-interface",
/* reads */ "beamMelismaBusy beatLength subdivideBeams",
/* write */ "");
are at grace points in time.
",
/* creats*/ "Beam",
-/* acks */ "stem-interface rest-interface",
+/* accepts */ "general-music",
+/* 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",
/* acks */ "break-aligned-interface"
,/* reads */ "breakAlignOrder",
/* write */ "");
ENTER_DESCRIPTION(Breathing_sign_engraver,
/* descr */ "",
/* creats*/ "BreathingSign",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
/* descr */ "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
and generate the appropriate chordname.",
/* creats*/ "ChordName",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "chordChanges",
/* write */ "");
ENTER_DESCRIPTION(Chord_tremolo_engraver,
/* descr */ "Generates beams for tremolo repeats.",
/* creats*/ "Beam",
-/* acks */ "stem-interface note-head-interface",
+/* accepts */ "general-music",
+/* acks */ "stem-interface note-head-interface",
/* reads */ "",
/* write */ "");
scm_gc_unprotect_object (n->self_scm ());
}
- Simultaneous_music*v = new Request_chord (SCM_EOL);
+ Simultaneous_music*v = new Request_chord ();
v->set_mus_property ("elements", list);
return v;
ENTER_DESCRIPTION(Clef_engraver,
/* descr */ "Determine and set reference point for pitches",
/* creats*/ "Clef OctavateEight",
-/* acks */ "bar-line-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface",
/* reads */ "clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility",
/* write */ "");
ENTER_DESCRIPTION(Collision_engraver,
/* descr */ "",
/* creats*/ "NoteCollision",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* 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",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "centralCPosition measurePosition measureLength",
/* write */ "");
*/
#include "context-specced-music.hh"
-Context_specced_music::Context_specced_music (SCM m)
- : Music_wrapper (m)
-{
- set_mus_property ("type",
- ly_symbol2scm ("context-specced-music"));
-}
Context_specced_music::Context_specced_music ()
{
- set_mus_property ("type",
- ly_symbol2scm ("context-specced-music"));
}
ADD_MUSIC (Context_specced_music);
ENTER_DESCRIPTION(Custos_engraver,
/* descr */ "",
/* creats*/ "Custos",
-/* acks */ "bar-line-interface note-head-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface note-head-interface",
/* reads */ "",
/* write */ "");
If omitted, then dots appear on top of the notes.
",
/* creats*/ "DotColumn",
-/* acks */ "rhythmic-head-interface dot-column-interface stem-interface",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface dot-column-interface stem-interface",
/* reads */ "",
/* write */ "");
",
/* creats*/ "DynamicLineSpanner DynamicText Hairpin TextSpanner",
-/* acks */ "note-column-interface script-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface script-interface",
/* reads */ "",
/* write */ "");
}
ENTER_DESCRIPTION(Dynamic_performer,
- "","","","dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer","");
+ /*descr*/ "",
+ /* creats*/ "",
+ /* accepts */ "general-music",
+ /* acks */ "",
+ /*reads */"dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",
+ /*writes*/"");
ENTER_DESCRIPTION(Engraver_group_engraver,
/* descr */ "A group of engravers taken together",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
}
ENTER_DESCRIPTION(Engraver,
- "", "", "", "", "");
+ "", "",
+ "general-music",
+ "", "", "");
ENTER_DESCRIPTION(Extender_engraver,
/* descr */ "Create lyric extenders",
/* creats*/ "LyricExtender",
-/* acks */ "lyric-syllable-interface",
+/* accepts */ "general-music",
+/* acks */ "lyric-syllable-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Figured_bass_engraver,
/* descr */ "Make figured bass numbers.",
/* creats*/ "BassFigure",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Fingering_engraver,
/* descr */ "Create fingering-scripts",
/* creats*/ "Fingering",
-/* acks */ "rhythmic-head-interface stem-interface",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface stem-interface",
/* reads */ "scriptHorizontal",
/* write */ "");
ENTER_DESCRIPTION(Font_size_engraver,
/* descr */ "Puts fontSize into font-relative-size grob property.",
/* creats*/ "",
-/* acks */ "font-interface",
+/* accepts */ "general-music",
+/* acks */ "font-interface",
/* reads */ "fontSize",
/* write */ "");
/* descr */ "Forbid line breaks when note heads are still playing
at some point.",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "busyGrobs",
/* write */ "");
Grace_iterator::constructor_proc);
}
-Grace_music::Grace_music (SCM p)
- : Music_wrapper (p)
-{
- set_mus_property ("iterator-ctor",
- Grace_iterator::constructor_proc);
-}
ADD_MUSIC (Grace_music);
engraver is a sort-of a failure, since it doesn't handle all sorts of borderline cases very well.
",
/* creats*/ "",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "busyGrobs",
/* write */ "busyGrobs");
ENTER_DESCRIPTION(Hyphen_engraver,
/* descr */ "Create lyric hyphens",
/* creats*/ "LyricHyphen",
-/* acks */ "lyric-syllable-interface",
+/* accepts */ "general-music",
+/* acks */ "lyric-syllable-interface",
/* reads */ "",
/* write */ "");
{
public:
VIRTUAL_COPY_CONS (Music);
- Grace_music (SCM);
Grace_music ();
protected:
virtual void compress (Moment);
Music * get_lyrics () const;
Lyric_combine_music ();
- Lyric_combine_music (SCM);
virtual void transpose (Pitch);
VIRTUAL_COPY_CONS (Music);
{
public:
VIRTUAL_COPY_CONS (Music);
- Simultaneous_music (SCM);
virtual Pitch to_relative_octave (Pitch);
virtual Moment length_mom () const;
virtual Moment start_mom () const;
VIRTUAL_COPY_CONS (Music);
virtual Pitch to_relative_octave (Pitch);
virtual Moment start_mom () const;
- Request_chord (SCM list);
Request_chord ();
};
{
public:
VIRTUAL_COPY_CONS (Music);
- Sequential_music (SCM);
virtual Moment length_mom () const;
virtual Moment start_mom () const;
class Music_wrapper : public Music
{
public:
- Music_wrapper (SCM);
Music_wrapper ();
Music * element () const;
virtual void transpose (Pitch);
SCM internal_get_mus_property (SCM) const;
void internal_set_mus_property (SCM , SCM val);
-
+ void add_music_type (SCM);
+ bool is_music_type (SCM) const;
+
virtual Pitch to_relative_octave (Pitch);
/// The duration of this piece of music
VIRTUAL_COPY_CONS (Music);
Music ();
Music (Music const &m);
- Music (SCM);
protected:
DECLARE_SMOBS (Music,);
SCM immutable_property_alist_;
SCM mutable_property_alist_;
+ friend SCM ly_extended_make_music(SCM,SCM);
};
class Relative_octave_music : public Music_wrapper
{
public:
- Relative_octave_music (SCM l);
Relative_octave_music ();
VIRTUAL_COPY_CONS (Music);
-#define ENTER_DESCRIPTION(classname,desc,grobs,acked,read,write) \
+#define ENTER_DESCRIPTION(classname,desc,grobs,accepted,acked,read,write) \
ADD_THIS_TRANSLATOR (classname);\
SCM \
classname::static_translator_description () const \
\
static_properties= scm_acons (ly_symbol2scm ("interfaces-acked"), \
parse_symbol_list (acked), static_properties); \
+ static_properties= scm_acons (ly_symbol2scm ("events-accepted"), \
+ parse_symbol_list (accepted), static_properties); \
\
static_properties= scm_acons (ly_symbol2scm ("properties-read"), \
parse_symbol_list (read), static_properties); \
ENTER_DESCRIPTION(TYPE ## _swallow_translator, \
"Swallow requests of " #TYPE " type.", \
"", \
+ "general-music",\
"", \
"", \
"");
at the left of the
staff.",
/* creats*/ "InstrumentName",
-/* acks */ "bar-line-interface axis-group-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface axis-group-interface",
/* reads */ "instrument instr",
/* write */ "");
ENTER_DESCRIPTION(Key_engraver,
/* descr */ "",
/* creats*/ "KeySignature",
-/* acks */ "bar-line-interface clef-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface clef-interface",
/* reads */ "keySignature lastKeySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature",
/* write */ "lastKeySignature");
return false;
}
-ENTER_DESCRIPTION(Key_performer,"","","","","");
+ENTER_DESCRIPTION(Key_performer,
+ "","",
+ "general-music",
+ "","","");
ENTER_DESCRIPTION(Ligature_bracket_engraver,
/* descr */ "Handles Ligature_requests by engraving Ligature brackets.",
/* creats*/ "LigatureBracket",
-/* acks */ "ligature-head-interface rest-interface",
+/* accepts */ "general-music",
+/* acks */ "ligature-head-interface rest-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION (Ligature_engraver,
/* descr */ "Abstract class; a concrete subclass handles Ligature_requests by engraving Ligatures in a concrete style.",
/* creats*/ "Ligature",
-/* acks */ "ligature-head-interface rest-interface",
+/* accepts */ "general-music",
+/* acks */ "ligature-head-interface rest-interface",
/* reads */ "",
/* write */ "");
#include "lyric-combine-music-iterator.hh"
#include "pitch.hh"
-Lyric_combine_music::Lyric_combine_music (SCM l)
- : Music (l)
+Lyric_combine_music::Lyric_combine_music ()
+ : Music ()
{
- set_mus_property ("iterator-ctor",
- Lyric_combine_music_iterator::constructor_proc);
}
return unsmob_music (gh_car (l));
}
-Lyric_combine_music::Lyric_combine_music ()
- : Music (SCM_EOL)
-{
-}
ADD_MUSIC (Lyric_combine_music);
ENTER_DESCRIPTION(Lyric_engraver,
/* descr */ "",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
return false;
}
-ENTER_DESCRIPTION(Lyric_performer,"","","","","");
+ENTER_DESCRIPTION(Lyric_performer,"","","general-music","","","");
processing of orchestral scores.
",
/* creats*/ "",
- /* acks */ "lyric-syllable-interface note-head-interface lyric-extender-interface",
+ /* accepts */ "general-music",
+/* acks */ "lyric-syllable-interface note-head-interface lyric-extender-interface",
/* reads */ "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
/* write */ "");
ENTER_DESCRIPTION(Mark_engraver,
/* descr */ "",
/* creats*/ "RehearsalMark",
-/* acks */ "bar-line-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface",
/* reads */ "rehearsalMark stavesFound",
/* write */ "");
ENTER_DESCRIPTION(Melisma_engraver,
/* descr */ "",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy",
/* write */ "");
ENTER_DESCRIPTION (Mensural_ligature_engraver,
/* descr */ "Handles Mensural_ligature_requests by glueing special ligature heads together.",
/* creats*/ "MensuralLigature",
-/* acks */ "ligature-head-interface note-head-interface rest-interface",
+/* accepts */ "general-music",
+/* acks */ "ligature-head-interface note-head-interface rest-interface",
/* reads */ "",
/* write */ "");
measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
",
/* creats*/ "MultiMeasureRest",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "currentBarNumber currentCommandColumn measurePosition",
/* write */ "");
Music*
make_music (String s)
{
- return (*get_music_ctor (s)) () ;
+ Music_ctor c = get_music_ctor (s);
+ assert (c);
+
+ return (*c) ();
}
scm_gc_unprotect_object (m->self_scm ());
}
-Music_sequence::Music_sequence (SCM l)
- : Music (l)
+Music_sequence::Music_sequence ( )
+ : Music ()
{
}
ADD_MUSIC (Music_sequence);
-Music_sequence::Music_sequence ()
- : Music (SCM_EOL)
-{
-
-}
-
Moment
Music_sequence::minimum_start (SCM l)
{
}
-Music_wrapper::Music_wrapper (SCM l)
- : Music (l)
+Music_wrapper::Music_wrapper ()
+ : Music ()
{
}
ADD_MUSIC (Music_wrapper);
-Music_wrapper::Music_wrapper ()
- : Music (SCM_EOL)
-{
-
-}
Moment
Music_wrapper::start_mom () const
}
-Music::Music ()
+
+
+void
+Music::add_music_type (SCM sym)
{
- self_scm_ = SCM_EOL;
- immutable_property_alist_ = SCM_EOL;
- mutable_property_alist_ = SCM_EOL;
- smobify_self ();
+ assert (gh_symbol_p (sym));
+
+ SCM types= get_mus_property ("types");
+ types = scm_cons (sym, types);
+ set_mus_property ("types", types);
+}
+
+bool
+Music::is_music_type (SCM k)const
+{
+ SCM ifs = get_mus_property ("types");
+
+ return scm_memq (k, ifs) != SCM_BOOL_F;
}
Music::Music (Music const &m)
smobify_self ();
mutable_property_alist_ = ly_deep_mus_copy (m.mutable_property_alist_);
set_spot (*m.origin ());
+
+ add_music_type (ly_symbol2scm ("general-music"));
}
-Music::Music (SCM l)
+
+Music::Music ()
{
self_scm_ = SCM_EOL;
- immutable_property_alist_ = l;
+ immutable_property_alist_ = SCM_EOL;
mutable_property_alist_ = SCM_EOL;
smobify_self ();
}
/*
SCM_EOL -> catch malformed lists.
*/
- for (SCM s = a; s != SCM_EOL; s = ly_cdr (s))
+ for (SCM s = a; gh_pair_p (s); s = ly_cdr (s))
{
scm_display (ly_caar (s), port);
scm_puts (" = ", port);
return scm_makfrom0str (nm);
}
+
+// to do property args
+LY_DEFINE(ly_extended_make_music,
+ "ly-extended-make-music", 2, 0, 0, (SCM type, SCM props),
+ "
+Make a music object/expression of type @var{type}, init with
+@var{props}. Warning: this interface will likely change in the near
+future.
+
+Music is the data type that music expressions are stored in. The data
+type does not yet offer many manipulations.
+")
+{
+ SCM_ASSERT_TYPE(gh_string_p (type), type, SCM_ARG1, __FUNCTION__, "string");
+
+ SCM s = make_music (ly_scm2string (type))->self_scm ();
+ unsmob_music (s)->immutable_property_alist_ = props;
+ scm_gc_unprotect_object (s);
+ return s;
+}
+
LY_DEFINE(ly_music_list_p,"music-list?", 1, 0, 0,
(SCM l),"Type predicate: return true if @var{l} is a list of music objects.")
{
/* 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",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface",
/* reads */ "followVoice",
/* write */ "");
ENTER_DESCRIPTION(Note_heads_engraver,
/* descr */ "Generate one or more noteheads from Music of type Note_req.",
/* creats*/ "NoteHead Dots",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "centralCPosition",
/* write */ "");
ENTER_DESCRIPTION(Note_name_engraver,
/* descr */ "",
/* creats*/ "NoteName",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
return false;
}
-ENTER_DESCRIPTION(Note_performer,"","","","","");
+ENTER_DESCRIPTION(Note_performer,"","","general-music","","","");
Note_performer::Note_performer()
{
/* descr */ "Interpret Music of Output_property type, and apply a function
to any Graphic objects that satisfies the predicate.",
/* creats*/ "",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
}
-Music*
-set_property_music (SCM sym, SCM value)
-{
- Music * p = new Music (SCM_EOL);
- p->set_mus_property ("symbol", sym);
- p->set_mus_property ("iterator-ctor",
- Property_iterator::constructor_proc);
-
- p->set_mus_property ("value", value);
- return p;
-}
-
bool
is_duration_b (int t)
{
}
+SCM make_music_proc;
+Music*
+parser_make_music (SCM sym)
+{
+ if (!make_music_proc)
+ make_music_proc = scm_primitive_eval (ly_symbol2scm ("make-music-by-name"));
+
+ SCM rv = scm_call_1 (make_music_proc, sym);
+ /*
+ UGH.
+ */
+ scm_gc_protect_object (rv);
+ return unsmob_music (rv);
+}
+
+#define MY_MAKE_MUSIC(x) parser_make_music (ly_symbol2scm (x))
+#define TYPED_MAKE_MUSIC(x,v,y) x *v = dynamic_cast<x*> (parser_make_music (ly_symbol2scm (y)));
+
+
+
+Music*
+set_property_music (SCM sym, SCM value)
+{
+ Music * p = MY_MAKE_MUSIC("PropertySet");
+ p->set_mus_property ("symbol", sym);
+ p->set_mus_property ("value", value);
+ return p;
+}
// needed for bison.simple's malloc () and free ()
%union {
- Link_array<Request> *reqvec;
+ Link_array<Music> *reqvec;
String *string; // needed by the lexer as temporary scratch area.
Music *music;
Score *score;
Scheme_hash_table *scmhash;
Music_output_def * outputdef;
-
- Request * request;
-
SCM scm;
-
Tempo_req *tempo;
int i;
}
%type <outputdef> output_def
%type <scm> lilypond_header lilypond_header_body
-%type <request> open_request_parens close_request_parens open_request close_request
-%type <request> request_with_dir request_that_take_dir verbose_request
+%type <music> open_request_parens close_request_parens open_request close_request
+%type <music> request_with_dir request_that_take_dir verbose_request
%type <i> sub_quotes sup_quotes
%type <music> simple_element request_chord command_element Simple_music Composite_music
%type <music> Repeated_music
%type <scm> verbose_duration
%type <reqvec> pre_requests post_requests
-%type <request> gen_text_def
+%type <music> gen_text_def
%type <scm> steno_pitch pitch absolute_pitch
%type <scm> explicit_pitch steno_tonic_pitch
%type <music> property_def translator_change simple_property_def
%type <scm> Music_list
%type <outputdef> music_output_def_body
-%type <request> shorthand_command_req
-%type <request> post_request
+%type <music> shorthand_command_req
+%type <music> post_request
%type <music> command_req verbose_command_req
-%type <request> extender_req
-%type <request> hyphen_req
-%type <request> string_request
+%type <music> extender_req
+%type <music> hyphen_req
+%type <music> string_request
%type <scm> string bare_number number_expression number_term number_factor
%type <score> score_block score_body
tempo_request:
TEMPO steno_duration '=' bare_unsigned {
- $$ = new Tempo_req;
+ TYPED_MAKE_MUSIC(Tempo_req,t,"TempoEvent");
+ $$ = t;
$$->set_mus_property ("duration", $2);
$$->set_mus_property ("metronome-count", gh_int2scm ( $4));
}
_("More alternatives than repeats. Junking excess alternatives."));
alts = ly_truncate_list (times, alts);
}
-
- Repeated_music * r = new Repeated_music (SCM_EOL);
+
+ TYPED_MAKE_MUSIC(Repeated_music,r,"RepeatedMusic");
if (beg)
{
r-> set_mus_property ("element", beg->self_scm ());
Sequential_music:
SEQUENTIAL '{' Music_list '}' {
- $$ = new Sequential_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("SequentialMusic");
$$->set_mus_property ("elements", ly_car ($3));
$$->set_spot(THIS->here_input());
}
| '{' Music_list '}' {
- $$ = new Sequential_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("SequentialMusic");
$$->set_mus_property ("elements", ly_car ($2));
$$->set_spot(THIS->here_input());
}
Simultaneous_music:
SIMULTANEOUS '{' Music_list '}'{
- $$ = new Simultaneous_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("SimultaneousMusic");
$$->set_mus_property ("elements", ly_car ($3));
$$->set_spot(THIS->here_input());
}
| '<' Music_list '>' {
- $$ = new Simultaneous_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("SimultaneousMusic");
$$->set_mus_property ("elements", ly_car ($2));
$$->set_spot(THIS->here_input());
}
THIS->parser_error (_ ("First argument must be a procedure taking one argument"));
}
- Music *m = new Music (SCM_EOL);
+ TYPED_MAKE_MUSIC(Music,m,"OutputPropertySetMusic");
m->set_mus_property ("predicate", pred);
m->set_mus_property ("grob-property", $3);
m->set_mus_property ("grob-value", $5);
- m->set_mus_property ("iterator-ctor",
- Output_property_music_iterator::constructor_proc);
$$ = m;
}
Composite_music:
CONTEXT STRING Music {
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ TYPED_MAKE_MUSIC(Music,csm, "ContextSpeccedMusic");
+
csm->set_mus_property ("element", $3->self_scm ());
scm_gc_unprotect_object ($3->self_scm ());
$$ = csm;
}
| AUTOCHANGE STRING Music {
- Music * chm = new Music_wrapper (SCM_EOL);
+ TYPED_MAKE_MUSIC(Music,chm,"AutoChangeMusic");
chm->set_mus_property ("element", $3->self_scm ());
- chm->set_mus_property ("iterator-ctor", Auto_change_iterator::constructor_proc);
scm_gc_unprotect_object ($3->self_scm ());
chm->set_mus_property ("what", $2);
scm_gc_unprotect_object (startm->self_scm ());
}
- Music* seq = new Sequential_music (SCM_EOL);
+
+ Music* seq = MY_MAKE_MUSIC("SequentialMusic");
seq->set_mus_property ("elements", ms);
- $$ = new Grace_music (SCM_EOL);
+
+ $$ = MY_MAKE_MUSIC("GraceMusic");
$$->set_mus_property ("element", seq->self_scm ());
scm_gc_unprotect_object (seq->self_scm ());
#else
- $$ = new Grace_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("GraceMusic");
$$->set_mus_property ("element", $2->self_scm ());
scm_gc_unprotect_object ($2->self_scm ());
#endif
}
| CONTEXT string '=' string Music {
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music * csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
+
csm->set_mus_property ("element", $5->self_scm ());
scm_gc_unprotect_object ($5->self_scm ());
{
int n = gh_scm2int (ly_car ($3)); int d = gh_scm2int (ly_cdr ($3));
Music *mp = $4;
- $$ = new Time_scaled_music (SCM_EOL);
+ $$= MY_MAKE_MUSIC("TimeScaledMusic");
$$->set_spot (THIS->pop_spot ());
| Simultaneous_music { $$ = $1; }
| Sequential_music { $$ = $1; }
| TRANSPOSE pitch Music {
- $$ = new Transposed_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("TransposedMusic");
Music *p = $3;
Pitch pit = *unsmob_pitch ($2);
scm_gc_unprotect_object (p->self_scm ());
}
| TRANSPOSE steno_tonic_pitch Music {
- $$ = new Transposed_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("TransposedMusic");
Music *p = $3;
Pitch pit = *unsmob_pitch ($2);
Music *m = unsmob_music (ret);
if (!m) {
THIS->parser_error ("\\apply must return a Music");
- m = new Music (SCM_EOL);
+ m = MY_MAKE_MUSIC("Music");
}
$$ = m;
}
{ THIS->lexer_->push_figuredbass_state (); }
Music
{
- Music * chm = new Untransposable_music () ;
+ Music * chm = MY_MAKE_MUSIC("UntransposableMusic");
chm->set_mus_property ("element", $3->self_scm ());
$$ = chm;
scm_gc_unprotect_object ($3->self_scm());
{ THIS->lexer_->push_chord_state (); }
Music
{
- Music * chm = new Un_relativable_music ;
+ Music * chm = MY_MAKE_MUSIC("UnrelativableMusic");
chm->set_mus_property ("element", $3->self_scm ());
scm_gc_unprotect_object ($3->self_scm());
$$ = chm;
RELATIVE absolute_pitch Music {
Music * p = $3;
Pitch pit = *unsmob_pitch ($2);
- $$ = new Relative_octave_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("RelativeOctaveMusic");
$$->set_mus_property ("element", p->self_scm ());
scm_gc_unprotect_object (p->self_scm ());
re_rhythmed_music:
ADDLYRICS Music Music {
- Lyric_combine_music * l = new Lyric_combine_music (SCM_EOL);
+ TYPED_MAKE_MUSIC(Lyric_combine_music, l,"LyricCombineMusic");
l->set_mus_property ("elements", gh_list ($2->self_scm (), $3->self_scm (), SCM_UNDEFINED));
scm_gc_unprotect_object ($3->self_scm ());
scm_gc_unprotect_object ($2->self_scm ());
part_combined_music:
PARTCOMBINE STRING Music Music {
- Part_combine_music * p = new Part_combine_music (SCM_EOL);
-
+TYPED_MAKE_MUSIC(Part_combine_music,p, "PartCombineMusic");
p->set_mus_property ("what", $2);
p->set_mus_property ("elements", gh_list ($3->self_scm (),$4->self_scm (), SCM_UNDEFINED));
translator_change:
TRANSLATOR STRING '=' STRING {
- Music * t = new Music (SCM_EOL);
- t->set_mus_property ("iterator-ctor",
- Change_iterator::constructor_proc);
+ TYPED_MAKE_MUSIC(Music,t,"TranslatorChange");
t-> set_mus_property ("change-to-type", $2);
t-> set_mus_property ("change-to-id", $4);
simple_property_def:
PROPERTY STRING '.' STRING '=' scalar {
-
Music *t = set_property_music (scm_string_to_symbol ($4), $6);
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
- csm->set_mus_property ("element", t->self_scm ());
+ csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
$$ = csm;
csm-> set_mus_property ("context-type", $2);
}
| PROPERTY STRING '.' STRING UNSET {
- Music *t = new Music (SCM_EOL);
-
- t->set_mus_property ("iterator-ctor",
- Property_unset_iterator::constructor_proc);
+
+ Music *t = MY_MAKE_MUSIC("PropertyUnset");
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
bool autobeam
= gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
bool itc = internal_type_checking_global_b;
- Music *t = new Music (SCM_EOL);
- t->set_mus_property ("iterator-ctor",
- Push_property_iterator::constructor_proc);
+ Music *t = MY_MAKE_MUSIC("OverrideProperty");
+
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("pop-first", SCM_BOOL_T);
if (autobeam)
if (autobeam)
internal_type_checking_global_b = itc;
t->set_mus_property ("grob-value", $8);
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
$$ = csm;
= gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
bool itc = internal_type_checking_global_b;
- Music *t = new Music (SCM_EOL);
- t->set_mus_property ("iterator-ctor",
- Push_property_iterator::constructor_proc);
+ Music *t = MY_MAKE_MUSIC("OverrideProperty");
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
-
if (autobeam)
internal_type_checking_global_b = false;
t->set_mus_property ("grob-property", $6);
if (autobeam)
internal_type_checking_global_b = itc;
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
}
| PROPERTY STRING '.' STRING REVERT embedded_scm {
- Music *t = new Music (SCM_EOL);
+ Music *t = MY_MAKE_MUSIC("RevertProperty");
bool autobeam
= gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
bool itc = internal_type_checking_global_b;
- t->set_mus_property ("iterator-ctor",
- Pop_property_iterator::constructor_proc);
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
if (autobeam)
internal_type_checking_global_b = false;
if (autobeam)
internal_type_checking_global_b = itc;
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
command_element:
command_req {
- $$ = new Request_chord (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("RequestChord");
$$->set_mus_property ("elements", scm_cons ($1->self_scm (), SCM_EOL));
scm_gc_unprotect_object ($1->self_scm());
$1-> set_spot (THIS->here_input ());
}
| E_LEFTSQUARE {
- Span_req *l = new Span_req;
- l->set_span_dir (START);
+ Music *l = MY_MAKE_MUSIC("SpanEvent");
+ l->set_mus_property ("span-direction", gh_int2scm (START));
l->set_mus_property ("span-type", scm_makfrom0str ("ligature"));
l->set_spot (THIS->here_input ());
- $$ = new Request_chord (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("RequestChord");
$$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
scm_gc_unprotect_object (l->self_scm());
$$->set_spot (THIS->here_input ());
}
| E_RIGHTSQUARE {
- Span_req *l = new Span_req;
- l->set_span_dir (STOP);
+ Music *l = MY_MAKE_MUSIC("SpanEvent");
+ l->set_mus_property ("span-direction", gh_int2scm (STOP));
l->set_mus_property ("span-type", scm_makfrom0str ("ligature"));
l->set_spot (THIS->here_input ());
- $$ = new Request_chord (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("RequestChord");
$$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
$$->set_spot (THIS->here_input ());
scm_gc_unprotect_object (l->self_scm());
}
| E_BACKSLASH {
- $$ = new Music (gh_list (scm_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED));
+ $$ = MY_MAKE_MUSIC("VoiceSeparator");
$$->set_spot (THIS->here_input ());
}
| '|' {
- extern Music * get_barcheck();
- $$ = get_barcheck ();
+ $$ = MY_MAKE_MUSIC("BarCheck");
$$->set_spot (THIS->here_input ());
}
| BAR STRING {
Music *t = set_property_music (ly_symbol2scm ("whichBar"), $2);
- Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+ Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
csm->set_mus_property ("element", t->self_scm ());
scm_gc_unprotect_object (t->self_scm ());
Moment m = - unsmob_duration ($2)->length_mom ();
Music * p = set_property_music (ly_symbol2scm ( "measurePosition"),m.smobbed_copy ());
- Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+ Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
sp->set_mus_property ("element", p->self_scm ());
scm_gc_unprotect_object (p->self_scm ());
SCM l = SCM_EOL;
for (SCM s = result ; gh_pair_p (s); s = ly_cdr (s)) {
- Music * p = new Music (SCM_EOL);
+ Music * p = MY_MAKE_MUSIC("Music");
set_music_properties (p, ly_car (s));
l = scm_cons (p->self_scm (), l);
scm_gc_unprotect_object (p->self_scm ());
}
- Sequential_music * seq = new Sequential_music (SCM_EOL);
+ Music * seq = MY_MAKE_MUSIC("SequentialMusic");
seq->set_mus_property ("elements", l);
- Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+ Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
sp->set_mus_property ("element", seq->self_scm ());
scm_gc_unprotect_object (seq->self_scm ());
Music *p3 = set_property_music (ly_symbol2scm ("beatLength"), one_beat.smobbed_copy ());
SCM list = scm_list_n (p1->self_scm (), p2->self_scm (), p3->self_scm(), SCM_UNDEFINED);
- Sequential_music *seq = new Sequential_music (SCM_EOL);
+ Music *seq = MY_MAKE_MUSIC("SequentialMusic");
seq->set_mus_property ("elements", list);
- Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+ Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
sp->set_mus_property ("element", seq->self_scm ());
scm_gc_unprotect_object (p3->self_scm ());
$$ = $1;
}
| '~' {
- $$ = new Tie_req;
+ $$ = MY_MAKE_MUSIC("TieEvent");
}
| '[' {
- Span_req*b= new Span_req;
- b->set_span_dir (START);
+ Music *b= MY_MAKE_MUSIC("SpanEvent");
+ b->set_mus_property ("span-direction", gh_int2scm (START))
+;
b->set_mus_property ("span-type", scm_makfrom0str ("beam"));
$$ =b;
THIS->last_beam_start_ = b->self_scm ();
}
| ']' {
- Span_req*b= new Span_req;
- b->set_span_dir ( STOP);
+ Music *b= MY_MAKE_MUSIC("SpanEvent");
+ b->set_mus_property ("span-direction", gh_int2scm (STOP))
+;
b->set_mus_property ("span-type", scm_makfrom0str ("beam"));
$$ = b;
}
| BREATHE {
- $$ = new Breathing_sign_req;
+ $$ = MY_MAKE_MUSIC("BreathingSignEvent");
}
| E_TILDE {
- $$ = new Porrectus_req;
+ $$ = MY_MAKE_MUSIC("PorrectusEvent");
}
;
verbose_command_req:
COMMANDSPANREQUEST bare_int STRING { /*TODO: junkme */
- Span_req * sp = new Span_req;
- sp-> set_span_dir ( Direction ($2));
+ Music * sp = MY_MAKE_MUSIC("SpanEvent");
+ sp->set_mus_property ("span-direction", gh_int2scm (Direction ($2)));
sp->set_mus_property ("span-type",$3);
sp->set_spot (THIS->here_input ());
$$ = sp;
}
| MARK DEFAULT {
- Mark_req * m = new Mark_req;
+ Music * m = MY_MAKE_MUSIC("MarkEvent");
$$ = m;
}
| MARK scalar {
- Mark_req *m = new Mark_req;
+ Music *m = MY_MAKE_MUSIC("MarkEvent");
m->set_mus_property ("label", $2);
$$ = m;
}
| PENALTY SCM_T {
- Break_req * b = new Break_req;
+ Music * b = MY_MAKE_MUSIC("BreakEvent");
SCM s = $2;
if (!gh_number_p (s))
s =gh_int2scm (0);
$$ = b;
}
| SKIP duration_length {
- Skip_req * skip = new Skip_req;
+ Music * skip = MY_MAKE_MUSIC("SkipEvent");
skip->set_mus_property ("duration", $2);
$$ = skip;
$$ = $1;
}
| KEY DEFAULT {
- Key_change_req *key= new Key_change_req;
+ Music *key= MY_MAKE_MUSIC("KeyChangeEvent");
$$ = key;
}
| KEY NOTENAME_PITCH SCM_IDENTIFIER {
- Key_change_req *key= new Key_change_req;
+ Music *key= MY_MAKE_MUSIC("KeyChangeEvent");
key->set_mus_property ("pitch-alist", $3);
((Music*)key)->transpose (* unsmob_pitch ($2));
post_requests:
{
- $$ = new Link_array<Request>;
+ $$ = new Link_array<Music>;
}
| post_requests post_request {
$2->set_spot (THIS->here_input ());
string_request:
E_UNSIGNED {
- String_number_req* s = new String_number_req;
+ Music * s = MY_MAKE_MUSIC("StringNumberEvent");
s->set_mus_property ("string-number", gh_int2scm($1));
s->set_spot (THIS->here_input ());
$$ = s;
| verbose_request
| script_abbreviation {
SCM s = THIS->lexer_->lookup_identifier ("dash" + ly_scm2string ($1));
- Articulation_req *a = new Articulation_req;
+ Music *a = MY_MAKE_MUSIC("ArticulationEvent");
if (gh_string_p (s))
a->set_mus_property ("articulation-type", s);
else THIS->parser_error (_ ("Expecting string as script definition"));
request_with_dir:
script_dir request_that_take_dir {
- if (Script_req * gs = dynamic_cast<Script_req*> ($2))
- gs->set_direction (Direction ($1));
- else if ($1)
- $2->origin ()->warning (_ ("Can't specify direction for this request"));
+ $2->set_mus_property ("direction", gh_int2scm ($1));
$$ = $2;
}
;
verbose_request:
REQUEST_IDENTIFIER {
- $$ = dynamic_cast<Request*> (unsmob_music ($1)->clone ());
+ $$ = unsmob_music ($1)->clone ();
$$->set_spot (THIS->here_input ());
}
| DYNAMICSCRIPT embedded_scm {
/*
TODO: junkme, use text-type == dynamic
*/
- Text_script_req *d = new Text_script_req;
+ Music *d = MY_MAKE_MUSIC("TextScriptEvent");
SCM dyn = ly_symbol2scm ("dynamic");
d->set_mus_property ("text-type" , dyn);
d->set_mus_property ("text", $2);
$$ = d;
}
| SPANREQUEST bare_int STRING {
- Span_req * sp = new Span_req;
- sp->set_span_dir ( Direction ($2));
+ Music * sp = MY_MAKE_MUSIC("SpanEvent");
+ sp->set_mus_property ("span-direction", gh_int2scm ( $2));
sp->set_mus_property ("span-type", $3);
sp->set_spot (THIS->here_input ());
$$ = sp;
}
| tremolo_type {
- Tremolo_req* a = new Tremolo_req;
+ Music * a = MY_MAKE_MUSIC("TremoloEvent");
a->set_spot (THIS->here_input ());
a->set_mus_property ("tremolo-type", gh_int2scm ($1));
$$ = a;
}
| SCRIPT STRING {
- Articulation_req * a = new Articulation_req;
+ Music * a = MY_MAKE_MUSIC("ArticulationEvent");
a->set_mus_property ("articulation-type", $2);
a->set_spot (THIS->here_input ());
$$ = a;
}
+
/*
-duh, junk this syntax from the parser, if possible.
+ duh, junk this syntax from the parser, if possible.
*/
| ARPEGGIO {
- Arpeggio_req *a = new Arpeggio_req;
+ Music *a = MY_MAKE_MUSIC("ArpeggioEvent");
a->set_spot (THIS->here_input ());
$$ = a;
}
| GLISSANDO {
- Glissando_req *g = new Glissando_req;
+ Music *g = MY_MAKE_MUSIC("GlissandoEvent");
g->set_spot /* No pun intended */ (THIS->here_input ());
$$ = g;
}
EXTENDER {
if (!THIS->lexer_->lyric_state_b ())
THIS->parser_error (_ ("Have to be in Lyric mode for lyrics"));
- $$ = new Extender_req;
+ $$ = MY_MAKE_MUSIC("ExtenderEvent");
}
;
HYPHEN {
if (!THIS->lexer_->lyric_state_b ())
THIS->parser_error (_ ("Have to be in Lyric mode for lyrics"));
- $$ = new Hyphen_req;
+ $$ = MY_MAKE_MUSIC("HyphenEvent");
}
;
close_request:
close_request_parens {
$$ = $1;
- dynamic_cast<Span_req*> ($$)->set_span_dir ( START);
+ dynamic_cast<Music *> ($$)->set_mus_property ("span-direction", gh_int2scm (START))
+;
}
;
close_request_parens:
'(' {
- Span_req* s= new Span_req;
+ Music * s= MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ( "slur"));
s->set_spot (THIS->here_input());
}
| E_OPEN {
- Span_req* s= new Span_req;
+ Music * s= MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ( "phrasing-slur"));
s->set_spot (THIS->here_input());
}
| E_SMALLER {
- Span_req*s =new Span_req;
+ Music *s =MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ( "crescendo"));
s->set_spot (THIS->here_input());
}
| E_BIGGER {
- Span_req*s =new Span_req;
+ Music *s =MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ("decrescendo"));
s->set_spot (THIS->here_input());
open_request:
open_request_parens {
$$ = $1;
- dynamic_cast<Span_req*> ($$)->set_span_dir (STOP);
+ dynamic_cast<Music *> ($$)->set_mus_property ("span-direction", gh_int2scm (STOP))
+;
}
;
open_request_parens:
E_EXCLAMATION {
- Span_req *s = new Span_req;
+ Music *s = MY_MAKE_MUSIC("SpanEvent");
s->set_mus_property ("span-type", scm_makfrom0str ( "crescendo"));
s->set_spot (THIS->here_input());
$$ = s;
}
| ')' {
- Span_req* s= new Span_req;
+ Music * s= MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ( "slur"));
s->set_spot (THIS->here_input());
}
| E_CLOSE {
- Span_req* s= new Span_req;
+ Music * s= MY_MAKE_MUSIC("SpanEvent");
$$ = s;
s->set_mus_property ("span-type", scm_makfrom0str ( "phrasing-slur"));
s->set_spot (THIS->here_input());
gen_text_def:
embedded_scm {
- Text_script_req *t = new Text_script_req;
+ Music *t = MY_MAKE_MUSIC("TextScriptEvent");
t->set_mus_property ("text", $1);
t->set_spot (THIS->here_input ());
$$ = t;
}
| string {
- Text_script_req *t = new Text_script_req;
+ Music *t = MY_MAKE_MUSIC("TextScriptEvent");
t->set_mus_property ("text", $1);
t->set_spot (THIS->here_input ());
$$ = t;
}
| DIGIT {
String ds = to_string ($1);
- Text_script_req* t = new Text_script_req;
+ Music * t = MY_MAKE_MUSIC("TextScriptEvent");
SCM finger = ly_symbol2scm ("finger");
t->set_mus_property ("text", scm_makfrom0str (ds.to_str0 ()));
t->set_mus_property ("text-type" , finger);
pre_requests:
{
- $$ = new Link_array<Request>;
+ $$ = new Link_array<Music>;
}
| pre_requests open_request {
$$->push ($2);
bass_figure:
FIGURE_SPACE {
- Bass_figure_req *bfr = new Bass_figure_req;
+ Music *bfr = MY_MAKE_MUSIC("BassFigureEvent");
$$ = bfr->self_scm();
scm_gc_unprotect_object ($$);
}
| bass_number {
- Bass_figure_req *bfr = new Bass_figure_req;
+ Music *bfr = MY_MAKE_MUSIC("BassFigureEvent");
$$ = bfr->self_scm();
bfr->set_mus_property ("figure", gh_int2scm ($1));
figure_spec:
FIGURE_OPEN figure_list FIGURE_CLOSE {
- Music * m = new Request_chord (SCM_EOL);
+ Music * m = MY_MAKE_MUSIC("RequestChord");
$2 = scm_reverse_x ($2, SCM_EOL);
m->set_mus_property ("elements", $2);
$$ = m->self_scm ();
Music *n = 0;
if ($5)
- n = new Rest_req ;
+ n = MY_MAKE_MUSIC("RestEvent");
else
- n = new Note_req;
+ n = MY_MAKE_MUSIC("NoteEvent");
n->set_mus_property ("pitch", $1);
n->set_mus_property ("duration", $4);
if ($2 % 2 || $3 % 2)
n->set_mus_property ("force-accidental", SCM_BOOL_T);
- Simultaneous_music*v = new Request_chord (SCM_EOL);
+ Music *v = MY_MAKE_MUSIC("RequestChord");
v->set_mus_property ("elements", scm_list_n (n->self_scm (), SCM_UNDEFINED));
scm_gc_unprotect_object (n->self_scm());
SCM e = SCM_UNDEFINED;
if (ly_scm2string ($1) =="s") {
/* Space */
- Skip_req * skip = new Skip_req;
+ Music * skip = MY_MAKE_MUSIC("SkipEvent");
skip->set_mus_property ("duration" ,$2);
skip->set_spot (i);
e = skip->self_scm ();
}
else {
- Rest_req * rest_req = new Rest_req;
+ Music * rest_req = MY_MAKE_MUSIC("RestEvent");
rest_req->set_mus_property ("duration", $2);
rest_req->set_spot (i);
e = rest_req->self_scm ();
}
- Simultaneous_music* velt = new Request_chord (SCM_EOL);
+ Music * velt = MY_MAKE_MUSIC("RequestChord");
velt-> set_mus_property ("elements", scm_list_n (e,SCM_UNDEFINED));
velt->set_spot (i);
| MULTI_MEASURE_REST optional_notemode_duration {
THIS->pop_spot ();
- Skip_req * sk = new Skip_req;
+ Music * sk = MY_MAKE_MUSIC("SkipEvent");
sk->set_mus_property ("duration", $2);
- Span_req *sp1 = new Span_req;
- Span_req *sp2 = new Span_req;
- sp1-> set_span_dir ( START);
- sp2-> set_span_dir ( STOP);
+ Music *sp1 = MY_MAKE_MUSIC("SpanEvent");
+ Music *sp2 = MY_MAKE_MUSIC("SpanEvent");
+ sp1-> set_mus_property ("span-direction", gh_int2scm (START))
+;
+ sp2-> set_mus_property ("span-direction", gh_int2scm (STOP))
+;
SCM r = scm_makfrom0str ("rest");
sp1->set_mus_property ("span-type", r);
sp2->set_mus_property ("span-type", r);
- Request_chord * rqc1 = new Request_chord (SCM_EOL);
+ Music *rqc1 = MY_MAKE_MUSIC("RequestChord");
rqc1->set_mus_property ("elements", scm_list_n (sp1->self_scm (), SCM_UNDEFINED));
- Request_chord * rqc2 = new Request_chord (SCM_EOL);
+ Music *rqc2 = MY_MAKE_MUSIC("RequestChord");
rqc2->set_mus_property ("elements", scm_list_n (sk->self_scm (), SCM_UNDEFINED));;
- Request_chord * rqc3 = new Request_chord (SCM_EOL);
+ Music *rqc3 = MY_MAKE_MUSIC("RequestChord");
rqc3->set_mus_property ("elements", scm_list_n (sp2->self_scm (), SCM_UNDEFINED));;
SCM ms = scm_list_n (rqc1->self_scm (), rqc2->self_scm (), rqc3->self_scm (), SCM_UNDEFINED);
- $$ = new Sequential_music (SCM_EOL);
+ $$ = MY_MAKE_MUSIC("SequentialMusic");
$$->set_mus_property ("elements", ms);
}
| STRING optional_notemode_duration {
Input i = THIS->pop_spot ();
- Lyric_req* lreq = new Lyric_req;
+ Music * lreq = MY_MAKE_MUSIC("LyricEvent");
lreq->set_mus_property ("text", $1);
lreq->set_mus_property ("duration",$2);
lreq->set_spot (i);
- Simultaneous_music* velt = new Request_chord (SCM_EOL);
+ Music * velt = MY_MAKE_MUSIC("RequestChord");
velt->set_mus_property ("elements", scm_list_n (lreq->self_scm (), SCM_UNDEFINED));
$$= velt;
#include "part-combine-music-iterator.hh"
#include "pitch.hh"
-Part_combine_music::Part_combine_music (SCM l)
- : Music (l)
+Part_combine_music::Part_combine_music ()
{
- set_mus_property ("iterator-ctor",
- Part_combine_music_iterator::constructor_proc);
}
void
return unsmob_music (gh_car (l));
}
-
-Part_combine_music::Part_combine_music ()
- : Music (SCM_EOL)
-{
-}
-
ADD_MUSIC (Part_combine_music);
ENTER_DESCRIPTION(Percent_repeat_engraver,
/* descr */ "Make beat, whole bar and double bar repeats.",
/* creats*/ "PercentRepeat RepeatSlash DoublePercentRepeat",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "measureLength currentCommandColumn",
/* write */ "");
ENTER_DESCRIPTION(Performer_group_performer,
/* descr */ "",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Phrasing_slur_engraver,
/* descr */ "Print phrasing slurs. Similar to Slur_engraver",
/* creats*/ "PhrasingSlur",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "slurMelismaBusy",
/* write */ "");
ENTER_DESCRIPTION (Piano_pedal_engraver,
/* descr */ "Engrave piano pedal symbols and brackets.",
/* creats*/ "SostenutoPedal SustainPedal UnaCordaPedal SostenutoPedalLineSpanner SustainPedalLineSpanner UnaCordaPedalLineSpanner",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings",
/* write */ "");
}
return false;
}
-ENTER_DESCRIPTION (Piano_pedal_performer, "","","","","" );
+
+ENTER_DESCRIPTION (Piano_pedal_performer, "","",
+ "general-music",
+ "","","" );
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",
+/* accepts */ "general-music",
+/* acks */ "note-head-interface",
/* reads */ "squashedPosition",
/* write */ "");
ENTER_DESCRIPTION(Porrectus_engraver,
/* descr */ "Join adjacent notes to a porrectus ligature.",
/* creats*/ "Porrectus",
-/* acks */ "rhythmic-head-interface",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface",
/* reads */ "",
/* write */ "");
}
-Relative_octave_music::Relative_octave_music (SCM l)
- : Music_wrapper (l)
-{
- set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
-}
-
Relative_octave_music::Relative_octave_music ()
{
- set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
}
ADD_MUSIC (Relative_octave_music);
/* descr */ "Acknowledge repeated music, and convert the contents of
repeatCommands ainto an appropriate setting for whichBar",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "repeatCommands whichBar",
/* write */ "");
}
-Repeated_music::Repeated_music (SCM l)
- : Music (l)
-{
- set_mus_property ("type", ly_symbol2scm ("repeated-music"));
-}
Pitch
ADD_MUSIC (Repeated_music);
Repeated_music::Repeated_music ()
- : Music (SCM_EOL)
+ : Music ()
{
- set_mus_property ("type", ly_symbol2scm ("repeated-music"));
}
#include "music-list.hh"
#include "musical-request.hh"
-Request_chord::Request_chord (SCM s)
- : Simultaneous_music (s)
-{
- set_mus_property ("iterator-ctor",
- Request_chord_iterator::constructor_proc);
-}
-
Request_chord::Request_chord ()
{
- set_mus_property ("iterator-ctor",
- Request_chord_iterator::constructor_proc);
}
Pitch
}
Request::Request ()
- : Music (SCM_EOL)
+ : Music ()
{
- set_mus_property ("type", ly_symbol2scm ("request"));
}
Script_req::Script_req ()
set_mus_property ("span-direction", gh_int2scm (d));
}
-
-
-
-
+ADD_MUSIC(Request);
ENTER_DESCRIPTION(Rest_collision_engraver,
/* descr */ "Handles collisions of rests.",
/* creats*/ "RestCollision",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Rest_engraver,
/* descr */ "",
/* creats*/ "Rest Dots",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "centralCPosition",
/* write */ "");
ENTER_DESCRIPTION(Rhythmic_column_engraver,
/* descr */ "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
/* creats*/ "NoteColumn NoteSpacing",
-/* acks */ "stem-interface rhythmic-head-interface dot-column-interface",
+/* accepts */ "general-music",
+/* acks */ "stem-interface rhythmic-head-interface dot-column-interface",
/* reads */ "",
/* write */ "");
",
/* creats*/ "System PaperColumn NonMusicalPaperColumn",
-/* acks */ "note-spacing-interface staff-spacing-interface",
+/* accepts */ "general-music",
+/* acks */ "note-spacing-interface staff-spacing-interface",
/* reads */ "currentMusicalColumn currentCommandColumn",
/* write */ "");
ENTER_DESCRIPTION(Score_performer,
/* descr */ "",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Script_column_engraver,
/* descr */ "",
/* creats*/ "ScriptColumn",
-/* acks */ "side-position-interface",
+/* accepts */ "general-music",
+/* acks */ "side-position-interface",
/* reads */ "",
/* write */ "");
/* descr */ " Handles note ornaments generated by @code{\\script}.
",
/* creats*/ "Script",
-/* acks */ "stem-interface rhythmic-head-interface note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "stem-interface rhythmic-head-interface note-column-interface",
/* reads */ "scriptDefinitions scriptHorizontal",
/* write */ "");
ENTER_DESCRIPTION(Separating_line_group_engraver,
/* descr */ "Generates objects for computing spacing parameters.",
/* creats*/ "SeparationItem SeparatingGroupSpanner",
-/* acks */ "item-interface",
+/* accepts */ "general-music",
+/* acks */ "item-interface",
/* reads */ "",
/* write */ "");
#include "music-list.hh"
#include "sequential-music-iterator.hh"
-Sequential_music::Sequential_music (SCM head)
- : Music_sequence (head)
-{
- set_mus_property ("iterator-ctor",
- Sequential_music_iterator::constructor_proc);
-}
Sequential_music::Sequential_music ()
: Music_sequence ()
{
- set_mus_property ("iterator-ctor",
- Sequential_music_iterator::constructor_proc);
}
return Music_sequence::minimum_start (get_mus_property ("elements"));
}
-Simultaneous_music::Simultaneous_music (SCM head)
- : Music_sequence (head)
+Simultaneous_music::Simultaneous_music()
{
- set_mus_property ("iterator-ctor",
- Simultaneous_music_iterator::constructor_proc);
-}
-
-Simultaneous_music::Simultaneous_music ()
- : Music_sequence ()
-{
- set_mus_property ("iterator-ctor",
- Simultaneous_music_iterator::constructor_proc);
-
}
Pitch
ENTER_DESCRIPTION (Slur_engraver,
/* descr */ "Build slurs from Slur_reqs",
/* creats*/ "Slur",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "slurMelismaBusy",
/* write */ "");
ENTER_DESCRIPTION(Spacing_engraver,
/* descr */ "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes ",
/* creats*/ "SpacingSpanner",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Span_arpeggio_engraver,
/* descr */ "",
/* creats*/ "Arpeggio",
-/* acks */ "arpeggio-interface",
+/* accepts */ "general-music",
+/* acks */ "arpeggio-interface",
/* reads */ "connectArpeggios",
/* write */ "");
/* 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",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface",
/* reads */ "",
/* write */ "");
}
return false;
}
-ENTER_DESCRIPTION (Span_dynamic_performer, "","","","","" );
+ENTER_DESCRIPTION (Span_dynamic_performer,
+ "", "",
+ "general-music",
+ "", "", "");
/* descr */ "Maintain the stavesFound variable",
/* creats*/ "",
-/* acks */ "staff-symbol-interface",
+/* accepts */ "general-music",
+/* acks */ "staff-symbol-interface",
/* reads */ "stavesFound",
/* write */ "stavesFound");
Audio_tempo* tempo_;
};
-ENTER_DESCRIPTION (Staff_performer, "","","","","" );
+ENTER_DESCRIPTION (Staff_performer, "", "",
+ "general-music",
+ "", "", "");
Staff_performer::Staff_performer ()
{
/* descr */ "create the constellation of five (default)
staff lines.",
/* creats*/ "StaffSymbol",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Stanza_number_engraver,
/* descr */ "",
/* creats*/ "StanzaNumber",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "stz stanza",
/* write */ "");
/* 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",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface",
/* reads */ "tremoloFlags stemLeftBeamCount stemRightBeamCount",
/* write */ "");
ENTER_DESCRIPTION(Swallow_performer,
/* descr */ "",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
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",
+/* accepts */ "general-music",
+/* acks */ "system-start-delimiter-interface staff-symbol-interface",
/* reads */ "systemStartDelimiter",
/* write */ "");
ENTER_DESCRIPTION(Tab_note_heads_engraver,
/* descr */ "Generate one or more tablature noteheads from Music of type Note_req.",
/* creats*/ "TabNoteHead Dots",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "centralCPosition stringTunings minimumFret tablatureFormat highStringOne stringOneTopmost",
/* write */ "");
Audio_tempo* audio_;
};
-ENTER_DESCRIPTION (Tempo_performer, "","","","","" );
+ENTER_DESCRIPTION (Tempo_performer, "","",
+ "general-music",
+ "","","" );
Tempo_performer::Tempo_performer ()
ENTER_DESCRIPTION(Text_engraver,
/* descr */ "Create text-scripts",
/* creats*/ "TextScript",
-/* acks */ "rhythmic-head-interface stem-interface",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface stem-interface",
/* reads */ "scriptHorizontal",
/* write */ "");
ENTER_DESCRIPTION(Text_spanner_engraver,
/* descr */ "Create text spanner from a Span_req.",
/* creats*/ "TextSpanner",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "",
/* write */ "");
everything in the second thread.
",
/* creats*/ "",
-/* acks */ "grob-interface",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Tie_engraver,
/* descr */ "Generate ties between noteheads of equal pitch.",
/* creats*/ "Tie TieColumn",
-/* acks */ "rhythmic-head-interface",
+/* accepts */ "general-music",
+/* acks */ "rhythmic-head-interface",
/* reads */ "sparseTies tieMelismaBusy",
/* write */ "");
done_ = false;
}
-ENTER_DESCRIPTION (Tie_performer, "", "", "", "", "");
+ENTER_DESCRIPTION (Tie_performer, "", "",
+ "general-music",
+ "", "", "");
void
#include "time-scaled-music.hh"
#include "time-scaled-music-iterator.hh"
-Time_scaled_music::Time_scaled_music (SCM l)
- : Music_wrapper (l)
-{
- set_mus_property ("iterator-ctor",
- Time_scaled_music_iterator::constructor_proc);
-
-}
-
Time_scaled_music::Time_scaled_music ()
{
}
-
-
-
ADD_MUSIC (Time_scaled_music);
ENTER_DESCRIPTION(Time_signature_engraver,
/* descr */ "Create a TimeSignature whenever @code{timeSignatureFraction} changes",
/* creats*/ "TimeSignature",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "",
/* write */ "");
}
}
-ENTER_DESCRIPTION (Time_signature_performer, "","","","","" );
+ENTER_DESCRIPTION(Time_signature_performer,"","","general-music","","","");
this engraver should be removed from @code{Score} and placed in
@code{Staff}.",
/* creats*/ "",
-/* acks */ "",
+/* accepts */ "general-music",
+/* acks */ "",
/* reads */ "timeSignatureFraction barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber",
/* write */ "");
daddy_trans_->set_property ("measurePosition", measposp.smobbed_copy ());
}
-ENTER_DESCRIPTION (Timing_translator, "","","","","" );
+ENTER_DESCRIPTION(Timing_translator,"","","general-music","","","");
#include "transposed-music.hh"
#include "warn.hh"
-Transposed_music::Transposed_music (SCM l)
- : Music_wrapper (l)
-{
- set_mus_property ("type", ly_symbol2scm ("transposed-music"));
-}
-
-
Pitch
Transposed_music::to_relative_octave (Pitch p)
{
ENTER_DESCRIPTION(Tuplet_engraver,
/* descr */ "Catch Time_scaled_music and generate appropriate bracket ",
/* creats*/ "TupletBracket",
-/* acks */ "note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "note-column-interface",
/* reads */ "tupletNumberFormatFunction tupletSpannerDuration tupletInvisible",
/* write */ "");
Un_relativable_music::Un_relativable_music ( )
{
- set_mus_property ("type", ly_symbol2scm ("un-relativable-music"));
}
Pitch
ENTER_DESCRIPTION(Vertical_align_engraver,
/* descr */ "Catch Vertical axis groups and stack them.",
/* creats*/ "VerticalAlignment",
-/* acks */ "axis-group-interface",
+/* accepts */ "general-music",
+/* acks */ "axis-group-interface",
/* reads */ "",
/* write */ "");
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",
+/* accepts */ "general-music",
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");
ENTER_DESCRIPTION(Volta_engraver,
/* descr */ "Make volta brackets",
/* creats*/ "VoltaBracket",
-/* acks */ "bar-line-interface staff-symbol-interface note-column-interface",
+/* accepts */ "general-music",
+/* acks */ "bar-line-interface staff-symbol-interface note-column-interface",
/* reads */ "repeatCommands voltaSpannerDuration stavesFound",
/* write */ "");
(if (not standalone)
(map ly-load
; load-from-path
- '("output-lib.scm"
+ '("music-types.scm"
+ "output-lib.scm"
"c++.scm"
"molecule.scm"
"bass-figure.scm"
this is not an override
"
- (let* ((m (ly-make-music "Music")))
- (ly-set-mus-property! m 'iterator-ctor Push_property_iterator::constructor)
+ (let* ((m (make-music-by-name 'OverrideProperty)))
(ly-set-mus-property! m 'symbol grob)
(ly-set-mus-property! m 'grob-property gprop)
(ly-set-mus-property! m 'grob-value val)
(define-public (make-grob-property-revert grob gprop)
"Revert the grob property GPROP for GROB."
- (let* ((m (ly-make-music "Music")))
- (ly-set-mus-property! m 'iterator-ctor Pop_property_iterator::constructor)
+ (let* ((m (make-music-by-name 'OverrideProperty)))
(ly-set-mus-property! m 'symbol grob)
(ly-set-mus-property! m 'grob-property gprop)
))
(define-public (empty-music)
- (ly-id (ly-make-music "Music"))
+ (ly-id (make-music-by-name "Music"))
)
;;;
(music-property-description 'predicate procedure? "the predicate of a \outputproperty")
(music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.")
+(music-property-description 'types list? "The types of this music object. Determines iteration in some cases.")
(music-property-description 'repeat-count integer? "do a @code{\repeat} how ofen?")
(music-property-description 'span-direction dir? "Does this start or stop a spanner?")
--- /dev/null
+
+(define-public music-descriptions
+ `(
+ (ArpeggioEvent
+ . (
+ (name . "Arpeggio_req")
+ (types . (general-music event ))
+ ))
+ (ArticulationEvent
+ . (
+ (name . "Articulation_req")
+ (types . (general-music event articulation-event script-event))
+ ))
+ (BassFigureEvent
+ . (
+ (name . "Bass_figure_req")
+ (types . (general-music event rhythmic-event bass-figure-event))
+ ))
+ (BreakEvent
+ . (
+ (name . "Break_req")
+
+ (types . (general-music event))
+ ))
+ (BreathingSignEvent
+ . (
+ (name . "Breathing_sign_req")
+
+ (types . (general-music event breathing-event))
+ ))
+ (BusyPlayingEvent
+ . (
+ (name . "Busy_playing_req")
+
+ (types . (general-music event busy-playing-event))
+ ))
+ (ExtenderEvent
+ . (
+ (name . "Extender_req")
+ (types . (general-music event))
+ ))
+ (GlissandoEvent
+ . (
+ (name . "Glissando_req")
+ (types . (general-music event))
+ ))
+ (GraceMusic
+ . (
+ (name . "Grace_music")
+ (iterator-ctor . ,Grace_iterator::constructor)
+ (types . (grace-music music-wrapper-music general-music))
+ ))
+ (HyphenEvent
+ . (
+ (name . "Hyphen_req")
+ (types . (general-music event))
+ ))
+ (KeyChangeEvent
+ . (
+ (name . "Key_change_req")
+ (types . (general-music event))
+ ))
+ (LyricEvent
+ . (
+ (name . "Lyric_req")
+ (types . (general-music rhythmic-event event))
+ ))
+ (MarkEvent
+ . (
+ (name . "Mark_req")
+ (types . (general-music event))
+ ))
+ (MelismaEvent
+ . (
+ (name . "Melisma_playing_req")
+ (types . (general-music span-event event))
+ ))
+ (Melisma_playingEvent
+ . (
+ (name . "Melisma_req")
+ (types . (general-music event))
+ ))
+ (Music
+ . (
+ (name . "Music")
+ (types . (general-music))
+ ))
+ (NoteEvent
+ . (
+ (name . "Note_req")
+ (types . (general-music event rhythmic-event melodic-event))
+ ))
+ (PorrectusEvent
+ . (
+ (name . "Porrectus_req")
+ (types . (general-music event))
+ ))
+ (RepeatedMusic
+ . (
+ (name . "Repeated_music")
+ (type . repeated-music)g
+ (types . (general-music repeat-music))
+ ))
+ (Request
+ . (
+ (name . "Request")
+ (types . (general-music event))
+ ))
+ (RestEvent
+ . (
+ (name . "Rest_req")
+ (types . (general-music event rhythmic-event ))
+ ))
+ (RhythmicEvent
+ . (
+ (name . "Rhythmic_req")
+ (types . (general-music rhythmic-event event))
+ ))
+ (SequentialMusic
+ . (
+ (name . "Sequential_music")
+ (iterator-ctor . ,Sequential_music_iterator::constructor)
+ (types . (general-music sequential-music))
+ ))
+ (SimultaneousMusic
+ . (
+ (name . "Simultaneous_music")
+ (iterator-ctor . ,Simultaneous_music_iterator::constructor)
+
+ (types . (general-music simultaneous-music))
+ ))
+ (PropertySet
+ . (
+ (name . "Music")
+ (types . (layout-instruction general-music))
+ (iterator-ctor . ,Property_iterator::constructor)
+ )
+ )
+ (PropertyUnset
+ . (
+ (name . "Music")
+ (types . (layout-instruction general-music))
+ (iterator-ctor . ,Property_unset_iterator::constructor)
+ )
+ )
+ (VoiceSeparator
+ . (
+ (name . "Music")
+ (types . (separator general-music))
+ ))
+ (BarCheck
+ . (
+ (name . "Music")
+ (types . (general-music bar-check))
+ (iterator-ctor . ,Bar_check_iterator::constructor)
+ ))
+ (OverrideProperty
+ . (
+ (name . "Music")
+ (types . (general-music layout-instruction))
+ (iterator-ctor . , Push_property_iterator::constructor)
+ ))
+
+ (RevertProperty
+ . (
+ (name . "Music")
+ (types . (general-music layout-instruction))
+ (iterator-ctor . , Pop_property_iterator::constructor)
+ ))
+
+ (OutputPropertySetMusic
+ . (
+ (name . "Music")
+ (iterator-ctor . ,Output_property_music_iterator::constructor)
+ (types . (general-music layout-instruction))
+ ))
+ (ContextSpeccedMusic
+ . (
+ (name . "Context_specced_music")
+ (types . (context-specification general-music music-wrapper-music))
+ ))
+ (AutoChangeMusic
+ . (
+ (name . "Music_wrapper")
+ (iterator-ctor . ,Auto_change_iterator::constructor)
+ (types . (general-music music-wrapper-music auto-change-instruction))
+ ))
+ (TranslatorChange
+ . (
+ (name . "Music")
+ (iterator-ctor . , Change_iterator::constructor)
+ (types . (general-music translator-change-instruction))
+ ))
+
+
+ (TimeScaledMusic
+ . (
+ (name . "Time_scaled_music")
+ (iterator-ctor . ,Time_scaled_music_iterator::constructor)
+ (types . (time-scaled-music music-wrapper-music general-music))
+ ))
+ (TransposedMusic
+ . (
+ (name . "Transposed_music")
+ (types . (music-wrapper-music general-music transposed-music))
+ ))
+
+ (UntransposableMusic
+ . (
+ (name . "Untransposable_music")
+ (types . (music-wrapper-music general-music untransposable-music))
+ ))
+
+ (UnrelativableMusic
+ . (
+ (name . "Un_relativable_music")
+ (types . (music-wrapper-music general-music unrelativable-music))
+ ))
+
+ (RelativeOctaveMusic
+ . (
+ (name . "Relative_octave_music")
+ (types . (music-wrapper-music general-music relative-octave-music))
+ ))
+
+ (LyricCombineMusic
+ . (
+ (name . "Lyric_combine_music")
+ (types . (general-music lyric-combine-music))
+ (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
+ ))
+
+ (PartCombineMusic
+ . (
+ (name . "Part_combine_music")
+ (types . (general-music part-combine-music))
+ (iterator-ctor . ,Part_combine_music_iterator::constructor)
+ ))
+ (RequestChord
+ . (
+ (name . "Request_chord")
+ (iterator-ctor . ,Request_chord_iterator::constructor)
+ (types . (general-music simultaneous-music))
+ )
+ )
+
+ (ScriptEvent
+ . (
+ (name . "Script_req")
+
+ (types . (general-music event))
+ ))
+ (SkipEvent
+ . (
+ (name . "Skip_req")
+
+ (types . (general-music event rhythmic-event ))
+ ))
+ (SpanEvent
+ . (
+ (name . "Span_req")
+ (types . (general-music event))
+ ))
+ (StringNumberEvent
+ . (
+ (name . "String_number_req")
+
+ (types . (general-music event))
+ ))
+ (TempoEvent
+ . (
+ (name . "Tempo_req")
+
+ (types . (general-music event))
+ ))
+ (TextScriptEvent
+ . (
+ (name . "Text_script_req")
+ (types . (general-music script-event text-script-event event))
+ ))
+ (TieEvent
+ . (
+ (name . "Tie_req")
+ (types . (general-music tie-event event))
+ ))
+ ))
+
+
+
+(define music-name-to-property-table (make-vector 59))
+(map (lambda (x)
+ (hashq-set! music-name-to-property-table (car x) (cdr x))
+ )
+ music-descriptions)
+
+(define-public (make-music-by-name x)
+ (let*
+ (
+ (props (hashq-ref music-name-to-property-table x '()))
+ (name (if (pair? props) (cdr (assoc 'name props)) "Music"))
+ )
+
+ (if (eq? props '())
+ (ly-warn (format "Could not find music type `~a'" x)))
+ (ly-extended-make-music name props)
+ ))