(root)/
freetype-2.13.2/
include/
freetype/
ftwinfnt.h
       1  /****************************************************************************
       2   *
       3   * ftwinfnt.h
       4   *
       5   *   FreeType API for accessing Windows fnt-specific data.
       6   *
       7   * Copyright (C) 2003-2023 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://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
      97     *     ,
      98     *
      99     *     and is used for the 'DOS boxes', to support legacy applications.  A
     100     *     German Windows version for example usually uses ANSI codepage 1252
     101     *     and OEM codepage 850.
     102     *
     103     *   FT_WinFNT_ID_CP874 ::
     104     *     A superset of Thai TIS 620 and ISO 8859-11.
     105     *
     106     *   FT_WinFNT_ID_CP932 ::
     107     *     A superset of Japanese Shift-JIS (with minor deviations).
     108     *
     109     *   FT_WinFNT_ID_CP936 ::
     110     *     A superset of simplified Chinese GB 2312-1980 (with different
     111     *     ordering and minor deviations).
     112     *
     113     *   FT_WinFNT_ID_CP949 ::
     114     *     A superset of Korean Hangul KS~C 5601-1987 (with different ordering
     115     *     and minor deviations).
     116     *
     117     *   FT_WinFNT_ID_CP950 ::
     118     *     A superset of traditional Chinese Big~5 ETen (with different
     119     *     ordering and minor deviations).
     120     *
     121     *   FT_WinFNT_ID_CP1250 ::
     122     *     A superset of East European ISO 8859-2 (with slightly different
     123     *     ordering).
     124     *
     125     *   FT_WinFNT_ID_CP1251 ::
     126     *     A superset of Russian ISO 8859-5 (with different ordering).
     127     *
     128     *   FT_WinFNT_ID_CP1252 ::
     129     *     ANSI encoding.  A superset of ISO 8859-1.
     130     *
     131     *   FT_WinFNT_ID_CP1253 ::
     132     *     A superset of Greek ISO 8859-7 (with minor modifications).
     133     *
     134     *   FT_WinFNT_ID_CP1254 ::
     135     *     A superset of Turkish ISO 8859-9.
     136     *
     137     *   FT_WinFNT_ID_CP1255 ::
     138     *     A superset of Hebrew ISO 8859-8 (with some modifications).
     139     *
     140     *   FT_WinFNT_ID_CP1256 ::
     141     *     A superset of Arabic ISO 8859-6 (with different ordering).
     142     *
     143     *   FT_WinFNT_ID_CP1257 ::
     144     *     A superset of Baltic ISO 8859-13 (with some deviations).
     145     *
     146     *   FT_WinFNT_ID_CP1258 ::
     147     *     For Vietnamese.  This encoding doesn't cover all necessary
     148     *     characters.
     149     *
     150     *   FT_WinFNT_ID_CP1361 ::
     151     *     Korean (Johab).
     152     */
     153  
     154  #define FT_WinFNT_ID_CP1252    0
     155  #define FT_WinFNT_ID_DEFAULT   1
     156  #define FT_WinFNT_ID_SYMBOL    2
     157  #define FT_WinFNT_ID_MAC      77
     158  #define FT_WinFNT_ID_CP932   128
     159  #define FT_WinFNT_ID_CP949   129
     160  #define FT_WinFNT_ID_CP1361  130
     161  #define FT_WinFNT_ID_CP936   134
     162  #define FT_WinFNT_ID_CP950   136
     163  #define FT_WinFNT_ID_CP1253  161
     164  #define FT_WinFNT_ID_CP1254  162
     165  #define FT_WinFNT_ID_CP1258  163
     166  #define FT_WinFNT_ID_CP1255  177
     167  #define FT_WinFNT_ID_CP1256  178
     168  #define FT_WinFNT_ID_CP1257  186
     169  #define FT_WinFNT_ID_CP1251  204
     170  #define FT_WinFNT_ID_CP874   222
     171  #define FT_WinFNT_ID_CP1250  238
     172  #define FT_WinFNT_ID_OEM     255
     173  
     174  
     175    /**************************************************************************
     176     *
     177     * @struct:
     178     *   FT_WinFNT_HeaderRec
     179     *
     180     * @description:
     181     *   Windows FNT Header info.
     182     */
     183    typedef struct  FT_WinFNT_HeaderRec_
     184    {
     185      FT_UShort  version;
     186      FT_ULong   file_size;
     187      FT_Byte    copyright[60];
     188      FT_UShort  file_type;
     189      FT_UShort  nominal_point_size;
     190      FT_UShort  vertical_resolution;
     191      FT_UShort  horizontal_resolution;
     192      FT_UShort  ascent;
     193      FT_UShort  internal_leading;
     194      FT_UShort  external_leading;
     195      FT_Byte    italic;
     196      FT_Byte    underline;
     197      FT_Byte    strike_out;
     198      FT_UShort  weight;
     199      FT_Byte    charset;
     200      FT_UShort  pixel_width;
     201      FT_UShort  pixel_height;
     202      FT_Byte    pitch_and_family;
     203      FT_UShort  avg_width;
     204      FT_UShort  max_width;
     205      FT_Byte    first_char;
     206      FT_Byte    last_char;
     207      FT_Byte    default_char;
     208      FT_Byte    break_char;
     209      FT_UShort  bytes_per_row;
     210      FT_ULong   device_offset;
     211      FT_ULong   face_name_offset;
     212      FT_ULong   bits_pointer;
     213      FT_ULong   bits_offset;
     214      FT_Byte    reserved;
     215      FT_ULong   flags;
     216      FT_UShort  A_space;
     217      FT_UShort  B_space;
     218      FT_UShort  C_space;
     219      FT_UShort  color_table_offset;
     220      FT_ULong   reserved1[4];
     221  
     222    } FT_WinFNT_HeaderRec;
     223  
     224  
     225    /**************************************************************************
     226     *
     227     * @struct:
     228     *   FT_WinFNT_Header
     229     *
     230     * @description:
     231     *   A handle to an @FT_WinFNT_HeaderRec structure.
     232     */
     233    typedef struct FT_WinFNT_HeaderRec_*  FT_WinFNT_Header;
     234  
     235  
     236    /**************************************************************************
     237     *
     238     * @function:
     239     *    FT_Get_WinFNT_Header
     240     *
     241     * @description:
     242     *    Retrieve a Windows FNT font info header.
     243     *
     244     * @input:
     245     *    face ::
     246     *      A handle to the input face.
     247     *
     248     * @output:
     249     *    aheader ::
     250     *      The WinFNT header.
     251     *
     252     * @return:
     253     *   FreeType error code.  0~means success.
     254     *
     255     * @note:
     256     *   This function only works with Windows FNT faces, returning an error
     257     *   otherwise.
     258     */
     259    FT_EXPORT( FT_Error )
     260    FT_Get_WinFNT_Header( FT_Face               face,
     261                          FT_WinFNT_HeaderRec  *aheader );
     262  
     263    /* */
     264  
     265  
     266  FT_END_HEADER
     267  
     268  #endif /* FTWINFNT_H_ */
     269  
     270  
     271  /* END */
     272  
     273  
     274  /* Local Variables: */
     275  /* coding: utf-8    */
     276  /* End:             */