modules/freetype2/include/ftautoh.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /***************************************************************************/
     2 /*                                                                         */
     3 /*  ftautoh.h                                                              */
     4 /*                                                                         */
     5 /*    FreeType API for controlling the auto-hinter (specification only).   */
     6 /*                                                                         */
     7 /*  Copyright 2012, 2013 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 /***************************************************************************/
    19 #ifndef __FTAUTOH_H__
    20 #define __FTAUTOH_H__
    22 #include <ft2build.h>
    23 #include FT_FREETYPE_H
    25 #ifdef FREETYPE_H
    26 #error "freetype.h of FreeType 1 has been loaded!"
    27 #error "Please fix the directory search order for header files"
    28 #error "so that freetype.h of FreeType 2 is found first."
    29 #endif
    32 FT_BEGIN_HEADER
    35   /**************************************************************************
    36    *
    37    * @section:
    38    *   auto_hinter
    39    *
    40    * @title:
    41    *   The auto-hinter
    42    *
    43    * @abstract:
    44    *   Controlling the auto-hinting module.
    45    *
    46    * @description:
    47    *   While FreeType's auto-hinter doesn't expose API functions by itself,
    48    *   it is possible to control its behaviour with @FT_Property_Set and
    49    *   @FT_Property_Get.  The following lists the available properties
    50    *   together with the necessary macros and structures.
    51    *
    52    *   Note that the auto-hinter's module name is `autofitter' for
    53    *   historical reasons.
    54    *
    55    */
    58   /**************************************************************************
    59    *
    60    * @property:
    61    *   glyph-to-script-map
    62    *
    63    * @description:
    64    *   *Experimental* *only*
    65    *
    66    *   The auto-hinter provides various script modules to hint glyphs.
    67    *   Examples of supported scripts are Latin or CJK.  Before a glyph is
    68    *   auto-hinted, the Unicode character map of the font gets examined, and
    69    *   the script is then determined based on Unicode character ranges, see
    70    *   below.
    71    *
    72    *   OpenType fonts, however, often provide much more glyphs than
    73    *   character codes (small caps, superscripts, ligatures, swashes, etc.),
    74    *   to be controlled by so-called `features'.  Handling OpenType features
    75    *   can be quite complicated and thus needs a separate library on top of
    76    *   FreeType.
    77    *
    78    *   The mapping between glyph indices and scripts (in the auto-hinter
    79    *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
    80    *   array with `num_glyphs' elements, as found in the font's @FT_Face
    81    *   structure.  The `glyph-to-script-map' property returns a pointer to
    82    *   this array, which can be modified as needed.  Note that the
    83    *   modification should happen before the first glyph gets processed by
    84    *   the auto-hinter so that the global analysis of the font shapes
    85    *   actually uses the modified mapping.
    86    *
    87    *   The following example code demonstrates how to access it (omitting
    88    *   the error handling).
    89    *
    90    *   {
    91    *     FT_Library                library;
    92    *     FT_Face                   face;
    93    *     FT_Prop_GlyphToScriptMap  prop;
    94    *
    95    *
    96    *     FT_Init_FreeType( &library );
    97    *     FT_New_Face( library, "foo.ttf", 0, &face );
    98    *
    99    *     prop.face = face;
   100    *
   101    *     FT_Property_Get( library, "autofitter",
   102    *                               "glyph-to-script-map", &prop );
   103    *
   104    *     // adjust `prop.map' as needed right here
   105    *
   106    *     FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
   107    *   }
   108    *
   109    */
   112   /**************************************************************************
   113    *
   114    * @enum:
   115    *   FT_AUTOHINTER_SCRIPT_XXX
   116    *
   117    * @description:
   118    *   *Experimental* *only*
   119    *
   120    *   A list of constants used for the @glyph-to-script-map property to
   121    *   specify the script submodule the auto-hinter should use for hinting a
   122    *   particular glyph.
   123    *
   124    * @values:
   125    *   FT_AUTOHINTER_SCRIPT_NONE ::
   126    *     Don't auto-hint this glyph.
   127    *
   128    *   FT_AUTOHINTER_SCRIPT_LATIN ::
   129    *     Apply the latin auto-hinter.  For the auto-hinter, `latin' is a
   130    *     very broad term, including Cyrillic and Greek also since characters
   131    *     from those scripts share the same design constraints.
   132    *
   133    *     By default, characters from the following Unicode ranges are
   134    *     assigned to this submodule.
   135    *
   136    *     {
   137    *       U+0020 - U+007F  // Basic Latin (no control characters)
   138    *       U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)
   139    *       U+0100 - U+017F  // Latin Extended-A
   140    *       U+0180 - U+024F  // Latin Extended-B
   141    *       U+0250 - U+02AF  // IPA Extensions
   142    *       U+02B0 - U+02FF  // Spacing Modifier Letters
   143    *       U+0300 - U+036F  // Combining Diacritical Marks
   144    *       U+0370 - U+03FF  // Greek and Coptic
   145    *       U+0400 - U+04FF  // Cyrillic
   146    *       U+0500 - U+052F  // Cyrillic Supplement
   147    *       U+1D00 - U+1D7F  // Phonetic Extensions
   148    *       U+1D80 - U+1DBF  // Phonetic Extensions Supplement
   149    *       U+1DC0 - U+1DFF  // Combining Diacritical Marks Supplement
   150    *       U+1E00 - U+1EFF  // Latin Extended Additional
   151    *       U+1F00 - U+1FFF  // Greek Extended
   152    *       U+2000 - U+206F  // General Punctuation
   153    *       U+2070 - U+209F  // Superscripts and Subscripts
   154    *       U+20A0 - U+20CF  // Currency Symbols
   155    *       U+2150 - U+218F  // Number Forms
   156    *       U+2460 - U+24FF  // Enclosed Alphanumerics
   157    *       U+2C60 - U+2C7F  // Latin Extended-C
   158    *       U+2DE0 - U+2DFF  // Cyrillic Extended-A
   159    *       U+2E00 - U+2E7F  // Supplemental Punctuation
   160    *       U+A640 - U+A69F  // Cyrillic Extended-B
   161    *       U+A720 - U+A7FF  // Latin Extended-D
   162    *       U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)
   163    *      U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
   164    *      U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
   165    *     }
   166    *
   167    *   FT_AUTOHINTER_SCRIPT_CJK ::
   168    *     Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
   169    *     Vietnamese, and some other scripts.
   170    *
   171    *     By default, characters from the following Unicode ranges are
   172    *     assigned to this submodule.
   173    *
   174    *     {
   175    *       U+1100 - U+11FF  // Hangul Jamo
   176    *       U+2E80 - U+2EFF  // CJK Radicals Supplement
   177    *       U+2F00 - U+2FDF  // Kangxi Radicals
   178    *       U+2FF0 - U+2FFF  // Ideographic Description Characters
   179    *       U+3000 - U+303F  // CJK Symbols and Punctuation
   180    *       U+3040 - U+309F  // Hiragana
   181    *       U+30A0 - U+30FF  // Katakana
   182    *       U+3100 - U+312F  // Bopomofo
   183    *       U+3130 - U+318F  // Hangul Compatibility Jamo
   184    *       U+3190 - U+319F  // Kanbun
   185    *       U+31A0 - U+31BF  // Bopomofo Extended
   186    *       U+31C0 - U+31EF  // CJK Strokes
   187    *       U+31F0 - U+31FF  // Katakana Phonetic Extensions
   188    *       U+3200 - U+32FF  // Enclosed CJK Letters and Months
   189    *       U+3300 - U+33FF  // CJK Compatibility
   190    *       U+3400 - U+4DBF  // CJK Unified Ideographs Extension A
   191    *       U+4DC0 - U+4DFF  // Yijing Hexagram Symbols
   192    *       U+4E00 - U+9FFF  // CJK Unified Ideographs
   193    *       U+A960 - U+A97F  // Hangul Jamo Extended-A
   194    *       U+AC00 - U+D7AF  // Hangul Syllables
   195    *       U+D7B0 - U+D7FF  // Hangul Jamo Extended-B
   196    *       U+F900 - U+FAFF  // CJK Compatibility Ideographs
   197    *       U+FE10 - U+FE1F  // Vertical forms
   198    *       U+FE30 - U+FE4F  // CJK Compatibility Forms
   199    *       U+FF00 - U+FFEF  // Halfwidth and Fullwidth Forms
   200    *      U+1B000 - U+1B0FF // Kana Supplement
   201    *      U+1D300 - U+1D35F // Tai Xuan Hing Symbols
   202    *      U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
   203    *      U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
   204    *      U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
   205    *      U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
   206    *      U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
   207    *     }
   208    *
   209    *   FT_AUTOHINTER_SCRIPT_INDIC ::
   210    *     Apply the indic auto-hinter, covering all major scripts from the
   211    *     Indian sub-continent and some other related scripts like Thai, Lao,
   212    *     or Tibetan.
   213    *
   214    *     By default, characters from the following Unicode ranges are
   215    *     assigned to this submodule.
   216    *
   217    *     {
   218    *       U+0900 - U+0DFF  // Indic Range
   219    *       U+0F00 - U+0FFF  // Tibetan
   220    *       U+1900 - U+194F  // Limbu
   221    *       U+1B80 - U+1BBF  // Sundanese
   222    *       U+1C80 - U+1CDF  // Meetei Mayak
   223    *       U+A800 - U+A82F  // Syloti Nagri
   224    *      U+11800 - U+118DF // Sharada
   225    *     }
   226    *
   227    *     Note that currently Indic support is rudimentary only, missing blue
   228    *     zone support.
   229    *
   230    */
   231 #define FT_AUTOHINTER_SCRIPT_NONE   0
   232 #define FT_AUTOHINTER_SCRIPT_LATIN  1
   233 #define FT_AUTOHINTER_SCRIPT_CJK    2
   234 #define FT_AUTOHINTER_SCRIPT_INDIC  3
   237   /**************************************************************************
   238    *
   239    * @struct:
   240    *   FT_Prop_GlyphToScriptMap
   241    *
   242    * @description:
   243    *   *Experimental* *only*
   244    *
   245    *   The data exchange structure for the @glyph-to-script-map property.
   246    *
   247    */
   248    typedef struct  FT_Prop_GlyphToScriptMap_
   249    {
   250      FT_Face   face;
   251      FT_Byte*  map;
   253    } FT_Prop_GlyphToScriptMap;
   256   /**************************************************************************
   257    *
   258    * @property:
   259    *   fallback-script
   260    *
   261    * @description:
   262    *   *Experimental* *only*
   263    *
   264    *   If no auto-hinter script module can be assigned to a glyph, a
   265    *   fallback script gets assigned to it (see also the
   266    *   @glyph-to-script-map property).  By default, this is
   267    *   @FT_AUTOHINTER_SCRIPT_CJK.  Using the `fallback-script' property,
   268    *   this fallback value can be changed.
   269    *
   270    *   {
   271    *     FT_Library  library;
   272    *     FT_UInt     fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
   273    *
   274    *
   275    *     FT_Init_FreeType( &library );
   276    *
   277    *     FT_Property_Set( library, "autofitter",
   278    *                               "fallback-script", &fallback_script );
   279    *   }
   280    *
   281    * @note:
   282    *   This property can be used with @FT_Property_Get also.
   283    *
   284    *   It's important to use the right timing for changing this value: The
   285    *   creation of the glyph-to-script map that eventually uses the
   286    *   fallback script value gets triggered either by setting or reading a
   287    *   face-specific property like @glyph-to-script-map, or by auto-hinting
   288    *   any glyph from that face.  In particular, if you have already created
   289    *   an @FT_Face structure but not loaded any glyph (using the
   290    *   auto-hinter), a change of the fallback script will affect this face.
   291    *
   292    */
   295   /**************************************************************************
   296    *
   297    * @property:
   298    *   default-script
   299    *
   300    * @description:
   301    *   *Experimental* *only*
   302    *
   303    *   If Freetype gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
   304    *   the HarfBuzz library access OpenType features for getting better
   305    *   glyph coverages, this property sets the (auto-fitter) script to be
   306    *   used for the default (OpenType) script data of a font's GSUB table.
   307    *   Features for the default script are intended for all scripts not
   308    *   explicitly handled in GSUB; an example is a `dlig' feature,
   309    *   containing the combination of the characters `T', `E', and `L' to
   310    *   form a `TEL' ligature.
   311    *
   312    *   By default, this is @FT_AUTOHINTER_SCRIPT_LATIN.  Using the
   313    *   `default-script' property, this default value can be changed.
   314    *
   315    *   {
   316    *     FT_Library  library;
   317    *     FT_UInt     default_script = FT_AUTOHINTER_SCRIPT_NONE;
   318    *
   319    *
   320    *     FT_Init_FreeType( &library );
   321    *
   322    *     FT_Property_Set( library, "autofitter",
   323    *                               "default-script", &default_script );
   324    *   }
   325    *
   326    * @note:
   327    *   This property can be used with @FT_Property_Get also.
   328    *
   329    *   It's important to use the right timing for changing this value: The
   330    *   creation of the glyph-to-script map that eventually uses the
   331    *   default script value gets triggered either by setting or reading a
   332    *   face-specific property like @glyph-to-script-map, or by auto-hinting
   333    *   any glyph from that face.  In particular, if you have already created
   334    *   an @FT_Face structure but not loaded any glyph (using the
   335    *   auto-hinter), a change of the default script will affect this face.
   336    *
   337    */
   340   /**************************************************************************
   341    *
   342    * @property:
   343    *   increase-x-height
   344    *
   345    * @description:
   346    *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
   347    *   up the font's x~height much more often than normally.  If the value
   348    *   is set to~0, which is the default, this feature is switched off.  Use
   349    *   this property to improve the legibility of small font sizes if
   350    *   necessary.
   351    *
   352    *   {
   353    *     FT_Library               library;
   354    *     FT_Face                  face;
   355    *     FT_Prop_IncreaseXHeight  prop;
   356    *
   357    *
   358    *     FT_Init_FreeType( &library );
   359    *     FT_New_Face( library, "foo.ttf", 0, &face );
   360    *     FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
   361    *
   362    *     prop.face  = face;
   363    *     prop.limit = 14;
   364    *
   365    *     FT_Property_Set( library, "autofitter",
   366    *                               "increase-x-height", &prop );
   367    *   }
   368    *
   369    * @note:
   370    *   This property can be used with @FT_Property_Get also.
   371    *
   372    *   Set this value right after calling @FT_Set_Char_Size, but before
   373    *   loading any glyph (using the auto-hinter).
   374    *
   375    */
   378   /**************************************************************************
   379    *
   380    * @struct:
   381    *   FT_Prop_IncreaseXHeight
   382    *
   383    * @description:
   384    *   The data exchange structure for the @increase-x-height property.
   385    *
   386    */
   387    typedef struct  FT_Prop_IncreaseXHeight_
   388    {
   389      FT_Face  face;
   390      FT_UInt  limit;
   392    } FT_Prop_IncreaseXHeight;
   395  /* */
   397 FT_END_HEADER
   399 #endif /* __FTAUTOH_H__ */
   402 /* END */

mercurial