X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fcontext-def.cc;h=d77b075322ed0433ac17a367f4ffcde327a8f5e1;hb=68d7330f72a14a8df49c49ed1566179248096092;hp=8ae1f52b38fe8448747cea57d7d048e7fb678dd8;hpb=0eb7d103fae1508384b1918069f9b6ef16fe5837;p=lilypond.git diff --git a/lily/context-def.cc b/lily/context-def.cc index 8ae1f52b38..d77b075322 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000--2005 Han-Wen Nienhuys + (c) 2000--2006 Han-Wen Nienhuys */ /* TODO: should junk this class an replace by @@ -11,16 +11,16 @@ #include "context-def.hh" +#include "engraver-group.hh" #include "engraver.hh" +#include "international.hh" #include "output-def.hh" +#include "performer-group.hh" #include "performer.hh" #include "score-context.hh" #include "translator-group.hh" #include "warn.hh" -#include "engraver-group.hh" -#include "performer-group.hh" - Context_def::Context_def () { context_aliases_ = SCM_EOL; @@ -121,15 +121,14 @@ Context_def::add_context_mod (SCM mod) { if (!get_translator (sym)) error (_f ("program has no such type: `%s'", - ly_symbol2string (sym).to_str0 ())); + ly_symbol2string (sym).c_str ())); else translator_mods_ = scm_cons (scm_list_2 (tag, sym), translator_mods_); } else if (ly_symbol2scm ("accepts") == tag || ly_symbol2scm ("denies") == tag) accept_mods_ = scm_cons (scm_list_2 (tag, sym), accept_mods_); - else if (ly_symbol2scm ("poppush") == tag - || ly_symbol2scm ("pop") == tag + else if (ly_symbol2scm ("pop") == tag || ly_symbol2scm ("push") == tag || ly_symbol2scm ("assign") == tag || ly_symbol2scm ("unset") == tag) @@ -193,42 +192,42 @@ Context_def::get_default_child (SCM user_mod) const return name; } -Link_array +vector Context_def::path_to_acceptable_context (SCM type_sym, Output_def *odef) const { assert (scm_is_symbol (type_sym)); SCM accepted = get_accepted (SCM_EOL); - Link_array accepteds; + vector accepteds; for (SCM s = accepted; scm_is_pair (s); s = scm_cdr (s)) if (Context_def *t = unsmob_context_def (find_context_def (odef, scm_car (s)))) - accepteds.push (t); + accepteds.push_back (t); - Link_array best_result; - for (int i = 0; i < accepteds.size (); i++) + vector best_result; + for (vsize i = 0; i < accepteds.size (); i++) { /* do not check aliases, because \context Staff should not create RhythmicStaff. */ if (ly_is_equal (accepteds[i]->get_context_name (), type_sym)) { - best_result.push (accepteds[i]); + best_result.push_back (accepteds[i]); return best_result; } } - int best_depth = INT_MAX; - for (int i = 0; i < accepteds.size (); i++) + vsize best_depth = INT_MAX; + for (vsize i = 0; i < accepteds.size (); i++) { Context_def *g = accepteds[i]; - Link_array result + vector result = g->path_to_acceptable_context (type_sym, odef); if (result.size () && result.size () < best_depth) { best_depth = result.size (); - result.insert (g, 0); + result.insert (result.begin (), g); best_result = result; } } @@ -309,7 +308,7 @@ Context_def::instantiate (SCM ops, Object_key const *key) { Translator *t = get_translator (scm_car (s)); if (!t) - warning (_f ("can't find: `%s'", s)); + warning (_f ("can't find: `%s'", ly_symbol2string (scm_car (s)).c_str ())); else { Translator *tr = t->clone ();