From 0119396bf047bbc0a6debd06f48e6d18573e2303 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 10 Mar 2001 23:37:38 +0100 Subject: [PATCH] patch::: 1.3.136.jcn2 1.3.136.jcn2 ============ * Bugfix and small addition to convert-ly. * Bugfix: ly2dvi: create --outdir before copying there. * Bugfix: mutopia letter target. * Some bugfixes and checks for killed spanners, reducing warnings in Coriolan from 1143 to 283. Part combiner still gives rise to many foreseeable warnings. --- CHANGES | 13 ++++++++ VERSION | 2 +- input/bugs/pc-mmrest.ly | 29 +++++++++++++++++ lily/dynamic-engraver.cc | 32 ++++++++++++++++--- lily/lexer.ll | 2 +- lily/multi-measure-rest-engraver.cc | 2 +- lily/multi-measure-rest.cc | 6 ++++ lily/parser.yy | 4 +-- lily/rest-collision.cc | 4 +-- lily/score-engraver.cc | 10 ++++-- lily/slur-engraver.cc | 2 ++ lily/thread-devnull-engraver.cc | 7 +++-- lily/tie-engraver.cc | 2 ++ lily/voice-devnull-engraver.cc | 42 +++++++++++++++---------- ly/engraver.ly | 5 +-- make/mutopia-rules.make | 2 +- mutopia/Coriolan/coriolan-paper.ly | 13 +++++--- mutopia/Coriolan/coriolan-part-paper.ly | 10 +++--- mutopia/Coriolan/fagotto-2.ly | 4 +-- mutopia/Coriolan/oboe-1.ly | 6 ++-- scm/grob-description.scm | 2 +- scm/midi.scm | 2 +- scripts/convert-ly.py | 22 ++++++++----- scripts/ly2dvi.py | 2 ++ 24 files changed, 166 insertions(+), 59 deletions(-) create mode 100644 input/bugs/pc-mmrest.ly diff --git a/CHANGES b/CHANGES index a48bc18d5b..3da27c528e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,16 @@ +1.3.136.jcn2 +============ + +* Bugfix and small addition to convert-ly. + +* Bugfix: ly2dvi: create --outdir before copying there. + +* Bugfix: mutopia letter target. + +* Some bugfixes and checks for killed spanners, reducing warnings in +Coriolan from 1143 to 283. Part combiner still gives rise to many +foreseeable warnings. + 1.3.136.jcn1 ============ diff --git a/VERSION b/VERSION index a31bf24784..f21e2fd23d 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=136 -MY_PATCH_LEVEL=jcn1 +MY_PATCH_LEVEL=jcn2 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/bugs/pc-mmrest.ly b/input/bugs/pc-mmrest.ly new file mode 100644 index 0000000000..4071a597d6 --- /dev/null +++ b/input/bugs/pc-mmrest.ly @@ -0,0 +1,29 @@ +% +% mmrests of second voice should not disappear +% +% the problem is more complex: the mmrest-engraver lives at staff level, +% but it seems that we need one per voice. +% +\score { + \notes < + \context Staff = Viole < + \context Voice=one \partcombine Voice + \context Thread=one \relative c''{ R1 d4 d d d } + \context Thread=two { R1*2 } + > + > + \paper { +% { + \translator { + \StaffContext + \remove Multi_measure_rest_engraver; + \remove Bar_engraver; + } + \translator { + \VoiceContext + \consists Multi_measure_rest_engraver; + \consists Bar_engraver; + } +% } + } +} \ No newline at end of file diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 24a3cef14a..e97858ea67 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -297,12 +297,19 @@ void Dynamic_engraver::finalize () { typeset_all (); + + if (line_spanner_ + && line_spanner_->immutable_property_alist_ == SCM_EOL) + line_spanner_ = 0; if (line_spanner_) { finished_line_spanner_ = line_spanner_; typeset_all (); } + if (cresc_p_ + && cresc_p_->immutable_property_alist_ == SCM_EOL) + cresc_p_ = 0; if (cresc_p_) { current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo")); @@ -314,6 +321,19 @@ Dynamic_engraver::finalize () void Dynamic_engraver::typeset_all () { + /* + remove suicided spanners, + ugh: we'll need this for every spanner, beam, slur + Hmm, how to do this, cleanly? + Maybe just check at typeset_grob ()? + */ + if (finished_cresc_p_ + && finished_cresc_p_->immutable_property_alist_ == SCM_EOL) + finished_cresc_p_ = 0; + if (finished_line_spanner_ + && finished_line_spanner_->immutable_property_alist_ == SCM_EOL) + finished_line_spanner_ = 0; + if (finished_cresc_p_) { if (!finished_cresc_p_->get_bound (RIGHT)) @@ -337,10 +357,9 @@ Dynamic_engraver::typeset_all () } if (finished_line_spanner_) { - /* - To make sure that this works - */ + /* To make sure that this works */ Side_position_interface::add_staff_support (finished_line_spanner_); + /* We used to have @@ -352,7 +371,8 @@ Dynamic_engraver::typeset_all () */ - if (!finished_line_spanner_->get_bound (RIGHT)) + if (!finished_line_spanner_->get_bound (RIGHT) + && finished_line_spanner_->get_bound (LEFT)) finished_line_spanner_->set_bound (RIGHT, finished_line_spanner_->get_bound (LEFT)); typeset_grob (finished_line_spanner_); @@ -365,7 +385,9 @@ Dynamic_engraver::acknowledge_grob (Grob_info i) { if (Note_column::has_interface (i.elem_l_)) { - if (line_spanner_) + if (line_spanner_ + /* Don't refill killed spanner */ + && line_spanner_->immutable_property_alist_ != SCM_EOL) { Side_position_interface::add_support (line_spanner_,i.elem_l_); add_bound_item (line_spanner_,dynamic_cast(i.elem_l_)); diff --git a/lily/lexer.ll b/lily/lexer.ll index c86168a224..e271bb1ada 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -214,7 +214,7 @@ HYPHEN -- return RESTNAME; } R { - return MEASURES; + return MULTI_MEASURE_REST; } \\\${BLACK}*{WHITE} { String s=YYText () + 2; diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 328b9a2d77..369f42dcd1 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -96,7 +96,7 @@ Multi_measure_rest_engraver::try_music (Music* req_l) void Multi_measure_rest_engraver::process_music () { - if (new_req_l_ && stop_req_l_) + if (new_req_l_ && stop_req_l_) stop_req_l_ = 0; if (new_req_l_) diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 80849691be..2138a3de0e 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -41,6 +41,12 @@ SCM Multi_measure_rest::brew_molecule (SCM smob) { Grob *me = unsmob_grob (smob); + if (to_boolean (me->get_grob_property ("skip-timestep"))) + { + me->set_grob_property ("skip-timestep", SCM_EOL); + return SCM_EOL; + } + Spanner * sp = dynamic_cast (me); SCM alist_chain = Font_interface::font_alist_chain (me); diff --git a/lily/parser.yy b/lily/parser.yy index 32dc7fc492..1583e0e6e4 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -167,7 +167,7 @@ yylex (YYSTYPE *s, void * v_l) %token KEY %token LYRICS %token MARK -%token MEASURES +%token MULTI_MEASURE_REST %token MIDI %token MM_T %token PITCH @@ -1629,7 +1629,7 @@ FIXME: location is one off, since ptich & duration don't contain origin refs. $$ = velt_p; } - | MEASURES optional_notemode_duration { + | MULTI_MEASURE_REST optional_notemode_duration { Skip_req * sk = new Skip_req; sk->set_mus_property ("duration", $2); Span_req *sp1 = new Span_req; diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 013953e51a..aaaa743fd1 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -54,8 +54,8 @@ Rest_collision::add_column (Grob*me,Grob *p) (not?) */ - p->add_offset_callback (Rest_collision::force_shift_callback_proc, Y_AXIS); - p->set_grob_property ("rest-collision", me->self_scm ()); + p->add_offset_callback (Rest_collision::force_shift_callback_proc, Y_AXIS); + p->set_grob_property ("rest-collision", me->self_scm ()); } diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 40ed1a3a5a..5f39102e27 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -174,9 +174,15 @@ Score_engraver::typeset_all() if (!s->get_bound (d)) { s->set_bound(d, command_column_l_); - ::warning (_f ("unbound spanner `%s'", s->name().ch_C())); + /* don't warn for empty/suicided spanners, + it makes real warningsinvisible. + maybe should be junked earlier? */ + if (elem_p->immutable_property_alist_ == SCM_EOL) + ; // gdb hook + else + ::warning (_f ("unbound spanner `%s'", s->name ().ch_C ())); } - } while (flip(&d) != LEFT); + } while (flip (&d) != LEFT); } else { diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index e3f31f1786..9c26cddd89 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -139,6 +139,8 @@ Slur_engraver::create_grobs () if (slur_req_l->get_span_dir() == STOP) { if (slur_l_stack_.empty ()) + /* How to shut up this warning, when Voice_devnull_engraver has + eaten start request? */ slur_req_l->origin ()->warning (_f ("can't find start of slur")); else { diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc index 58aa56cb3d..9e995b2f74 100644 --- a/lily/thread-devnull-engraver.cc +++ b/lily/thread-devnull-engraver.cc @@ -27,7 +27,7 @@ Thread_devnull_engraver::acknowledge_grob (Grob_info i) { SCM s = get_property ("devNullThread"); #if 0 - /* No need */ + /* No need, next if will never be true */ if (s == ly_symbol2scm ("never")) return; #endif @@ -38,5 +38,8 @@ Thread_devnull_engraver::acknowledge_grob (Grob_info i) && (to_boolean (get_property ("unison")) || to_boolean (get_property ("unisilence"))) && to_boolean (get_property ("soloADue")))) - i.elem_l_->suicide (); + { + /* Ugh, we can suicide them, but they remain living */ + i.elem_l_->suicide (); + } } diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 2d65a00d02..b81db0a02a 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -208,6 +208,8 @@ Tie_engraver::stop_translation_timestep () if (req_l_ && !tie_p_arr_.size ()) { + /* How to shut up this warning, when no notes appeared because + they were suicided by Thread_devnull_engraver? */ req_l_->origin ()->warning (_ ("No ties were created!")); } diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc index 4f82c4f4e8..9869784a70 100644 --- a/lily/voice-devnull-engraver.cc +++ b/lily/voice-devnull-engraver.cc @@ -24,11 +24,10 @@ protected: ADD_THIS_TRANSLATOR (Voice_devnull_engraver); static char const *eat_spanners[] = { - "beam-interface", + "beam", + "crescendo", + "decrescendo", "slur", - "tie", - "dynamic-interface", - "crescendo-interface", 0 }; @@ -48,34 +47,35 @@ Voice_devnull_engraver::try_music (Music *m) && (to_boolean (get_property ("unison")) || to_boolean (get_property ("unisilence"))))) { - for (char const **p = eat_spanners; *p; p++) + if (Span_req *s = dynamic_cast (m)) { - if (Span_req *s = dynamic_cast (m)) + SCM t = s->get_mus_property ("span-type"); + + for (char const **p = eat_spanners; *p; p++) { - if (scm_equal_p (s->get_mus_property ("span-type"), - ly_str02scm ( *p)) == SCM_BOOL_T) - { - return true; - } + if (t == ly_str02scm (*p)) + return true; } } + /* Ugh. Should eat other requests, script etc. too. */ + else if (Tie_req *t = dynamic_cast (m)) + return true; } return false; } static char const *junk_interfaces[] = { -#if 1 "beam-interface", -#endif + "dynamic-interface", + "hairpin-interface", + "multi-measure-rest-interface", "script-interface", "slur-interface", - "tie-interface", "text-interface", "text-item-interface", "text-script-interface", - "dynamic-interface", - "hairpin-interface", "text-spanner-interface", + "tie-interface", 0 }; @@ -84,7 +84,7 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i) { SCM s = get_property ("devNullVoice"); #if 0 - /* No need */ + /* No need, next if will never be true */ if (s == ly_symbol2scm ("never")) return; #endif @@ -97,6 +97,14 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i) for (char const **p = junk_interfaces; *p; p++) if (i.elem_l_->has_interface (ly_symbol2scm (*p))) { +#if 0 + /* Ugh: virtual mmrest::suicide () ? */ + if (i.elem_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface"))) + i.elem_l_->set_grob_property ("skip-timestep", SCM_BOOL_T); + else + ; +#endif + /* Ugh, we can suicide them, but they remain living */ i.elem_l_->suicide (); return; } diff --git a/ly/engraver.ly b/ly/engraver.ly index c71b63ba58..b5aad036d9 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -104,7 +104,9 @@ VoiceContext = \translator { \name Voice; Generic_property_list = #generic-voice-properties - + + % must come before all + \consists "Voice_devnull_engraver"; \consists "Output_property_engraver"; \consists "Arpeggio_engraver"; @@ -137,7 +139,6 @@ VoiceContext = \translator { \consists "Tuplet_engraver"; \consists "Grace_position_engraver"; \consists "A2_engraver"; - \consists "Voice_devnull_engraver"; \consists "Skip_req_swallow_translator"; \accepts Thread; % bug if you leave out this! diff --git a/make/mutopia-rules.make b/make/mutopia-rules.make index f31f882320..a901a3be97 100644 --- a/make/mutopia-rules.make +++ b/make/mutopia-rules.make @@ -31,5 +31,5 @@ $(outdir)/%.dvi: %.ly $(PYTHON) $(LY2DVI) --outdir=$(outdir) --dependencies $< $(outdir)-$(PAPERSIZE)/%.dvi: %.ly - $(PYTHON) $(LY2DVI) --outdir=$(outdir)-$(PAPERSIZE) --dependencies --papersize=$(PAPERSIZE) $< + $(PYTHON) $(LY2DVI) --outdir=$(outdir)-$(PAPERSIZE) --dependencies --set=papersize=$(PAPERSIZE) $< diff --git a/mutopia/Coriolan/coriolan-paper.ly b/mutopia/Coriolan/coriolan-paper.ly index 56d271a8f2..abdc99a0b1 100644 --- a/mutopia/Coriolan/coriolan-paper.ly +++ b/mutopia/Coriolan/coriolan-paper.ly @@ -34,17 +34,20 @@ %% devNullThread = #'never \consists "Thread_devnull_engraver"; - %\remove "Dynamic_engraver"; - %\remove "Text_engraver"; + % While adds brings back rests of second voice, + % it prints some on the bar lines and it is messy + % because collisions don't work. Also, it increases + % memory usage from 91M RSS, to 116M. + %\consists "Multi_measure_rest_engraver"; + %\consists "Bar_engraver"; } \translator { \HaraKiriStaffContext - - %\consists "Dynamic_engraver"; - %\consists "Text_engraver"; \consists "Mark_engraver"; MultiMeasureRest \override #'minimum-width = #6 + %\remove "Multi_measure_rest_engraver"; + %\remove "Bar_engraver"; } \translator { \OrchestralScoreContext diff --git a/mutopia/Coriolan/coriolan-part-paper.ly b/mutopia/Coriolan/coriolan-part-paper.ly index 6eca4d7b2e..75dbc1a545 100644 --- a/mutopia/Coriolan/coriolan-part-paper.ly +++ b/mutopia/Coriolan/coriolan-part-paper.ly @@ -33,19 +33,19 @@ %% devNullThread = #'never \consists "Thread_devnull_engraver"; - %\remove "Dynamic_engraver"; - %\remove "Text_engraver"; + %\consists "Multi_measure_rest_engraver"; + %\consists "Bar_engraver"; } % We need the HaraKiri staff for Staff Combining, % but we better remove the Instrument_name_engraver. \translator { \HaraKiriStaffContext - %\consists "Dynamic_engraver"; - %\consists "Text_engraver"; - \consists "Mark_engraver"; \remove "Instrument_name_engraver"; + + %\remove "Multi_measure_rest_engraver"; + %\remove "Bar_engraver"; } \translator { \OrchestralScoreContext diff --git a/mutopia/Coriolan/fagotto-2.ly b/mutopia/Coriolan/fagotto-2.ly index 691af797da..40475c2c11 100644 --- a/mutopia/Coriolan/fagotto-2.ly +++ b/mutopia/Coriolan/fagotto-2.ly @@ -172,8 +172,8 @@ fagottoII = \notes \relative c { b,2\sf r| b\sf r| R1*3| - bes2 r\ff| - bes2 r\sf| + bes2\ff r| + bes2\sf r| R1*2| r2 r4 bes\ff(| )as2. bes4\sf(| diff --git a/mutopia/Coriolan/oboe-1.ly b/mutopia/Coriolan/oboe-1.ly index 72cf4b454f..09f4623371 100644 --- a/mutopia/Coriolan/oboe-1.ly +++ b/mutopia/Coriolan/oboe-1.ly @@ -258,9 +258,11 @@ oboeI = \notes \relative c'' { R1| c4-. g-. r2| as4-. e-. r2| - f4-"dim" r f r| + \property Voice.decrescendoText = #"dim." + \property Voice.decrescendoSpanner = #'dashed-line + f4\> r f r| R1| - es4\p r r2| + \!es4\p r r2| R1| d4 r r2| R1| diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 43c809c865..2918e7685f 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -310,7 +310,7 @@ (minimum-width . 12.5) ; staffspace (font-family . number) (font-relative-size . 1) - (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface font-interface )) + (meta . ,(grob-description "MultiMeasureRest" multi-measure-rest-interface rest-interface font-interface )) )) (NoteCollision . ( (axes 0 1) diff --git a/scm/midi.scm b/scm/midi.scm index c2cdabe9e8..0d8f588e56 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -33,7 +33,7 @@ (set! instrument-equaliser-alist (append '( - ("flute" . (0 . 0.6)) + ("flute" . (0 . 0.7)) ("oboe" . (0 . 0.7)) ("clarinet" . (0 . 0.7)) ("bassoon" . (0 . 0.6)) diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 2596951399..c37c2b6ab1 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -24,8 +24,10 @@ import string import re import time -lilypond_version_re_str = '\\\\version *\"(.*)\"' -lilypond_version_re = re.compile(lilypond_version_re_str) +# Did we ever have \mudela-version? I doubt it. +# lilypond_version_re_str = '\\\\version *\"(.*)\"' +lilypond_version_re_str = '\\\\(mudela-)?version *\"(.*)\"' +lilypond_version_re = re.compile (lilypond_version_re_str) def program_id (): return '%s (GNU LilyPond) %s' %(program_name, version); @@ -92,11 +94,11 @@ def version_cmp (t1, t2): return t1[x] - t2[x] return 0 -def guess_lilypond_version(filename): +def guess_lilypond_version (filename): s = gulp_file (filename) m = lilypond_version_re.search (s) if m: - return m.group(1) + return m.group (2) else: return '' @@ -177,6 +179,8 @@ if 1: if 1: def conv(str): str = re.sub ('\\\\melodic', '\\\\notes',str) + if re.search ('\\\\header', str): + sys.stderr.write ('\nNot smart enough to convert \\multi constructs') return str @@ -185,8 +189,7 @@ if 1: if 1: def conv(str): str = re.sub ('default_paper *=', '',str) - str = re.sub ('default_midi *=', '',x) - + str = re.sub ('default_midi *=', '',str) return str conversions.append (((1,0,4), conv, 'default_{paper,midi}')) @@ -570,7 +573,7 @@ if 1: str = re.sub ('\\\\property *"?([^.]+)"? *[.] *"?timeSignatureStyle"? *= *"([^"]*)"', '\\\\property \\1.TimeSignature \\\\override #\'style = #\'\\2', str) - str = re.sub ('"?timeSignatureStyle"? *= *#?""', 'TimeSignature \\\\override #\'style = ##f, str) + str = re.sub ('"?timeSignatureStyle"? *= *#?""', 'TimeSignature \\\\override #\'style = ##f', str) str = re.sub ('"?timeSignatureStyle"? *= *#?"([^"]*)"', 'TimeSignature \\\\override #\'style = #\'\\1', str) @@ -810,4 +813,9 @@ for f in files: try: do_one_file (f) except UnknownVersion: + sys.stderr.write ('\n') + sys.stderr.write ("%s: can't determine version for %s" % (program_name, f)) + sys.stderr.write ('\n') + sys.stderr.write ("%s: skipping" % program_name) pass +sys.stderr.write ('\n') diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 522800c78a..3127bc3280 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -532,6 +532,8 @@ if files: type = 'DVI' dest = os.path.join (outdir, dest) + if outdir != '.': + system ('mkdir -p %s' % outdir) system ('cp \"%s\" \"%s\"' % (srcname, dest )) system ('cp *.midi %s' % outdir, ignore_error = 1) -- 2.39.2