1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* aftypes.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Auto-fitter types (specification only). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki/* Copyright 2003-2015 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /************************************************************************* 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * The auto-fitter is a complete rewrite of the old auto-hinter. 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Its main feature is the ability to differentiate between different 239c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * writing systems and scripts in order to apply specific rules. 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * The code has also been compartmentized into several entities that 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * should make algorithmic experimentation easier than with the old 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * code. 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *************************************************************************/ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __AFTYPES_H__ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __AFTYPES_H__ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_FREETYPE_H 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_OUTLINE_H 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#include "afblue.h" 43ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** D E B U G G I N G *****/ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 55aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef FT_DEBUG_AUTOFIT 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 570a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#include FT_CONFIG_STANDARD_LIBRARY_H 580a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int _af_debug_disable_horz_hints; 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int _af_debug_disable_vert_hints; 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int _af_debug_disable_blue_hints; 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern void* _af_debug_hints; 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 64aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* FT_DEBUG_AUTOFIT */ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** U T I L I T Y S T U F F *****/ 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_WidthRec_ 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos org; /* original position/width in font units */ 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos cur; /* current/scaled position/width in device sub-pixels */ 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos fit; /* current/fitted position/width in device sub-pixels */ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_WidthRec, *AF_Width; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_sort_pos( FT_UInt count, 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos* table ); 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 89727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease af_sort_and_quantize_widths( FT_UInt* count, 90727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease AF_Width widths, 91727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Pos threshold ); 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** A N G L E T Y P E S *****/ 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * The auto-fitter doesn't need a very high angular accuracy; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * this allows us to speed up some computations considerably with a 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * light Cordic algorithm (see afangles.c). 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef FT_Int AF_Angle; 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI 256 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_2PI ( AF_ANGLE_PI * 2 ) 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI2 ( AF_ANGLE_PI / 2 ) 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI4 ( AF_ANGLE_PI / 4 ) 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * compute the angle of a given 2-D vector 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( AF_Angle ) 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_angle_atan( FT_Pos dx, 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos dy ); 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * compute `angle2 - angle1'; the result is always within 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1] 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( AF_Angle ) 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_angle_diff( AF_Angle angle1, 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Angle angle2 ); 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* 0 */ 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_DIFF( result, angle1, angle2 ) \ 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BEGIN_STMNT \ 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Angle _delta = (angle2) - (angle1); \ 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project \ 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project \ 141fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki while ( _delta <= -AF_ANGLE_PI ) \ 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project _delta += AF_ANGLE_2PI; \ 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project \ 144fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki while ( _delta > AF_ANGLE_PI ) \ 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project _delta -= AF_ANGLE_2PI; \ 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project \ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project result = _delta; \ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_END_STMNT 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* opaque handle to glyph-specific hints -- see `afhints.h' for more 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * details 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_GlyphHintsRec_* AF_GlyphHints; 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** S C A L E R S *****/ 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * A scaler models the target pixel device that will receive the 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * auto-hinted glyph image. 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 170fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki#define AF_SCALER_FLAG_NO_HORIZONTAL 1U /* disable horizontal hinting */ 171fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki#define AF_SCALER_FLAG_NO_VERTICAL 2U /* disable vertical hinting */ 172fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki#define AF_SCALER_FLAG_NO_ADVANCE 4U /* disable advance hinting */ 173fb6b5b10aaa74b8c8974714b41bac35bdd1c772dMakoto Onuki#define AF_SCALER_FLAG_NO_WARPER 8U /* disable warper */ 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_ScalerRec_ 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face; /* source font face */ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed x_scale; /* from font units to 1/64th device pixels */ 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed y_scale; /* from font units to 1/64th device pixels */ 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos x_delta; /* in 1/64th device pixels */ 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos y_delta; /* in 1/64th device pixels */ 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc. */ 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 flags; /* additional control flags, see above */ 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_ScalerRec, *AF_Scaler; 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_SCALER_EQUAL_SCALES( a, b ) \ 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( (a)->x_scale == (b)->x_scale && \ 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (a)->y_scale == (b)->y_scale && \ 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (a)->x_delta == (b)->x_delta && \ 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (a)->y_delta == (b)->y_delta ) 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 1969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef struct AF_StyleMetricsRec_* AF_StyleMetrics; 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This function parses an FT_Face to compute global metrics for 1999c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * a specific style. 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef FT_Error 2029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod (*AF_WritingSystem_InitMetricsFunc)( AF_StyleMetrics metrics, 2039c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Face face ); 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef void 2069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod (*AF_WritingSystem_ScaleMetricsFunc)( AF_StyleMetrics metrics, 2079c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Scaler scaler ); 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef void 2109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod (*AF_WritingSystem_DoneMetricsFunc)( AF_StyleMetrics metrics ); 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef FT_Error 2149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod (*AF_WritingSystem_InitHintsFunc)( AF_GlyphHints hints, 2159c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_StyleMetrics metrics ); 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef void 2189c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod (*AF_WritingSystem_ApplyHintsFunc)( AF_GlyphHints hints, 2199c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Outline* outline, 2209c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_StyleMetrics metrics ); 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 223ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 224ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 225ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 226ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** W R I T I N G S Y S T E M S *****/ 227ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 228ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 229ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 230ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 231ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* 2329c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * For the auto-hinter, a writing system consists of multiple scripts that 2339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * can be handled similarly *in a typographical way*; the relationship is 2349c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * not based on history. For example, both the Greek and the unrelated 235ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * Armenian scripts share the same features like ascender, descender, 236ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * x-height, etc. Essentially, a writing system is covered by a 237ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * submodule of the auto-fitter; it contains 238ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * 2399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * - a specific global analyzer that computes global metrics specific to 240ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * the script (based on script-specific characters to identify ascender 241ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * height, x-height, etc.), 242ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * 243ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * - a specific glyph analyzer that computes segments and edges for each 244ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * glyph covered by the script, 245ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * 246ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * - a specific grid-fitting algorithm that distorts the scaled glyph 247ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * outline according to the results of the glyph analyzer. 248ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease */ 249ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 250ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define __AFWRTSYS_H__ /* don't load header files */ 251ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#undef WRITING_SYSTEM 252ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define WRITING_SYSTEM( ws, WS ) \ 253ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_WRITING_SYSTEM_ ## WS, 254ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 255ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* The list of known writing systems. */ 256ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef enum AF_WritingSystem_ 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 259ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#include "afwrtsys.h" 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 261ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_WRITING_SYSTEM_MAX /* do not remove */ 262295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 263ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_WritingSystem; 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 265ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#undef __AFWRTSYS_H__ 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 267ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 268ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef struct AF_WritingSystemClassRec_ 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 270ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_WritingSystem writing_system; 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2729c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Offset style_metrics_size; 2739c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem_InitMetricsFunc style_metrics_init; 2749c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem_ScaleMetricsFunc style_metrics_scale; 2759c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem_DoneMetricsFunc style_metrics_done; 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2779c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem_InitHintsFunc style_hints_init; 2789c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem_ApplyHintsFunc style_hints_apply; 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 280ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_WritingSystemClassRec; 281ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 2829c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef const AF_WritingSystemClassRec* AF_WritingSystemClass; 2839c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 284ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 285ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 286ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 287ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 288ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** S C R I P T S *****/ 289ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 290ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 291ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 292ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 293ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* 2949c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * Each script is associated with a set of Unicode ranges that gets used 2959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * to test whether the font face supports the script. 296ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease * 2979c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * We use four-letter script tags from the OpenType specification, 2989c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * extended by `NONE', which indicates `no script'. 299ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease */ 300ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 301ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#undef SCRIPT 3029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ 303ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_SCRIPT_ ## S, 304ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 305ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* The list of known scripts. */ 306ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef enum AF_Script_ 307ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 308ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 309ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#include "afscript.h" 310ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 311ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_SCRIPT_MAX /* do not remove */ 312ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 313ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_Script; 314ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 315ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 316ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef struct AF_Script_UniRangeRec_ 317ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 318ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_UInt32 first; 319ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_UInt32 last; 320ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 321ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_Script_UniRangeRec; 322ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 323ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_UNIRANGE_REC( a, b ) { (FT_UInt32)(a), (FT_UInt32)(b) } 324ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 325ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef const AF_Script_UniRangeRec* AF_Script_UniRange; 326ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 327ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 328ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef struct AF_ScriptClassRec_ 329ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 3309c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Script script; 331ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 332ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */ 3339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3349c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt32 standard_char1; /* for default width and height */ 3359c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt32 standard_char2; /* ditto */ 3369c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt32 standard_char3; /* ditto */ 337ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_ScriptClassRec; 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 3409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef const AF_ScriptClassRec* AF_ScriptClass; 3419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3429c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3439c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 3449c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 3459c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 3469c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** C O V E R A G E S *****/ 3479c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 3489c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 3499c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 3509c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3519c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* 3529c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * Usually, a font contains more glyphs than can be addressed by its 3539c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * character map. 3549c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3559c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * In the PostScript font world, encoding vectors specific to a given 3569c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * task are used to select such glyphs, and these glyphs can be often 3579c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * recognized by having a suffix in its glyph names. For example, a 3589c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * superscript glyph `A' might be called `A.sup'. Unfortunately, this 3599c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * naming scheme is not standardized and thus unusable for us. 3609c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3619c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * In the OpenType world, a better solution was invented, namely 3629c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * `features', which cleanly separate a character's input encoding from 3639c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * the corresponding glyph's appearance, and which don't use glyph names 3649c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * at all. For our purposes, and slightly generalized, an OpenType 3659c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * feature is a name of a mapping that maps character codes to 3669c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * non-standard glyph indices (features get used for other things also). 3679c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * For example, the `sups' feature provides superscript glyphs, thus 3689c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * mapping character codes like `A' or `B' to superscript glyph 3699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * representation forms. How this mapping happens is completely 3709c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * uninteresting to us. 3719c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3729c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * For the auto-hinter, a `coverage' represents all glyphs of an OpenType 3739c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * feature collected in a set (as listed below) that can be hinted 3749c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * together. To continue the above example, superscript glyphs must not 3759c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * be hinted together with normal glyphs because the blue zones 3769c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * completely differ. 3779c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3789c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * Note that FreeType itself doesn't compute coverages; it only provides 3799c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * the glyphs addressable by the default Unicode character map. Instead, 3809c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * we use the HarfBuzz library (if available), which has many functions 3819c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * exactly for this purpose. 3829c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3839c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * AF_COVERAGE_DEFAULT is special: It should cover everything that isn't 3849c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * listed separately (including the glyphs addressable by the character 3859c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * map). In case HarfBuzz isn't available, it exactly covers the glyphs 3869c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * addressable by the character map. 3879c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * 3889c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod */ 3899c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3909c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef COVERAGE 3919c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define COVERAGE( name, NAME, description, \ 3929c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod tag1, tag2, tag3, tag4 ) \ 3939c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_COVERAGE_ ## NAME, 3949c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 3969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef enum AF_Coverage_ 3979c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { 3989c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afcover.h" 3999c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4009c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_COVERAGE_DEFAULT 4019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod } AF_Coverage; 4039c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4079c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 4089c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** S T Y L E S *****/ 4099c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 4109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4119c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4139c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* 4149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * The topmost structure for modelling the auto-hinter glyph input data 4159c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * is a `style class', grouping everything together. 4169c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod */ 4179c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4189c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef STYLE 4199c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define STYLE( s, S, d, ws, sc, ss, c ) \ 4209c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_STYLE_ ## S, 4219c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4229c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* The list of known styles. */ 4239c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef enum AF_Style_ 4249c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { 4259c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4269c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afstyles.h" 4279c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4289c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_STYLE_MAX /* do not remove */ 4299c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4309c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod } AF_Style; 4319c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4329c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef struct AF_StyleClassRec_ 4349c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { 4359c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Style style; 4369c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4379c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_WritingSystem writing_system; 4389c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Script script; 4399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Blue_Stringset blue_stringset; 4409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Coverage coverage; 4419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4429c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod } AF_StyleClassRec; 4439c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4449c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef const AF_StyleClassRec* AF_StyleClass; 4459c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4469c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4479c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4489c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4499c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 4509c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** S T Y L E M E T R I C S *****/ 4519c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /***** *****/ 4529c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4539c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /*************************************************************************/ 4549c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4559c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals; 4569c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4579c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* This is the main structure that combines everything. Autofit modules */ 4589c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* specific to writing systems derive their structures from it, for */ 4599c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* example `AF_LatinMetrics'. */ 4609c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4619c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod typedef struct AF_StyleMetricsRec_ 4629c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { 4639c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_StyleClass style_class; 4649c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_ScalerRec scaler; 4659c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Bool digits_have_same_width; 4669c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4679c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_FaceGlobals globals; /* to access properties */ 4689c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 4699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod } AF_StyleMetricsRec; 4709c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 471aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 472aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* Declare and define vtables for classes */ 473295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC 474295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 475ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \ 476ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_CALLBACK_TABLE const AF_WritingSystemClassRec \ 477ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease writing_system_class; 478ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 479ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DEFINE_WRITING_SYSTEM_CLASS( \ 480ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease writing_system_class, \ 481ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease system, \ 482ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_size, \ 483ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_init, \ 484ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_scale, \ 485ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_done, \ 486ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_init, \ 487ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_apply ) \ 488ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_CALLBACK_TABLE_DEF \ 489ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease const AF_WritingSystemClassRec writing_system_class = \ 490ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 491ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease system, \ 492ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 493ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_size, \ 494ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 495ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_init, \ 496ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_scale, \ 497ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_done, \ 498ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 499ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_init, \ 500ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_apply \ 501ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease }; 502ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 503ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 504aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define AF_DECLARE_SCRIPT_CLASS( script_class ) \ 505aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_CALLBACK_TABLE const AF_ScriptClassRec \ 506295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner script_class; 507295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 508ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DEFINE_SCRIPT_CLASS( \ 509ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease script_class, \ 5109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod script, \ 511ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ranges, \ 5129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char1, \ 5139c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char2, \ 5149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char3 ) \ 515ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_CALLBACK_TABLE_DEF \ 516ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease const AF_ScriptClassRec script_class = \ 517ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 5189c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod script, \ 519ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ranges, \ 5209c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char1, \ 5219c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char2, \ 5229c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char3 \ 5239c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod }; 5249c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 5259c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 5269c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DECLARE_STYLE_CLASS( style_class ) \ 5279c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_CALLBACK_TABLE const AF_StyleClassRec \ 5289c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style_class; 5299c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 5309c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DEFINE_STYLE_CLASS( \ 5319c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style_class, \ 5329c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style, \ 5339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod writing_system, \ 5349c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod script, \ 5359c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod blue_stringset, \ 5369c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod coverage ) \ 5379c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_CALLBACK_TABLE_DEF \ 5389c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod const AF_StyleClassRec style_class = \ 5399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { \ 5409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style, \ 5419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod writing_system, \ 5429c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod script, \ 5439c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod blue_stringset, \ 5449c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod coverage \ 545295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner }; 546295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 547aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#else /* FT_CONFIG_OPTION_PIC */ 548aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 549ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class ) \ 550ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL( void ) \ 551ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ); 552ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 553ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DEFINE_WRITING_SYSTEM_CLASS( \ 554ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease writing_system_class, \ 555ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease system, \ 556ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_size, \ 557ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_init, \ 558ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_scale, \ 559ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease m_done, \ 560ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_init, \ 561ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease h_apply ) \ 562ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_DEF( void ) \ 563ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ) \ 564ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 5659c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->writing_system = system; \ 566ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 5679c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_metrics_size = m_size; \ 568ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 5699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_metrics_init = m_init; \ 5709c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_metrics_scale = m_scale; \ 5719c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_metrics_done = m_done; \ 572ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 5739c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_hints_init = h_init; \ 5749c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style_hints_apply = h_apply; \ 575ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } 576ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 577ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 578727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define AF_DECLARE_SCRIPT_CLASS( script_class ) \ 579727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_LOCAL( void ) \ 580727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ); 581aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 582ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_DEFINE_SCRIPT_CLASS( \ 583ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease script_class, \ 584ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease script_, \ 585ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ranges, \ 5869c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char1, \ 5879c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char2, \ 5889c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod std_char3 ) \ 589ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_DEF( void ) \ 590ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ) \ 591ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 592ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ac->script = script_; \ 593ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ac->script_uni_ranges = ranges; \ 5949c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->standard_char1 = std_char1; \ 5959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->standard_char2 = std_char2; \ 5969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->standard_char3 = std_char3; \ 5979c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod } 5989c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 5999c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 6009c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DECLARE_STYLE_CLASS( style_class ) \ 6019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_LOCAL( void ) \ 6029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ); 6039c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 6049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DEFINE_STYLE_CLASS( \ 6059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style_class, \ 6069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod style_, \ 6079c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod writing_system_, \ 6089c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod script_, \ 6099c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod blue_stringset_, \ 6109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod coverage_ ) \ 6119c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_LOCAL_DEF( void ) \ 6129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Init_Class_ ## style_class( AF_StyleClassRec* ac ) \ 6139c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod { \ 6149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->style = style_; \ 6159c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->writing_system = writing_system_; \ 6169c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->script = script_; \ 6179c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->blue_stringset = blue_stringset_; \ 6189c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod ac->coverage = coverage_; \ 619295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 620aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 621aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */ 622295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 623049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 624049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 625049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 626049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 627049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 628049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __AFTYPES_H__ */ 629049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 630049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 631049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 632