274 lines
7.6 KiB
C
274 lines
7.6 KiB
C
|
/****************************************************************************
|
||
|
*
|
||
|
* ftsnames.h
|
||
|
*
|
||
|
* Simple interface to access SFNT 'name' tables (which are used
|
||
|
* to hold font names, copyright info, notices, etc.) (specification).
|
||
|
*
|
||
|
* This is _not_ used to retrieve glyph names!
|
||
|
*
|
||
|
* Copyright (C) 1996-2020 by
|
||
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||
|
*
|
||
|
* This file is part of the FreeType project, and may only be used,
|
||
|
* modified, and distributed under the terms of the FreeType project
|
||
|
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||
|
* this file you indicate that you have read the license and
|
||
|
* understand and accept it fully.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef FTSNAMES_H_
|
||
|
#define FTSNAMES_H_
|
||
|
|
||
|
|
||
|
#include <ft2build.h>
|
||
|
#include FT_FREETYPE_H
|
||
|
#include FT_PARAMETER_TAGS_H
|
||
|
|
||
|
#ifdef FREETYPE_H
|
||
|
#error "freetype.h of FreeType 1 has been loaded!"
|
||
|
#error "Please fix the directory search order for header files"
|
||
|
#error "so that freetype.h of FreeType 2 is found first."
|
||
|
#endif
|
||
|
|
||
|
|
||
|
FT_BEGIN_HEADER
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @section:
|
||
|
* sfnt_names
|
||
|
*
|
||
|
* @title:
|
||
|
* SFNT Names
|
||
|
*
|
||
|
* @abstract:
|
||
|
* Access the names embedded in TrueType and OpenType files.
|
||
|
*
|
||
|
* @description:
|
||
|
* The TrueType and OpenType specifications allow the inclusion of a
|
||
|
* special names table ('name') in font files. This table contains
|
||
|
* textual (and internationalized) information regarding the font, like
|
||
|
* family name, copyright, version, etc.
|
||
|
*
|
||
|
* The definitions below are used to access them if available.
|
||
|
*
|
||
|
* Note that this has nothing to do with glyph names!
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @struct:
|
||
|
* FT_SfntName
|
||
|
*
|
||
|
* @description:
|
||
|
* A structure used to model an SFNT 'name' table entry.
|
||
|
*
|
||
|
* @fields:
|
||
|
* platform_id ::
|
||
|
* The platform ID for `string`. See @TT_PLATFORM_XXX for possible
|
||
|
* values.
|
||
|
*
|
||
|
* encoding_id ::
|
||
|
* The encoding ID for `string`. See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,
|
||
|
* @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible
|
||
|
* values.
|
||
|
*
|
||
|
* language_id ::
|
||
|
* The language ID for `string`. See @TT_MAC_LANGID_XXX and
|
||
|
* @TT_MS_LANGID_XXX for possible values.
|
||
|
*
|
||
|
* Registered OpenType values for `language_id` are always smaller than
|
||
|
* 0x8000; values equal or larger than 0x8000 usually indicate a
|
||
|
* language tag string (introduced in OpenType version 1.6). Use
|
||
|
* function @FT_Get_Sfnt_LangTag with `language_id` as its argument to
|
||
|
* retrieve the associated language tag.
|
||
|
*
|
||
|
* name_id ::
|
||
|
* An identifier for `string`. See @TT_NAME_ID_XXX for possible
|
||
|
* values.
|
||
|
*
|
||
|
* string ::
|
||
|
* The 'name' string. Note that its format differs depending on the
|
||
|
* (platform,encoding) pair, being either a string of bytes (without a
|
||
|
* terminating `NULL` byte) or containing UTF-16BE entities.
|
||
|
*
|
||
|
* string_len ::
|
||
|
* The length of `string` in bytes.
|
||
|
*
|
||
|
* @note:
|
||
|
* Please refer to the TrueType or OpenType specification for more
|
||
|
* details.
|
||
|
*/
|
||
|
typedef struct FT_SfntName_
|
||
|
{
|
||
|
FT_UShort platform_id;
|
||
|
FT_UShort encoding_id;
|
||
|
FT_UShort language_id;
|
||
|
FT_UShort name_id;
|
||
|
|
||
|
FT_Byte* string; /* this string is *not* null-terminated! */
|
||
|
FT_UInt string_len; /* in bytes */
|
||
|
|
||
|
} FT_SfntName;
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @function:
|
||
|
* FT_Get_Sfnt_Name_Count
|
||
|
*
|
||
|
* @description:
|
||
|
* Retrieve the number of name strings in the SFNT 'name' table.
|
||
|
*
|
||
|
* @input:
|
||
|
* face ::
|
||
|
* A handle to the source face.
|
||
|
*
|
||
|
* @return:
|
||
|
* The number of strings in the 'name' table.
|
||
|
*
|
||
|
* @note:
|
||
|
* This function always returns an error if the config macro
|
||
|
* `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
|
||
|
*/
|
||
|
FT_EXPORT( FT_UInt )
|
||
|
FT_Get_Sfnt_Name_Count( FT_Face face );
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @function:
|
||
|
* FT_Get_Sfnt_Name
|
||
|
*
|
||
|
* @description:
|
||
|
* Retrieve a string of the SFNT 'name' table for a given index.
|
||
|
*
|
||
|
* @input:
|
||
|
* face ::
|
||
|
* A handle to the source face.
|
||
|
*
|
||
|
* idx ::
|
||
|
* The index of the 'name' string.
|
||
|
*
|
||
|
* @output:
|
||
|
* aname ::
|
||
|
* The indexed @FT_SfntName structure.
|
||
|
*
|
||
|
* @return:
|
||
|
* FreeType error code. 0~means success.
|
||
|
*
|
||
|
* @note:
|
||
|
* The `string` array returned in the `aname` structure is not
|
||
|
* null-terminated. Note that you don't have to deallocate `string` by
|
||
|
* yourself; FreeType takes care of it if you call @FT_Done_Face.
|
||
|
*
|
||
|
* Use @FT_Get_Sfnt_Name_Count to get the total number of available
|
||
|
* 'name' table entries, then do a loop until you get the right platform,
|
||
|
* encoding, and name ID.
|
||
|
*
|
||
|
* 'name' table format~1 entries can use language tags also, see
|
||
|
* @FT_Get_Sfnt_LangTag.
|
||
|
*
|
||
|
* This function always returns an error if the config macro
|
||
|
* `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
|
||
|
*/
|
||
|
FT_EXPORT( FT_Error )
|
||
|
FT_Get_Sfnt_Name( FT_Face face,
|
||
|
FT_UInt idx,
|
||
|
FT_SfntName *aname );
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @struct:
|
||
|
* FT_SfntLangTag
|
||
|
*
|
||
|
* @description:
|
||
|
* A structure to model a language tag entry from an SFNT 'name' table.
|
||
|
*
|
||
|
* @fields:
|
||
|
* string ::
|
||
|
* The language tag string, encoded in UTF-16BE (without trailing
|
||
|
* `NULL` bytes).
|
||
|
*
|
||
|
* string_len ::
|
||
|
* The length of `string` in **bytes**.
|
||
|
*
|
||
|
* @note:
|
||
|
* Please refer to the TrueType or OpenType specification for more
|
||
|
* details.
|
||
|
*
|
||
|
* @since:
|
||
|
* 2.8
|
||
|
*/
|
||
|
typedef struct FT_SfntLangTag_
|
||
|
{
|
||
|
FT_Byte* string; /* this string is *not* null-terminated! */
|
||
|
FT_UInt string_len; /* in bytes */
|
||
|
|
||
|
} FT_SfntLangTag;
|
||
|
|
||
|
|
||
|
/**************************************************************************
|
||
|
*
|
||
|
* @function:
|
||
|
* FT_Get_Sfnt_LangTag
|
||
|
*
|
||
|
* @description:
|
||
|
* Retrieve the language tag associated with a language ID of an SFNT
|
||
|
* 'name' table entry.
|
||
|
*
|
||
|
* @input:
|
||
|
* face ::
|
||
|
* A handle to the source face.
|
||
|
*
|
||
|
* langID ::
|
||
|
* The language ID, as returned by @FT_Get_Sfnt_Name. This is always a
|
||
|
* value larger than 0x8000.
|
||
|
*
|
||
|
* @output:
|
||
|
* alangTag ::
|
||
|
* The language tag associated with the 'name' table entry's language
|
||
|
* ID.
|
||
|
*
|
||
|
* @return:
|
||
|
* FreeType error code. 0~means success.
|
||
|
*
|
||
|
* @note:
|
||
|
* The `string` array returned in the `alangTag` structure is not
|
||
|
* null-terminated. Note that you don't have to deallocate `string` by
|
||
|
* yourself; FreeType takes care of it if you call @FT_Done_Face.
|
||
|
*
|
||
|
* Only 'name' table format~1 supports language tags. For format~0
|
||
|
* tables, this function always returns FT_Err_Invalid_Table. For
|
||
|
* invalid format~1 language ID values, FT_Err_Invalid_Argument is
|
||
|
* returned.
|
||
|
*
|
||
|
* This function always returns an error if the config macro
|
||
|
* `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
|
||
|
*
|
||
|
* @since:
|
||
|
* 2.8
|
||
|
*/
|
||
|
FT_EXPORT( FT_Error )
|
||
|
FT_Get_Sfnt_LangTag( FT_Face face,
|
||
|
FT_UInt langID,
|
||
|
FT_SfntLangTag *alangTag );
|
||
|
|
||
|
|
||
|
/* */
|
||
|
|
||
|
|
||
|
FT_END_HEADER
|
||
|
|
||
|
#endif /* FTSNAMES_H_ */
|
||
|
|
||
|
|
||
|
/* END */
|