1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* afglobal.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Auto-fitter routines to compute global hinting values */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* (specification). */ 7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 89c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod/* Copyright 2003-2005, 2007, 2009, 2011-2014 by */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 20aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifndef __AFGLOBAL_H__ 21aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define __AFGLOBAL_H__ 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "aftypes.h" 25727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#include "afmodule.h" 269c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "hbshim.h" 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 32ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_ARRAY( AF_WritingSystemClass ) 33ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease af_writing_system_classes[]; 34ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 359c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 369c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef SCRIPT 379c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \ 389c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class ) 399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afscript.h" 419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 42ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_ARRAY( AF_ScriptClass ) 43ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease af_script_classes[]; 44ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 459c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 469c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef STYLE 479c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define STYLE( s, S, d, ws, sc, ss, c ) \ 489c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class ) 499c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 509c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afstyles.h" 519c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 529c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_LOCAL_ARRAY( AF_StyleClass ) 539c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod af_style_classes[]; 549c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 559c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 56ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef FT_DEBUG_LEVEL_TRACE 57ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_ARRAY( char* ) 589c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod af_style_names[]; 59ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif 60ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 619c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 62727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 63727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * Default values and flags for both autofitter globals (found in 64727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec). 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 66727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 679c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* index of fallback style in `af_style_classes' */ 68ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK 699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_FALLBACK AF_STYLE_HANI_DFLT 70ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else 719c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_FALLBACK AF_STYLE_NONE_DFLT 72ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif 739c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* default script for OpenType; ignored if HarfBuzz isn't used */ 749c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_SCRIPT_DEFAULT AF_SCRIPT_LATN 75727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* a bit mask indicating an uncovered glyph */ 769c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_UNASSIGNED 0x7F 77727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* if this flag is set, we have an ASCII digit */ 789c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DIGIT 0x80 79727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 80727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* `increase-x-height' property */ 81727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define AF_PROP_INCREASE_X_HEIGHT_MIN 6 82727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define AF_PROP_INCREASE_X_HEIGHT_MAX 0 83727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 84727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /************************************************************************/ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /************************************************************************/ 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** F A C E G L O B A L S *****/ 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /************************************************************************/ 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /************************************************************************/ 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * Note that glyph_styles[] maps each glyph to an index into the 969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * `af_style_classes' array. 97727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * 98727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 99727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease typedef struct AF_FaceGlobalsRec_ 100727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { 1019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Face face; 1029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Long glyph_count; /* same as face->num_glyphs */ 1039c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Byte* glyph_styles; 1049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod 1059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ 1069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod hb_font_t* hb_font; 1079c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#endif 108727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 109727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* per-face auto-hinter properties */ 1109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt increase_x_height; 111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 1129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_StyleMetrics metrics[AF_STYLE_MAX]; 113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 1149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_Module module; /* to access global properties */ 115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease } AF_FaceGlobalsRec; 117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * model the global hints data for a given face, decomposed into 1219c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * style-specific items 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_face_globals_new( FT_Face face, 126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease AF_FaceGlobals *aglobals, 127727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease AF_Module module ); 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 1309c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod af_face_globals_get_metrics( AF_FaceGlobals globals, 1319c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt gindex, 1329c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_UInt options, 1339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod AF_StyleMetrics *ametrics ); 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( void ) 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_face_globals_free( AF_FaceGlobals globals ); 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_LOCAL_DEF( FT_Bool ) 139295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner af_face_globals_is_digit( AF_FaceGlobals globals, 140295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_UInt gindex ); 141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 142aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich /* */ 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 147aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* __AFGLOBAL_H__ */ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 151