%!! here is an experimental decoration extension !!
%!! syntax may change in next releases !!
%
% == postscript definitions - must be before any tune ==
%
% -- cresc / decresc / dimin
%%postscript /crdc{	% usage: str x y crdc - cresc, decresc, ..
%%postscript	/Times-Italic 14 selectfont
%%postscript	M -6 4 RM show}!

%
% -- alternate piano/forte indication between parenthesis
%%postscript /apf{	% usage: str x y apf
%%postscript	M -6 5 RM
%%postscript	/Times-Italic 16 selectfont (\() show
%%postscript	/Times-BoldItalic 16 selectfont show
%%postscript	/Times-Italic 16 selectfont (\)) show}!
%
% -- draw parenthesis around a note
%%postscript /opnot{	% usage: x y opnot
%%postscript	M -6 -3 RM /Times-Roman 16 selectfont (\(   \)) show}!
%
% -- draw octava indication
%%postscript /octava{	% usage: len x y octava
%%postscript	exch -10 add exch 2 copy
%%postscript	M 0 10 RM /Times-Roman 16 selectfont (8) show
%%postscript	/Times-Roman 12 selectfont (va) show
%%postscript	M 0 6 RL currentpoint stroke M
%%postscript	[6] 0 setdash 30 add 0 RL currentpoint stroke M
%%postscript	[] 0 setdash 0 -6 RL stroke}!
%%postscript /octavab{	% usage: len x y octavab
%%postscript	exch -14 add exch 2 copy
%%postscript	M 0 2 RM /Times-Roman 16 selectfont (8) show
%%postscript	/Times-Roman 12 selectfont (va basso) show
%%postscript	22 add M 0 -6 RL currentpoint stroke M
%%postscript	[6] 0 setdash 30 add 0 RL stroke
%%postscript	[] 0 setdash}!
%
% -- repeat sign in a stem
%%postscript /repst{	% usage: x y repst
%%postscript	M -3 -13 RM 9 3 RL 0 -3 RL -9 -3 RL fill}!
%
% -- write big letters (position marks) above the staff
% (from Guido Gonzato)
%%postscript /bigl{	% usage: str x y bigl
%%postscript	/Times-Bold 26 selectfont
%%postscript	4 add M cshow gsave
%%postscript	1 setlinewidth 1 -2 RM
%%postscript	0 22 RL -22 0 RL
%%postscript	0 -22 RL 22 0 RL
%%postscript	stroke grestore}!
% (from Jonas Petersson)
%%postscript /biglc {    % usage: str x y biglc
%%postscript    2 copy 5 2 roll /Times-Bold 22 selectfont
%%postscript    6 add M cshow gsave
%%postscript    1 setlinewidth 13 add newpath
%%postscript    12 0 360 arc
%%postscript    stroke grestore}!
%
% -- pedal glyph
% (from CMN http://ccrma-www.stanford.edu/software/cmn/cmn/cmn.html)
%%postscript /ped {	% usage: str x y ped
%%postscript	gsave 4 add exch -10 add exch T 26 dup scale
%%postscript	0.368 0.074 moveto
%%postscript	0.341 0.121 0.335 0.147 0.371 0.203 curveto
%%postscript	0.435 0.289 0.531 0.243 0.488 0.155 curveto
%%postscript	0.472 0.117 0.434 0.096 0.414 0.080 curveto
%%postscript	0.429 0.038 0.494 -0.006 0.541 0.075 curveto
%%postscript	0.559 0.123 0.558 0.224 0.663 0.252 curveto
%%postscript	0.603 0.354 0.449 0.393 0.461 0.405 curveto
%%postscript	0.902 0.262 0.705 -0.124 0.555 0.046 curveto
%%postscript	0.488 -0.032 0.417 0.021 0.389 0.055 curveto
%%postscript	0.303 -0.018 0.303 -0.020 0.248 0.040 curveto
%%postscript	0.218 0.108 0.191 0.062 0.164 0.047 curveto
%%postscript	0.010 -0.056 0.032 0.019 0.124 0.062 curveto
%%postscript	0.229 0.117 0.200 0.091 0.228 0.195 curveto
%%postscript	0.240 0.241 0.149 0.250 0.166 0.311 curveto
%%postscript	0.207 0.493 lineto
%%postscript	-0.041 0.441 0.049 0.261 0.126 0.387 curveto
%%postscript	0.138 0.381 lineto
%%postscript	-0.020 0.119 -0.100 0.472 0.220 0.507 curveto
%%postscript	0.548 0.486 0.399 0.171 0.254 0.374 curveto
%%postscript	0.264 0.384 lineto
%%postscript	0.338 0.259 0.521 0.449 0.228 0.488 curveto
%%postscript	0.198 0.356 lineto
%%postscript	0.181 0.304 0.273 0.294 0.262 0.241 curveto
%%postscript	0.229 0.101 lineto
%%postscript	0.273 0.070 0.282 -0.038 0.368 0.074 curveto
%%postscript	0.391 0.094 moveto
%%postscript	0.456 0.130 0.476 0.171 0.468 0.213 curveto
%%postscript	0.452 0.276 0.333 0.171 0.391 0.094 curveto
%%postscript	0.627 0.019 moveto
%%postscript	0.533 0.041 0.586 0.228 0.678 0.229 curveto
%%postscript	0.729 0.170 0.712 0.025 0.627 0.019 curveto
%%postscript	eofill
%%postscript	0.8 0.04 0.04 0 360 newpath arc fill
%%postscript	pop grestore}!
%
% -- pedal off glyph
% (from CMN http://ccrma-www.stanford.edu/software/cmn/cmn/cmn.html)
%%postscript /pedoff {	% usage: str x y ped
%%postscript	gsave 4 add exch -5 add exch T 26 dup scale
%%postscript	0.219 0.198 moveto
%%postscript	0.231 0.172 0.195 0.138 0.162 0.173 curveto
%%postscript	0.149 0.219 0.206 0.231 0.219 0.198 curveto
%%postscript	0.144 0.242 moveto
%%postscript	0.166 0.223 0.193 0.230 0.181 0.267 curveto
%%postscript	0.178 0.306 0.144 0.302 0.151 0.335 curveto
%%postscript	0.160 0.381 0.225 0.377 0.224 0.330 curveto
%%postscript	0.228 0.302 0.198 0.306 0.197 0.267 curveto
%%postscript	0.194 0.237 0.213 0.222 0.237 0.247 curveto
%%postscript	0.263 0.276 0.234 0.297 0.268 0.322 curveto
%%postscript	0.314 0.347 0.354 0.297 0.316 0.259 curveto
%%postscript	0.296 0.237 0.273 0.266 0.246 0.237 curveto
%%postscript	0.223 0.217 0.232 0.194 0.266 0.197 curveto
%%postscript	0.303 0.202 0.302 0.232 0.332 0.228 curveto
%%postscript	0.381 0.232 0.388 0.156 0.332 0.152 curveto
%%postscript	0.302 0.148 0.302 0.185 0.266 0.183 curveto
%%postscript	0.231 0.186 0.228 0.169 0.245 0.143 curveto
%%postscript	0.273 0.116 0.297 0.141 0.316 0.117 curveto
%%postscript	0.350 0.075 0.303 0.029 0.258 0.062 curveto
%%postscript	0.237 0.082 0.261 0.102 0.233 0.133 curveto
%%postscript	0.212 0.151 0.194 0.147 0.197 0.113 curveto
%%postscript	0.203 0.075 0.232 0.075 0.230 0.043 curveto
%%postscript	0.223 -0.004 0.159 -0.002 0.152 0.042 curveto
%%postscript	0.148 0.075 0.185 0.076 0.183 0.113 curveto
%%postscript	0.183 0.147 0.163 0.150 0.141 0.133 curveto
%%postscript	0.113 0.104 0.140 0.079 0.113 0.059 curveto
%%postscript	0.069 0.037 0.033 0.077 0.063 0.117 curveto
%%postscript	0.082 0.141 0.104 0.117 0.132 0.142 curveto
%%postscript	0.153 0.163 0.144 0.188 0.113 0.182 curveto
%%postscript	0.073 0.182 0.075 0.147 0.046 0.152 curveto
%%postscript	-0.003 0.152 -0.003 0.227 0.048 0.227 curveto
%%postscript	0.075 0.231 0.075 0.198 0.113 0.196 curveto
%%postscript	0.141 0.197 0.147 0.207 0.133 0.237 curveto
%%postscript	0.102 0.264 0.082 0.237 0.062 0.261 curveto
%%postscript	0.028 0.302 0.077 0.347 0.118 0.318 curveto
%%postscript	0.138 0.297 0.116 0.275 0.144 0.242 curveto
%%postscript	fill pop grestore}!
%
% -- glissendo start/stop
%%postscript /glistart {	% usage: x y glistart
%%postscript	/yg exch def 5 add /xg exch def}!
%%postscript /glistop {		% usage: x y glistop
%%postscript	gsave xg yg T
%%postscript	yg sub exch 5 add xg sub exch	% dx dy
%%postscript	2 copy exch atan dup rotate	% dx dy alpha
%%postscript	exch pop cos div		% len
%%postscript	10 0 T 0 0 M
% %postscript	20 sub 0 RL		% simple line
%%postscript	26 sub 0 8 3 -1 roll {		% squiggly line
%%postscript	2 -1.15 2.30 150 30 arcn 4 0 T
%%postscript	2 1.15 2.30 -150 -30 arc 4 0 T pop
%%postscript	} for
%%postscript	stroke grestore}!
%
% -- upper glissendo
%%postscript /glissup {		% usage: x y glissup
%%postscript	gsave T 5 0 T
%%postscript	25 rotate 10 0 T 0 0 M
%%postscript	0 8 8 {
%%postscript	2 -1.15 2.30 150 30 arcn 4 0 T
%%postscript	2 1.15 2.30 -150 -30 arc 4 0 T pop
%%postscript	} for
%%postscript	stroke grestore}!
%
% -- note decorations
% (sorry for I don't know the name of these: there so many ones)
% The convention I use here is:
%	- t2 or t3: mordent with 2 or 3 peeks
%	- ta or tb: turn from above or from below
%	- b, ub or db: middle, upper or lower bar
%%postscript /tr3 {		% usage: x y tr3 - mordent with 3 peeks
%%postscript	M 2.2 2.2 RL 2.1 -2.9 RL 0.7 0.7 RL
%%postscript	2.2 2.2 RL 2.1 -2.9 RL 0.7 0.7 RL
%%postscript	2.2 2.2 RL 2.1 -2.9 RL 0.7 0.7 RL
%%postscript	-2.2 -2.2 RL -2.1 2.9 RL -0.7 -0.7 RL
%%postscript	-2.2 -2.2 RL -2.1 2.9 RL -0.7 -0.7 RL
%%postscript	-2.2 -2.2 RL -2.1 2.9 RL -0.7 -0.7 RL fill}!
%%postscript /t2ub {	% usage: x y t2ub - mordent ending with an upper bar
%%postscript	2 copy umrd 0.6 setlinewidth
%%postscript	M 5 4 RM 0 6 RL stroke}!
%%postscript /t3tab {	% usage: x y t3tab - mordent + upper turn and bar
%%postscript	4 add 2 copy exch 7.5 sub exch tr3 exch 7.5 add exch
%%postscript	2 copy 0.6 setlinewidth M 2 6 14 6 16 0 RC
%%postscript	M 8 1 RM 0 6 RL stroke}!
%%postscript /ubt3ta {	% usage: x y ubt3ta - up bar + mordent + upper turn
%%postscript	4 add 2 copy 0.6 setlinewidth
%%postscript	M -7.5 0 RM 0 6 RL stroke
%%postscript	2 copy exch 7.5 sub exch tr3
%%postscript	M 7.5 0 RM 2 6 14 6 16 0 RC stroke}!
%%postscript /tbt3 {	% usage: x y tbt3 - low turn + long mordent
%%postscript	exch 10 sub exch 6 add 2 copy 0.6 setlinewidth
%%postscript	M -8 0 RM 2 -6 14 -6 16 0 RC stroke
%%postscript	exch 8 add exch tr3}!
%%postscript /t2ta {	% usage: x y t2ta - mordent + upper turn
%%postscript	2 copy umrd
%%postscript	M 5 4 RM 1 5 9 5 10 0 RC stroke}!
%%postscript /t3b {	% usage: x y t3b - upper + lower mordent
%%postscript	2 copy exch -7.5 add exch 4 add tr3 0.6 setlinewidth
%%postscript	M 2.5 0 RM 0 8 RL stroke}!
%%postscript /sharp {	% usage: x y sharp - sharp above note
%%postscript	4 add gsave T 0.6 dup scale 0 0 sh0 grestore}!
%%postscript /flat {	% usage: x y flat - flat above note
%%postscript	4 add gsave T 0.6 dup scale 0 0 ft0 grestore}!
%%postscript /natural {	% usage: x y natural - natural sign above note
%%postscript	4 add gsave T 0.6 dup scale 0 0 nt0 grestore}!
%
% -- 'treble-8' customization
%%postscript /octl {
%%postscript	/Times-BoldItalic 16 selectfont M 5.5 -14 RM (8vb) show}!
%
% -- latin guitar chords
%%postscript /gcshow{
%%postscript	-5 0 RM
%%postscript	dup 0 get
%%postscript	dup 65 eq {(La) show}
%%postscript	  {dup 66 eq {(Si) show}
%%postscript	    {dup 67 eq {(Do) show}
%%postscript	      {dup 68 eq {(Re) show}
%%postscript		{dup 69 eq {(Mi) show}
%%postscript		  {dup 70 eq {(Fa) show}
%%postscript		    {dup 71 eq {(Sol) show}
%%postscript		      {tempstr 0 2 index put tempstr show
%%postscript		      } ifelse
%%postscript		    } ifelse
%%postscript		  } ifelse
%%postscript		} ifelse
%%postscript	      } ifelse
%%postscript	    } ifelse
%%postscript	  } ifelse
%%postscript	pop dup dup length 1 sub 1 exch getinterval
%%postscript	{dup 129 eq {sharp_glyph}
%%postscript	  {dup 130 eq {flat_glyph}
%%postscript	    {dup 131 eq {nat_glyph}
%%postscript		{tempstr 0 2 index put tempstr show}
%%postscript		ifelse}
%%postscript	    ifelse}
%%postscript	  ifelse pop}
%%postscript	forall
%%postscript	pop}!
%
% == decoration definitions ==
%
% actual syntax (see format.txt):
%	%%deco <name> <c_func> <ps_func> <h> <wl> <wr> [<str>]
%
% -- dynamic indication below the staff
%%deco fp 6 pf 20 2 5 fp
%%deco mp 6 pf 20 2 5 mp
%%deco cresc 6 crdc 20 2 14 Cresc.
%%deco decresc 6 crdc 20 2 20 Decresc.
%%deco dimin 6 crdc 20 2 14 Dimin.
%%deco riten 6 crdc 20 2 24 Poco riten.
%
% -- dynamic indication below the staff between parenthesis
%%deco (p) 6 apf 20 2 8 p
%%deco (pp) 6 apf 20 2 11 pp
%%deco (f) 6 apf 20 2 8 f
%%deco (ff) 6 apf 20 2 11 ff
%
% -- repeat indication above the staff
%%deco alcoda 3 dacs 20 0 0 al Coda
%
% -- who asked for a Pedal indication ?
%%deco ped 6 ped 20 0 0
%%deco ped-end 6 pedoff 20 0 0
%
% -- optional note
%%deco () 1 opnot 0 0 0
%
% -- start / stop of octava indication
%%deco 8( 5 - 24 0 0
%%deco 8) 5 octava 24 0 0
%%deco 8b( 7 - 24 0 0
%%deco 8b) 7 octavab 24 0 0
%
% -- repeat stem
%%deco / 1 repst 0 0 0
%
% -- big letters
%%deco biga 3 bigl 20 0 0 A
%%deco bigb 3 biglc 20 0 0 B
% ...
%
% -- glissendo
%%deco -( 1 glistart 0 0 0
%%deco -) 1 glistop 0 0 0
%%deco - 1 glissup 0 2 10
%
% -- note decorations
%%deco t2ub 3 t2ub 12 5 5
%%deco t3tab 3 t3tab 12 8 24
%%deco ubt3ta 3 ubt3ta 12 8 24
%%deco tbt3 3 tbt3 14 14 18
%%deco t2ta 3 t2ta 12 5 15
%%deco t3b 3 t3b 12 5 15
%%deco # 3 sharp 8 0 0
%%deco b 3 flat 8 0 0
%%deco = 3 natural 8 0 0

X:1
T:Customized decorations
M:C
K:C treble-8
!biga!y!fp!"C"C!t2ub!C !cresc!"D"D!t3tab!D !decresc!"E"E!ubt3ta!E !dimin!"F"F!tbt3!F|\
!mp!"G"G!t2ta!G !(p)!A!t3b!c !b!T!(pp)!A2 !#!P!(f)!B2|!=!M!(ff)!c8|
K: clef=treble
!8(!!riten!EF !-!G2 !ped!GA!ped-end!B!8)!c|!8b(!!bigb!CDE!()!F GAB!8b)!!alcoda!c|\
CD!-(!E2!-)!!/!"free text"c4|
