ref: 7723dc34d3fd0b1b437a1371c6ea589bdb49f047
parent: 7854c4a5215ec68db731cf1e4dcb9d9f91bfa6d9
author: Werner Lemberg <[email protected]>
date: Tue Jun 26 00:44:35 EDT 2007
Add autofit module for Indic scripts. This currently just reuses the CJK-specific functions. * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_INDIC): New macro. * devel/ftoption.h: Synchronize with include/freetype/config/ftoption.h. * src/autofit/afindic.c, src/autofit/afindic.h: New files. * src/autofit/afglobal.c, src/autofit/aftypes.h, src/autofit/autofit.c: Updated. * src/autofit/Jamfile (_sources), * src/autofit/rules.mk (AUTOF_DRV_SRC): Updated.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2007-06-26 Rahul Bhalerao <[email protected]>
+
+ Add autofit module for Indic scripts. This currently just reuses
+ the CJK-specific functions.
+
+ * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_INDIC): New
+ macro.
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+ * src/autofit/afindic.c, src/autofit/afindic.h: New files.
+
+ * src/autofit/afglobal.c, src/autofit/aftypes.h,
+ src/autofit/autofit.c: Updated.
+
+ * src/autofit/Jamfile (_sources), * src/autofit/rules.mk
+ (AUTOF_DRV_SRC): Updated.
+
2007-06-23 David Turner <[email protected]>
* src/truetype/ttgload.c (TT_Load_Simple): Fix change from
--- a/devel/ftoption.h
+++ b/devel/ftoption.h
@@ -302,7 +302,9 @@
/* The size in bytes of the render pool used by the scan-line converter */
/* to do all of its work. */
/* */
- /* This must be greater than 4KByte. */
+ /* This must be greater than 4KByte if you use FreeType to rasterize */
+ /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
+ /* allocation of the render pool. */
/* */
#define FT_RENDER_POOL_SIZE 16384L
@@ -461,13 +463,48 @@
/*************************************************************************/
/* */
- /* Define TT_CONFIG_OPTION_UNPATENTED_HINTING (in addition to */
- /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER) to compile the unpatented */
- /* work-around hinting system. Note that for the moment, the algorithm */
- /* is only used when selected at runtime through the parameter tag */
- /* FT_PARAM_TAG_UNPATENTED_HINTING; or when the debug hook */
- /* FT_DEBUG_HOOK_UNPATENTED_HINTING is globally activated. */
+ /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
+ /* of the TrueType bytecode interpreter is used that doesn't implement */
+ /* any of the patented opcodes and algorithms. Note that the */
+ /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
+ /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
+ /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
+ /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
/* */
+ /* This macro is only useful for a small number of font files (mostly */
+ /* for Asian scripts) that require bytecode interpretation to properly */
+ /* load glyphs. For all other fonts, this produces unpleasant results, */
+ /* thus the unpatented interpreter is never used to load glyphs from */
+ /* TrueType fonts unless one of the following two options is used. */
+ /* */
+ /* - The unpatented interpreter is explicitly activated by the user */
+ /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
+ /* when opening the FT_Face. */
+ /* */
+ /* - FreeType detects that the FT_Face corresponds to one of the */
+ /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
+ /* contains a hard-coded list of font names and other matching */
+ /* parameters (see function `tt_face_init' in file */
+ /* `src/truetype/ttobjs.c'). */
+ /* */
+ /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
+ /* */
+ /* { */
+ /* FT_Parameter parameter; */
+ /* FT_Open_Args open_args; */
+ /* */
+ /* */
+ /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
+ /* */
+ /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
+ /* open_args.pathname = my_font_pathname; */
+ /* open_args.num_params = 1; */
+ /* open_args.params = ¶meter; */
+ /* */
+ /* error = FT_Open_Face( library, &open_args, index, &face ); */
+ /* ... */
+ /* } */
+ /* */
/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
@@ -591,6 +628,12 @@
/* */
#define AF_CONFIG_OPTION_CJK
+
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with Indic script support. */
+ /* */
+#define AF_CONFIG_OPTION_INDIC
/* */
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -628,6 +628,11 @@
/* */
#define AF_CONFIG_OPTION_CJK
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with Indic script support. */
+ /* */
+#define AF_CONFIG_OPTION_INDIC
/* */
--- a/src/autofit/Jamfile
+++ b/src/autofit/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/autofit Jamfile
#
-# Copyright 2003, 2004, 2005, 2006 by
+# Copyright 2003, 2004, 2005, 2006, 2007 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -21,7 +21,7 @@
}
if $(FT2_MULTI)
{
- _sources = afangles afglobal afhints aflatin afloader afmodule afdummy afwarp ;
+ _sources = afangles afglobal afhints aflatin afcjk afindic afloader afmodule afdummy afwarp ;
if $(FT2_AUTOFIT2)
{
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -20,6 +20,8 @@
#include "afdummy.h"
#include "aflatin.h"
#include "afcjk.h"
+#include "afindic.h"
+
#include "aferrors.h"
#ifdef FT_OPTION_AUTOFIT2
@@ -35,7 +37,7 @@
#endif
&af_latin_script_class,
&af_cjk_script_class,
-
+ &af_indic_script_class,
NULL /* do not remove */
};
--- /dev/null
+++ b/src/autofit/afindic.c
@@ -1,0 +1,134 @@
+/***************************************************************************/
+/* */
+/* afindic.c */
+/* */
+/* Auto-fitter hinting routines for Indic scripts (body). */
+/* */
+/* Copyright 2007 by */
+/* Rahul Bhalerao <[email protected]>, <[email protected]>. */
+/* */
+/* 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. */
+/* */
+/***************************************************************************/
+
+
+#include "aftypes.h"
+#include "aflatin.h"
+
+
+#ifdef AF_CONFIG_OPTION_INDIC
+
+#include "afindic.h"
+#include "aferrors.h"
+#include "afcjk.h"
+
+
+#ifdef AF_USE_WARPER
+#include "afwarp.h"
+#endif
+
+
+ static FT_Error
+ af_indic_metrics_init( AF_LatinMetrics metrics,
+ FT_Face face )
+ {
+ /* use CJK routines */
+ return af_cjk_metrics_init( metrics, face );
+ }
+
+
+ static void
+ af_indic_metrics_scale( AF_LatinMetrics metrics,
+ AF_Scaler scaler )
+ {
+ /* use CJK routines */
+ af_cjk_metrics_scale( metrics, scaler );
+ }
+
+
+ static FT_Error
+ af_indic_hints_init( AF_GlyphHints hints,
+ AF_LatinMetrics metrics )
+ {
+ /* use CJK routines */
+ return af_cjk_hints_init( hints, metrics );
+ }
+
+
+ static FT_Error
+ af_indic_hints_apply( AF_GlyphHints hints,
+ FT_Outline* outline,
+ AF_LatinMetrics metrics)
+ {
+ /* use CJK routines */
+ return af_cjk_hints_apply( hints, outline, metrics );
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** I N D I C S C R I P T C L A S S *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ static const AF_Script_UniRangeRec af_indic_uniranges[] =
+ {
+#if 0
+ { 0x0100, 0xFFFF }, /* why this? */
+#endif
+ { 0x0900, 0x0DFF}, /* Indic Range */
+ { 0, 0 }
+ };
+
+
+ FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
+ af_indic_script_class =
+ {
+ AF_SCRIPT_INDIC,
+ af_indic_uniranges,
+
+ sizeof( AF_LatinMetricsRec ),
+
+ (AF_Script_InitMetricsFunc) af_indic_metrics_init,
+ (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
+ (AF_Script_DoneMetricsFunc) NULL,
+
+ (AF_Script_InitHintsFunc) af_indic_hints_init,
+ (AF_Script_ApplyHintsFunc) af_indic_hints_apply
+ };
+
+#else /* !AF_CONFIG_OPTION_INDIC */
+
+ static const AF_Script_UniRangeRec af_indic_uniranges[] =
+ {
+ { 0, 0 }
+ };
+
+
+ FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
+ af_indic_script_class =
+ {
+ AF_SCRIPT_INDIC,
+ af_indic_uniranges,
+
+ sizeof( AF_LatinMetricsRec ),
+
+ (AF_Script_InitMetricsFunc) NULL,
+ (AF_Script_ScaleMetricsFunc)NULL,
+ (AF_Script_DoneMetricsFunc) NULL,
+
+ (AF_Script_InitHintsFunc) NULL,
+ (AF_Script_ApplyHintsFunc) NULL
+ };
+
+#endif /* !AF_CONFIG_OPTION_INDIC */
+
+
+/* END */
--- /dev/null
+++ b/src/autofit/afindic.h
@@ -1,0 +1,41 @@
+/***************************************************************************/
+/* */
+/* afindic.h */
+/* */
+/* Auto-fitter hinting routines for Indic scripts (specification). */
+/* */
+/* Copyright 2007 by */
+/* Rahul Bhalerao <[email protected]>, <[email protected]>. */
+/* */
+/* 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 __AFINDIC_H__
+#define __AFINDIC_H__
+
+#include "afhints.h"
+
+
+FT_BEGIN_HEADER
+
+
+ /* the Indic-specific script class */
+
+ FT_CALLBACK_TABLE const AF_ScriptClassRec
+ af_indic_script_class;
+
+
+/* */
+
+FT_END_HEADER
+
+#endif /* __AFINDIC_H__ */
+
+
+/* END */
--- a/src/autofit/aftypes.h
+++ b/src/autofit/aftypes.h
@@ -265,9 +265,11 @@
AF_SCRIPT_NONE = 0,
AF_SCRIPT_LATIN = 1,
AF_SCRIPT_CJK = 2,
+ AF_SCRIPT_INDIC = 3,
#ifdef FT_OPTION_AUTOFIT2
AF_SCRIPT_LATIN2,
#endif
+
/* add new scripts here. Don't forget to update the list in */
/* `afglobal.c'. */
--- a/src/autofit/autofit.c
+++ b/src/autofit/autofit.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module (body). */
/* */
-/* Copyright 2003, 2004, 2005, 2006 by */
+/* Copyright 2003, 2004, 2005, 2006, 2007 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,6 +21,7 @@
#include "afangles.c"
#include "afglobal.c"
#include "afhints.c"
+
#include "afdummy.c"
#include "aflatin.c"
#ifdef FT_OPTION_AUTOFIT2
@@ -27,6 +28,8 @@
#include "aflatin2.c"
#endif
#include "afcjk.c"
+#include "afindic.c"
+
#include "afloader.c"
#include "afmodule.c"
--- a/src/autofit/rules.mk
+++ b/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003, 2004, 2005, 2006 by
+# Copyright 2003, 2004, 2005, 2006, 2007 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -26,11 +26,12 @@
# AUTOF driver sources (i.e., C files)
#
AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
+ $(AUTOF_DIR)/afcjk.c \
$(AUTOF_DIR)/afdummy.c \
$(AUTOF_DIR)/afglobal.c \
$(AUTOF_DIR)/afhints.c \
+ $(AUTOF_DIR)/afindic.c \
$(AUTOF_DIR)/aflatin.c \
- $(AUTOF_DIR)/afcjk.c \
$(AUTOF_DIR)/afloader.c \
$(AUTOF_DIR)/afmodule.c \
$(AUTOF_DIR)/afwarp.c