afindic.c revision 727dee178a392d20eb050d0c446f2fcc29058fa1
1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* afindic.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Auto-fitter hinting routines for Indic scripts (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Copyright 2007, 2011-2013 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */ 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#include "aftypes.h" 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "aflatin.h" 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef AF_CONFIG_OPTION_INDIC 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "afindic.h" 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "aferrors.h" 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "afcjk.h" 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef AF_CONFIG_OPTION_USE_WARPER 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "afwarp.h" 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 36aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_indic_metrics_init( AF_CJKMetrics metrics, 37aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_Face face ) 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 39aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* skip blue zone init in CJK routines */ 40aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_CharMap oldmap = face->charmap; 41aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 42aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 43aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner metrics->units_per_em = face->units_per_EM; 44aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 45aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) ) 46aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner face->charmap = NULL; 47aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner else 48aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 49727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease af_cjk_metrics_init_widths( metrics, face ); 50aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#if 0 51aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* either need indic specific blue_chars[] or just skip blue zones */ 52aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars ); 53aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif 54aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_cjk_metrics_check_digits( metrics, face ); 55aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 56aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 57aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_Set_Charmap( face, oldmap ); 58aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 59727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_Err_Ok; 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static void 64aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_indic_metrics_scale( AF_CJKMetrics metrics, 65aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_Scaler scaler ) 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use CJK routines */ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_cjk_metrics_scale( metrics, scaler ); 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 73aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_indic_hints_init( AF_GlyphHints hints, 74aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_CJKMetrics metrics ) 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use CJK routines */ 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return af_cjk_hints_init( hints, metrics ); 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 82aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner af_indic_hints_apply( AF_GlyphHints hints, 83aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_Outline* outline, 84aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_CJKMetrics metrics ) 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use CJK routines */ 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return af_cjk_hints_apply( hints, outline, metrics ); 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 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 /***** I N D I C S C R I P T C L A S S *****/ 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const AF_Script_UniRangeRec af_indic_uniranges[] = 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 103295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner AF_UNIRANGE_REC( 0x0100UL, 0xFFFFUL ), /* why this? */ 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 105295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL), /* Indic Range */ 106aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL), /* Tibetan */ 107aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0x1900UL, 0x194FUL), /* Limbu */ 108aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL), /* Sundanese */ 109aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL), /* Meetei Mayak */ 110aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL), /* Syloti Nagri */ 111aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL), /* Sharada */ 112295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner AF_UNIRANGE_REC( 0UL, 0UL) 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 11641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier AF_DEFINE_SCRIPT_CLASS( af_indic_script_class, 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_SCRIPT_INDIC, 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_indic_uniranges, 119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 'o', /* XXX */ 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 12141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sizeof ( AF_CJKMetricsRec ), 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_InitMetricsFunc) af_indic_metrics_init, 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale, 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_DoneMetricsFunc) NULL, 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_InitHintsFunc) af_indic_hints_init, 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_ApplyHintsFunc) af_indic_hints_apply 129295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else /* !AF_CONFIG_OPTION_INDIC */ 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const AF_Script_UniRangeRec af_indic_uniranges[] = 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 0, 0 } 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 13941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier AF_DEFINE_SCRIPT_CLASS( af_indic_script_class, 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project AF_SCRIPT_INDIC, 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project af_indic_uniranges, 142727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 0, 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 14441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sizeof ( AF_CJKMetricsRec ), 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_InitMetricsFunc) NULL, 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_ScaleMetricsFunc)NULL, 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_DoneMetricsFunc) NULL, 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_InitHintsFunc) NULL, 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (AF_Script_ApplyHintsFunc) NULL 152295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !AF_CONFIG_OPTION_INDIC */ 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 158