-%!PS-Adobe-1.0: lily.ps
+%!PS-Adobe-1.0: lily.ps
+%
+% Functions for direct and embedded PostScript
-% 2 setlanguagelevel % hmm. auto_resize_dicts doesn't help either.
-% round cappings
+% round cappings
1 setlinecap
+/euclidean_length
+{
+ 1 copy mul exch 1 copy mul add sqrt
+} bind def
-/draw_beam % width slope thick
-{
- 2 div /beam_thick exch def
- /beam_slope exch def
- /beam_wd exch def
- beam_slope beam_wd mul /beam_ht exch def
- 0 beam_thick neg moveto
- beam_wd beam_ht rlineto
- 0 beam_thick 2 mul rlineto
- 0 beam_thick lineto
- closepath fill
-} bind def
+/draw_beam % width slope thick
+{
+ 2 div /beam_thick exch def
+ /beam_slope exch def
+ /beam_wd exch def
+ beam_slope beam_wd mul /beam_ht exch def
+ 0 beam_thick neg moveto
+ beam_wd beam_ht rlineto
+ 0 beam_thick 2 mul rlineto
+ 0 beam_thick lineto
+ closepath fill
+} bind def
-/draw_decrescendo % width height cons thick
+/draw_repeat_slash % width slope thick
{
- setlinewidth
- /cresc_cont exch def
- /cresc_ht exch def
- /cresc_wd exch def
-
- cresc_wd cresc_cont moveto
- 0 cresc_ht lineto
- stroke
- cresc_wd cresc_cont neg moveto
- 0 cresc_ht neg lineto
- stroke
+ /beamthick exch def
+ /slope exch def
+ /width exch def
+ beamthick beamthick slope div euclidean_length
+ /xwid exch def
+ 0 0 moveto
+ xwid 0 rlineto
+ width slope width mul rlineto
+ xwid neg 0 rlineto
+% width neg width angle sin mul neg rlineto
+ closepath fill
} bind def
-/draw_crescendo % width height cons thick
+/draw_hairpin % width start_h end_h thick
{
- setlinewidth
- /cresc_cont exch def
- /cresc_ht exch def
- /cresc_wd exch def
-
- 0 cresc_cont moveto
- cresc_wd cresc_ht lineto
- stroke
- 0 cresc_cont neg moveto
- cresc_wd cresc_ht neg lineto
- stroke
+ setlinewidth
+ /end_h exch def
+ /start_h exch def
+ /wid exch def
+ 0 start_h moveto
+ wid end_h lineto
+ stroke
+ 0 start_h neg moveto
+ wid end_h neg lineto
+ stroke
} bind def
-/lily_distance
-{
- 1 copy mul exch 1 copy mul add sqrt
-} bind def
+/draw_tuplet % height gap dx dy thick dir
+{
+ /dir exch def
+ setlinewidth
+ 1 setlinecap
+ 1 setlinejoin
+ /tuplet_dy exch def
+ /tuplet_dx exch def
+ /tuplet_gapx exch def
+ /tuplet_h exch def
+ tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
-/draw_tuplet % height gap dx dy thick dir
-{
-% urg: the only Level-2 PS, check effect in print
-% true setstrokeadjust
- /dir exch def
- setlinewidth
- 1 setlinecap
- 1 setlinejoin
- /tuplet_dy exch def
- /tuplet_dx exch def
- /tuplet_gapx exch def
- /tuplet_h exch def
- tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
+ 0 0 moveto
+ 0 tuplet_h dir mul lineto
+ tuplet_dx tuplet_gapx sub 2 div
+ tuplet_dy tuplet_gapy sub 2 div tuplet_h dir mul add lineto
+ tuplet_dx tuplet_gapx add 2 div
+ tuplet_dy tuplet_gapy add 2 div tuplet_h dir mul add moveto
+ tuplet_dx tuplet_dy tuplet_h dir mul add lineto
+ tuplet_dx tuplet_dy lineto
+ stroke
+} bind def
+/difficult_draw_ez_ball % ch letter_col ball_col font
+{
+ % font
+ findfont 0.7 scalefont setfont
+ 0.1 setlinewidth
0 0 moveto
- 0 tuplet_h dir mul lineto
- tuplet_dx tuplet_gapx sub 2 div
- tuplet_dy tuplet_gapy sub 2 div tuplet_h dir mul add lineto
- tuplet_dx tuplet_gapx add 2 div
- tuplet_dy tuplet_gapy add 2 div tuplet_h dir mul add moveto
- tuplet_dx tuplet_dy tuplet_h dir mul add lineto
- tuplet_dx tuplet_dy lineto
- stroke
+ 0 setgray
+ 0.5 0 0.5 0 360 arc closepath fill stroke
+ % ball_col
+ 1 eq {
+ 0.01 setlinewidth
+ 1 setgray
+ 0.5 0 0.4 0 360 arc closepath
+ fill stroke
+ } if
+ % letter_col
+ setgray
+ % 0.25 is empiric centering. Change to taste
+ 0.25 -0.25 moveto
+ % ch
+ show
} bind def
-/draw_volta % h w thick vert_start vert_end
+% Simple, but does it work everywhere?
+% The filled circles are drawn by setting the linewidth
+% to 2*radius and drawing a point. Is that (defined to be)
+% a nice filled circle?
+/draw_ez_ball % ch letter_col ball_col font
{
- /vert_end exch def
- /vert_start exch def
- setlinewidth
- /volta_w exch def
- /volta_h exch def
-% urg: the only Level-2 PS, check effect in print
-% true setstrokeadjust
- 1 setlinecap
- 1 setlinejoin
- vert_start 0 eq {
- 0 0 moveto
- 0 volta_h lineto
- } if
- 0 volta_h moveto
- volta_w volta_h lineto
- vert_end 0 eq {
- volta_w 0 lineto
- } if
- stroke
+ % font
+ findfont 0.85 scalefont setfont
+ /origin { 0.45 0 } def
+ 0 setgray
+ 1.1 setlinewidth
+ origin moveto
+ origin lineto stroke
+ % ball_col
+ setgray
+ 0.9 setlinewidth
+ origin moveto
+ origin lineto stroke
+ % letter_col
+ setgray
+ % 0.25 is empiric centering. Change to taste
+ origin moveto
+ -0.28 -0.30 rmoveto
+ % ch
+ show
} bind def
-% this is for drawing slurs.
-/draw_bezier_sandwich % thickness
-{
- setlinewidth
- moveto
- curveto
+/draw_volta % h w thick vert_start vert_end
+{
+ /vert_end exch def
+ /vert_start exch def
+ setlinewidth
+ /volta_w exch def
+ /volta_h exch def
+ 1 setlinecap
+ 1 setlinejoin
+ vert_start 0 eq {
+ 0 0 moveto
+ 0 volta_h lineto
+ } if
+ 0 volta_h moveto
+ volta_w volta_h lineto
+ vert_end 0 eq {
+ volta_w 0 lineto
+ } if
+ stroke
+} bind def
+
+% this is for drawing slurs.
+/draw_bezier_sandwich % thickness controls
+{
+ setlinewidth
+ moveto
+ curveto
+ lineto
+ curveto
+ gsave
+ fill
+ grestore
+ stroke
+} bind def
+
+/draw_dashed_line % dash thickness dx dy
+{
+ 1 setlinecap
+ 1 setlinejoin
+ setdash
+ setlinewidth
+ 0 0 moveto
lineto
- curveto
- gsave
- fill
- grestore
- stroke
-} bind def
+ stroke
+} bind def
-/draw_dashed_slur
-{
- 1 setlinecap
- 1 setlinejoin
- setdash
- setlinewidth
- 8 -2 roll
- moveto
- curveto
- stroke
-} bind def
+/draw_dashed_slur % dash thickness controls
+{
+ 1 setlinecap
+ 1 setlinejoin
+ setdash
+ setlinewidth
+ 8 -2 roll
+ moveto
+ curveto
+ stroke
+} bind def
-/bracket_traject
-{
- /traject_ds exch def
- /traject_alpha exch def
- traject_ds traject_alpha sin mul add
- exch
- traject_ds traject_alpha cos mul add
- exch
-} bind def
+/bracket_traject
+{
+ /traject_ds exch def
+ /traject_alpha exch def
+ traject_ds traject_alpha sin mul add
+ exch
+ traject_ds traject_alpha cos mul add
+ exch
+} bind def
/half_bracket
-{
-%6
- 0 0
-%5a
- bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
- bracket_alpha bracket_v -0.15 mul bracket_traject
-%5b
- 1 bracket_h
- 0 bracket_v 0.5 mul bracket_traject
-%5c
- 0 bracket_h
-%4a
- bracket_b bracket_h bracket_t sub
- 0 bracket_v 0.4 mul bracket_traject
-%4b
- bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
- bracket_alpha bracket_v -0.25 mul bracket_traject
-%4c
- bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
-%3
- bracket_b bracket_h bracket_t sub
-%2
- bracket_b 0
-%1
- 0 0
-} bind def
+{
+%6
+ 0 0
+%5a
+ bracket_thick arch_height add half_height arch_thick sub arch_width add
+ arch_angle arch_height -0.15 mul bracket_traject
+%5b
+ bracket_thick 0.5 mul half_height
+ 0 arch_height 0.5 mul bracket_traject
+%5c
+ 0 half_height
+%4a
+ bracket_thick half_height arch_thick sub
+ 0 arch_height 0.4 mul bracket_traject
+%4b
+ bracket_thick arch_height add half_height arch_thick sub arch_width add
+ arch_angle arch_height -0.25 mul bracket_traject
+%4c
+ bracket_thick arch_height add half_height arch_thick sub arch_width add
+%3
+ bracket_thick half_height arch_thick sub
+%2
+ bracket_thick 0
+%1
+ 0 0
+} bind def
-/draw_half_bracket {
- moveto
- lineto
- lineto
- curveto
- curveto
- lineto
- gsave
- fill
- grestore
-} bind def
+/draw_half_bracket {
+ moveto
+ lineto
+ lineto
+ curveto
+ curveto
+ lineto
+ gsave
+ fill
+ grestore
+} bind def
-/draw_bracket % height
-{
- 2 div bracket_b add /bracket_h exch def
- bracket_t setlinewidth
-% urg: the only Level-2 PS, check effect in print
-% true setstrokeadjust
- 1 setlinecap
- 1 setlinejoin
- half_bracket
- 20 copy
- 1 -1 scale
- draw_half_bracket
- stroke
- 1 -1 scale
-% ugh, ugh:
- 0.05 0 translate
- draw_half_bracket
- stroke
-} bind def
+/draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick
+{
+ % urg
+
+ /bracket_thick exch def
+ /arch_thick exch def
+ /bracket_height exch def
+ /arch_height exch def
+ /arch_width exch def
+ /arch_angle exch def
+
+ bracket_height 2 div bracket_thick add /half_height exch def
+ bracket_thick 0.5 mul setlinewidth
+ 1 setlinecap
+ 1 setlinejoin
+ half_bracket
+ 20 copy
+ 1 -1 scale
+ draw_half_bracket
+ stroke
+ 1 -1 scale
+ draw_half_bracket
+ stroke
+} bind def