Apply non-controversial parts of ot-style (#1464)

Things to be used in https://github.com/harfbuzz/harfbuzz/pull/1459
This commit is contained in:
Ebrahim Byagowi 2018-12-08 10:20:25 +03:30 committed by GitHub
parent 4d809696ef
commit 47cf9a9633
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 105 additions and 22 deletions

View File

@ -26,6 +26,7 @@
#define HB_AAT_FDSC_TABLE_HH
#include "hb-aat-layout-common.hh"
#include "hb-open-type.hh"
/*
* fdsc -- Font descriptors
@ -37,17 +38,36 @@
namespace AAT {
struct GXFontDescriptor
struct FontDescriptor
{
inline bool has_data () const { return tag; }
inline int cmp (hb_tag_t a) const { return tag.cmp (a); }
inline float get_value () const { return u.value.to_float (); }
enum non_alphabetic_value_t {
Alphabetic = 0,
Dingbats = 1,
PiCharacters = 2,
Fleurons = 3,
DecorativeBorders = 4,
InternationalSymbols= 5,
MathSymbols = 6
};
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
public:
protected:
Tag tag; /* The 4-byte table tag name. */
union {
Fixed value; /* The value for the descriptor tag. */
HBUINT32 nalfType; /* If the tag is `nalf`, see non_alphabetic_value_t */
} u;
public:
DEFINE_SIZE_STATIC (8);
};
@ -77,6 +97,9 @@ struct fdsc
* (default value: 0) */
};
inline const FontDescriptor &get_descriptor (hb_tag_t style) const
{ return descriptors.lsearch (style); }
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@ -87,7 +110,7 @@ struct fdsc
protected:
Fixed version; /* Version number of the font descriptors
* table (0x00010000 for the current version). */
LArrayOf<GXFontDescriptor>
LArrayOf<FontDescriptor>
descriptors; /* List of tagged-coordinate pairs style descriptors
* that will be included to characterize this font.
* Each descriptor consists of a <tag, value> pair.

View File

@ -28,6 +28,7 @@
#define HB_AAT_LAYOUT_COMMON_HH
#include "hb-aat-layout.hh"
#include "hb-open-type.hh"
namespace AAT {

View File

@ -54,6 +54,19 @@ struct head
return 16 <= upem && upem <= 16384 ? upem : 1000;
}
enum mac_style_flag_t {
BOLD = 1u<<0,
ITALIC = 1u<<1,
UNDERLINE = 1u<<2,
OUTLINE = 1u<<3,
SHADOW = 1u<<4,
CONDENSED = 1u<<5
};
inline bool is_bold (void) const { return macStyle & BOLD; }
inline bool is_italic (void) const { return macStyle & ITALIC; }
inline bool is_condensed (void) const { return macStyle & CONDENSED; }
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);

View File

@ -93,10 +93,56 @@ struct OS2
{
enum { tableTag = HB_OT_TAG_OS2 };
inline bool has_data () const { return this != &Null (OS2); }
inline const OS2V1Tail &v1 (void) const { return version >= 1 ? v1X : Null (OS2V1Tail); }
inline const OS2V2Tail &v2 (void) const { return version >= 2 ? v2X : Null (OS2V2Tail); }
inline const OS2V5Tail &v5 (void) const { return version >= 5 ? v5X : Null (OS2V5Tail); }
enum fs_selection_flag_t {
ITALIC = 1u<<0,
UNDERSCORE = 1u<<1,
NEGATIVE = 1u<<2,
OUTLINED = 1u<<3,
STRIKEOUT = 1u<<4,
BOLD = 1u<<5,
REGULAR = 1u<<6,
USE_TYPO_METRICS = 1u<<7,
WWS = 1u<<8,
OBLIQUE = 1u<<9
};
inline bool is_italic (void) const { return fsSelection & ITALIC; }
inline bool is_oblique (void) const { return fsSelection & OBLIQUE; }
enum us_width_class_t {
FWIDTH_ULTRA_CONDENSED = 1, /* 50% */
FWIDTH_EXTRA_CONDENSED = 2, /* 62.5% */
FWIDTH_CONDENSED = 3, /* 75% */
FWIDTH_SEMI_CONDENSED = 4, /* 87.5% */
FWIDTH_NORMAL = 5, /* 100% */
FWIDTH_SEMI_EXPANDED = 6, /* 112.5% */
FWIDTH_EXPANDED = 7, /* 125% */
FWIDTH_EXTRA_EXPANDED = 8, /* 150% */
FWIDTH_ULTRA_EXPANDED = 9 /* 200% */
};
inline float get_width () const
{
switch (usWidthClass) {
case FWIDTH_ULTRA_CONDENSED:return 50.f;
case FWIDTH_EXTRA_CONDENSED:return 62.5f;
case FWIDTH_CONDENSED: return 75.f;
case FWIDTH_SEMI_CONDENSED: return 87.5f;
default:
case FWIDTH_NORMAL: return 100.f;
case FWIDTH_SEMI_EXPANDED: return 112.5f;
case FWIDTH_EXPANDED: return 125.f;
case FWIDTH_EXTRA_EXPANDED: return 150.f;
case FWIDTH_ULTRA_EXPANDED: return 200.f;
}
}
inline bool subset (hb_subset_plan_t *plan) const
{
hb_blob_t *os2_blob = hb_sanitize_context_t ().reference_table<OS2> (plan->source);

View File

@ -57,25 +57,6 @@ enum
// Reserved = 0xFFFC /* Reserved for future use — set to zero. */
};
struct StatAxisRecord
{
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
}
protected:
Tag axisTag; /* A tag identifying the axis of design variation. */
NameID axisNameID; /* The name ID for entries in the 'name' table that
* provide a display string for this axis. */
HBUINT16 axisOrdering; /* A value that applications can use to determine
* primary sorting of face names, or for ordering
* of descriptors when composing family or face names. */
public:
DEFINE_SIZE_STATIC (8);
};
struct AxisValueFormat1
{
inline bool sanitize (hb_sanitize_context_t *c) const
@ -223,6 +204,25 @@ struct AxisValue
DEFINE_SIZE_UNION (2, format);
};
struct StatAxisRecord
{
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
}
protected:
Tag tag; /* A tag identifying the axis of design variation. */
NameID nameID; /* The name ID for entries in the 'name' table that
* provide a display string for this axis. */
HBUINT16 ordering; /* A value that applications can use to determine
* primary sorting of face names, or for ordering
* of descriptors when composing family or face names. */
public:
DEFINE_SIZE_STATIC (8);
};
struct STAT
{
enum { tableTag = HB_OT_TAG_STAT };