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 "SkOTTableTypes.h" 12 #include "SkTypedEnum.h" 13 14 #pragma pack(push, 1) 15 16 struct 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 637 SK_COMPILE_ASSERT(sizeof(SkPanose) == 10, sizeof_SkPanose_not_10); 638 639 #endif 640