/**************************************************************************** * * afglobal.h * * Auto-fitter routines to compute global hinting values * (specification). * * Copyright (C) 2003-2019 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * */ #ifndef AFGLOBAL_H_ #define AFGLOBAL_H_ #include "aftypes.h" #include "afmodule.h" #include "afshaper.h" FT_BEGIN_HEADER FT_LOCAL_ARRAY( AF_WritingSystemClass ) af_writing_system_classes[]; #undef SCRIPT #define SCRIPT( s, S, d, h, H, ss ) \ AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class ) #include "afscript.h" FT_LOCAL_ARRAY( AF_ScriptClass ) af_script_classes[]; #undef STYLE #define STYLE( s, S, d, ws, sc, ss, c ) \ AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class ) #include "afstyles.h" FT_LOCAL_ARRAY( AF_StyleClass ) af_style_classes[]; #ifdef FT_DEBUG_LEVEL_TRACE FT_LOCAL_ARRAY( char* ) af_style_names[]; #endif /* * Default values and flags for both autofitter globals (found in * AF_ModuleRec) and face globals (in AF_FaceGlobalsRec). */ /* index of fallback style in `af_style_classes' */ #ifdef AF_CONFIG_OPTION_CJK #define AF_STYLE_FALLBACK AF_STYLE_HANI_DFLT #else #define AF_STYLE_FALLBACK AF_STYLE_NONE_DFLT #endif /* default script for OpenType; ignored if HarfBuzz isn't used */ #define AF_SCRIPT_DEFAULT AF_SCRIPT_LATN /* a bit mask for AF_DIGIT and AF_NONBASE */ #define AF_STYLE_MASK 0x3FFF /* an uncovered glyph */ #define AF_STYLE_UNASSIGNED AF_STYLE_MASK /* if this flag is set, we have an ASCII digit */ #define AF_DIGIT 0x8000U /* if this flag is set, we have a non-base character */ #define AF_NONBASE 0x4000U /* `increase-x-height' property */ #define AF_PROP_INCREASE_X_HEIGHT_MIN 6 #define AF_PROP_INCREASE_X_HEIGHT_MAX 0 /************************************************************************/ /************************************************************************/ /***** *****/ /***** F A C E G L O B A L S *****/ /***** *****/ /************************************************************************/ /************************************************************************/ /* * Note that glyph_styles[] maps each glyph to an index into the * `af_style_classes' array. * */ typedef struct AF_FaceGlobalsRec_ { FT_Face face; FT_Long glyph_count; /* same as face->num_glyphs */ FT_UShort* glyph_styles; #ifdef FT_CONFIG_OPTION_USE_HARFBUZZ hb_font_t* hb_font; hb_buffer_t* hb_buf; /* for feature comparison */ #endif /* per-face auto-hinter properties */ FT_UInt increase_x_height; AF_StyleMetrics metrics[AF_STYLE_MAX]; /* Compute darkening amount once per size. Use this to check whether */ /* darken_{x,y} needs to be recomputed. */ FT_UShort stem_darkening_for_ppem; /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_HORZ] */ /* to compute the darkening amount. */ FT_Pos standard_vertical_width; /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_VERT] */ /* to compute the darkening amount. */ FT_Pos standard_horizontal_width; /* The actual amount to darken a glyph along the X axis. */ FT_Pos darken_x; /* The actual amount to darken a glyph along the Y axis. */ FT_Pos darken_y; /* Amount to scale down by to keep emboldened points */ /* on the Y-axis in pre-computed blue zones. */ FT_Fixed scale_down_factor; AF_Module module; /* to access global properties */ } AF_FaceGlobalsRec; /* * model the global hints data for a given face, decomposed into * style-specific items */ FT_LOCAL( FT_Error ) af_face_globals_new( FT_Face face, AF_FaceGlobals *aglobals, AF_Module module ); FT_LOCAL( FT_Error ) af_face_globals_get_metrics( AF_FaceGlobals globals, FT_UInt gindex, FT_UInt options, AF_StyleMetrics *ametrics ); FT_LOCAL( void ) af_face_globals_free( AF_FaceGlobals globals ); FT_LOCAL_DEF( FT_Bool ) af_face_globals_is_digit( AF_FaceGlobals globals, FT_UInt gindex ); /* */ FT_END_HEADER #endif /* AFGLOBAL_H_ */ /* END */