[sfnt] Implement support for `OS/2' table version 5.

See

  http://typedrawers.com/discussion/470/new-microsoft-size-specific-design-selection-mechanism

for the announcement.

* include/freetype/tttables.h (TT_OS2): Add fields
`usLowerPointSize' and `usUpperPointSize'.  Since FreeType returns
this structure only as a pointer through `FT_Get_Sfnt_Table', there
shouldn't be any ABI problems.

* src/sfnt/ttload.c (tt_face_load_os2): Implement it.

* docs/CHANGES: Updated.
This commit is contained in:
Werner Lemberg 2013-10-27 07:25:35 +01:00
parent 994a859831
commit ee5105107b
4 changed files with 58 additions and 7 deletions

View File

@ -1,3 +1,22 @@
2013-10-27 Werner Lemberg <wl@gnu.org>
[sfnt] Implement support for `OS/2' table version 5.
See
http://typedrawers.com/discussion/470/new-microsoft-size-specific-design-selection-mechanism
for the announcement.
* include/freetype/tttables.h (TT_OS2): Add fields
`usLowerPointSize' and `usUpperPointSize'. Since FreeType returns
this structure only as a pointer through `FT_Get_Sfnt_Table', there
shouldn't be any ABI problems.
* src/sfnt/ttload.c (tt_face_load_os2): Implement it.
* docs/CHANGES: Updated.
2013-10-24 Werner Lemberg <wl@gnu.org>
* README.git, docs/CHANGES, docs/INSTALL: Updated.

View File

@ -14,11 +14,14 @@ CHANGES BETWEEN 2.5 and 2.5.1
II. IMPORTANT CHANGES
- WOFF support has been added.
- WOFF font format support has been added.
- The auto-hinter now supports Hebrew. Greek and Cyrillic support
has been improved.
- Support for the forthcoming `OS/2' SFNT table version 5, as can
be found e.g. in the `Sitka' font family for Windows 8.1.
III. MISCELLANEOUS
@ -28,8 +31,12 @@ CHANGES BETWEEN 2.5 and 2.5.1
- `ftgrid' has been updated to toggle various engines with the `H'
key, similar to `ftview' and `ftdiff'.
- `ttdebug' now displays twilight data; key `t' shows the twilight
point table.
- Some keys in `ttdebug' have been reassigned from lowercase to
their uppercase equivalents; for example `q' to quit the program
is now `Q'.
- `ttdebug' now displays twilight and storage area data; key `T'
shows the twilight point table, key `S' the storage data.
- Better support of ARMv7 and x86_64 processors.

View File

@ -340,8 +340,8 @@ FT_BEGIN_HEADER
/* TT_OS2 */
/* */
/* <Description> */
/* A structure used to model a TrueType OS/2 table. This is the long */
/* table version. All fields comply to the TrueType specification. */
/* A structure used to model a TrueType OS/2 table. All fields */
/* comply to the OpenType specification. */
/* */
/* Note that we now support old Mac fonts that do not include an OS/2 */
/* table. In this case, the `version' field is always set to 0xFFFF. */
@ -396,6 +396,11 @@ FT_BEGIN_HEADER
FT_UShort usBreakChar;
FT_UShort usMaxContext;
/* only version 5 tables: */
FT_UShort usLowerPointSize;
FT_UShort usUpperPointSize;
} TT_OS2;

View File

@ -1003,7 +1003,8 @@
FT_FRAME_END
};
static const FT_Frame_Field os2_fields_extra[] =
/* `OS/2' version 1 and newer */
static const FT_Frame_Field os2_fields_extra1[] =
{
FT_FRAME_START( 8 ),
FT_FRAME_ULONG( ulCodePageRange1 ),
@ -1011,6 +1012,7 @@
FT_FRAME_END
};
/* `OS/2' version 2 and newer */
static const FT_Frame_Field os2_fields_extra2[] =
{
FT_FRAME_START( 10 ),
@ -1022,6 +1024,15 @@
FT_FRAME_END
};
/* `OS/2' version 5 and newer */
static const FT_Frame_Field os2_fields_extra5[] =
{
FT_FRAME_START( 4 ),
FT_FRAME_USHORT( usLowerPointSize ),
FT_FRAME_USHORT( usUpperPointSize ),
FT_FRAME_END
};
/* We now support old Mac fonts where the OS/2 table doesn't */
/* exist. Simply put, we set the `version' field to 0xFFFF */
@ -1042,11 +1053,13 @@
os2->usDefaultChar = 0;
os2->usBreakChar = 0;
os2->usMaxContext = 0;
os2->usLowerPointSize = 0;
os2->usUpperPointSize = 0;
if ( os2->version >= 0x0001 )
{
/* only version 1 tables */
if ( FT_STREAM_READ_FIELDS( os2_fields_extra, os2 ) )
if ( FT_STREAM_READ_FIELDS( os2_fields_extra1, os2 ) )
goto Exit;
if ( os2->version >= 0x0002 )
@ -1054,6 +1067,13 @@
/* only version 2 tables */
if ( FT_STREAM_READ_FIELDS( os2_fields_extra2, os2 ) )
goto Exit;
if ( os2->version >= 0x0005 )
{
/* only version 5 tables */
if ( FT_STREAM_READ_FIELDS( os2_fields_extra5, os2 ) )
goto Exit;
}
}
}