ftwinfnt.h (7949B)
1 /**************************************************************************** 2 * 3 * ftwinfnt.h 4 * 5 * FreeType API for accessing Windows fnt-specific data. 6 * 7 * Copyright (C) 2003-2025 by 8 * David Turner, Robert Wilhelm, and Werner Lemberg. 9 * 10 * This file is part of the FreeType project, and may only be used, 11 * modified, and distributed under the terms of the FreeType project 12 * license, LICENSE.TXT. By continuing to use, modify, or distribute 13 * this file you indicate that you have read the license and 14 * understand and accept it fully. 15 * 16 */ 17 18 19 #ifndef FTWINFNT_H_ 20 #define FTWINFNT_H_ 21 22 #include <freetype/freetype.h> 23 24 #ifdef FREETYPE_H 25 #error "freetype.h of FreeType 1 has been loaded!" 26 #error "Please fix the directory search order for header files" 27 #error "so that freetype.h of FreeType 2 is found first." 28 #endif 29 30 31 FT_BEGIN_HEADER 32 33 34 /************************************************************************** 35 * 36 * @section: 37 * winfnt_fonts 38 * 39 * @title: 40 * Window FNT Files 41 * 42 * @abstract: 43 * Windows FNT-specific API. 44 * 45 * @description: 46 * This section contains the declaration of Windows FNT-specific 47 * functions. 48 * 49 */ 50 51 52 /************************************************************************** 53 * 54 * @enum: 55 * FT_WinFNT_ID_XXX 56 * 57 * @description: 58 * A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. 59 * Exact mapping tables for the various 'cpXXXX' encodings (except for 60 * 'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the 61 * `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory. 'cp1361' is roughly a 62 * superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`. 63 * 64 * @values: 65 * FT_WinFNT_ID_DEFAULT :: 66 * This is used for font enumeration and font creation as a 'don't 67 * care' value. Valid font files don't contain this value. When 68 * querying for information about the character set of the font that is 69 * currently selected into a specified device context, this return 70 * value (of the related Windows API) simply denotes failure. 71 * 72 * FT_WinFNT_ID_SYMBOL :: 73 * There is no known mapping table available. 74 * 75 * FT_WinFNT_ID_MAC :: 76 * Mac Roman encoding. 77 * 78 * FT_WinFNT_ID_OEM :: 79 * From Michael Poettgen <michael@poettgen.de>: 80 * 81 * The 'Windows Font Mapping' article says that `FT_WinFNT_ID_OEM` is 82 * used for the charset of vector fonts, like `modern.fon`, 83 * `roman.fon`, and `script.fon` on Windows. 84 * 85 * The 'CreateFont' documentation says: The `FT_WinFNT_ID_OEM` value 86 * specifies a character set that is operating-system dependent. 87 * 88 * The 'IFIMETRICS' documentation from the 'Windows Driver Development 89 * Kit' says: This font supports an OEM-specific character set. The 90 * OEM character set is system dependent. 91 * 92 * In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the 93 * second default codepage that most international versions of Windows 94 * have. It is one of the OEM codepages from 95 * 96 * https://learn.microsoft.com/windows/win32/intl/code-page-identifiers , 97 * 98 * and is used for the 'DOS boxes', to support legacy applications. A 99 * German Windows version for example usually uses ANSI codepage 1252 100 * and OEM codepage 850. 101 * 102 * FT_WinFNT_ID_CP874 :: 103 * A superset of Thai TIS 620 and ISO 8859-11. 104 * 105 * FT_WinFNT_ID_CP932 :: 106 * A superset of Japanese Shift-JIS (with minor deviations). 107 * 108 * FT_WinFNT_ID_CP936 :: 109 * A superset of simplified Chinese GB 2312-1980 (with different 110 * ordering and minor deviations). 111 * 112 * FT_WinFNT_ID_CP949 :: 113 * A superset of Korean Hangul KS~C 5601-1987 (with different ordering 114 * and minor deviations). 115 * 116 * FT_WinFNT_ID_CP950 :: 117 * A superset of traditional Chinese Big~5 ETen (with different 118 * ordering and minor deviations). 119 * 120 * FT_WinFNT_ID_CP1250 :: 121 * A superset of East European ISO 8859-2 (with slightly different 122 * ordering). 123 * 124 * FT_WinFNT_ID_CP1251 :: 125 * A superset of Russian ISO 8859-5 (with different ordering). 126 * 127 * FT_WinFNT_ID_CP1252 :: 128 * ANSI encoding. A superset of ISO 8859-1. 129 * 130 * FT_WinFNT_ID_CP1253 :: 131 * A superset of Greek ISO 8859-7 (with minor modifications). 132 * 133 * FT_WinFNT_ID_CP1254 :: 134 * A superset of Turkish ISO 8859-9. 135 * 136 * FT_WinFNT_ID_CP1255 :: 137 * A superset of Hebrew ISO 8859-8 (with some modifications). 138 * 139 * FT_WinFNT_ID_CP1256 :: 140 * A superset of Arabic ISO 8859-6 (with different ordering). 141 * 142 * FT_WinFNT_ID_CP1257 :: 143 * A superset of Baltic ISO 8859-13 (with some deviations). 144 * 145 * FT_WinFNT_ID_CP1258 :: 146 * For Vietnamese. This encoding doesn't cover all necessary 147 * characters. 148 * 149 * FT_WinFNT_ID_CP1361 :: 150 * Korean (Johab). 151 */ 152 153 #define FT_WinFNT_ID_CP1252 0 154 #define FT_WinFNT_ID_DEFAULT 1 155 #define FT_WinFNT_ID_SYMBOL 2 156 #define FT_WinFNT_ID_MAC 77 157 #define FT_WinFNT_ID_CP932 128 158 #define FT_WinFNT_ID_CP949 129 159 #define FT_WinFNT_ID_CP1361 130 160 #define FT_WinFNT_ID_CP936 134 161 #define FT_WinFNT_ID_CP950 136 162 #define FT_WinFNT_ID_CP1253 161 163 #define FT_WinFNT_ID_CP1254 162 164 #define FT_WinFNT_ID_CP1258 163 165 #define FT_WinFNT_ID_CP1255 177 166 #define FT_WinFNT_ID_CP1256 178 167 #define FT_WinFNT_ID_CP1257 186 168 #define FT_WinFNT_ID_CP1251 204 169 #define FT_WinFNT_ID_CP874 222 170 #define FT_WinFNT_ID_CP1250 238 171 #define FT_WinFNT_ID_OEM 255 172 173 174 /************************************************************************** 175 * 176 * @struct: 177 * FT_WinFNT_HeaderRec 178 * 179 * @description: 180 * Windows FNT Header info. 181 */ 182 typedef struct FT_WinFNT_HeaderRec_ 183 { 184 FT_UShort version; 185 FT_ULong file_size; 186 FT_Byte copyright[60]; 187 FT_UShort file_type; 188 FT_UShort nominal_point_size; 189 FT_UShort vertical_resolution; 190 FT_UShort horizontal_resolution; 191 FT_UShort ascent; 192 FT_UShort internal_leading; 193 FT_UShort external_leading; 194 FT_Byte italic; 195 FT_Byte underline; 196 FT_Byte strike_out; 197 FT_UShort weight; 198 FT_Byte charset; 199 FT_UShort pixel_width; 200 FT_UShort pixel_height; 201 FT_Byte pitch_and_family; 202 FT_UShort avg_width; 203 FT_UShort max_width; 204 FT_Byte first_char; 205 FT_Byte last_char; 206 FT_Byte default_char; 207 FT_Byte break_char; 208 FT_UShort bytes_per_row; 209 FT_ULong device_offset; 210 FT_ULong face_name_offset; 211 FT_ULong bits_pointer; 212 FT_ULong bits_offset; 213 FT_Byte reserved; 214 FT_ULong flags; 215 FT_UShort A_space; 216 FT_UShort B_space; 217 FT_UShort C_space; 218 FT_UShort color_table_offset; 219 FT_ULong reserved1[4]; 220 221 } FT_WinFNT_HeaderRec; 222 223 224 /************************************************************************** 225 * 226 * @struct: 227 * FT_WinFNT_Header 228 * 229 * @description: 230 * A handle to an @FT_WinFNT_HeaderRec structure. 231 */ 232 typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header; 233 234 235 /************************************************************************** 236 * 237 * @function: 238 * FT_Get_WinFNT_Header 239 * 240 * @description: 241 * Retrieve a Windows FNT font info header. 242 * 243 * @input: 244 * face :: 245 * A handle to the input face. 246 * 247 * @output: 248 * aheader :: 249 * The WinFNT header. 250 * 251 * @return: 252 * FreeType error code. 0~means success. 253 * 254 * @note: 255 * This function only works with Windows FNT faces, returning an error 256 * otherwise. 257 */ 258 FT_EXPORT( FT_Error ) 259 FT_Get_WinFNT_Header( FT_Face face, 260 FT_WinFNT_HeaderRec *aheader ); 261 262 /* */ 263 264 265 FT_END_HEADER 266 267 #endif /* FTWINFNT_H_ */ 268 269 270 /* END */ 271 272 273 /* Local Variables: */ 274 /* coding: utf-8 */ 275 /* End: */