]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.136.jcn2
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 10 Mar 2001 22:37:38 +0000 (23:37 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 10 Mar 2001 22:37:38 +0000 (23:37 +0100)
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.

24 files changed:
CHANGES
VERSION
input/bugs/pc-mmrest.ly [new file with mode: 0644]
lily/dynamic-engraver.cc
lily/lexer.ll
lily/multi-measure-rest-engraver.cc
lily/multi-measure-rest.cc
lily/parser.yy
lily/rest-collision.cc
lily/score-engraver.cc
lily/slur-engraver.cc
lily/thread-devnull-engraver.cc
lily/tie-engraver.cc
lily/voice-devnull-engraver.cc
ly/engraver.ly
make/mutopia-rules.make
mutopia/Coriolan/coriolan-paper.ly
mutopia/Coriolan/coriolan-part-paper.ly
mutopia/Coriolan/fagotto-2.ly
mutopia/Coriolan/oboe-1.ly
scm/grob-description.scm
scm/midi.scm
scripts/convert-ly.py
scripts/ly2dvi.py

diff --git a/CHANGES b/CHANGES
index a48bc18d5b387bec17e723215fcdd3958dde262e..3da27c528ee60f4f1da4a3adafe604f06cc1fe69 100644 (file)
--- 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 a31bf24784a1bd8c575189113ac945dbdb5ef730..f21e2fd23de8460e8d60097a180d16ec2504df56 100644 (file)
--- 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 (file)
index 0000000..4071a59
--- /dev/null
@@ -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
index 24a3cef14a72548969e38aaa4cb8f0b64c40bf6b..e97858ea673f8c7341dd463d3364bde4d3e1db56 100644 (file)
@@ -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<Item*>(i.elem_l_));
index c86168a224e5c4b59ff9ba20a44058edbf420faf..e271bb1ada28c3628b4334c6155d00869cd2eaa4 100644 (file)
@@ -214,7 +214,7 @@ HYPHEN              --
        return RESTNAME;
 }
 <chords,notes>R                {
-       return MEASURES;
+       return MULTI_MEASURE_REST;
 }
 <INITIAL,chords,lyrics,notes>\\\${BLACK}*{WHITE}       {
        String s=YYText () + 2;
index 328b9a2d779ffa8729c0fe2df55d6eb074805941..369f42dcd1842dc8c9c9f9a58a018854122b1524 100644 (file)
@@ -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_)
index 80849691beb8dd993781cecf4a1b9fde3afcba9e..2138a3de0eb6b2e13d95279fa36835b4c5abf2c5 100644 (file)
@@ -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<Spanner*> (me);
 
   SCM alist_chain = Font_interface::font_alist_chain (me);
index 32dc7fc492ecd0715393856670d21c9730714b72..1583e0e6e4bcf7daf2bd15e37a54bd3ecd81c0b3 100644 (file)
@@ -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;
index 013953e51aa7cc09c73a903c6235dca9a2813402..aaaa743fd1904ac9b3b538b75f28904fc0302ba8 100644 (file)
@@ -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 ());
 }
 
 
index 40ed1a3a5a230939f42be3d42addf330944cd4b5..5f39102e276c38366a44efbf9bcc1fa7cd5f9b0f 100644 (file)
@@ -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 
        {
index e3f31f178653dccf9fd0af203fc366ab61cf720c..9c26cddd89208afb75924662728e63ddea8ed0d9 100644 (file)
@@ -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
            {
index 58aa56cb3d468d9cf0183c0c1c85f4851722c35a..9e995b2f741183c2c7a23dfc16c7a0e218d7763b 100644 (file)
@@ -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 ();
+    }
 }
index 2d65a00d02295a24b43cc9e43a9037e0efc621db..b81db0a02affa07855f16c4be69146ae29eab5b2 100644 (file)
@@ -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!"));
     }
   
index 4f82c4f4e8ea679481ae7d08958376085828cbf7..9869784a70b15e9234954a8425ffec1143660722 100644 (file)
@@ -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 <Span_req *> (m))
        {
-         if (Span_req *s = dynamic_cast <Span_req *> (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<Tie_req*> (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;
        }
index c71b63ba58e9fec989323fd8a54ca3e547b5f388..b5aad036d971003a1ad811e201e3d371b643de54 100644 (file)
@@ -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!
index f31f882320ea523a26156be6f47d2e7dd88ab38a..a901a3be97e2e1ac2d72aa22cbf8035d785fdec4 100644 (file)
@@ -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) $< 
 
index 56d271a8f29c400ad5431fa30b60c2b60b4f96c2..abdc99a0b132442161e232dce56824130ba634a6 100644 (file)
                %% 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
index 6eca4d7b2e7f7267228546fc3fbed2bda1a81799..75dbc1a545198081e8a8c2666fb7f3446423e433 100644 (file)
                %% 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
index 691af797daaaa5f269a655894fdbdb9ce03e64df..40475c2c112c6326be56b9265405d0d69f6c3f87 100644 (file)
@@ -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(|
index 72cf4b454f5a0a4e88dcc5f4806563480611ebcf..09f4623371de20cfdde609b450a2550636af8945 100644 (file)
@@ -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|
index 43c809c8655650d2db293bd8eeedf27331244dee..2918e7685f8e2820d4e3792d81de8e887b88ef64 100644 (file)
                (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)
index c2cdabe9e871cdd6f108191a3becb8830c0d7d73..0d8f588e561f1f38d003374d692728175609b7a7 100644 (file)
@@ -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))
index 2596951399e808cb135864a93c6051601e79e168..c37c2b6ab118bf4247898b5d0e2438570c2e4a31 100644 (file)
@@ -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')
index 522800c78a09f734682f3e87a9c4179e9140b296..3127bc32806f649d284ee902179f40f48f3de676 100644 (file)
@@ -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)