home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / Vyzkuste / gs / gs650w32.exe / gs6.50 / lib / prfont.ps < prev    next >
Text File  |  2000-12-05  |  6KB  |  243 lines

  1. %!
  2. %%Creator: Eric Gisin <egisin@waterloo.csnet>
  3. %%Title: Print font catalog
  4. % Copyright (c) 1986 Eric Gisin
  5. % Copyright (C) 1992 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  6. %   Modified to print all 256 encoded characters.
  7. % Copyright (C) 1993 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  8. %   Modified to print unencoded characters.
  9. % Copyright (C) 1994 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  10. %   Modified to always create 256-element Encoding vectors.
  11. % Copyright (C) 1995 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  12. %   Modified to print more than 128 unencoded characters.
  13. % Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  14. %   Modified to leave a slightly wider left margin, because many H-P
  15. %     printers can't print in the leftmost 1/4" of the page.
  16. %   Modified to print unencoded characters in any font that has CharStrings.
  17. % Copyright (C) 1999 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  18. %   Modified to sort unencoded characters.
  19. % Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA (ghost@aladdin.com)
  20. %   Modified to print CIDFonts as well as fonts.
  21. %   O(N^2) sorting replaced with O(N log N).
  22.  
  23. % $Id: prfont.ps,v 1.2 2000/03/21 06:39:49 lpd Exp $
  24.  
  25. % Example usages at bottom of file
  26.  
  27. /#copies 1 def
  28. /min { 2 copy gt { exch } if pop } bind def
  29.  
  30. /T6 /Times-Roman findfont 6 scalefont def
  31. /Temp 64 string def
  32. /Inch {72 mul} def
  33. /Base 16 def    % char code output base
  34. /TempEncoding [ 256 { /.notdef } repeat ] def
  35.  
  36. % Sort an array.  Code used by permission of the author, Aladdin Enterprises.
  37. /sort {            % <array> <lt-proc> sort <array>
  38.     % Heapsort (algorithm 5.2.3H, Knuth vol. 2, p. 146),
  39.     % modified for 0-origin indexing. */
  40.   10 dict begin
  41.   /LT exch def
  42.   /recs exch def
  43.   /N recs length def
  44.   N 1 gt {
  45.     /l N 2 idiv def
  46.     /r N 1 sub def {
  47.       l 0 gt {
  48.     /l l 1 sub def
  49.     /R recs l get def
  50.       } {
  51.     /R recs r get def
  52.     recs r recs 0 get put
  53.     /r r 1 sub def
  54.     r 0 eq { recs 0 R put exit } if
  55.       } ifelse
  56.       /j l def {
  57.     /i j def
  58.     /j j dup add 1 add def
  59.     j r lt {
  60.       recs j get recs j 1 add get LT { /j j 1 add def } if
  61.     } if
  62.     j r gt { recs i R put exit } if
  63.     R recs j get LT not { recs i R put exit } if
  64.     recs i recs j get put
  65.       } loop
  66.     } loop
  67.   } if recs end
  68. } def
  69.  
  70. % do single character of page
  71. % output to rectangle ll=(0,-24) ur=(36,24)
  72. /DoGlyph {    % C, N, W set
  73.  
  74.   % print code name, width and char name
  75.   T6 setfont
  76.   N /.notdef ne {0 -20 moveto N Temp cvs show} if
  77.   0 -12 moveto C Base Temp cvrs show (  ) show
  78.   W 0.0005 add Temp cvs 0 5 getinterval show
  79.  
  80.   % print char with reference lines
  81.   N /.notdef ne {
  82.     3 0 translate
  83.     0 0 moveto F24 setfont N glyphshow
  84.     /W W 24 mul def
  85.     0 -6 moveto 0 24 lineto
  86.     W -6 moveto W 24 lineto
  87.     -3 0 moveto W 3 add 0 lineto
  88.     0 setlinewidth stroke
  89.   } if
  90. } def
  91. /DoChar {
  92.   /C exch def
  93.   /N F /Encoding get C get def
  94.   /S (_) dup 0 C put def
  95.   /W F setfont S stringwidth pop def
  96.   DoGlyph
  97. } def
  98. /CIDTemp 20 string def
  99. /DoCID {
  100.   /N exch def
  101.   /C N def
  102.   /W F setfont gsave
  103.     matrix currentmatrix nulldevice setmatrix
  104.     0 0 moveto N glyphshow currentpoint pop
  105.   grestore def
  106.   DoGlyph
  107. } def
  108.  
  109. % print page title
  110. /DoTitle {
  111.   /Times-Roman findfont 18 scalefont setfont
  112.   36 10.5 Inch moveto FName Temp cvs show ( ) show ((24 point)) show
  113. } def
  114.  
  115. % print one block of characters
  116. /DoBlock {    % firstcode lastcode
  117.   /FirstCode 2 index def
  118.   1 exch {
  119.     /I exch def
  120.     /Xn I FirstCode sub 16 mod def /Yn I FirstCode sub 16 idiv def
  121.     gsave
  122.     Xn 35 mul 24 add Yn -56 mul 9.5 Inch add translate
  123.     I DoCode
  124.     grestore
  125.   } for
  126. } def
  127.  
  128. % print a line of character
  129. /DoCharLine {    % firstcode lastcode
  130.   1 exch { (_) dup 0 3 index put show pop } for
  131. } def
  132. /DoCIDLine {    % firstcode lastcode
  133.   1 exch { glyphshow } for
  134. } def
  135.  
  136. % initialize variables
  137. /InitDoFont {    % fontname font
  138.   /F exch def        % font
  139.   /FName exch def    % font name
  140.   /F24 F 24 scalefont def
  141.   /Line0 96 string def
  142.   /Line1 96 string def
  143.   /Namestring1 128 string def
  144.   /Namestring2 128 string def
  145. } def
  146.  
  147. % print pages of unencoded characters
  148. /DoUnencoded {    % glyphs
  149.   /Unencoded exch def
  150.   /Count Unencoded length def
  151.  
  152.         % Print the unencoded characters in blocks of 128.
  153.  
  154.   0 128 Unencoded length 1 sub
  155.    { /BlockStart 1 index def
  156.      dup 128 add Unencoded length min 1 index sub
  157.      Unencoded 3 1 roll getinterval TempEncoding copy
  158.      /BlockEncoding exch def
  159.      /BlockCount BlockEncoding length def
  160.      save
  161.      F /Encoding known {
  162.        F length dict F
  163.     { 1 index /FID eq { pop pop } { 2 index 3 1 roll put } ifelse }
  164.        forall dup /Encoding TempEncoding put
  165.        /* exch definefont
  166.        /F exch def
  167.        /F24 F 24 scalefont def
  168.        /BlockStart 0 def
  169.      } if
  170.  
  171.      DoTitle (, unencoded characters) show
  172.      BlockStart dup BlockCount 1 sub add DoBlock
  173.      F 10 scalefont setfont
  174.      36 2.4 Inch moveto
  175.     0 32 BlockCount 32 sub 224 min {
  176.       0 -0.4 Inch rmoveto gsave
  177.       dup 31 add BlockCount 1 sub min
  178.       exch BlockStart add exch BlockStart add DoLine
  179.       grestore
  180.     } for
  181.      showpage
  182.      restore
  183.    } for
  184.  
  185. } def
  186.  
  187. % print font sample pages
  188. /DoFont {
  189.   dup findfont InitDoFont
  190.   /DoCode {DoChar} def
  191.   /DoLine {DoCharLine} def
  192.  
  193.     % Display the first 128 encoded characters.
  194.  
  195.   DoTitle (, characters 0-127) show
  196.   0 127 DoBlock
  197.   F 10 scalefont setfont
  198.   36 2.0 Inch moveto 0 63 DoLine
  199.   36 1.5 Inch moveto 64 127 DoLine
  200.   showpage
  201.  
  202.     % Display the second 128 encoded characters.
  203.  
  204.   DoTitle (, characters 128-255) show
  205.   128 255 DoBlock
  206.   F 10 scalefont setfont
  207.   36 2.0 Inch moveto 128 191 DoLine
  208.   36 1.5 Inch moveto 192 255 DoLine
  209.   showpage
  210.  
  211.   F /CharStrings known
  212.    {
  213.         % Find and display the unencoded characters.
  214.  
  215.     /Encoded F /Encoding get length dict def
  216.     F /Encoding get { true Encoded 3 1 roll put } forall
  217.     [ F /CharStrings get
  218.      { pop dup Encoded exch known { pop } if }
  219.     forall ] {
  220.       exch Namestring1 cvs exch Namestring2 cvs lt
  221.     } sort DoUnencoded
  222.  
  223.    }
  224.   if
  225.  
  226. } def
  227.  
  228. % print CIDFont sample pages
  229. /DoCIDFont {
  230.   dup /CIDFont findresource InitDoFont
  231.   /DoCode {DoCID} def
  232.   /DoLine {DoCIDLine} def
  233.  
  234.   [ 0 1 F /CIDCount get 1 sub { } for ] DoUnencoded
  235. } def
  236.  
  237. % Do font samples
  238. % /Times-Roman DoFont            % Test (less than a minute)
  239. % /Hershey-Gothic-English DoFont    % Test (8 minutes)
  240.  
  241. % Do a complete catalog
  242. % FontDirectory {pop DoFont} forall    % All fonts (quite a long time)
  243.