forked from minhngoc25a/freetype2
Implement handling of `FREETYPE_PROPERTIES' environment variable.
Recognizing properties follows in another commit. * devel/ftoption.h, include/freetype/config/ftoption.h (FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES): New macro. * include/freetype/config/ftstdlib.h (ft_getenv): New macro. * src/base/ftinit.c (ft_set_default_properties): New function to parse `FREETYPE_PROPERTIES' and calling `ft_property_string_set'. (FT_Init_FreeType): Updated.
This commit is contained in:
parent
c3beb30a21
commit
84d3df7501
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2016-07-10 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
Implement handling of `FREETYPE_PROPERTIES' environment variable.
|
||||||
|
|
||||||
|
Recognizing properties follows in another commit.
|
||||||
|
|
||||||
|
* devel/ftoption.h, include/freetype/config/ftoption.h
|
||||||
|
(FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES): New macro.
|
||||||
|
|
||||||
|
* include/freetype/config/ftstdlib.h (ft_getenv): New macro.
|
||||||
|
|
||||||
|
* src/base/ftinit.c (ft_set_default_properties): New function to
|
||||||
|
parse `FREETYPE_PROPERTIES' and calling `ft_property_string_set'.
|
||||||
|
(FT_Init_FreeType): Updated.
|
||||||
|
|
||||||
2016-07-09 Werner Lemberg <wl@gnu.org>
|
2016-07-09 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
Add function `ft_property_string_set'.
|
Add function `ft_property_string_set'.
|
||||||
|
|
|
@ -75,6 +75,36 @@ FT_BEGIN_HEADER
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* If you enable this configuration option, FreeType recognizes an */
|
||||||
|
/* environment variable called `FREETYPE_PROPERTIES', which can be used */
|
||||||
|
/* to control the various font drivers and modules. The controllable */
|
||||||
|
/* properties are listed in the section `Controlling FreeType Modules' */
|
||||||
|
/* in the reference's table of contents; currently there are properties */
|
||||||
|
/* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), and */
|
||||||
|
/* TrueType (file `ftttdrv.h'). */
|
||||||
|
/* */
|
||||||
|
/* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
|
||||||
|
/* multiple lines for better readability). */
|
||||||
|
/* */
|
||||||
|
/* <optional whitespace> */
|
||||||
|
/* <module-name1> ':' */
|
||||||
|
/* <property-name1> '=' <property-value1> */
|
||||||
|
/* <whitespace> */
|
||||||
|
/* <module-name2> ':' */
|
||||||
|
/* <property-name2> '=' <property-value2> */
|
||||||
|
/* ... */
|
||||||
|
/* */
|
||||||
|
/* Example: */
|
||||||
|
/* */
|
||||||
|
/* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
|
||||||
|
/* cff:no-stem-darkening=1 \ */
|
||||||
|
/* autofitter:warping=1 */
|
||||||
|
/* */
|
||||||
|
#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* Uncomment the line below if you want to activate sub-pixel rendering */
|
/* Uncomment the line below if you want to activate sub-pixel rendering */
|
||||||
|
|
|
@ -75,6 +75,36 @@ FT_BEGIN_HEADER
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* If you enable this configuration option, FreeType recognizes an */
|
||||||
|
/* environment variable called `FREETYPE_PROPERTIES', which can be used */
|
||||||
|
/* to control the various font drivers and modules. The controllable */
|
||||||
|
/* properties are listed in the section `Controlling FreeType Modules' */
|
||||||
|
/* in the reference's table of contents; currently there are properties */
|
||||||
|
/* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), and */
|
||||||
|
/* TrueType (file `ftttdrv.h'). */
|
||||||
|
/* */
|
||||||
|
/* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
|
||||||
|
/* multiple lines for better readability). */
|
||||||
|
/* */
|
||||||
|
/* <optional whitespace> */
|
||||||
|
/* <module-name1> ':' */
|
||||||
|
/* <property-name1> '=' <property-value1> */
|
||||||
|
/* <whitespace> */
|
||||||
|
/* <module-name2> ':' */
|
||||||
|
/* <property-name2> '=' <property-value2> */
|
||||||
|
/* ... */
|
||||||
|
/* */
|
||||||
|
/* Example: */
|
||||||
|
/* */
|
||||||
|
/* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
|
||||||
|
/* cff:no-stem-darkening=1 \ */
|
||||||
|
/* autofitter:warping=1 */
|
||||||
|
/* */
|
||||||
|
#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* Uncomment the line below if you want to activate sub-pixel rendering */
|
/* Uncomment the line below if you want to activate sub-pixel rendering */
|
||||||
|
|
|
@ -142,7 +142,8 @@
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#define ft_atol atol
|
#define ft_atol atol
|
||||||
|
#define ft_getenv getenv
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
|
@ -226,6 +226,115 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
|
||||||
|
#define MAX_LENGTH 128
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set default properties derived from the `FREETYPE_PROPERTIES'
|
||||||
|
* environment variable.
|
||||||
|
*
|
||||||
|
* `FREETYPE_PROPERTIES' has the following syntax form (broken here into
|
||||||
|
* multiple lines for better readability)
|
||||||
|
*
|
||||||
|
* <optional whitespace>
|
||||||
|
* <module-name1> ':'
|
||||||
|
* <property-name1> '=' <property-value1>
|
||||||
|
* <whitespace>
|
||||||
|
* <module-name2> ':'
|
||||||
|
* <property-name2> '=' <property-value2>
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
|
||||||
|
* cff:no-stem-darkening=1 \
|
||||||
|
* autofitter:warping=1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
ft_set_default_properties( FT_Library library )
|
||||||
|
{
|
||||||
|
const char* env;
|
||||||
|
const char* p;
|
||||||
|
const char* q;
|
||||||
|
|
||||||
|
char module_name[MAX_LENGTH + 1];
|
||||||
|
char property_name[MAX_LENGTH + 1];
|
||||||
|
char property_value[MAX_LENGTH + 1];
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
env = ft_getenv( "FREETYPE_PROPERTIES" );
|
||||||
|
if ( !env )
|
||||||
|
return;
|
||||||
|
|
||||||
|
for ( p = env; *p; p++ )
|
||||||
|
{
|
||||||
|
/* skip leading whitespace and separators */
|
||||||
|
if ( *p == ' ' || *p == '\t' )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* read module name, followed by `:' */
|
||||||
|
q = p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == ':' )
|
||||||
|
break;
|
||||||
|
module_name[i] = *p++;
|
||||||
|
}
|
||||||
|
module_name[i] = '\0';
|
||||||
|
|
||||||
|
if ( !*p || *p != ':' || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* read property name, followed by `=' */
|
||||||
|
q = ++p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == '=' )
|
||||||
|
break;
|
||||||
|
property_name[i] = *p++;
|
||||||
|
}
|
||||||
|
property_name[i] = '\0';
|
||||||
|
|
||||||
|
if ( !*p || *p != '=' || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* read property value, followed by whitespace (if any) */
|
||||||
|
q = ++p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == ' ' || *p == '\t' )
|
||||||
|
break;
|
||||||
|
property_value[i] = *p++;
|
||||||
|
}
|
||||||
|
property_value[i] = '\0';
|
||||||
|
|
||||||
|
if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* we completely ignore errors */
|
||||||
|
ft_property_string_set( library,
|
||||||
|
module_name,
|
||||||
|
property_name,
|
||||||
|
property_value );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static void
|
||||||
|
ft_set_default_properties( FT_Library library )
|
||||||
|
{
|
||||||
|
FT_UNUSED( library );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* documentation is in freetype.h */
|
/* documentation is in freetype.h */
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
@ -256,6 +365,8 @@
|
||||||
else
|
else
|
||||||
FT_Add_Default_Modules( *alibrary );
|
FT_Add_Default_Modules( *alibrary );
|
||||||
|
|
||||||
|
ft_set_default_properties( *alibrary );
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue