ref: a3f4da8e999be4eb6172ab82dba4ff7796542456
parent: 3a317c69d6d55a25ecd819e3df1f72b1c4046c83
author: Werner Lemberg <[email protected]>
date: Tue Apr 29 09:23:47 EDT 2003
Minor cleanups.
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,30 +17,64 @@
2003-04-25: Graham Asher <[email protected]>
- Added the optional unpatented hinting system for TrueType. It
+ Added the optional unpatented hinting system for TrueType. It
allows typefaces which need hinting to produce correct glyph forms
(e.g., Chinese typefaces from Dynalab) to work acceptably without
- infringing Apple patents. This system is compiled only if
+ infringing Apple patents. This system is compiled only if
TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
ftoption.h.
- * include/freetype/ttunpat.h: added header file ttunpat.h defining
+ * include/freetype/ttunpat.h: New file. Defines
FT_PARAM_TAG_UNPATENTED_HINTING.
- * include/freetype/config/ftheader.h: Added macro FT_UNPATENTED_H
- to use when including new header ttunpat.h.
+ * include/freetype/config/ftheader.h (FT_TRUETYPE_UNPATENTED_H): New
+ macro to use when including ttunpat.h.
- * include/freetype/config/ftoption.h: Added configuration macros
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): New configuration macros
(not defined, but in comments) for the unpatented hinting system.
- * include/freetype/internal/tttypes.h: If unpatented hinting is
- compiled the TrueType face object acquires a new element,
- "FT_Bool unpatented_hinting".
+ * include/freetype/internal/tttypes.h (TT_FaceRec)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: New element "FT_Bool
+ unpatented_hinting".
- * src/truetype/ttinterp.c, ttobjs.c, ttobjs.h: Added the unpatented
- hinting system, which is compiled only if
- TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
- ftoption.h.
+ * src/truetype/ttinterp.c (NO_APPLE_PATENT, APPLE_THRESHOLD):
+ Removed.
+ (GUESS_VECTOR): New macro.
+ (TT_Run_Context) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Set `both_x_axis'.
+ (tt_default_graphics_state)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Updated.
+ (Current_Ratio) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Handle `unpatented_hinting'.
+ (Direct_Move) [NO_APPLE_PATENT]: Removed.
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
+ (Project, FreeProject)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
+ (Compute_Funcs) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Implement unpatented hinting.
+ (DO_SPVTCA, DO_SFVTCA, DO_SPVTL, DO_SFVTL, DO_SPVFS, DO_SFVFS,
+ Ins_SDPVTL): Call `GUESS_VECTOR'.
+ (DO_GPV, DO_GFV) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Handle `unpatented_hinting'.
+ (Compute_Point_Displacement) [NO_APPLE_PATENT]: Removed.
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
+ hinting.
+ (Move_Zp2_Point, Ins_SHPIX, Ins_DELTAP, Ins_DELTAC)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
+ hinting.
+ (TT_RunIns): Updated.
+
+ * src/truetype/ttobjs.c
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Include
+ FT_TRUETYPE_UNPATENTED_H.
+ (tt_face_init) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING]: Check
+ FT_PARAM_TAG_UNPATENTED_HINTING.
+
+ * src/truetype/ttobjs.h (TT_GraphicsState)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Add `both_x_axis'.
2003-04-25 Werner Lemberg <[email protected]>
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -392,7 +392,7 @@
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING to compile the */
- /* unpatented work-around hinting system. You must define this if you */
+ /* unpatented work-around hinting system. You must define this if you */
/* want either to force the use of the unpatented hinting system by also */
/* defining TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING, or if you want to */
/* select it at run time using the FT_PARAM_TAG_UNPATENTED_HINTING tag. */
@@ -405,7 +405,7 @@
/* Define TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING to restrict the */
/* TrueType bytecode interpreter to actions not protected by patents. */
/* This enables some fonts, for example mingliu.ttc from Dynalab, to */
- /* work properly. They use hinting to make large changes to the glyph */
+ /* work properly. They use hinting to make large changes to the glyph */
/* shape, without which the glyph is unrecognisable. */
/* For this to work you must also define */
/* TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING. */
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -1564,7 +1564,7 @@
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
/* Use unpatented hinting only. */
- FT_Bool unpatented_hinting;
+ FT_Bool unpatented_hinting;
#endif
/***********************************************************************/
--- a/include/freetype/ttunpat.h
+++ b/include/freetype/ttunpat.h
@@ -4,8 +4,10 @@
/* */
/* Definitions for the unpatented TrueType hinting system */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 2003 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* Written by Graham Asher <[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 */
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -225,11 +225,11 @@
#define FAILURE 1
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
-#define GUESS_VECTOR( V ) \
- if ( CUR.face->unpatented_hinting ) \
- { \
- CUR.GS.V.x = (FT_F2Dot14)(CUR.GS.both_x_axis ? 0x4000 : 0); \
- CUR.GS.V.y = (FT_F2Dot14)(CUR.GS.both_x_axis ? 0 : 0x4000); \
+#define GUESS_VECTOR( V ) \
+ if ( CUR.face->unpatented_hinting ) \
+ { \
+ CUR.GS.V.x = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0x4000 : 0 ); \
+ CUR.GS.V.y = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0 : 0x4000 ); \
}
#else
#define GUESS_VECTOR( V )
@@ -758,7 +758,7 @@
{ 0x4000, 0 },
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- TRUE,
+ TRUE,
#endif
1, 64, 1,
@@ -1371,7 +1371,7 @@
}
else
#endif
- {
+ {
if ( CUR.GS.projVector.y == 0 )
CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;
@@ -1382,12 +1382,15 @@
{
FT_Long x, y;
- x = TT_MULDIV( CUR.GS.projVector.x, CUR.tt_metrics.x_ratio, 0x4000 );
- y = TT_MULDIV( CUR.GS.projVector.y, CUR.tt_metrics.y_ratio, 0x4000 );
+
+ x = TT_MULDIV( CUR.GS.projVector.x,
+ CUR.tt_metrics.x_ratio, 0x4000 );
+ y = TT_MULDIV( CUR.GS.projVector.y,
+ CUR.tt_metrics.y_ratio, 0x4000 );
CUR.tt_metrics.ratio = TT_VecLen( x, y );
}
- }
- }
+ }
+ }
return CUR.tt_metrics.ratio;
}
@@ -1555,11 +1558,11 @@
FT_UShort point,
FT_F26Dot6 distance )
{
-
FT_F26Dot6 v;
+
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- FT_ASSERT(!CUR.face->unpatented_hinting);
+ FT_ASSERT( !CUR.face->unpatented_hinting );
#endif
v = CUR.GS.freeVector.x;
@@ -1585,7 +1588,6 @@
zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
-
}
@@ -2124,8 +2126,9 @@
FT_Vector* v2 )
{
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- FT_ASSERT(!CUR.face->unpatented_hinting);
+ FT_ASSERT( !CUR.face->unpatented_hinting );
#endif
+
return TT_DotFix14( v1->x - v2->x,
v1->y - v2->y,
CUR.GS.projVector.x,
@@ -2180,7 +2183,7 @@
FT_Vector* v2 )
{
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- FT_ASSERT(!CUR.face->unpatented_hinting);
+ FT_ASSERT( !CUR.face->unpatented_hinting );
#endif
return TT_DotFix14( v1->x - v2->x,
v1->y - v2->y,
@@ -2188,6 +2191,7 @@
CUR.GS.freeVector.y );
}
+
/*************************************************************************/
/* */
/* <Function> */
@@ -2254,16 +2258,17 @@
{
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
if ( CUR.face->unpatented_hinting )
- {
+ {
/* If both vectors point rightwards along the x axis, set */
- /* 'both-x-axis' true, otherwise set it false. The x values only */
- /* need be tested because the vector has been normalised to a unit */
- /* vector of length 0x4000 = unity. */
- CUR.GS.both_x_axis = (FT_Bool)(CUR.GS.projVector.x == 0x4000 && CUR.GS.freeVector.x == 0x4000);
+ /* `both-x-axis' true, otherwise set it false. The x values only */
+ /* need be tested because the vector has been normalised to a unit */
+ /* vector of length 0x4000 = unity. */
+ CUR.GS.both_x_axis = (FT_Bool)( CUR.GS.projVector.x == 0x4000 &&
+ CUR.GS.freeVector.x == 0x4000 );
- /* Throw away projection and freedom vector information */
- /* because the patents don't allow them to be stored. */
- /* The relevant US Patents are 5155805 and 5325479. */
+ /* Throw away projection and freedom vector information */
+ /* because the patents don't allow them to be stored. */
+ /* The relevant US Patents are 5155805 and 5325479. */
CUR.GS.projVector.x = 0;
CUR.GS.projVector.y = 0;
CUR.GS.freeVector.x = 0;
@@ -2271,15 +2276,15 @@
if ( CUR.GS.both_x_axis )
{
- CUR.func_project = Project_x;
- CUR.func_freeProj = Project_x;
- CUR.func_move = Direct_Move_X;
+ CUR.func_project = Project_x;
+ CUR.func_freeProj = Project_x;
+ CUR.func_move = Direct_Move_X;
}
- else
+ else
{
- CUR.func_project = Project_y;
- CUR.func_freeProj = Project_y;
- CUR.func_move = Direct_Move_Y;
+ CUR.func_project = Project_y;
+ CUR.func_freeProj = Project_y;
+ CUR.func_move = Direct_Move_Y;
}
if ( CUR.GS.dualVector.x == 0x4000 )
@@ -2287,7 +2292,7 @@
else
{
if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = Project_y;
+ CUR.func_dualproj = Project_y;
else
CUR.func_dualproj = Dual_Project;
}
@@ -2295,9 +2300,9 @@
/* Force recalculation of cached aspect ratio */
CUR.tt_metrics.ratio = 0;
- return;
- }
-#endif
+ return;
+ }
+#endif /* TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING */
if ( CUR.GS.freeVector.x == 0x4000 )
{
@@ -2656,39 +2661,39 @@
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
-#define DO_GPV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0;\
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000;\
- } \
- else \
- { \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y; \
+#define DO_GPV \
+ if ( CUR.face->unpatented_hinting ) \
+ { \
+ args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
+ args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
+ } \
+ else \
+ { \
+ args[0] = CUR.GS.projVector.x; \
+ args[1] = CUR.GS.projVector.y; \
}
#else
-#define DO_GPV \
- args[0] = CUR.GS.projVector.x; \
+#define DO_GPV \
+ args[0] = CUR.GS.projVector.x; \
args[1] = CUR.GS.projVector.y;
#endif
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
-#define DO_GFV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0;\
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000;\
- } \
- else \
- { \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y; \
+#define DO_GFV \
+ if ( CUR.face->unpatented_hinting ) \
+ { \
+ args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
+ args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
+ } \
+ else \
+ { \
+ args[0] = CUR.GS.freeVector.x; \
+ args[1] = CUR.GS.freeVector.y; \
}
#else
-#define DO_GFV \
- args[0] = CUR.GS.freeVector.x; \
+#define DO_GFV \
+ args[0] = CUR.GS.freeVector.x; \
args[1] = CUR.GS.freeVector.y;
#endif
@@ -5262,7 +5267,7 @@
FT_Bool touch )
{
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- if (CUR.face->unpatented_hinting)
+ if ( CUR.face->unpatented_hinting )
{
if ( CUR.GS.both_x_axis )
{
@@ -5466,16 +5471,16 @@
}
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting)
+ if ( CUR.face->unpatented_hinting )
{
if ( CUR.GS.both_x_axis )
{
dx = TT_MulFix14( args[0], 0x4000 );
- dy = 0;
+ dy = 0;
}
else
{
- dx = 0;
+ dx = 0;
dy = TT_MulFix14( args[0], 0x4000 );
}
}
@@ -6383,7 +6388,7 @@
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
/* Delta hinting is covered by US Patent 5159668. */
if ( CUR.face->unpatented_hinting )
- {
+ {
FT_Long n = args[0] * 2;
if ( CUR.args < n )
{
@@ -6391,7 +6396,7 @@
return;
}
- CUR.args -= n;
+ CUR.args -= n;
CUR.new_top = CUR.args;
return;
}
@@ -6471,11 +6476,14 @@
FT_ULong A, C;
FT_Long B;
+
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
/* Delta hinting is covered by US Patent 5159668. */
if ( CUR.face->unpatented_hinting )
- {
- FT_Long n = args[0] * 2;
+ {
+ FT_Long n = args[0] * 2;
+
+
if ( CUR.args < n )
{
CUR.error = TT_Err_Too_Few_Arguments;
@@ -6482,7 +6490,7 @@
return;
}
- CUR.args -= n;
+ CUR.args -= n;
CUR.new_top = CUR.args;
return;
}
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -204,46 +204,46 @@
goto Exit;
if ( face->root.face_flags & FT_FACE_FLAG_SCALABLE )
- {
+ {
#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( !face->root.internal->incremental_interface )
- error = tt_face_load_loca( face, stream );
- if ( !error )
- error = tt_face_load_cvt ( face, stream ) ||
- tt_face_load_fpgm ( face, stream );
+ if ( !face->root.internal->incremental_interface )
+ error = tt_face_load_loca( face, stream );
+ if ( !error )
+ error = tt_face_load_cvt( face, stream ) ||
+ tt_face_load_fpgm( face, stream );
#else
- if ( !error )
- error = tt_face_load_loca( face, stream ) ||
- tt_face_load_cvt ( face, stream ) ||
- tt_face_load_fpgm ( face, stream );
+ if ( !error )
+ error = tt_face_load_loca( face, stream ) ||
+ tt_face_load_cvt( face, stream ) ||
+ tt_face_load_fpgm( face, stream );
#endif
- }
+ }
#ifdef TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING
- /* Determine whether unpatented hinting is to be used for this face. */
+ /* Determine whether unpatented hinting is to be used for this face. */
#ifdef TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING
- face->unpatented_hinting = TRUE;
+ face->unpatented_hinting = TRUE;
#else
- face->unpatented_hinting = FALSE;
+ face->unpatented_hinting = FALSE;
{
- int i;
+ int i;
- for ( i = 0; i < num_params && !face->unpatented_hinting;
- i++ )
- if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING )
- face->unpatented_hinting = TRUE;
+
+ for ( i = 0; i < num_params && !face->unpatented_hinting; i++ )
+ if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING )
+ face->unpatented_hinting = TRUE;
}
-#endif
+#endif /* TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING */
-#endif
+#endif /* TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING */
/* initialize standard glyph loading routines */
TT_Init_Glyph_Loading( face );