From b43244dd4eeca1a96e0cdb258231ef0b6cca1a8f Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 1 Feb 1999 10:37:00 +0100 Subject: [PATCH] release: 1.1.26 --- NEWS | 20 +- TODO | 189 +++++++++++++++--- VERSION | 4 +- buildscripts/set-lily.sh | 2 + input/test/auto-staff-switch.ly | 32 +++ input/test/extra-staff.ly | 44 ++++ lily/bar-script-engraver.cc | 2 + lily/clef-engraver.cc | 99 ++++----- lily/clef-item.cc | 45 +++-- lily/g-staff-side.cc | 30 +-- lily/include/clef-engraver.hh | 5 +- lily/include/interpretation-context-handle.hh | 30 +++ lily/include/music-iterator.hh | 5 +- lily/include/translator-group.hh | 9 +- lily/include/translator.hh | 5 +- lily/interpretation-context-handle.cc | 73 +++++++ lily/lexer.ll | 2 +- lily/lookup.cc | 11 +- lily/music-iterator.cc | 29 +-- lily/note.cc | 3 + lily/parser.yy | 4 +- lily/scores.cc | 1 + lily/staff-margin-engraver.cc | 6 +- lily/staff-switching-translator.cc | 67 +++++++ lily/stem-engraver.cc | 7 +- lily/text-item.cc | 91 --------- lily/translator-group.cc | 31 +++ lily/translator.cc | 37 +--- ly/declarations.ly | 3 + make/lilypond.spec.in | 6 +- make/out/lelievijver.lsm | 8 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 10 +- make/toplevel.make.in | 5 + mf/TODO | 1 + mf/feta-generic.mf | 2 +- mf/feta-timesig.mf | 25 ++- mudela-mode.el | 7 +- mutopia/Coriolan/GNUmakefile | 3 +- .../J.S.Bach/Solo-Cello-Suites/GNUmakefile | 2 +- tex/dyndefs.tex | 10 + 41 files changed, 654 insertions(+), 319 deletions(-) create mode 100644 input/test/auto-staff-switch.ly create mode 100644 input/test/extra-staff.ly create mode 100644 lily/include/interpretation-context-handle.hh create mode 100644 lily/interpretation-context-handle.cc create mode 100644 lily/staff-switching-translator.cc delete mode 100644 lily/text-item.cc diff --git a/NEWS b/NEWS index a15cb17314..cb1223de2c 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,28 @@ +25.jcn2 + - bf: staffside axis init + - bf: staffmargin stuff. + - Timesig C fixes + + +pl 25.uu2 + - junked Scarlatti clef + - fixed clef^8 + - Interpretation_context_handle is interface to interpretation context + - Staff_switching_translator: automatic staff switching for Piano staffs. + pl25.jcn1 - volta-spanner: junked dot_p_; not so handy after all: kerning?? - - feta-nummer: added : ,-.14s4s + - feta-nummer: added : ,-. - volta/tuplet thickness - bf: scs-paper - bf: ".|", and bar-thicknesses +pl 25.uu1 + - bf: default duration is 4 + +********** +pl 25 + pl 23.ms2 - property noteheadStyle - first attempt to make harmonics : see input/test/harmonics.fly diff --git a/TODO b/TODO index 6fa02b569f..05425d7e6e 100644 --- a/TODO +++ b/TODO @@ -7,6 +7,38 @@ done, or is an idea that I want to think about Most of the items are marked in the code as well, with full explanation. grep for TODO and ugh/ugr/urg +*In a piece such as the Zipoli piece in mutopia/... there is a stray +`8' over every bar line when processed by LilyPond 1.1.25. + +TODO before 1.2 + + * junk Text_def, use G_text_item in stead. + + * junk Script_def + + * fix partial measures in meaningful way. + + * fix AFM for BlueSky AFM files. + + * working notehead style. + + * add scripts to bars eg. |^"bla" + + * relative mode for mi2mu + + * uniformise recent feta contributions. + - use SCM and Molecules for {accordeon stuff, } + - bigger and fatter 4/4 C + + * make a SMOB of Atom and Molecule + + * use kerning for dynamics. + + * sort out directory stuff. + - --prefix option? + - -I option per filetype? + - kpathsea? + ************** I also found a few bugs: @@ -14,25 +46,99 @@ I also found a few bugs: don't work. The problem seems to be that you can't define a a score identifier and then use it in the \score block. -* Instrument names in the margin. Example: - input/test/hara-kiri.ly. The text should of course - be to the left of the staff lines. -************** -- Textual scripts and dynamics are printed in the middle of the staff. + - make separate MF chars for endings of ledger lines, and calc rest of lines. - * fix AFM for BlueSky AFM files. + * support_l_arr_ empty in staff-margin's G_staff_side_item -- I didn't find any working example of the Staff_margin-engraver in - input/test, and I couldn't invent one myself either. - bar-scripts.ly, score-bar-scripts.ly and hara-kiri.ly don't work - properly. - * check widths of TFM, something's wrong here. +************ - * hang Item on Spanner +How can I specify a chord whose duration is longer than a whole note? - * junk Text_def, use G_text_item in stead. + \type ChordNames { \chord{ A1*2-min } } + +gives me a parse error. And \times doesn't work either. I can't use +a spacer note. So it seems to be impossible to have long chords of +general length. Of course, in the example above I can use \breve. +But what if I want a chord that lasts for 3 whole notes? Or what +about 2.5 whole notes? Is there a mechanism for getting this kind of +length? + + +Why does my second extender request get junked in the following: + +\score{ +< \notes \relative c''{ + a4()b()c()d c()d()b()a } + \type Lyrics \lyrics { + foo1 __ bar2. __ _4 } +> } + +It seems that \cr and \decr don't work any more. + +\score{ + \notes{ + a \cr b \rc c } + \paper{linewidth=-1.;} +} + +Gives me + +qq.ly:3:9: warning: can't find (de)crescendo to end: + a \cr + b \rc c } + + + +Use of semicolons is still rather confusing. They are obligatory +after some types of assignments and illegal after others. + + \property foo=bar illegal + foo = 3 at top level illegal + foo = 3 inside \paper obligatory + foo = \notes{ ...} top level illegal + foo = \translator{ } in \paper obligatory + +As far as I can tell, the sole accomplishment of this syntactic +irregularity is to keep the user as confused as possible. + + +I was trying to get interstaff beams to work and did this: + +\score{ +\type GrandStaff < +\type Staff=one \notes\relative c'{ + \stemup + [c8 c \translator Staff=two \stemup c c] + \translator Staff=one + \stemdown + [ b8 \translator Staff=two a8] + \translator Staff=one + c4 + } +\type Staff=two \notes{ \clef bass; s1 } +> +\paper{ + \translator{ + \GrandStaffContext + minVerticalAlign = 3.0*\staffheight; + maxVerticalAlign = 3.0*\staffheight; + } + linewidth = -1.; +} +} + +The beams are at the right angle, but they aren't in the right place. + + + +******************* + + + * fractional chord durs. + + * hang Item on Spanner * remove Interval dim_ from Dimension_cache and rename the struct. @@ -40,14 +146,10 @@ I also found a few bugs: * convert-mudela --output - * staff_margin (with a partial measure.) + * Staff_margin (with a partial measure.) * fix "I've been drinking too much" - * add scripts to bars eg. |^"bla" - - * fix Staff_margin_engraver. - * fix pletvisibility properties: - bracket on/off/no-bracket-when-beam - num on/off/no-num-when-beam @@ -60,8 +162,6 @@ I also found a few bugs: * fix convert-mudela manpage - * automatic staff selection. - * decimal point in \paper {} *{ \voiceone [g''8 fis'' e''] d''4 |} @@ -157,8 +257,6 @@ BUGS: portato= \script { "portato" 0 -1 0 1 0 } STUFF - * uniformise recent feta contributions. - * check out legal/(c) matters for scores. * check out GCC signatures? @@ -208,8 +306,6 @@ STUFF * $DEPENDENCIES_OUTPUT support - * fix weird behaviour when .AFMs/.SCMs not found. - * Xdvi zooming ?! Try to understand GS garbage collection. gs: Error: /undefined in draw_beam gs: Operand stack: @@ -770,3 +866,48 @@ if you just sit there." --Will Rogers (1879-1935) *************************** + +> I am still muddling along with integrating GUILE in LilyPond, and I +> have a question. I want to replace an existing C++ implementation of +> identifier tables by GUILE's code. I've managed to replace +> +> Hash_table +> +> by +> +> Hash_table +> +> and use interning and GUILE symbols for doing the identifier lookup. +> But I'd like to use GUILE's hash tables as well, and that's were my +> question comes in: is there an interface that allows me to iterate +> through the entries of a GUILE hash table? + +I use the following, which should definitely be provided somewhere +in guile, but isn't, AFAIK: + +(define (hash-table-for-each fn ht) + (do ((i 0 (+ 1 i))) + ((= i (vector-length ht))) + (do ((alist (vector-ref ht i) (cdr alist))) + ((null? alist) #t) + (fn (car (car alist)) (cdr (car alist)))))) + +(define (hash-table-map fn ht) + (do ((i 0 (+ 1 i)) + (ret-ls '())) + ((= i (vector-length ht)) (reverse ret-ls)) + (do ((alist (vector-ref ht i) (cdr alist))) + ((null? alist) #t) + (set! ret-ls (cons (fn (car (car alist)) (cdr (car alist))) ret-ls))))) + +If you want a C version, you can run the above code through hobbit, or +tranlate it to C by hand. + +-russ + + +-- +"Whenever you find yourself on the side of the majority, it is time to +pause and reflect." + -- Mark Twain +*********************** diff --git a/VERSION b/VERSION index 9bad00d0a5..7f47bf5c61 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=1 -PATCH_LEVEL=25 -MY_PATCH_LEVEL=jcn1 +PATCH_LEVEL=26 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/set-lily.sh b/buildscripts/set-lily.sh index f819163aa5..39833eb7c0 100755 --- a/buildscripts/set-lily.sh +++ b/buildscripts/set-lily.sh @@ -48,6 +48,8 @@ ln -sf $LILYPOND_SOURCEDIR/scripts/out/mudela-book $prefix/bin/mudela-book chmod 755 $LILYPOND_SOURCEDIR/buildscripts/ps-to-gifs.sh ln -sf $LILYPOND_SOURCEDIR/buildscripts/ps-to-gifs.sh $prefix/bin/ps-to-gifs ln -sf $LILYPOND_SOURCEDIR/mf/out/ afm +TFMDIR=`kpsewhich cmr10.tfm` +ln -sf `dirname $TFMDIR` tfm mkdir -p $prefix/share/ ln -sf $prefix/lilypond/ $sources/lilypond diff --git a/input/test/auto-staff-switch.ly b/input/test/auto-staff-switch.ly new file mode 100644 index 0000000000..dfb278193b --- /dev/null +++ b/input/test/auto-staff-switch.ly @@ -0,0 +1,32 @@ + +\score { +\notes { + \type AutoSwitchGrandStaff \relative c' { + c8^8 d^8 b^8 a^8 [a,^8 f'^8 g,^8 ~ g] + + } +} + +\paper { +\translator { \ScoreContext +\accepts AutoSwitchGrandStaff; +} +\translator{ + \type "Line_group_engraver_group"; + \name AutoSwitchGrandStaff; + \consists "Span_bar_engraver"; + \consists "Vertical_align_engraver"; + \consists "Piano_bar_engraver"; + minVerticalAlign = 2.*\staffheight; + maxVerticalAlign = 2.*\staffheight; + + \accepts "AutoSwitchContext"; + \accepts "Staff"; +} +\translator { + \type "Engraver_group_engraver"; + \name "AutoSwitchContext"; + \consists "Staff_switching_translator"; +} + +}} diff --git a/input/test/extra-staff.ly b/input/test/extra-staff.ly new file mode 100644 index 0000000000..49a0e0e908 --- /dev/null +++ b/input/test/extra-staff.ly @@ -0,0 +1,44 @@ +%{ +(Message vers:9) +To: Adrian Mariano +cc: gnu-music-discuss@gnu.org +Subject: Re: Switching from one staff to two staffs +Reply-To: janneke@gnu.org +In-reply-to: Your message of "Tue, 19 Jan 1999 12:27:10 EST." + <199901191727.MAA29757@avalanche.cam.cornell.edu> +Date: Wed, 20 Jan 1999 09:39:22 +0100 +From: Jan Nieuwenhuizen + +On Tuesday, 19 January 1999, Adrian Mariano writes: + +> I want to typeset something which starts out with just one staff and then +> harmony comes in and there are two staffs. I can't figure out how to do +> this. I get an extra blank staff during the second section (using +> Lily 1.1.15): + +There used to be an example called 'multi.ly'... +Try this (we'll include it in pl23/24): + +extra-staff.ly: +%} + +\score { + < + \type Staff=i \notes\relative c''{ c1 c c c c } + \type StaffGroup=ii \notes\relative c''{ + \type Staff=ii + c1 c + < \type Staff=ii { c1 } \type Staff=iii { c1 } > + c + } + > + \paper { + linewidth = -1.; + \translator{ + \ScoreContext + minVerticalAlign = 2.0*\staffheight; + maxVerticalAlign = 2.0*\staffheight; + } + } +} + diff --git a/lily/bar-script-engraver.cc b/lily/bar-script-engraver.cc index 51cbfec3b9..cf741641df 100644 --- a/lily/bar-script-engraver.cc +++ b/lily/bar-script-engraver.cc @@ -39,7 +39,9 @@ Bar_script_engraver::acknowledge_element (Score_element_info i) if (i.origin_grav_l_arr_.size () == 1) { staff_side_p_->dim_cache_[other_axis].parent_l_ = &bar_l->dim_cache_[other_axis]; + // staff_side_p_->dim_cache_[axis_].parent_l_ = &bar_l->dim_cache_[axis_]; staff_side_p_->add_support (i.elem_l_); + bar_l->add_dependency (staff_side_p_); // UGH. } } } diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 737f4ff4ff..4c1588e7b9 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -4,6 +4,7 @@ source file of the GNU LilyPond music typesetter (c) 1997--1998 Han-Wen Nienhuys , + Mats Bengtsson */ @@ -20,6 +21,7 @@ Clef_engraver::Clef_engraver() { + clef_p_ = 0; clef_req_l_ = 0; clef_type_str_ = ""; c0_position_i_ = 0; @@ -27,6 +29,9 @@ Clef_engraver::Clef_engraver() octave_dir_ = CENTER; } +/* + ugh. Should be configurable. + */ struct Clef_settings { char const *name; char const *cleftype; @@ -36,7 +41,6 @@ struct Clef_settings { {"violin", "treble", -2}, {"G", "treble", -2}, {"G2", "treble", -2}, - {"scarlatti", "scarlatti", 0 }, {"french", "treble",-4 }, {"soprano", "alto",-4 }, {"mezzosoprano", "alto",-2 }, @@ -50,12 +54,6 @@ struct Clef_settings { {0,0,0} }; - - - -/* - Ugh. Should have support for Dictionaries in mudela. - */ bool Clef_engraver::set_type (String s) { @@ -82,6 +80,7 @@ Clef_engraver::set_type (String s) found = 1; } } + if (!found) { switch(toupper (s[0])) @@ -107,8 +106,6 @@ Clef_engraver::set_type (String s) c0_position_i_ = clef_position_i_; else if (clef_type_str_ == "bass") c0_position_i_ = clef_position_i_ + 4; - else if (clef_type_str_ == "scarlatti") - c0_position_i_ = 0; else assert (false); @@ -117,13 +114,6 @@ Clef_engraver::set_type (String s) return true; } -void -Clef_engraver::read_req (Clef_change_req*c_l) -{ - if (!set_type (c_l->clef_str_)) - c_l->error (_ ("unknown clef type ")); -} - /** Generate a clef at the start of a measure. (when you see a Bar, @@ -137,11 +127,7 @@ Clef_engraver::acknowledge_element (Score_element_info info) { create_clef(); if (!clef_req_l_) - for (int i=0; i < clef_p_arr_.size (); i++) - { - clef_p_arr_[i]->default_b_ = true; - } - + clef_p_->default_b_ = true; } /* ugh; should make Clef_referenced baseclass */ @@ -167,16 +153,15 @@ Clef_engraver::acknowledge_element (Score_element_info info) void Clef_engraver::do_creation_processing() { - Scalar def = get_property ("defaultClef", 0); + create_default_b_ = true; // should read property. + Scalar def = get_property ("createInitdefaultClef", 0); if (def.to_bool ()) // egcs: Scalar to bool is ambiguous set_type (def); if (clef_type_str_.length_i ()) { create_clef(); - for (int i=0; i < clef_p_arr_.size (); i++) - - clef_p_arr_[i]->default_b_ = false; + clef_p_->default_b_ = false; } } @@ -186,7 +171,9 @@ Clef_engraver::do_try_music (Music * r_l) if (Clef_change_req *cl = dynamic_cast (r_l)) { clef_req_l_ = cl; - read_req (clef_req_l_); + if (!set_type (cl->clef_str_)) + cl->error (_ ("unknown clef type ")); + return true; } else @@ -197,37 +184,18 @@ Clef_engraver::do_try_music (Music * r_l) void Clef_engraver::create_clef() { - if (clef_type_str_ == "scarlatti") + if (!clef_p_) { - while (clef_p_arr_.size () < 2) - { - Clef_item *ct= new Clef_item; - ct->break_priority_i_ = -2; // UGH - announce_element (Score_element_info (ct, clef_req_l_)); - clef_p_arr_.push (ct); - } - clef_p_arr_[0]->symbol_ = "treble"; - clef_p_arr_[0]->y_position_i_ = 4; - clef_p_arr_[1]->symbol_ = "bass"; - clef_p_arr_[1]->y_position_i_ = -4; + Clef_item *c= new Clef_item; + c->break_priority_i_ = -2; // ugh + announce_element (Score_element_info (c, clef_req_l_)); + clef_p_ = c; } - else - { - if (!clef_p_arr_.size ()) - { - Clef_item *c= new Clef_item; - c->break_priority_i_ = -2; // ugh - announce_element (Score_element_info (c, clef_req_l_)); - clef_p_arr_.push (c); - } - for (int i=0; i < clef_p_arr_.size (); i++) - { - clef_p_arr_[i]->symbol_ = clef_type_str_; - clef_p_arr_[i]->y_position_i_ = clef_position_i_; - clef_p_arr_[i]->octave_dir_ = octave_dir_; - } - } + + clef_p_->symbol_ = clef_type_str_; + clef_p_->y_position_i_ = clef_position_i_; + clef_p_->octave_dir_ = octave_dir_; } @@ -237,19 +205,27 @@ Clef_engraver::do_process_requests() if (clef_req_l_) { create_clef(); - for (int i=0; i < clef_p_arr_.size (); i++) - clef_p_arr_[i]->default_b_ = false; + clef_p_->default_b_ = false; + } + else if (create_default_b_) + { + String type = get_property ("defaultClef", 0); + set_type (type.length_i () ? type : "treble"); + create_clef (); + clef_p_->default_b_ = false; + create_default_b_ =0; } } void Clef_engraver::do_pre_move_processing() { - for (int i=0; i internote_f () * y_position_i_); - - bool b= (break_status_dir() != RIGHT); - change_b_ = b; - - if (default_b_) - { - set_empty(b); - transparent_b_ = b; - } + change_b_ = (break_status_dir() != RIGHT); } /* @@ -47,22 +39,33 @@ Clef_item::Clef_item() void Clef_item::do_add_processing () { - if (!break_status_dir_ // broken stuff takes care of their own texts - && octave_dir_) + if (!break_status_dir_) // broken stuff takes care of their own texts { - G_text_item *g = new G_text_item; - pscore_l_->typeset_element (g); + SCM defvis = gh_eval_str ("(lambda (d) (if (= d 1) '(#f . #f) '(#t . #t)))"); + G_text_item *g =0; + if (octave_dir_) + { + g = new G_text_item; + pscore_l_->typeset_element (g); - g->text_str_ = "8"; - g->style_str_ = "italic"; - g->dim_cache_[Y_AXIS].parent_l_ = &dim_cache_[Y_AXIS]; - g->dim_cache_[X_AXIS].parent_l_ = &dim_cache_[X_AXIS]; - add_dependency (g); // just to be sure. - - Real r = do_height ()[octave_dir_] + g->extent (Y_AXIS)[-octave_dir_]; - g->dim_cache_[Y_AXIS].set_offset (r); + g->text_str_ = "8"; + g->style_str_ = "italic"; + g->dim_cache_[Y_AXIS].parent_l_ = &dim_cache_[Y_AXIS]; + g->dim_cache_[X_AXIS].parent_l_ = &dim_cache_[X_AXIS]; + add_dependency (g); // just to be sure. + + Real r = do_height ()[octave_dir_] + g->extent (Y_AXIS)[-octave_dir_]; + g->dim_cache_[Y_AXIS].set_offset (r); + } + if (default_b_) + { + visibility_lambda_ = defvis; + if (g) + g->visibility_lambda_ = defvis; + } } + } diff --git a/lily/g-staff-side.cc b/lily/g-staff-side.cc index 72f952d89f..78bd34f7da 100644 --- a/lily/g-staff-side.cc +++ b/lily/g-staff-side.cc @@ -15,6 +15,7 @@ G_staff_side_item::G_staff_side_item () to_position_l_ = 0; transparent_b_ = true; padding_f_ = 0; + axis_ = Y_AXIS; } @@ -40,7 +41,7 @@ G_staff_side_item::set_victim (Score_element *e) { add_dependency (e); to_position_l_ = e; - to_position_l_->dim_cache_[Y_AXIS].parent_l_ = &dim_cache_[Y_AXIS]; + to_position_l_->dim_cache_[axis_].parent_l_ = &dim_cache_[axis_]; } void @@ -63,20 +64,25 @@ G_staff_side_item::do_substitute_dependency (Score_element*o, Score_element*n) void G_staff_side_item::position_self () { - if (!support_l_arr_.size ()) - return ; - - Dimension_cache *common = common_group (typecast_array (support_l_arr_, (Graphical_element*)0), - axis_); - Interval dim; - for (int i=0; i < support_l_arr_.size (); i++) + Dimension_cache *common = 0; + if (support_l_arr_.size ()) { - Score_element * e = support_l_arr_ [i]; - Real coord = e->relative_coordinate (common, axis_); - dim.unite (coord + e->extent (axis_)); + common = common_group (typecast_array (support_l_arr_, (Graphical_element*)0), + axis_); + + for (int i=0; i < support_l_arr_.size (); i++) + { + Score_element * e = support_l_arr_ [i]; + Real coord = e->relative_coordinate (common, axis_); + dim.unite (coord + e->extent (axis_)); + } + } + else + { + dim = Interval(0,0); + common = dim_cache_[axis_].parent_l_; } - Interval sym_dim = to_position_l_->extent (axis_); Real off = dim_cache_[axis_].relative_coordinate (common) - padding_f_ * dir_; diff --git a/lily/include/clef-engraver.hh b/lily/include/clef-engraver.hh index 1e877683a2..b15736f6fe 100644 --- a/lily/include/clef-engraver.hh +++ b/lily/include/clef-engraver.hh @@ -17,10 +17,9 @@ /// where is c-0 in the staff? class Clef_engraver : public Engraver { - Link_array clef_p_arr_; + Clef_item * clef_p_; Clef_change_req * clef_req_l_; void create_clef(); - void read_req (Clef_change_req*); bool set_type (String); protected: virtual void do_process_requests(); @@ -36,7 +35,7 @@ public: int clef_position_i_; Direction octave_dir_; String clef_type_str_; - + bool create_default_b_; Clef_engraver(); diff --git a/lily/include/interpretation-context-handle.hh b/lily/include/interpretation-context-handle.hh new file mode 100644 index 0000000000..d990a02f47 --- /dev/null +++ b/lily/include/interpretation-context-handle.hh @@ -0,0 +1,30 @@ +/* + interpretation-context-handle.hh -- declare Interpretation_context_handle + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef INTERPRETATION_CONTEXT_HANDLE_HH +#define INTERPRETATION_CONTEXT_HANDLE_HH +#include "lily-proto.hh" + +class Interpretation_context_handle +{ + Translator_group * report_to_l_; + void down (); + void up (Translator_group*); +public: + ~Interpretation_context_handle (); + Interpretation_context_handle (); + void set_translator (Translator_group*); + bool try_music (Music *); + void operator =(Interpretation_context_handle const&); + Interpretation_context_handle (Interpretation_context_handle const&); + Translator_group * report_to_l () const; +}; + +#endif /* INTERPRETATION_CONTEXT_HANDLE_HH */ + diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 749baac14c..f9d6953f9b 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -15,6 +15,7 @@ #include "array.hh" #include "moment.hh" #include "virtual-methods.hh" +#include "interpretation-context-handle.hh" /** Walk through music and deliver music to translation units, synced in time. This classa provides both the implementation of the shared @@ -25,9 +26,7 @@ construct with one point in musical time. */ class Music_iterator { - Arrayreport_to_l_arr_; - void push_translator (Translator_group*); - void pop_translator(); + Interpretation_context_handle handle_; protected: Music const * music_l_; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index a948fd82df..959022ac19 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -27,14 +27,19 @@ typedef void (Translator::*Const_method_pointer)(void) const; class Translator_group : public virtual Translator { Array consists_str_arr_; Array accepts_str_arr_; + Dictionary properties_dict_; + + int iterator_count_; + friend class Interpretation_context_handle; public: + Scalar get_property (String type_str, Translator_group **where_found_l) const; + void set_property (String var_name, Scalar value); + Pointer_list trans_p_list_; String id_str_; - int iterator_count_; - VIRTUAL_COPY_CONS(Translator); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 7671f96aa5..f089df51b4 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -23,7 +23,6 @@ hierarchically grouped #Translator#s */ class Translator : public Input { - Dictionary properties_dict_; public: Music_output_def * output_def_l_; String type_str_; @@ -60,10 +59,8 @@ public: /** ask daddy for a feature */ - Scalar get_property (String type_str, Translator const **where_found_l) const; - void set_property (String var_name, Scalar value); Music_output_def *output_def_l () const; - + Scalar get_property (String, Translator_group **) const; virtual Moment now_moment () const; protected: diff --git a/lily/interpretation-context-handle.cc b/lily/interpretation-context-handle.cc new file mode 100644 index 0000000000..185991b748 --- /dev/null +++ b/lily/interpretation-context-handle.cc @@ -0,0 +1,73 @@ +/* + interpretation-context-handle.cc -- implement Interpretation_context_handle + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#include "interpretation-context-handle.hh" +#include "translator-group.hh" + +void +Interpretation_context_handle::up (Translator_group*t) +{ + report_to_l_ = t; + t->iterator_count_ ++; +} + +void +Interpretation_context_handle::down() +{ + report_to_l_->iterator_count_ --; + report_to_l_ = 0; +} + +bool +Interpretation_context_handle::try_music (Music *m) +{ + return report_to_l_->try_music (m); +} + +Interpretation_context_handle::Interpretation_context_handle (Interpretation_context_handle const&s) +{ + report_to_l_ =0; + if (s.report_to_l_) + up (s.report_to_l_ ); +} + +void +Interpretation_context_handle::operator = (Interpretation_context_handle const &s) +{ + set_translator (s.report_to_l_); +} + +void +Interpretation_context_handle::set_translator (Translator_group*trans) +{ + if (report_to_l_ ==trans) + return; + if (report_to_l_) + down (); + if (trans) + up (trans); +} + +Translator_group* +Interpretation_context_handle::report_to_l ()const +{ + return report_to_l_; +} + +Interpretation_context_handle::Interpretation_context_handle() +{ + report_to_l_ =0; +} + +Interpretation_context_handle::~Interpretation_context_handle () +{ + if (report_to_l_) + down (); +} + diff --git a/lily/lexer.ll b/lily/lexer.ll index dc409d288a..e2de809d01 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -92,7 +92,7 @@ RESTNAME [rs] NOTECOMMAND \\{A}+ LYRICS ({AA}|{TEX})[^0-9 \t\n\f]* ESCAPED [nt\\'"] -EXTENDER [_][_] +EXTENDER __ %% diff --git a/lily/lookup.cc b/lily/lookup.cc index b6daf8beaa..d63f467384 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -73,8 +73,15 @@ Atom Lookup::afm_find (String s, bool warn) const { if (!afm_l_) - ((Lookup*)this)->afm_l_ = all_fonts_global_p->find_afm (font_name_); - + { + Lookup * me = ((Lookup*)this); + me->afm_l_ = all_fonts_global_p->find_afm (font_name_); + if (!me->afm_l_) + { + warning (_f("Can't open `%s'\n", font_name_)); + warning (_f("Search path %s\n", global_path.str ().ch_C())); + } + } Adobe_font_char_metric m = afm_l_->find_char (s, warn); Atom a; diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index 3d22831fbf..40f2236f86 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -57,50 +57,27 @@ Music_iterator::get_req_translator_l() return report_to_l(); } -void -Music_iterator::push_translator (Translator_group*t) -{ - report_to_l_arr_.push (t); - t->iterator_count_ ++; -} - -void -Music_iterator::pop_translator() -{ - report_to_l()->iterator_count_ --; - assert (report_to_l()->iterator_count_ >=0); - report_to_l_arr_.pop(); -} Translator_group* Music_iterator::report_to_l() const { - if (! report_to_l_arr_.size()) - return 0; - return report_to_l_arr_.top(); + return handle_.report_to_l (); } void Music_iterator::set_translator (Translator_group*trans) -{ - if (report_to_l()==trans) - return; - if (report_to_l()) - pop_translator(); - if (trans) - push_translator (trans); +{ + handle_.set_translator (trans); } void Music_iterator::construct_children() { - } Music_iterator::~Music_iterator() { - set_translator (0); } Moment diff --git a/lily/note.cc b/lily/note.cc index a32cabab79..dda34cb0fd 100644 --- a/lily/note.cc +++ b/lily/note.cc @@ -17,6 +17,9 @@ +/* + SHOULD JUNK THIS. + */ String * get_scriptdef (char c) { diff --git a/lily/parser.yy b/lily/parser.yy index e8f216ea50..73a7557a47 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -482,7 +482,9 @@ translator_spec_body: THIS->parser_error (_("Wrong type for property value")); delete $4; - $$->set_property (*$2, str); + /* ugh*/ + Translator_group * tr = dynamic_cast($$); + tr->set_property (*$2, str); } | translator_spec_body NAME STRING ';' { $$->type_str_ = *$3; diff --git a/lily/scores.cc b/lily/scores.cc index 8ed0c3b163..07b2492229 100644 --- a/lily/scores.cc +++ b/lily/scores.cc @@ -109,6 +109,7 @@ do_one_file (String init_str, String file_str) if (init_str.length_i () && global_path.find (init_str).empty_b ()) { warning (_f ("can't find file: `%s\'", init_str)); + warning (_f ("Search path: %s", global_path.str ().ch_C())); return; } if ((file_str != "-") && global_path.find (file_str).empty_b ()) diff --git a/lily/staff-margin-engraver.cc b/lily/staff-margin-engraver.cc index 4a24e656a5..3b1301cbb8 100644 --- a/lily/staff-margin-engraver.cc +++ b/lily/staff-margin-engraver.cc @@ -10,6 +10,7 @@ #include "bar.hh" #include "time-description.hh" #include "g-text-item.hh" +#include "g-staff-side.hh" ADD_THIS_TRANSLATOR (Staff_margin_engraver); @@ -48,14 +49,15 @@ Staff_margin_engraver::acknowledge_element (Score_element_info i) String long_str = get_property ("instrument", 0); String str = get_property ("instr", 0); - if (now_moment () > Moment (0)) + if (now_moment () > Moment (0) && str.length_i ()) long_str = str; - if (!long_str.empty_b ()) + if (long_str.empty_b ()) return; create_items (0); text_p_->text_str_ = long_str; + staff_side_p_->dir_ = LEFT; Bar_script_engraver::acknowledge_element(i); } diff --git a/lily/staff-switching-translator.cc b/lily/staff-switching-translator.cc new file mode 100644 index 0000000000..ffeda7fc26 --- /dev/null +++ b/lily/staff-switching-translator.cc @@ -0,0 +1,67 @@ +/* + staff-switching-translator.cc -- implement Staff_switching_translator + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ +#include "engraver.hh" +#include "interpretation-context-handle.hh" +#include "drul-array.hh" +#include "engraver-group.hh" +#include "musical-request.hh" + +class Staff_switching_translator : public Engraver +{ + Interpretation_context_handle my_voice_; + Drul_array staff_handle_drul_; +protected: + virtual bool do_try_music (Music* m); + virtual void do_creation_processing (); +public: + Staff_switching_translator (); + VIRTUAL_COPY_CONS(Translator); +}; + +Staff_switching_translator::Staff_switching_translator () +{ +} + +void +Staff_switching_translator::do_creation_processing () +{ + Translator_group * daddy =daddy_grav_l (); // staff switching context + + staff_handle_drul_[UP].set_translator (daddy->daddy_trans_l_ -> find_create_translator_l ("Staff", "upper")); + staff_handle_drul_[DOWN].set_translator (daddy->daddy_trans_l_-> find_create_translator_l ("Staff", "lower")); + + + staff_handle_drul_[DOWN].report_to_l ()->set_property ("defaultClef", "bass"); + + my_voice_.set_translator (staff_handle_drul_[UP].report_to_l ()->find_create_translator_l ("Voice", daddy->id_str_)); +} + +bool +Staff_switching_translator::do_try_music (Music*m) +{ + if (Note_req*nr = dynamic_cast (m)) + { + Direction staff = (nr->pitch_.semitone_pitch () >= 0) + ? UP + : DOWN; + + + Translator_group * mv = my_voice_.report_to_l (); + Translator_group *dest_staff =staff_handle_drul_[staff].report_to_l (); + if (mv->daddy_trans_l_ != dest_staff) + { + mv->daddy_trans_l_->remove_translator_p (mv); + dest_staff->add_translator (mv); + } + } + + return my_voice_.try_music (m); +} + +ADD_THIS_TRANSLATOR(Staff_switching_translator); diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 07998e448f..47ad3c1e0c 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -14,6 +14,7 @@ #include "misc.hh" #include "abbrev.hh" #include "staff-info.hh" +#include "translator-group.hh" Stem_engraver::Stem_engraver() { @@ -96,18 +97,18 @@ Stem_engraver::do_pre_move_processing() stem_p_->dir_forced_b_ = true; } - Translator const *which; + Translator_group const *which; prop = get_property ("stemLeftBeamCount", &which); if (prop.isnum_b ()) { stem_p_->beams_i_drul_[LEFT] = prop; - ((Translator*)which)->set_property ("stemLeftBeamCount", ""); + ((Translator_group*)which)->set_property ("stemLeftBeamCount", ""); } prop = get_property ("stemRightBeamCount", &which); if (prop.isnum_b ()) { stem_p_->beams_i_drul_[RIGHT] = prop; - ((Translator*)which)->set_property ("stemRightBeamCount", ""); + ((Translator_group*)which)->set_property ("stemRightBeamCount", ""); } diff --git a/lily/text-item.cc b/lily/text-item.cc deleted file mode 100644 index bf1b597654..0000000000 --- a/lily/text-item.cc +++ /dev/null @@ -1,91 +0,0 @@ -/* - text-item.cc -- implement Text_item - - source file of the GNU LilyPond music typesetter - - (c) 1997--1998 Han-Wen Nienhuys -*/ - -#if 0 -#include "musical-request.hh" -#include "paper-def.hh" -#include "text-item.hh" -#include "stem.hh" -#include "molecule.hh" -#include "lookup.hh" -#include "debug.hh" - - -Text_item::Text_item (General_script_def* tdef_l, Direction d) -{ - dir_ = d; - fat_b_ = false; - tdef_p_ = tdef_l->clone (); -} - -Text_item::~Text_item () -{ - delete tdef_p_; -} - -void -Text_item::do_pre_processing () -{ - if (!dir_) - dir_ = DOWN; -} - -Real -Text_item::get_position_f () const -{ - // uhuh, tdef/gdef? - if (Text_def *tdl = dynamic_cast(tdef_p_)) - { - if (tdl->style_str_ != "finger") // HUHH? - return Staff_side::get_position_f (); - } - - if (!dir_) - { - warning (_ ("Text_item::get_position_f(): " - "somebody forgot to set my vertical direction, returning -20")); - return -20; - } - - Interval v = support_extent (); - // add no extra: fingers should be just above note, no? - return v[dir_]; -} - -Interval -Text_item::symbol_height () const -{ - return tdef_p_->get_atom (paper (), dir_).dim_.y (); -} - -Molecule* -Text_item::do_brew_molecule_p () const -{ - Atom a (tdef_p_->get_atom (paper (), dir_)); - - if (!fat_b_) - a.dim_[X_AXIS] = Interval (0,0); - Molecule* mol_p = new Molecule (a); -#if 0 - if (dir_<0) // should do something better anyway. - mol_p->translate_axis (mol_p->extent ().y ().left , Y_AXIS); -#endif - - mol_p->translate_axis (coordinate_offset_f_, Y_AXIS); - -#if 0 - // fine for one lyric, urg for lyric chord - mol_p->translate_axis (a.dim_.y ().length (), Y_AXIS); -#endif - - return mol_p; -} - - - -#endif diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 7b59009780..b378cad83a 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -12,6 +12,7 @@ #include "debug.hh" #include "pcursor.hh" #include "rational.hh" +#include "dictionary-iter.hh" Translator_group::Translator_group (Translator_group const&s) : Translator(s) @@ -19,6 +20,8 @@ Translator_group::Translator_group (Translator_group const&s) consists_str_arr_ = s.consists_str_arr_; accepts_str_arr_ = s.accepts_str_arr_; iterator_count_ =0; + properties_dict_ = s.properties_dict_; + } Translator_group::~Translator_group () @@ -331,6 +334,10 @@ Translator_group::do_print() const #ifndef NPRINT if (!check_debug) return ; + for (Dictionary_iter i (properties_dict_); i.ok (); i++) + { + DOUT << i.key () << "=" << i.val () << '\n'; + } if (status == ORPHAN) { DOUT << "consists of: "; @@ -392,3 +399,27 @@ Translator_group::do_add_processing () add_translator (t->clone ()); } } + +Scalar +Translator_group::get_property (String id, Translator_group **where_l) const +{ + if (properties_dict_.elem_b (id)) + { + if (where_l) + *where_l = this; + return properties_dict_[id]; + } + + if (daddy_trans_l_) + return daddy_trans_l_->get_property (id, where_l); + + if (where_l) + *where_l = 0; + return ""; +} + +void +Translator_group::set_property (String id, Scalar val) +{ + properties_dict_[id] = val; +} diff --git a/lily/translator.cc b/lily/translator.cc index 1629bf5e56..30205ed7fd 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -10,7 +10,7 @@ #include "translator.hh" #include "debug.hh" #include "translator-group.hh" -#include "dictionary-iter.hh" + #include "rational.hh" Translator::~Translator () @@ -30,7 +30,6 @@ Translator::Translator (Translator const &s) status = ORPHAN; daddy_trans_l_ =0; output_def_l_ = s.output_def_l_; - properties_dict_ = s.properties_dict_; type_str_ = s.type_str_; } @@ -76,10 +75,6 @@ Translator::print () const DOUT << classname (this) << " {"; if (classname (this) != type_str_) DOUT << "type = " << type_str_; - for (Dictionary_iter i (properties_dict_); i.ok (); i++) - { - DOUT << i.key () << "=" << i.val () << '\n'; - } do_print (); DOUT << "}\n"; #endif @@ -154,29 +149,6 @@ Translator::pre_move_processing () status = CREATION_INITED; } -Scalar -Translator::get_property (String id, Translator const **where_l) const -{ - if (properties_dict_.elem_b (id)) - { - if (where_l) - *where_l = this; - return properties_dict_[id]; - } - - if (daddy_trans_l_) - return daddy_trans_l_->get_property (id, where_l); - - if (where_l) - *where_l = 0; - return ""; -} - -void -Translator::set_property (String id, Scalar val) -{ - properties_dict_[id] = val; -} Music_output_def * @@ -184,3 +156,10 @@ Translator::output_def_l () const { return output_def_l_; } + +Scalar +Translator::get_property (String id, Translator_group **where_l) const +{ + return daddy_trans_l_->get_property (id, where_l); +} + diff --git a/ly/declarations.ly b/ly/declarations.ly index 69b33ac2ce..14c25e424a 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -28,6 +28,7 @@ left = -1 right = 1 up = 1 down = -1 + % zillie spellink? center=0 @@ -41,5 +42,7 @@ minor = 3 \scmfile "lily.scm"; +unusedEntry = \notes { c4 } % reset default duration + % music = "\melodic\relative c" diff --git a/make/lilypond.spec.in b/make/lilypond.spec.in index 3c0213304a..d2592ab89a 100644 --- a/make/lilypond.spec.in +++ b/make/lilypond.spec.in @@ -19,9 +19,12 @@ Prereq: tetex %build ./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --disable-optimise --enable-shared make all -make -C Documentation info || true +ln -s /usr/share/texmf/fonts/tfm/public/cm/ tfm + +# make -C Documentation info || true make htmldoc || true + %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc @@ -61,7 +64,6 @@ cp buildscripts/out/lilypond-login $RPM_BUILD_ROOT/etc/profile.d/lilypond.csh /usr/share/locale/*/LC_MESSAGES/lilypond.mo /etc/profile.d/lilypond.* - %post touch /tmp/.lilypond-install diff --git a/make/out/lelievijver.lsm b/make/out/lelievijver.lsm index 8e06c9d106..af4745f4fc 100644 --- a/make/out/lelievijver.lsm +++ b/make/out/lelievijver.lsm @@ -1,15 +1,15 @@ Begin3 Titel: LilyPond -Versie: 1.1.25 -Inschrijf datum: 26JAN99 +Versie: 1.1.26 +Inschrijf datum: 01FEB99 Beschrijving: @FLAPTEKST@ Trefwoorden: muziek typezetten midi notatie Auteur: hanwen@stack.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys) Voornaamste plek: sunsite.unc.edu /pub/Linux/apps - 770k lilypond-1.1.25.tar.gz + 770k lilypond-1.1.26.tar.gz Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 770k lilypond-1.1.25.tar.gz + 770k lilypond-1.1.26.tar.gz Copi-eer voorwaarden: GPL End diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 4ae38d2c18..084f26fbfc 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,7 +1,7 @@ Begin3 Title: LilyPond -Version: 1.1.25 -Entered-date: 26JAN99 +Version: 1.1.26 +Entered-date: 01FEB99 Description: LilyPond is the GNU Project music typesetter. This program can print beautiful sheet music from a music definition file. It can also play @@ -14,8 +14,8 @@ Author: hanwen@cs.ruu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 770k lilypond-1.1.25.tar.gz + 770k lilypond-1.1.26.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 770k lilypond-1.1.25.tar.gz + 770k lilypond-1.1.26.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index b954aca890..d3850e8478 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.1.25 +Version: 1.1.26 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.25.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.26.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys @@ -25,9 +25,12 @@ part extraction. It includes a nice font of musical symbols. %build ./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --disable-optimise --enable-shared make all -make -C Documentation info || true +ln -s /usr/share/texmf/fonts/tfm/public/cm/ tfm + +# make -C Documentation info || true make htmldoc || true + %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc @@ -67,7 +70,6 @@ cp buildscripts/out/lilypond-login $RPM_BUILD_ROOT/etc/profile.d/lilypond.csh /usr/share/locale/*/LC_MESSAGES/lilypond.mo /etc/profile.d/lilypond.* - %post touch /tmp/.lilypond-install diff --git a/make/toplevel.make.in b/make/toplevel.make.in index aefe381a0d..00fcf03754 100644 --- a/make/toplevel.make.in +++ b/make/toplevel.make.in @@ -34,3 +34,8 @@ examples: $(MAKE) CONFIGSUFFIX='www' -C mutopia WWW tar --exclude='*.dvi' --exclude='*.tex' --exclude='*.ps' -czf $(outdir)/examples.tar.gz `find input mutopia -type d -name 'out-www' -print` +CMR10DIR=$(dir $(shell kpsewhich cmr10.tfm))#ugh! Need kpsewhich +TEX_TFMDIR=$(CMR10DIR) +localinstall: + mkdir -p $(datadir) + ln -s $(TEX_TFMDIR) $(datadir)/tfm diff --git a/mf/TODO b/mf/TODO index 999e75eca3..9ff64e0230 100644 --- a/mf/TODO +++ b/mf/TODO @@ -1,4 +1,5 @@ - design macro for penstroke with rounded endings + - timesig C: fat yet less curved. Check out relations. - design decent macro for bulbed endings - printer dependencies. - y-refpoint for rests should be the 4th staffline (gclef: b') diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index 545a44775a..df9dc1ee07 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -42,5 +42,5 @@ else: % input feta-schrift; % input feta-schrift; % input feta-haak; -% input feta-timesig; + input feta-timesig; fi diff --git a/mf/feta-timesig.mf b/mf/feta-timesig.mf index 7cddd3215d..3cb794c586 100644 --- a/mf/feta-timesig.mf +++ b/mf/feta-timesig.mf @@ -9,27 +9,30 @@ fet_begingroup("timesig"); def set_C_width = save left_width, right_width; - left_width# := .8 interline#; + left_width# := 0.9 interline#; right_width# := .7 interline#; define_pixels(left_width,right_width); enddef; def draw_C = - save hair, bulb_rad; + save hair, bulb_rad, left_fatness; + + hair# := stafflinethickness#; - bulb_rad# := interline# / 3; + bulb_rad# := 0.4 interline#; define_pixels(hair, bulb_rad); - - x1r = x5; - y1r = .4 interline; + left_fatness = 0.55; + + x1r = x5r; + y1r = .45 interline; z2 = (0, interline); z3r = (-left_width, 0); z4 = (0, -interline); - z5r = (right_width, -2 stafflinethickness); + z5r = (right_width - stafflinethickness, -0.4 interline); penpos1(hair, 0); penpos2(stafflinethickness, 90); - penpos3(4 stafflinethickness, 180); + penpos3(left_fatness * interline, 180); penpos4(stafflinethickness, -90); penpos5(hair, -5); @@ -57,7 +60,11 @@ fet_beginchar ("2/2 meter", "C2/2", "allabreve") 1.4 interline#, 1.4 interline#); draw_C; - draw_block((-1.5stafflinethickness, -d), (0, h)); + save excentricity; + pair excentricity; + excentricity = (-1.25 stafflinethickness, 0); + + draw_block((- .75 stafflinethickness, -d) + excentricity, (.75 stafflinethickness , h) + excentricity); fet_endchar; path threequartercircle; diff --git a/mudela-mode.el b/mudela-mode.el index d06d48bcda..6565db77fd 100644 --- a/mudela-mode.el +++ b/mudela-mode.el @@ -31,10 +31,11 @@ ;; (defconst mudela-font-lock-keywords - (let* ((keywords '( + (let* ((keywords '("alternative" "repeat" "accepts" "accidentals" "break" "bar" "cadenza" - "clef" "cm" "consists" "contains" "duration" "absdynamic" - "in" "translator" "type" "lyric" "key" "maininput" "notes" + "clef" "cm" "consists" "contains" "duration" + "absdynamic" "scmfile" "lyrics" + "in" "translator" "type" "key" "maininput" "notes" "musical_pitch" "time" "midi" "mm" "header" "notenames" "octave" "output" "partial" "paper" "plet" "name" "property" "pt" "shape" "relative" "include" "score" diff --git a/mutopia/Coriolan/GNUmakefile b/mutopia/Coriolan/GNUmakefile index 201e77e30d..ea6d442405 100644 --- a/mutopia/Coriolan/GNUmakefile +++ b/mutopia/Coriolan/GNUmakefile @@ -4,7 +4,8 @@ depth = ../.. # do Coriolan if you have plenty RAM / CPU #examples=coriolan oboi-part viola-part -# examples= oboi-part viola-part + +examples= coriolan oboi-part viola-part LOCALSTEPMAKE_TEMPLATES=mutopia diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile b/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile index f08adc5029..18e9385e3f 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile @@ -4,7 +4,7 @@ depth = ../../.. EXTRA_DIST_FILES= -examples= +examples=scsii-cello LOCALSTEPMAKE_TEMPLATES=mutopia include $(depth)/make/stepmake.make diff --git a/tex/dyndefs.tex b/tex/dyndefs.tex index 4032e1351a..9ac3dae223 100644 --- a/tex/dyndefs.tex +++ b/tex/dyndefs.tex @@ -24,16 +24,26 @@ \def\dynp{{\dyn\dynnp}} \def\dynpp{{\dyn\kdynp\dynnp}} \def\dynppp{{\dyn\kdynp\kdynp\dynnp}} +\def\dynpppp{{\dyn\kdynp\kdynp\kdynp\dynnp}} +\def\dynppppp{{\dyn\kdynp\kdynp\kdynp\kdynp\dynnp}} +\def\dynpppppp{{\dyn\kdynp\kdynp\kdynp\kdynp\kdynp\dynnp}} \def\dynmp{{\dyn\dynmm\kern -0.07em\dynnp}} \def\dynmf{{\dyn\dynm\kern -0.14em\dynnf}} \def\dynf{{\dyn\dynaf}} \def\dynff{{\dyn\kdynf\dynnf}} \def\dynfff{{\dyn\kdynf\kdynf\dynnf}} +\def\dynffff{{\dyn\kdynf\kdynf\kdynf\dynnf}} +\def\dynfffff{{\dyn\kdynf\kdynf\kdynf\kdynf\dynnf}} +\def\dynffffff{{\dyn\kdynf\kdynf\kdynf\kdynf\kdynf\dynnf}} \def\dynfp{{\dyn\dynnf\kern -0.04em\dynnp}} +\def\dynsp{{\dyn\dyns\kern -0.13em\dynnp}} +\def\dynspp{{\dyn\dyns\kern -0.13em\kdynp\dynnp}} \def\dynsf{{\dyn\dyns\kern -0.13em\dynnf}} +\def\dynsff{{\dyn\dyns\kern -0.13em\kdynf\dynnf}} \def\dynsfz{{\dyn\dynsf\dynz}} \def\dynfz{{\dyn\dynnf\dynz}} \def\dynrf{{\dyn\dynr\kern -0.1em\dynnf}} +\def\dynfz{{\dyn\dynr\kern -0.1em\dynnf\dynz}} \endinput -- 2.39.2