home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / sprint / boxfont.zip / BOXFON.SPR (.txt)
Sprint Document  |  1989-07-02  |  23KB  |  589 lines

  1. R 66,T 5
  2. BoxFont - A Line Draw Font for PostScript
  3. written by Glenn Claudi-Magnussen  [74017,1407]
  4. INTRODUCTION
  5. This document describes how I created a special font for line draw
  6. characters in PostScript.  Because this involved changing three
  7. existing Sprint files, not the creation of any new file, I have
  8. embedded the changed/new lines into this document, along with a
  9. description of the changes and what they do (this results in a
  10. much smaller file than if I were to upload modified versions of
  11. each file).  To make the changes to your own files (backups, of
  12. course), you can use Sprint's cut and paste capabilities to copy
  13. the sections from this file into your files.
  14. First, a little background.  The PostScript printer I am using
  15. (actually, a Laser Jet II with a JetScript board) doesn't have any
  16. fonts with line drawing characters, so I started looking into how
  17. to implement line draw for PostScript using Sprint.  What I ended
  18. up doing was creating and downloading a new font with the
  19. characters I wanted, and using Sprint's translation character
  20. table to switch to this font for printing these characters.  I
  21. have also used this same approach for creating lots of other
  22. special characters which I wanted.
  23. The three files which need to be changed are POSTSCR.SPL,
  24. POSTSCR.HDR, and POSTSCR.TCT.  POSTSCR.SPL is changed to add the
  25. new font (and some attributes - more on this later).  Sprint must
  26. be re-installed with the POSTSCR.SPL file before anything can be
  27. printed with the new font.
  28. POSTSCR.HDR is changed to set up the new font.  POSTSCR.HDR is a
  29. file written in PostScript language which is downloaded to the
  30. printer before a file is printed.  The additions to this file are
  31. written in PostScript.
  32. POSTSCR.TCT is modified to cause the line draw characters to be
  33. mapped to this new font.  Some other changes were made to this
  34. file to eliminate some problems when text and line draw characters
  35. are mixed together - see explanation below.
  36. HOW IT'S USED
  37. Once the required changes have been made, the line draw characters
  38. can be used anywhere in a document.  One thing to consider is that
  39. the line draw characters are monospaced (they all have the same
  40. width) and should be used with a monospaced font of the same size
  41. if columns are expected to line up.  Depending on what you are
  42. doing, you can get around this by using tabs, which will cause
  43. columns to line up regardless of what's to the left of them.  The
  44. only monospaced font my printer has is Courier, so I made my
  45. characters the same width as Courier characters (width = 0.6 x
  46. height).  I've used a proportional spaced font for documents,
  47. switching to Courier only for tables, etc.  For example:
  48. This can be in Times-Roman
  49.                              
  50.   This would be in Courier 
  51.    This can be Times-Roman
  52. This can be in Times-Roman
  53. HOW IT WORKS
  54. The new characters exist in a font called BoxFont.  If you call up
  55. the list of fonts, you'll see BoxFont there.  When Sprint prints a
  56. document, POSTSCR.HDR is sent to the printer first, and the
  57. changes described add the information the printer needs to print
  58. this font.  Even though these characters exist only in this new
  59. font, you don't have to specifically call out this font - the
  60. additions to POSTSCR.TCT cause these characters to be translated
  61. to BoxFont regardless of the current font.  This makes the use of
  62. line draw characters more or less transparent.
  63. SOME OTHER CONSIDERATIONS
  64. You will notice that printing is noticeably slower if you have a
  65. lot of line draw characters.  I assume this is because it's doing
  66. a character translation for each line draw character it comes
  67. across.
  68. Also, if you have a lot of line draw characters on a page you may
  69. get an Out of Memory 70 error when printing.  This is because each
  70. character translation is temporarily taking up a certain amount of
  71. memory as the page is formatted.  The way to get around this is to
  72. select areas which consist only of line draw characters and spaces
  73. and set the font to BoxFont for that area.  When the font is
  74. already defined as BoxFont, Sprint doesn't use up memory to
  75. translate the characters to BoxFont.  So your table might look
  76. like this:
  77.  Leave area with text in regular font (Courier)
  78. FONT BoxFont
  79.            
  80.          
  81.            
  82.         
  83.            
  84.          
  85.            
  86.         
  87.            
  88.          
  89.            
  90.         
  91. Because of the way Sprint handles spaces and tabs, things
  92. sometimes don't quite line up when "oddball" point sizes (e.g.,
  93. 9.5 point) are used.  For this reason I added my own space
  94. character (I use character #128).  If things aren't lining up, I
  95. replace all the spaces in the table with this character.
  96. If you find yourself creating your own special characters like I
  97. did, you might want to download the program FONTEDIT from the PC
  98. magazine forum.  It allows you to modify the way characters are
  99. displayed on your EGA or VGA screen.  That way you won't have to
  100. look at all the funny characters (e.g., 
  101. ) in the standard
  102. character set.
  103. COMMENTS
  104. First of all, thanks to everyone here on the forum and at Borland
  105. technical support who have helped me overcome some of the hurdles
  106. in getting this working.
  107. I'm still working on making a few changes.  One of the things I've
  108. been thinking of doing is adding the normal character set to
  109. BoxFont by copying them from an existing font such as Courier.  By
  110. doing this the character translations could be eliminated (you
  111. would just select BoxFont as the font for anything which needs
  112. line drawing characters), which would speed up the printing and
  113. eliminate the Out of Memory 70 problems.  So far I've figured how
  114. to copy an existing font to a new font, but I haven't figured out
  115. how to then redefine some of the characters.
  116. I'll be glad to answer any questions anyone has, and I welcome any
  117. comments or suggestions.
  118. -----------------------------------------------------------------
  119. Below are the changes to the three files, POSTSCR.SPL,
  120. POSTSCR.HDR, and POSTSCR.TCT.  I have embedded a number of
  121. comments to explain some things about these changes.  My comments
  122. are on lines which begin with "##".  Don't copy these comments
  123. into your files.
  124. ## CHANGES TO POSTSCR.SPL
  125. ## find the following line in the file:
  126. ## font Times,on /Times-Roman %d ff\ ,pst Times-Roman
  127. ## and add the following after it:
  128. font BoxFont,on /Box-Font %d ff\ ,width 180
  129. ## find the following line in the file:
  130. ## attr gray,on 0.5 setgray\ ,off 0 setgray\ 
  131. ## and add the following after it:
  132. attr gray1,on 0.75 setgray\ ,off 0 setgray\ 
  133. attr gray2,on 0.5 setgray\ ,off 0 setgray\ 
  134. attr gray3,on 0.25 setgray\ ,off 0 setgray\ 
  135. ## CHANGES TO POSTSCR.HDR
  136. ## find the following line near the bottom of the file:
  137. ## initgraphics
  138. ## and add the following BEFORE it:
  139. % Begin BoxFont definition
  140. /newfont 120 dict def
  141. newfont begin
  142. /FontType 3 def
  143. /FontMatrix [.001 0 0 .001 0 0] def
  144. /FontBBox [0 0 600 1000] def
  145. % Encoding array:
  146. /Encoding 256 array def
  147. 0 1 255 {Encoding exch /.notdef put} for
  148. Encoding 128 /hspace put
  149. Encoding 202 /AAA put
  150. Encoding 203 /BBB put
  151. Encoding 204 /CCC put
  152. Encoding 205 /DDD put
  153. Encoding 206 /EEE put
  154. Encoding 207 /FFF put
  155. Encoding 208 /GGG put
  156. Encoding 209 /HHH put
  157. Encoding 210 /III put
  158. Encoding 211 /JJJ put
  159. Encoding 212 /KKK put
  160. Encoding 213 /LLL put
  161. Encoding 214 /MMM put
  162. Encoding 215 /NNN put
  163. Encoding 216 /OOO put
  164. Encoding 217 /lowright put
  165. Encoding 218 /upleft put
  166. Encoding 219 /RRR put
  167. Encoding 176 /gray1 put
  168. Encoding 177 /gray2 put
  169. Encoding 178 /gray3 put
  170. Encoding 179 /vert put
  171. Encoding 180 /edgeright put
  172. Encoding 181 /fff put
  173. Encoding 182 /ggg put
  174. Encoding 183 /hhh put
  175. Encoding 184 /iii put
  176. Encoding 185 /jjj put
  177. Encoding 186 /kkk put
  178. Encoding 187 /lll put
  179. Encoding 188 /mmm put
  180. Encoding 189 /nnn put
  181. Encoding 190 /ooo put
  182. Encoding 191 /upright put
  183. Encoding 192 /lowleft put
  184. Encoding 193 /edgebottom put
  185. Encoding 194 /edgetop put
  186. Encoding 195 /edgeleft put
  187. Encoding 196 /horiz put
  188. Encoding 197 /cross put
  189. Encoding 198 /www put
  190. Encoding 199 /xxx put
  191. Encoding 200 /yyy put
  192. Encoding 201 /zzz put
  193. % Character descriptions:
  194. % Note that lines are created with a filled polygon rather
  195. % than just a line.  This way the line thickness increases
  196. % proportionately with the point size.
  197. /CharProcs 46 dict def
  198. CharProcs begin
  199. /.notdef {} def
  200. /upleft
  201.   {290 0 moveto 290 510 lineto 600 510 lineto 
  202.    600 490 lineto 310 490 lineto 310 0 lineto 
  203.    closepath fill} def
  204.  /lowleft
  205.   {290 1000 moveto 290 490 lineto 600 490 lineto 
  206.    600 510 lineto 310 510 lineto 310 1000 lineto
  207.    closepath fill} def
  208.  /upright
  209.   {0 510 moveto 310 510 lineto 310 0 lineto 
  210.    290 0 lineto 290 490 lineto 0 490 lineto
  211.    closepath fill} def
  212.  /lowright
  213.     {0 490 moveto 310 490 lineto 310 1000 lineto 
  214.      290 1000 lineto 290 510 lineto 0 510 lineto
  215.      closepath fill} def
  216.  /vert
  217.   {290 0 moveto 290 1000 lineto 
  218.    310 1000 lineto 310 0 lineto closepath fill} def
  219.  /horiz
  220.    {0 490 moveto 600 490 lineto 
  221.     600 510 lineto 0 510 lineto closepath fill} def
  222.  /edgeleft
  223.    {290 0 moveto 290 1000 lineto 310 1000 lineto
  224.     310 510 lineto 600 510 lineto 600 490 lineto
  225.      310 490 lineto 310 0 lineto closepath fill} def
  226.  /edgeright
  227.    {310 0 moveto 310 1000 lineto 290 1000 lineto
  228.     290 510 lineto 0 510 lineto 0 490 lineto
  229.     290 490 lineto 290 0 lineto closepath fill} def
  230.  /edgetop
  231.    {0 510 moveto 600 510 lineto 600 490 lineto
  232.     310 490 lineto 310 0 lineto 290 0 lineto
  233.     290 490 lineto 0 490 lineto closepath fill} def
  234.  /edgebottom
  235.    {0 490 moveto 600 490 lineto 600 510 lineto
  236.     310 510 lineto 310 1000 lineto 290 1000 lineto
  237.     290 510 lineto 0 510 lineto closepath fill} def
  238.  /cross
  239.    {290 0 moveto 290 1000 lineto 310 1000 lineto 310 0 lineto
  240.     closepath fill
  241.     0 490 moveto 0 510 lineto 600 510 lineto 600 490 lineto
  242.     closepath fill} def
  243.  /hspace
  244.    {0 0 moveto 600 1000 moveto stroke} def
  245.   /AAA
  246.    {0 610 moveto 190 610 lineto 190 1000 lineto 
  247.     210 1000 lineto 210 590 lineto 0 590 lineto closepath fill
  248.     390 1000 moveto 390 590 lineto 600 590 lineto 
  249.     600 610 lineto 410 610 lineto 410 1000 lineto closepath fill
  250.     0 390 moveto 600 390 lineto 
  251.     600 410 lineto 0 410 lineto closepath fill} def
  252.   /BBB
  253.    {0 610 moveto 600 610 lineto 600 590 lineto 0 590 lineto 
  254.     closepath fill
  255.     0 410 moveto 210 410 lineto 210 0 lineto 190 0 lineto
  256.     190 390 lineto 0 390 lineto closepath fill
  257.     390 0 moveto 390 410 lineto 600 410 lineto 600 390 lineto
  258.     410 390 lineto 410 0 lineto closepath fill} def
  259.   /CCC
  260.    {210 0 moveto 210 1000 lineto 190 1000 lineto 190 0 lineto 
  261.     closepath fill
  262.     390 0 moveto 390 410 lineto 600 410 lineto 600 390 lineto
  263.     410 390 lineto 410 0 lineto closepath fill
  264.     390 1000 moveto 390 590 lineto 600 590 lineto 600 610 lineto
  265.     410 610 lineto 410 1000 lineto closepath fill} def
  266.   /DDD
  267.    {0 610 moveto 600 610 lineto 600 590 lineto 0 590 lineto 
  268.     closepath fill
  269.     0 410 moveto 600 410 lineto 600 390 lineto 0 390 lineto 
  270.     closepath fill} def
  271.   /EEE
  272.    {0 590 moveto 210 590 lineto 210 1000 lineto 190 1000 lineto
  273.     190 610 lineto 0 610 lineto closepath fill
  274.     390 1000 moveto 390 590 lineto 600 590 lineto 600 610 lineto
  275.     410 610 lineto 410 1000 lineto closepath fill
  276.     600 410 moveto 390 410 lineto 390 0 lineto 410 0 lineto
  277.     410 390 lineto 600 390 lineto closepath fill
  278.     0 410 moveto 210 410 lineto 210 0 lineto 190 0 lineto
  279.     190 390 lineto 0 390 lineto closepath fill} def
  280.   /FFF
  281.    {0 410 moveto 600 410 lineto 600 390 lineto 0 390 lineto 
  282.     closepath fill
  283.     0 610 moveto 600 610 lineto 600 590 lineto 0 590 lineto 
  284.     closepath fill
  285.     290 610 moveto 290 1000 lineto 310 1000 lineto 
  286.     310 610 lineto closepath fill} def
  287.   /GGG
  288.    {0 510 moveto 600 510 lineto 600 490 lineto 0 490 lineto 
  289.     closepath fill
  290.     190 510 moveto 190 1000 lineto 210 1000 lineto 210 510 lineto
  291.     closepath fill
  292.     390 510 moveto 390 1000 lineto 410 1000 lineto 410 510 lineto
  293.     closepath fill} def
  294.   /HHH
  295.    {0 410 moveto 600 410 lineto 600 390 lineto 0 390 lineto 
  296.    closepath fill
  297.     0 610 moveto 600 610 lineto 600 590 lineto 0 590 lineto 
  298.     closepath fill
  299.     290 390 moveto 290 0 lineto 310 0 lineto 310 390 lineto 
  300.     closepath fill} def
  301.   /III
  302.    {0 510 moveto 600 510 lineto 600 490 lineto 0 490 lineto 
  303.    closepath fill
  304.     190 490 moveto 190 0 lineto 210 0 lineto 210 490 lineto 
  305.     closepath fill
  306.     390 490 moveto 390 0 lineto 410 0 lineto 410 490 lineto 
  307.     closepath fill} def
  308.   /JJJ
  309.    {190 1000 moveto 190 490 lineto 600 490 lineto 600 510 lineto
  310.     210 510 lineto 210 1000 lineto closepath fill
  311.     390 1000 moveto 390 510 lineto 410 510 lineto 410 1000 lineto
  312.      closepath fill} def
  313.   /KKK
  314.    {290 1000 moveto 290 390 lineto 600 390 lineto 600 410 lineto
  315.     310 410 lineto 310 1000 lineto closepath fill
  316.     310 590 moveto 600 590 lineto 600 610 lineto 310 610 lineto 
  317.     closepath fill} def
  318.   /LLL
  319.    {290 0 moveto 290 610 lineto 600 610 lineto 600 590 lineto
  320.     310 590 lineto 310 0 lineto closepath fill
  321.     310 410 moveto 600 410 lineto 600 390 lineto 310 390 lineto 
  322.     closepath fill} def
  323.   /MMM
  324.    {190 0 moveto 190 510 lineto 600 510 lineto 600 490 lineto
  325.     210 490 lineto 210 0 lineto closepath fill
  326.     390 0 moveto 390 490 lineto 410 490 lineto 410 0 lineto 
  327.     closepath fill} def
  328.   /NNN
  329.    {190 0 moveto 190 1000 lineto 210 1000 lineto 210 0 lineto 
  330.     closepath fill
  331.     390 0 moveto 390 1000 lineto 410 1000 lineto 410 0 lineto 
  332.     closepath fill
  333.     0 490 moveto 600 490 lineto 600 510 lineto 0 510 lineto 
  334.     closepath fill} def
  335.   /OOO
  336.    {290 0 moveto 290 1000 lineto 310 1000 lineto 310 0 lineto 
  337.     closepath fill
  338.     0 390 moveto 600 390 lineto 600 410 lineto 0 410 lineto 
  339.     closepath fill
  340.     0 590 moveto 600 590 lineto 600 610 lineto 0 610 lineto 
  341.     closepath fill} def
  342.   /RRR
  343.    {0 0 moveto 0 1000 lineto 600 1000 lineto
  344.     600 0 lineto closepath fill} def
  345.   /gray1
  346.    {0 0 moveto 0 1000 lineto 600 1000 lineto 
  347.     600 0 lineto closepath fill} def
  348.   /gray2
  349.    {0 0 moveto 0 1000 lineto 600 1000 lineto 
  350.     600 0 lineto closepath fill} def
  351.   /gray3
  352.    {0 0 moveto 0 1000 lineto 600 1000 lineto 
  353.     600 0 lineto closepath fill} def
  354.   /fff
  355.    {290 0 moveto 290 1000 lineto 310 1000 lineto 310 0 lineto 
  356.     closepath fill
  357.     0 390 moveto 290 390 lineto 290 410 lineto 0 410 lineto 
  358.     closepath fill
  359.     0 590 moveto 290 590 lineto 290 610 lineto 0 610 lineto 
  360.     closepath fill} def
  361.   /ggg
  362.    {190 0 moveto 190 1000 lineto 210 1000 lineto 210 0 lineto 
  363.     closepath fill
  364.     390 0 moveto 390 1000 lineto 410 1000 lineto 410 0 lineto 
  365.     closepath fill
  366.     0 490 moveto 190 490 lineto 190 510 lineto 0 510 lineto 
  367.     closepath fill} def
  368.   /hhh
  369.    {0 510 moveto 410 510 lineto 410 0 lineto 390 0 lineto 
  370.     390 490 lineto 0 490 lineto closepath fill
  371.     190 490 moveto 190 0 lineto 210 0 lineto 210 490 lineto 
  372.     closepath fill} def
  373.   /iii
  374.    {0 610 moveto 310 610 lineto 310 0 lineto 290 0 lineto
  375.     290 590 lineto 0 590 lineto closepath fill
  376.     0 410 moveto 290 410 lineto 290 390 lineto 0 390 lineto 
  377.     closepath fill} def
  378.   /jjj
  379.    {0 590 moveto 210 590 lineto 210 1000 lineto 190 1000 lineto
  380.     190 610 lineto 0 610 lineto closepath fill
  381.     0 410 moveto 210 410 lineto 210 0 lineto 190 0 lineto
  382.     190 390 lineto 0 390 lineto closepath fill
  383.     390 0 moveto 390 1000 lineto 410 1000 lineto 410 0 lineto 
  384.     closepath fill} def
  385.   /kkk
  386.    {190 0 moveto 190 1000 lineto 210 1000 lineto 210 0 lineto 
  387.     closepath fill
  388.     390 0 moveto 390 1000 lineto 410 1000 lineto 410 0 lineto 
  389.     closepath fill} def
  390.   /lll
  391.    {0 610 moveto 410 610 lineto 410 0 lineto 390 0 lineto
  392.     390 590 lineto 0 590 lineto closepath fill
  393.     0 410 moveto 210 410 lineto 210 0 lineto 190 0 lineto
  394.     190 390 lineto 0 390 lineto closepath fill} def
  395.   /mmm
  396.    {0 590 moveto 210 590 lineto 210 1000 lineto 190 1000 lineto
  397.     190 610 lineto 0 610 lineto closepath fill
  398.     0 390 moveto 410 390 lineto 410 1000 lineto 390 1000 lineto
  399.     390 410 lineto 0 410 lineto closepath fill} def
  400.   /nnn
  401.    {0 490 moveto 410 490 lineto 410 1000 lineto 390 1000 lineto
  402.     390 510 lineto 0 510 lineto closepath fill
  403.     190 510 moveto 190 1000 lineto 210 1000 lineto 210 510 lineto
  404.     closepath fill} def
  405.   /ooo
  406.    {0 390 moveto 310 390 lineto 310 1000 lineto 290 1000 lineto
  407.     290 410 lineto 0 410 lineto closepath fill
  408.     0 590 moveto 290 590 lineto 290 610 lineto 0 610 lineto 
  409.     closepath fill} def
  410.   /www
  411.    {290 0 moveto 290 1000 lineto 310 1000 lineto 310 0 lineto 
  412.     closepath fill
  413.     310 390 moveto 600 390 lineto 600 410 lineto 310 410 lineto 
  414.     closepath fill
  415.     310 590 moveto 600 590 lineto 600 610 lineto 310 610 lineto
  416.     closepath fill} def
  417.   /xxx
  418.    {190 0 moveto 190 1000 lineto 210 1000 lineto 210 0 lineto 
  419.     closepath fill
  420.     390 0 moveto 390 1000 lineto 410 1000 lineto 410 0 lineto 
  421.     closepath fill
  422.     410 490 moveto 600 490 lineto 600 510 lineto 410 510 lineto
  423.     closepath fill} def
  424.   /yyy
  425.    {190 1000 moveto 190 390 lineto 600 390 lineto 600 410 lineto
  426.     210 410 lineto 210 1000 lineto closepath fill
  427.     390 1000 moveto 390 590 lineto 600 590 lineto 600 610 lineto
  428.     410 610 lineto 410 1000 lineto closepath fill} def
  429.   /zzz
  430.    {190 0 moveto 190 610 lineto 600 610 lineto 600 590 lineto
  431.     210 590 lineto 210 0 lineto closepath fill
  432.     390 0 moveto 390 410 lineto 600 410 lineto 600 390 lineto
  433.     410 390 lineto 410 0 lineto closepath fill} def
  434. /BuildChar
  435.   {600 0
  436.    0 0 600 1000
  437.    setcachedevice
  438.    exch begin
  439.    Encoding exch get
  440.    CharProcs exch get
  441.    end
  442.    exec
  443.   } def
  444. /Box-Font newfont definefont pop
  445. % End box font definition
  446. ## CHANGES TO POSTSCR.TCT:
  447. ## locate the following line near the top of the file:
  448. ## @macro(sym() "@symbol(@char(@eval))")
  449. ## and add the following lines after it:
  450. @macro(bchar() "@BoxFont(@char(@eval))")
  451. @macro(g1char() "@gray1(@BoxFont(@char(@eval)))")
  452. @macro(g2char() "@gray2(@BoxFont(@char(@eval)))")
  453. @macro(g3char() "@gray3(@BoxFont(@char(@eval)))")
  454. ## Locate the following @tct commands and change them as shown.
  455. ## These changes inhibit the character translations if the current
  456. ## font is Courier, so the Courier font will be truly monospaced
  457. ## and everything will line up.  These changes are optional, but
  458. ## recommended:
  459. @if(plain,else {
  460. @tct("fi" "@case(font, courier, symbol "fi", else "@char(0aeh)")")
  461. @tct("fl" "@case(font, courier, symbol "fl", else "@char(0afh)")")
  462. @tct('AT' '@case(font, courier 'AT', else 'A@hsp(-0.12 em)T')')
  463. @tct('AV' '@case(font, courier 'AV', else 'A@hsp(-0.14 em)V')')
  464. @tct('AW' '@case(font, courier 'AW', else 'A@hsp(-0.10 em)W')')
  465. @tct('AY' '@case(font, courier 'AY', else 'A@hsp(-0.12 em)Y')')
  466. @tct('Av' '@case(font, courier 'Av', else 'A@hsp(-0.08 em)v')')
  467. @tct('Aw' '@case(font, courier 'Aw', else 'A@hsp(-0.08 em)w')')
  468. @tct('Ay' '@case(font, courier 'Ay', else 'A@hsp(-0.08 em)y')')
  469. @tct('FA' '@case(font, courier 'FA', else 'F@hsp(-0.10 em)A')')
  470. @tct('Fa' '@case(font, courier 'Fa', else 'F@hsp(-0.03 em)a')')
  471. @tct('Fo' '@case(font, courier 'Fo', else 'F@hsp(-0.05 em)o')')
  472. @tct('LV' '@case(font, courier 'LV', else 'L@hsp(-0.12 em)V')')
  473. @tct('LW' '@case(font, courier 'LW', else 'L@hsp(-0.10 em)W')')
  474. @tct('LY' '@case(font, courier 'LY', else 'L@hsp(-0.20 em)Y')')
  475. @tct('PA' '@case(font, courier 'PA', else 'P@hsp(-0.15 em)A')')
  476. @tct('Pa' '@case(font, courier 'Pa', else 'P@hsp(-0.03 em)a')')
  477. @tct('Pe' '@case(font, courier 'Pe', else 'P@hsp(-0.03 em)e')')
  478. @tct('Po' '@case(font, courier 'Po', else 'P@hsp(-0.05 em)o')')
  479. @tct('TA' '@case(font, courier 'TA', else 'T@hsp(-0.07 em)A')')
  480. @tct('Ta' '@case(font, courier 'Ta', else 'T@hsp(-0.07 em)a')')
  481. @tct('Te' '@case(font, courier 'Te', else 'T@hsp(-0.07 em)e')')
  482. @tct('To' '@case(font, courier 'To', else 'T@hsp(-0.07 em)o')')
  483. @tct('Tu' '@case(font, courier 'Tu', else 'T@hsp(-0.07 em)u')')
  484. @tct('Ty' '@case(font, courier 'Ty', else 'T@hsp(-0.07 em)y')')
  485. @tct('VA' '@case(font, courier 'VA', else 'V@hsp(-0.13 em)A')')
  486. @tct('VO' '@case(font, courier 'VO', else 'V@hsp(-0.08 em)O')')
  487. @tct('Va' '@case(font, courier 'Va', else 'V@hsp(-0.08 em)a')')
  488. @tct('Ve' '@case(font, courier 'Ve', else 'V@hsp(-0.08 em)e')')
  489. @tct('Vo' '@case(font, courier 'Vo', else 'V@hsp(-0.08 em)o')')
  490. @tct('WA' '@case(font, courier 'WA', else 'W@hsp(-0.10 em)A')')
  491. @tct('WO' '@case(font, courier 'WO', else 'W@hsp(-0.05 em)O')')
  492. @tct('Wa' '@case(font, courier 'Wa', else 'W@hsp(-0.08 em)a')')
  493. @tct('We' '@case(font, courier 'We', else 'W@hsp(-0.08 em)e')')
  494. @tct('Wo' '@case(font, courier 'Wo', else 'W@hsp(-0.08 em)o')')
  495. @tct('YA' '@case(font, courier 'YA', else 'Y@hsp(-0.15 em)A')')
  496. @tct('YO' '@case(font, courier 'YO', else 'Y@hsp(-0.08 em)O')')
  497. @tct('Ya' '@case(font, courier 'Ya', else 'Y@hsp(-0.16 em)a')')
  498. @tct('Ye' '@case(font, courier 'Ye', else 'Y@hsp(-0.16 em)e')')
  499. @tct('Yo' '@case(font, courier 'Yo', else 'Y@hsp(-0.16 em)o')')
  500. ## Add the following character translations below the ones above.
  501. @tct(
  502.  "@g1char(0b0h)")
  503. @tct(
  504.  "@g2char(0b1h)")
  505. @tct(
  506.  "@g3char(0b2h)")
  507. @tct(
  508.  "@bchar(0b3h)")
  509. @tct(
  510.  "@bchar(0b4h)")
  511. @tct(
  512.  "@bchar(0b5h)")
  513. @tct(
  514.  "@bchar(0b6h)")
  515. @tct(
  516.  "@bchar(0b7h)")
  517. @tct(
  518.  "@bchar(0b8h)")
  519. @tct(
  520.  "@bchar(0b9h)")
  521. @tct(
  522.  "@bchar(0bah)")
  523. @tct(
  524.  "@bchar(0bbh)")
  525. @tct(
  526.  "@bchar(0bch)")
  527. @tct(
  528.  "@bchar(0bdh)")
  529. @tct(
  530.  "@bchar(0beh)")
  531. @tct(
  532.  "@bchar(0bfh)")
  533. @tct(
  534.  "@bchar(0c0h)")
  535. @tct(
  536.  "@bchar(0c1h)")
  537. @tct(
  538.  "@bchar(0c2h)")
  539. @tct(
  540.  "@bchar(0c3h)")
  541. @tct(
  542.  "@bchar(0c4h)")
  543. @tct(
  544.  "@bchar(0c5h)")
  545. @tct(
  546.  "@bchar(0c6h)")
  547. @tct(
  548.  "@bchar(0c7h)")
  549. @tct(
  550.  "@bchar(0c8h)")
  551. @tct(
  552.  "@bchar(0c9h)")
  553. @tct(
  554.  "@bchar(0cah)")
  555. @tct(
  556.  "@bchar(0cbh)")
  557. @tct(
  558.  "@bchar(0cch)")
  559. @tct(
  560.  "@bchar(0cdh)")
  561. @tct(
  562.  "@bchar(0ceh)")
  563. @tct(
  564.  "@bchar(0cfh)")
  565. @tct(
  566.  "@bchar(0d0h)")
  567. @tct(
  568.  "@bchar(0d1h)")
  569. @tct(
  570.  "@bchar(0d2h)")
  571. @tct(
  572.  "@bchar(0d3h)")
  573. @tct(
  574.  "@bchar(0d4h)")
  575. @tct(
  576.  "@bchar(0d5h)")
  577. @tct(
  578.  "@bchar(0d6h)")
  579. @tct(
  580.  "@bchar(0d7h)")
  581. @tct(
  582.  "@bchar(0d8h)")
  583. @tct(
  584.  "@bchar(0d9h)")
  585. @tct(
  586.  "@bchar(0dah)")
  587. @tct(
  588.  "@bchar(0dbh)")
  589.