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