blob: 9561e56fb078067ee51570daebe4af97c7cdd351 [file] [log] [blame]
bungeman@google.comf8d1aee2012-02-02 19:15:21 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkPanose_DEFINED
9#define SkPanose_DEFINED
10
11#include "SkOTTableTypes.h"
12#include "SkTypedEnum.h"
13
14#pragma pack(push, 1)
15
16struct SkPanose {
17 //This value changes the meaning of the following 9 bytes.
18 struct FamilyType {
19 SK_TYPED_ENUM(Value, SK_OT_BYTE,
20 ((Any, 0))
21 ((NoFit, 1))
22 ((TextAndDisplay, 2))
23 ((Script, 3))
24 ((Decorative, 4))
25 ((Pictoral, 5))
26 SK_SEQ_END,
27 (value)SK_SEQ_END)
28 } bFamilyType;
29
30 union Data {
31 struct TextAndDisplay {
32 struct SerifStyle {
33 SK_TYPED_ENUM(Value, SK_OT_BYTE,
34 ((Any, 0))
35 ((NoFit, 1))
36 ((Cove, 2))
37 ((ObtuseCove, 3))
38 ((SquareCove, 4))
39 ((ObtuseSquareCove, 5))
40 ((Square, 6))
41 ((Thin, 7))
42 ((Bone, 8))
43 ((Exaggerated, 9))
44 ((Triangle, 10))
45 ((NormalSans, 11))
46 ((ObtuseSans, 12))
47 ((PerpSans, 13))
48 ((Flared, 14))
49 ((Rounded, 15))
50 SK_SEQ_END,
51 (value)SK_SEQ_END)
52 } bSerifStyle;
53
54 struct Weight {
55 SK_TYPED_ENUM(Value, SK_OT_BYTE,
56 ((Any, 0))
57 ((NoFit, 1))
58 ((VeryLight, 2))
59 ((Light, 3))
60 ((Thin, 4))
61 ((Book, 5))
62 ((Medium, 6))
63 ((Demi, 7))
64 ((Bold, 8))
65 ((Heavy, 9))
66 ((Black, 10))
67 ((ExtraBlack, 11))
68 SK_SEQ_END,
69 (value)SK_SEQ_END)
70 } bWeight;
71
72 struct Proportion {
73 SK_TYPED_ENUM(Value, SK_OT_BYTE,
74 ((Any, 0))
75 ((NoFit, 1))
76 ((OldStyle, 2))
77 ((Modern, 3))
78 ((EvenWidth, 4))
79 ((Expanded, 5))
80 ((Condensed, 6))
81 ((VeryExpanded, 7))
82 ((VeryCondensed, 8))
83 ((Monospaced, 9))
84 SK_SEQ_END,
85 (value)SK_SEQ_END)
86 } bProportion;
87
88 struct Contrast {
89 SK_TYPED_ENUM(Value, SK_OT_BYTE,
90 ((Any, 0))
91 ((NoFit, 1))
92 ((None, 2))
93 ((VeryLow, 3))
94 ((Low, 4))
95 ((MediumLow, 5))
96 ((Medium, 6))
97 ((MediumHigh, 7))
98 ((High, 8))
99 ((VeryHigh, 9))
100 SK_SEQ_END,
101 (value)SK_SEQ_END)
102 } bContrast;
103
104#ifdef SK_WIN_PANOSE
105 //This is what Windows (and FontForge and Apple TT spec) define.
106 //The Impact font uses 9.
107 struct StrokeVariation {
108 SK_TYPED_ENUM(Value, SK_OT_BYTE,
109 ((Any, 0))
110 ((NoFit, 1))
111 ((GradualDiagonal, 2))
112 ((GradualTransitional, 3))
113 ((GradualVertical, 4))
114 ((GradualHorizontal, 5))
115 ((RapidVertical, 6))
116 ((RapidHorizontal, 7))
117 ((InstantVertical, 8))
118 SK_SEQ_END,
119 (value)SK_SEQ_END)
120 } bStrokeVariation;
121#else
122 //Stroke variation description in OT OS/2 ver0,ver1 is incorrect.
123 //This is what HP Panose says.
124 struct StrokeVariation {
125 SK_TYPED_ENUM(Value, SK_OT_BYTE,
126 ((Any, 0))
127 ((NoFit, 1))
128 ((NoVariation, 2))
129 ((Gradual_Diagonal, 3))
130 ((Gradual_Transitional, 4))
131 ((Gradual_Vertical, 5))
132 ((Gradual_Horizontal, 6))
133 ((Rapid_Vertical, 7))
134 ((Rapid_Horizontal, 8))
135 ((Instant_Vertical, 9))
136 ((Instant_Horizontal, 10))
137 SK_SEQ_END,
138 (value)SK_SEQ_END)
139 } bStrokeVariation;
140#endif
141
142 struct ArmStyle {
143 SK_TYPED_ENUM(Value, SK_OT_BYTE,
144 ((Any, 0))
145 ((NoFit, 1))
146 ((StraightArms_Horizontal, 2))
147 ((StraightArms_Wedge, 3))
148 ((StraightArms_Vertical, 4))
149 ((StraightArms_SingleSerif, 5))
150 ((StraightArms_DoubleSerif, 6))
151 ((NonStraightArms_Horizontal, 7))
152 ((NonStraightArms_Wedge, 8))
153 ((NonStraightArms_Vertical, 9))
154 ((NonStraightArms_SingleSerif, 10))
155 ((NonStraightArms_DoubleSerif, 11))
156 SK_SEQ_END,
157 (value)SK_SEQ_END)
158 } bArmStyle;
159
160 struct Letterform {
161 SK_TYPED_ENUM(Value, SK_OT_BYTE,
162 ((Any, 0))
163 ((NoFit, 1))
164 ((Normal_Contact, 2))
165 ((Normal_Weighted, 3))
166 ((Normal_Boxed, 4))
167 ((Normal_Flattened, 5))
168 ((Normal_Rounded, 6))
169 ((Normal_OffCenter, 7))
170 ((Normal_Square, 8))
171 ((Oblique_Contact, 9))
172 ((Oblique_Weighted, 10))
173 ((Oblique_Boxed, 11))
174 ((Oblique_Flattened, 12))
175 ((Oblique_Rounded, 13))
176 ((Oblique_OffCenter, 14))
177 ((Oblique_Square, 15))
178 SK_SEQ_END,
179 (value)SK_SEQ_END)
180 } bLetterform;
181
182 struct Midline {
183 SK_TYPED_ENUM(Value, SK_OT_BYTE,
184 ((Any, 0))
185 ((NoFit, 1))
186 ((Standard_Trimmed, 2))
187 ((Standard_Pointed, 3))
188 ((Standard_Serifed, 4))
189 ((High_Trimmed, 5))
190 ((High_Pointed, 6))
191 ((High_Serifed, 7))
192 ((Constant_Trimmed, 8))
193 ((Constant_Pointed, 9))
194 ((Constant_Serifed, 10))
195 ((Low_Trimmed, 11))
196 ((Low_Pointed, 12))
197 ((Low_Serifed, 13))
198 SK_SEQ_END,
199 (value)SK_SEQ_END)
200 } bMidline;
201
202 struct XHeight {
203 SK_TYPED_ENUM(Value, SK_OT_BYTE,
204 ((Any, 0))
205 ((NoFit, 1))
206 ((Constant_Small, 2))
207 ((Constant_Standard, 3))
208 ((Constant_Large, 4))
209 ((Ducking_Small, 5))
210 ((Ducking_Standard, 6))
211 ((Ducking_Large, 7))
212 SK_SEQ_END,
213 (value)SK_SEQ_END)
214 } bXHeight;
215 } textAndDisplay;
216
217 struct Script {
218 struct ToolKind {
219 SK_TYPED_ENUM(Value, SK_OT_BYTE,
220 ((Any, 0))
221 ((NoFit, 1))
222 ((FlatNib, 2))
223 ((PressurePoint, 3))
224 ((Engraved, 4))
225 ((Ball, 5))
226 ((Brush, 6))
227 ((Rough, 7))
228 ((FeltPen, 8))
229 ((WildBrush, 9))
230 SK_SEQ_END,
231 (value)SK_SEQ_END)
232 } bToolKind;
233
234 struct Weight {
235 SK_TYPED_ENUM(Value, SK_OT_BYTE,
236 ((Any, 0))
237 ((NoFit, 1))
238 ((VeryLight, 2))
239 ((Light, 3))
240 ((Thin, 4))
241 ((Book, 5))
242 ((Medium, 6))
243 ((Demi, 7))
244 ((Bold, 8))
245 ((Heavy, 9))
246 ((Black, 10))
247 ((ExtraBlack, 11))
248 SK_SEQ_END,
249 (value)SK_SEQ_END)
250 } bWeight;
251
252 struct Spacing {
253 SK_TYPED_ENUM(Value, SK_OT_BYTE,
254 ((Any, 0))
255 ((NoFit, 1))
256 ((ProportionalSpaced, 2))
257 ((Monospaced, 3))
258 SK_SEQ_END,
259 (value)SK_SEQ_END)
260 } bSpacing;
261
262 struct AspectRatio {
263 SK_TYPED_ENUM(Value, SK_OT_BYTE,
264 ((Any, 0))
265 ((NoFit, 1))
266 ((VeryCondensed, 2))
267 ((Condensed, 3))
268 ((Normal, 4))
269 ((Expanded, 5))
270 ((VeryExpanded, 6))
271 SK_SEQ_END,
272 (value)SK_SEQ_END)
273 } bAspectRatio;
274
275 struct Contrast {
276 SK_TYPED_ENUM(Value, SK_OT_BYTE,
277 ((Any, 0))
278 ((NoFit, 1))
279 ((None, 2))
280 ((VeryLow, 3))
281 ((Low, 4))
282 ((MediumLow, 5))
283 ((Medium, 6))
284 ((MediumHigh, 7))
285 ((High, 8))
286 ((VeryHigh, 9))
287 SK_SEQ_END,
288 (value)SK_SEQ_END)
289 } bContrast;
290
291 struct Topology {
292 SK_TYPED_ENUM(Value, SK_OT_BYTE,
293 ((Any, 0))
294 ((NoFit, 1))
295 ((Roman_Disconnected, 2))
296 ((Roman_Trailing, 3))
297 ((Roman_Connected, 4))
298 ((Cursive_Disconnected, 5))
299 ((Cursive_Trailing, 6))
300 ((Cursive_Connected, 7))
301 ((Blackletter_Disconnected, 8))
302 ((Blackletter_Trailing, 9))
303 ((Blackletter_Connected, 10))
304 SK_SEQ_END,
305 (value)SK_SEQ_END)
306 } bTopology;
307
308 struct Form {
309 SK_TYPED_ENUM(Value, SK_OT_BYTE,
310 ((Any, 0))
311 ((NoFit, 1))
312 ((Upright_NoWrapping, 2))
313 ((Upright_SomeWrapping, 3))
314 ((Upright_MoreWrapping, 4))
315 ((Upright_ExtremeWrapping, 5))
316 ((Oblique_NoWrapping, 6))
317 ((Oblique_SomeWrapping, 7))
318 ((Oblique_MoreWrapping, 8))
319 ((Oblique_ExtremeWrapping, 9))
320 ((Exaggerated_NoWrapping, 10))
321 ((Exaggerated_SomeWrapping, 11))
322 ((Exaggerated_MoreWrapping, 12))
323 ((Exaggerated_ExtremeWrapping, 13))
324 SK_SEQ_END,
325 (value)SK_SEQ_END)
326 } bForm;
327
328 struct Finials {
329 SK_TYPED_ENUM(Value, SK_OT_BYTE,
330 ((Any, 0))
331 ((NoFit, 1))
332 ((None_NoLoops, 2))
333 ((None_ClosedLoops, 3))
334 ((None_OpenLoops, 4))
335 ((Sharp_NoLoops, 5))
336 ((Sharp_ClosedLoops, 6))
337 ((Sharp_OpenLoops, 7))
338 ((Tapered_NoLoops, 8))
339 ((Tapered_ClosedLoops, 9))
340 ((Tapered_OpenLoops, 10))
341 ((Round_NoLoops, 11))
342 ((Round_ClosedLoops, 12))
343 ((Round_OpenLoops, 13))
344 SK_SEQ_END,
345 (value)SK_SEQ_END)
346 } bFinials;
347
348 struct XAscent {
349 SK_TYPED_ENUM(Value, SK_OT_BYTE,
350 ((Any, 0))
351 ((NoFit, 1))
352 ((VeryLow, 2))
353 ((Low, 3))
354 ((Medium, 4))
355 ((High, 5))
356 ((VeryHigh, 6))
357 SK_SEQ_END,
358 (value)SK_SEQ_END)
359 } bXAscent;
360 } script;
361
362 struct Decorative {
363 struct Class {
364 SK_TYPED_ENUM(Value, SK_OT_BYTE,
365 ((Any, 0))
366 ((NoFit, 1))
367 ((Derivative, 2))
368 ((NonStandard_Topology, 3))
369 ((NonStandard_Elements, 4))
370 ((NonStandard_Aspect, 5))
371 ((Initials, 6))
372 ((Cartoon, 7))
373 ((PictureStems, 8))
374 ((Ornamented, 9))
375 ((TextAndBackground, 10))
376 ((Collage, 11))
377 ((Montage, 12))
378 SK_SEQ_END,
379 (value)SK_SEQ_END)
380 } bClass;
381
382 struct Weight {
383 SK_TYPED_ENUM(Value, SK_OT_BYTE,
384 ((Any, 0))
385 ((NoFit, 1))
386 ((VeryLight, 2))
387 ((Light, 3))
388 ((Thin, 4))
389 ((Book, 5))
390 ((Medium, 6))
391 ((Demi, 7))
392 ((Bold, 8))
393 ((Heavy, 9))
394 ((Black, 10))
395 ((ExtraBlack, 11))
396 SK_SEQ_END,
397 (value)SK_SEQ_END)
398 } bWeight;
399
400 struct Aspect {
401 SK_TYPED_ENUM(Value, SK_OT_BYTE,
402 ((Any, 0))
403 ((NoFit, 1))
404 ((SuperCondensed, 2))
405 ((VeryCondensed, 3))
406 ((Condensed, 4))
407 ((Normal, 5))
408 ((Extended, 6))
409 ((VeryExtended, 7))
410 ((SuperExtended, 8))
411 ((Monospaced, 9))
412 SK_SEQ_END,
413 (value)SK_SEQ_END)
414 } bAspect;
415
416 struct Contrast {
417 SK_TYPED_ENUM(Value, SK_OT_BYTE,
418 ((Any, 0))
419 ((NoFit, 1))
420 ((None, 2))
421 ((VeryLow, 3))
422 ((Low, 4))
423 ((MediumLow, 5))
424 ((Medium, 6))
425 ((MediumHigh, 7))
426 ((High, 8))
427 ((VeryHigh, 9))
428 ((HorizontalLow, 10))
429 ((HorizontalMedium, 11))
430 ((HorizontalHigh, 12))
431 ((Broken, 13))
432 SK_SEQ_END,
433 (value)SK_SEQ_END)
434 } bContrast;
435
436 struct SerifVariant {
437 SK_TYPED_ENUM(Value, SK_OT_BYTE,
438 ((Any, 0))
439 ((NoFit, 1))
440 ((Cove, 2))
441 ((ObtuseCove, 3))
442 ((SquareCove, 4))
443 ((ObtuseSquareCove, 5))
444 ((Square, 6))
445 ((Thin, 7))
446 ((Oval, 8))
447 ((Exaggerated, 9))
448 ((Triangle, 10))
449 ((NormalSans, 11))
450 ((ObtuseSans, 12))
451 ((PerpendicularSans, 13))
452 ((Flared, 14))
453 ((Rounded, 15))
454 ((Script, 16))
455 SK_SEQ_END,
456 (value)SK_SEQ_END)
457 } bSerifVariant;
458
459 struct Treatment {
460 SK_TYPED_ENUM(Value, SK_OT_BYTE,
461 ((Any, 0))
462 ((NoFit, 1))
463 ((None_StandardSolidFill, 2))
464 ((White_NoFill, 3))
465 ((PatternedFill, 4))
466 ((ComplexFill, 5))
467 ((ShapedFill, 6))
468 ((DrawnDistressed, 7))
469 SK_SEQ_END,
470 (value)SK_SEQ_END)
471 } bTreatment;
472
473 struct Lining {
474 SK_TYPED_ENUM(Value, SK_OT_BYTE,
475 ((Any, 0))
476 ((NoFit, 1))
477 ((None, 2))
478 ((Inline, 3))
479 ((Outline, 4))
480 ((Engraved, 5))
481 ((Shadow, 6))
482 ((Relief, 7))
483 ((Backdrop, 8))
484 SK_SEQ_END,
485 (value)SK_SEQ_END)
486 } bLining;
487
488 struct Topology {
489 SK_TYPED_ENUM(Value, SK_OT_BYTE,
490 ((Any, 0))
491 ((NoFit, 1))
492 ((Standard, 2))
493 ((Square, 3))
494 ((MultipleSegment, 4))
495 ((DecoWacoMidlines, 5))
496 ((UnevenWeighting, 6))
497 ((DiverseArms, 7))
498 ((DiverseForms, 8))
499 ((LombardicForms, 9))
500 ((UpperCaseInLowerCase, 10))
501 ((ImpliedTopology, 11))
502 ((HorseshoeEandA, 12))
503 ((Cursive, 13))
504 ((Blackletter, 14))
505 ((SwashVariance, 15))
506 SK_SEQ_END,
507 (value)SK_SEQ_END)
508 } bTopology;
509
510 struct RangeOfCharacters {
511 SK_TYPED_ENUM(Value, SK_OT_BYTE,
512 ((Any, 0))
513 ((NoFit, 1))
514 ((ExtendedCollection, 2))
515 ((Litterals, 3))
516 ((NoLowerCase, 4))
517 ((SmallCaps, 5))
518 SK_SEQ_END,
519 (value)SK_SEQ_END)
520 } bRangeOfCharacters;
521 } decorative;
522
523 struct Pictoral {
524 struct Kind {
525 SK_TYPED_ENUM(Value, SK_OT_BYTE,
526 ((Any, 0))
527 ((NoFit, 1))
528 ((Montages, 2))
529 ((Pictures, 3))
530 ((Shapes, 4))
531 ((Scientific, 5))
532 ((Music, 6))
533 ((Expert, 7))
534 ((Patterns, 8))
535 ((Boarders, 9))
536 ((Icons, 10))
537 ((Logos, 11))
538 ((IndustrySpecific, 12))
539 SK_SEQ_END,
540 (value)SK_SEQ_END)
541 } bKind;
542
543 struct Weight {
544 SK_TYPED_ENUM(Value, SK_OT_BYTE,
545 ((NoFit, 1))
546 SK_SEQ_END,
547 (value)SK_SEQ_END)
548 } bWeight;
549
550 struct Spacing {
551 SK_TYPED_ENUM(Value, SK_OT_BYTE,
552 ((Any, 0))
553 ((NoFit, 1))
554 ((ProportionalSpaced, 2))
555 ((Monospaced, 3))
556 SK_SEQ_END,
557 (value)SK_SEQ_END)
558 } bSpacing;
559
560 struct AspectRatioAndContrast {
561 SK_TYPED_ENUM(Value, SK_OT_BYTE,
562 ((NoFit, 1))
563 SK_SEQ_END,
564 (value)SK_SEQ_END)
565 } bAspectRatioAndContrast;
566
567 struct AspectRatio94 {
568 SK_TYPED_ENUM(Value, SK_OT_BYTE,
569 ((Any, 0))
570 ((NoFit, 1))
571 ((NoWidth, 2))
572 ((ExceptionallyWide, 3))
573 ((SuperWide, 4))
574 ((VeryWide, 5))
575 ((Wide, 6))
576 ((Normal, 7))
577 ((Narrow, 8))
578 ((VeryNarrow, 9))
579 SK_SEQ_END,
580 (value)SK_SEQ_END)
581 } bAspectRatio94;
582
583 struct AspectRatio119 {
584 SK_TYPED_ENUM(Value, SK_OT_BYTE,
585 ((Any, 0))
586 ((NoFit, 1))
587 ((NoWidth, 2))
588 ((ExceptionallyWide, 3))
589 ((SuperWide, 4))
590 ((VeryWide, 5))
591 ((Wide, 6))
592 ((Normal, 7))
593 ((Narrow, 8))
594 ((VeryNarrow, 9))
595 SK_SEQ_END,
596 (value)SK_SEQ_END)
597 } bAspectRatio119;
598
599 struct AspectRatio157 {
600 SK_TYPED_ENUM(Value, SK_OT_BYTE,
601 ((Any, 0))
602 ((NoFit, 1))
603 ((NoWidth, 2))
604 ((ExceptionallyWide, 3))
605 ((SuperWide, 4))
606 ((VeryWide, 5))
607 ((Wide, 6))
608 ((Normal, 7))
609 ((Narrow, 8))
610 ((VeryNarrow, 9))
611 SK_SEQ_END,
612 (value)SK_SEQ_END)
613 } bAspectRatio157;
614
615 struct AspectRatio163 {
616 SK_TYPED_ENUM(Value, SK_OT_BYTE,
617 ((Any, 0))
618 ((NoFit, 1))
619 ((NoWidth, 2))
620 ((ExceptionallyWide, 3))
621 ((SuperWide, 4))
622 ((VeryWide, 5))
623 ((Wide, 6))
624 ((Normal, 7))
625 ((Narrow, 8))
626 ((VeryNarrow, 9))
627 SK_SEQ_END,
628 (value)SK_SEQ_END)
629 } bAspectRatio163;
630 } pictoral;
631 } data;
632};
633
634#pragma pack(pop)
635
636
bungeman99fe8222015-08-20 07:57:51 -0700637static_assert(sizeof(SkPanose) == 10, "sizeof_SkPanose_not_10");
bungeman@google.comf8d1aee2012-02-02 19:15:21 +0000638
639#endif