/**************************************************************************** * * 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 1996-2018 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 #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 */