KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > batik > svggen > font > table > PostTable


1 /*
2
3    Copyright 2001 The Apache Software Foundation
4
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8
9        http://www.apache.org/licenses/LICENSE-2.0
10
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16
17  */

18 package org.apache.batik.svggen.font.table;
19
20 import java.io.IOException JavaDoc;
21 import java.io.RandomAccessFile JavaDoc;
22
23 /**
24  *
25  * @author <a HREF="mailto:david@steadystate.co.uk">David Schweinsberg</a>
26  * @version $Id: PostTable.java,v 1.3 2004/08/18 07:15:22 vhardy Exp $
27  */

28 public class PostTable implements Table {
29
30     /**
31      * TODO: Mac Glyph names for 210 & 257
32      */

33     private static final String JavaDoc[] macGlyphName = {
34         ".notdef", // 0
35
"null", // 1
36
"CR", // 2
37
"space", // 3
38
"exclam", // 4
39
"quotedbl", // 5
40
"numbersign", // 6
41
"dollar", // 7
42
"percent", // 8
43
"ampersand", // 9
44
"quotesingle", // 10
45
"parenleft", // 11
46
"parenright", // 12
47
"asterisk", // 13
48
"plus", // 14
49
"comma", // 15
50
"hyphen", // 16
51
"period", // 17
52
"slash", // 18
53
"zero", // 19
54
"one", // 20
55
"two", // 21
56
"three", // 22
57
"four", // 23
58
"five", // 24
59
"six", // 25
60
"seven", // 26
61
"eight", // 27
62
"nine", // 28
63
"colon", // 29
64
"semicolon", // 30
65
"less", // 31
66
"equal", // 32
67
"greater", // 33
68
"question", // 34
69
"at", // 35
70
"A", // 36
71
"B", // 37
72
"C", // 38
73
"D", // 39
74
"E", // 40
75
"F", // 41
76
"G", // 42
77
"H", // 43
78
"I", // 44
79
"J", // 45
80
"K", // 46
81
"L", // 47
82
"M", // 48
83
"N", // 49
84
"O", // 50
85
"P", // 51
86
"Q", // 52
87
"R", // 53
88
"S", // 54
89
"T", // 55
90
"U", // 56
91
"V", // 57
92
"W", // 58
93
"X", // 59
94
"Y", // 60
95
"Z", // 61
96
"bracketleft", // 62
97
"backslash", // 63
98
"bracketright", // 64
99
"asciicircum", // 65
100
"underscore", // 66
101
"grave", // 67
102
"a", // 68
103
"b", // 69
104
"c", // 70
105
"d", // 71
106
"e", // 72
107
"f", // 73
108
"g", // 74
109
"h", // 75
110
"i", // 76
111
"j", // 77
112
"k", // 78
113
"l", // 79
114
"m", // 80
115
"n", // 81
116
"o", // 82
117
"p", // 83
118
"q", // 84
119
"r", // 85
120
"s", // 86
121
"t", // 87
122
"u", // 88
123
"v", // 89
124
"w", // 90
125
"x", // 91
126
"y", // 92
127
"z", // 93
128
"braceleft", // 94
129
"bar", // 95
130
"braceright", // 96
131
"asciitilde", // 97
132
"Adieresis", // 98
133
"Aring", // 99
134
"Ccedilla", // 100
135
"Eacute", // 101
136
"Ntilde", // 102
137
"Odieresis", // 103
138
"Udieresis", // 104
139
"aacute", // 105
140
"agrave", // 106
141
"acircumflex", // 107
142
"adieresis", // 108
143
"atilde", // 109
144
"aring", // 110
145
"ccedilla", // 111
146
"eacute", // 112
147
"egrave", // 113
148
"ecircumflex", // 114
149
"edieresis", // 115
150
"iacute", // 116
151
"igrave", // 117
152
"icircumflex", // 118
153
"idieresis", // 119
154
"ntilde", // 120
155
"oacute", // 121
156
"ograve", // 122
157
"ocircumflex", // 123
158
"odieresis", // 124
159
"otilde", // 125
160
"uacute", // 126
161
"ugrave", // 127
162
"ucircumflex", // 128
163
"udieresis", // 129
164
"dagger", // 130
165
"degree", // 131
166
"cent", // 132
167
"sterling", // 133
168
"section", // 134
169
"bullet", // 135
170
"paragraph", // 136
171
"germandbls", // 137
172
"registered", // 138
173
"copyright", // 139
174
"trademark", // 140
175
"acute", // 141
176
"dieresis", // 142
177
"notequal", // 143
178
"AE", // 144
179
"Oslash", // 145
180
"infinity", // 146
181
"plusminus", // 147
182
"lessequal", // 148
183
"greaterequal", // 149
184
"yen", // 150
185
"mu", // 151
186
"partialdiff", // 152
187
"summation", // 153
188
"product", // 154
189
"pi", // 155
190
"integral'", // 156
191
"ordfeminine", // 157
192
"ordmasculine", // 158
193
"Omega", // 159
194
"ae", // 160
195
"oslash", // 161
196
"questiondown", // 162
197
"exclamdown", // 163
198
"logicalnot", // 164
199
"radical", // 165
200
"florin", // 166
201
"approxequal", // 167
202
"increment", // 168
203
"guillemotleft",// 169
204
"guillemotright",//170
205
"ellipsis", // 171
206
"nbspace", // 172
207
"Agrave", // 173
208
"Atilde", // 174
209
"Otilde", // 175
210
"OE", // 176
211
"oe", // 177
212
"endash", // 178
213
"emdash", // 179
214
"quotedblleft", // 180
215
"quotedblright",// 181
216
"quoteleft", // 182
217
"quoteright", // 183
218
"divide", // 184
219
"lozenge", // 185
220
"ydieresis", // 186
221
"Ydieresis", // 187
222
"fraction", // 188
223
"currency", // 189
224
"guilsinglleft",// 190
225
"guilsinglright",//191
226
"fi", // 192
227
"fl", // 193
228
"daggerdbl", // 194
229
"middot", // 195
230
"quotesinglbase",//196
231
"quotedblbase", // 197
232
"perthousand", // 198
233
"Acircumflex", // 199
234
"Ecircumflex", // 200
235
"Aacute", // 201
236
"Edieresis", // 202
237
"Egrave", // 203
238
"Iacute", // 204
239
"Icircumflex", // 205
240
"Idieresis", // 206
241
"Igrave", // 207
242
"Oacute", // 208
243
"Ocircumflex", // 209
244
"", // 210
245
"Ograve", // 211
246
"Uacute", // 212
247
"Ucircumflex", // 213
248
"Ugrave", // 214
249
"dotlessi", // 215
250
"circumflex", // 216
251
"tilde", // 217
252
"overscore", // 218
253
"breve", // 219
254
"dotaccent", // 220
255
"ring", // 221
256
"cedilla", // 222
257
"hungarumlaut", // 223
258
"ogonek", // 224
259
"caron", // 225
260
"Lslash", // 226
261
"lslash", // 227
262
"Scaron", // 228
263
"scaron", // 229
264
"Zcaron", // 230
265
"zcaron", // 231
266
"brokenbar", // 232
267
"Eth", // 233
268
"eth", // 234
269
"Yacute", // 235
270
"yacute", // 236
271
"Thorn", // 237
272
"thorn", // 238
273
"minus", // 239
274
"multiply", // 240
275
"onesuperior", // 241
276
"twosuperior", // 242
277
"threesuperior",// 243
278
"onehalf", // 244
279
"onequarter", // 245
280
"threequarters",// 246
281
"franc", // 247
282
"Gbreve", // 248
283
"gbreve", // 249
284
"Idot", // 250
285
"Scedilla", // 251
286
"scedilla", // 252
287
"Cacute", // 253
288
"cacute", // 254
289
"Ccaron", // 255
290
"ccaron", // 256
291
"" // 257
292
};
293
294     private int version;
295     private int italicAngle;
296     private short underlinePosition;
297     private short underlineThickness;
298     private int isFixedPitch;
299     private int minMemType42;
300     private int maxMemType42;
301     private int minMemType1;
302     private int maxMemType1;
303     
304     // v2
305
private int numGlyphs;
306     private int[] glyphNameIndex;
307     private String JavaDoc[] psGlyphName;
308
309     /** Creates new PostTable */
310     protected PostTable(DirectoryEntry de, RandomAccessFile JavaDoc raf) throws IOException JavaDoc {
311         raf.seek(de.getOffset());
312         version = raf.readInt();
313         italicAngle = raf.readInt();
314         underlinePosition = raf.readShort();
315         underlineThickness = raf.readShort();
316         isFixedPitch = raf.readInt();
317         minMemType42 = raf.readInt();
318         maxMemType42 = raf.readInt();
319         minMemType1 = raf.readInt();
320         maxMemType1 = raf.readInt();
321         
322         if (version == 0x00020000) {
323             numGlyphs = raf.readUnsignedShort();
324             glyphNameIndex = new int[numGlyphs];
325             for (int i = 0; i < numGlyphs; i++) {
326                 glyphNameIndex[i] = raf.readUnsignedShort();
327             }
328             int h = highestGlyphNameIndex();
329             if (h > 257) {
330                 h -= 257;
331                 psGlyphName = new String JavaDoc[h];
332                 for (int i = 0; i < h; i++) {
333                     int len = raf.readUnsignedByte();
334                     byte[] buf = new byte[len];
335                     raf.readFully(buf);
336                     psGlyphName[i] = new String JavaDoc(buf);
337                 }
338             }
339         } else if (version == 0x00020005) {
340         }
341     }
342
343     private int highestGlyphNameIndex() {
344         int high = 0;
345         for (int i = 0; i < numGlyphs; i++) {
346             if (high < glyphNameIndex[i]) {
347                 high = glyphNameIndex[i];
348             }
349         }
350         return high;
351     }
352
353     public String JavaDoc getGlyphName(int i) {
354         if (version == 0x00020000) {
355             return (glyphNameIndex[i] > 257)
356                 ? psGlyphName[glyphNameIndex[i] - 258]
357                 : macGlyphName[glyphNameIndex[i]];
358         } else {
359             return null;
360         }
361     }
362
363     /** Get the table type, as a table directory value.
364      * @return The table type
365      */

366     public int getType() {
367         return post;
368     }
369
370 }
371
Popular Tags