X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ps%2Flilyponddefs.ps;h=c11a7390f5959b0da73f87ce353e30457e5411b5;hb=fd5f1d06eab36c296f9baa0fab71e43753d9a434;hp=768713c521ed18dee5fcc4658300798e12d983e9;hpb=ecc78dcec0897404eb18f103a82d7b192184084b;p=lilypond.git diff --git a/ps/lilyponddefs.ps b/ps/lilyponddefs.ps index 768713c521..c11a7390f5 100644 --- a/ps/lilyponddefs.ps +++ b/ps/lilyponddefs.ps @@ -1,15 +1,54 @@ -%!PS-Adobe-1.0: lilyponddefs +%!PS-Adobe-1.0: lilyponddefs.ps +% +% Functions for direct PostScript output % hmm % /setgray { 1 add } bind def -/stafflinethickness mudelapaperstafflinethickness def -/staffheight mudelapaperstaffheight def +% To let gs load fonts from builddir, do: +% export GS_LIB=$(pwd)/mf/out:/usr/share/texmf/fonts/type1/bluesky/cm + +/staff-line-thickness lilypondpaperlinethickness def +/staff-height lilypondpaperstaffheight def +/line-width lilypondpaperlinewidth def + +% FIXME: why isn't this set (by default) by lily? +% /text-height lilypondpapertextheight def + +/lily-output-units 2.83464 def %% milimeter +% /lily-output-units 0.996264 def %% true points. -/xoffset 30 def -/yoffset 700 def +/output-scale +lilypondpaperoutputscale lily-output-units mul +def -/placebox +/set-ps-scale-to-lily-scale +{ +output-scale output-scale scale +} bind def + +/paper-size { lilypondpaperpapersize } bind def + +% FIXME +% urg, read from paper block +% fixed base line skip value, for single line staves +/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 @@ -20,49 +59,171 @@ grestore } bind def -% -% FIXME. translate to middle of box. -% - -/draw_box % breapth width depth height +/start-system % height { - /h exch def - /d exch def - /w exch def - /b exch def + 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 + line-x line-y translate +} 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 - +/stop-system +{ + /the-line exch def + the-line + stroke grestore + line-y line-height output-scale mul sub /line-y exch def } bind def -/start_line -{ - gsave - xoffset yoffset translate +% FIXME: font definitions should come from LilyPond +% built-in ps fonts are ugly +/huge-bold-font { + /Palatino-Bold findfont 20.7 scalefont setfont } 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 mudelapaperstaffheight 8 mul sub /yoffset exch def +/Large-bold-font { + /Palatino-Bold findfont 17.3 scalefont setfont +} bind def + +/large-bold-font { + /Palatino-Bold findfont 14.4 scalefont setfont +} bind def + +/large-font { + /Palatino-Roman findfont 14.4 scalefont setfont +} bind def + +/large-smallcaps-font { + % urg + /Bookman-Light findfont 14.4 scalefont setfont +} bind def + +/normal-font { + /Palatino-Roman findfont 12 scalefont setfont +} bind def + +/footnote-font { + /Palatino-Roman findfont 10 scalefont setfont +} bind def + +/get-text-dimensions % path .. width height +{ + dup true charpath pathbbox + newpath + line-x line-y moveto + exch 4 -1 roll + sub + 3 1 roll + exch sub +} bind def + +/set-centered +{ + 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 + +/set-left +{ + line-x line-y moveto + get-text-dimensions + neg line-y add /line-y exch def + pop + show +} bind def + +/set-right +{ + 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 + +/make-lilypond-title +{ + currentdict /lilyponddedication known { + normal-font lilyponddedication set-centered + line-y 10 sub /line-y exch def + } if + 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 + line-y /mini-page exch def + currentdict /lilypondcomposer known { + large-smallcaps-font lilypondcomposer set-right + line-y 2 sub /line-y exch def + } if + currentdict /lilypondopus known { + normal-font lilypondopus set-right + line-y 3 sub /line-y exch def + } if + currentdict /lilypondarranger known { + normal-font lilypondarranger set-right + line-y 3 sub /line-y exch def + } if + currentdict /lilypondpoet known { + mini-page /line-y exch def + normal-font lilypondpoet set-left + line-y 3 sub /line-y exch def + } if + currentdict /lilypondtexttranslator known { + normal-font lilypondtexttranslator set-left + line-y 3 sub /line-y exch def + } 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 /turnOnExperimentalFeatures { } bind def -stafflinethickness setlinewidth +staff-line-thickness setlinewidth + +% set postscript paper size +paper-size + +% initialise paper dimensions +staff-height init-paper + +/line-x left-margin output-scale div def +/line-y vsize top-margin sub def + +% FIXME: testing \markup titles +% make-lilypond-title % see if we're there... % 10 setlinewidth 0 0 moveto 400 800 lineto stroke + +% end lilyponddefs.ps