X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fotf.h;h=3fb566abb3554fb65c6a856c0536293cf7f4ae11;hb=24b5b5d08fee98006e3d5658d1c71fa326042de2;hp=31ff7b5c19695112300fb605d3898e2235a5f18d;hpb=eea56792d95156f22b7b12450f80de700b4efe9c;p=m17n%2Flibotf.git diff --git a/src/otf.h b/src/otf.h index 31ff7b5..3fb566a 100644 --- a/src/otf.h +++ b/src/otf.h @@ -1,29 +1,39 @@ -/* otf.h -- Header file for the OTF (OpenType font) library. +/* otf.h -- Header file for libotf (OpenType font library). -Copyright (C) 2002 - by AIST (National Institute of Advanced Industrial Science and Technology) - Registration Number H14PRO??? +Copyright (C) 2003, 2004, 2005, 2006 + National Institute of Advanced Industrial Science and Technology (AIST) + Registration Number H15PRO167 -This file is part of the OTF library. +This file is part of libotf. -The OTF library is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2, or (at -your option) any later version. +Libotf is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. -The OTF library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. +Libotf is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. -You should have received a copy of the GNU General Public License -along with the OTF library; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +You should have received a copy of the GNU Lesser General Public +License along with this library, in a file named COPYING; if not, +write to the Free Software Foundation, Inc., 59 Temple Place, Suite +330, Boston, MA 02111-1307, USA. */ #ifndef _OTF_H_ #define _OTF_H_ +/* Version name of this library. */ +#define LIBOTF_VERSION "0.9.5" + +/* Major version number. */ +#define LIBOTF_MAJOR_VERSION 0 +/* Minor version number. */ +#define LIBOTF_MINOR_VERSION 9 +/* Release (i.e. patch level) number. */ +#define LIBOTF_RELEASE_NUMBER 5 + /*** Table of contents: @@ -40,24 +50,27 @@ Boston, MA 02111-1307, USA. */ (1-10) "GPOS" table (1-11) Structure for OTF - (2) APIs for reading OTF - (2-1) OTF_open() + (2) API for reading OTF + (2-1) OTF_open(), OTF_open_ft_face() (2-2) OTF_close() (2-3) OTF_get_table() + (2-4) OTF_check_table() - (3) APIs for driving OTF + (3) API for driving OTF (3-1) Structure for glyph string (3-2) OTF_drive_cmap() (3-3) OTF_drive_gdef() (3-4) OTF_drive_gsub() (3-5) OTF_drive_gpos() (3-6) OTF_drive_tables() + (3-7) OTF_get_unicode() + (3-8) OTF_drive_gsub_alternate() - (4) APIs for error handling + (4) API for error handling (4-1) Error codes (4-2) OTF_perror() - (5) APIs miscellaneous + (5) API miscellaneous */ @@ -100,6 +113,10 @@ typedef struct int nameID; int length; int offset; + + /* If nonzero, NAME is an ASCII string. */ + int ascii; + unsigned char *name; } OTF_NameRecord; #define OTF_max_nameID 23 @@ -131,9 +148,11 @@ typedef struct typedef struct { - unsigned subHeaderKeys[256]; + unsigned short subHeaderKeys[256]; + int subHeaderCount; OTF_cmapSubHeader *subHeaders; - unsigned *glyphIndexArray; + int glyphIndexCount; + OTF_GlyphID *glyphIndexArray; } OTF_EncodingSubtable2; typedef struct @@ -218,7 +237,11 @@ typedef struct unsigned version; unsigned numTables; OTF_EncodingRecord *EncodingRecord; - OTF_EncodingRecord *Unicode; + /* Mapping table: Unicode->GlyphID */ + unsigned short *unicode_table; + int max_glyph_id; + /* Mapping table: GlyphID->Unicode */ + unsigned short *decode_table; } OTF_cmap; @@ -441,11 +464,14 @@ enum OTF_LookupFlagBit OTF_RightToLeft = 0x0001, OTF_IgnoreBaseGlyphs = 0x0002, OTF_IgnoreLigatures = 0x0004, - OTF_IgnoreMarks = 0x8000, + OTF_IgnoreMarks = 0x0008, OTF_Reserved = 0x00F0, OTF_MarkAttachmentType = 0xFF00 }; - + +#define OTF_LookupFlagIgnoreMask \ + (OTF_IgnoreBaseGlyphs | OTF_IgnoreLigatures | OTF_IgnoreMarks) + typedef struct { OTF_Offset offset; @@ -695,7 +721,8 @@ typedef OTF_ChainContext3 OTF_GSUB_ChainContext3; typedef struct { unsigned ExtensionLookupType; - unsigned ExtentionOffset; + unsigned ExtensionOffset; + OTF_LookupSubTableGSUB *ExtensionSubtable; } OTF_GSUB_Extension1; typedef struct @@ -706,7 +733,7 @@ typedef struct OTF_Coverage *LookAhead; unsigned GlyphCount; OTF_GlyphID *Substitute; -} OTF_GSUB_ReverseChainSingle1; +} OTF_GSUB_ReverseChain1; struct OTF_LookupSubTableGSUB { @@ -733,7 +760,7 @@ struct OTF_LookupSubTableGSUB /* LookupType 7 */ OTF_GSUB_Extension1 extension1; /* LookupType 8 */ - OTF_GSUB_ReverseChainSingle1 reverse_chain_single1; + OTF_GSUB_ReverseChain1 reverse_chain1; } u; }; @@ -772,10 +799,10 @@ typedef struct int XCoordinate; int YCoordinate; union { - union { + struct { unsigned AnchorPoint; } f1; - union { + struct { OTF_DeviceTable XDeviceTable; OTF_DeviceTable YDeviceTable; } f2; @@ -798,7 +825,7 @@ typedef struct typedef struct { unsigned ValueFormat; - OTF_ValueRecord Value; + OTF_ValueRecord Value; } OTF_GPOS_Single1; typedef struct @@ -810,7 +837,24 @@ typedef struct typedef struct { - int dummy; + OTF_GlyphID SecondGlyph; + OTF_ValueRecord Value1; + OTF_ValueRecord Value2; +} OTF_PairValueRecord; + +typedef struct +{ + OTF_Offset offset; + unsigned PairValueCount; + OTF_PairValueRecord *PairValueRecord; +} OTF_PairSet; + +typedef struct +{ + unsigned ValueFormat1; + unsigned ValueFormat2; + unsigned PairSetCount; + OTF_PairSet *PairSet; } OTF_GPOS_Pair1; typedef struct @@ -837,7 +881,14 @@ typedef struct typedef struct { - int dummy; + OTF_Anchor EntryAnchor; + OTF_Anchor ExitAnchor; +} OTF_EntryExitRecord; + +typedef struct +{ + unsigned EntryExitCount; + OTF_EntryExitRecord *EntryExitRecord; } OTF_GPOS_Cursive1; typedef struct @@ -862,7 +913,29 @@ typedef struct typedef struct { - int dummy; + OTF_Anchor *LigatureAnchor; /* [] */ +} OTF_ComponentRecord; + +typedef struct +{ + OTF_Offset offset; + unsigned ComponentCount; + OTF_ComponentRecord *ComponentRecord; /* [] */ +} OTF_LigatureAttach; + +typedef struct +{ + OTF_Offset offset; + unsigned LigatureCount; + OTF_LigatureAttach *LigatureAttach; /* [] */ +} OTF_LigatureArray; + +typedef struct +{ + OTF_Coverage LigatureCoverage; + unsigned ClassCount; + OTF_MarkArray MarkArray; + OTF_LigatureArray LigatureArray; } OTF_GPOS_MarkLig1; typedef struct @@ -887,7 +960,9 @@ typedef OTF_ChainContext3 OTF_GPOS_ChainContext3; typedef struct { - int dummy; + unsigned ExtensionLookupType; + unsigned ExtensionOffset; + OTF_LookupSubTableGPOS *ExtensionSubtable; } OTF_GPOS_Extension1; @@ -959,13 +1034,13 @@ typedef struct OTF_GSUB *gsub; OTF_GPOS *gpos; /* The following tables are not yet supported. */ - // OTF_BASE *base; - // OTF_JSTF *jstf; + /* OTF_BASE *base; */ + /* OTF_JSTF *jstf; */ OTF_InternalData *internal_data; } OTF; -/*** (2) APIs for reading OTF */ +/*** (2) API for reading OTF */ /*** (2-1) otf_open () */ @@ -990,14 +1065,19 @@ typedef struct extern OTF *OTF_open (char *name); +#include +#include FT_FREETYPE_H + +extern OTF *OTF_open_ft_face (FT_Face face); + /*** (2-2) OTF_close () */ /*** Close OpenType font - The OTF_close() function closes the OpenType font pointed by $OTF - which must be what the OTF_open() returned. + The OTF_close() function closes the OpenType font $OTF which must + be what the OTF_open() function returned. See also OTF_open(). */ @@ -1009,8 +1089,8 @@ extern void OTF_close (OTF *otf); /*** Get OpenType font table - The OTF_get_table() function setups one of the OTF tables - specified by $NAME in the structure pointed by $OTF. + The OTF_get_table() function setups one of the OTF table specified + by $NAME in the OpenType font $OTF. $NAME must be one of "head", "name", "cmap", "GDEF", "GSUB", and "GPOS", and a member of the same name is setup. @@ -1022,8 +1102,68 @@ extern void OTF_close (OTF *otf); extern int OTF_get_table (OTF *otf, char *name); +/*** (2-4) OTF_check_table () */ + +/*** + Check the existence of OpenType font table -/*** (3) APIs for driving OTF */ + The OTF_check_table() function checks if the the OTF table + specified by $NAME exists in OpenType font $OTF. + + If the table exists, return 0, else return -1. + + See also OTF_open(). */ + +extern int OTF_check_table (OTF *otf, char *name); + +/*** (2-5) OTF_get_scripts () */ + +/*** + Get supported scripts. + + The OTF_get_scripts() function setups OTF_ScriptList of GSUB (if + $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the + OpenType font $OTF. + + If the table is successfully setup, return 0. Otherwise, retrun + -1, and set the variable OTF_error to OTF_ERROR_TABLE. */ + +extern int OTF_get_scripts (OTF *otf, int gsubp); + +/*** (2-6) OTF_get_features () */ + +/*** + Get supported features. + + The OTF_get_features() function setups OTF_FeatureList of GSUB (if + $GSUBP is nonzero) or GPOS (if $GSUBP is zero) table of the + OpenType font $OTF. + + If the table is successfully setup, return 0. Otherwise, retrun + -1, and set the variable OTF_error to OTF_ERROR_TABLE. */ + +extern int OTF_get_features (OTF *otf, int gsubp); + +/*** (2-7) OTF_check_features */ + +/*** + Check supported features. + + The OTF_check_features() function checks if or not the OpenType + font $OTF has, for $SCRIPT and $LANGUAGE, all features in the + array $FEATURES. The array size is $N_FEATURES. If $LANGUAGE is + zero or $OTF doesn't have LangSys for $SCRIPT, the default LangSys + is checked. + + If $OTF has all the features, return 1. Otherwise, return 0. If + an error occurs, return -1, and set the variable OTF_error to + OTF_ERROR_TABLE. */ + +extern int OTF_check_features (OTF *otf, int gsubp, + OTF_Tag script, OTF_Tag language, + OTF_Tag *features, int n_features); + +/*** (3) API for driving OTF */ /*** (3-1) Structure for glyph string */ @@ -1033,12 +1173,16 @@ extern int OTF_get_table (OTF *otf, char *name); typedef struct { - /* Character code of the glyph. This is the only member that a - client has to set before calling the function - OTF_drive_XXX(). */ + /** The first two members must be set by a clinet before calling the + function OTF_drive_XXX(). **/ + + /* Character code of the glyph. The value less than 32 is treated + as a place-holder in a glyph string, and OTF_drive_XXX () + function just ignore the glyph as if it doesn't exist. */ int c; - /* Glyph ID of the glyph. */ + /* Glyph ID of the glyph. If the value is 0, the library gets a + correct value from the above character code via cmap. */ OTF_GlyphID glyph_id; /* GlyphClass of the glyph. The value is extracted from the GDEF @@ -1047,7 +1191,7 @@ typedef struct /* MarkAttachClassDef of the glyph. The value is extracted from the GDEF table. */ - unsigned MarkAttachClass; + unsigned MarkAttachClass; /* Positioning format type of the glyph. The value specifies how the glyph positioning information is encoded in the member . @@ -1057,6 +1201,9 @@ typedef struct int positioning_type; union { struct { + int from, to; + } index; + struct { enum OTF_ValueFormat format; OTF_ValueRecord *value; } f1; @@ -1092,7 +1239,7 @@ typedef struct /* How many glyphs are allocated at the memory pointed by the member . */ int size; - /* How many glyphs contains valid information. */ + /* How many glyphs contain valid information. */ int used; /* Array of glyphs. It must be allocated by malloc(). The functions otf_drive_XXX() may reallocate it and increase the @@ -1104,14 +1251,27 @@ typedef struct /*** (3-2) OTF_drive_cmap() */ /*** - Process glyph string by cmap table. + Process glyph string by Unicode-based cmap table. - The OTF_drive_cmap() function looks up the cmap table of OpenType - font $OTF, and setup the member of all glhphs in the - glyph string $GSTRING. */ + The OTF_drive_cmap() function looks up a Unicode-based cmap table + of OpenType font $OTF, and setup the member of all + glhphs in the glyph string $GSTRING if the value of the member is + not zero. */ extern int OTF_drive_cmap (OTF *otf, OTF_GlyphString *gstring); +/*** + Process glyph string by a specific cmap table. + + The OTF_drive_cmap2() function looks up a cmap table (whose + Platform-ID is $PLATFORM_ID an Encoding-ID is $ENCODING_ID) of + OpenType font $OTF, and setup the member of all glhphs + in the glyph string $GSTRING if the value of the member is not + zero. */ + +extern int OTF_drive_cmap2 (OTF *otf, OTF_GlyphString *gstring, + int platform_id, int encoding_id); + /*** (3-3) OTF_drive_gdef() */ /*** @@ -1133,7 +1293,9 @@ extern int OTF_drive_gdef (OTF *otf, OTF_GlyphString *gstring); font $OTF, and by using features the font has for script $SCRIPT and language system $LANGSYS, update member of the glyph string $GSTRING. It may substitute, delete, insert glyphs in that - array. */ + array. $FEATURES is a list of features to apply. This doesn't + perform a lookup of type 3 (Alternate Substitution). For that, + use OTF_drive_gsub_alternate(). */ extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring, char *script, char *language, char *features); @@ -1147,7 +1309,7 @@ extern int OTF_drive_gsub (OTF *otf, OTF_GlyphString *gstring, OpenType font $OTF, and by using features the font has for script $SCRIPT and language system $LANGSYS, setup members and of all glhphs in the glyph string - $GSTRING. */ + $GSTRING. $FEATURES is a list of features to apply. */ extern int OTF_drive_gpos (OTF *otf, OTF_GlyphString *gstring, char *script, char *language, char *features); @@ -1166,7 +1328,27 @@ extern int OTF_drive_tables (OTF *otf, OTF_GlyphString *gstring, char *gsub_features, char *gpos_features); -/*** (4) APIs for error handling ***/ +/*** (3-7) OTF_get_unicode() */ + +/*** + Return Unicode code point corresponding to the glyph-id CODE. + */ + +extern int OTF_get_unicode (OTF *otf, OTF_GlyphID code); + +/*** (3-8) OTF_drive_gsub_alternate() */ + +/*** + Find alternate glyphs. + + This is like OTF_drive_gsub(), but perform only a lookup of type 3 + (Alternate Substituion). */ + +extern int OTF_drive_gsub_alternate (OTF *otf, OTF_GlyphString *gstring, + char *script, char *language, + char *features); + +/*** (4) API for error handling ***/ /*** (4-1) Error codes ***/ @@ -1221,6 +1403,13 @@ extern int OTF_error; See the function OTF_drive_gpos() for more detail. */ #define OTF_ERROR_GPOS_DRIVE 7 +/*** + FT_Face access error. + + This error indicates that the library fails in accessing Sfnt + tables via FT_Face. */ +#define OTF_ERROR_FT_FACE 8 + /*** (4-2) OTF_perror() */ @@ -1229,14 +1418,14 @@ extern int OTF_error; The OTF_perror() function produces a message on the standard error output, describing the last error encountered during a call to the - OTF library function. If $PREFIX is not NULL, is is printed + OTF library function. If $PREFIX is not NULL, it is printed first, followed by a colon and a blank. Then the message and a newline. */ extern void OTF_perror (char *prefix); -/*** (5) APIs miscellaneous ***/ +/*** (5) API miscellaneous ***/ /*** Return OTF tag of a specified name string.