X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmusical-request.hh;h=963f6079fadc693ceaa4b546a2ef5f6d25ec1e2c;hb=fd7e615444cf58b38283a59b56d3457c07778397;hp=5ebe4cb3a382b390e7073c5e83ec32dada0ef803;hpb=86d86173c41d3a4b832ce67768d58c6416c71d4e;p=lilypond.git diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 5ebe4cb3a3..963f6079fa 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ @@ -13,126 +13,103 @@ #include "lily-proto.hh" #include "request.hh" #include "duration.hh" - - -/** - A request which is coupled to a #Request_chord# - Base class only - */ -class Musical_req : public virtual Request { -public: - - virtual Lyric_req* lreq_l() { return 0; } - virtual Note_req *note() { return 0;} - virtual Stem_req *stem() { return 0;} - virtual Melodic_req *melodic() { return 0; } - virtual Slur_req *slur() { return 0 ; } - virtual Beam_req *beam() { return 0 ; } - virtual Abbreviation_beam_req* abbrev_beam() { return 0 ; } - virtual Rhythmic_req*rhythmic() { return 0; } - virtual Musical_script_req*musicalscript() { return 0; } - virtual Text_req*text() { return 0; } - virtual Rest_req *rest() { return 0; } - virtual Skip_req* skip() { return 0; } - virtual Dynamic_req* dynamic() { return 0; } - virtual Absolute_dynamic_req * absdynamic() { return 0; } - virtual Tie_req * tie() { return 0; } - virtual Span_dynamic_req * span_dynamic() { return 0; } - virtual Abbreviation_req* abbrev() { return 0; } - REQUESTMETHODS(Musical_req, musical); -}; - +#include "musical-pitch.hh" +#include "array.hh" /** a request with a duration. - This request is used only a base class. + This request is used only used as a base class. */ -class Rhythmic_req : public virtual Musical_req { +class Rhythmic_req : public virtual Request { public: Duration duration_; - - /* *************** */ - void set_duration (Duration); - bool do_equal_b (Request*) const; - virtual Moment duration() const; - Rhythmic_req(); + virtual void do_print () const; + + bool do_equal_b (Request const*) const; + void compress (Moment); + virtual Moment length_mom () const; static int compare (Rhythmic_req const&,Rhythmic_req const&); - REQUESTMETHODS(Rhythmic_req, rhythmic); + VIRTUAL_COPY_CONS(Music); }; class Skip_req : public Rhythmic_req { public: - REQUESTMETHODS(Skip_req, skip); + VIRTUAL_COPY_CONS(Music); }; -struct Spacing_req :virtual Request { - Moment next; - Real distance; - Real strength; - /* *************** */ - Spacing_req(); - REQUESTMETHODS(Spacing_req, spacing); -}; -struct Abbreviation_req : public Musical_req { - REQUESTMETHODS (Abbreviation_req, abbrev); - Abbreviation_req (); +struct Tremolo_req : public Request { + VIRTUAL_COPY_CONS (Music); + Tremolo_req (); int type_i_; + virtual void do_print () const; }; -class Blank_req : public Spacing_req, Rhythmic_req { -public: - REQUESTMETHODS(Spacing_req, spacing); - -}; -/// Put a text above or below (?) this staff. -class Text_req : public virtual Musical_req { +/** a syllable or lyric is a string with rhythm. + */ +class Lyric_req : public Rhythmic_req { public: - /// preferred position (above/below) - Direction dir_; - /// the characteristics of the text - Text_def *tdef_p_; + virtual void do_print () const; + String text_str_; + VIRTUAL_COPY_CONS(Music); +}; - /* *************** */ - Text_req (int d, Text_def*); - ~Text_req(); - Text_req (Text_req const&); - REQUESTMETHODS(Text_req,text); +class Articulation_req : public Script_req +{ +public: + String articulation_str_; +protected: + virtual bool do_equal_b (Request const*) const; + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); }; -/** Put a text in lyric_staff - @see Lyric_staff - */ -class Lyric_req : public Rhythmic_req, public Text_req { +class Text_script_req : public Script_req { public: - Lyric_req (Text_def* t_p); - REQUESTMETHODS(Lyric_req, lreq_l); + String text_str_; + + // should be generic property of some kind.. + String style_str_; +protected: + VIRTUAL_COPY_CONS(Music); + virtual bool do_equal_b (Request const*)const; + virtual void do_print () const; }; + /// request which has some kind of pitch -struct Melodic_req :virtual Musical_req +struct Melodic_req :virtual Request { - /// 0 is c, 6 is b - int notename_i_; - /// 0 is central c - int octave_i_; + Musical_pitch pitch_; + + static int compare (Melodic_req const&,Melodic_req const&); + +protected: + /// transpose. #delta# is relative to central c. + virtual void transpose (Musical_pitch delta); + virtual bool do_equal_b (Request const*) const; + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); +}; - /// 0 natural, 1 sharp, etc - int accidental_i_; +/// specify tonic of a chord +struct Tonic_req : public Melodic_req +{ + VIRTUAL_COPY_CONS (Music); +}; - /// return height from central c (in halflines) - int height() const; +/// specify inversion of a chord +struct Inversion_req : public Melodic_req +{ + VIRTUAL_COPY_CONS (Music); +}; - /// 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(); - bool do_equal_b (Request*) const; - static int compare (Melodic_req const&,Melodic_req const&); - REQUESTMETHODS(Melodic_req,melodic); +/// specify bass of a chord +struct Bass_req : public Melodic_req +{ + VIRTUAL_COPY_CONS (Music); }; /// Put a note of specified type, height, and with accidental on the staff. @@ -141,10 +118,13 @@ public: /// force/supress printing of accidental. bool forceacc_b_; + /// Cautionary, i.e. parenthesized accidental. + bool cautionary_b_; Note_req(); - bool do_equal_b (Request*) const; - Rhythmic_req* rhythmic() { return Rhythmic_req::rhythmic (); } - REQUESTMETHODS(Note_req, note); +protected: + virtual void do_print () const; + bool do_equal_b (Request const*) const; + VIRTUAL_COPY_CONS(Music); }; /** @@ -152,102 +132,86 @@ Put a rest on the staff. Why a request? It might be a good idea to not typeset t */ class Rest_req : public Rhythmic_req { public: - REQUESTMETHODS(Rest_req,rest); + 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 { + Part: typeset a measure with the number of measures rest + Score: typeset all individual measures as full rests + */ +class Multi_measure_rest_req : public Rhythmic_req { public: - /// should the spanner start or stop, or is it unwanted? - enum { - NOSPAN, START, STOP - } spantype ; - bool do_equal_b (Request*) const; - REQUESTMETHODS(Span_req,span); - - Span_req(); - + 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 { +/** + Typeset a repetition sign in each bar. + */ +class Repetitions_req : public Rhythmic_req { public: - int nplet; + VIRTUAL_COPY_CONS(Music); +}; - /* *************** */ - REQUESTMETHODS(Beam_req,beam); +/// an extender line +class Extender_req : public Request { +public: + VIRTUAL_COPY_CONS(Music); +}; - Beam_req(); +/// a centred hyphen +class Hyphen_req : public Request { +public: + VIRTUAL_COPY_CONS(Music); }; -/** - Start / stop an abbreviation beam at this note. +/** is anyone playing a note? + Used for communication between Music & Lyrics */ -class Abbreviation_beam_req : public Span_req { +class Busy_playing_req : public Request +{ public: - REQUESTMETHODS (Abbreviation_beam_req, abbrev_beam); - - Abbreviation_beam_req (); - - int type_i_; + VIRTUAL_COPY_CONS (Music); }; /** - Start a tie at this voice element, end it at the next + What pitches have ben acked ? */ -class Tie_req : public Musical_req { +class Pitch_interrogate_req : public Request +{ public: - REQUESTMETHODS(Tie_req, tie); + Array pitch_arr_; + VIRTUAL_COPY_CONS (Music); }; -/// a slur -class Slur_req : public Span_req { -public: - REQUESTMETHODS(Slur_req,slur); -}; -class Musical_script_req : public Musical_req, public Script_req { +/** + instruct lyric context to alter typesetting (unimplemented). */ +class Melisma_req : public Span_req +{ public: - REQUESTMETHODS(Musical_script_req, musicalscript); + VIRTUAL_COPY_CONS(Music); }; - - -class Dynamic_req : public virtual Musical_req { +/** + Start / stop an abbreviation beam. */ +class Chord_tremolo_req : public Span_req +{ public: - /** - for absolute dynamics + VIRTUAL_COPY_CONS (Music); - This sux. We'd want increasing numbers for FFF till PPP, but not - for FP, SF, SFZ (FP is *not* louder than FFF) - */ - enum Loudness { - FFF, FF, F, MF, MP, P, PP, PPP, FP, SF, SFZ - }; - static String loudness_static_str (Loudness); - REQUESTMETHODS(Dynamic_req, dynamic); -}; + Chord_tremolo_req (); -class Absolute_dynamic_req : public Dynamic_req { -public: - Loudness loudness_; - String loudness_str () const; - Absolute_dynamic_req(); - REQUESTMETHODS(Absolute_dynamic_req, absdynamic); + virtual void do_print () const; + + int type_i_; }; -class Span_dynamic_req : public Dynamic_req, public Span_req { +/** + Helping req to signal start of a melisma from within a context, and + to */ +class Melisma_playing_req : public Request +{ public: - /// Grow or shrink the volume: 1=cresc, -1 = decresc - Direction dynamic_dir_; - Span_dynamic_req(); - REQUESTMETHODS(Span_dynamic_req, span_dynamic); + VIRTUAL_COPY_CONS (Music); }; - #endif // MUSICALREQUESTS_HH