From: Jan Nieuwenhuizen Date: Sat, 21 Oct 2000 18:47:25 +0000 (+0200) Subject: patch::: 1.3.96.jcn7 X-Git-Tag: release/1.3.97~4 X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=commitdiff_plain;h=103b4daf1ba90415029388126ce9f742b9cf62db;p=lilypond.git patch::: 1.3.96.jcn7 1.3.96.jcn7 =========== * Junked all old style text lookups, except for feta definitions. 1.3.96.jcn6 =========== * Added support for name-based character lookups. --- diff --git a/CHANGES b/CHANGES index 646cec3787..f84b624f13 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,13 @@ +1.3.96.jcn7 +=========== + +* Junked all old style text lookups, except for feta definitions. + +1.3.96.jcn6 +=========== + +* Added support for name-based character lookups. + 1.3.96.jcn5 =========== diff --git a/VERSION b/VERSION index 40bf8d0b73..0716cceb70 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=96 -MY_PATCH_LEVEL=jcn6 +MY_PATCH_LEVEL=jcn7 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/markup.ly b/input/test/markup.ly index 5d8f0a0566..ccd03f18a9 100644 --- a/input/test/markup.ly +++ b/input/test/markup.ly @@ -4,13 +4,15 @@ \score{ \notes\relative c''{ + \stemUp a-"text" b-\textscript #"texta" c-\textscript #'(bold "textb") - d-\textscript #'(lines "een" "twee" "drie") - e-\textscript #'(lines (bold "een") - (rows "en" "dat" "is" ((family . "number") "2")) - (italic "drie")) + + d-\textscript #'(lines "one" "two" "three") + e-\textscript #'(lines (bold "one") + (rows "and" "there" "is" ((family . "number") "2")) + (italic "three")) f-\textscript #'(finger "3") g-\textscript #'(music (named "noteheads-2")) } @@ -18,7 +20,6 @@ linewidth = -1.\mm; \translator{ \ScoreContext - TextScript \push #'style-sheet = #'paper16 TextScript \push #'font-family = #'roman TextScript \pop #'no-spacing-rods TextScript \push #'direction = #1 diff --git a/lily/chord-name.cc b/lily/chord-name.cc index dff902e2bd..523de92f6b 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -14,117 +14,7 @@ #include "paper-column.hh" #include "line-of-score.hh" #include "staff-symbol-referencer.hh" - -/* - TODO: move text lookup out of Chord_name - */ - -/* - word is roman text or property-styled text: - "text" - ("text" . property-alist) - */ -Molecule -Chord_name::ly_word2molecule (Score_element * me, SCM word, Real* x) -{ - *x = 0; - - SCM options_alist = SCM_EOL; - if (gh_pair_p (word)) - { - options_alist = gh_cdr (word); - word = gh_car (word); - } - - if (gh_string_p (word)) - { - /* - UGH. Should read from font metric structure. - */ - Real ex = me->lookup_l ()->text ("", "x", - me->paper_l ()).extent (Y_AXIS).length (); - Real em = me->lookup_l ()->text ("", "m", - me->paper_l ()).extent (X_AXIS).length (); - - String w = ly_scm2string (word); - - String style; - SCM s = scm_assoc (ly_symbol2scm ("style"), options_alist); - if (s != SCM_BOOL_F) - { - style = ly_scm2string (gh_cdr (s)); - } - - Offset offset; - int size = 0; - /* - urg, `type' - */ - s = scm_assoc (ly_symbol2scm ("type"), options_alist); - if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "super") - { - Real super_y = ex / 2; - offset = Offset (0, super_y); - if (!size) - size = -2; - } - - s = scm_assoc (ly_symbol2scm ("size"), options_alist); - if (s != SCM_BOOL_F) - { - size = gh_scm2int (gh_cdr (s)); - } - - s = scm_assoc (ly_symbol2scm ("offset"), options_alist); - if (s != SCM_BOOL_F) - { - // hmm - SCM o = gh_cdr (s); - if (gh_pair_p (o)) - offset = Offset (0, gh_scm2double (gh_cdr (o))) * ex; - *x = gh_scm2double (gh_car (o)) * em; - } - - Molecule mol; - s = scm_assoc (ly_symbol2scm ("font"), options_alist); - if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "feta") - mol = me->paper_l ()->lookup_l (size)->afm_find (w); - else - mol = me->paper_l ()->lookup_l (size)->text (style, w, me->paper_l ()); - - mol.translate (offset); - return mol; - } - return Molecule (); -} - -/* - ;; text: list of word - ;; word: string + optional list of property - ;; property: align, kern, font (?), size - */ -Molecule -Chord_name::ly_text2molecule (Score_element * me, SCM text) -{ - Molecule mol; - if (gh_list_p (text)) - { - while (gh_cdr (text) != SCM_EOL) - { - Real x; - Molecule m = ly_word2molecule (me, gh_car (text), &x); - if (!m.empty_b ()) - mol.add_at_edge (X_AXIS, RIGHT, m, x); - text = gh_cdr (text); - } - text = gh_car (text); - } - Real x; - Molecule m = ly_word2molecule (me,text, &x); - if (!m.empty_b ()) - mol.add_at_edge (X_AXIS, RIGHT, m, x); - return mol; -} +#include "text-item.hh" MAKE_SCHEME_CALLBACK (Chord_name,after_line_breaking,1); SCM @@ -170,7 +60,9 @@ Chord_name::brew_molecule (SCM smob) SCM func = me->get_elt_property (ly_symbol2scm ("chord-name-function")); SCM text = gh_call3 (func, style, pitches, gh_cons (inversion, bass)); - Molecule mol = ly_text2molecule (me, text); + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + Molecule mol = Text_item::text2molecule (me, text, properties); SCM space = me->get_elt_property ("word-space"); if (gh_number_p (space)) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index d7bc14459f..2a7ca06770 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -32,11 +32,11 @@ */ class Dynamic_engraver : public Engraver { - Item * text_p_; + Item * script_p_; Spanner * finished_cresc_p_; Spanner * cresc_p_; - Text_script_req* text_req_l_; + Dynamic_script_req* script_req_l_; Span_req * current_cresc_req_; Drul_array accepted_spanreqs_drul_; @@ -67,14 +67,14 @@ ADD_THIS_TRANSLATOR (Dynamic_engraver); Dynamic_engraver::Dynamic_engraver () { - text_p_ = 0; + script_p_ = 0; finished_cresc_p_ = 0; line_spanner_ = 0; finished_line_spanner_ = 0; current_cresc_req_ = 0; cresc_p_ =0; - text_req_l_ = 0; + script_req_l_ = 0; accepted_spanreqs_drul_[START] = 0; accepted_spanreqs_drul_[STOP] = 0; } @@ -82,7 +82,7 @@ Dynamic_engraver::Dynamic_engraver () void Dynamic_engraver::do_post_move_processing () { - text_req_l_ = 0; + script_req_l_ = 0; accepted_spanreqs_drul_[START] = 0; accepted_spanreqs_drul_[STOP] = 0; } @@ -90,13 +90,10 @@ Dynamic_engraver::do_post_move_processing () bool Dynamic_engraver::do_try_music (Music * m) { - if (Text_script_req* d = dynamic_cast (m)) + if (Dynamic_script_req* d = dynamic_cast (m)) { - if (d->style_str_ == "dynamic") - { - text_req_l_ = d; - return true; - } + script_req_l_ = d; + return true; } else if (Span_req* s = dynamic_cast (m)) { @@ -124,7 +121,7 @@ Dynamic_engraver::do_try_music (Music * m) void Dynamic_engraver::do_process_music () { - if (accepted_spanreqs_drul_[START] || accepted_spanreqs_drul_[STOP] || text_req_l_) + if (accepted_spanreqs_drul_[START] || accepted_spanreqs_drul_[STOP] || script_req_l_) { if (!line_spanner_) @@ -136,7 +133,7 @@ Dynamic_engraver::do_process_music () Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS); Request * rq = accepted_spanreqs_drul_[START]; - if (text_req_l_) rq = text_req_l_ ; + if (script_req_l_) rq = script_req_l_ ; announce_element (line_spanner_, rq); @@ -149,7 +146,7 @@ Dynamic_engraver::do_process_music () */ else if (accepted_spanreqs_drul_[STOP] - && !accepted_spanreqs_drul_[START] && !text_req_l_) + && !accepted_spanreqs_drul_[START] && !script_req_l_) { finished_line_spanner_ = line_spanner_; line_spanner_ = 0; @@ -182,18 +179,16 @@ Dynamic_engraver::do_process_music () maybe we should leave dynamic texts to the text-engraver and simply acknowledge them? */ - if (text_req_l_) + if (script_req_l_) { - String loud = text_req_l_->text_str_; - - text_p_ = new Item (get_property ("DynamicText")); - text_p_->set_elt_property ("text", ly_str02scm (loud.ch_C ())); - if (Direction d=text_req_l_->get_direction ()) + script_p_ = new Item (get_property ("DynamicText")); + script_p_->set_elt_property ("text", script_req_l_->text_); + if (Direction d = script_req_l_->get_direction ()) Directional_element_interface::set (line_spanner_, d); - Axis_group_interface::add_element (line_spanner_, text_p_); + Axis_group_interface::add_element (line_spanner_, script_p_); - announce_element (text_p_, text_req_l_); + announce_element (script_p_, script_req_l_); } if (accepted_spanreqs_drul_[STOP]) @@ -266,11 +261,11 @@ Dynamic_engraver::do_process_music () Score_element *cc = unsmob_element (get_property ("currentMusicalColumn")); cresc_p_->set_bound (LEFT, cc); - if (text_p_) + if (script_p_) { - Side_position::set_direction (text_p_, LEFT); - Side_position::set_axis (text_p_, X_AXIS); - Side_position::add_support (text_p_, cresc_p_); + Side_position::set_direction (script_p_, LEFT); + Side_position::set_axis (script_p_, X_AXIS); + Side_position::add_support (script_p_, cresc_p_); } Axis_group_interface::add_element (line_spanner_, cresc_p_); @@ -312,10 +307,10 @@ Dynamic_engraver::typeset_all () finished_cresc_p_ =0; } - if (text_p_) + if (script_p_) { - typeset_element (text_p_); - text_p_ = 0; + typeset_element (script_p_); + script_p_ = 0; } if (finished_line_spanner_) { diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 2ab1550fdb..f3f60b9483 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -33,7 +33,7 @@ protected: virtual void do_pre_move_processing (); private: - Text_script_req* text_script_req_l_; + Dynamic_script_req* script_req_l_; Audio_dynamic* audio_p_; }; @@ -41,7 +41,7 @@ ADD_THIS_TRANSLATOR (Dynamic_performer); Dynamic_performer::Dynamic_performer () { - text_script_req_l_ = 0; + script_req_l_ = 0; audio_p_ = 0; } @@ -53,14 +53,15 @@ Dynamic_performer::~Dynamic_performer () void Dynamic_performer::do_process_music () { - if (text_script_req_l_) + if (script_req_l_) { SCM proc = get_property ("dynamicAbsoluteVolumeFunction"); SCM svolume = SCM_EOL; if (gh_procedure_p (proc)) { - svolume = gh_call1 (proc, ly_str02scm (text_script_req_l_->text_str_.ch_C ())); + // urg + svolume = gh_call1 (proc, script_req_l_->text_); } Real volume = 0.5; @@ -111,9 +112,9 @@ Dynamic_performer::do_process_music () } audio_p_ = new Audio_dynamic (volume); - Audio_element_info info (audio_p_, text_script_req_l_); + Audio_element_info info (audio_p_, script_req_l_); announce_element (info); - text_script_req_l_ = 0; + script_req_l_ = 0; } } @@ -130,16 +131,12 @@ Dynamic_performer::do_pre_move_processing () bool Dynamic_performer::do_try_music (Music* r) { - if (!text_script_req_l_) + if (!script_req_l_) { - // urg, text script, style `dynamic' is how absolute dynamics appear - if(Text_script_req* t = dynamic_cast (r)) + if(Dynamic_script_req* d = dynamic_cast (r)) { - if (t->style_str_ == "dynamic") - { - text_script_req_l_ = t; - return true; - } + script_req_l_ = d; + return true; } } return false; diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh index b4825593ba..d0f620a2c4 100644 --- a/lily/include/chord-name.hh +++ b/lily/include/chord-name.hh @@ -22,8 +22,6 @@ class Chord_name { public: DECLARE_SCHEME_CALLBACK(brew_molecule, (SCM )); - static Molecule ly_word2molecule (Score_element*, SCM scm, Real* x) ; - static Molecule ly_text2molecule (Score_element*, SCM scm) ; DECLARE_SCHEME_CALLBACK(after_line_breaking, (SCM )); }; diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 88f48b2603..80e47c21ac 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -42,7 +42,6 @@ public: static Molecule dashed_slur (Bezier, Real thick, Real dash) ; static Molecule blank (Box b) ; static Molecule filledbox (Box b) ; - static Molecule text (String style, String text, Paper_def*) ; }; Lookup* unsmob_lookup (SCM); #endif // LOOKUP_HH diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index da3d1c484c..c38fd7fee9 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -15,6 +15,7 @@ #include "duration.hh" #include "musical-pitch.hh" #include "array.hh" +#include "protected-scm.hh" /** a request with a duration. @@ -46,13 +47,16 @@ struct Tremolo_req : public Request { }; -/** a syllable or lyric is a string with rhythm. +/** + a syllable or lyric is a string with rhythm. */ -class Lyric_req : public Rhythmic_req { +class Lyric_req : public Rhythmic_req +{ public: + Protected_scm text_; - String text_str_; - VIRTUAL_COPY_CONS(Music); +protected: + VIRTUAL_COPY_CONS (Music); }; @@ -69,16 +73,21 @@ protected: class Text_script_req : public Script_req { public: - String text_str_; // to be deprecated - String style_str_; // to be deprecated - - SCM text_scm_; + Protected_scm text_; protected: - VIRTUAL_COPY_CONS(Music); - virtual bool do_equal_b (Request const*)const; + VIRTUAL_COPY_CONS (Music); + virtual bool do_equal_b (Request const*) const; }; +class Dynamic_script_req : public Script_req +{ +public: + Protected_scm text_; + +protected: + VIRTUAL_COPY_CONS (Music); +}; /// request which has some kind of pitch struct Melodic_req :virtual Request diff --git a/lily/lookup.cc b/lily/lookup.cc index 4396bd92ec..bdfbd7c158 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -196,138 +196,6 @@ Lookup::frame (Box b, Real thick) } -/* - JUNKME - - TODO: THIS IS UGLY. - Since the user has direct access to TeX marcos, - that currently provide the only way to do - font selection, accents etc, - we try some halfbaked attempt to detect this TeX trickery. - */ -String -sanitise_TeX_string (String text) -{ - int brace_count =0; - for (int i= 0; i < text.length_i (); i++) - { - if (text[i] == '\\') - continue; - - if (text[i] == '{') - brace_count ++; - else if (text[i] == '}') - brace_count --; - } - - if(brace_count) - { - warning (_f ("Non-matching braces in text `%s', adding braces", text.ch_C())); - - if (brace_count < 0) - { - text = to_str ('{', -brace_count) + text; - } - else - { - text = text + to_str ('}', brace_count); - } - } - - return text; -} - -/** - JUNKME -*/ -Molecule -Lookup::text (String style, String text, Paper_def *paper_l) -{ - if (style.empty_b ()) - style = "roman"; - - int font_mag = 0; - Real font_h = paper_l->get_var ("font_normal"); - if (paper_l->scope_p_->elem_b ("font_" + style)) - { - font_h = paper_l->get_var ("font_" + style); - } - - - if (paper_l->scope_p_->elem_b ("magnification_" + style)) - { - font_mag = (int)paper_l->get_var ("magnification_" + style); - } - - /* - FIXME ! - */ - - SCM l = scm_assoc (ly_str02scm (style.ch_C()), - scm_eval2 (ly_symbol2scm ("cmr-alist"), SCM_EOL)); - - if (l != SCM_BOOL_F) - { - style = ly_scm2string (gh_cdr(l)) +to_str ((int)font_h); - } - - Font_metric* metric_l = 0; - - if (font_mag) - metric_l = all_fonts_global_p->find_scaled (style, font_mag); - else - metric_l = all_fonts_global_p->find_font (style); - - - - - int i = text.index_i ("\\n"); - while (i >=0 ) - { - text = text.left_str (i) + "\n" + text.right_str (text.length_i () - i - 2); - i = text.index_i ("\\n"); - } - - Array lines = String_convert::split_arr (text, '\n'); - - Real kern = paper_l->get_var ("line_kern"); - - for (int i=0; i < lines.size (); i++) - { - String str (lines[i]); - if (output_global_ch == "tex") - str = sanitise_TeX_string (str); - lines[i] = str; - } - - if (!lines.size()) - return Molecule(); - - SCM first = gh_list (ly_symbol2scm ("text"), - ly_str02scm (lines[0].ch_C()), - SCM_UNDEFINED); - first = fontify_atom (metric_l, first); - - - - Molecule mol (metric_l->text_dimension (lines[0]), first); - - for (i = 1; i < lines.size (); i++) - { - SCM line = (gh_list (ly_symbol2scm ("text"), - ly_str02scm (lines[i].ch_C ()), - SCM_UNDEFINED)); - line = fontify_atom (metric_l, line); - mol.add_at_edge (Y_AXIS, DOWN, - Molecule (metric_l->text_dimension (lines[i]), line), - kern); - } - - return mol; -} - - - /* Make a smooth curve along the points */ diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 0f042d33f3..fe69dea3ed 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -43,10 +43,7 @@ Lyric_engraver::do_process_music() { text_p_= new Item (get_property ("LyricText")); - text_p_->set_elt_property ("text", -// ly_str02scm ((req_l_->text_str_ + " ").ch_C ())); - ly_str02scm ((req_l_->text_str_).ch_C ())); - + text_p_->set_elt_property ("text", req_l_->text_); /* We can't reach the notehead where we're centered from here. So diff --git a/lily/lyric-performer.cc b/lily/lyric-performer.cc index 4569505c4a..1ba885ff19 100644 --- a/lily/lyric-performer.cc +++ b/lily/lyric-performer.cc @@ -21,9 +21,12 @@ Lyric_performer::Lyric_performer () void Lyric_performer::do_process_music () { - if (lreq_arr_.size () && lreq_arr_[0]->text_str_.length_i ()) + // FIXME: won't work with fancy lyrics + if (lreq_arr_.size () && gh_string_p (lreq_arr_[0]->text_) + && ly_scm2string (lreq_arr_[0]->text_).length_i ()) { - audio_p_ = new Audio_text (Audio_text::LYRIC, lreq_arr_[0]->text_str_); + audio_p_ = new Audio_text (Audio_text::LYRIC, + ly_scm2string (lreq_arr_[0]->text_)); Audio_element_info info (audio_p_, lreq_arr_[0]); announce_element (info); } diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 9806910b55..bf1bef9b96 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -35,7 +35,8 @@ Midi_item::midi_p (Audio_item* a) else if (Audio_time_signature* i = dynamic_cast (a)) return new Midi_time_signature (i); else if (Audio_text* i = dynamic_cast (a)) - return i->text_str_.length_i () ? new Midi_text (i) : 0; + //return i->text_str_.length_i () ? new Midi_text (i) : 0; + return new Midi_text (i); else assert (0); @@ -535,15 +536,6 @@ Midi_text::Midi_text (Audio_text* a) audio_l_ = a; } -#if 0 -Midi_text::Midi_text (Midi_text::Type type, String text_str) - : Audio_text () -{ - text_str_ = text_str; - type_ = type; -} -#endif - String Midi_text::str () const { diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index fbe8996a31..b572aa9b14 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -18,6 +18,7 @@ #include "group-interface.hh" #include "spanner.hh" #include "staff-symbol-referencer.hh" +#include "text-item.hh" void Multi_measure_rest::set_interface (Score_element*me) @@ -130,7 +131,12 @@ Multi_measure_rest::brew_molecule (SCM smob) if (measures > 1) { - Molecule s (me->lookup_l ()->text ("number", to_str (measures), me->paper_l ())); + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + Molecule s = + Text_item::text2molecule (me, + ly_str02scm (to_str (measures).ch_C ()), + properties); s.align_to (X_AXIS, CENTER); s.translate_axis (3.0 * staff_space, Y_AXIS); mol.add_molecule (s); diff --git a/lily/musical-request.cc b/lily/musical-request.cc index dccf2e3fd5..d91e6d35ec 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -114,7 +114,7 @@ bool Text_script_req::do_equal_b (Request const* r) const { Text_script_req const* t = dynamic_cast (r); - return t && t->text_str_ == text_str_ && t->style_str_ == style_str_; + return t && gh_equal_p (text_, t->text_); } diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index c85b0a398e..a20e1df14a 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -43,6 +43,7 @@ static Keyword_ent the_key_tab[]={ {"context", CONTEXT}, {"denies", DENIES}, {"duration", DURATION}, + {"dynamicscript", DYNAMICSCRIPT}, {"font", FONT}, {"grace", GRACE}, {"header", HEADER}, diff --git a/lily/parser.yy b/lily/parser.yy index 1a1021ea96..1ac8e9b9e9 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -128,6 +128,7 @@ yylex (YYSTYPE *s, void * v_l) /* tokens which are not keywords */ %token AUTOCHANGE %token ARPEGGIO +%token DYNAMICSCRIPT %token TEXTSCRIPT %token ACCEPTS %token ALTERNATIVE @@ -1056,19 +1057,17 @@ verbose_request: $$ = dynamic_cast (unsmob_music ($1)->clone ()); $$->set_spot (THIS->here_input ()); } - | TEXTSCRIPT STRING STRING { - Text_script_req *ts_p = new Text_script_req; - ts_p-> text_str_ = ly_scm2string ($2); - ts_p-> style_str_ = ly_scm2string ($3); - ts_p->set_spot (THIS->here_input ()); - - $$ = ts_p; + | DYNAMICSCRIPT embedded_scm { + Dynamic_script_req *d = new Dynamic_script_req; + d->text_ = $2; + d->set_spot (THIS->here_input ()); + $$ = d; } | TEXTSCRIPT embedded_scm { - Text_script_req *ts_p = new Text_script_req; - ts_p->text_scm_ = $2; - ts_p->set_spot (THIS->here_input ()); - $$ = ts_p; + Text_script_req *t = new Text_script_req; + t->text_ = $2; + t->set_spot (THIS->here_input ()); + $$ = t; } | SPANREQUEST bare_int STRING { Span_req * sp_p = new Span_req; @@ -1231,19 +1230,27 @@ open_request_parens: ; gen_text_def: - string { - Text_script_req *t = new Text_script_req; + embedded_scm { + Text_script_req *t = new Text_script_req; + t->text_ = $1; + t->set_spot (THIS->here_input ()); + $$ = t; + } + | string { + Text_script_req *t = new Text_script_req; + t->text_ = $1; + t->set_spot (THIS->here_input ()); $$ = t; - t->text_str_ = ly_scm2string ($1); - - $$->set_spot (THIS->here_input ()); } | DIGIT { - Text_script_req* t = new Text_script_req; + /* + Maybe use Finger_script_request? + */ + Text_script_req* t = new Text_script_req; + t->text_ = gh_cons (ly_symbol2scm ("finger"), + ly_str02scm (to_str ($1).ch_C ())); + t->set_spot (THIS->here_input ()); $$ = t; - t->text_str_ = to_str ($1); - t->style_str_ = "finger"; - $$->set_spot (THIS->here_input ()); } ; @@ -1426,7 +1433,7 @@ simple_element: else THIS->pop_spot (); Lyric_req* lreq_p = new Lyric_req; - lreq_p ->text_str_ = ly_scm2string ($1); + lreq_p ->text_ = $1; lreq_p->duration_ = *$3; lreq_p->set_spot (THIS->here_input()); Simultaneous_music* velt_p = new Request_chord (gh_list (lreq_p->self_scm (), SCM_UNDEFINED)); diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index c16f43d46d..79113f421e 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -38,9 +38,6 @@ Text_engraver::do_try_music (Music *m) { if (Text_script_req *r = dynamic_cast (m)) { - if (r->style_str_ == "dynamic") - return false; - reqs_.push (r); return true; } @@ -84,15 +81,20 @@ Text_engraver::do_process_music () for (int i=0; i < reqs_.size (); i++) { Text_script_req * r = reqs_[i]; + + // URG: Text vs TextScript + String basic = "TextScript"; - String basic = "TextScript"; - +#if 0 + // maybe use some sort of TYPE for script/dynamic/finger? + // separate engraver? if (r->style_str_== "finger") { basic = "Fingering"; } - Item *text = new Item (get_property (basic.ch_C())); +#endif + Item *text = new Item (get_property (basic.ch_C ())); /* FIXME -> need to use basic props. @@ -102,6 +104,7 @@ Text_engraver::do_process_music () Axis ax = to_boolean (axisprop) ? X_AXIS : Y_AXIS; Side_position::set_axis (text, ax); +#if 0 if (r->style_str_ == "finger" && ax == Y_AXIS) { /* @@ -110,6 +113,7 @@ Text_engraver::do_process_music () text->add_offset_callback (Side_position::aligned_on_self_proc, X_AXIS); text->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS); } +#endif @@ -122,18 +126,8 @@ Text_engraver::do_process_music () if (r->get_direction ()) Side_position::set_direction (text, r->get_direction ()); - if (r->text_str_.length_i ()) - text->set_elt_property ("text", - ly_str02scm ( r->text_str_.ch_C ())); - else - { - text->set_elt_property ("text", r->text_scm_); - text->set_elt_property ("scm-text", r->text_scm_); - } + text->set_elt_property ("text", r->text_); - if (r->style_str_.length_i ()) - text->set_elt_property ("style", ly_str02scm (r->style_str_.ch_C())); - SCM nonempty = get_property ("textNonEmpty"); if (to_boolean (nonempty)) /* diff --git a/lily/text-item.cc b/lily/text-item.cc index dda7728f25..2d8f9bbe22 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -55,20 +55,33 @@ Text_item::text2molecule (Score_element *me, SCM text, SCM properties) return Molecule (); } +static +SCM +get_elt_property (Score_element *me, char const *name) +{ + SCM s = me->get_elt_property (name); + if (s == SCM_EOL) + error (_f ("No `%s' defined for %s", name, me->name ())); + return s; +} + Molecule Text_item::string2molecule (Score_element *me, SCM text, SCM properties) { SCM style = scm_assoc (ly_symbol2scm ("font-style"), properties); SCM paper = me->get_elt_property ("style-sheet"); + if (paper == SCM_EOL) + paper = scm_string_to_symbol (me->paper_l ()->get_scmvar ("style_sheet")); + SCM font_name; if (gh_pair_p (style)) { - SCM f = me->get_elt_property ("style-to-font-name"); + SCM f = get_elt_property (me, "style-to-font-name"); font_name = gh_call2 (f, paper, gh_cdr (style)); } else { - SCM f = me->get_elt_property ("properties-to-font-name"); + SCM f = get_elt_property (me, "properties-to-font-name"); font_name = gh_call2 (f, paper, properties); } @@ -143,8 +156,7 @@ Text_item::markup_sentence2molecule (Score_element *me, SCM markup_sentence, { SCM markup = gh_car (markup_sentence); SCM sentence = gh_cdr (markup_sentence); - SCM f = me->get_elt_property ("markup-to-properties"); - + SCM f = get_elt_property (me, "markup-to-properties"); SCM p = gh_cons (gh_call1 (f, markup), properties); Axis align = X_AXIS; @@ -165,25 +177,16 @@ Text_item::markup_sentence2molecule (Score_element *me, SCM markup_sentence, MAKE_SCHEME_CALLBACK (Text_item, brew_molecule, 1); SCM -Text_item::brew_molecule (SCM smob) +Text_item::brew_molecule (SCM smob) { Score_element *me = unsmob_element (smob); - SCM text = me->get_elt_property ("scm-text"); - Molecule mol; - if (text == SCM_EOL) - { - SCM style = me->get_elt_property ("style"); - String st = gh_string_p (style) ? ly_scm2string (style) : ""; - SCM text = me->get_elt_property ("text"); - String t = gh_string_p (text) ? ly_scm2string (text) : ""; - - mol = me->paper_l ()->lookup_l (0)->text (st, t, me->paper_l ()); - } - else - mol = text2molecule (me, text, - gh_append2 (me->immutable_property_alist_, - me->mutable_property_alist_)); + SCM text = me->get_elt_property ("text"); + + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + + Molecule mol = Text_item::text2molecule (me, text, properties); SCM space = me->get_elt_property ("word-space"); if (gh_number_p (space)) diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc index 4b658b0a5b..82d840a5e8 100644 --- a/lily/text-spanner.cc +++ b/lily/text-spanner.cc @@ -7,6 +7,7 @@ */ #include "molecule.hh" +#include "text-item.hh" #include "text-spanner.hh" #include "spanner.hh" #include "lookup.hh" @@ -63,11 +64,16 @@ Text_spanner::brew_molecule (SCM smob) } while (flip (&d) != LEFT); +#if 0 SCM s = me->get_elt_property ("text-style"); + String text_style = "italic"; if (gh_string_p (s)) text_style = ly_scm2string (s); - +#endif + + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); SCM edge_text = me->get_elt_property ("edge-text"); Drul_array edge; if (gh_pair_p (edge_text)) @@ -75,8 +81,8 @@ Text_spanner::brew_molecule (SCM smob) Direction d = LEFT; do { - String text = ly_scm2string (index_cell (edge_text, d)); - edge[d] = me->lookup_l ()->text (text_style, text, me->paper_l ()); + SCM text = index_cell (edge_text, d); + edge[d] = Text_item::text2molecule (me, text, properties); if (!edge[d].empty_b ()) edge[d].align_to (Y_AXIS, CENTER); } @@ -87,7 +93,7 @@ Text_spanner::brew_molecule (SCM smob) shorten[LEFT] = 0; shorten[RIGHT] = 0; - s = me->get_elt_property ("shorten"); + SCM s = me->get_elt_property ("shorten"); if (gh_pair_p (s)) { shorten[LEFT] = gh_scm2double (gh_car (s)) * staff_space; diff --git a/lily/time-signature.cc b/lily/time-signature.cc index 2912f3b37a..503b24003d 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -9,6 +9,7 @@ #include "molecule.hh" +#include "text-item.hh" #include "time-signature.hh" #include "paper-def.hh" #include "lookup.hh" @@ -69,13 +70,18 @@ Time_signature::special_time_signature (Score_element*me, String s, int n, int d Molecule Time_signature::time_signature (Score_element*me,int num, int den) { - String sty = "timesig"; - /* UGH: need to look at fontsize. + TODO: specify using scm markup. */ - Molecule n (me->lookup_l ()->text (sty, to_str (num), me->paper_l ())); - Molecule d (me->lookup_l ()->text (sty, to_str (den), me->paper_l ())); + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + Molecule n = Text_item::text2molecule (me, + ly_str02scm (to_str (num).ch_C ()), + properties); + Molecule d = Text_item::text2molecule (me, + ly_str02scm (to_str (den).ch_C ()), + properties); n.align_to (X_AXIS, CENTER); d.align_to (X_AXIS, CENTER); Molecule m; diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index b35fb98b65..14d905fa39 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -14,6 +14,7 @@ #include "molecule.hh" #include "paper-column.hh" #include "paper-def.hh" +#include "text-item.hh" #include "tuplet-spanner.hh" #include "stem.hh" #include "note-column.hh" @@ -75,9 +76,9 @@ Tuplet_spanner::brew_molecule (SCM smob) SCM number = me->get_elt_property ("text"); if (gh_string_p (number) && number_visibility) { - Molecule - num (me->lookup_l ()->text ("italic", - ly_scm2string (number), me->paper_l ())); + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + Molecule num = Text_item::text2molecule (me, number, properties); num.align_to (X_AXIS, CENTER); num.translate_axis (w/2, X_AXIS); num.align_to (Y_AXIS, CENTER); diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index b2b42ac4f5..dbd0cb7ffa 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -13,6 +13,7 @@ #include "molecule.hh" #include "paper-column.hh" #include "paper-def.hh" +#include "text-item.hh" #include "volta-spanner.hh" #include "group-interface.hh" #include "side-position-interface.hh" @@ -88,10 +89,11 @@ Volta_spanner::brew_molecule (SCM smob) SCM_UNDEFINED)); Box b (Interval (0, w), Interval (0, h)); - Molecule mol (b, at); - Molecule num (me->lookup_l ()->text ("volta", - ly_scm2string (me->get_elt_property("text")), - me->paper_l ())); + Molecule mol (b, at); + SCM text = me->get_elt_property("text"); + SCM properties = gh_append2 (me->immutable_property_alist_, + me->mutable_property_alist_); + Molecule num = Text_item::text2molecule (me, text, properties); mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length () - staff_space); diff --git a/ly/declarations-as.ly b/ly/declarations-as.ly index d0caa74ac3..ac43481fab 100644 --- a/ly/declarations-as.ly +++ b/ly/declarations-as.ly @@ -53,7 +53,7 @@ melismaEnd = \property Staff.melismaBusy = ##f % ugh \include "midi.ly" -\include "textscripts.ly" +\include "dynamic-scripts.ly" \include "spanners.ly" \include "property.ly" diff --git a/ly/declarations.ly b/ly/declarations.ly index 21bafc0db1..230ea0d8b8 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -45,7 +45,7 @@ papersize = "a4" % ugh \include "midi.ly" -\include "textscripts.ly" +\include "dynamic-scripts.ly" \include "spanners.ly" \include "property.ly" diff --git a/ly/dynamic-scripts.ly b/ly/dynamic-scripts.ly new file mode 100644 index 0000000000..7ccd8d8e64 --- /dev/null +++ b/ly/dynamic-scripts.ly @@ -0,0 +1,24 @@ + +% +% declare the standard dynamic identifiers. +% + +ppp = \dynamicscript #"ppp" +pp = \dynamicscript #"pp" +p = \dynamicscript #"p" +mp = \dynamicscript #"mp" +mf = \dynamicscript #"mf" +f = \dynamicscript #"e" % see feta-din layout +ff = \dynamicscript #"ff" +fff = \dynamicscript #"fff" +fp = \dynamicscript #"fp" + +sf = \dynamicscript #"sf" +sfp = \dynamicscript #"sfp" +sff = \dynamicscript #"sff" +sfz = \dynamicscript #"sfz" +fz = \dynamicscript #"fz" +sp = \dynamicscript #"sp" +spp = \dynamicscript #"spp" +rfz = \dynamicscript #"rfz" + diff --git a/ly/engraver.ly b/ly/engraver.ly index 26d6ae9c74..b99cb6ffd3 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -474,9 +474,13 @@ ScoreContext = \translator { (molecule-callback . ,Text_item::brew_molecule) (breakable . #t) (visibility-lambda . ,begin-of-line-visible) - (name . "BarNumber") (padding . 1.0) (direction . 1) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-family . roman) + (name . "BarNumber") ) Beam = #basic-beam-properties @@ -565,11 +569,13 @@ ScoreContext = \translator { ) DynamicText = #`( - (style . "dynamic") (interfaces . (dynamic-interface)) (Y-offset-callbacks . (,Side_position::aligned_on_self)) - (molecule-callback . ,Text_item::brew_molecule) + (font-style . dynamic) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) (script-priority . 100) (self-alignment-Y . 0) (name . "DynamicText") @@ -631,6 +637,10 @@ ScoreContext = \translator { (molecule-callback . ,Text_item::brew_molecule) (break-align-symbol . Instrument_name) (visibility-lambda . ,begin-of-line-visible) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-family . roman) (name . "InstrumentName") ) @@ -675,16 +685,24 @@ ScoreContext = \translator { (self-alignment-X . 0) (non-rhythmic . #t) (word-space . 0.6) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-family . roman) (name . "LyricText") ) RehearsalMark = #`( - (interfaces . (mark-interface side-position-interface)) - (molecule-callback . ,Text_item::brew_molecule) - (breakable . #t) - (visibility-lambda . ,end-of-line-invisible) - (padding . 4.0) - (name . "RehearsalMark") + (interfaces . (mark-interface side-position-interface)) + (molecule-callback . ,Text_item::brew_molecule) + (breakable . #t) + (visibility-lambda . ,end-of-line-invisible) + (padding . 4.0) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-style . mark) + (name . "RehearsalMark") ) MultiMeasureRest = #`( @@ -724,7 +742,10 @@ ScoreContext = \translator { (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self)) (Y-offset-callbacks . (,Side_position::aligned_side)) (molecule-callback . ,Text_item::brew_molecule) - (style . "italic") + (font-shape . "italic") + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) (name . "OctavateEight") ) @@ -861,7 +882,10 @@ ScoreContext = \translator { (molecule-callback . ,Text_spanner::brew_molecule) (type . "line") (direction . 1) - (text-style . "italic") + (font-shape . "italic") + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) (name . "TextSpanner") ) Tie = #`( @@ -888,17 +912,25 @@ ScoreContext = \translator { (break-align-symbol . Time_signature) (visibility-lambda . ,all-visible) (breakable . #t) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-style . timesig) (name . "TimeSignature") ) TupletBracket = #`( + (interfaces . (tuplet-spanner-interface)) (number-gap . 2.0) (delta-y . 0) (thick . 1.0) (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking) (molecule-callback . ,Tuplet_spanner::brew_molecule) - (interfaces . (tuplet-spanner-interface)) - (name "TupletBracket") + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-shape . "italic") + (name . "TupletBracket") ) SostenutoPedal = #`( @@ -908,7 +940,10 @@ ScoreContext = \translator { (,Side_position::aligned_side ,Side_position::centered_on_parent)) - (style . "italic") + (font-shape . "italic") + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) (no-spacing-rods . #t) (self-alignment-X . 0) (name . "SostenutoPedal") @@ -968,7 +1003,10 @@ ScoreContext = \translator { ) UnaChordaPdeal = #`( (molecule-callback . ,Text_item::brew_molecule) - (style . "italic") + (font-shape . "italic") + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) (no-spacing-rods . #t) (self-alignment-X . 0) (X-offset-callbacks . (,Side_position::aligned_on_self)) @@ -987,6 +1025,10 @@ ScoreContext = \translator { (thickness . 1.6) ; stafflinethickness (height . 2.0) ; staffspace; (minimum-space . 25) + (properties-to-font-name . ,properties-to-font-name) + (style-to-font-name . ,style-to-font-name) + (markup-to-properties . ,markup-to-properties) + (font-style . volta) (name . "VoltaBracket") ) diff --git a/ly/paper11.ly b/ly/paper11.ly index 10b23e7ab8..ea8f9973f6 100644 --- a/ly/paper11.ly +++ b/ly/paper11.ly @@ -4,30 +4,12 @@ paper_eleven = \paper { staffheight = 11.0\pt; - - - font_Large = 8.; - font_large = 6.; - font_normal = 5.; - font_script = 4.; - - font_finger = 4.; - font_volta = 4.; - font_number = 4.; - font_dynamic = 10.; - font_mark = 6.; - - % UGH! - magnification_dynamic = -4.0; + style_sheet = "paper11"; -1=\font "feta11" -2=\font "feta11" 0=\font "feta11" - "font_feta-2" = 11.; - "font_feta-1" = 11.; - "font_feta" = 11.; - \include "params.ly"; } diff --git a/ly/paper13.ly b/ly/paper13.ly index b1399839a6..fafc2bbc47 100644 --- a/ly/paper13.ly +++ b/ly/paper13.ly @@ -4,26 +4,11 @@ paper_thirteen = \paper { staffheight = 13.0\pt; - - - font_Large = 8.; - font_large = 6.; - font_normal = 5.; - font_script = 4.; - - font_finger = 4.; - font_volta = 4.; - font_number = 6.; - font_dynamic = 10.; - font_mark = 6.; + style_sheet = "paper13"; 0=\font "feta13" -1=\font "feta11" - "font_feta-2" = 11.; - "font_feta-1" = 11.; - "font_feta" = 13.; - \include "params.ly"; } diff --git a/ly/paper16.ly b/ly/paper16.ly index b045c81ae0..ebad799920 100644 --- a/ly/paper16.ly +++ b/ly/paper16.ly @@ -6,29 +6,12 @@ paper_sixteen = \paper { staffheight = 16.0\pt; - font_Large = 12.; - font_large = 10.; - font_normal = 8.; - font_script = 7.; - - magnification_dynamic = 1.0; - font_finger = 4.; - font_volta = 5.; - font_number = 8.; - font_timesig = 8.; - font_dynamic = 10.; - font_mark = 10.; - font_msam = 8.; + style_sheet = "paper20"; 0 = \font "feta16" -1 = \font "feta13" -2 = \font "feta11" -3 = \font "feta11" - - "font_feta" = 16.; - "font_feta-1" = 13.; - "font_feta-2" = 11.; - "font_feta-3" = 11.; \include "params.ly"; } diff --git a/ly/paper20.ly b/ly/paper20.ly index 3af633c2cf..1264bfad23 100644 --- a/ly/paper20.ly +++ b/ly/paper20.ly @@ -5,37 +5,13 @@ paper_twenty = \paper { staffheight = 20.0\pt; + style_sheet = "paper20"; - font_Large = 12.; - font_large = 12.; - font_normal = 10.; - font_script = 8.; - - font_finger = 5.; - font_volta = 8.; - font_number = 10.; - font_timesig = 10.; - font_mark = 12.; - font_msam = 9.; - - % what about: - "font_number-1" = 8.; - %"font_number" = 10.; - "font_number+1" = 12.; - - % Ugh - magnification_dynamic = 2.; - 0 = \font "feta20" -1 = \font "feta16" -2 = \font "feta13" -3 = \font "feta11" - "font_feta" = 20.; - "font_feta-1" = 16.; - "font_feta-2" = 13.; - "font_feta-3" = 11.; - \include "params.ly"; } diff --git a/ly/paper23.ly b/ly/paper23.ly index a3148706aa..748707df81 100644 --- a/ly/paper23.ly +++ b/ly/paper23.ly @@ -5,28 +5,12 @@ paper_twentythree = \paper { staffheight = 23.0\pt; - - font_Large = 12.; - font_large = 12.; - font_normal = 10.; - font_script = 8.; - - font_finger = 5.; - font_volta = 8.; - font_number = 10.; - font_mark = 12.; - - % Ugh - magnification_dynamic = 3.; + style_sheet = "paper23"; -2 = \font "feta16" -1 = \font "feta20" 0 = \font "feta23" - "font_feta-2" = 16.; - "font_feta-1" = 20.; - "font_feta" = 23.; - \include "params.ly"; } diff --git a/ly/paper26.ly b/ly/paper26.ly index 5c58adf608..e500651333 100644 --- a/ly/paper26.ly +++ b/ly/paper26.ly @@ -4,29 +4,12 @@ paper_twentysix = \paper { staffheight = 26.0\pt; - font_Large = 17.; - font_large = 14.; - font_normal = 12.; - font_script = 10.; - - font_dynamic = 10.; - % Ugh - magnification_dynamic = 4.; - - font_finger = 8.; - font_volta = 10.; - font_number = 10.; - magnification_number = 2.; - font_mark = 14.; + style_sheet = "paper26"; 0=\font "feta26" -1 = \font "feta23" -2 = \font "feta20" - "font_feta-2" = 20.; - "font_feta-1" = 23.; - "font_feta" = 26.; - \include "params.ly"; } diff --git a/ly/textscripts.ly b/ly/textscripts.ly index f810130f70..e69de29bb2 100644 --- a/ly/textscripts.ly +++ b/ly/textscripts.ly @@ -1,24 +0,0 @@ - -% -% declare the standard dynamic identifiers. -% - -ppp = \textscript "ppp" "dynamic" -pp = \textscript "pp" "dynamic" -p = \textscript "p" "dynamic" -mp = \textscript "mp" "dynamic" -mf = \textscript "mf" "dynamic" -f = \textscript "e" "dynamic" % see feta-din layout -ff = \textscript "ff" "dynamic" -fff = \textscript "fff" "dynamic" -fp = \textscript "fp" "dynamic" - -sf = \textscript "sf" "dynamic" -sfp = \textscript "sfp" "dynamic" -sff = \textscript "sff" "dynamic" -sfz = \textscript "sfz" "dynamic" -fz = \textscript "fz" "dynamic" -sp = \textscript "sp" "dynamic" -spp = \textscript "spp" "dynamic" -rfz = \textscript "rfz" "dynamic" -