1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* aflatin.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Auto-fitter hinting routines for latin script (specification). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 2003-2007, 2009, 2011-2012 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#ifndef __AFLATIN_H__ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __AFLATIN_H__ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "afhints.h" 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the latin-specific script class */ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang AF_DECLARE_SCRIPT_CLASS( af_latin_script_class ) 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 33c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner /* constants are given with units_per_em == 2048 in mind */ 34c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#define AF_LATIN_CONSTANT( metrics, c ) \ 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 ) 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** L A T I N G L O B A L M E T R I C S *****/ 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * The following declarations could be embedded in the file `aflatin.c'; 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * they have been made semi-public to allow alternate script hinters to 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * re-use some of them. 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Latin (global) metrics management */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project enum 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_CAPITAL_TOP, 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_CAPITAL_BOTTOM, 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_SMALL_F_TOP, 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_SMALL_TOP, 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_SMALL_BOTTOM, 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_SMALL_MINOR, 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_MAX 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_IS_TOP_BLUE( b ) ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \ 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (b) == AF_LATIN_BLUE_SMALL_F_TOP || \ 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (b) == AF_LATIN_BLUE_SMALL_TOP ) 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_MAX_WIDTHS 16 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_MAX_BLUES AF_LATIN_BLUE_MAX 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project enum 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 79c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner AF_LATIN_BLUE_ACTIVE = 1 << 0, /* set if zone height is <= 3/4px */ 80c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner AF_LATIN_BLUE_TOP = 1 << 1, /* result of AF_LATIN_IS_TOP_BLUE */ 81c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner AF_LATIN_BLUE_ADJUSTMENT = 1 << 2, /* used for scale adjustment */ 82c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner /* optimization */ 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_BLUE_FLAG_MAX 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_LatinBlueRec_ 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_WidthRec ref; 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_WidthRec shoot; 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt flags; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_LatinBlueRec, *AF_LatinBlue; 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_LatinAxisRec_ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed scale; 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos delta; 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 101c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_UInt width_count; /* number of used widths */ 102c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]; /* widths array */ 103c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_Pos edge_distance_threshold; /* used for creating edges */ 104c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_Pos standard_width; /* the default stem thickness */ 105c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_Bool extra_light; /* is standard width very light? */ 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ignored for horizontal metrics */ 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt blue_count; 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LatinBlueRec blues[AF_LATIN_BLUE_MAX]; 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed org_scale; 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pos org_delta; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_LatinAxisRec, *AF_LatinAxis; 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct AF_LatinMetricsRec_ 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_ScriptMetricsRec root; 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt units_per_em; 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LatinAxisRec axis[AF_DIMENSION_MAX]; 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } AF_LatinMetricsRec, *AF_LatinMetrics; 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_metrics_init( AF_LatinMetrics metrics, 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face ); 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_metrics_scale( AF_LatinMetrics metrics, 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Scaler scaler ); 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_metrics_init_widths( AF_LatinMetrics metrics, 136a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Face face ); 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_LOCAL( void ) 139295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner af_latin_metrics_check_digits( AF_LatinMetrics metrics, 140295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Face face ); 141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** L A T I N G L Y P H A N A L Y S I S *****/ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project enum 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_HINTS_HORZ_SNAP = 1 << 0, /* enable stem width snapping */ 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_HINTS_VERT_SNAP = 1 << 1, /* enable stem height snapping */ 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* adjustment */ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_LATIN_HINTS_MONO = 1 << 3 /* indicate monochrome */ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* rendering */ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_HINTS_DO_HORZ_SNAP( h ) \ 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP ) 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_HINTS_DO_VERT_SNAP( h ) \ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP ) 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_HINTS_DO_STEM_ADJUST( h ) \ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST ) 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_LATIN_HINTS_DO_MONO( h ) \ 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO ) 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 176a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * The next functions shouldn't normally be exported. However, other 177a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * scripts might like to use these functions as-is. 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_hints_compute_segments( AF_GlyphHints hints, 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Dimension dim ); 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_hints_link_segments( AF_GlyphHints hints, 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Dimension dim ); 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_hints_compute_edges( AF_GlyphHints hints, 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Dimension dim ); 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_latin_hints_detect_features( AF_GlyphHints hints, 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_Dimension dim ); 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __AFLATIN_H__ */ 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 203