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