tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:             */