h-glyphs.txt 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. The GNU libplot library and the plotting utilities based on it, such as
  2. GNU `graph', can display text strings in any of 21 `Hershey fonts', such as
  3. HersheySerif and HersheySerif-Bold. Hershey fonts are built from `Hershey
  4. glyphs'. There are two sorts of glyph: standard (`occidental') and
  5. Japanese (`oriental'). The glyphs were digitized by Dr. Allen V. Hershey
  6. at what is now the U.S. Naval Surface Weapons Center in Dahlgren, VA
  7. (formerly the U.S. Naval Weapons Laboratory), mostly during the late
  8. 1960's.
  9. There are many glyphs that are not part of any Hershey font. Such glyphs
  10. must be referred to by number. For example, the string "\#H0744\#H0745"
  11. uses escape sequences to refer to Hershey glyphs #744 and #745, which are a
  12. shamrock and a fleur-de-lys respectively. All occidental Hershey glyphs
  13. have numbers in the 0..3999 range, but there are many gaps. In this file
  14. we explain how the array of occidental glyphs now in GNU libplot was
  15. constructed, and give more information on the numbering scheme.
  16. The array was assembled in large part from earlier (pre-GNU) public
  17. distributions of the occidental glyphs. These included the following.
  18. #0. Distributions by Dr. Hershey himself, in the late 1960's and 1970's.
  19. These were distributions of his typographic software, of which the glyph
  20. distribution was a part. Initial distributions were on punched cards and
  21. later ones were on magnetic tape. At least 120 copies of the typographic
  22. software were distributed. It is not known how many distinct releases
  23. there were, either of the software or of the glyphs.
  24. #1. The U.S. NBS [U.S. National Bureau of Standards, since renamed the
  25. National Institute of Standards and Technology] publication "A Contribution
  26. to Computer Typesetting Techniques", dated 1976, and the accompanying
  27. magnetic tape. This presumably included all glyphs in use at that time.
  28. In Figure 15 of that publication, 43 additional glyphs (digitized by Norman
  29. Wolcott at NBS) were shown, but the data for them were not given. (Glyphs
  30. 2250, 2260 were probably included in Figure 15 erroneously; they were also
  31. listed among the standard glyphs).
  32. #2. The Usenet distribution of Pete Holzmann <pete@xc.org> and Jim Hurt
  33. (to the newsgroup mod.sources, now defunct). Circa 1985, but based on the
  34. above 1976 tape. It introduced the scheme for encoding vector glyphs as
  35. strings which is now used in libplot. Almost identical to the above (none
  36. of the 43 new Wolcott glyphs), but included three additional glyphs: 997,
  37. 998, 999. These were merely horizontal strokes.
  38. #3. The glyph database incorporated in the PGPLOT subroutine library of Tim
  39. Pearson <tjp@astro.caltech.edu>, still available from
  40. ftp://ftp.astro.caltech.edu and from the astro.caltech.edu web server.
  41. This was probably based, c. 1980, on a distribution obtained either from
  42. Nelson Beebe (see #4 below) or directly from Dr. Hershey. It included data
  43. for the 43 new Wolcott glyphs, and 10 additional glyphs numbered 236 (an
  44. cartographic-sized `@'), 590 (an underscore), 2078 (Aring), 3330, 3331,
  45. 3332, 3430, 3431, 3432 (umlaut-accented German letters), and 4000 (a boxed
  46. inverted questionmark). The last of these (#4000) apparently did not
  47. originate with Dr. Hershey, but the others may have. The horizontal stroke
  48. glyphs 997, 998, 999 from distribution #2 were not present. Ten glyphs
  49. were revised: 1225, 1226, 1407, 1408, 2225, 2226, 2407, 2408, 3010, and
  50. 3159. The first eight of these were braces. There were 1642 separately
  51. indexed glyphs in all.
  52. #4. The glyph database incorporated in the PLOT79 utility of Nelson Beebe
  53. <beebe@math.utah.edu>. Also dates back to c. 1980; based on a tape from
  54. Dr. Hershey himself, with local additions. All the 1642 glyphs from #3 are
  55. present, except that 590 (an underscore) and 2078 (Aring) are missing.
  56. (The Hershey tape may have been a slightly earlier one than the tape used
  57. for #3?) Also, 911..922 (twelve outline and filled arrows) and 923..926
  58. (four large pointing hands) were added by Dr. Beebe. As well, 256 small
  59. fixed-width glyphs (marker symbols taken from a plotter in the 1970's, and
  60. low-resolution alphabets based on the plotter alphabet) in the 1500..1627
  61. and 1700..1827 ranges were added. There were 1912 separately indexed
  62. glyphs in all.
  63. #5. The glyph database accompanying Dr. Hershey's distribution in the
  64. 1980's of typographic software in True Basic, for PC's. For details, see
  65. his 1981 technical report `Advanced Computer Typography' and his 1995
  66. technical report `Cartography and Typography with True Basic'. The 43
  67. Wolcott glyphs (see above) were not present, and the 10 extra glyphs from
  68. the PGPLOT distribution were not present either. However, an entire new
  69. alphabet (Triplex Greek) was included. The small upper-case alphabet
  70. (`Cartographic Roman') was extended to include lower-case characters, and a
  71. small `Cartographic Italic' alphabet was added as well. Many alphabets
  72. were extended by crafting such characters as @, <, >, #, and % for them.
  73. Also, several glyphs were revised. 13 cartographic symbols in the 700..899
  74. range were dropped, probably inadvertently.
  75. The glyph array built into GNU libplot, and accessible to the GNU plotting
  76. utilities, is a merged version. It includes all glyphs from distribution
  77. #5, the 43 Wolcott glyphs, and 7 of the 10 additional glyphs from
  78. distribution #3, i.e., 2078 (Aring), and 3330, 3331, 3332, 3430, 3431, 3432
  79. (umlaut-accented German letters). The 13 cartographic symbols in the
  80. 700..899 range that were inadvertently dropped from distribution #5 have
  81. been restored.
  82. Many non-Hershey glyphs were also included in the GNU libplot array of
  83. occidental glyphs, to facilitate the construction of ISO-Latin-1 Hershey
  84. fonts. The 4000..4194 range contains a large number of such non-Hershey
  85. glyphs. Nelson Beebe's large pointing hands (923..926 in distribution #4)
  86. were included as 4040..4043. An important source of non-Hershey glyphs was
  87. Robert Beach's UGS [Unified Graphics System], which was developed at the
  88. SLAC [Stanford Linear Accelerator Center] Computation Research Group in the
  89. 1970's. (See Computer Graphics, Fall 1974, pp. 22-23. The UGS source code
  90. may still be available at ftp://ftp.slac.stanford.edu/software/ugs77/ .)
  91. A number of glyphs in the 4000..4025 range were taken from the UGS glyph
  92. repertory.
  93. The following is a breakdown of the original Hershey glyphs (defined to
  94. include the 43 Wolcott glyphs and the 10 additional glyphs mentioned
  95. above). They occupy the 1..3926 range of the occidental array, and may be
  96. accessed individually by escape sequences in the range "\#H0001".."\#H3926".
  97. They fall into the following groups:
  98. 0001..0284 alphanumeric symbols, cartographic [small] size
  99. 0501..0746 alphanumeric symbols, principal [large] size
  100. 0750..0909 centered symbols
  101. 0910 alphanumeric symbols, principal [large] size
  102. 1001..1295 alphanumeric symbols, indexical [medium] size
  103. 1401..2312 alphanumeric symbols, principal [large] size
  104. 2317..2382 centered symbols
  105. 2401..3926 alphanumeric symbols, principal [large] size
  106. `Alphanumeric symbols' means not just alphabetic symbols and numerals, but
  107. also punctuation marks, mathematical symbols, etc.; in general, any symbol
  108. that can be viewed as having a well-defined `baseline', and which could
  109. appear in a string of characters resting on that baseline.
  110. `Centered symbols' are different. In practice they would seldom be
  111. displayed in such a way that they are resting on a baseline. Instead, they
  112. would be drawn so as to be centered on a specified point. Also, they would
  113. seldom appear in a string. An example would be the `sand' symbol, Hershey
  114. glyph #0764, which is clearly designed to be drawn on a map rather than to
  115. appear in text.
  116. In the original distributions of the Hershey glyphs, no distinction was
  117. made between alphanumeric symbols and centered symbols. That was possible
  118. because in the coordinate system used by Dr. Hershey, all are centered on
  119. the point (0,0). The `baseline' concept was not used. Each alphanumeric
  120. symbols had a well-defined baseline, but the baselines differed for the
  121. three sizes.
  122. When strings are drawn with the alabel() function of GNU libplot, e.g.,
  123. when GNU `graph' labels axes, a baseline must be chosen. For alphanumeric
  124. symbols of all kinds and also centered symbols, we have chosen it to be the
  125. baseline appropriate for the principal [large] size alphanumeric symbols.
  126. This determines a choice of vertical elevation of each symbol, when it is
  127. rendered as an element of a string.
  128. If the `x' option to alabel() is used, to place characters on a baseline,
  129. the vertical elevation may not be appropriate for indexical [medium] and
  130. cartographic [small] alphanumeric symbols. But nowadays the indexical and
  131. cartographic glyphs are seldom accessed. The only reason for drawing
  132. smaller characters is to draw superscripts and subscripts, and our
  133. rendering algorithm uses miniaturized principal-size characters for that.
  134. If you are using the alabel() function to display strings, you may specify
  135. `c' as the third argument to obtain vertical centering, instead of the
  136. usual `x', which places characters on a baseline. You would use `c' to
  137. place a centered symbol at a specified point. For example, the function
  138. call
  139. alabel ('c', 'c', "\#H0764");
  140. would place the `sand' symbol, glyph #764, at the current position. The
  141. first argument `c' requests horizontal centering, so the symbol will be
  142. centered both horizontally and vertically.