From dcb8f596283022b8fdc4385c5f9f72d48c6b46fa Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Tue, 10 Oct 2000 19:36:50 +0200 Subject: [PATCH] patch::: 1.3.94.jcn3 1.3.94.jcn3 =========== * Added Arpeggio and Trill elements to feta font. * Yet another bugfix for output-property (Han-Wen) --- Generated by janneke@gnu.org, From = lilypond-1.3.94.jcn2, To = lilypond-1.3.94.jcn3 usage cd lilypond-source-dir; patch -E -p1 < lilypond-1.3.94.jcn3.diff Patches do not contain automatically generated files or (urg) empty directories, i.e., you should rerun autoconf, configure --- CHANGES | 14 +++++- VERSION | 2 +- buildscripts/clean-fonts.sh | 22 ++++++--- input/bugs/assigned-output-property.ly | 30 ------------ input/les-nereides.ly | 58 ++++++++++++++--------- input/test/arpeggio.ly | 27 +++++------ lily/arpeggio-engraver.cc | 48 +++++++++++++++++-- lily/arpeggio.cc | 14 +++--- lily/include/musical-request.hh | 7 +++ lily/include/output-property.hh | 6 +-- lily/my-lily-lexer.cc | 1 + lily/parser.yy | 6 +++ lily/span-arpeggio-engraver.cc | 11 +++-- lily/span-arpeggio.cc | 17 ++++--- ly/engraver.ly | 11 ++--- mf/feta-generic.mf | 4 +- mf/feta-schrift.mf | 65 +++++++++++++++++++++++++- 17 files changed, 232 insertions(+), 111 deletions(-) delete mode 100644 input/bugs/assigned-output-property.ly diff --git a/CHANGES b/CHANGES index bd7dbb932b..3f4b565714 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,16 @@ ---- ../lilypond-1.3.94/CHANGES Sun Oct 8 10:27:38 2000 +--- ../lilypond-1.3.94.jcn2/CHANGES Tue Oct 10 15:50:19 2000 +++ b/CHANGES Tue Oct 10 19:36:50 2000 +@@ -1,3 +1,10 @@ +1.3.94.jcn3 +=========== + +* Added Arpeggio and Trill elements to feta font. + +* Yet another bugfix for output-property (Han-Wen) + + 1.3.94.jcn2 + =========== + --- ../lilypond-1.3.94/CHANGES Sun Oct 8 10:27:38 2000 ++ b/CHANGES Tue Oct 10 17:28:55 2000 @@ -1,3 +1,13 @@ 1.3.94.lec1 diff --git a/VERSION b/VERSION index 8e9ce4adc7..91886aae3b 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=94 -MY_PATCH_LEVEL=lec1 +MY_PATCH_LEVEL=jcn3 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/clean-fonts.sh b/buildscripts/clean-fonts.sh index 597efa9032..09ad8f13c6 100755 --- a/buildscripts/clean-fonts.sh +++ b/buildscripts/clean-fonts.sh @@ -9,17 +9,27 @@ esac # should use kpsepath +TEXDIRS=. if [ -d /var/lib/texmf ]; then - TEXDIR=/var/lib/texmf -elif [ -d /var/texfonts ]; then - TEXDIR=/var/texfonts + TEXDIRS="$TEXDIRS /var/lib/texmf" +fi +if [ -d /var/spool/texmf ]; then + TEXDIRS="$TEXDIRS /var/tmp/texmf" +fi +if [ -d /var/tmp/texfonts ]; then + TEXDIRS="$TEXDIRS /var/spool/texfonts" +fi +if [ -d /var/texfonts ]; then + TEXDIRS="$TEXDIRS /var/texfonts" +fi +if [ -z $TEXDIR ]; then + TEXDIRS=". /var" else - TEXDIR=/var/ + TEXDIRS=". $TEXDIRS" fi # remove possibly stale .pk/.tfm files -echo> /tmp/cleaning-font-dummy -FILES=`find . $TEXDIR -name "feta*$WHAT*tfm" -or -name "feta*$WHAT*pk"` +FILES=`find $TEXDIRS -name "feta*$WHAT*tfm" -or -name "feta*$WHAT*pk"` echo removing $FILES rm -f $FILES /tmp/cleaning-font-dummy diff --git a/input/bugs/assigned-output-property.ly b/input/bugs/assigned-output-property.ly deleted file mode 100644 index 5805f3728a..0000000000 --- a/input/bugs/assigned-output-property.ly +++ /dev/null @@ -1,30 +0,0 @@ - -% -% Using music-variable breaks output property -% - -foo = \notes\relative c''{ - \outputproperty #(make-type-checker 'note-head-interface) - #'extra-offset = #'(2 . 3) - c2 - c -} - -\score{ - < - \context Staff=a\notes\relative c''{ - \outputproperty #(make-type-checker 'note-head-interface) - #'extra-offset = #'(2 . 3) - c2 - c - } - \context Staff=b \foo - > - \paper{ - linewidth=-1.0; - \translator { - \ScoreContext - \consists "Mark_engraver"; - } - } -} diff --git a/input/les-nereides.ly b/input/les-nereides.ly index 59a1cc1a74..29a797ac7f 100644 --- a/input/les-nereides.ly +++ b/input/les-nereides.ly @@ -8,7 +8,7 @@ cpp -P -traditional -o l-fake.ly -DFAKE_GRACE les-nereides.ly title = "LES N\\'ER\\'EIDES"; subtitle = "THE NEREIDS"; enteredby = "JCN"; - piece = "Allegretto scherzando"; + %piece = "Allegretto scherzando"; copyright = "public domain"; description = "Natiest piece of competition at http://www.orphee.com/comparison/study.html, see http://www.orphee.com/comparison/gray.pdf"; comment = "LilyPond (1.3.93) can't really do this yet, I guess"; @@ -38,13 +38,15 @@ global = \notes{ treble = \context Voice=treble \notes\relative c''{ % Broken? \property Voice.NoteColumn \push #'horizontal-shift = #0 - r2 + \outputproperty #(make-type-checker 'text-item-interface) + #'extra-offset = #'(-6 . 2) + r2^"Allegretto scherzando" %2 \property Voice.Stem \pop #'direction \property Voice.Stem \push #'direction = #1 - r4 r2 + r4 r2 %3 - r4 r8. + r4 r8. \translator Staff=bass cis,16^2^"m.d."( %4 @@ -53,7 +55,8 @@ treble = \context Voice=treble \notes\relative c''{ \property Voice.Slur \pop #'direction \property Voice.Slur \push #'direction = #1 %% 8va - cis''''4^"m.g." ( + \property PianoStaff.connectArpeggios = ##t + cis''''4^"m.g."\arpeggio ( #ifndef FAKE_GRACE @@ -115,7 +118,7 @@ trebleTwo = \context Voice=trebleTwo \notes\relative c''{ s4 \property Voice.Stem \pop #'direction \property Voice.Stem \push #'direction = #-1 - + #ifdef FAKE_GRACE s32*16 @@ -152,7 +155,7 @@ bass = \context Voice=bass \notes\relative c{ \property Voice.Stem \pop #'direction \property Voice.Stem \push #'direction = #-1 \property Voice.slurEndAttachment = #'stem - <)a''4 eis cis> + <)a''4\arpeggio eis cis> %\stemboth \property Voice.slurEndAttachment = ##f \translator Staff=bass @@ -168,7 +171,7 @@ bass = \context Voice=bass \notes\relative c{ \property Voice.Stem \pop #'length \property Voice.Stem \pop #'direction \property Voice.Stem \push #'direction = #-1 - <)a' fis cis> + <)a'\arpeggio fis cis> \translator Staff=bass \property Voice.Stem \pop #'direction r2 @@ -184,7 +187,7 @@ bass = \context Voice=bass \notes\relative c{ \property Voice.Stem \push #'direction = #0 < %urg: staff-change: ! on dis - + % { s8. \clef bass;} > @@ -242,16 +245,23 @@ middleDynamics = \context Dynamics=middle \notes{ #ifdef FAKE_GRACE s32*12 + \outputproperty #(make-type-checker 'dynamic-interface) + #'extra-offset = #'(0 . 1.5) s32\> s s \!s #endif - - s32 s-"rall." s s + s32 + \outputproperty #(make-type-checker 'text-item-interface) + #'extra-offset = #'(0 . 1.5) + s-"rall." s s s8 s4 \outputproperty #(make-type-checker 'dynamic-interface) - #'extra-offset = #'(0 . 10) + #'extra-offset = #'(0 . 3.5) s1\mf-"a tempo" - s8 s8\mf s4 s4 s8\> s32 s s \!s + s8 + \outputproperty #(make-type-checker 'dynamic-interface) + #'extra-offset = #'(-1 . 3.5) + s8\mf s4 s4 s8\> s32 s s \!s } lowerDynamics = \context Dynamics=lower \notes{ @@ -299,11 +309,10 @@ lowerDynamics = \context Dynamics=lower \notes{ \treble \trebleTwo > - %\context Dynamics=middle < - % \global - % \middleDynamics - %> - \middleDynamics + \context Dynamics=middle < + \global + \middleDynamics + > \context Staff=bass < \clef bass; \global @@ -328,7 +337,9 @@ lowerDynamics = \context Dynamics=lower \notes{ %Generic_property_list = #generic-lyrics-properties \consists "Property_engraver"; DynamicsMinimumVerticalExtent = #(cons -3 -3) - VerticalAlignment \push #'threshold = #'(8 . 8) + %VerticalAlignment \push #'threshold = #'(8 . 8) + %VerticalAlignment \push #'threshold = #'(10 . 10) + VerticalAlignment \push #'threshold = #'(9 . 9) startSustain = #"Ped." stopSustain = #"*" @@ -352,12 +363,17 @@ lowerDynamics = \context Dynamics=lower \notes{ \translator { \VoiceContext - TextScript \push #'style = #"italic" + %TextScript \push #'style = #"italic" + %TextScript \push #'font-size = #3 + TextScript \push #'size = #"Large" + TextScript \push #'font-size = #"Large" } \translator { \PianoStaffContext \accepts Dynamics; - VerticalAlignment \push #'threshold = #'(8 . 8) + %VerticalAlignment \push #'threshold = #'(8 . 8) + %VerticalAlignment \push #'threshold = #'(6 . 6) + VerticalAlignment \push #'threshold = #'(7 . 7) } \translator { \GraceContext diff --git a/input/test/arpeggio.ly b/input/test/arpeggio.ly index 8b81878ad4..9e7f930ace 100644 --- a/input/test/arpeggio.ly +++ b/input/test/arpeggio.ly @@ -1,20 +1,15 @@ \score{ - \context StaffGroup < - %< - \context Staff=one \notes\relative c''{ - f, - - } - \context Staff=two \notes\relative c{ - \clef bass; - g - + \context PianoStaff < + \context Staff=one \notes\relative c''{ + fis,\arpeggio + %%\property PianoStaff.SpanArpeggio \push #'connect = ##t + \property PianoStaff.connectArpeggios = ##t + } + \context Staff=two \notes\relative c{ + \clef bass; + g + + } > - \paper{ - \translator{ - \StaffContext - \consists Arpeggio_engraver; - } - } } diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index dccb27e6ba..3c9504512e 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -9,8 +9,13 @@ #include "engraver.hh" #include "group-interface.hh" #include "item.hh" +#include "musical-request.hh" #include "arpeggio.hh" #include "stem.hh" +#include "local-key-item.hh" +#include "rhythmic-head.hh" +#include "side-position-interface.hh" +#include "staff-symbol-referencer.hh" class Arpeggio_engraver : public Engraver { @@ -22,23 +27,49 @@ protected: virtual void acknowledge_element (Score_element_info); virtual void process_acknowledged (); virtual void do_pre_move_processing (); + virtual bool do_try_music (Music *); private: Item* arpeggio_; + Arpeggio_req *arpeggio_req_; Link_array stems_; + Link_array supports_; }; Arpeggio_engraver::Arpeggio_engraver () { arpeggio_ = 0; + arpeggio_req_ = 0; +} + +bool +Arpeggio_engraver::do_try_music (Music* m) +{ + if (!arpeggio_req_) + { + if (Arpeggio_req *a = dynamic_cast (m)) + { + arpeggio_req_ = a; + return true; + } + } + return false; } void Arpeggio_engraver::acknowledge_element (Score_element_info info) { - if (Stem::has_interface (info.elem_l_)) + if (arpeggio_req_) { - stems_.push (info.elem_l_); + if (Stem::has_interface (info.elem_l_)) + { + stems_.push (info.elem_l_); + } + else if (Rhythmic_head::has_interface (info.elem_l_) + || Local_key_item::has_interface (info.elem_l_)) + { + supports_.push (info.elem_l_); + } } } @@ -48,13 +79,20 @@ Arpeggio_engraver::process_acknowledged () if (!arpeggio_ && !stems_.empty ()) { arpeggio_ = new Item (get_property ("Arpeggio")); + arpeggio_->set_parent (stems_[0], Y_AXIS); + Side_position::set_axis (arpeggio_, X_AXIS); + Side_position::set_direction (arpeggio_, LEFT); Pointer_group_interface pgi (arpeggio_, "stems"); for (int i = 0; i < stems_.size (); i++) { pgi.add_element (stems_[i]); - arpeggio_->add_dependency (stems_[i]); + Side_position::add_support (arpeggio_, stems_[i]); + } + for (int i = 0; i < supports_.size (); i++) + { + Side_position::add_support (arpeggio_, supports_[i]); } - announce_element (arpeggio_, 0); + announce_element (arpeggio_, arpeggio_req_); } } @@ -66,7 +104,9 @@ Arpeggio_engraver::do_pre_move_processing () typeset_element (arpeggio_); arpeggio_ = 0; } + arpeggio_req_ = 0; stems_.clear (); + supports_.clear (); } diff --git a/lily/arpeggio.cc b/lily/arpeggio.cc index 7500ef844b..b05187d805 100644 --- a/lily/arpeggio.cc +++ b/lily/arpeggio.cc @@ -34,15 +34,15 @@ Arpeggio::brew_molecule (SCM smob) } Molecule mol; - Molecule dot = me->paper_l ()->lookup_l (0)->afm_find ("dots-dot"); - Real half_space = Staff_symbol_referencer::staff_space (me) / 2; - for (Real i = iv[MIN]; i <= iv[MAX]; i++) + Molecule arpeggio = me->paper_l ()->lookup_l (0)->afm_find ("scripts-arpeggio"); + Real staff_space = Staff_symbol_referencer::staff_space (me); + for (int i = (int)iv[MIN]/ 2; i < (int)(iv[MAX] - 1)/ 2; i++) { - Molecule d (dot); - d.translate_axis (i * half_space, Y_AXIS); - mol.add_molecule (d); + Molecule a (arpeggio); + a.translate_axis (i * staff_space, Y_AXIS); + mol.add_molecule (a); } - mol.translate (Offset (-3, 0)); + mol.translate (Offset (-2 * staff_space, 0); return mol.create_scheme (); } diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 0c2d6f928d..e928984f3b 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -176,4 +176,11 @@ class Melisma_playing_req : public Request public: VIRTUAL_COPY_CONS (Music); }; + +class Arpeggio_req : public Request +{ +public: + VIRTUAL_COPY_CONS (Music); +}; + #endif // MUSICALREQUESTS_HH diff --git a/lily/include/output-property.hh b/lily/include/output-property.hh index 8590868d81..bea2e0e2d6 100644 --- a/lily/include/output-property.hh +++ b/lily/include/output-property.hh @@ -11,8 +11,7 @@ #define OUTPUT_PROPERTY_HH #include "music.hh" -#include "protected-scm.hh" - +//#include "protected-scm.hh" /* @@ -24,7 +23,8 @@ props: class Output_property : public Music { public: - Output_property(SCM, SCM, SCM); + VIRTUAL_COPY_CONS (Music); + Output_property (SCM, SCM, SCM); }; #endif /* OUTPUT_PROPERTY_HH */ diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index e394708996..c85b0a398e 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -24,6 +24,7 @@ static Keyword_ent the_key_tab[]={ {"autochange", AUTOCHANGE}, + {"arpeggio", ARPEGGIO }, {"spanrequest", SPANREQUEST}, {"commandspanrequest", COMMANDSPANREQUEST}, {"simultaneous", SIMULTANEOUS}, diff --git a/lily/parser.yy b/lily/parser.yy index 701f5c363b..0fd6d6d14b 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -127,6 +127,7 @@ yylex (YYSTYPE *s, void * v_l) /* tokens which are not keywords */ %token AUTOCHANGE +%token ARPEGGIO %token TEXTSCRIPT %token ACCEPTS %token ALTERNATIVE @@ -1070,6 +1071,11 @@ verbose_request: a->set_spot (THIS->here_input ()); $$ = a; } + | ARPEGGIO { + Arpeggio_req *a = new Arpeggio_req; + a->set_spot (THIS->here_input ()); + $$ = a; + } ; sup_quotes: diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 8fb13aeb93..90b0767e67 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -7,10 +7,13 @@ */ #include "engraver.hh" +#include "lily-guile.hh" #include "item.hh" #include "arpeggio.hh" #include "span-arpeggio.hh" #include "group-interface.hh" +#include "side-position-interface.hh" +#include "staff-symbol-referencer.hh" /** @@ -53,9 +56,12 @@ Span_arpeggio_engraver::acknowledge_element (Score_element_info info) void Span_arpeggio_engraver::process_acknowledged () { - if (arpeggios_.size () > 1 && !span_arpeggio_) + if (!span_arpeggio_ && arpeggios_.size () > 1 + && to_boolean (get_property ("connectArpeggios"))) { span_arpeggio_ = new Item (get_property ("SpanArpeggio")); + span_arpeggio_->set_parent (arpeggios_[0], Y_AXIS); + Side_position::set_axis (span_arpeggio_, X_AXIS); Pointer_group_interface pgi (span_arpeggio_, "arpeggios"); for (int i = 0; i < arpeggios_.size () ; i++) { @@ -63,9 +69,6 @@ Span_arpeggio_engraver::process_acknowledged () span_arpeggio_->add_dependency (arpeggios_[i]); } - span_arpeggio_->set_parent (arpeggios_[0], Y_AXIS); - span_arpeggio_->set_parent (arpeggios_[0], X_AXIS); - announce_element (span_arpeggio_, 0); } } diff --git a/lily/span-arpeggio.cc b/lily/span-arpeggio.cc index 5a574a8eb8..ce588cea2b 100644 --- a/lily/span-arpeggio.cc +++ b/lily/span-arpeggio.cc @@ -40,7 +40,7 @@ Span_arpeggio::brew_molecule (SCM smob) common = arpeggio->common_refpoint (common, Y_AXIS); } // Hmm, nothing in common? - if (0) //(common) + if (0) //common) for (SCM s = me->get_elt_property ("arpeggios"); gh_pair_p (s); s = gh_cdr (s)) { Score_element *arpeggio = unsmob_element (gh_car (s)); @@ -52,17 +52,16 @@ Span_arpeggio::brew_molecule (SCM smob) iv = Interval (-23, 5); Molecule mol; - Molecule dot = me->paper_l ()->lookup_l (0)->afm_find ("dots-dot"); - Real half_space = Staff_symbol_referencer::staff_space (me) / 2; - for (Real i = iv[MIN]; i < iv[MAX]; i++) + Molecule arpeggio = me->paper_l ()->lookup_l (0)->afm_find ("scripts-arpeggio"); + Real staff_space = Staff_symbol_referencer::staff_space (me); + for (int i = (int)iv[MIN]/ 2; i < (int)(iv[MAX] - 1)/ 2; i++) { - Molecule d (dot); - d.translate_axis (i * half_space, Y_AXIS); - mol.add_molecule (d); + Molecule a (arpeggio); + a.translate_axis (i * staff_space, Y_AXIS); + mol.add_molecule (a); } - mol.translate (Offset (-6, 0)); + mol.translate (Offset (-2 * staff_space, 0); return mol.create_scheme (); } - diff --git a/ly/engraver.ly b/ly/engraver.ly index de43a4918e..7ec843a289 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -31,10 +31,8 @@ StaffContext=\translator { \consists "Collision_engraver"; \consists "Rest_collision_engraver"; \consists "Local_key_engraver"; - \consists "Piano_pedal_engraver"; - -% \consists "Arpeggio_engraver"; + \consists "Arpeggio_engraver"; \consistsend "Axis_group_engraver"; @@ -202,15 +200,16 @@ GrandStaffContext=\translator{ \accepts "Staff"; } -PianoStaffContext = \translator{\GrandStaffContext - alignmentReference = \center; +PianoStaffContext = \translator{ + \GrandStaffContext + \name "PianoStaff"; \consists "Vertical_align_engraver"; + alignmentReference = \center; VerticalAlignment \push #'threshold = #'(12 . 12) % \consistsend "Axis_group_engraver"; - \name "PianoStaff"; } StaffGroupContext= \translator { diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index 4b53e941bf..365f26c54c 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -39,9 +39,9 @@ else: % input feta-bolletjes; % input feta-banier; % input feta-eindelijk; - input feta-klef; +% input feta-klef; % input feta-toevallig; -% input feta-schrift; + input feta-schrift; % input feta-haak; % input feta-timesig; % input feta-pendaal; diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf index 481e378e50..f4fc744a27 100644 --- a/mf/feta-schrift.mf +++ b/mf/feta-schrift.mf @@ -11,7 +11,6 @@ fet_begingroup("scripts") - def draw_fermata = save alpha, radius, crook_thinness, crook_fatness, dot_diam; @@ -698,6 +697,70 @@ fet_beginchar("Coda", "coda", "coda") fet_endchar; +thick#:=1/24designsize; +define_blacker_pixels(thick); + +rthin:=1/8*staff_space; +rthick:=2thick+rthin; + +def draw_arpeggio = + save alpha; + alpha:=-40; + save ne,nw,se,sw; pair ne,nw,se,sw; + save x,y; + + se=dir alpha; nw=dir (alpha+180); + ne=dir (alpha+90); sw=dir (alpha-90); + penpos1(rthin,alpha+90); + penpos2(5/4rthick,alpha); + penpos4(5/4rthick,alpha); + penpos5(rthin,alpha+90); + penpos3(3/4rthick,alpha); + + z1=(width/2, height) - overshoot*se; + z2=2[z4,(width/2,height/2)]; + z3=1/2[z2,z4]; + x4=2/8staff_space; + y4=rthin; + + z5=2[z1,(width/2,height/2)]; + z6=z2l+1/2rthin*sw; + z7=z4l+1/2rthin*sw+1/2rthin*se; + z8=2[z6,(width/2,height/2)]; + z9=2[z7,(width/2,height/2)]; + + fill z1l{se}..{se}z6..z3l..z7{se}..{se}z5l..z5r{nw}..{nw}z8..z3r..z9{nw}..{nw}z1r.. cycle; + penlabels(1,2,3,4,5,6,7,8,9); + enddef; + +fet_beginchar("Arpeggio","arpeggio","arpeggio"); + %draw_staff (-2, 2, 0.0); + save height, overshoot, width; + height# = staff_space#; + width# = 0.8height#; + overshoot# = 0.25 staff_space#; + define_pixels (height,overshoot,width); + set_char_box(0, width#, 0, height#); + draw_arpeggio; + fet_endchar; + +% Extendable Trill symbol. +% Not yet used +% Rename me to Trill, rename Trill to Tr? +fet_beginchar("Trill-element","trill-element","trill-element"); + save height, overshoot; + height# = staff_space#; + width# = 0.8height#; + overshoot# = 0.25 staff_space#; + define_pixels (height,overshoot,width); + set_char_box(0, height#, 0, width#); + draw_arpeggio; + currentpicture := currentpicture shifted -(width/2, height/2); + currentpicture := currentpicture rotated 90; + currentpicture := currentpicture shifted (height/2, width/2); + fet_endchar; + +% Hmm input feta-slag; fet_endgroup("scripts"); -- 2.39.2