Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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. /***************************************************************************/
  17.  
  18.  
  19. #ifndef __FTAUTOH_H__
  20. #define __FTAUTOH_H__
  21.  
  22. #include <ft2build.h>
  23. #include FT_FREETYPE_H
  24.  
  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
  30.  
  31.  
  32. FT_BEGIN_HEADER
  33.  
  34.  
  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.    */
  56.  
  57.  
  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.    */
  110.  
  111.  
  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
  235.  
  236.  
  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;
  252.  
  253.    } FT_Prop_GlyphToScriptMap;
  254.  
  255.  
  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 which 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 glyph will affect this face.
  291.    *
  292.    */
  293.  
  294.  
  295.   /**************************************************************************
  296.    *
  297.    * @property:
  298.    *   increase-x-height
  299.    *
  300.    * @description:
  301.    *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
  302.    *   up the font's x~height much more often than normally.  If the value
  303.    *   is set to~0, which is the default, this feature is switched off.  Use
  304.    *   this property to improve the legibility of small font sizes if
  305.    *   necessary.
  306.    *
  307.    *   {
  308.    *     FT_Library               library;
  309.    *     FT_Face                  face;
  310.    *     FT_Prop_IncreaseXHeight  prop;
  311.    *
  312.    *
  313.    *     FT_Init_FreeType( &library );
  314.    *     FT_New_Face( library, "foo.ttf", 0, &face );
  315.    *     FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
  316.    *
  317.    *     prop.face  = face;
  318.    *     prop.limit = 14;
  319.    *
  320.    *     FT_Property_Set( library, "autofitter",
  321.    *                               "increase-x-height", &prop );
  322.    *   }
  323.    *
  324.    * @note:
  325.    *   This property can be used with @FT_Property_Get also.
  326.    *
  327.    *   Set this value right after calling @FT_Set_Char_Size, but before
  328.    *   loading any glyph (using the auto-hinter).
  329.    *
  330.    */
  331.  
  332.  
  333.   /**************************************************************************
  334.    *
  335.    * @struct:
  336.    *   FT_Prop_IncreaseXHeight
  337.    *
  338.    * @description:
  339.    *   The data exchange structure for the @increase-x-height property.
  340.    *
  341.    */
  342.    typedef struct  FT_Prop_IncreaseXHeight_
  343.    {
  344.      FT_Face  face;
  345.      FT_UInt  limit;
  346.  
  347.    } FT_Prop_IncreaseXHeight;
  348.  
  349.  
  350.  /* */
  351.  
  352. FT_END_HEADER
  353.  
  354. #endif /* __FTAUTOH_H__ */
  355.  
  356.  
  357. /* END */
  358.