diff options
author | Han-Wen Nienhuys <hanwen@xs4all.nl> | 1999-04-04 00:42:55 +0200 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@xs4all.nl> | 1999-04-04 00:42:55 +0200 |
commit | 1d7d22c0171288be6009b68e611beaed18be993c (patch) | |
tree | 4d8ffddefcffc3218adde6d7faa27b8815e353a2 | |
parent | a2fefe82bdf6411042104d995c4de00078e1c3a7 (diff) |
patch::: 1.1.37.script1
pl 37.script1
- major Script rehack.
- junked Text_def, changed \property textstyle -> \property textStyle
(todo -> convert-mudela)
- Line_of_score is an Axis_group_element, no more overlapping
lines, hopefully.
- mf: whole diamond head tweak
---
Generated by hanwen@cs.uu.nl using package-diff 0.62,
From = lilypond-1.1.37, To = lilypond-1.1.37.script1
usage
cd lilypond-source-dir; patch -E -p1 < lilypond-1.1.37.script1.diff
Patches do not contain automatically generated files
or (urg) empty directories,
i.e., you should rerun autoconf, configure
and possibly make outdirs.
--state
1.1.37
1.1.37.script1
++state
73 files changed, 971 insertions, 1201 deletions
@@ -1,4 +1,19 @@ -pl 37.mb1 +--- ../lilypond-1.1.37/NEWS Wed Mar 31 21:50:35 1999 +++ b/NEWS Sun Apr 4 00:42:55 1999 +@@ -1,4 +1,13 @@ +pl 37.script1 + - major Script rehack. + - junked Text_def, changed \property textstyle -> \property textStyle +(todo -> convert-mudela) + - Line_of_score is an Axis_group_element, no more overlapping +lines, hopefully. + - mf: whole diamond head tweak + +***** +pl 37 (march 30, 1999) + - diamond heads (probably really ugly). + - cross head. + - tweaked harmonic head a bit.pl 37.mb1 - Added property restStyle. - mensural 4th, 8th and 16th rests. @@ -16,7 +16,6 @@ Grep for TODO and ugh/ugr/urg. > lines from the staff to the note will have a blob too. For example, > with the note "a4" there will be a black note at the ledger line where > "c" would be too. However, only the "a4" will have the extra blob. - . * ps/lily.ps . * AFM for BlueSky AFM files. . * devise standard for functioning of Vertical_align_element. @@ -24,6 +23,7 @@ Grep for TODO and ugh/ugr/urg. . * staff size for post/prebreaks . * .ly files . * input/star-spangled-banner +. * input/scripts.ly . * mutopia/J.S.Bach/wtk1-fugue2.ly . * input/test/grace . * fix: text on rests: ridiculous dims @@ -84,6 +84,7 @@ specify the third. Should there be? .* TODO before 1.2 . * \selectmusic to cut pieces from music. +. * TODO: merge atom & molecule; make tree from molecule. . * break priority setting from SCM. . * Gade score . * remove [] in favour of auto-beamer @@ -128,11 +129,10 @@ compilation. . * fix Repeated_music design . * one big ly2dvi input that includes *all* tests. . * store req -> element, element -> element causes for warnings -. * junk Text_def, use G_text_item in stead. +. * use G_text_item in stead. . * junk Script_def . * include examples in RPM. . * fix partial measures in meaningful way. - . * add scripts to bars eg. |^"bla" . * relative mode for mi2mu . * uniformise recent feta contributions. @@ -167,10 +167,10 @@ length? . * fix convert-mudela manpage . * decimal point in \paper {} . * { \voiceone <a'4.*2/3 d''4.*2/3 fis''4.*2/3> [g''8 fis'' e''] d''4 |} - and=20 + and { \voicetwo d'4 d'2.*2/3 } spacing . * tied notes for MIDI -. * sharp /flat on trills (in MIDI ??) +. * sharp / flat on trills (in MIDI ??) . * scm-ify \property values. . * move class Lookup {} into scm . * msgfmt -o check? @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=1 PATCH_LEVEL=37 -MY_PATCH_LEVEL=mb1 +MY_PATCH_LEVEL=script1 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/hara-kiri.ly b/input/test/hara-kiri.ly index 3acad5cad5..bdfbe78404 100644 --- a/input/test/hara-kiri.ly +++ b/input/test/hara-kiri.ly @@ -29,7 +29,7 @@ toeters = \type Staff = toeters < \toeter_ii > -zager = \type Staff = zager \notes \relative c { +zager = \type Staff = zager \notes \relative c'' { \clef bass; \property Staff.instrument = "Zager" \property Staff.instr = "Zag." @@ -45,7 +45,7 @@ zager = \type Staff = zager \notes \relative c { f e d c } -zoger = \type Staff = zoger \notes \relative c { +zoger = \type Staff = zoger \notes \relative c'' { \clef bass; \property Staff.instrument = "Zoger" \property Staff.instr = "Zog." @@ -76,7 +76,7 @@ zagers = \type GrandStaff < > \paper{ linewidth = 40.0\mm; - \translator { \HaraKiriStaffContext } +% \translator { \HaraKiriStaffContext } %uh? % \translator { \OrchestralScoreContext } % \translator { \OrchestralPartStaffContext } diff --git a/lily/axis-align-item.cc b/lily/axis-align-item.cc index a8859ba588..8990872b21 100644 --- a/lily/axis-align-item.cc +++ b/lily/axis-align-item.cc @@ -1,5 +1,5 @@ /* - axis-align-item.cc -- implement + axis-align-item.cc -- implement Axis_align_item source file of the GNU LilyPond music typesetter @@ -12,3 +12,9 @@ Axis_align_item::Axis_align_item () { } + +void +Axis_align_item::do_print () const +{ + Axis_group_item::do_print (); +} diff --git a/lily/axis-group-spanner.cc b/lily/axis-group-spanner.cc index 58214f5137..b625c6c6b3 100644 --- a/lily/axis-group-spanner.cc +++ b/lily/axis-group-spanner.cc @@ -34,15 +34,24 @@ Axis_group_spanner::do_break_processing_if_unbroken() item_l->find_prebroken_piece (my_line); add_element (broken_item_l); } - remove_element (elems[i]); + + Spanner *spanner_l = dynamic_cast<Spanner*> (elems[i]); + if (spanner_l) + { + Spanner *broken_spanner_l = + spanner_l->find_broken_piece (my_line); + add_element (broken_spanner_l); + } + remove_element (elems[i]); } + } } void Axis_group_spanner::do_break_processing() { - DOUT << "do_break_processing ()\n"; + bool breaking_self_b = ! Spanner::line_l(); if (!breaking_self_b) { diff --git a/lily/command-request.cc b/lily/command-request.cc index 904c74da9a..84ff56f9f7 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -11,17 +11,6 @@ #include "musical-request.hh" void -Command_script_req::do_print() const -{} -Command_script_req::Command_script_req(){} -Command_script_req::~Command_script_req(){} - - - - - - -void Cadenza_req::do_print() const { #ifndef NPRINT @@ -58,14 +47,11 @@ Bar_req::do_equal_b (Request*r) const void Bar_req::do_print() const { +#ifndef NPRINT DOUT << type_str_; +#endif } -void -Bracket_req::do_print () const -{ - Span_req::do_print (); -} Bar_req::Bar_req (String s) { @@ -87,21 +73,6 @@ Partial_measure_req::do_equal_b (Request* r) const - -void -Timing_req::do_print() const{} - - - - -void -Command_req::do_print() const{} - - - -void -Barcheck_req::do_print() const{} - bool Barcheck_req::do_equal_b (Request*r) const { @@ -109,9 +80,6 @@ Barcheck_req::do_equal_b (Request*r) const return b; } - - - void Clef_change_req::do_print() const { @@ -125,11 +93,6 @@ Clef_change_req::Clef_change_req (String s) clef_str_ = s; } - - - - - void Partial_measure_req::do_print() const { @@ -184,11 +147,6 @@ Tempo_req::do_equal_b (Request *r) const return t&& t->dur_.length_mom ()== dur_.length_mom () && metronome_i_ == t->metronome_i_; } - - - - - void Measure_grouping_req::do_print() const { @@ -333,13 +291,6 @@ Break_req::Break_req () penalty_i_ = 0; } -void -Break_req::do_print () const -{ -} - - - Mark_req::Mark_req (String s) { str_ = s; diff --git a/lily/direction.cc b/lily/direction.cc index a0ac3e6bbf..f4b46b1f5e 100644 --- a/lily/direction.cc +++ b/lily/direction.cc @@ -9,8 +9,8 @@ #include "direction.hh" -#if 0 -String direction_str (Direction d, Axis a) +String +direction_str (Direction d, Axis a) { String s("center"); if (a == Y_AXIS) @@ -23,4 +23,3 @@ String direction_str (Direction d, Axis a) } return s; } -#endif diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index f0478bebe2..1f616ec795 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -8,7 +8,6 @@ #include "musical-request.hh" #include "extender-engraver.hh" #include "extender-spanner.hh" -#include "text-def.hh" #include "score-column.hh" #include "g-text-item.hh" diff --git a/lily/g-script-engraver.cc b/lily/g-script-engraver.cc new file mode 100644 index 0000000000..7ddb4f7028 --- /dev/null +++ b/lily/g-script-engraver.cc @@ -0,0 +1,135 @@ +/* + script-engraver.cc -- implement G_script_engraver + + (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> +*/ + +#include "g-script-engraver.hh" +#include "g-script.hh" +#include "g-stem-staff-side.hh" +#include "musical-request.hh" +#include "stem.hh" +#include "staff-symbol.hh" +#include "rhythmic-head.hh" + +G_script_engraver::G_script_engraver() +{ + do_post_move_processing(); +} + +bool +G_script_engraver::do_try_music (Music *r_l) +{ + if (Articulation_req *mr = dynamic_cast <Articulation_req *> (r_l)) + { + for (int i=0; i < script_req_l_arr_.size(); i++) + { + if (script_req_l_arr_[i]->equal_b (mr)) + return true; + } + script_req_l_arr_.push (mr); + return true; + } + return false; +} + +void +G_script_engraver::do_process_requests() +{ + for (int i=0; i < script_req_l_arr_.size(); i++) + { + Articulation_req* l=script_req_l_arr_[i]; + + + SCM list = gh_eval_str (("(articulation-to-scriptdef \"" + l->articulation_str_ + "\")").ch_C()); + + if (list == SCM_BOOL_F) + { + l->warning(_f("don't know how to interpret articulation `%s'\n", + l->articulation_str_.ch_C())); + continue; + } + G_script *p =new G_script; + G_stem_staff_side_item * ss =new G_stem_staff_side_item; + list = SCM_CDR (list); + + p->indices_drul_[LEFT] = ly_scm2string(SCM_CAAR (list)); + p->indices_drul_[RIGHT] = ly_scm2string(SCM_CDAR (list)); + list = SCM_CDR(list); + bool follow_staff = gh_scm2bool (SCM_CAR(list)); + list = SCM_CDR(list); + int relative_stem_dir = gh_scm2int (SCM_CAR(list)); + list = SCM_CDR(list); + int force_dir =gh_scm2int (SCM_CAR(list)); + list = SCM_CDR(list); + SCM priority = SCM_CAR(list); + + if (relative_stem_dir) + ss->relative_dir_ = relative_stem_dir; + else + ss->dir_ = force_dir; + + if (l->dir_) + ss->dir_ = l->dir_; + + ss->staff_support_b_ = !follow_staff; + p->set_staff_side (ss); + ss->set_elt_property (script_priority_scm_sym, priority); + ss->set_elt_property (padding_scm_sym, gh_double2scm(1.0)); + script_p_arr_.push (p); + staff_side_p_arr_.push (ss); + + announce_element (Score_element_info (p, l)); + announce_element (Score_element_info (ss, l)); + } +} + +void +G_script_engraver::acknowledge_element (Score_element_info inf) +{ + if (Stem *s = dynamic_cast<Stem*>(inf.elem_l_)) + { + for (int i=0; i < staff_side_p_arr_.size(); i++) + if (G_stem_staff_side_item * ss = dynamic_cast<G_stem_staff_side_item*>(staff_side_p_arr_[i])) + { + ss->set_stem (s); + ss->add_support (s); + } + } + else if (Rhythmic_head * rh = dynamic_cast<Rhythmic_head*>(inf.elem_l_)) + { + for (int i=0; i < staff_side_p_arr_.size(); i++) + { + G_staff_side_item * ss = dynamic_cast<G_staff_side_item*>(staff_side_p_arr_[i]); + + if (!ss->dim_cache_[X_AXIS].parent_l_) + { + ss->dim_cache_[X_AXIS].parent_l_ = &inf.elem_l_->dim_cache_[X_AXIS]; + } + ss->add_support (rh); + } + } +} + +void +G_script_engraver::do_pre_move_processing() +{ + for (int i=0; i < script_p_arr_.size(); i++) + { + typeset_element (script_p_arr_[i]); + typeset_element (staff_side_p_arr_[i]); + } + script_p_arr_.clear(); + staff_side_p_arr_.clear (); +} + +void +G_script_engraver::do_post_move_processing() +{ + script_req_l_arr_.clear(); +} + + + +ADD_THIS_TRANSLATOR(G_script_engraver); + diff --git a/lily/g-script.cc b/lily/g-script.cc new file mode 100644 index 0000000000..9ad7c9aca2 --- /dev/null +++ b/lily/g-script.cc @@ -0,0 +1,69 @@ +/* + g-script.cc -- implement G_script + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> + + */ + +/* + + TODO: Quantisation support (staccato dots between stafflines) + +*/ + +#include "g-script.hh" +#include "lookup.hh" +#include "g-staff-side.hh" + +G_script::G_script () +{ + staff_side_l_ =0; +} + +void +G_script::do_substitute_element_pointer (Score_element*o, Score_element*n) +{ + if (o == staff_side_l_) + staff_side_l_ = dynamic_cast<G_staff_side_item*>(n); +} + + + +Molecule +G_script::get_molecule(Direction d) const +{ + return lookup_l ()->afm_find ("scripts-" + indices_drul_[d]); +} + + +void +G_script::do_pre_processing () +{ + Graphical_element * e + = staff_side_l_->dim_cache_[X_AXIS].parent_l_->element_l(); + translate_axis (e->extent (X_AXIS).center (), X_AXIS); +} + +void +G_script::do_post_processing () +{ + Direction d = staff_side_l_->dir_; + Molecule m (get_molecule(d)); + translate_axis (- m.dim_[Y_AXIS][Direction (-d)], Y_AXIS); +} + +void +G_script::set_staff_side (G_staff_side_item*g) +{ + staff_side_l_ = g; + add_dependency (g); + dim_cache_[Y_AXIS].parent_l_ = & g->dim_cache_[Y_AXIS]; +} + +Molecule* +G_script::do_brew_molecule_p () const +{ + return new Molecule (get_molecule (staff_side_l_->dir_)); +} diff --git a/lily/g-staff-side.cc b/lily/g-staff-side.cc index 20812e55ad..db1b29cd69 100644 --- a/lily/g-staff-side.cc +++ b/lily/g-staff-side.cc @@ -15,25 +15,26 @@ G_staff_side_item::G_staff_side_item () dir_ = CENTER; to_position_l_ = 0; set_elt_property (transparent_scm_sym, SCM_BOOL_T); - + staff_support_b_ = true; axis_ = Y_AXIS; } + void G_staff_side_item::do_pre_processing () { if (!dir_) - set_default_direction (); + dir_ = get_default_direction (); if (axis_ == X_AXIS) position_self (); } -void -G_staff_side_item::set_default_direction () +Direction +G_staff_side_item::get_default_direction () const { - dir_ = DOWN; + return DOWN; } @@ -66,6 +67,7 @@ G_staff_side_item::do_substitute_element_pointer (Score_element*o, Score_element void G_staff_side_item::position_self () { + Interval dim; Dimension_cache *common = 0; if (support_l_arr_.size ()) @@ -85,15 +87,21 @@ G_staff_side_item::position_self () dim = Interval(0,0); common = dim_cache_[axis_].parent_l_; } - Interval sym_dim = to_position_l_->extent (axis_); + + + Interval sym_dim + = to_position_l_ + ? to_position_l_->extent (axis_) + : Interval(0,0); + Real off = dim_cache_[axis_].relative_coordinate (common); - SCM pad = remove_elt_property (padding_scm_sym); + SCM pad = remove_elt_property (padding_scm_sym); if (pad != SCM_BOOL_F) { - off -= gh_scm2double (SCM_CDR(pad)) * dir_; + off += gh_scm2double (SCM_CDR(pad)) * dir_; } - dim_cache_[axis_].set_offset (dim[dir_] - sym_dim[-dir_] - off); + dim_cache_[axis_].set_offset (dim[dir_] - sym_dim[-dir_] + off); } void @@ -107,7 +115,8 @@ G_staff_side_item::do_post_processing () void G_staff_side_item::do_add_processing () { - if (axis_ == Y_AXIS && staff_symbol_l ()) + if (staff_support_b_ + && axis_ == Y_AXIS && staff_symbol_l ()) { add_support (staff_symbol_l ()); } diff --git a/lily/g-stem-staff-side.cc b/lily/g-stem-staff-side.cc new file mode 100644 index 0000000000..446e0649a6 --- /dev/null +++ b/lily/g-stem-staff-side.cc @@ -0,0 +1,55 @@ +/* + g-stem-staff-side.cc -- implement G_stem_staff_side + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> + + */ + +#include "g-stem-staff-side.hh" +#include "stem.hh" + +G_stem_staff_side_item::G_stem_staff_side_item () +{ + stem_l_ =0; + relative_dir_ = CENTER; +} + +void +G_stem_staff_side_item::do_substitute_element_pointer (Score_element*o, + Score_element*n) +{ + if (o == stem_l_) + { + stem_l_ = dynamic_cast<Stem*> (n); + } +} + +void +G_stem_staff_side_item::set_stem (Stem*s) +{ + stem_l_ =s; + add_dependency (s); +} + + +Direction +G_stem_staff_side_item::get_default_direction () const +{ + return relative_dir_ * stem_l_->dir_; +} + +void +G_stem_staff_side_item::do_pre_processing () +{ + SCM p = remove_elt_property (padding_scm_sym); + if (p != SCM_BOOL_F && stem_l_) + { + p = SCM_CDR (p); + set_elt_property (padding_scm_sym, + gh_double2scm(stem_l_->staff_line_leading_f () + * gh_scm2double (p))); + } + G_staff_side_item :: do_pre_processing (); +} diff --git a/lily/general-script-def.cc b/lily/general-script-def.cc index c69988242f..a425c9f387 100644 --- a/lily/general-script-def.cc +++ b/lily/general-script-def.cc @@ -1,3 +1,4 @@ + /* general-script-def.cc -- implement General_script_def @@ -70,3 +71,4 @@ General_script_def::get_molecule (Paper_def*, Direction) const + diff --git a/lily/identifier.cc b/lily/identifier.cc index bf9205579f..8419dd3607 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -13,7 +13,6 @@ #include "identifier.hh" #include "my-lily-lexer.hh" #include "debug.hh" -#include "script-def.hh" #include "request.hh" #include "translator.hh" #include "notename-table.hh" @@ -82,7 +81,6 @@ Class ## _identifier::do_print () const { \ -DEFAULT_PRINT(General_script_def); DEFAULT_PRINT(Translator); DEFAULT_PRINT(Music); DEFAULT_PRINT(Request); @@ -99,7 +97,6 @@ Class ## _identifier::do_str () const { \ DUMMY_STR(Notename_table); -DUMMY_STR(General_script_def); DUMMY_STR(Translator); DUMMY_STR(Music); DUMMY_STR(Request); @@ -171,7 +168,6 @@ IMPLEMENT_ID_CLASS(Translator); IMPLEMENT_ID_CLASS(int); IMPLEMENT_ID_CLASS(Real); IMPLEMENT_ID_CLASS(String); -IMPLEMENT_ID_CLASS(General_script_def); IMPLEMENT_ID_CLASS(Music); IMPLEMENT_ID_CLASS(Score); IMPLEMENT_ID_CLASS(Request); @@ -181,7 +177,6 @@ IMPLEMENT_ID_CLASS(Notename_table); VIRTUAL_ACCESSOR(Music); VIRTUAL_ACCESSOR(Request); VIRTUAL_ACCESSOR(Translator); -VIRTUAL_ACCESSOR(General_script_def); DEFAULT_ACCESSOR(Notename_table); DEFAULT_ACCESSOR(Duration); DEFAULT_ACCESSOR(int); diff --git a/lily/include/axis-align-item.hh b/lily/include/axis-align-item.hh index 659919425b..b6a0ab5231 100644 --- a/lily/include/axis-align-item.hh +++ b/lily/include/axis-align-item.hh @@ -19,7 +19,8 @@ class Axis_align_item : public virtual Align_element, public: Axis_align_item (); protected: - virtual void do_print () const {} + virtual void do_print ()const; + }; #endif /* AXIS_ALIGN_ITEM_HH */ diff --git a/lily/include/axis-group-spanner.hh b/lily/include/axis-group-spanner.hh index 40753a8a9a..0de8cc51ef 100644 --- a/lily/include/axis-group-spanner.hh +++ b/lily/include/axis-group-spanner.hh @@ -7,8 +7,8 @@ */ -#ifndef SPAN_AXIS_GROUP_HH -#define SPAN_AXIS_GROUP_HH +#ifndef AXIS_GROUP_SPANNER_HH +#define AXIS_GROUP_SPANNER_HH #include "spanner.hh" #include "axis-group-element.hh" diff --git a/lily/include/clef-item.hh b/lily/include/clef-item.hh index effd9886b5..c37277e312 100644 --- a/lily/include/clef-item.hh +++ b/lily/include/clef-item.hh @@ -7,7 +7,7 @@ #ifndef CLEFITEM_HH #define CLEFITEM_HH #include "item.hh" -#include "text-def.hh" + #include "direction.hh" #include "pointer.hh" #include "staff-symbol-referencer.hh" diff --git a/lily/include/command-request.hh b/lily/include/command-request.hh index 75004fb803..63f8c11135 100644 --- a/lily/include/command-request.hh +++ b/lily/include/command-request.hh @@ -15,44 +15,30 @@ #include "duration.hh" #include "musical-pitch.hh" -/** Request which are assumed to be "happening" before the - musical requests. Not coupled to a note or rest. */ -class Command_req : public virtual Request { -public: - REQUESTMETHODS(Command_req); - -}; - - -class Break_req : public Command_req { +class Break_req : public Request { public: enum { DISALLOW = -10000, FORCE = 10000 }; int penalty_i_; Break_req (); - REQUESTMETHODS (Break_req); +protected: + VIRTUAL_COPY_CONS(Music); }; -class Mark_req : public Command_req { +class Mark_req : public Request { public: Mark_req (String); String str_; - REQUESTMETHODS (Mark_req); -}; - -class Command_script_req : public Command_req, public Script_req { -public: - // huh? - Command_script_req(); - ~Command_script_req(); - REQUESTMETHODS(Command_script_req); +protected: + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); }; /** Baseclass for time_signature/partial req. It has to be handled by Staff_{walker,column} baseclass. */ -class Timing_req : public Command_req { +class Timing_req : public Request { public: - REQUESTMETHODS(Timing_req); + VIRTUAL_COPY_CONS(Music); }; @@ -63,7 +49,9 @@ public: int metronome_i_; Tempo_req(); - REQUESTMETHODS(Tempo_req); +protected: + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); bool do_equal_b (Request *) const; }; @@ -72,7 +60,9 @@ public: Moment length_mom_; Partial_measure_req (Moment); - REQUESTMETHODS(Partial_measure_req); +protected: + VIRTUAL_COPY_CONS(Music); + virtual void do_print () const; bool do_equal_b (Request*) const; }; @@ -81,11 +71,14 @@ public: */ class Time_signature_change_req : public Timing_req { public: - int beats_i_, one_beat_i_; + int beats_i_; + int one_beat_i_; Time_signature_change_req(); +protected: + virtual void do_print () const; bool do_equal_b (Request*) const; - REQUESTMETHODS(Time_signature_change_req); + VIRTUAL_COPY_CONS(Music); }; /// toggle Cadenza mode @@ -93,35 +86,42 @@ class Cadenza_req : public Timing_req { public: /// turn on? bool on_b_; - bool do_equal_b (Request*) const; Cadenza_req (bool); - REQUESTMETHODS(Cadenza_req); +protected: + virtual void do_print () const; + + bool do_equal_b (Request*) const; + VIRTUAL_COPY_CONS(Music); }; /// check if we're at start of a measure. class Barcheck_req : public Timing_req { public: bool do_equal_b (Request *) const; - REQUESTMETHODS(Barcheck_req); + VIRTUAL_COPY_CONS(Music); }; class Measure_grouping_req : public Timing_req { public: Array<int> beat_i_arr_; Array<Moment> elt_length_arr_; +protected: + virtual void do_print () const; bool do_equal_b (Request *) const; - REQUESTMETHODS(Measure_grouping_req); + VIRTUAL_COPY_CONS(Music); }; /** draw a (repeat)-bar. This something different than #Barcheck_req#, the latter should only happen at the start of a measure. */ -class Bar_req : public Command_req { +class Bar_req : public Request { public: String type_str_; Bar_req (String); +protected: + virtual void do_print () const; bool do_equal_b (Request*) const; - REQUESTMETHODS(Bar_req); + VIRTUAL_COPY_CONS(Music); }; @@ -130,14 +130,13 @@ public: Routines for sharps and flats are separated, so that caller may identify non-conventional keys. */ -class Key_change_req : public Command_req { +class Key_change_req : public Request { public: Array<Musical_pitch> pitch_arr_; int modality_i_; bool ordinary_key_b_; Key_change_req(); - REQUESTMETHODS(Key_change_req); /// squash the octaves to 1 void squash_octaves(); @@ -146,22 +145,27 @@ public: /// return number of sharps in key int sharps_i(); + bool minor_b() const; +protected: + VIRTUAL_COPY_CONS(Music); void transpose (Musical_pitch d); - bool minor_b() const; + virtual void do_print () const; }; -class Clef_change_req : public Command_req { +class Clef_change_req : public Request { public: String clef_str_; Clef_change_req (String); - REQUESTMETHODS(Clef_change_req); +protected: + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); }; -class Bracket_req : public Span_req, public Command_req { +class Bracket_req : public Span_req { public: - REQUESTMETHODS(Bracket_req); + VIRTUAL_COPY_CONS(Music); }; diff --git a/lily/include/g-script-engraver.hh b/lily/include/g-script-engraver.hh new file mode 100644 index 0000000000..7f1774c6de --- /dev/null +++ b/lily/include/g-script-engraver.hh @@ -0,0 +1,31 @@ +/* + script-engraver.hh -- part of GNU LilyPond + + (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> +*/ + + +#ifndef G_SCRIPT_GRAV +#define G_SCRIPT_GRAV + +#include "engraver.hh" + + +class G_script_engraver : public Engraver { + Link_array<G_script> script_p_arr_; + Link_array<G_staff_side_item> staff_side_p_arr_; + Link_array<Articulation_req> script_req_l_arr_; + +public: + VIRTUAL_COPY_CONS(Translator); + + G_script_engraver(); +protected: + virtual bool do_try_music (Music*); + virtual void do_process_requests (); + virtual void do_pre_move_processing (); + virtual void do_post_move_processing (); + virtual void acknowledge_element (Score_element_info); +}; + +#endif // G_SCRIPT_GRAV diff --git a/lily/include/g-script.hh b/lily/include/g-script.hh new file mode 100644 index 0000000000..f1309638ad --- /dev/null +++ b/lily/include/g-script.hh @@ -0,0 +1,39 @@ +/* + g-script.hh -- declare G_script + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> + + */ + +#ifndef G_STEM_SCRIPT_HH +#define G_STEM_SCRIPT_HH + +#include "item.hh" +#include "drul-array.hh" + +/** + articulation marks (and the like) that are attached to notes/stems. + Needs support from G_staff_side for proper operation. + */ +class G_script : public Item +{ + G_staff_side_item * staff_side_l_; + + Molecule get_molecule (Direction d) const; +public: + Drul_array<String> indices_drul_; + G_script (); + void set_staff_side (G_staff_side_item*); + +protected: + virtual void do_substitute_element_pointer (Score_element*o, + Score_element*n); + virtual void do_pre_processing (); + virtual void do_post_processing (); + Molecule* do_brew_molecule_p () const; +}; + +#endif /* G_STEM_SCRIPT_HH */ + diff --git a/lily/include/g-staff-side.hh b/lily/include/g-staff-side.hh index c463360e27..5f527141e0 100644 --- a/lily/include/g-staff-side.hh +++ b/lily/include/g-staff-side.hh @@ -13,21 +13,34 @@ #include "item.hh" #include "staff-symbol-referencer.hh" +/** + Position myself next to a set of elements. Configurable in axis + and direction. + + Properties: + + padding :: Real + + Amount of extra space to add. +*/ class G_staff_side_item : public Item, public Staff_symbol_referencer { void position_self (); public: + Score_element * to_position_l_; Direction dir_; Link_array<Score_element> support_l_arr_; Axis axis_; + + bool staff_support_b_; G_staff_side_item (); void set_victim (Score_element*); void add_support (Score_element*); - virtual void set_default_direction (); VIRTUAL_COPY_CONS(Score_element); + virtual Direction get_default_direction () const; protected: virtual void do_add_processing (); virtual void do_substitute_element_pointer (Score_element*,Score_element*); diff --git a/lily/include/g-stem-staff-side.hh b/lily/include/g-stem-staff-side.hh new file mode 100644 index 0000000000..59e51cec9d --- /dev/null +++ b/lily/include/g-stem-staff-side.hh @@ -0,0 +1,40 @@ +/* + g-stem-staff-side.hh -- declare G_stem_staff_side + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> + + */ + +#ifndef G_STEM_STAFF_SIDE_HH +#define G_STEM_STAFF_SIDE_HH + +#include "g-staff-side.hh" +/** + Position self, analogous to G_staff_side_item, but use Stem direction + for determining direction. + + Properties: + + padding :: Real + + Padding in staffline leading + + */ +class G_stem_staff_side_item : public G_staff_side_item +{ + Stem *stem_l_; +public: + Direction relative_dir_; + + void set_stem (Stem*); + G_stem_staff_side_item (); +protected: + virtual Direction get_default_direction ()const; + virtual void do_pre_processing (); + virtual void do_substitute_element_pointer (Score_element*o,Score_element*e); +}; + +#endif /* G_STEM_STAFF_SIDE_HH */ + diff --git a/lily/include/g-text-item.hh b/lily/include/g-text-item.hh index 2362a5d9be..c27ad99a69 100644 --- a/lily/include/g-text-item.hh +++ b/lily/include/g-text-item.hh @@ -12,6 +12,9 @@ #include "item.hh" +/** + Print a text in specified style. + */ class G_text_item : public Item { public: diff --git a/lily/include/general-script-def.hh b/lily/include/general-script-def.hh index fe76de9e74..74b2075ae7 100644 --- a/lily/include/general-script-def.hh +++ b/lily/include/general-script-def.hh @@ -10,6 +10,8 @@ #ifndef GENERAL_SCRIPT_DEF_HH #define GENERAL_SCRIPT_DEF_HH + + #include "lily-proto.hh" #include "input.hh" #include "virtual-methods.hh" diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index 0ebfc65bcd..4d705020fb 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -18,7 +18,7 @@ class Notename_table_identifier; class Translator_identifier; class Music_identifier; -class General_script_def_identifier; +class Articulation_req_identifier; class Symtables_identifier; class Midi_def_identifier; class Paper_def_identifier; @@ -54,7 +54,6 @@ struct Identifier : public Input { IDACCESSOR(Translator) IDACCESSOR(Notename_table) IDACCESSOR(Music) - IDACCESSOR(General_script_def) IDACCESSOR(Symtables) IDACCESSOR(Midi_def) IDACCESSOR(Paper_def) diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 367ff2febd..68667ae067 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -19,6 +19,7 @@ struct Abbreviation_req; struct Adobe_font_metric; struct Adobe_font_char_metric; struct All_font_metrics; +struct Articulation_req; struct Atom; struct Audio_element; struct Audio_column; @@ -81,6 +82,8 @@ struct Engraver; struct Engraver_group_engraver; struct Extender; struct Extender_req; +struct G_script; +struct G_script_req; struct G_staff_side_item; struct G_text_item; struct General_script_def; diff --git a/lily/include/line-of-score.hh b/lily/include/line-of-score.hh index 187947afec..2410acc285 100644 --- a/lily/include/line-of-score.hh +++ b/lily/include/line-of-score.hh @@ -8,27 +8,30 @@ #define SCORELINE_HH #include "colhpos.hh" -#include "spanner.hh" +#include "axis-group-spanner.hh" #include "super-element.hh" /// the columns of a score that form one line. -class Line_of_score : public Spanner, public Super_element +class Line_of_score : public Axis_group_spanner, public Super_element { -public: Link_array<Paper_column> cols_; +public: + Line_of_score(); - void add_element (Score_element *); - /// is #c# contained in #*this#? bool contains_b (Paper_column const *c) const; Link_array<Line_of_score> get_lines() const; Line_of_score * set_breaking (Array<Column_x_positions> const&, int j) const; + + void output_all (); + void add_column (Paper_column*); + protected: + virtual void do_substitute_element_pointer (Score_element*, Score_element*); virtual Link_array<Score_element> get_extra_dependencies () const; - virtual Interval do_width() const; virtual void do_print() const; VIRTUAL_COPY_CONS(Score_element); }; diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index abf3434a8b..827e094f03 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -41,7 +41,7 @@ public: Molecule plet (Real dy, Real dx, Direction dir) const; Molecule rest (int, bool outside, String) const; Molecule rule_symbol (Real height, Real width) const; - Molecule script (String idx) const; + Molecule stem (Real y1_pos, Real y2_pos) const; Molecule slur (Array<Offset> controls) const; Molecule streepje (int type) const; diff --git a/lily/include/lookup.hh.orig b/lily/include/lookup.hh.orig new file mode 100644 index 0000000000..abf3434a8b --- /dev/null +++ b/lily/include/lookup.hh.orig @@ -0,0 +1,61 @@ +/* + lookup.hh -- declare Lookup + + source file of the GNU LilyPond music typesetter + + (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> + Jan Nieuwenhuizen <janneke@gnu.org> +*/ + +#ifndef LOOKUP_HH +#define LOOKUP_HH + +#include "molecule.hh" +#include "fproto.hh" +#include "direction.hh" +#include "box.hh" + +/** handy interface to symbol table + */ +class Lookup +{ +public: + Lookup (); + Lookup (Lookup const&); + + Molecule simple_bar (String s, Real w) const; + Molecule accidental (int, bool cautionary) const; + Molecule afm_find (String, bool warn=true) const; + Molecule notehead (int, String) const; + + Molecule bar (String, Real height) const; + Molecule beam (Real, Real, Real) const; + Molecule clef (String) const; + Molecule dashed_slur (Array<Offset> controls, Real thick, Real dash) const; + Molecule dots () const; + Molecule ledger_line (Interval) const; + Molecule fill (Box b) const; + Molecule filledbox (Box b) const; + Molecule flag (int, Direction) const; + Molecule hairpin (Real width, bool decresc, bool continued) const; + Molecule plet (Real dy, Real dx, Direction dir) const; + Molecule rest (int, bool outside, String) const; + Molecule rule_symbol (Real height, Real width) const; + Molecule script (String idx) const; + Molecule stem (Real y1_pos, Real y2_pos) const; + Molecule slur (Array<Offset> controls) const; + Molecule streepje (int type) const; + Molecule text (String style, String text) const; + Molecule staff_brace (Real dy) const; + Molecule staff_bracket (Real dy) const; + Molecule volta (Real w, bool last_b) const; + Molecule special_time_signature (String, int,int) const; + Molecule time_signature (int n,int d) const; + + Paper_def * paper_l_; + + String font_name_; + Adobe_font_metric * afm_l_; +}; + +#endif // LOOKUP_HH diff --git a/lily/include/ly-symbols.hh b/lily/include/ly-symbols.hh index 1e2c85eecb..322d4ab8cb 100644 --- a/lily/include/ly-symbols.hh +++ b/lily/include/ly-symbols.hh @@ -47,6 +47,7 @@ DECLARE_LY_SYMBOL(pianobrace); DECLARE_LY_SYMBOL(placebox); DECLARE_LY_SYMBOL(rulesym); DECLARE_LY_SYMBOL(rulethickness); +DECLARE_LY_SYMBOL(script_priority); DECLARE_LY_SYMBOL(staffheight); DECLARE_LY_SYMBOL(style); DECLARE_LY_SYMBOL(text); diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 28d949b497..1fd514cde2 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -15,84 +15,87 @@ #include "duration.hh" #include "musical-pitch.hh" -/** - A request which is coupled to a note (that has duration). - Base class only - */ -class Musical_req : public virtual Request { -public: - - - REQUESTMETHODS(Musical_req); -}; - - /** a request with a duration. 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_; - + virtual void do_print () const; + + bool do_equal_b (Request*) const; void compress (Moment); virtual Moment length_mom () const; static int compare (Rhythmic_req const&,Rhythmic_req const&); - REQUESTMETHODS(Rhythmic_req); + VIRTUAL_COPY_CONS(Music); }; class Skip_req : public Rhythmic_req { public: - REQUESTMETHODS(Skip_req); + VIRTUAL_COPY_CONS(Music); }; -struct Spacing_req :virtual Request { - Moment next; - Real distance; - Real strength; - Spacing_req(); - REQUESTMETHODS(Spacing_req); -}; -struct Abbreviation_req : public Musical_req { - REQUESTMETHODS (Abbreviation_req); +struct Abbreviation_req : public Request { + VIRTUAL_COPY_CONS (Abbreviation_req); Abbreviation_req (); int type_i_; + virtual void do_print () const; }; -class Blank_req : public Spacing_req, Rhythmic_req { -public: - REQUESTMETHODS(Spacing_req); -}; /** a syllable or lyric is a string with rhythm. */ class Lyric_req : public Rhythmic_req { public: + virtual void do_print () const; String text_str_; - REQUESTMETHODS(Lyric_req); + VIRTUAL_COPY_CONS(Music); }; +class Articulation_req : public G_script_req +{ +public: + String articulation_str_; +protected: + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); +}; + +class Text_script_req : public G_script_req { +public: + String text_str_; + + // should be generic property of some kind.. + String style_str_; +protected: + VIRTUAL_COPY_CONS(Music); + virtual void do_print () const; +}; + /// request which has some kind of pitch -struct Melodic_req :virtual Musical_req +struct Melodic_req :virtual Request { 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); - Melodic_req(); - bool do_equal_b (Request*) const; - static int compare (Melodic_req const&,Melodic_req const&); - REQUESTMETHODS(Melodic_req); + virtual bool do_equal_b (Request*) const; + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); }; /// specify tonic of a chord struct Tonic_req : public Melodic_req { - Tonic_req (); - REQUESTMETHODS(Tonic_req); + VIRTUAL_COPY_CONS(Music); }; /// Put a note of specified type, height, and with accidental on the staff. @@ -104,8 +107,10 @@ public: /// Cautionary, i.e. parenthesized accidental. bool cautionary_b_; Note_req(); +protected: + virtual void do_print () const; bool do_equal_b (Request*) const; - REQUESTMETHODS(Note_req); + VIRTUAL_COPY_CONS(Music); }; /** @@ -113,7 +118,7 @@ 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); + VIRTUAL_COPY_CONS(Music); }; /** @@ -122,24 +127,17 @@ public: */ class Multi_measure_rest_req : public Rhythmic_req { public: - REQUESTMETHODS(Multi_measure_rest_req); + VIRTUAL_COPY_CONS(Music); }; -class Musical_span_req : public Span_req, public virtual Musical_req -{ -public: - REQUESTMETHODS(Musical_span_req); - -}; - /** Start / stop an abbreviation beam at this note. */ -class Abbreviation_beam_req : public Musical_span_req { +class Abbreviation_beam_req : public Span_req { public: - REQUESTMETHODS (Abbreviation_beam_req); + VIRTUAL_COPY_CONS(Abbreviation_beam_req); Abbreviation_beam_req (); @@ -149,46 +147,48 @@ public: /// a slur -class Slur_req : public Musical_span_req { +class Slur_req : public Span_req { public: - REQUESTMETHODS(Slur_req); + VIRTUAL_COPY_CONS(Music); }; /// an extender line class Extender_req : public Request { public: - REQUESTMETHODS(Extender_req); - Extender_req (); -}; + VIRTUAL_COPY_CONS(Music); -class Musical_script_req : public Musical_req, public Script_req { -public: - REQUESTMETHODS(Musical_script_req); }; -class Dynamic_req : public virtual Musical_req { +class Dynamic_req : public virtual Request { public: - REQUESTMETHODS(Dynamic_req); + VIRTUAL_COPY_CONS(Music); }; class Absolute_dynamic_req : public Dynamic_req { public: String loudness_str_; - virtual bool do_equal_b (Request*) const; String loudness_str () const; Absolute_dynamic_req(); - REQUESTMETHODS(Absolute_dynamic_req); + +protected: + virtual void do_print () const; + virtual bool do_equal_b (Request*) const; + VIRTUAL_COPY_CONS(Music); }; -class Span_dynamic_req : public Dynamic_req, public Musical_span_req { +class Span_dynamic_req : public Dynamic_req, public Span_req { public: - virtual bool do_equal_b (Request*) const; + /// Grow or shrink the volume: 1=cresc, -1 = decresc Direction dynamic_dir_; + Span_dynamic_req(); - REQUESTMETHODS(Span_dynamic_req); +protected: + virtual bool do_equal_b (Request*) const; + virtual void do_print () const; + VIRTUAL_COPY_CONS(Music); }; #endif // MUSICALREQUESTS_HH diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index ef4d41a2c2..1b62555d03 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -35,7 +35,7 @@ public: void output_molecule (Molecule const *, Offset, char const *); void output_comment (String s); void output_scheme (SCM scm); - void start_line (); + void start_line (Real height); void stop_line (); void switch_to_font (String fontname); diff --git a/lily/include/request.hh b/lily/include/request.hh index 8cd5e4abdd..72134e8c33 100644 --- a/lily/include/request.hh +++ b/lily/include/request.hh @@ -25,14 +25,9 @@ */ class Request : public Music { - public: - virtual ~Request(){} - - VIRTUAL_COPY_CONS(Music); - bool equal_b (Request*) const; protected: virtual bool do_equal_b (Request*) const; @@ -40,26 +35,27 @@ protected: }; -#define REQUESTMETHODS(T) \ -\ -VIRTUAL_COPY_CONS(Request);\ -virtual void do_print() const - +class G_script_req : public virtual Request +{ +public: + Direction dir_; + VIRTUAL_COPY_CONS(Music); +}; /** Put a script above or below this ``note'' or bar. eg upbow, downbow. Why a request? These symbols may conflict with slurs and brackets, so this also a request */ -class Script_req : public virtual Request { +class Script_req : public virtual G_script_req { public: - Direction dir_; General_script_def *scriptdef_p_; bool do_equal_b (Request*) const; Script_req(); - REQUESTMETHODS(Script_req); + VIRTUAL_COPY_CONS(Music); + virtual void do_print () const; ~Script_req(); Script_req (Script_req const&); }; @@ -73,10 +69,12 @@ class Span_req : public virtual Request { public: /// should the spanner start or stop, or is it unwanted? Direction spantype_; - bool do_equal_b (Request*) const; - REQUESTMETHODS(Span_req); Span_req(); +protected: + virtual bool do_equal_b (Request*) const; + virtual void do_print() const; + VIRTUAL_COPY_CONS(Music); }; /** @@ -84,13 +82,13 @@ public: */ class Tie_req : public Request { public: - REQUESTMETHODS(Tie_req); + VIRTUAL_COPY_CONS(Music); }; /** Start / stop a beam at this note */ class Beam_req : public Span_req { public: - REQUESTMETHODS(Beam_req); + VIRTUAL_COPY_CONS(Music); }; #endif diff --git a/lily/include/script-def.hh b/lily/include/script-def.hh index c0c92d4074..f3d17d75b4 100644 --- a/lily/include/script-def.hh +++ b/lily/include/script-def.hh @@ -9,6 +9,7 @@ #include "string.hh" #include "general-script-def.hh" +#error /** The characteristics of a certain kind of accent. It is not the accent itself. */ class Script_def : public General_script_def { diff --git a/lily/include/script-engraver.hh b/lily/include/script-engraver.hh deleted file mode 100644 index efa5aa6e78..0000000000 --- a/lily/include/script-engraver.hh +++ /dev/null @@ -1,30 +0,0 @@ -/* - script-engraver.hh -- part of GNU LilyPond - - (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> -*/ - - -#ifndef SCRIPTGRAV_HH -#define SCRIPTGRAV_HH - -#include "engraver.hh" - - -class Script_engraver : public Engraver { - Link_array<Script> script_p_arr_; - Link_array<Script_req> script_req_l_arr_; - -public: - VIRTUAL_COPY_CONS(Translator); - - Script_engraver(); -protected: - virtual bool do_try_music (Music*); - virtual void do_process_requests(); - virtual void do_pre_move_processing(); - virtual void do_post_move_processing(); - -}; - -#endif // SCRIPTGRAV_HH diff --git a/lily/include/super-element.hh b/lily/include/super-element.hh index 8c3342a4e6..6e541e0a8a 100644 --- a/lily/include/super-element.hh +++ b/lily/include/super-element.hh @@ -13,20 +13,22 @@ #include "score-element.hh" /** The toplevel element. The Paper_score contains this element, and any element shoud be a dependency for the super element. + + It is the entry point for the "constraint solver"/ dependency + tracker. Every XXXX_processing () call traverses the entire + dependency graph, and calls the appropriate + Score_element::do_XXX_processing function on each Score_element it encounters. + + */ class Super_element : public virtual Score_element { public: - Super_element(); - void space_processing (); void pre_processing(); void breakable_col_processing(); void break_processing(); void post_processing(); void output_all (); - -protected: - }; #endif // Super_element_HH diff --git a/lily/include/text-def.hh b/lily/include/text-def.hh deleted file mode 100644 index 0465a90b2f..0000000000 --- a/lily/include/text-def.hh +++ /dev/null @@ -1,40 +0,0 @@ -/* - text-def.hh -- part of GNU LilyPond - - (c) 1996--1999 Han-Wen Nienhuys -*/ - -#ifndef TEXT_DEF_HH -#define TEXT_DEF_HH - -#include "general-script-def.hh" -#include "string.hh" -#include "lily-proto.hh" -#include "input.hh" - -class Text_def : public General_script_def -{ -public: - VIRTUAL_COPY_CONS(General_script_def); - - /** - Alignment of typeset text wrt center. - - LEFT = raggedright, CENTER = centered, RIGHT = raggedleft - */ - Direction align_dir_; - - String text_str_; - String style_str_; - - virtual void do_print() const; - virtual Direction staff_dir() const; - virtual Molecule get_molecule (Paper_def* p, Direction dir_) const; - virtual ~Text_def() {}; - virtual bool do_equal_b (const General_script_def*) const; - Text_def(); - virtual void print() const; -}; - -#endif // TEXT_DEF_HH - diff --git a/lily/include/text-spanner.hh b/lily/include/text-spanner.hh deleted file mode 100644 index 0cc7b4f9e4..0000000000 --- a/lily/include/text-spanner.hh +++ /dev/null @@ -1,41 +0,0 @@ -/* - textspanner.hh -- part of GNU LilyPond - - (c) 1996--1999 Han-Wen Nienhuys -*/ - -#ifndef TEXTSPANNER_HH -#define TEXTSPANNER_HH - -#include "string.hh" -#include "directional-spanner.hh" -#include "text-def.hh" - -/** a spanner which puts texts on top of other spanners. Use for - triplets, volta, ottava, etc. - - (does anyone use this? Junkme?) -*/ -class Text_spanner : public Spanner { -public: - Directional_spanner * support_span_l_; - General_script_def * spec_p_; - Offset text_off_; - - - void set_support (Directional_spanner*); - Text_spanner(); - Text_spanner (Text_spanner const&); -protected: - VIRTUAL_COPY_CONS(Score_element); - ~Text_spanner(); - virtual void do_add_processing (); - virtual void do_substitute_element_pointer (Score_element*,Score_element*); - virtual void do_pre_processing(); - virtual void do_post_processing(); - virtual Interval height() const ; - virtual Molecule* do_brew_molecule_p() const; - virtual void do_print() const; -}; -#endif // TEXTSPANNER_HH - diff --git a/lily/include/tuplet-spanner.hh b/lily/include/tuplet-spanner.hh index 224d88b17c..afb2d22627 100644 --- a/lily/include/tuplet-spanner.hh +++ b/lily/include/tuplet-spanner.hh @@ -6,7 +6,7 @@ #ifndef Tuplet_spanner_HH #define Tuplet_spanner_HH -#include "text-def.hh" + #include "pointer.hh" #include "directional-spanner.hh" @@ -19,7 +19,12 @@ public: void add_column (Note_column*); void set_beam (Beam*); - P<Text_def> tdef_p_; + + + String number_str_; + /* + junk us. + */ bool bracket_visibility_b_; bool num_visibility_b_; diff --git a/lily/include/volta-spanner.hh b/lily/include/volta-spanner.hh index 2195ac7f4f..a1debb439b 100644 --- a/lily/include/volta-spanner.hh +++ b/lily/include/volta-spanner.hh @@ -7,7 +7,7 @@ #ifndef VOLTA_SPANNER_HH #define VOLTA_SPANNER_HH -#include "text-def.hh" + #include "pointer.hh" #include "spanner.hh" @@ -21,11 +21,11 @@ public: void add_column (Note_column*); void add_column (Bar*); - P<Text_def> number_p_; + String number_str_; Link_array<Bar> column_arr_; Link_array<Note_column> note_column_arr_; bool last_b_; - bool visible_b_; + protected: virtual Molecule* do_brew_molecule_p () const; diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index d7fdfed7b6..084ee6013e 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -7,22 +7,15 @@ */ #include "line-of-score.hh" -#include "spanner.hh" - #include "paper-def.hh" +#include "paper-outputter.hh" #include "p-col.hh" #include "p-score.hh" +#include "warn.hh" Line_of_score::Line_of_score() { -} - -void -Line_of_score::add_element (Score_element*e) -{ - // avoid excess dependencies. - if (! (e->parent_l (X_AXIS) || e->parent_l (Y_AXIS)) ) - add_dependency (e); + set_axes (Y_AXIS,Y_AXIS); } bool @@ -35,23 +28,13 @@ Line_of_score* Line_of_score::set_breaking (Array<Column_x_positions> const &breaking, int j) const { const Link_array<Paper_column> &curline (breaking[j].cols); - const Array<Real> &config (breaking[j].config); - Line_of_score *line_l=0; - - if (breaking.size() >1) - { - line_l = dynamic_cast <Line_of_score*> (clone()); - } - else - line_l = (Line_of_score*)( this); + + line_l = dynamic_cast <Line_of_score*> (clone()); line_l->cols_ = curline; - /* Array<Paper_column*> & - ((Array<Paper_column*> &)) = */ line_l->set_bounds(LEFT,curline[0]); - line_l->set_bounds(RIGHT,curline.top()); for (int i=0; i < curline.size(); i++) @@ -60,32 +43,55 @@ Line_of_score::set_breaking (Array<Column_x_positions> const &breaking, int j) c curline[i]->line_l_ = dynamic_cast<Line_of_score*>(line_l); } + Breaking_information b; + b.bounds_ = line_l->spanned_drul_; + b.broken_spanner_l_ = line_l; + b.line_l_ = line_l; + + broken_info_.push (b); + return line_l; } - - +void +Line_of_score::add_column (Paper_column*p) +{ + cols_.push (p); +} void Line_of_score::do_print() const { Spanner::do_print(); -} - -Interval -Line_of_score::do_width() const -{ - return Spanner::do_width(); + Axis_group_spanner::do_print (); } Link_array<Score_element> Line_of_score::get_extra_dependencies () const { - Link_array<Score_element> r; + Link_array<Score_element> r (Axis_group_spanner::get_extra_dependencies ()); for (int i=0; i < cols_.size (); i++) r.push (cols_[i]); return r; } +void +Line_of_score::do_substitute_element_pointer (Score_element*o, Score_element*n) +{ + if (Paper_column *p = dynamic_cast<Paper_column*>(o)) + cols_.substitute (p, dynamic_cast<Paper_column*>(n)); +} - +void +Line_of_score::output_all () +{ + Interval i(extent(Y_AXIS)); + if (i.empty_b()) + warning ("Huh? Empty Line_of_score?"); + else + translate_axis (- i[MAX], Y_AXIS); + + pscore_l_->outputter_l_->start_line (i.length ()); + Super_element::output_all (); + pscore_l_->outputter_l_->stop_line (); +} diff --git a/lily/lookup.cc b/lily/lookup.cc index 9458b672d1..d588febb05 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -328,12 +328,6 @@ Lookup::rule_symbol (Real height, Real width) const } Molecule -Lookup::script (String str) const -{ - return afm_find (String ("scripts-") + str); -} - -Molecule Lookup::special_time_signature (String s, int n, int d) const { // First guess: s contains only the signature style @@ -396,6 +390,8 @@ Molecule Lookup::text (String style, String text) const { Molecule m; + if (style.empty_b ()) + style = "roman"; int font_mag = 1; Real font_h = paper_l_->get_var ("font_normal"); @@ -409,6 +405,9 @@ Lookup::text (String style, String text) const font_mag = (int)paper_l_->get_var ("magnification_" + style); } + /* + UGH. + */ SCM l = gh_eval_str (("(style-to-cmr \"" + style + "\")").ch_C()); if (l != SCM_BOOL_F) { diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index 32f3ebc0e0..7ae0484379 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -7,7 +7,6 @@ */ #include "lyric-performer.hh" -#include "text-def.hh" #include "musical-request.hh" #include "audio-item.hh" diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 00b647e6a1..6750347e9d 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -15,7 +15,7 @@ #include "lookup.hh" #include "rest.hh" #include "script.hh" -#include "text-def.hh" + #include "molecule.hh" #include "misc.hh" @@ -63,11 +63,8 @@ Multi_measure_rest::do_brew_molecule_p () const if (measures_i_ > 1) { - Text_def text; - text.text_str_ = to_str (measures_i_); - text.style_str_ = "number"; - text.align_dir_ = CENTER; - Molecule s = text.get_molecule (paper_l (), UP); + Molecule s ( lookup_l ()->text ("number", to_str (measures_i_))); + s.translate_axis (3.0 * interline_f, Y_AXIS); mol_p->add_molecule (s); } diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index 394ca287b3..86050545ba 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -92,7 +92,9 @@ void Music_output_def::print () const { #ifndef NPRINT + DOUT << "Translators: \n"; translator_p_dict_p_->print (); + DOUT << "Other definitions.\n"; scope_p_->print( ); #endif } diff --git a/lily/musical-request.cc b/lily/musical-request.cc index adb284cce0..f546bab22c 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -9,30 +9,8 @@ #include "musical-request.hh" #include "misc.hh" #include "debug.hh" -#include "script-def.hh" -#include "text-def.hh" -#include "music-list.hh" - - - - -void -Musical_req::do_print () const{} -void -Tie_req::do_print () const{} - - - - - - -void -Musical_span_req::do_print () const -{ - Span_req::do_print (); -} - +#include "music-list.hh" void Span_req::do_print () const @@ -42,25 +20,6 @@ Span_req::do_print () const #endif } - - -Spacing_req::Spacing_req () -{ - next = 0; - distance = 0; - strength = 0; -} - -void -Spacing_req::do_print () const -{ -#ifndef NPRINT - DOUT << "next " << next << "dist " << distance << "strength\n"; -#endif -} - - - Abbreviation_req::Abbreviation_req () { type_i_ = 0; @@ -78,16 +37,6 @@ Abbreviation_req::do_print () const void -Blank_req::do_print () const -{ - Spacing_req::do_print (); -} - -Melodic_req::Melodic_req () -{ -} - -void Melodic_req::transpose (Musical_pitch delta) { pitch_.transpose (delta); @@ -117,21 +66,11 @@ Melodic_req::compare (Melodic_req const &m1 , Melodic_req const&m2) void Melodic_req::do_print () const { -pitch_.print (); + pitch_.print (); } -Tonic_req::Tonic_req () -{ -} -void -Tonic_req::do_print () const -{ -#ifndef NPRINT - Melodic_req::do_print (); -#endif -} int Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2) @@ -147,9 +86,6 @@ Rhythmic_req::do_equal_b (Request*r) const return rh && !compare (*this, *rh); } - - - void Rhythmic_req::do_print () const { @@ -211,54 +147,12 @@ Note_req::do_print () const #endif } -void -Rest_req::do_print () const -{ - Rhythmic_req::do_print (); -} - -void -Multi_measure_rest_req::do_print () const -{ - Rhythmic_req::do_print (); -} - - -void -Beam_req::do_print () const -{ -} Abbreviation_beam_req::Abbreviation_beam_req () { type_i_ = 0; } -void -Abbreviation_beam_req::do_print () const -{ -} - - -void -Slur_req::do_print () const -{ -} - - - - - -Extender_req::Extender_req () -{ -} - -void -Extender_req::do_print () const -{ -} - - bool Span_req::do_equal_b (Request*r) const { @@ -271,66 +165,6 @@ Span_req::Span_req () spantype_ = CENTER; } -Script_req::Script_req (Script_req const&s) -{ - dir_ = s.dir_; - scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone () : 0; -} - -/* - don't check dirs? - - (d1.dir_ == d2.dir_) - */ -bool -Script_req::do_equal_b (Request*r) const -{ - Script_req * s = dynamic_cast <Script_req *> (r); - return s && scriptdef_p_->equal_b (*s->scriptdef_p_); -} - -Script_req::Script_req () -{ - dir_ = CENTER; - scriptdef_p_ = 0; -} - - - - -void -Script_req::do_print () const -{ -#ifndef NPRINT - DOUT << " dir " << dir_; - scriptdef_p_->print (); -#endif -} - -void -Musical_script_req::do_print () const -{ - Script_req::do_print (); -} - -Script_req::~Script_req () -{ - delete scriptdef_p_; -} - -void -Skip_req::do_print () const -{ -#ifndef NPRINT - DOUT << "duration: " << length_mom (); -#endif -} - -void -Dynamic_req::do_print () const -{ - Musical_req::do_print (); -} void Absolute_dynamic_req::do_print () const @@ -376,5 +210,15 @@ Span_dynamic_req::do_print () const #endif } +void +Text_script_req::do_print () const +{ + DOUT << "text" << text_str_ + << ", style = " << style_str_; +} - +void +Articulation_req::do_print () const +{ + DOUT << articulation_str_; +} diff --git a/lily/p-score.cc b/lily/p-score.cc index 8a075e7a24..3cb525d7d1 100644 --- a/lily/p-score.cc +++ b/lily/p-score.cc @@ -210,12 +210,13 @@ Paper_score::process () *mlog << elem_p_arr_.size () + span_p_arr_.size () << " elements. "; *mlog << "\nLine ... "; + line_l_->break_processing (); for (int i=0; i < lines.size (); i++) { *mlog << '[' << flush; Line_of_score *line_l = lines[i]; - line_l->break_processing (); + line_l->post_processing (); *mlog << i << flush; line_l->output_all (); diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 29ae5715cd..308c07734d 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -227,9 +227,11 @@ Paper_outputter::output_version () } void -Paper_outputter::start_line () +Paper_outputter::start_line (Real height) { - SCM scm = gh_list (ly_symbol ("start-line"), SCM_UNDEFINED); + SCM scm = gh_list (ly_symbol ("start-line"), + gh_double2scm (height), + SCM_UNDEFINED); output_scheme (scm); } diff --git a/lily/parser.yy b/lily/parser.yy index 7e53b2ac00..2cac7c1fab 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -14,7 +14,6 @@ #include "notename-table.hh" #include "scalar.hh" #include "translation-property.hh" -#include "script-def.hh" #include "lookup.hh" #include "misc.hh" #include "my-lily-lexer.hh" @@ -30,7 +29,7 @@ #include "command-request.hh" #include "musical-request.hh" #include "my-lily-parser.hh" -#include "text-def.hh" + #include "translator-group.hh" #include "score.hh" #include "music-list.hh" @@ -96,7 +95,6 @@ Paper_def* current_paper = 0; Array<int> *intvec; Notename_table *chordmodifiertab; Duration *duration; - General_script_def * script; Identifier *id; Music *music; Music_list *music_list; @@ -117,7 +115,6 @@ Paper_def* current_paper = 0; Simultaneous_music *chord; String *string; Tempo_req *tempo; - Text_def * textdef; Translator* trans; char c; const char *consstr; @@ -205,9 +202,7 @@ yylex (YYSTYPE *s, void * v_l) %token <id> IDENTIFIER %token <id> NOTENAME_TABLE_IDENTIFIER %token <id> MUSIC_IDENTIFIER -%token <id> POST_REQUEST_IDENTIFIER -%token <id> SCRIPT_IDENTIFIER -%token <id> COMMAND_IDENTIFIER +%token <id> REQUEST_IDENTIFIER %token <id> REAL_IDENTIFIER %token <id> STRING_IDENTIFIER %token <id> TRANS_IDENTIFIER @@ -224,6 +219,7 @@ yylex (YYSTYPE *s, void * v_l) %type <outputdef> output_def %type <scope> mudela_header mudela_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 <i> sub_quotes sup_quotes %type <music> simple_element request_chord command_element Simple_music Composite_music %type <music> Alternative_music Repeated_music @@ -236,7 +232,7 @@ yylex (YYSTYPE *s, void * v_l) %type <duration> entered_notemode_duration explicit_duration %type <intvec> intastint_list int_list %type <reqvec> pre_requests post_requests - +%type <request> gen_text_def %type <pitch> explicit_musical_pitch steno_musical_pitch musical_pitch absolute_musical_pitch %type <pitch> steno_tonic_pitch %type <notereq> steno_notepitch @@ -254,20 +250,19 @@ yylex (YYSTYPE *s, void * v_l) %type <paper> paper_block paper_def_body %type <real> real_expression real real_with_dimension %type <request> abbrev_command_req -%type <request> post_request structured_post_request +%type <request> post_request %type <request> command_req verbose_command_req -%type <request> script_req dynamic_req extender_req +%type <request> extender_req %type <string> string %type <score> score_block score_body %type <intarr> shape_array -%type <script> script_definition script_body mudela_script gen_script_def -%type <textdef> text_def finger + %type <string> script_abbreviation %type <trans> translator_spec_block translator_spec_body %type <tempo> tempo_request %type <notenametab> notenames_body notenames_block chordmodifiers_block -%expect 7 + %left '-' '+' @@ -422,7 +417,7 @@ identifier_init: } | post_request { - $$ = new Request_identifier ($1, POST_REQUEST_IDENTIFIER); + $$ = new Request_identifier ($1, REQUEST_IDENTIFIER); } | explicit_duration { $$ = new Duration_identifier ($1, DURATION_IDENTIFIER); @@ -436,10 +431,6 @@ identifier_init: | int { $$ = new int_identifier (new int ($1), INT_IDENTIFIER); } - | script_definition { - $$ = new General_script_def_identifier ($1, SCRIPT_IDENTIFIER); - - } ; translator_spec_block: @@ -569,6 +560,7 @@ paper_block: } ; + optional_dot: /* empty */ | '.' @@ -716,11 +708,8 @@ Music: | Composite_music ; -Alternative_music: { - Music_list* m = new Music_list; - $$ = new Sequential_music (m); - } - | ALTERNATIVE Simultaneous_music { +Alternative_music: + ALTERNATIVE Simultaneous_music { $$ = $2; } | ALTERNATIVE Sequential_music { @@ -891,9 +880,6 @@ abbrev_command_req: | '|' { $$ = new Barcheck_req; } - | COMMAND_IDENTIFIER { - $$ = $1->access_content_Request (true); - } | '~' { $$ = new Tie_req; } @@ -987,33 +973,73 @@ post_requests: { $$ = new Link_array<Request>; } - | post_requests structured_post_request { + | post_requests post_request { $2->set_spot (THIS->here_input ()); $$->push ($2); } - | post_requests close_request { - $$->push ($2); - } ; -structured_post_request: - script_req - | post_request +post_request: + verbose_request + | request_with_dir + | close_request ; -post_request: - POST_REQUEST_IDENTIFIER { + +request_that_take_dir: + gen_text_def + | verbose_request + | script_abbreviation { + Identifier*i = THIS->lexer_p_->lookup_identifier ("dash-" + *$1); + Articulation_req *a = new Articulation_req; + a->articulation_str_ = *i->access_content_String (false); + delete $1; + $$ = a; + } + ; + +request_with_dir: + script_dir request_that_take_dir { + if (G_script_req * gs = dynamic_cast<G_script_req*> ($2)) + gs->dir_ = $1; + else if ($1) + $2->warning ("Can't specify direction for this request"); + $$ = $2; + } + ; + +verbose_request: + REQUEST_IDENTIFIER { $$ = (Request*)$1->access_content_Request (true); + $$->set_spot (THIS->here_input ()); } - | dynamic_req { - $$ = $1; + | ABSDYNAMIC '{' STRING '}' { + Absolute_dynamic_req *ad_p = new Absolute_dynamic_req; + ad_p ->loudness_str_ = *$3; + ad_p->set_spot (THIS->here_input ()); + delete $3; + $$ =ad_p; + } + | SPANDYNAMIC '{' int int '}' { + Span_dynamic_req * sp_p = new Span_dynamic_req; + sp_p-> dynamic_dir_ = Direction($3); + sp_p->spantype_ = Direction($4); + sp_p->set_spot (THIS->here_input ()); + $$ = sp_p; } | abbrev_type { Abbreviation_req* a = new Abbreviation_req; + a->set_spot (THIS->here_input ()); a->type_i_ = $1; $$ = a; } - + | SCRIPT STRING { + Articulation_req * a = new Articulation_req; + a->articulation_str_ = *$2; + a->set_spot (THIS->here_input ()); + $$ = a; + delete $2; + } ; optional_modality: @@ -1126,22 +1152,6 @@ extender_req: } ; -dynamic_req: - ABSDYNAMIC '{' STRING '}' { - Absolute_dynamic_req *ad_p = new Absolute_dynamic_req; - ad_p ->loudness_str_ = *$3; - delete $3; - $$ =ad_p; - } - | SPANDYNAMIC '{' int int '}' { - Span_dynamic_req * sp_p = new Span_dynamic_req; - sp_p-> dynamic_dir_ = Direction($3); - sp_p->spantype_ = Direction($4); - $$ = sp_p; - } - ; - - close_request: close_request_parens { $$ = $1; @@ -1184,60 +1194,16 @@ open_request_parens: } ; - - -script_definition: - SCRIPT '{' script_body '}' { $$ = $3; } - ; - -script_body: - STRING int int int int int { - Script_def *s = new Script_def; - s->set_from_input (*$1,$2, $3,$4,$5, $6); - $$ = s; - delete $1; - } - ; - -script_req: - script_dir gen_script_def { - Musical_script_req *m = new Musical_script_req; - $$ = m; - m->scriptdef_p_ = $2; - m->set_spot (THIS->here_input ()); - if (!m->dir_) - m->dir_ = (Direction)$1; - } - ; - -gen_script_def: - text_def { - $$ = $1; - ((Text_def*) $$)->align_dir_ = LEFT; /* UGH */ - } - | mudela_script { - $$ = $1; - $$-> set_spot (THIS->here_input ()); - } - | finger { - $$ = $1; - ((Text_def*)$$)->align_dir_ = RIGHT; /* UGH */ - } - ; - -text_def: +gen_text_def: string { - Text_def *t = new Text_def; + Text_script_req *t = new Text_script_req; $$ = t; t->text_str_ = *$1; delete $1; $$->set_spot (THIS->here_input ()); } - ; - -finger: - DIGIT { - Text_def* t = new Text_def; + | DIGIT { + Text_script_req* t = new Text_script_req; $$ = t; t->text_str_ = to_str ($1); t->style_str_ = "finger"; @@ -1247,40 +1213,25 @@ finger: script_abbreviation: '^' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-hat")->access_content_String (true) - + $$ = new String ("hat"); } | '+' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-plus")->access_content_String (true) - } - | '-' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-dash")->access_content_String (true) - } + $$ = new String ("plus"); + } + | '-' { + $$ = new String ("dash"); + } | '|' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-bar")->access_content_String (true) - } + $$ = new String ("bar"); + } | '>' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-larger")->access_content_String (true) - } + $$ = new String ("larger"); + } | '.' { - $$ = THIS->lexer_p_ - ->lookup_identifier ("dash-dot")->access_content_String (true); + $$ = new String ("dot"); } ; -mudela_script: - SCRIPT_IDENTIFIER { $$ = $1->access_content_General_script_def (true); } - | script_definition { $$ = $1; } - | script_abbreviation { - $$ = THIS->lexer_p_->lookup_identifier (*$1)->access_content_General_script_def (true); - delete $1; - } - ; script_dir: '_' { $$ = DOWN; } @@ -1421,6 +1372,7 @@ notemode_chord: $$ = THIS->get_chord (*$1, $3, $4, $5, *$2); }; + chord_additions: { $$ = new Array<Musical_pitch>; @@ -1440,6 +1392,21 @@ chord_notes: } ; +chord_subtractions: + { + $$ = new Array<Musical_pitch>; + } + | '^' chord_notes { + $$ = $2; + } + ; + + +/* + forevery : X : optional_X sucks. Devise a solution. +*/ + + chord_addsub: chord_note optional_dot | CHORDMODIFIER_PITCH optional_dot @@ -1484,15 +1451,6 @@ chord_note: } ; -chord_subtractions: - { - $$ = new Array<Musical_pitch>; - } - | '^' chord_notes { - $$ = $2; - } - ; - /* UTILITIES */ diff --git a/lily/repeat-engraver.cc b/lily/repeat-engraver.cc index 174737d34f..8a3cbdf597 100644 --- a/lily/repeat-engraver.cc +++ b/lily/repeat-engraver.cc @@ -144,13 +144,13 @@ Repeat_engraver::do_process_requests () { Volta_spanner* v = new Volta_spanner; Scalar prop = get_property ("voltaVisibility", 0); - v->visible_b_ = prop.to_bool (); + if (!prop.to_bool ()) + v->set_elt_property (transparent_scm_sym, SCM_BOOL_T); prop = get_property ("voltaSpannerDuration", 0); if ((i == alternative_music_arr_.size () - 1) || prop.length_i ()) v->last_b_ = true; - Text_def* t = new Text_def; - t->text_str_ = alternative_str_arr_[i]; - v->number_p_.set_p (t); + + v->number_str_ = alternative_str_arr_[i]; volta_p_arr_.push (v); announce_element (Score_element_info (v, alternative_music_arr_[i])); } diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index ec90bcfdb4..152352ac82 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -72,7 +72,7 @@ Rhythmic_column_engraver::acknowledge_element (Score_element_info i) return; if (Script *s=dynamic_cast<Script *> (item)) { - if (i.req_l_ && dynamic_cast <Musical_req *> (i.req_l_)) + if (i.req_l_) { script_l_arr_.push (s); } diff --git a/lily/score-element.cc b/lily/score-element.cc index 986ede9eab..992d2eee1d 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -134,17 +134,14 @@ Score_element::do_height() const return r; } - -/* - STANDARD METHS - */ void Score_element::print() const { #ifndef NPRINT DOUT << classname(this) << "{\n"; DOUT << "dependencies: " << dependency_size(); - + if (original_l_) + DOUT << "Copy "; Graphical_element::do_print (); do_print(); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 12f762e36a..5aef404467 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -157,7 +157,8 @@ Score_engraver::typeset_all() musical_column_l_->add_element(item_p); } } - scoreline_l_->add_element (elem_p); + if (!elem_p->dim_cache_[Y_AXIS].parent_l_) + scoreline_l_->add_element (elem_p); } elem_p_arr_.clear(); } @@ -185,7 +186,7 @@ Score_engraver::set_columns (Score_column *new_command_l, if (command_column_l_ && command_column_l_->linked_b()) { pscore_p_->add_column (command_column_l_); - scoreline_l_->add_element (command_column_l_); + scoreline_l_->add_column (command_column_l_); } else { @@ -200,7 +201,7 @@ Score_engraver::set_columns (Score_column *new_command_l, if (musical_column_l_ && musical_column_l_->linked_b()) { pscore_p_->add_column (musical_column_l_); - scoreline_l_->add_element (musical_column_l_); + scoreline_l_->add_column (musical_column_l_); } else { diff --git a/lily/script-column.cc b/lily/script-column.cc index 16eccc8a41..bfbe2f7be5 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -13,9 +13,6 @@ #include "stem.hh" #include "general-script-def.hh" - - - void Script_column::add_script (Script*s_l) { @@ -119,3 +116,4 @@ Script_column::do_substitute_element_pointer (Score_element*o,Score_element*n) dynamic_cast <Item *> (n)); } } + diff --git a/lily/script-def.cc b/lily/script-def.cc deleted file mode 100644 index b2ea20deb9..0000000000 --- a/lily/script-def.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* - script-def.cc -- implement - - source file of the GNU LilyPond music typesetter - - (c) 1996, 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> -*/ - -#include "debug.hh" -#include "script-def.hh" - -#include "paper-def.hh" -#include "lookup.hh" - -Script_def::Script_def() -{ - inside_staff_b_ = false; - symidx_str_ = "unknown" ; - rel_stem_dir_ =CENTER; - staff_dir_ = DOWN; - invertsym_b_ = 0; - priority_i_ =0; -} - -void -Script_def::set_from_input (String idx, bool follow, int stem, int staff ,bool invert, int priority_i) -{ - inside_staff_b_ = follow; - symidx_str_ = idx ; - rel_stem_dir_ =Direction(stem); - staff_dir_ = Direction(staff); - invertsym_b_ = invert; - priority_i_ =priority_i; -} - - -void -Script_def::do_print() const -{ -#ifndef NPRINT - DOUT << "Script_def{ idx: " << symidx_str_ - << " direction, stem: " << rel_stem_dir_ << " staff : " << staff_dir_ << "}\n"; -#endif -} - -bool -Script_def::do_equal_b (General_script_def const *g) const -{ - Script_def const * c = dynamic_cast<Script_def const*> (g); - return c&& (symidx_str_ == c->symidx_str_ && - rel_stem_dir_ == c->rel_stem_dir_&& - staff_dir_ == c->staff_dir_&& - invertsym_b_ == c->invertsym_b_); -} - -Direction -Script_def::staff_dir() const -{ - return staff_dir_; -} - -Direction -Script_def::rel_stem_dir() const -{ - return rel_stem_dir_; -} - -bool -Script_def::inside_b() const -{ - return inside_staff_b_; -} - -Molecule -Script_def::get_molecule (Paper_def *p , Direction d) const -{ - String preidx_str =""; - if (invertsym_b_) - preidx_str = (d < 0)? "d" : "u"; - - return p->lookup_l(0)->script (preidx_str + symidx_str_); -} - - - - -int -Script_def::priority_i() const -{ - return priority_i_; -} - - - diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc deleted file mode 100644 index 247eea7516..0000000000 --- a/lily/script-engraver.cc +++ /dev/null @@ -1,97 +0,0 @@ -/* - script-engraver.cc -- implement Script_engraver - - (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> -*/ - -#include "script-engraver.hh" -#include "script.hh" -#include "musical-request.hh" -#include "stem.hh" -#include "staff-symbol.hh" -#include "general-script-def.hh" -#include "text-def.hh" - - -Script_engraver::Script_engraver() -{ - do_post_move_processing(); -} - -bool -Script_engraver::do_try_music (Music *r_l) -{ - if (Musical_script_req *mr = dynamic_cast <Musical_script_req *> (r_l)) - { - for (int i=0; i < script_req_l_arr_.size(); i++) - { - if (script_req_l_arr_[i]->equal_b (mr)) - return true; - } - script_req_l_arr_.push (mr); - return true; - } - return false; -} - -void -Script_engraver::do_process_requests() -{ - if (script_p_arr_.size ()) - return ; - - for (int i=0; i < script_req_l_arr_.size(); i++) - { - Script_req* l=script_req_l_arr_[i]; - Script *p =new Script; - p->dir_ = l->dir_; - p->specs_p_ = l->scriptdef_p_->clone (); - script_p_arr_.push (p); - announce_element (Score_element_info (p, l)); - } -} - -void -Script_engraver::do_pre_move_processing() -{ - for (int i=0; i < script_p_arr_.size(); i++) - { - Script*script_p = script_p_arr_[i]; - - /* - UGH. inside_b () for scripts broken for now. - - if (!script_p->specs_p_->inside_b()) - script_p->add_support (s_l); - */ - - if (Text_def*td_l = dynamic_cast<Text_def *> (script_p->specs_p_)) // UGH - { - if (!td_l->style_str_.length_i ()) - { - Scalar style = get_property ("textstyle", 0); - if (style.to_bool ()) - td_l->style_str_= style; - } - - // urg, what if this is already set? in-band signaling... - Scalar alignment = get_property ("textalignment", 0); - if (alignment.isnum_b()) - { - td_l->align_dir_= (Direction)(int)alignment; - } - } - typeset_element (script_p); - } - script_p_arr_.clear(); -} - -void -Script_engraver::do_post_move_processing() -{ - script_req_l_arr_.clear(); -} - - - -ADD_THIS_TRANSLATOR(Script_engraver); diff --git a/lily/script.cc b/lily/script.cc index 576a9fdb9b..85f3c28e05 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -5,7 +5,7 @@ (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> */ -#include "script-def.hh" +#include "general-script-def.hh" #include "musical-request.hh" #include "paper-def.hh" #include "script.hh" diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 4d4fb48d0a..f81a08a45d 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -14,10 +14,9 @@ bool Slur_engraver::do_try_music (Music *req_l) { - Musical_req *mus_l = dynamic_cast <Musical_req *> (req_l); - if (Slur_req *sl = dynamic_cast <Slur_req *> (mus_l)) + if (Slur_req *sl = dynamic_cast <Slur_req *> (req_l)) { - new_slur_req_l_arr_.push (dynamic_cast <Slur_req *> (mus_l)); + new_slur_req_l_arr_.push (sl); return true; } return false; diff --git a/lily/spanner.cc b/lily/spanner.cc index 6428a80667..d5ac3fff5f 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -21,12 +21,9 @@ Spanner::do_print() const #ifndef NPRINT DOUT << "Between " << classname (spanned_drul_[LEFT]) << " and " << classname (spanned_drul_[RIGHT]) << '\n'; - /* if (broken_into_l_arr_.size()) - { - DOUT << "with broken pieces:\n"; - for (int i=0; i < broken_into_l_arr_.size (); i++) - broken_into_l_arr_[i]->print (); - }*/ + + if (broken_b ()) + DOUT << "Broken in " << to_str (broken_info_.size ()) << " pieces"; #endif } @@ -178,12 +175,6 @@ Spanner::find_broken_piece (Line_of_score*l) const info.broken_spanner_l_ = span_p; - /* if (Axis_group_spanner *ags - = dynamic_cast<Axis_group_spanner*> (span_p)) - { - do something - } - */ span_p->handle_broken_dependencies(); } diff --git a/lily/super-element.cc b/lily/super-element.cc index c5ee89e9fb..c088a936d6 100644 --- a/lily/super-element.cc +++ b/lily/super-element.cc @@ -13,11 +13,6 @@ #include "paper-outputter.hh" -Super_element::Super_element() -{ -} - - /** for administration of what was done already */ @@ -74,9 +69,7 @@ Super_element::post_processing () void Super_element::output_all () { - pscore_l_->outputter_l_->start_line (); calculate_dependencies (BREWING, BREWED, &Score_element::output_processing); - pscore_l_->outputter_l_->stop_line (); } diff --git a/lily/text-def.cc b/lily/text-def.cc deleted file mode 100644 index b25937290e..0000000000 --- a/lily/text-def.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* - text-def.cc -- implement Text_def - - source file of the GNU LilyPond music typesetter - - (c) 1996, 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> -*/ - -#include <ctype.h> -#include "debug.hh" -#include "lookup.hh" -#include "paper-def.hh" -#include "molecule.hh" -#include "text-def.hh" - -Direction -Text_def::staff_dir () const -{ - if (style_str_ == "finger") - return UP; - return DOWN; -} - - -void -Text_def::do_print() const -{ -#ifndef NPRINT - DOUT << "align " << align_dir_ << " `" << text_str_ << "'"; -#endif -} - -Text_def::Text_def() -{ - align_dir_ = RIGHT; - style_str_ = "roman"; -} - -bool -Text_def::do_equal_b (General_script_def const *gdef) const -{ - Text_def const *def= dynamic_cast<Text_def const*>(gdef); - return def&& align_dir_ == def->align_dir_ && text_str_ == def->text_str_ - && style_str_ == def->style_str_; -} - -Molecule -Text_def::get_molecule (Paper_def *p, Direction) const -{ - Molecule a= p->lookup_l(0)->text (style_str_, text_str_); - - a.translate_axis (-(align_dir_ + 1)* a.dim_[X_AXIS].center (), X_AXIS); - - return a; -} - -void -Text_def::print() const -{ - DOUT << "Text `" << text_str_ << "\', style " << - style_str_ << "align " << align_dir_ << '\n'; -} - - - diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index 16d5b76027..e22cb06dea 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -10,14 +10,14 @@ #include "engraver.hh" #include "g-staff-side.hh" #include "g-text-item.hh" -#include "text-def.hh" +#include "musical-request.hh" #include "note-head.hh" #include "stem.hh" #include "staff-symbol.hh" class Text_engraver : public Engraver { - Link_array<Script_req> reqs_; + Link_array<Text_script_req> reqs_; Link_array<G_staff_side_item> positionings_; Link_array<G_text_item> texts_; public: @@ -39,11 +39,8 @@ Text_engraver::Text_engraver () bool Text_engraver::do_try_music (Music *m) { - if (Script_req *r = dynamic_cast<Script_req*> (m)) + if (Text_script_req *r = dynamic_cast<Text_script_req*> (m)) { - Text_def * t = dynamic_cast<Text_def*> (r->scriptdef_p_); - if (!t) - return false; reqs_.push (r); return true; } @@ -75,19 +72,25 @@ Text_engraver::do_process_requests () { for (int i=0; i < reqs_.size (); i++) { - Script_req * r = reqs_[i]; - Text_def * t= dynamic_cast<Text_def*> (r->scriptdef_p_); + Text_script_req * r = reqs_[i]; G_text_item *text = new G_text_item; G_staff_side_item *ss = new G_staff_side_item; ss->set_victim (text); ss->dir_ = r->dir_; - Scalar p (get_property ("textstyle", 0)); // textStyle? - if (p.length_i ()) - text->style_str_ = p; - text->text_str_ = t->text_str_; + text->text_str_ = r->text_str_; + + if (r->style_str_.empty_b ()) + { + Scalar p (get_property ("textStyle", 0)); + if (p.length_i ()) + text->style_str_ = p; + } + else + text->style_str_ = r->style_str_; + Scalar padding = get_property ("textScriptPadding", 0); if (padding.length_i() && padding.isnum_b ()) { diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc deleted file mode 100644 index 18e9105614..0000000000 --- a/lily/text-spanner.cc +++ /dev/null @@ -1,96 +0,0 @@ -/* - text-spanner.cc -- implement Text_spanner - - source file of the GNU LilyPond music typesetter - - (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl> -*/ - -#include "molecule.hh" -#include "box.hh" -#include "text-spanner.hh" -#include "text-def.hh" -#include "debug.hh" -#include "paper-def.hh" - - - -void -Text_spanner::set_support (Directional_spanner*d) -{ - if (support_span_l_) - remove_dependency (support_span_l_); - - support_span_l_ =d; - add_dependency (d); -} - -void -Text_spanner::do_add_processing () -{ - set_bounds (LEFT, support_span_l_->spanned_drul_[LEFT]); - set_bounds (RIGHT, support_span_l_->spanned_drul_[RIGHT]); -} - -Text_spanner::Text_spanner() -{ - spec_p_ = 0; - support_span_l_ = 0; -} - -void -Text_spanner::do_print() const -{ - spec_p_->print(); -} - -void -Text_spanner::do_post_processing() -{ - text_off_ = support_span_l_->center() + - Offset (0,support_span_l_->dir_ * paper_l ()->get_realvar(interline_scm_sym)*2.0); // todo -} - -Molecule* -Text_spanner::do_brew_molecule_p() const -{ - Molecule tsym (spec_p_->get_molecule (paper_l (),CENTER)); - tsym.translate (text_off_); - - Molecule*output = new Molecule; - output->add_molecule (tsym); - return output; -} - -void -Text_spanner::do_pre_processing() -{ - spanned_drul_ = support_span_l_->spanned_drul_; -} - -Interval -Text_spanner::height() const -{ - return do_brew_molecule_p()->extent ().y (); -} - -void -Text_spanner::do_substitute_element_pointer (Score_element* o, Score_element*n) -{ - if (support_span_l_ == o) - support_span_l_ = (Directional_spanner*) (n?dynamic_cast <Spanner *> (n):0); -} - - -Text_spanner::~Text_spanner() -{ - delete spec_p_; -} - -Text_spanner::Text_spanner (Text_spanner const&s) - : Spanner (s) -{ - support_span_l_ = s.support_span_l_; - spec_p_ = s.spec_p_? s.spec_p_->clone() : 0; - text_off_ = s.text_off_; -} diff --git a/lily/time-signature-performer.cc b/lily/time-signature-performer.cc index 00a6fa28a7..fdd75bea77 100644 --- a/lily/time-signature-performer.cc +++ b/lily/time-signature-performer.cc @@ -45,11 +45,12 @@ Time_signature_performer::do_try_music (Music* req_l) if (time_signature_req_l_) return false; - if (dynamic_cast <Command_req *> (req_l)) - time_signature_req_l_ = dynamic_cast <Time_signature_change_req *> (req_l); - - if (time_signature_req_l_) - return true; + if (Time_signature_change_req *t = + dynamic_cast <Time_signature_change_req *> (req_l)) + { + time_signature_req_l_ = t; + return true; + } return false; } diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 73d36eec20..ebbbad4a3a 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -12,7 +12,7 @@ #include "tuplet-spanner.hh" #include "note-column.hh" #include "compressed-music.hh" -#include "text-def.hh" + #include "beam.hh" #include "music-list.hh" @@ -40,10 +40,7 @@ Tuplet_engraver::do_process_requests () { Tuplet_spanner* glep = new Tuplet_spanner; started_span_p_arr_.push (glep); - - Text_def *t = new Text_def; - t->text_str_ = to_str (compressed_music_arr_[i]->den_i_); - glep->tdef_p_.set_p (t); + glep->number_str_ = to_str (compressed_music_arr_[i]->den_i_); announce_element (Score_element_info (glep, compressed_music_arr_ [i])); } } diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index f9fe680112..1430141107 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -18,7 +18,7 @@ #include "paper-def.hh" #include "tuplet-spanner.hh" #include "stem.hh" -#include "text-def.hh" + #include "note-column.hh" Tuplet_spanner::Tuplet_spanner () @@ -26,10 +26,6 @@ Tuplet_spanner::Tuplet_spanner () beam_l_ =0; bracket_visibility_b_ = true; num_visibility_b_ = true; - - tdef_p_.set_p(new Text_def); - tdef_p_->align_dir_ = CENTER; - tdef_p_->style_str_ = "italic"; } Molecule* @@ -39,7 +35,8 @@ Tuplet_spanner::do_brew_molecule_p () const if (column_arr_.size ()){ Real ncw = column_arr_.top ()->extent (X_AXIS).length (); - Molecule num (tdef_p_->get_molecule (paper_l (), CENTER)); + Molecule num (lookup_l ()->text ("italic", + number_str_)); if (beam_l_ && !bracket_visibility_b_) { diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index 77afc20378..431d2aed37 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -17,17 +17,12 @@ #include "paper-def.hh" #include "volta-spanner.hh" #include "stem.hh" -#include "text-def.hh" -#include "pointer.tcc" -template class P<Text_def>; // UGH +#include "pointer.tcc" Volta_spanner::Volta_spanner () { last_b_ = false; - visible_b_ = true; - number_p_.set_p (new Text_def); - number_p_->align_dir_ = LEFT; } Molecule* @@ -38,8 +33,6 @@ Volta_spanner::do_brew_molecule_p () const if (!column_arr_.size ()) return mol_p; - if (!visible_b_) - return mol_p; Real internote_f = paper_l ()->get_realvar (interline_scm_sym)/2.0; @@ -47,7 +40,9 @@ Volta_spanner::do_brew_molecule_p () const Real w = extent (X_AXIS).length () - dx; Molecule volta (lookup_l ()->volta (w, last_b_)); Real h = volta.dim_.y ().length (); - Molecule num (number_p_->get_molecule (paper_l (), LEFT)); + + + Molecule num (lookup_l ()->text ("volta", number_str_)); Real dy = column_arr_.top ()->extent (Y_AXIS) [UP] > column_arr_[0]->extent (Y_AXIS) [UP]; dy += 2 * h; @@ -59,10 +54,7 @@ Volta_spanner::do_brew_molecule_p () const dy = dy >? note_column_arr_[i]->extent (Y_AXIS).max (); dy -= h; - Text_def two_text; - two_text.text_str_ = "2"; - two_text.style_str_ = number_p_->style_str_; - Molecule two (two_text.get_molecule (paper_l (), LEFT)); + Molecule two (lookup_l ()->text ("number", "2")); Real gap = two.dim_.x ().length () / 2; Offset off (num.dim_.x ().length () + gap, h / internote_f - gap); @@ -81,9 +73,6 @@ Volta_spanner::do_add_processing () set_bounds (LEFT, column_arr_[0]); set_bounds (RIGHT, column_arr_.top ()); } - - // number_p_->style_str_ = "number-1"; - number_p_->style_str_ = "volta"; } Interval diff --git a/ly/engraver.ly b/ly/engraver.ly index 8f11a285f6..bd34b4587d 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -109,7 +109,8 @@ VoiceContext = \translator { % ugh. Order matters here. \consists "Text_engraver"; - \consists "Script_engraver"; +% \consists "Script_engraver"; + \consists "G_script_engraver"; \consists "Rhythmic_column_engraver"; \consists "Font_size_engraver"; \consists "Slur_engraver"; diff --git a/ly/script.ly b/ly/script.ly index 5a80b52e9e..3ff6986bd8 100644 --- a/ly/script.ly +++ b/ly/script.ly @@ -1,68 +1,5 @@ -% name = \script { -% indexstring follow_into_staff same_dir_as_stem above_below_staff symbol_can_beinverted priority } -% - -thumb = \script { "thumb" 0 0 1 0 0 } -accent = \script { "sforzato" 0 -1 0 0 0 } -marcato = \script { "marcato" 0 -1 0 1 0 } -staccatissimo = \script { "staccatissimo" 0 -1 0 1 0 } -portato= \script { "portato" 0 -1 0 1 0 } -fermata = \script { "fermata" 0 1 0 1 0 } -stopped = \script { "stopped" 0 0 1 0 0 } -staccato = \script { "staccato" 1 -1 0 0 0 } -tenuto = \script {"tenuto" 1 -1 0 0 0 } -upbow = \script { "upbow" 0 0 1 0 0 } -downbow = \script { "downbow" 0 0 1 0 0 } -lheel = \script { "upedalheel" 0 0 -1 0 0 } -rheel = \script { "dpedalheel" 0 0 1 0 0 } -ltoe = \script { "upedaltoe" 0 0 -1 0 0 } -rtoe = \script { "dpedaltoe" 0 0 1 0 0 } -turn = \script { "turn" 0 0 1 0 0 } -open = \script { "open" 0 0 1 0 0 } -flageolet = \script { "flageolet" 0 0 1 0 0 } -reverseturn = \script { "reverseturn" 0 0 1 0 0 } - - -% could we do without this bloat? -% -lbheel = \script { "bheel" 0 0 -1 0 0 } -rbheel = \script { "bheel" 0 0 1 0 0 } -lbtoe = \script { "btoe" 0 0 -1 0 0 } -rbtoe = \script { "btoe" 0 0 1 0 0 } -lfheel = \script { "fheel" 0 0 -1 0 0 } -rfheel = \script { "fheel" 0 0 1 0 0 } -lftoe = \script { "ftoe" 0 0 -1 0 0 } -rftoe = \script { "ftoe" 0 0 1 0 0 } - -% -% left toe: right heel: -% -% u - -% - u -% ---|-----|-- --|x----|x-- -% ---|-----|-- --|-----|--- -% --x|----x|-- --|-----|--- -% ^ - -% - ^ -% back front back front -% -% -% heu, me thought for a moment that order in table_xxx.ly was -% being translated into priority... -back = \script { "back" 0 -1 -1 0 0 } -front = \script { "front" 0 -1 1 0 0 } - -trill =\script { "trill" 0 0 1 0 - 2000 % be above text. -} - -prall =\script { "prall" 0 0 1 0 0 } -mordent =\script { "mordent" 0 0 1 0 0 } -prallprall =\script { "prallprall" 0 0 1 0 0 } -prallmordent =\script { "prallmordent" 0 0 1 0 0 } -upprall =\script { "upprall" 0 0 1 0 0 } -downprall =\script { "downprall" 0 0 1 0 0 } +\scmfile "script.scm"; "dash-hat" = "marcato" "dash-plus" = "stopped" @@ -70,3 +7,31 @@ downprall =\script { "downprall" 0 0 1 0 0 } "dash-bar" = "staccatissimo" "dash-larger" = "accent" "dash-dot" = "staccato" + + +thumb = \script "thumb" +accent = \script "accent" +marcato = \script "marcato" +staccatissimo = \script "staccatissimo" +portato = \script "portato" +fermata = \script "fermata" +stopped = \script "stopped" +staccato = \script "staccato" +tenuto = \script "tenuto" +upbow = \script "upbow" +downbow = \script "downbow" +lheel = \script "lheel" +rheel = \script "rheel" +ltoe = \script "ltoe" +rtoe = \script "rtoe" +turn = \script "turn" +open = \script "open" +flageolet = \script "flageolet" +reverseturn = \script "reverseturn" +trill = \script "trill" +prall = \script "prall" +mordent = \script "mordent" +prallprall = \script "prallprall" +prallmordent = \script "prallmordent" +upprall = \script "upprall" +downprall = \script "downprall" diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf index 922e0fa03a..018069ed0c 100644 --- a/mf/feta-bolletjes.mf +++ b/mf/feta-bolletjes.mf @@ -244,7 +244,7 @@ fet_beginchar("Whole diamondhead", "0diamond", "wholediamondhead") err_y_a:=0; % no slant tilt:=0; superness:=0.495; - ai_a:=0.400; + ai_a:=0.350; % ai_bi:=1.23; ai_bi:=1.30; % jcn % err_y_ai:=0.0938; diff --git a/scm/lily.scm b/scm/lily.scm index a07a1fcd7e..9c45773df0 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -90,6 +90,10 @@ ("volta" . "feta-nummer")) ) +(define script-alist '()) +(define (articulation-to-scriptdef a) + (assoc a script-alist) + ) ;; Map style names to TeX font names. Return false if ;; no font name found. @@ -127,6 +131,8 @@ (set! font-cmd (cached-fontname font-count)) (set! font-alist (acons font-name font-cmd font-alist)) (set! font-count (+ 1 font-count)) + (if (equal? font-name "") + (error "Empty fontname -- SELECT-FONT")) (string-append "\\font" font-cmd "=" font-name font-cmd)) (cdr font-cmd))) "" ;no switch needed @@ -231,11 +237,13 @@ (embedded-ps ((ps-scm 'bezier-sandwich) l))) - (define (start-line) + (define (start-line ht) (begin (clear-fontcache) - "\\hbox{%\n") + (string-append"\\vbox to " (number->dim ht) "{\\hbox{%\n")) ) + (define (stop-line) + "}\\vss}\\interscoreline") (define (filledbox breapth width depth height) (string-append @@ -244,8 +252,6 @@ "depth " (number->dim depth) "height " (number->dim height) " ")) - (define (stop-line) - "}\\interscoreline") (define (text s) @@ -522,9 +528,8 @@ (else (error "unknown tag -- PS-SCM " action-name)) ) ) - -; + ; ; Russ McManus, <mcmanus@IDT.NET> ; ; I use the following, which should definitely be provided somewhere diff --git a/scm/script.scm b/scm/script.scm new file mode 100644 index 0000000000..17483b954f --- /dev/null +++ b/scm/script.scm @@ -0,0 +1,38 @@ +;; (name . '((downindexstring upindexstring) +;; follow-into-staff :: bool +;; dir-relative-to-stem :: int +;; force-dir :: int +;; priority :: int + +;;TODO? extra padding :: Real (given in staff spaces) + +(set! script-alist + (append + '(("thumb" . (("thumb" . "thumb") #f 0 1 0)) + ("accent" . (("sforzato" . "sforzato") #f -1 0 0)) + ("marcato" . (("dmarcato" . "umarcato") #f -1 0 0)) + ("staccatissimo" . (("dstaccatissimo" . "ustaccatissimo") #f -1 0 0 0)) + ("portato" . (("dportato" . "uportato") #f -1 0 0)) + ("fermata" . (("dfermata" . "ufermata") #f 1 0 0)) + ("stopped" . (("stopped" . "stopped") #f 0 1 0)) + ("staccato" . (("staccato" . "staccato") #t -1 0 0)) + ("tenuto" . (("tenuto" "tenuto") 1 -1 0 0)) + ("upbow" . (("upbow" . "upbow") #f 0 1 0)) + ("downbow" . (("downbow" . "downbow") #f 0 1 0)) + ("lheel" . (("upedalheel" . "upedalheel") #f 0 -1 0)) + ("rheel" . (("dpedalheel" . "dpedalheel") #f 0 1 0)) + ("ltoe" . (("upedaltoe" . "upedaltoe") #f 0 -1 0)) + ("rtoe" . (("dpedaltoe" . "dpedaltoe") #f 0 1 0)) + ("turn" . (("turn" . "turn") #f 0 1 0)) + ("open" . (("open" . "open") #f 0 1 0)) + ("flageolet" . (("flageolet" . "flageolet") 0 0 1 0)) + ("reverseturn" . (("reverseturn" . "reverseturn") 0 0 1 0)) + ("trill" . (("trill" . "trill") #f 0 1 2000)) + ("prall" . (("prall" . "prall") #f 0 1 0)) + ("mordent" . (("mordent" . "mordent") #f 0 1 0)) + ("prallprall" . (("prallprall" . "prallprall") #f 0 1 0)) + ("prallmordent" . (("prallmordent" . "prallmordent") #f 0 1 0)) + ("upprall" . (("upprall" . "upprall") #f 0 1 0)) + ("downprall" . (("downprall" . "downprall") #f 0 1 0))) + script-alist) + ) |