emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/etc/ps-prin1.ps [emacs-unicode-2]


From: Kenichi Handa
Subject: [Emacs-diffs] Changes to emacs/etc/ps-prin1.ps [emacs-unicode-2]
Date: Fri, 26 Sep 2003 07:28:17 -0400

Index: emacs/etc/ps-prin1.ps
diff -c /dev/null emacs/etc/ps-prin1.ps:1.15.6.1
*** /dev/null   Fri Sep 26 07:28:16 2003
--- emacs/etc/ps-prin1.ps       Fri Sep 26 07:28:16 2003
***************
*** 0 ****
--- 1,877 ----
+ % === BEGIN ps-print prologue 1
+ % version: 6.0
+ 
+ % Copyright (C) 2000, 2001  Free Software Foundation, Inc.
+ %
+ % This file is part of GNU Emacs.
+ %
+ % GNU Emacs is free software; you can redistribute it and/or modify
+ % it under the terms of the GNU General Public License as published by
+ % the Free Software Foundation; either version 2, or (at your option)
+ % any later version.
+ %
+ % GNU Emacs is distributed in the hope that it will be useful,
+ % but WITHOUT ANY WARRANTY; without even the implied warranty of
+ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ % GNU General Public License for more details.
+ %
+ % You should have received a copy of the GNU General Public License
+ % along with GNU Emacs; see the file COPYING.  If not, write to the
+ % Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ % Boston, MA 02111-1307, USA.
+ 
+ % As a special exception, the copyright holders of this module give
+ % you permission to include the module in a Postscript file generated
+ % by Emacs or other free software together with the result of
+ % converting text to be printed, regardless of the license terms of
+ % that text, and to use under terms of your choice the page images
+ % resulting from formatting said combination.  If you modify this
+ % module, you may extend this exception to your version of the module
+ % but you are not obligated to do so.  If you do not wish to do so,
+ % delete this exception statement from your version.
+ 
+ 
+ % ISOLatin1Encoding stolen from ps_init.ps in GhostScript 2.6.1.4:
+ /ISOLatin1Encoding where{pop}{
+ % -- The ISO Latin-1 encoding vector isn't known, so define it.
+ % -- The first half is the same as the standard encoding,
+ % -- except for minus instead of hyphen at code 055.
+ /ISOLatin1Encoding
+ StandardEncoding 0 45 getinterval aload pop
+     /minus
+ StandardEncoding 46 82 getinterval aload pop
+ %*** NOTE: the following are missing in the Adobe documentation,
+ %*** but appear in the displayed table:
+ %*** macron at 0225, dieresis at 0230, cedilla at 0233, space at 0240.
+ % 0200 (128)
+     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+     /dotlessi/grave/acute/circumflex/tilde/macron/breve/dotaccent
+     /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron
+ % 0240 (160)
+     /space/exclamdown/cent/sterling
+       /currency/yen/brokenbar/section
+     /dieresis/copyright/ordfeminine/guillemotleft
+       /logicalnot/hyphen/registered/macron
+     /degree/plusminus/twosuperior/threesuperior
+       /acute/mu/paragraph/periodcentered
+     /cedilla/onesuperior/ordmasculine/guillemotright
+       /onequarter/onehalf/threequarters/questiondown
+ % 0300 (192)
+     /Agrave/Aacute/Acircumflex/Atilde
+       /Adieresis/Aring/AE/Ccedilla
+     /Egrave/Eacute/Ecircumflex/Edieresis
+       /Igrave/Iacute/Icircumflex/Idieresis
+     /Eth/Ntilde/Ograve/Oacute
+       /Ocircumflex/Otilde/Odieresis/multiply
+     /Oslash/Ugrave/Uacute/Ucircumflex
+       /Udieresis/Yacute/Thorn/germandbls
+ % 0340 (224)
+     /agrave/aacute/acircumflex/atilde
+       /adieresis/aring/ae/ccedilla
+     /egrave/eacute/ecircumflex/edieresis
+       /igrave/iacute/icircumflex/idieresis
+     /eth/ntilde/ograve/oacute
+       /ocircumflex/otilde/odieresis/divide
+     /oslash/ugrave/uacute/ucircumflex
+       /udieresis/yacute/thorn/ydieresis
+ 256 packedarray def
+ }ifelse
+ 
+ /reencodeFontISO{ %def
+   dup
+   length 12 add dict  % Make a new font (a new dict the same size
+                       % as the old one) with room for our new symbols.
+ 
+   begin                       % Make the new font the current dictionary.
+ 
+     % Copy each of the symbols from the old dictionary
+     % to the new one except for the font ID.
+     {1 index/FID ne{def}{pop pop}ifelse}forall
+ 
+     % Override the encoding with the ISOLatin1 encoding.
+     currentdict/FontType get 0 ne{/Encoding ISOLatin1Encoding def}if
+ 
+     % Use the font's bounding box to determine the ascent, descent,
+     % and overall height; don't forget that these values have to be
+     % transformed using the font's matrix.
+ 
+ %          ^    (x2 y2)
+ %          |       |
+ %          |       v
+ %          |  +----+ - -
+ %          |  |    |   ^
+ %          |  |    |   | Ascent (usually > 0)
+ %          |  |    |   |
+ % (0 0) -> +--+----+-------->
+ %             |    |   |
+ %             |    |   v Descent (usually < 0)
+ % (x1 y1) --> +----+ - -
+ 
+     currentdict/FontType get 0 ne
+     {/FontBBox load aload pop                 % -- x1 y1 x2 y2
+      FontMatrix transform/Ascent  exch def pop
+      FontMatrix transform/Descent exch def pop}
+     {/PrimaryFont FDepVector 0 get def
+      PrimaryFont/FontBBox get aload pop
+      PrimaryFont/FontMatrix get transform/Ascent exch def pop
+      PrimaryFont/FontMatrix get transform/Descent exch def pop}ifelse
+ 
+     /FontHeight Ascent Descent sub def        % use `sub' because descent < 0
+ 
+     % Define these in case they're not in the FontInfo
+     % (also, here they're easier to get to).
+     /UnderlinePosition  Descent 0.70 mul def
+     /OverlinePosition   Descent UnderlinePosition sub Ascent add def
+     /StrikeoutPosition  Ascent 0.30 mul def
+     /LineThickness      FontHeight 0.05 mul def
+     /Xshadow            FontHeight  0.08 mul def
+     /Yshadow            FontHeight -0.09 mul def
+     /SpaceBackground    Descent neg UnderlinePosition add def
+     /XBox               Descent neg def
+     /YBox               LineThickness 0.7 mul def
+ 
+     currentdict               % Leave the new font on the stack
+     end                       % Stop using the font as the current dictionary.
+     definefont                % Put the font into the font dictionary
+     pop                       % Discard the returned font.
+ }bind def
+ 
+ % Font definition
+ /DefFont{findfont exch scalefont reencodeFontISO}def
+ 
+ % Font selection
+ /F{
+   findfont
+   dup/Ascent            get/Ascent            exch def
+   dup/Descent           get/Descent           exch def
+   dup/FontHeight        get/FontHeight        exch def
+   dup/UnderlinePosition get/UnderlinePosition exch def
+   dup/OverlinePosition  get/OverlinePosition  exch def
+   dup/StrikeoutPosition get/StrikeoutPosition exch def
+   dup/LineThickness     get/LineThickness     exch def
+   dup/Xshadow           get/Xshadow           exch def
+   dup/Yshadow           get/Yshadow           exch def
+   dup/SpaceBackground   get/SpaceBackground   exch def
+   dup/XBox              get/XBox              exch def
+   dup/YBox              get/YBox              exch def
+   setfont
+ }def
+ 
+ /FG/setrgbcolor load def
+ 
+ /bg false def
+ /BG{
+   dup/bg exch def
+   {[4 1 roll]}
+   {[1.0 1.0 1.0]}
+   ifelse
+   /bgcolor exch def
+ }def
+ 
+ %  B    width    C
+ %   +-----------+
+ %               | Ascent  (usually > 0)
+ % A +           +
+ %               | Descent (usually < 0)
+ %   +-----------+
+ %  E    width    D
+ 
+ /dobackground{                                % width --
+   currentpoint                                % -- width x y
+   gsave
+     newpath
+     moveto                            % A (x y)
+     0 Ascent rmoveto                  % B
+     dup 0 rlineto                     % C
+     0 Descent Ascent sub rlineto      % D
+     neg 0 rlineto                     % E
+     closepath
+     FillBgColor
+   grestore
+ }def
+ 
+ /eolbg{                                       % dobackground until right 
margin
+   PrintWidth                          % -- x-eol
+   currentpoint pop                    % -- cur-x
+   sub                                 % -- width until eol
+   dobackground
+ }def
+ 
+ /LineHS LineHeight LineSpacing add def
+ /ParagraphHS LineHeight ParagraphSpacing add def
+ /PSL{/h exch def bg{eolbg}if  0  currentpoint exch pop h sub  moveto}def
+ /PLN{PrintLineNumber{doLineNumber}if}def
+ 
+ /SL{LineHS PSL isLineStep pop}def     % Soft Linefeed
+ 
+ /PHL{ParagraphHS PSL PLN}def          % Paragraph Hard Linefeed
+ /LHL{LineHS PSL PLN}def                       % Hard Linefeed
+ 
+ % Some debug
+ /dcp{currentpoint exch 40 string cvs print(, )print =}def
+ /dp{print 2 copy  exch 40 string cvs print(, )print =}def
+ 
+ /W{
+   ( )stringwidth      % Get the width of a space in the current font.
+   pop                 % Discard the Y component.
+   mul                 % Multiply the width of a space
+                       % by the number of spaces to plot
+   bg{dup dobackground}if
+   0 rmoveto
+ }def
+ 
+ /Effect          0 def
+ /EffectUnderline false def
+ /EffectStrikeout false def
+ /EffectOverline  false def
+ /EffectShadow    false def
+ /EffectBox       false def
+ /EffectOutline   false def
+ 
+ % effect: 1  - underline  2   - strikeout  4  - overline
+ %         8  - shadow     16  - box        32 - outline
+ /EF{
+   /Effect exch def
+   /EffectUnderline Effect 1  and 0 ne def
+   /EffectStrikeout Effect 2  and 0 ne def
+   /EffectOverline  Effect 4  and 0 ne def
+   /EffectShadow    Effect 8  and 0 ne def
+   /EffectBox       Effect 16 and 0 ne def
+   /EffectOutline   Effect 32 and 0 ne def
+ }def
+ 
+ % stack:  string  |-  --
+ /S{
+   /xx currentpoint dup Descent add/yy exch def
+   Ascent add/YY exch def def
+   dup stringwidth pop xx add/XX exch def
+   EffectShadow{
+     /yy yy Yshadow add def
+     /XX XX Xshadow add def
+   }if
+   bg{
+     true
+     EffectBox
+       {SpaceBackground doBox}
+       {xx yy XX YY doRect}
+     ifelse
+   }if                                         % background
+   EffectBox      {false 0 doBox}if            % box
+   EffectShadow   {dup doShadow}if             % shadow
+   EffectOutline
+     {true doOutline}                          % outline
+     {show}                                    % normal text
+   ifelse
+   EffectUnderline{UnderlinePosition Hline}if  % underline
+   EffectStrikeout{StrikeoutPosition Hline}if  % strikeout
+   EffectOverline {OverlinePosition  Hline}if  % overline
+ }bind def
+ 
+ % stack:  position  |-  --
+ /Hline{
+   currentpoint exch pop add dup
+   gsave
+   newpath
+   xx exch moveto
+   XX exch lineto
+   closepath
+   LineThickness setlinewidth stroke
+   grestore
+ }bind def
+ 
+ % stack:  fill-or-not delta  |-  --
+ /doBox{
+   /dd exch def
+   xx XBox sub dd sub yy YBox sub dd sub
+   XX XBox add dd add YY YBox add dd add
+   doRect
+ }bind def
+ 
+ % stack:  fill-or-not lower-x lower-y upper-x upper-y  |-  --
+ /doRect{
+   /rYY exch def
+   /rXX exch def
+   /ryy exch def
+   /rxx exch def
+   gsave
+   newpath
+   rXX rYY moveto
+   rxx rYY lineto
+   rxx ryy lineto
+   rXX ryy lineto
+   closepath
+   % top of stack: fill-or-not
+   {FillBgColor}
+   {LineThickness setlinewidth stroke}ifelse
+   grestore
+ }bind def
+ 
+ % stack:  string  |-  --
+ /doShadow{
+   gsave
+   Xshadow Yshadow rmoveto
+   false doOutline
+   grestore
+ }bind def
+ 
+ /st 1 string def
+ 
+ % stack:  string fill-or-not  |-  --
+ /doOutline{
+   /-fillp- exch def
+   /-ox- currentpoint/-oy- exch def def
+   gsave
+   LineThickness setlinewidth
+   {st 0 3 -1 roll put
+    st dup true charpath
+    -fillp- {gsave FillBgColor grestore}if
+    stroke stringwidth
+    -oy- add/-oy- exch def
+    -ox- add/-ox- exch def
+    -ox- -oy- moveto
+   }forall
+   grestore
+   -ox- -oy- moveto
+ }bind def
+ 
+ % stack:  --
+ /FillBgColor{bgcolor aload pop setrgbcolor fill}bind def
+ 
+ % stack:  -- |- boolean
+ /isLineStep{
+   SyncLineZebra
+   {PLScounter 0 gt                                            % or zebra
+    {/PLScounter PLScounter 1 sub def PLScounter 0 eq}
+    {false}ifelse
+    PrintLineStep 1 gt
+    {/PrintLineStep PrintLineStep 1 sub def}
+    {/PrintLineStep ZebraHeight def
+     /PLScounter PrintLineStart def}ifelse}
+   {LineNumber PrintLineStart sub PrintLineStep mod 0 eq}ifelse        % or 
line step
+ }def
+ 
+ % stack:  --
+ /doLineNumber{
+   /LineNumber where
+   {pop
+    isLineStep                 % or line step
+    LineNumber Lines ge or     % or last line
+    {currentfont
+     gsave
+     LineNumberColor SetColor
+     /L0 findfont setfont
+     LineNumber Lines ge
+     {(end      )}
+     {LineNumber 6 string cvs(      )strcat}ifelse
+     dup stringwidth pop neg 0 rmoveto
+     show
+     grestore
+     setfont}if
+     /LineNumber LineNumber 1 add def
+   }if
+ }def
+ 
+ % stack: color-specifier |- --
+ /SetColor{dup type/realtype eq{setgray}{aload pop setrgbcolor}ifelse}def
+ 
+ % stack: --
+ /printZebra{
+   gsave
+   ZebraColor SetColor
+   /double-zebra ZebraHeight ZebraHeight add def
+   /yiter double-zebra LineHS mul neg def
+   /xiter PrintWidth InterColumn add def
+   /zebra-line LinesPrinted def
+   NumberOfColumns{LinesPerColumn doColumnZebra xiter 0 rmoveto}repeat
+   grestore
+ }def
+ 
+ % stack:  lines-per-column |- --
+ /doColumnZebra{
+   /lpc exch def
+   gsave
+   ZebraFollow 1 and 0 ne{
+     /H ZebraHeight zebra-line ZebraHeight mod sub def
+     /lpc lpc H sub def
+     zebra-line double-zebra mod ZebraHeight lt
+     {H doZebra        % "black" stripe followed by a "white" stripe
+      /lpc lpc ZebraHeight sub def
+      H ZebraHeight add}
+     {H}ifelse % "white" stripe
+     LineHS mul neg 0 exch rmoveto
+     /zebra-line zebra-line LinesPerColumn add def
+   }if
+   /zspacing 0 def
+   lpc dup double-zebra idiv{ZebraHeight doZebra 0 yiter rmoveto}repeat
+   double-zebra mod dup 0 le{pop}
+   {dup ZebraHeight gt
+    {pop ZebraHeight}
+    {/zspacing LineSpacing def
+     ZebraFollow 2 and 0 ne{pop ZebraHeight}if}ifelse
+    doZebra}ifelse
+   grestore
+ }def
+ 
+ % stack:  zebra-height (in lines) |- --
+ /doZebra{
+   /zh exch 0.05 sub LineHS mul zspacing sub def
+   gsave
+   0 LineHeight 0.65 mul rmoveto
+   PrintWidth 0 rlineto
+   0 zh neg rlineto
+   PrintWidth neg 0 rlineto
+   0 zh rlineto
+   fill
+   grestore
+ }def
+ 
+ % stack: --
+ /printBackground{
+   /BackgroundColor where{
+     pop gsave BackgroundColor SetColor
+     NumberOfColumns{
+      gsave
+      0 LineHeight 0.65 mul rmoveto
+      PrintWidth 0 rlineto
+      0 PrintHeight neg rlineto
+      PrintWidth neg 0 rlineto
+      0 PrintHeight rlineto
+      fill
+      grestore
+      PrintWidth InterColumn add 0 rmoveto
+     }repeat
+     grestore
+   }if
+ }def
+ 
+ % tx ty rotation xscale yscale xpos ypos BeginBackImage
+ /BeginBackImage{
+   /-save-image- save def
+   /showpage{}def
+   translate
+   scale
+   rotate
+   translate
+ }def
+ 
+ /EndBackImage{-save-image- restore}def
+ 
+ % string fontsize fontname rotation gray xpos ypos ShowBackText
+ /ShowBackText{
+   gsave
+   translate
+   setgray
+   rotate
+   findfont exch dup/-offset- exch -0.25 mul def scalefont setfont
+   0 -offset- moveto
+   /-saveLineThickness- LineThickness def
+   /LineThickness 1 def
+   false doOutline
+   /LineThickness -saveLineThickness- def
+   grestore
+ }def
+ 
+ /SetPageSize{
+   BMark/PageSize[PageWidth LandscapePageHeight LandscapeMode{exch}if]EMark 
setpagedevice
+ }def
+ 
+ /BeginDoc{
+   % ---- Remember space width of the normal text font `f0'.
+   /SpaceWidth/f0 findfont setfont( )stringwidth pop def
+   % ---- save the state of the document (useful for ghostscript!)
+   /docState save def
+   % ---- [andrewi] set PageSize based on chosen dimensions
+   UseSetpagedevice{
+    WarnPaperSize{SetPageSize}{mark{SetPageSize}stopped cleartomark}ifelse
+   }if
+   /ColumnWidth PrintWidth InterColumn add def
+   % ---- define where  printing will start
+   /f0 F                                       % this installs Ascent
+   /PrintStartY PrintHeight Ascent sub def
+   /ColumnIndex 1 def
+   /N-Up-Counter N-Up-End 1 sub def
+   /PLScounter PrintLineStart def
+ }def
+ 
+ /EndDoc{
+   % ---- restore the state of the document (useful for ghostscript!)
+   docState restore
+ }def
+ 
+ /BeginDSCPage{
+   % ---- when 1st column, save the state of the page
+   ColumnIndex 1 eq{/pageState save def}if
+   % ---- save the state of the column
+   /columnState save def
+ }def
+ 
+ /PrintHeaderWidth PrintOnlyOneHeader{PrintPageWidth}{PrintWidth}ifelse def
+ 
+ /BeginPage{
+   /LinesPrinted exch def
+   % ---- when 1st column, print all background effects
+   ColumnIndex 1 eq{
+     0 PrintStartY moveto              % move to where printing will start
+     printBackground
+     Zebra{printZebra}if
+     printGlobalBackground
+     printLocalBackground
+   }if
+   PrintOnlyOneHeader{ColumnIndex 1 eq}{true}ifelse
+   dup PrintHeader and{
+     PrintHeaderFrame{HeaderFrame}if
+     HeaderText
+   }if
+   PrintFooter and{
+     PrintFooterFrame{FooterFrame}if
+     FooterText
+   }if
+   0 PrintStartY moveto                        % move to where printing will 
start
+   /LineNumber where
+   {pop
+    SyncLineZebra
+    {/H PageNumber 1 sub NumberOfColumns mul ColumnIndex 1 sub add
+        LinesPerColumn mul ZebraHeight mod def
+     /PLScounter H PrintLineStart ge{0}{PrintLineStart H sub}ifelse def
+     /PrintLineStep ZebraHeight H sub def}if}if
+   PLN
+ }def
+ 
+ /EndPage{bg{eolbg}if}def
+ 
+ /EndDSCPage{
+   ColumnIndex NumberOfColumns eq{
+     % ---- restore the state of the page
+     pageState restore
+     /ColumnIndex 1 def
+     % ---- N-up printing
+     N-Up 1 gt{
+       N-Up-Counter 0 gt
+       {% ---- Next page on same row
+       /N-Up-Counter N-Up-Counter 1 sub def
+       N-Up-XColumn N-Up-YColumn}
+       {% ---- Next page on next line
+       /N-Up-Counter N-Up-End 1 sub def
+       N-Up-XLine N-Up-YLine}ifelse
+       translate
+     }if
+   }{ % else
+     % ---- restore the state of the current column
+     columnState restore
+     % ---- and translate to the next column
+     ColumnWidth 0 translate
+     /ColumnIndex ColumnIndex 1 add def
+   }ifelse
+ }def
+ 
+ /TextStart{
+   LeftMargin BottomMargin
+   PrintFooter{
+     FooterPad add
+     FooterLines FooterLineHeight mul add
+     FooterPad add
+     FooterOffset add}if
+ }def
+ 
+ % stack: number-of-pages-per-sheet |- --
+ /BeginSheet{
+   /sheetState save def
+   /pages-per-sheet exch def
+ 
+   % ---- translate to bottom-right corner of Portrait page
+   LandscapeMode{
+     LandscapePageHeight 0 translate
+     90 rotate
+   }if
+   % ---- [jack] Kludge: my ghostscript window is 21x27.7 instead of 21x29.7
+   /JackGhostscript where{pop 1 27.7 29.7 div scale}if
+   UpsideDown{PageWidth LandscapePageHeight translate 180 rotate}if
+   % ---- N-Up printing
+   N-Up 1 gt{
+     % ---- landscape
+     N-Up-Landscape{
+       PageWidth 0 translate
+       90 rotate
+     }if
+     N-Up-Margin dup translate
+     % ---- scale
+     LandscapeMode{
+       /HH PageWidth def
+       /WW LandscapePageHeight def
+     }{
+       /HH LandscapePageHeight def
+       /WW PageWidth def
+     }ifelse
+     /xx 0 def
+     N-Up-Landscape{
+       /ww WW WW mul N-Up-Lines HH mul div def
+       /cc HH N-Up-Columns N-Up-Missing add div def
+       ww cc gt{/xx WW def/WW cc ww div WW mul def/xx xx WW sub def}if
+     }{
+       /hh HH N-Up-Columns N-Up-Missing add div def
+       /cc HH N-Up-Lines div def
+       hh cc gt{/xx WW def/WW cc hh div WW mul def/xx xx WW sub def}if
+     }ifelse
+     WW N-Up-Margin sub N-Up-Margin sub
+     N-Up-Landscape
+     {N-Up-Lines div HH}
+     {N-Up-Columns N-Up-Missing add div WW}ifelse
+     div dup scale
+     LandscapeMode{/yy 0 def}{/yy xx def/xx 0 def}ifelse
+     xx N-Up-Repeat 1 sub LandscapePageHeight mul yy add translate
+     % ---- go to start position in page matrix
+     N-Up-XStart N-Up-Missing 0.5 mul
+     LandscapeMode
+     {LandscapePageHeight mul N-Up-YStart add}
+     {PageWidth mul add N-Up-YStart}ifelse
+     translate
+   }if
+   % ---- translate to lower left corner of TEXT
+   TextStart translate
+ 
+   % ---- N-up printing
+   N-Up 1 gt N-Up-Border and pages-per-sheet 0 gt and{
+     % ---- page border
+     gsave
+     0 setgray
+     TextStart exch neg exch neg moveto
+     N-Up-Repeat
+     {N-Up-End
+      {gsave
+       PageWidth 0 rlineto
+       0 LandscapePageHeight rlineto
+       PageWidth neg 0 rlineto
+       closepath stroke
+       grestore
+       /pages-per-sheet pages-per-sheet 1 sub def
+       pages-per-sheet 0 le{exit}if
+       N-Up-XColumn N-Up-YColumn rmoveto
+      }repeat
+      pages-per-sheet 0 le{exit}if
+      N-Up-XLine N-Up-XColumn sub N-Up-YLine rmoveto
+     }repeat
+     grestore
+   }if
+ }def
+ 
+ /EndSheet{
+   showpage
+   sheetState restore
+ }def
+ 
+ /SetHeaderLines{                      % nb-lines --
+   /HeaderLines exch def
+   % ---- bottom up
+   HeaderPad
+   HeaderLines 1 sub HeaderLineHeight mul add
+   HeaderTitleLineHeight add
+   HeaderPad add
+   /HeaderHeight exch def
+ }def
+ 
+ /SetFooterLines{                      % nb-lines --
+   /FooterLines exch def
+   % ---- bottom up
+   FooterPad
+   FooterLines FooterLineHeight mul add
+   FooterPad add
+   /FooterHeight exch def
+ }def
+ 
+ % |---------|
+ % |  tm     |
+ % |---------|
+ % |  header |
+ % |-+-------| <-- (x y)
+ % |  ho     |
+ % |---------|
+ % |  text   |
+ % |---------|
+ % |  fo     |
+ % |---------|
+ % |  footer |
+ % |-+-------| <-- (0 0)
+ % |  bm     |
+ % |---------|
+ 
+ % -- |- x y
+ /HeaderFrameStart{0  PrintHeight HeaderOffset add}def
+ /FooterFrameStart{0  FooterHeight FooterOffset add neg}def
+ 
+ /doFramePath{
+   /h exch def
+   PrintHeaderWidth    0       rlineto
+   0                   h       rlineto
+   PrintHeaderWidth neg        0       rlineto
+   0                   h neg   rlineto
+ }def
+ 
+ /HeaderFramePath{HeaderHeight doFramePath}def
+ /FooterFramePath{FooterHeight doFramePath}def
+ 
+ % /path-fun /start-fun vector-property doFrame
+ /doFrame{
+   /vecFrame exch def
+   /startFrame exch load def
+   /pathFrame exch load def
+   gsave
+     vecFrame 2 get setlinewidth                               % frame border 
width
+     % ---- do the shadow of the next rectangle
+     startFrame moveto
+     1 -1 rmoveto
+     pathFrame
+     vecFrame 4 get SetColor fill                      % frame shadow color
+     % ---- do the next rectangle ...
+     startFrame moveto
+     pathFrame
+     gsave vecFrame 1 get SetColor fill grestore               % frame 
background
+     gsave vecFrame 3 get SetColor stroke grestore     % frame border color
+   grestore
+ }def
+ 
+ /HeaderFrame{/HeaderFramePath /HeaderFrameStart HeaderFrameProperties 
doFrame}def
+ /FooterFrame{/FooterFramePath /FooterFrameStart FooterFrameProperties 
doFrame}def
+ 
+ /HeaderStart{
+   HeaderFrameStart
+   exch HeaderPad add exch     % horizontal pad
+   % ---- bottom up
+   HeaderPad add                       % vertical   pad
+   HeaderDescent sub
+   HeaderLineHeight HeaderLines 1 sub mul add
+ }def
+ 
+ /FooterStart{
+   FooterFrameStart
+   exch FooterPad add exch     % horizontal pad
+   % ---- bottom up
+   FooterPad add                       % vertical   pad
+   FooterDescent sub
+   FooterLineHeight FooterLines 1 sub mul add
+ }def
+ 
+ /strcat{
+   dup length 3 -1 roll dup length dup 4 -1 roll add string dup
+   0 5 -1 roll putinterval
+   dup 4 2 roll exch putinterval
+ }def
+ 
+ /pagenumberstring{
+   PageNumber 32 string cvs
+   ShowNofN{(/)strcat PageCount 32 string cvs strcat}if
+ }def
+ 
+ % lines is-right HeaderOrFooterTextLines
+ /HeaderOrFooterTextLines{
+   /is_right exch def
+   HFStart moveto
+   { % ---- process the lines
+    dup 0 get F
+    gsave
+     is_right{
+      PrintHeaderWidth HFPad HFPad add sub 0 rmoveto
+      dup{
+       dup type /nametype eq{
+       pop
+       }{
+         dup xcheck{exec}if
+       stringwidth pop neg 0 rmoveto
+       }ifelse
+      } forall
+     }if
+     HFColor SetColor
+     {
+      dup type /nametype eq {
+        pop
+      }{
+        dup xcheck{exec}if
+        show
+      } ifelse
+     } forall
+    grestore
+    0 HFLineHeight neg rmoveto
+   }forall
+ }def
+ 
+ % right-lines left-lines /start lineheight pad fore-color HeaderOrFooterText
+ /HeaderOrFooterText{
+   /HFColor exch def
+   /HFPad exch def
+   /HFLineHeight exch def
+   /HFStart exch load def
+ 
+   % -- rightLines leftLines -- at stack
+ 
+   % ---- hack: `PN 1 and'  ==  `PN 2 modulo'
+   % ---- if even page number and duplex, then exchange left and right
+   PageNumber 1 and 0 eq SwitchHeader and{exch}if
+ 
+   % ---- process the left lines
+   false HeaderOrFooterTextLines
+ 
+   % ---- process the right lines
+   true HeaderOrFooterTextLines
+ }def
+ 
+ /HeaderText{
+   HeaderLinesRight HeaderLinesLeft
+   /HeaderStart HeaderLineHeight HeaderPad
+   HeaderFrameProperties 0 get
+   HeaderOrFooterText
+ }def
+ 
+ /FooterText{
+   FooterLinesRight FooterLinesLeft
+   /FooterStart FooterLineHeight FooterPad
+   FooterFrameProperties 0 get
+   HeaderOrFooterText
+ }def
+ 
+ /ReportFontInfo{
+   2 copy
+   /t0 3 1 roll DefFont
+   /t0 F
+   /lh FontHeight def
+   /sw( )stringwidth pop def
+   /aw(01234567890abcdefghijklmnopqrstuvwxyz)dup length exch
+   stringwidth pop exch div def
+   /t1 12/Helvetica-Oblique DefFont
+   /t1 F
+   gsave
+     (languagelevel = )show
+     languagelevel 32 string cvs show
+   grestore
+   0 FontHeight neg rmoveto
+   gsave
+     (For )show
+     128 string cvs show
+     ( )show
+     32 string cvs show
+     ( point, the line height is )show
+     lh 32 string cvs show
+     (, the space width is )show
+     sw 32 string cvs show
+     (,)show
+   grestore
+   0 FontHeight neg rmoveto
+   gsave
+     (and a crude estimate of average character width is )show
+     aw 32 string cvs show
+     (.)show
+   grestore
+   0 FontHeight neg rmoveto
+ }def
+ 
+ % cm to point
+ /cm{72 mul 2.54 div}def
+ 
+ /ReportAllFontInfo{
+   % key = font name   value = font dictionary
+   FontDirectory{pop 10 exch ReportFontInfo}forall
+ }def
+ 
+ % 3 cm 20 cm moveto  10/Courier ReportFontInfo  showpage
+ % 3 cm 20 cm moveto  ReportAllFontInfo          showpage
+ 
+ % === END ps-print prologue 1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]