X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fotf.h;h=3fb566abb3554fb65c6a856c0536293cf7f4ae11;hb=24b5b5d08fee98006e3d5658d1c71fa326042de2;hp=3dd6ed53c02fefa3c747ebaa9cfe6bfc4bc6e0f8;hpb=179cf424f0663b4760e94ed2c5bb5e5653fd587c;p=m17n%2Flibotf.git diff --git a/src/otf.h b/src/otf.h index 3dd6ed5..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: @@ -41,7 +51,7 @@ Boston, MA 02111-1307, USA. */ (1-11) Structure for OTF (2) API for reading OTF - (2-1) OTF_open() + (2-1) OTF_open(), OTF_open_ft_face() (2-2) OTF_close() (2-3) OTF_get_table() (2-4) OTF_check_table() @@ -53,6 +63,8 @@ Boston, MA 02111-1307, USA. */ (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) API for error handling (4-1) Error codes @@ -101,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 @@ -132,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 @@ -219,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; @@ -442,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; @@ -774,10 +799,10 @@ typedef struct int XCoordinate; int YCoordinate; union { - union { + struct { unsigned AnchorPoint; } f1; - union { + struct { OTF_DeviceTable XDeviceTable; OTF_DeviceTable YDeviceTable; } f2; @@ -812,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 @@ -839,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 @@ -864,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 @@ -889,7 +960,9 @@ typedef OTF_ChainContext3 OTF_GPOS_ChainContext3; typedef struct { - int dummy; + unsigned ExtensionLookupType; + unsigned ExtensionOffset; + OTF_LookupSubTableGPOS *ExtensionSubtable; } OTF_GPOS_Extension1; @@ -961,8 +1034,8 @@ 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; @@ -992,6 +1065,11 @@ 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 () */ @@ -1038,6 +1116,52 @@ extern int OTF_get_table (OTF *otf, char *name); 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 */ @@ -1049,12 +1173,16 @@ extern int OTF_check_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 @@ -1073,6 +1201,9 @@ typedef struct int positioning_type; union { struct { + int from, to; + } index; + struct { enum OTF_ValueFormat format; OTF_ValueRecord *value; } f1; @@ -1108,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 @@ -1120,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() */ /*** @@ -1149,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); @@ -1163,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); @@ -1182,6 +1328,26 @@ extern int OTF_drive_tables (OTF *otf, OTF_GlyphString *gstring, char *gsub_features, char *gpos_features); +/*** (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 ***/ @@ -1237,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() */ @@ -1245,7 +1418,7 @@ 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. */