freetype: 2.7.1 -> 2.9
This commit is contained in:
parent
a536aee981
commit
3a28cc1dcd
@ -1,27 +0,0 @@
|
|||||||
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=f958c48ee43
|
|
||||||
|
|
||||||
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
|
|
||||||
index af7b465..7dd4513 100644
|
|
||||||
--- a/src/psaux/t1decode.c
|
|
||||||
+++ b/src/psaux/t1decode.c
|
|
||||||
@@ -780,10 +780,19 @@
|
|
||||||
/* point without adding any point to the outline */
|
|
||||||
idx = decoder->num_flex_vectors++;
|
|
||||||
if ( idx > 0 && idx < 7 )
|
|
||||||
+ {
|
|
||||||
+ /* in malformed fonts it is possible to have other */
|
|
||||||
+ /* opcodes in the middle of a flex (which don't */
|
|
||||||
+ /* increase `num_flex_vectors'); we thus have to */
|
|
||||||
+ /* check whether we can add a point */
|
|
||||||
+ if ( FT_SET_ERROR( t1_builder_check_points( builder, 1 ) ) )
|
|
||||||
+ goto Syntax_Error;
|
|
||||||
+
|
|
||||||
t1_builder_add_point( builder,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
(FT_Byte)( idx == 3 || idx == 6 ) );
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=3774fc08b
|
|
||||||
|
|
||||||
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
|
|
||||||
index d18e821..0baf836 100644
|
|
||||||
--- a/src/psaux/psobjs.c
|
|
||||||
+++ b/src/psaux/psobjs.c
|
|
||||||
@@ -1718,6 +1718,14 @@
|
|
||||||
first = outline->n_contours <= 1
|
|
||||||
? 0 : outline->contours[outline->n_contours - 2] + 1;
|
|
||||||
|
|
||||||
+ /* in malformed fonts it can happen that a contour was started */
|
|
||||||
+ /* but no points were added */
|
|
||||||
+ if ( outline->n_contours && first == outline->n_points )
|
|
||||||
+ {
|
|
||||||
+ outline->n_contours--;
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* We must not include the last point in the path if it */
|
|
||||||
/* is located on the first point. */
|
|
||||||
if ( outline->n_points > 1 )
|
|
||||||
|
|
@ -11,10 +11,10 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
inherit (stdenv.lib) optional optionals optionalString;
|
inherit (stdenv.lib) optional optionals optionalString;
|
||||||
version = "2.7.1"; name = "freetype-" + version;
|
|
||||||
|
|
||||||
in stdenv.mkDerivation {
|
in stdenv.mkDerivation rec {
|
||||||
inherit name;
|
name = "freetype-${version}";
|
||||||
|
version = "2.9";
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
description = "A font rendering engine";
|
description = "A font rendering engine";
|
||||||
@ -33,7 +33,7 @@ in stdenv.mkDerivation {
|
|||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "mirror://savannah/freetype/${name}.tar.bz2";
|
url = "mirror://savannah/freetype/${name}.tar.bz2";
|
||||||
sha256 = "121gm15ayfg3rglby8ifh8384mcjb9dhmx9j40zl7yszw72b4frs";
|
sha256 = "12jcdz1in20yaa55izxalg3hm1pf7nydfrzps5bzb4zgihybmzz6";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = [ zlib bzip2 libpng ]; # needed when linking against freetype
|
propagatedBuildInputs = [ zlib bzip2 libpng ]; # needed when linking against freetype
|
||||||
@ -43,14 +43,7 @@ in stdenv.mkDerivation {
|
|||||||
++ optional (!stdenv.isLinux) gnumake;
|
++ optional (!stdenv.isLinux) gnumake;
|
||||||
|
|
||||||
patches =
|
patches =
|
||||||
[
|
[ ./enable-table-validation.patch
|
||||||
./pcf-introduce-driver.patch
|
|
||||||
./pcf-config-long-family-names.patch
|
|
||||||
./disable-pcf-long-family-names.patch
|
|
||||||
./enable-table-validation.patch
|
|
||||||
# remove the two CVE patches after updating to >= 2.8
|
|
||||||
./cve-2017-8105.patch
|
|
||||||
./cve-2017-8287.patch
|
|
||||||
] ++
|
] ++
|
||||||
optional useEncumberedCode ./enable-subpixel-rendering.patch;
|
optional useEncumberedCode ./enable-subpixel-rendering.patch;
|
||||||
|
|
||||||
|
@ -1,553 +0,0 @@
|
|||||||
diff --git a/devel/ftoption.h b/devel/ftoption.h
|
|
||||||
index 3b63931..b8b0a8d 100644
|
|
||||||
--- a/devel/ftoption.h
|
|
||||||
+++ b/devel/ftoption.h
|
|
||||||
@@ -82,8 +82,8 @@ FT_BEGIN_HEADER
|
|
||||||
/* 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'). */
|
|
||||||
+ /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
|
|
||||||
+ /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
|
|
||||||
/* */
|
|
||||||
/* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
|
|
||||||
/* multiple lines for better readability). */
|
|
||||||
@@ -835,6 +835,33 @@ FT_BEGIN_HEADER
|
|
||||||
/*************************************************************************/
|
|
||||||
/*************************************************************************/
|
|
||||||
/**** ****/
|
|
||||||
+ /**** P C F D R I V E R C O N F I G U R A T I O N ****/
|
|
||||||
+ /**** ****/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /* */
|
|
||||||
+ /* There are many PCF fonts just called `Fixed' which look completely */
|
|
||||||
+ /* different, and which have nothing to do with each other. When */
|
|
||||||
+ /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
|
|
||||||
+ /* random, the style changes often if one changes the size and one */
|
|
||||||
+ /* cannot select some fonts at all. This option makes the PCF module */
|
|
||||||
+ /* prepend the foundry name (plus a space) to the family name. */
|
|
||||||
+ /* */
|
|
||||||
+ /* We also check whether we have `wide' characters; all put together, we */
|
|
||||||
+ /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
|
|
||||||
+ /* */
|
|
||||||
+ /* If this option is activated, it can be controlled with the */
|
|
||||||
+ /* `no-long-family-names' property of the pcf driver module. */
|
|
||||||
+ /* */
|
|
||||||
+#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /**** ****/
|
|
||||||
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
|
|
||||||
/**** ****/
|
|
||||||
/*************************************************************************/
|
|
||||||
diff --git a/docs/CHANGES b/docs/CHANGES
|
|
||||||
index cb3b327..3823395 100644
|
|
||||||
--- a/docs/CHANGES
|
|
||||||
+++ b/docs/CHANGES
|
|
||||||
@@ -1,4 +1,20 @@
|
|
||||||
|
|
||||||
+CHANGES BETWEEN 2.7.1 and 2.7.2
|
|
||||||
+
|
|
||||||
+ I. IMPORTANT CHANGES
|
|
||||||
+
|
|
||||||
+ - The PCF change to show more `colourful' family names (introduced
|
|
||||||
+ in version 2.7.1) was too radical; it can now be configured with
|
|
||||||
+ PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If
|
|
||||||
+ activated, it can be switched off at run time with the new pcf
|
|
||||||
+ property `no-long-family-names'. If the `FREETYPE_PROPERTIES'
|
|
||||||
+ environment variable is available, you can say
|
|
||||||
+
|
|
||||||
+ FREETYPE_PROPERTIES=pcf:no-long-family-names=1
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+======================================================================
|
|
||||||
+
|
|
||||||
CHANGES BETWEEN 2.7 and 2.7.1
|
|
||||||
|
|
||||||
I. IMPORTANT CHANGES
|
|
||||||
diff --git a/include/freetype/config/ftheader.h b/include/freetype/config/ftheader.h
|
|
||||||
index 950d36c..d491af5 100644
|
|
||||||
--- a/include/freetype/config/ftheader.h
|
|
||||||
+++ b/include/freetype/config/ftheader.h
|
|
||||||
@@ -357,6 +357,19 @@
|
|
||||||
/*************************************************************************
|
|
||||||
*
|
|
||||||
* @macro:
|
|
||||||
+ * FT_PCF_DRIVER_H
|
|
||||||
+ *
|
|
||||||
+ * @description:
|
|
||||||
+ * A macro used in #include statements to name the file containing
|
|
||||||
+ * structures and macros related to the PCF driver module.
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+#define FT_PCF_DRIVER_H <freetype/ftpcfdrv.h>
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*************************************************************************
|
|
||||||
+ *
|
|
||||||
+ * @macro:
|
|
||||||
* FT_TYPE1_TABLES_H
|
|
||||||
*
|
|
||||||
* @description:
|
|
||||||
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
|
|
||||||
index f5bc540..5676074 100644
|
|
||||||
--- a/include/freetype/config/ftoption.h
|
|
||||||
+++ b/include/freetype/config/ftoption.h
|
|
||||||
@@ -82,8 +82,8 @@ FT_BEGIN_HEADER
|
|
||||||
/* 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'). */
|
|
||||||
+ /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
|
|
||||||
+ /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
|
|
||||||
/* */
|
|
||||||
/* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
|
|
||||||
/* multiple lines for better readability). */
|
|
||||||
@@ -835,6 +835,33 @@ FT_BEGIN_HEADER
|
|
||||||
/*************************************************************************/
|
|
||||||
/*************************************************************************/
|
|
||||||
/**** ****/
|
|
||||||
+ /**** P C F D R I V E R C O N F I G U R A T I O N ****/
|
|
||||||
+ /**** ****/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /* */
|
|
||||||
+ /* There are many PCF fonts just called `Fixed' which look completely */
|
|
||||||
+ /* different, and which have nothing to do with each other. When */
|
|
||||||
+ /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
|
|
||||||
+ /* random, the style changes often if one changes the size and one */
|
|
||||||
+ /* cannot select some fonts at all. This option makes the PCF module */
|
|
||||||
+ /* prepend the foundry name (plus a space) to the family name. */
|
|
||||||
+ /* */
|
|
||||||
+ /* We also check whether we have `wide' characters; all put together, we */
|
|
||||||
+ /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
|
|
||||||
+ /* */
|
|
||||||
+ /* If this option is activated, it can be controlled with the */
|
|
||||||
+ /* `no-long-family-names' property of the pcf driver module. */
|
|
||||||
+ /* */
|
|
||||||
+#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /*************************************************************************/
|
|
||||||
+ /**** ****/
|
|
||||||
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
|
|
||||||
/**** ****/
|
|
||||||
/*************************************************************************/
|
|
||||||
diff --git a/include/freetype/ftchapters.h b/include/freetype/ftchapters.h
|
|
||||||
index ab43895..a0a121b 100644
|
|
||||||
--- a/include/freetype/ftchapters.h
|
|
||||||
+++ b/include/freetype/ftchapters.h
|
|
||||||
@@ -77,6 +77,7 @@
|
|
||||||
/* auto_hinter */
|
|
||||||
/* cff_driver */
|
|
||||||
/* tt_driver */
|
|
||||||
+/* pcf_driver */
|
|
||||||
/* */
|
|
||||||
/***************************************************************************/
|
|
||||||
|
|
||||||
diff --git a/include/freetype/ftpcfdrv.h b/include/freetype/ftpcfdrv.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..6622c93
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/include/freetype/ftpcfdrv.h
|
|
||||||
@@ -0,0 +1,105 @@
|
|
||||||
+/***************************************************************************/
|
|
||||||
+/* */
|
|
||||||
+/* ftpcfdrv.h */
|
|
||||||
+/* */
|
|
||||||
+/* FreeType API for controlling the PCF driver (specification only). */
|
|
||||||
+/* */
|
|
||||||
+/* Copyright 2017 by */
|
|
||||||
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
||||||
+/* */
|
|
||||||
+/* 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 FTPCFDRV_H_
|
|
||||||
+#define FTPCFDRV_H_
|
|
||||||
+
|
|
||||||
+#include <ft2build.h>
|
|
||||||
+#include FT_FREETYPE_H
|
|
||||||
+
|
|
||||||
+#ifdef FREETYPE_H
|
|
||||||
+#error "freetype.h of FreeType 1 has been loaded!"
|
|
||||||
+#error "Please fix the directory search order for header files"
|
|
||||||
+#error "so that freetype.h of FreeType 2 is found first."
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+FT_BEGIN_HEADER
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /**************************************************************************
|
|
||||||
+ *
|
|
||||||
+ * @section:
|
|
||||||
+ * pcf_driver
|
|
||||||
+ *
|
|
||||||
+ * @title:
|
|
||||||
+ * The PCF driver
|
|
||||||
+ *
|
|
||||||
+ * @abstract:
|
|
||||||
+ * Controlling the PCF driver module.
|
|
||||||
+ *
|
|
||||||
+ * @description:
|
|
||||||
+ * While FreeType's PCF driver doesn't expose API functions by itself,
|
|
||||||
+ * it is possible to control its behaviour with @FT_Property_Set and
|
|
||||||
+ * @FT_Property_Get. Right now, there is a single property
|
|
||||||
+ * `no-long-family-names' available if FreeType is compiled with
|
|
||||||
+ * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
|
|
||||||
+ *
|
|
||||||
+ * The PCF driver's module name is `pcf'.
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /**************************************************************************
|
|
||||||
+ *
|
|
||||||
+ * @property:
|
|
||||||
+ * no-long-family-names
|
|
||||||
+ *
|
|
||||||
+ * @description:
|
|
||||||
+ * If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
|
|
||||||
+ * FreeType, the PCF driver constructs long family names.
|
|
||||||
+ *
|
|
||||||
+ * There are many PCF fonts just called `Fixed' which look completely
|
|
||||||
+ * different, and which have nothing to do with each other. When
|
|
||||||
+ * selecting `Fixed' in KDE or Gnome one gets results that appear rather
|
|
||||||
+ * random, the style changes often if one changes the size and one
|
|
||||||
+ * cannot select some fonts at all. The improve this situation, the PCF
|
|
||||||
+ * module prepends the foundry name (plus a space) to the family name.
|
|
||||||
+ * It also checks whether there are `wide' characters; all put together,
|
|
||||||
+ * family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
|
|
||||||
+ *
|
|
||||||
+ * If `no-long-family-names' is set, this feature gets switched off.
|
|
||||||
+ *
|
|
||||||
+ * {
|
|
||||||
+ * FT_Library library;
|
|
||||||
+ * FT_Bool no_long_family_names = TRUE;
|
|
||||||
+ *
|
|
||||||
+ *
|
|
||||||
+ * FT_Init_FreeType( &library );
|
|
||||||
+ *
|
|
||||||
+ * FT_Property_Set( library, "pcf",
|
|
||||||
+ * "no-long-family-names",
|
|
||||||
+ * &no_long_family_names );
|
|
||||||
+ * }
|
|
||||||
+ *
|
|
||||||
+ * @note:
|
|
||||||
+ * This property can be used with @FT_Property_Get also.
|
|
||||||
+ *
|
|
||||||
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
|
|
||||||
+ * variable (using values 1 and 0 for `on' and `off', respectively).
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+FT_END_HEADER
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+#endif /* FTPCFDRV_H_ */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* END */
|
|
||||||
diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
|
|
||||||
index 830cabe..f0390cb 100644
|
|
||||||
--- a/src/pcf/pcf.h
|
|
||||||
+++ b/src/pcf/pcf.h
|
|
||||||
@@ -167,6 +167,8 @@ FT_BEGIN_HEADER
|
|
||||||
{
|
|
||||||
FT_DriverRec root;
|
|
||||||
|
|
||||||
+ FT_Bool no_long_family_names;
|
|
||||||
+
|
|
||||||
} PCF_DriverRec, *PCF_Driver;
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
|
|
||||||
index 8f4a90d..bc65423 100644
|
|
||||||
--- a/src/pcf/pcfdrivr.c
|
|
||||||
+++ b/src/pcf/pcfdrivr.c
|
|
||||||
@@ -49,6 +49,8 @@ THE SOFTWARE.
|
|
||||||
|
|
||||||
#include FT_SERVICE_BDF_H
|
|
||||||
#include FT_SERVICE_FONT_FORMAT_H
|
|
||||||
+#include FT_SERVICE_PROPERTIES_H
|
|
||||||
+#include FT_PCF_DRIVER_H
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
@@ -667,6 +669,110 @@ THE SOFTWARE.
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * PROPERTY SERVICE
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+ static FT_Error
|
|
||||||
+ pcf_property_set( FT_Module module, /* PCF_Driver */
|
|
||||||
+ const char* property_name,
|
|
||||||
+ const void* value,
|
|
||||||
+ FT_Bool value_is_string )
|
|
||||||
+ {
|
|
||||||
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+
|
|
||||||
+ FT_Error error = FT_Err_Ok;
|
|
||||||
+ PCF_Driver driver = (PCF_Driver)module;
|
|
||||||
+
|
|
||||||
+#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
|
||||||
+ FT_UNUSED( value_is_string );
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if ( !ft_strcmp( property_name, "no-long-family-names" ) )
|
|
||||||
+ {
|
|
||||||
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
|
||||||
+ if ( value_is_string )
|
|
||||||
+ {
|
|
||||||
+ const char* s = (const char*)value;
|
|
||||||
+ long lfn = ft_strtol( s, NULL, 10 );
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if ( lfn == 0 )
|
|
||||||
+ driver->no_long_family_names = 0;
|
|
||||||
+ else if ( lfn == 1 )
|
|
||||||
+ driver->no_long_family_names = 1;
|
|
||||||
+ else
|
|
||||||
+ return FT_THROW( Invalid_Argument );
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+#endif
|
|
||||||
+ {
|
|
||||||
+ FT_Bool* no_long_family_names = (FT_Bool*)value;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ driver->no_long_family_names = *no_long_family_names;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return error;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
|
|
||||||
+
|
|
||||||
+ FT_UNUSED( module );
|
|
||||||
+ FT_UNUSED( value );
|
|
||||||
+ FT_UNUSED( value_is_string );
|
|
||||||
+
|
|
||||||
+#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
|
|
||||||
+
|
|
||||||
+ FT_TRACE0(( "pcf_property_set: missing property `%s'\n",
|
|
||||||
+ property_name ));
|
|
||||||
+ return FT_THROW( Missing_Property );
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ static FT_Error
|
|
||||||
+ pcf_property_get( FT_Module module, /* PCF_Driver */
|
|
||||||
+ const char* property_name,
|
|
||||||
+ const void* value )
|
|
||||||
+ {
|
|
||||||
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+
|
|
||||||
+ FT_Error error = FT_Err_Ok;
|
|
||||||
+ PCF_Driver driver = (PCF_Driver)module;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if ( !ft_strcmp( property_name, "no-long-family-names" ) )
|
|
||||||
+ {
|
|
||||||
+ FT_Bool no_long_family_names = driver->no_long_family_names;
|
|
||||||
+ FT_Bool* val = (FT_Bool*)value;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ *val = no_long_family_names;
|
|
||||||
+
|
|
||||||
+ return error;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
|
|
||||||
+
|
|
||||||
+ FT_UNUSED( module );
|
|
||||||
+ FT_UNUSED( value );
|
|
||||||
+
|
|
||||||
+#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
|
|
||||||
+
|
|
||||||
+ FT_TRACE0(( "pcf_property_get: missing property `%s'\n",
|
|
||||||
+ property_name ));
|
|
||||||
+ return FT_THROW( Missing_Property );
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ FT_DEFINE_SERVICE_PROPERTIESREC(
|
|
||||||
+ pcf_service_properties,
|
|
||||||
+
|
|
||||||
+ (FT_Properties_SetFunc)pcf_property_set, /* set_property */
|
|
||||||
+ (FT_Properties_GetFunc)pcf_property_get ) /* get_property */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* SERVICE LIST
|
|
||||||
@@ -677,6 +783,7 @@ THE SOFTWARE.
|
|
||||||
{
|
|
||||||
{ FT_SERVICE_ID_BDF, &pcf_service_bdf },
|
|
||||||
{ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PCF },
|
|
||||||
+ { FT_SERVICE_ID_PROPERTIES, &pcf_service_properties },
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -694,7 +801,14 @@ THE SOFTWARE.
|
|
||||||
FT_CALLBACK_DEF( FT_Error )
|
|
||||||
pcf_driver_init( FT_Module module ) /* PCF_Driver */
|
|
||||||
{
|
|
||||||
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+ PCF_Driver driver = (PCF_Driver)module;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ driver->no_long_family_names = 0;
|
|
||||||
+#else
|
|
||||||
FT_UNUSED( module );
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
return FT_Err_Ok;
|
|
||||||
}
|
|
||||||
diff --git a/src/pcf/pcfread.c b/src/pcf/pcfread.c
|
|
||||||
index 38ba110..3eacf2b 100644
|
|
||||||
--- a/src/pcf/pcfread.c
|
|
||||||
+++ b/src/pcf/pcfread.c
|
|
||||||
@@ -1393,57 +1393,75 @@ THE SOFTWARE.
|
|
||||||
prop = pcf_find_property( face, "FAMILY_NAME" );
|
|
||||||
if ( prop && prop->isString )
|
|
||||||
{
|
|
||||||
- /* Prepend the foundry name plus a space to the family name. */
|
|
||||||
- /* There are many fonts just called `Fixed' which look completely */
|
|
||||||
- /* different, and which have nothing to do with each other. When */
|
|
||||||
- /* selecting `Fixed' in KDE or Gnome one gets results that appear */
|
|
||||||
- /* rather random, the style changes often if one changes the size */
|
|
||||||
- /* and one cannot select some fonts at all. */
|
|
||||||
- /* */
|
|
||||||
- /* We also check whether we have `wide' characters; all put */
|
|
||||||
- /* together, we get family names like `Sony Fixed' or `Misc Fixed */
|
|
||||||
- /* Wide'. */
|
|
||||||
- PCF_Property foundry_prop, point_size_prop, average_width_prop;
|
|
||||||
-
|
|
||||||
- int l = ft_strlen( prop->value.atom ) + 1;
|
|
||||||
- int wide = 0;
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- foundry_prop = pcf_find_property( face, "FOUNDRY" );
|
|
||||||
- point_size_prop = pcf_find_property( face, "POINT_SIZE" );
|
|
||||||
- average_width_prop = pcf_find_property( face, "AVERAGE_WIDTH" );
|
|
||||||
-
|
|
||||||
- if ( point_size_prop && average_width_prop )
|
|
||||||
+
|
|
||||||
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
|
|
||||||
+
|
|
||||||
+ PCF_Driver driver = (PCF_Driver)FT_FACE_DRIVER( face );
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if ( !driver->no_long_family_names )
|
|
||||||
{
|
|
||||||
- if ( average_width_prop->value.l >= point_size_prop->value.l )
|
|
||||||
+ /* Prepend the foundry name plus a space to the family name. */
|
|
||||||
+ /* There are many fonts just called `Fixed' which look */
|
|
||||||
+ /* completely different, and which have nothing to do with each */
|
|
||||||
+ /* other. When selecting `Fixed' in KDE or Gnome one gets */
|
|
||||||
+ /* results that appear rather random, the style changes often if */
|
|
||||||
+ /* one changes the size and one cannot select some fonts at all. */
|
|
||||||
+ /* */
|
|
||||||
+ /* We also check whether we have `wide' characters; all put */
|
|
||||||
+ /* together, we get family names like `Sony Fixed' or `Misc */
|
|
||||||
+ /* Fixed Wide'. */
|
|
||||||
+
|
|
||||||
+ PCF_Property foundry_prop, point_size_prop, average_width_prop;
|
|
||||||
+
|
|
||||||
+ int l = ft_strlen( prop->value.atom ) + 1;
|
|
||||||
+ int wide = 0;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ foundry_prop = pcf_find_property( face, "FOUNDRY" );
|
|
||||||
+ point_size_prop = pcf_find_property( face, "POINT_SIZE" );
|
|
||||||
+ average_width_prop = pcf_find_property( face, "AVERAGE_WIDTH" );
|
|
||||||
+
|
|
||||||
+ if ( point_size_prop && average_width_prop )
|
|
||||||
{
|
|
||||||
- /* This font is at least square shaped or even wider */
|
|
||||||
- wide = 1;
|
|
||||||
- l += ft_strlen( " Wide" );
|
|
||||||
+ if ( average_width_prop->value.l >= point_size_prop->value.l )
|
|
||||||
+ {
|
|
||||||
+ /* This font is at least square shaped or even wider */
|
|
||||||
+ wide = 1;
|
|
||||||
+ l += ft_strlen( " Wide" );
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
|
|
||||||
- if ( foundry_prop && foundry_prop->isString )
|
|
||||||
- {
|
|
||||||
- l += ft_strlen( foundry_prop->value.atom ) + 1;
|
|
||||||
+ if ( foundry_prop && foundry_prop->isString )
|
|
||||||
+ {
|
|
||||||
+ l += ft_strlen( foundry_prop->value.atom ) + 1;
|
|
||||||
|
|
||||||
- if ( FT_NEW_ARRAY( root->family_name, l ) )
|
|
||||||
- goto Exit;
|
|
||||||
+ if ( FT_NEW_ARRAY( root->family_name, l ) )
|
|
||||||
+ goto Exit;
|
|
||||||
+
|
|
||||||
+ ft_strcpy( root->family_name, foundry_prop->value.atom );
|
|
||||||
+ ft_strcat( root->family_name, " " );
|
|
||||||
+ ft_strcat( root->family_name, prop->value.atom );
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ if ( FT_NEW_ARRAY( root->family_name, l ) )
|
|
||||||
+ goto Exit;
|
|
||||||
|
|
||||||
- ft_strcpy( root->family_name, foundry_prop->value.atom );
|
|
||||||
- ft_strcat( root->family_name, " " );
|
|
||||||
- ft_strcat( root->family_name, prop->value.atom );
|
|
||||||
+ ft_strcpy( root->family_name, prop->value.atom );
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if ( wide )
|
|
||||||
+ ft_strcat( root->family_name, " Wide" );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
+
|
|
||||||
+#endif /* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
|
|
||||||
+
|
|
||||||
{
|
|
||||||
- if ( FT_NEW_ARRAY( root->family_name, l ) )
|
|
||||||
+ if ( FT_STRDUP( root->family_name, prop->value.atom ) )
|
|
||||||
goto Exit;
|
|
||||||
-
|
|
||||||
- ft_strcpy( root->family_name, prop->value.atom );
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- if ( wide )
|
|
||||||
- ft_strcat( root->family_name, " Wide" );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
root->family_name = NULL;
|
|
||||||
--
|
|
||||||
cgit v1.0-41-gc330
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
|
|
||||||
index c726e5e..830cabe 100644
|
|
||||||
--- a/src/pcf/pcf.h
|
|
||||||
+++ b/src/pcf/pcf.h
|
|
||||||
@@ -163,6 +163,13 @@ FT_BEGIN_HEADER
|
|
||||||
} PCF_FaceRec, *PCF_Face;
|
|
||||||
|
|
||||||
|
|
||||||
+ typedef struct PCF_DriverRec_
|
|
||||||
+ {
|
|
||||||
+ FT_DriverRec root;
|
|
||||||
+
|
|
||||||
+ } PCF_DriverRec, *PCF_Driver;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* macros for pcf font format */
|
|
||||||
|
|
||||||
#define LSBFirst 0
|
|
||||||
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
|
|
||||||
index 10d5c20..8f4a90d 100644
|
|
||||||
--- a/src/pcf/pcfdrivr.c
|
|
||||||
+++ b/src/pcf/pcfdrivr.c
|
|
||||||
@@ -691,22 +691,38 @@ THE SOFTWARE.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+ FT_CALLBACK_DEF( FT_Error )
|
|
||||||
+ pcf_driver_init( FT_Module module ) /* PCF_Driver */
|
|
||||||
+ {
|
|
||||||
+ FT_UNUSED( module );
|
|
||||||
+
|
|
||||||
+ return FT_Err_Ok;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ FT_CALLBACK_DEF( void )
|
|
||||||
+ pcf_driver_done( FT_Module module ) /* PCF_Driver */
|
|
||||||
+ {
|
|
||||||
+ FT_UNUSED( module );
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
FT_CALLBACK_TABLE_DEF
|
|
||||||
const FT_Driver_ClassRec pcf_driver_class =
|
|
||||||
{
|
|
||||||
{
|
|
||||||
FT_MODULE_FONT_DRIVER |
|
|
||||||
FT_MODULE_DRIVER_NO_OUTLINES,
|
|
||||||
- sizeof ( FT_DriverRec ),
|
|
||||||
|
|
||||||
+ sizeof ( PCF_DriverRec ),
|
|
||||||
"pcf",
|
|
||||||
0x10000L,
|
|
||||||
0x20000L,
|
|
||||||
|
|
||||||
- NULL, /* module-specific interface */
|
|
||||||
+ NULL, /* module-specific interface */
|
|
||||||
|
|
||||||
- NULL, /* FT_Module_Constructor module_init */
|
|
||||||
- NULL, /* FT_Module_Destructor module_done */
|
|
||||||
+ pcf_driver_init, /* FT_Module_Constructor module_init */
|
|
||||||
+ pcf_driver_done, /* FT_Module_Destructor module_done */
|
|
||||||
pcf_driver_requester /* FT_Module_Requester get_interface */
|
|
||||||
},
|
|
||||||
|
|
||||||
--
|
|
||||||
cgit v1.0-41-gc330
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user