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
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs