X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmusical-request.hh;h=17f5446ea2b670ed3fdc080444965b287dfd8c52;hb=d9b43b93f2c885409bafdb157138158f65cc49aa;hp=50ec8e8c9c07eb2959b6656c0bdece1003764d46;hpb=79511c44a27908a1beaed25bbcac8d95a8a6b7c8;p=lilypond.git diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 50ec8e8c9c..17f5446ea2 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -1,254 +1,165 @@ /* musical-request.hh -- declare Musical requests - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2002 Han-Wen Nienhuys */ #ifndef MUSICALREQUESTS_HH #define MUSICALREQUESTS_HH +#include "lily-proto.hh" #include "request.hh" #include "duration.hh" +#include "pitch.hh" +#include "array.hh" - -/** - A request which is coupled to a #Voice_element# with nonzero duration. - Base class only +/** a request with a duration. + This request is used only used as a base class. */ -class Musical_req : public virtual Request { +class Rhythmic_req : public virtual Request { public: - - virtual Skip_req* skip() { return 0; } - virtual Dynamic_req* dynamic() { return 0; } - virtual Absolute_dynamic_req * absdynamic() { return 0; } - virtual Subtle_req * subtle() { return 0; } - virtual Span_dynamic_req * span_dynamic() { return 0; } - REQUESTMETHODS(Musical_req, musical); + bool do_equal_b (Request const*) const; + void compress (Moment); + virtual Moment length_mom () const; + static int compare (Rhythmic_req const&,Rhythmic_req const&); + VIRTUAL_COPY_CONS (Music); }; - -class Skip_req : public Musical_req { +class Skip_req : public Rhythmic_req { public: - Moment duration_; - - virtual Moment duration() const; - REQUESTMETHODS(Skip_req, skip); -}; -/** a request with a duration. - This request is used only a base class. - */ -class Rhythmic_req : public virtual Musical_req { -public: - Duration duration_; - - /* *************** */ - void set_duration(Duration); - static int compare(const Rhythmic_req &, const Rhythmic_req &); - virtual Moment duration() const; - Rhythmic_req(); - REQUESTMETHODS(Rhythmic_req, rhythmic); + VIRTUAL_COPY_CONS (Music); }; -struct Spacing_req :virtual Request { - Moment next; - Real distance; - Real strength; - /* *************** */ - Spacing_req(); - REQUESTMETHODS(Spacing_req, spacing); -}; -class Blank_req : public Spacing_req, Rhythmic_req { -public: - REQUESTMETHODS(Spacing_req, spacing); - +struct Tremolo_req : public Request { + VIRTUAL_COPY_CONS (Music); + Tremolo_req (); + + void set_type (int); + int get_type () const; }; -/// Put a text above or below (?) this staff. -class Text_req : public virtual Musical_req { -public: - /// preferred position (above/below) - int dir_i_; - /// the characteristics of the text - Text_def *tdef_p_; - /* *************** */ - Text_req(int d, Text_def*); - ~Text_req(); - Text_req(Text_req const&); - static int compare(const Text_req&,const Text_req&); - REQUESTMETHODS(Text_req,text); -}; - -/** Put a text in lyric_staff - @see Lyric_staff + +/** + a syllable or lyric is a string with rhythm. */ -class Lyric_req : public Rhythmic_req, public Text_req { +class Lyric_req : public Rhythmic_req +{ +protected: + VIRTUAL_COPY_CONS (Music); +}; + + +class Articulation_req : public Script_req +{ public: - Lyric_req(Text_def* t_p); - REQUESTMETHODS(Lyric_req, lreq_l); + String get_articulation_str (); +protected: + virtual bool do_equal_b (Request const*) const; + + VIRTUAL_COPY_CONS (Music); }; -/// request which has some kind of pitch -struct Melodic_req :virtual Musical_req +class Text_script_req : public Script_req { - /// 0 is c, 6 is b - int notename_i_; - /// 0 is central c - int octave_i_; +protected: + VIRTUAL_COPY_CONS (Music); + virtual bool do_equal_b (Request const*) const; +}; - /// 0 natural, 1 sharp, etc - int accidental_i_; - /// return height from central c (in halflines) - int height()const; +/// request which has some kind of pitch +struct Melodic_req :virtual Request +{ + static int compare (Melodic_req const&,Melodic_req const&); + +protected: + virtual bool do_equal_b (Request const*) const; - /// transpose. #delta# is relative to central c. - void transpose(Melodic_req const &delta); - /// return pitch from central c (in halfnotes) - int pitch()const; - Melodic_req(); - - REQUESTMETHODS(Melodic_req,melodic); + VIRTUAL_COPY_CONS (Music); }; -/// Put a note of specified type, height, and with accidental on the staff. +/* + Put a note of specified type, height, and with accidental on the staff. + /// force/supress printing of accidental. + bool forceacc_b_; + /// Cautionary, i.e. parenthesized accidental. + bool cautionary_b_; + + */ class Note_req : public Rhythmic_req, virtual public Melodic_req { public: - /// force/supress printing of accidental. - bool forceacc_b_; - Note_req(); - Rhythmic_req* rhythmic() { return Rhythmic_req::rhythmic(); } - REQUESTMETHODS(Note_req, note); - }; + Note_req (); +protected: + + bool do_equal_b (Request const*) const; + VIRTUAL_COPY_CONS (Music); +}; /** Put a rest on the staff. Why a request? It might be a good idea to not typeset the rest, if the paper is too crowded. */ class Rest_req : public Rhythmic_req { public: - REQUESTMETHODS(Rest_req,rest); + VIRTUAL_COPY_CONS (Music); }; -/** - attach a stem to the noteball. - Rhythmic_req parent needed to determine if it will fit inside a beam. - */ -class Stem_req : public Rhythmic_req { + +/// an extender line +class Extender_req : public Request { public: - /// preferred direction for the stem - int dir_i_; - Stem_req(); - REQUESTMETHODS(Stem_req,stem); + VIRTUAL_COPY_CONS (Music); }; -/** - Requests to start or stop something. - This type of request typically results in the creation of a #Spanner# -*/ -class Span_req : public virtual Musical_req { +/// a centred hyphen +class Hyphen_req : public Request { public: - /// should the spanner start or stop, or is it unwanted? - enum { - NOSPAN, START, STOP - } spantype ; - static int compare(const Span_req &r1, const Span_req &r2); - REQUESTMETHODS(Span_req,span); - - Span_req(); - + VIRTUAL_COPY_CONS (Music); }; -/** - request for backward plet generation. - - ugr. Place in hierarchy? +/** is anyone playing a note? + Used for communication between Music & Lyrics */ -class Plet_req : public virtual Request { +class Busy_playing_req : public Request +{ public: - char type_c_; - int dur_i_; - int type_i_; - Plet_req(); - - REQUESTMETHODS(Plet_req,plet); + VIRTUAL_COPY_CONS (Music); }; -/** Start / stop a beam at this note. if #nplet# is set, the staff -will try to put an appropriate number over the beam */ -class Beam_req : public Span_req { -public: - int nplet; - /* *************** */ - REQUESTMETHODS(Beam_req,beam); - Beam_req(); -}; - -/// a slur -class Slur_req : public Span_req { +/** + instruct lyric context to alter typesetting (unimplemented). */ +class Melisma_req : public Span_req +{ public: - REQUESTMETHODS(Slur_req,slur); - + VIRTUAL_COPY_CONS (Music); }; -/** Put a script above or below this ``note''. eg upbow, downbow. Why - a request? These symbols may conflict with slurs and brackets, so - this also a request */ -class Script_req : public Musical_req { -public: - int dir_i_; - Script_def *scriptdef_p_; - - /* *************** */ - static int compare(const Script_req &, const Script_req &); - Script_req(int d, Script_def*); - REQUESTMETHODS(Script_req,script); - ~Script_req(); - Script_req(Script_req const&); -}; - -/** A helper in the hierarchy. Each dynamic is bound to one note ( a - crescendo spanning multiple notes is thought to be made of two - "dynamics": a start and a stop). Dynamic changes can occur in a - smaller time than the length of its note, therefore fore each - Dynamic request carries a time, measured from the start of its - note. - */ -class Subtle_req : public virtual Musical_req { -public: - Moment subtime_; - REQUESTMETHODS(Subtle_req, subtle); -}; - -class Dynamic_req : public Subtle_req { +/** + Helping req to signal start of a melisma from within a context, and + to */ +class Melisma_playing_req : public Request +{ public: - /// for absolute dynamics - enum Loudness { - FFF, FF, F, MF, MP, P, PP, PPP - }; - static String loudness_str(Loudness); - REQUESTMETHODS(Dynamic_req, dynamic); + VIRTUAL_COPY_CONS (Music); }; -class Absolute_dynamic_req : public Dynamic_req { +class Arpeggio_req : public Request +{ public: - Loudness loudness_; - Absolute_dynamic_req(); - REQUESTMETHODS(Absolute_dynamic_req, absdynamic); + VIRTUAL_COPY_CONS (Music); }; -class Span_dynamic_req : public Dynamic_req, public Span_req { +class Glissando_req : public Request +{ public: - /// Grow or shrink the volume: 1=cresc, -1 = decresc - int dynamic_dir_i_; - Span_dynamic_req(); - REQUESTMETHODS(Span_dynamic_req, span_dynamic); + VIRTUAL_COPY_CONS (Music); }; #endif // MUSICALREQUESTS_HH