2 tfm.hh -- declare Tex_font_metric
4 source file of the GNU LilyPond music typesetter
6 (c) 1999--2005 Jan Nieuwenhuizen <janneke@gnu.org>
9 revamped code from GNU Fontutils-0.6
13 TODO: aren't there standard libs? Ideally it is better to just link
20 #include "font-metric.hh"
25 /* A character code. Perhaps someday we will allow for 16-bit
26 character codes, but for now we are restricted to 256 characters per
27 font (like TeX and PostScript). */
28 typedef unsigned char Char_code;
30 /* Used in file formats. */
31 typedef int Byte_count;
33 /* The restriction to 256 characters in a TFM file is part of the file
34 format, so this number should only be changed in the (very unlikely)
35 event that the file format changes. */
38 /* Fontwide information. All real values are in printer's points:
39 72.27 points = 1 inch. */
41 /* TFM_MIN_DESIGNSIZE <= designsize < TFM_MAX_DESIGNSIZE. */
42 #define TFM_MIN_DESIGNSIZE 1.0
43 #define TFM_MAX_DESIGNSIZE 2048
45 /* The maximum number of global font parameters we allow. */
46 #define TFM_MAX_FONTDIMENS 30
48 /* The maximum length of a codingscheme string. */
49 #define TFM_MAX_CODINGSCHEME_LENGTH 39
51 /* Define symbolic names for the numbers of the parameters we
52 recognize. Some numbers have more than one name. */
53 #define TFM_SLANT_PARAMETER 1
54 #define TFM_SPACE_PARAMETER 2
55 #define TFM_STRETCH_PARAMETER 3
56 #define TFM_SHRINK_PARAMETER 4
57 #define TFM_XHEIGHT_PARAMETER 5
58 #define TFM_QUAD_PARAMETER 6
59 #define TFM_EXTRASPACE_PARAMETER 7
60 #define TFM_NUM1_PARAMETER 8
61 #define TFM_NUM2_PARAMETER 9
62 #define TFM_NUM3_PARAMETER 10
63 #define TFM_DENOM1_PARAMETER 11
64 #define TFM_DENOM2_PARAMETER 12
65 #define TFM_SUP1_PARAMETER 13
66 #define TFM_SUP2_PARAMETER 14
67 #define TFM_SUP3_PARAMETER 15
68 #define TFM_SUB1_PARAMETER 16
69 #define TFM_SUB2_PARAMETER 17
70 #define TFM_SUPDROP_PARAMETER 18
71 #define TFM_SUBDROP_PARAMETER 19
72 #define TFM_DELIM1_PARAMETER 20
73 #define TFM_DELIM2_PARAMETER 21
74 #define TFM_AXISHEIGHT_PARAMETER 22
75 #define TFM_DEFAULTRULETHICKNESS_PARAMETER 8
76 #define TFM_BIGOPSPACING1_PARAMETER 9
77 #define TFM_BIGOPSPACING2_PARAMETER 10
78 #define TFM_BIGOPSPACING3_PARAMETER 11
79 #define TFM_BIGOPSPACING4_PARAMETER 12
80 #define TFM_BIGOPSPACING5_PARAMETER 13
82 /* These are not in any of the standard TeX fonts, but the information
83 is useful nevertheless. */
84 #define TFM_LEADINGHEIGHT_PARAMETER 23
85 #define TFM_LEADINGDEPTH_PARAMETER 24
86 #define TFM_FONTSIZE_PARAMETER 25
87 #define TFM_VERSION_PARAMETER 26
91 Byte_count char_info_pos;
93 Byte_count height_pos;
95 Byte_count italic_correction_pos;
96 Byte_count lig_kern_pos;
98 unsigned param_word_count;
103 Char_code first_charcode, last_charcode;
106 String coding_scheme;
107 unsigned parameter_count;
108 // Real parameters [Tex_font_metric::MAX_FONTDIMENS];
109 Real parameters [TFM_MAX_FONTDIMENS];
112 /* When typesetting, the current character + `character' leads to
113 `ligature'. The TFM format was extended in 1990 to allow for more
114 complicated ligatures than this, but we do not make those
122 /* Similarly for kerns. */
129 struct Tex_font_char_metric
133 Real width_, height_, depth_, italic_correction_;
134 Fix width_fix_, height_fix_, depth_fix_, italic_correction_fix_;
135 Array<Tfm_kern> kerns_;
136 Array<Tfm_ligature> ligatures_;
138 Tex_font_char_metric ();
140 Box dimensions () const;
143 class Tex_font_metric : public Simple_font_metric
146 static SCM make_tfm (String file_name);
148 virtual int count () const;
149 virtual Box get_ascii_char (int) const;
150 virtual Real design_size () const;
151 virtual void derived_mark () const;
152 virtual int name_to_index (String) const;
153 virtual String font_name () const;
155 Tfm_info const &info () const;
160 Array<Tex_font_char_metric> char_metrics_;
161 Array<int> ascii_to_metric_idx_;
165 Tex_font_char_metric const *find_ascii (int ascii, bool warn = true) const;