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>
|
||||
|
||||
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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
|
@ -256,6 +365,8 @@
|
|||
else
|
||||
FT_Add_Default_Modules( *alibrary );
|
||||
|
||||
ft_set_default_properties( *alibrary );
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue