X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscript.cc;h=7143a308af9ce4e07e52467e3f0f2f505371da7d;hb=df4a7c4a55148e065d878dcc2f7e09ac27ea9c32;hp=b350c8e7c91a0ac39946c8901ebc5c9f4de5c471;hpb=7c9b553acad88d5cd62461989f0f20652dc04dda;p=lilypond.git diff --git a/lily/script.cc b/lily/script.cc index b350c8e7c9..7143a308af 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -1,104 +1,79 @@ -/* - script.cc -- implement Script - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - -#include "musical-request.hh" -#include "paper-def.hh" +/* + script.cc -- implement Script + + source file of the GNU LilyPond music typesetter + + (c) 1999--2000 Han-Wen Nienhuys + + */ + +#include "debug.hh" #include "script.hh" -#include "stem.hh" +#include "font-interface.hh" +#include "side-position-interface.hh" +#include "paper-def.hh" +#include "item.hh" #include "molecule.hh" #include "lookup.hh" - - -void -Script::set_stem(Stem*st_l) +Molecule +Script::get_molecule(Grob * me, Direction d) { - stem_l_ = st_l; - add_support(st_l); -} - + SCM s = me->get_grob_property ("molecule"); + assert (gh_pair_p (s)); + + SCM key = gh_car (s); + if (key == ly_symbol2scm ("feta")) + { + return Font_interface::get_default_font (me)->find_by_name ("scripts-" + + ly_scm2string (index_cell (gh_cdr (s), d))); + } + else if (key == ly_symbol2scm ("accordion")) + { + return Lookup::accordion (gh_cdr (s), 1.0, Font_interface::get_default_font (me)); + } + else + assert (false); -Script::Script(Script_req* rq) - :Staff_side(this) -{ - specs_l_ = rq->scriptdef_p_; - inside_staff_b_ = specs_l_->inside_staff_b_; - stem_l_ = 0; - pos_i_ = 0; - symdir_i_=1; - dir_i_ =rq->dir_i_; + return Molecule (); } -void -Script::set_symdir() +MAKE_SCHEME_CALLBACK(Script,after_line_breaking,1); +SCM +Script::after_line_breaking (SCM smob) { - if (specs_l_->invertsym_b_) - symdir_i_ = (dir_i_ < 0) ? -1:1; -} + Grob * me = unsmob_element (smob); -void -Script::set_default_dir() -{ - int s_i=specs_l_->rel_stem_dir_i_; - if (s_i && stem_l_) - dir_i_ = stem_l_->dir_i_ * s_i; - else { - dir_i_ =specs_l_->staff_dir_i_; - } -} + Direction d = Side_position::get_direction (me); + Side_position::set_direction (me,d); -void -Script::set_default_index() -{ - pos_i_ = get_position_i(symbol().dim.y); + return SCM_UNSPECIFIED; } -Interval -Script::do_width() const -{ - return symbol().dim.x; -} +MAKE_SCHEME_CALLBACK(Script,brew_molecule,1); -Symbol -Script::symbol()const +SCM +Script::brew_molecule (SCM smob) { - String preidx_str = (symdir_i_ < 0) ?"-" :""; - return paper()->lookup_l()->script(preidx_str + specs_l_->symidx); + Grob *me= unsmob_element (smob); +#if 0 + Direction dir = DOWN; + SCM d = me->get_grob_property ("direction"); + if (isdir_b (d)) + dir = to_dir (d); +#endif + Direction dir = Side_position::get_direction(me); + return get_molecule (me, dir).smobbed_copy(); } -void -Script::do_pre_processing() +bool +Script::has_interface (Grob*me) { - if (!dir_i_) - set_default_dir(); - set_symdir(); + return me->has_interface (ly_symbol2scm ("script-interface")); } void -Script::do_post_processing() -{ - set_default_index(); -} - -Molecule* -Script::brew_molecule_p() const -{ - Real dy = paper()->internote(); - - Molecule*out = new Molecule(Atom(symbol())); - out->translate(Offset(0,dy * pos_i_)); - return out; -} -IMPLEMENT_STATIC_NAME(Script); - -int -Script::compare(Script *const&l1, Script *const&l2) +Script::set_interface (Grob*me) { - return l1->specs_l_->priority_i_ - l2->specs_l_->priority_i_; + return me->set_interface (ly_symbol2scm ("script-interface")); } -