-%
-% WARNING: don't leave blank lines in the PS-code; they are
-% transformed into \par
-%
-
-%
-% Should put in a lily-ps.ps header?
-%
-%
-
-%
-% header info (macros/defs, etc) should go into a \special{! ... },
-% note the ! sign. See dvips.info for details.
-%
-
-% Use of
-% /foo { operatorname } bind def
-%
-% ``compiles'' operatorname binding in the body of foo, making
-% the code faster, and more reliable (less flexible)
-
-
-% transplant a TeX dimension into the PS output.
-\def\PSsetTeXdimen#1{\expandafter\special{! /#1 (\the\csname #1\endcsname) deftexdimen}}
-
-\def\turnOnPostScript{%
-\def\embeddedps##1{%
- % This sets CTM so that you get to the currentpoint
- % by executing a 0 0 moveto
- \special{ps: @beginspecial @setspecial ##1 @endspecial}
-}
-%
-% width, slope, height
-%
-\special{! % round cappings
-1 setlinecap
-/draw_beam
-{
- 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
-% PS helper: convert (0.2pt) to the token 0.2
-/settexdimen { /thestring exch def
- thestring 0 thestring length 2 sub
- getinterval
- token
- pop exch pop }
-def
-%
-/deftexdimen {
- settexdimen
- def
-} def
-}
-%
-\PSsetTeXdimen{staffrulethickness}
-\PSsetTeXdimen{staffheight}
-\special{! %
-/draw_decresc
- {
- staffrulethickness 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
- }
- bind def
- /draw_cresc
- {
- staffrulethickness 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
- }
- bind def
- /lily_distance {
- 1 copy mul exch 1 copy mul add sqrt
- } bind def
- /draw_plet
- {
- staffrulethickness setlinewidth
- /dir exch def
- /plet_dy exch def
- /plet_dx exch def
- staffheight 2 div /plet_gapx exch def
- plet_dy plet_dx div plet_gapx mul /plet_gapy exch def
- staffheight 4 div dir mul /plet_h exch def
-%
- 0 0 moveto
- 0 plet_h lineto
- plet_dx plet_gapx sub 2 div
- plet_dy plet_gapy sub 2 div plet_h add lineto
- plet_dx plet_gapx add 2 div
- plet_dy plet_gapy add 2 div plet_h add moveto
- plet_dx plet_dy plet_h add lineto
- plet_dx plet_dy lineto
- stroke
- }
- bind def
- staffheight 2 div /slurhtlimit exch def
-/draw_slur
-{
- staffrulethickness setlinewidth
- 0 0 moveto
- rcurveto
- rcurveto
- gsave
- fill
- grestore
- stroke
- } bind def
-}}
-
-\def\turnOnExperimentalFeatures{%
-% draw a slur in embedded postscript
-\special{ps:
-}}
-
+%% lily-ps-defs.tex
+%%
+\edef\lilypsdefsELC{\the\endlinechar}%
+\endlinechar -1\relax
+
+%% Header info (macros/defs, etc) should go into a \special{! ... };
+%% note the ! sign. See dvips.info for details.
+%%
+%% We protect punctuation characters with \string to avoid problems with
+%% language specific shorthands (e.g. `:' for French, `"' for German, etc.).
+
+\gdef\lilypondsetdimen#1{
+ \expandafter\gdef\csname #1ps\endcsname{}
+ \special{
+ \string!
+ /#1 (\csname #1\endcsname) set_tex_dimen}}
+
+\gdef\lilypondspace{ }
+
+\gdef\lilypondpostscript{
+ %% A document processed with lilypond-book can contain music fragments in
+ %% different sizes. To reduce overhead, we define `lyscaleXXX' PS macros
+ %% only once.
+ \lilypondifundefined{lyscale\lilypondpaperoutputscale}
+ {\expandafter\gdef\csname lyscale\lilypondpaperoutputscale\endcsname{}
+ %% This sets CTM so that you get to the currentpoint
+ %% by executing a 0 0 moveto
+ \special{
+ \string!
+ /lyscale\lilypondpaperoutputscale
+ {\lilypondpaperoutputscale\lilypondspace\scaletounit %
+ dup scale} def}}
+ {}
+
+ \def\embeddedps##1{
+ \special{
+ \string"
+ lyscale\lilypondpaperoutputscale\lilypondspace ##1}}}
+
+\endlinechar \lilypsdefsELC
+\endinput
+
+%% end lily-ps-defs.tex