CVSROOT:        /cvsroot/lilypond
Module name:    lilypond
Branch:         
Changes by:     Han-Wen Nienhuys <[EMAIL PROTECTED]>    05/05/03 12:13:28

Modified files:
        .              : ChangeLog 
        Documentation/user: advanced-notation.itely basic-notation.itely 
        lily           : context-def.cc context.cc lily-lexer.cc 
                         note-heads-engraver.cc parser.yy 
        lily/include   : context-def.hh context.hh 
        ly             : engraver-init.ly 

Log message:
        * Documentation/user/basic-notation.itely (Explicitly
        instantiating voices): idem.
        
        * Documentation/user/advanced-notation.itely (Text spanners):
        remove stray { }
        
        * lily/context.cc (default_child_context_name): the default child
        is now first in accepts_list_.
        
        * ly/engraver-init.ly (RemoveEmptyRhythmicStaffContext): add
        \defaultchild to all relevant contexts.  This fixes default voices
        for \drums { } . Most probably, this also fixes similar problems
        with ancient transcriptions getting CueVoices instead of the
        desired voices.
        
        * lily/context-def.cc (get_default_child): new function.
        (get_accepted): place default child in front of list.
        
        * lily/parser.yy (FIXME): add DEFAULTCHILD token.
        
        * lily/include/context-def.hh (struct Context_def): add
        default_accept_

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3534&tr2=1.3535&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/Documentation/user/advanced-notation.itely.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/Documentation/user/basic-notation.itely.diff?tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/context-def.cc.diff?tr1=1.36&tr2=1.37&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/context.cc.diff?tr1=1.54&tr2=1.55&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/lily-lexer.cc.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/note-heads-engraver.cc.diff?tr1=1.99&tr2=1.100&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/parser.yy.diff?tr1=1.467&tr2=1.468&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/context-def.hh.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/context.hh.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ly/engraver-init.ly.diff?tr1=1.227&tr2=1.228&r1=text&r2=text

Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.3534 lilypond/ChangeLog:1.3535
--- lilypond/ChangeLog:1.3534   Tue May  3 11:31:50 2005
+++ lilypond/ChangeLog  Tue May  3 12:13:28 2005
@@ -1,3 +1,28 @@
+2005-05-03  Han-Wen Nienhuys  <[EMAIL PROTECTED]>
+
+       * Documentation/user/basic-notation.itely (Explicitly
+       instantiating voices): idem.
+
+       * Documentation/user/advanced-notation.itely (Text spanners):
+       remove stray { } 
+
+       * lily/context.cc (default_child_context_name): the default child
+       is now first in accepts_list_.
+
+       * ly/engraver-init.ly (RemoveEmptyRhythmicStaffContext): add
+       \defaultchild to all relevant contexts.  This fixes default voices
+       for \drums { } . Most probably, this also fixes similar problems
+       with ancient transcriptions getting CueVoices instead of the
+       desired voices.
+ 
+       * lily/context-def.cc (get_default_child): new function.
+       (get_accepted): place default child in front of list.
+
+       * lily/parser.yy (FIXME): add DEFAULTCHILD token.
+
+       * lily/include/context-def.hh (struct Context_def): add
+       default_accept_
+
 2005-05-03  Graham Percival  <[EMAIL PROTECTED]>
 
        * scm/define-grobs.scm: remove "remove-first" line, since
Index: lilypond/Documentation/user/advanced-notation.itely
diff -u lilypond/Documentation/user/advanced-notation.itely:1.16 
lilypond/Documentation/user/advanced-notation.itely:1.17
--- lilypond/Documentation/user/advanced-notation.itely:1.16    Tue May  3 
08:49:22 2005
+++ lilypond/Documentation/user/advanced-notation.itely Tue May  3 12:13:28 2005
@@ -103,11 +103,11 @@
 
 @refcommands
 
[EMAIL PROTECTED]
[EMAIL PROTECTED] textSpannerUp
 @code{textSpannerUp},
[EMAIL PROTECTED]
[EMAIL PROTECTED] textSpannerDown 
 @code{textSpannerDown},
[EMAIL PROTECTED]
[EMAIL PROTECTED] textSpannerNeutral
 @code{textSpannerNeutral}.
 
 @seealso
Index: lilypond/Documentation/user/basic-notation.itely
diff -u lilypond/Documentation/user/basic-notation.itely:1.11 
lilypond/Documentation/user/basic-notation.itely:1.12
--- lilypond/Documentation/user/basic-notation.itely:1.11       Tue May  3 
08:02:01 2005
+++ lilypond/Documentation/user/basic-notation.itely    Tue May  3 12:13:28 2005
@@ -2267,7 +2267,7 @@
 @end lilypond
 
 Polyphony does not change the relationship of notes within a
[EMAIL PROTECTED] }} block.  Each note is calculated relative
[EMAIL PROTECTED] @{ @}} block.  Each note is calculated relative
 to the note immediately preceding it.
 
 @example
Index: lilypond/lily/context-def.cc
diff -u lilypond/lily/context-def.cc:1.36 lilypond/lily/context-def.cc:1.37
--- lilypond/lily/context-def.cc:1.36   Tue Apr 12 22:49:29 2005
+++ lilypond/lily/context-def.cc        Tue May  3 12:13:28 2005
@@ -26,6 +26,7 @@
   translator_mods_ = SCM_EOL;
   property_ops_ = SCM_EOL;
   context_name_ = SCM_EOL;
+  default_child_ = SCM_EOL;
   description_ = SCM_EOL;
 
   smobify_self ();
@@ -43,10 +44,12 @@
   property_ops_ = SCM_EOL;
   context_name_ = SCM_EOL;
   description_ = SCM_EOL;
+  default_child_ = SCM_EOL;
 
   smobify_self ();
   description_ = s.description_;
 
+  default_child_ = s.default_child_;
   accept_mods_ = s.accept_mods_;
   property_ops_ = s.property_ops_;
   translator_mods_ = s.translator_mods_;
@@ -85,6 +88,7 @@
   scm_gc_mark (me->translator_mods_);
   scm_gc_mark (me->property_ops_);
   scm_gc_mark (me->translator_group_type_);
+  scm_gc_mark (me->default_child_);
 
   return me->context_name_;
 }
@@ -99,11 +103,18 @@
       return;
     }
 
+  /*
+    other modifiers take symbols as argument. 
+  */
   SCM sym = scm_cadr (mod);
   if (scm_is_string (sym))
     sym = scm_string_to_symbol (sym);
 
-  if (ly_symbol2scm ("consists") == tag
+  if (ly_symbol2scm ("default-child") == tag)
+    {
+      default_child_ = scm_cadr (mod);
+    }
+  else if (ly_symbol2scm ("consists") == tag
       || ly_symbol2scm ("consists-end") == tag
       || ly_symbol2scm ("remove") == tag)
     {
@@ -152,9 +163,36 @@
       else if (tag == ly_symbol2scm ("denies"))
        acc = scm_delete_x (sym, acc);
     }
+
+  SCM def = get_default_child (user_mod);
+  if (scm_is_symbol (def))
+    {
+      if (scm_memq (def, acc))
+       acc = scm_delete_x (def, acc);
+      acc = scm_cons (def, acc);
+    }
+  
   return acc;
 }
 
+
+SCM
+Context_def::get_default_child (SCM user_mod) const
+{
+  SCM name = default_child_;
+  for (SCM s = user_mod; scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM entry = scm_car (s);
+      if (scm_car (entry) == ly_symbol2scm ("default-child"))
+       {
+         name = scm_cadr (entry);
+         break;
+       }
+    }
+
+  return name;
+}
+
 Link_array<Context_def>
 Context_def::path_to_acceptable_context (SCM type_sym, Output_def *odef) const
 {
@@ -306,6 +344,12 @@
        }
     }
 
+
+  /*
+    Ugh,  todo: should just make a private
+    copy of Context_def with the user mods.
+  */
+
   g->simple_trans_list_ = trans_list;
 
   tg->implementation_ = g->self_scm ();
@@ -320,7 +364,7 @@
   scm_gc_unprotect_object (g->self_scm ());
 
   tg->accepts_list_ = get_accepted (ops);
-
+    
   return tg;
 }
 
Index: lilypond/lily/context.cc
diff -u lilypond/lily/context.cc:1.54 lilypond/lily/context.cc:1.55
--- lilypond/lily/context.cc:1.54       Tue Apr 12 22:49:29 2005
+++ lilypond/lily/context.cc    Tue May  3 12:13:28 2005
@@ -276,7 +276,7 @@
 Context::default_child_context_name () const
 {
   return scm_is_pair (accepts_list_)
-    ? scm_car (scm_last_pair (accepts_list_))
+    ? scm_car (accepts_list_) 
     : SCM_EOL;
 }
 
Index: lilypond/lily/include/context-def.hh
diff -u lilypond/lily/include/context-def.hh:1.10 
lilypond/lily/include/context-def.hh:1.11
--- lilypond/lily/include/context-def.hh:1.10   Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/context-def.hh        Tue May  3 12:13:28 2005
@@ -30,12 +30,13 @@
   SCM context_name_;
   SCM context_aliases_;
   SCM translator_group_type_;
-
+  SCM default_child_;
+  
 public:
   void add_context_mod (SCM);
-  SCM default_child_context_name ();
+  SCM get_default_child (SCM user_mods) const;
   SCM get_context_name () const;
-  SCM get_accepted (SCM) const;
+  SCM get_accepted (SCM user_mods) const;
   SCM get_property_ops () const { return property_ops_; }
   SCM get_translator_names (SCM) const;
   void set_acceptor (SCM accepts, bool add);
Index: lilypond/lily/include/context.hh
diff -u lilypond/lily/include/context.hh:1.21 
lilypond/lily/include/context.hh:1.22
--- lilypond/lily/include/context.hh:1.21       Wed Mar 16 19:19:15 2005
+++ lilypond/lily/include/context.hh    Tue May  3 12:13:28 2005
@@ -35,6 +35,7 @@
   Object_key const *key_;
   Context *daddy_context_;
   SCM definition_;
+
   SCM properties_scm_;
   SCM context_list_;
   SCM accepts_list_;
Index: lilypond/lily/lily-lexer.cc
diff -u lilypond/lily/lily-lexer.cc:1.27 lilypond/lily/lily-lexer.cc:1.28
--- lilypond/lily/lily-lexer.cc:1.27    Thu Apr 14 20:02:25 2005
+++ lilypond/lily/lily-lexer.cc Tue May  3 12:13:28 2005
@@ -36,6 +36,7 @@
   {"consists", CONSISTS},
   {"context", CONTEXT},
   {"default", DEFAULT},
+  {"defaultchild", DEFAULTCHILD},
   {"denies", DENIES},
   {"description", DESCRIPTION},
   {"drummode", DRUMMODE},
Index: lilypond/lily/note-heads-engraver.cc
diff -u lilypond/lily/note-heads-engraver.cc:1.99 
lilypond/lily/note-heads-engraver.cc:1.100
--- lilypond/lily/note-heads-engraver.cc:1.99   Thu Apr 21 15:20:45 2005
+++ lilypond/lily/note-heads-engraver.cc        Tue May  3 12:13:28 2005
@@ -74,7 +74,10 @@
        }
 
       Pitch *pit = unsmob_pitch (ev->get_property ("pitch"));
-
+      if (!pit)
+       {
+         ev->origin ()->warning (_ ("NoteEvent without pitch"));
+       }
       int pos = pit ? pit->steps () : 0;
       SCM c0 = get_property ("middleCPosition");
       if (scm_is_number (c0))
Index: lilypond/lily/parser.yy
diff -u lilypond/lily/parser.yy:1.467 lilypond/lily/parser.yy:1.468
--- lilypond/lily/parser.yy:1.467       Sat Apr 30 22:42:54 2005
+++ lilypond/lily/parser.yy     Tue May  3 12:13:28 2005
@@ -279,6 +279,7 @@
 %token CONSISTS "\\consists"
 %token CONTEXT "\\context"
 %token DEFAULT "\\default"
+%token DEFAULTCHILD "\\defaultchild"
 %token DENIES "\\denies"
 %token DESCRIPTION "\\description"
 %token DRUMMODE "\\drummode"
@@ -1423,6 +1424,7 @@
        | REMOVE { $$ = ly_symbol2scm ("remove"); }
 
        | ACCEPTS { $$ = ly_symbol2scm ("accepts"); }
+       | DEFAULTCHILD { $$ = ly_symbol2scm ("default-child"); }
        | DENIES { $$ = ly_symbol2scm ("denies"); }
 
        | ALIAS { $$ = ly_symbol2scm ("alias"); }
Index: lilypond/ly/engraver-init.ly
diff -u lilypond/ly/engraver-init.ly:1.227 lilypond/ly/engraver-init.ly:1.228
--- lilypond/ly/engraver-init.ly:1.227  Thu Apr 21 14:28:31 2005
+++ lilypond/ly/engraver-init.ly        Tue May  3 12:13:28 2005
@@ -4,6 +4,7 @@
   \name Global
 
   \accepts Score
+  \defaultchild Score
   \description "Hard coded entry point for LilyPond. Cannot be tuned."
   \grobdescriptions #all-grob-descriptions    
 }
@@ -50,6 +51,7 @@
   instrument = #'()
   instr = #'()
   
+  \defaultchild "Voice"
   \accepts "Voice"
   \accepts "CueVoice"
   
@@ -63,7 +65,6 @@
   \type "Engraver_group_engraver"
   \name DrumStaff
   \alias Staff
-
   \remove "Accidental_engraver"
   \remove "Ottava_spanner_engraver"
   \remove "Key_engraver" 
@@ -74,6 +75,7 @@
 
   \denies Voice
   \accepts DrumVoice
+  \defaultchild DrumVoice
 
   clefGlyph = #"clefs.percussion"
   clefPosition = #0
@@ -94,12 +96,14 @@
   \accepts "PianoStaff"
   \accepts "Lyrics"
   \accepts "ChordNames"
+  \defaultchild "Staff"
 }
 
 \context {
   \InnerChoirStaff
   \name ChoirStaff
   
+  \defaultchild "InnerChoirStaff"
   \accepts "InnerChoirStaff"
   \accepts "InnerStaffGroup"
   \description "Identical to @code{StaffGroup} except that the
@@ -142,6 +146,7 @@
   \consists "Axis_group_engraver"
   \accepts "Voice"
   \accepts "CueVoice"
+  \defaultchild "Voice"
   \description  "
     A context like @code{Staff} but for printing rhythms.  Pitches are
     ignored; the notes are printed on one line.  
@@ -428,6 +433,7 @@
   \consists "Bar_number_engraver"
   \consists "Span_arpeggio_engraver"
 
+  \defaultchild "Staff"
   \accepts "Staff"
   \accepts "TabStaff"
   \accepts "VaticanaStaff"
@@ -579,12 +585,12 @@
 \context {
   \type "Engraver_group_engraver"
   \name FiguredBass 
+
   \consists "Figured_bass_engraver"
   \consists "Rest_swallow_translator"
   \consists "Note_swallow_translator"
   \consists "Skip_event_swallow_translator"
   \consists "Separating_line_group_engraver"
-  
   \consists "Hara_kiri_engraver"
 }
 
@@ -639,6 +645,7 @@
   \description "Context for generating tablature. [DOCME]"
 
   \accepts "TabVoice"
+  \defaultchild "TabVoice"
   
   %% 6 strings
   \override StaffSymbol #'staff-space = #1.5
@@ -713,6 +720,8 @@
   \alias "Staff"
   \denies "Voice"
   \accepts "VaticanaVoice"
+  \defaultchild "VaticanaVoice"
+
   \description "Same as @code{Staff} context, except that it is accommodated 
for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
 
   \remove "Time_signature_engraver"
@@ -787,6 +796,7 @@
   \alias "Staff"
   \denies "Voice"
   \accepts "GregorianTranscriptionVoice"
+  \defaultchild "GregorianTranscriptionVoice"
 
   %% We can not remove Bar_engraver; otherwise clefs and custodes will
   %% not show up any more among other line breaking issues.
@@ -816,6 +826,7 @@
   \name "MensuralStaff"
   \alias "Staff"
   \denies "Voice"
+  \defaultchild "MensuralVoice"
   \accepts "MensuralVoice"
   \description "Same as @code{Staff} context, except that it is accommodated 
for tyepsetting a piece in mensural style."
 


_______________________________________________
Lilypond-cvs mailing list
Lilypond-cvs@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-cvs

Reply via email to