%!PS-Adobe-1.0: lilyponddefs
+%
+% Functions for direct PostScript output
% hmm
-/setgray { 1 add } bind def
+% /setgray { 1 add } bind def
-/xoffset 30 def
-/yoffset 700 def
-/staffrulethickness 1 def
-/staffheight 20 def
+/staff-line-thickness lilypondpaperstafflinethickness def
+/staff-height lilypondpaperstaffheight def
+/line-width lilypondpaperlinewidth def
-/placebox
+% FIXME: why isn't this set (by default) by lily?
+% /text-height lilypondpapertextheight def
+
+/output-scale lilypondpaperoutputscale def
+/paper-size { lilypondpaperpapersize } bind def
+
+% FIXME
+% urg, read from paper block
+% fixed base line skip value, for single line staffs
+/base-line-skip lilypondpaperlineheight def
+
+
+/init-paper {
+ gsave
+ .1 setlinewidth
+ clippath pathbbox newpath
+ /vsize exch def
+ /hsize exch def pop pop pop
+
+ %FIXME:
+ %vsize text-height sub 2 div /top-margin exch def
+ 144 2 div /top-margin exch def
+ hsize line-width sub 2 div /left-margin exch def
+ grestore
+} bind def
+
+/place-box
{
/object exch def
gsave
grestore
} bind def
-/setbold % '(' text ')'
-{
- settext
-} bind def
-
-/settext % '(' text ')'
-{
- gsave
- % urg
- /Times-Roman findfont 12 scalefont setfont
- show
- grestore
-} bind def
+%
+% FIXME. translate to middle of box.
+%
-/setfinger % '(' text ')'
+/draw-box % breapth width depth height
{
+ /h exch def
+ /d exch def
+ /w exch def
+ /b exch def
gsave
- % urg
- /feta-nummer5 findfont 12 scalefont setfont
- show
- grestore
-} bind def
-/setitalic % '(' text ')'
-{
- gsave
- % urg
- /Times-Italic findfont 12 scalefont setfont
- show
- grestore
-} bind def
+ 0 setlinewidth
+ b neg d neg rmoveto
+ b w add 0 rlineto
+ 0 d h add rlineto
+ b w add neg 0 rlineto
+ closepath % 0 d h add neg rlineto
+ fill
-/vrule % width height depth
-{
- gsave
- 3 -1 roll setlinewidth
- neg 0 exch moveto
- 0 exch lineto stroke
grestore
} bind def
-/draw_stem % kern width height depth
+/start-line % height
{
+ dup base-line-skip gt {
+ /line-height exch def
+ }
+ {
+ pop /line-height base-line-skip def
+ } ifelse
+ line-y top-margin sub base-line-skip lt {
+ showpage
+ /line-y vsize top-margin sub def
+ } if
gsave
- 4 -1 roll neg 0 translate
- vrule
- grestore
+ line-x line-y translate
} bind def
-/widthbar % height width
-{
- gsave
- setlinewidth
- 2 div dup neg 0 exch moveto
- 0 exch lineto stroke
- 2 div
+/stop-line
+{
+ /the-line exch def
+ the-line
+ stroke
grestore
+ line-y line-height output-scale mul sub /line-y exch def
} bind def
-/thickbar % height
-{
- stafflinethickness 2 mul widthbar
+% FIXME: font definitions should come from LilyPond
+% built-in ps fonts are ugly
+/huge-bold-font {
+ /Times-Bold findfont 20.7 scalefont setfont
} bind def
-/thinbar % height
-{
- stafflinethickness 1.6 mul widthbar
+/Large-bold-font {
+ /Times-Bold findfont 17.3 scalefont setfont
} bind def
-/maatstreep % height
-{
- thinbar
+/large-bold-font {
+ /Times-Bold findfont 14.4 scalefont setfont
} bind def
-/fatdoublebar
-{
- thickbar
-} bind def
-
-/finishbar
-{
- thickbar
+/large-font {
+ /Times-Roman findfont 14.4 scalefont setfont
} bind def
-/generalmeter % num den
-{
- pop pop
-} bind def
-
-/pianobrace % '(' char ')'
-{
- gsave
- /feta-braces20 findfont 12 scalefont setfont%
- show
- grestore
+/large-smallcaps-font {
+ % urg
+ /Helvetica findfont 14.4 scalefont setfont
} bind def
-/doublebar
-{
- thinbar
+/normal-font {
+ /Times-Roman findfont 12 scalefont setfont
} bind def
-/repeatbar
-{
- thickbar
+/footnote-font {
+ /Times-Roman findfont 10 scalefont setfont
} bind def
-/repeatbarstartrepeat
+/get-text-dimensions % path .. width height
{
- thickbar
+ dup true charpath pathbbox
+ newpath
+ line-x line-y moveto
+ exch 4 -1 roll
+ sub
+ 3 1 roll
+ exch sub
} bind def
-/startbar
+/set-centered
{
- thickbar
+ line-x line-y moveto
+ get-text-dimensions
+ neg line-y add /line-y exch def
+ neg line-width add 2 div 0 rmoveto
+ show
} bind def
-/startrepeat
+/set-left
{
- thickbar
+ line-x line-y moveto
+ get-text-dimensions
+ neg line-y add /line-y exch def
+ pop
+ show
} bind def
-/stoprepeat
+/set-right
{
- thickbar
+ line-x line-y moveto
+ get-text-dimensions
+ neg line-y add /line-y exch def
+ neg line-width add 0 rmoveto
+ show
} bind def
-/start_line
-{
- gsave
- xoffset yoffset translate
+/make-lilypond-title
+{
+ currentdict /lilypondtitle known {
+ huge-bold-font lilypondtitle set-centered
+ line-y 5 sub /line-y exch def
+ } if
+ currentdict /lilypondsubtitle known {
+ Large-bold-font lilypondsubtitle set-centered
+ line-y 5 sub /line-y exch def
+ } if
+ currentdict /lilypondsubsubtitle known {
+ large-bold-font lilypondsubsubtitle set-centered
+ } if
+ currentdict /lilypondcomposer known {
+ large-smallcaps-font lilypondcomposer set-right
+ } if
+ currentdict /lilypondopus known {
+ normal-font lilypondopus set-right
+ } if
+ currentdict /lilypondarranger known {
+ normal-font lilypondarranger set-right
+ } if
+ currentdict /lilypondinstrument known {
+ large-font lilypondinstrument set-centered
+ } if
+ currentdict /lilypondpiece known {
+ large-smallcaps-font lilypondpiece set-left
+ } if
+} bind def
+
+/end-lilypond-output
+{
+ /line-y top-margin def
+ footnote-font lilypondtagline set-left
+ showpage
} bind def
-/stop_line
-{
- /object exch def
- 0 0 moveto pathbbox exch pop sub exch pop
- object
- grestore
- yoffset add /yoffset exch def
- % urg...
- yoffset staffheight 8 mul sub /yoffset exch def
-} bind def
+/turnOnExperimentalFeatures { } bind def
-/unknown { (U) setbold } bind def
-/empty { (E) setbold } bind def
+staff-line-thickness setlinewidth
-/turnOnExperimentalFeatures { } bind def
+% set postscript paper size
+paper-size
-/rulesym % thick length
-{
- gsave
- exch setlinewidth
- 0 lineto stroke
- grestore
-} bind def
+% initialise paper dimensions
+staff-height init-paper
-(lily.ps) findlibfile
-{
- exch pop //systemdict /run get exec
-}
-{
- /undefinedfilename signalerror
-} ifelse
+/line-x left-margin def
+/line-y vsize top-margin sub def
-stafflinethickness setlinewidth
+make-lilypond-title
% see if we're there...
% 10 setlinewidth 0 0 moveto 400 800 lineto stroke