fontconfig: Branch 'main' - 2 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Sep 30 09:25:31 UTC 2024
src/fcfreetype.c | 35 +++++++++++++++++++++++++++--------
src/ftglue.c | 5 ++++-
src/ftglue.h | 3 ++-
3 files changed, 33 insertions(+), 10 deletions(-)
New commits:
commit 5e058033fe6b4caddd4eddd3a9e0289ef69c5748
Merge: bd83c04 e8fc006
Author: Akira TAGOH <akira at tagoh.org>
Date: Mon Sep 30 09:25:27 2024 +0000
Merge branch 'issues/426' into 'main'
Improve hinting detection for fonthashint object
Closes #426
See merge request fontconfig/fontconfig!331
commit e8fc0065905a34965ed8eb52dc70095ad7ccd965
Author: Akira TAGOH <akira at tagoh.org>
Date: Mon Sep 30 17:11:25 2024 +0900
Improve hinting detection for fonthashint object
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/426
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index a3ddf99..50f382f 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -32,6 +32,7 @@
#include FT_FREETYPE_H
#include FT_ADVANCES_H
#include FT_TRUETYPE_TABLES_H
+#include FT_TRUETYPE_TAGS_H
#include FT_SFNT_NAMES_H
#include FT_TRUETYPE_IDS_H
#include FT_TYPE1_TABLES_H
@@ -2708,10 +2709,8 @@ FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks FC_UNUSED, int *spac
}
-#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
+/* Graphite Rules Table */
#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f')
-#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
#define OTLAYOUT_HEAD "otlayout:"
#define OTLAYOUT_HEAD_LEN 9
@@ -2762,7 +2761,7 @@ compareulong (const void *a, const void *b)
}
static FcBool
-FindTable (FT_Face face, FT_ULong tabletag)
+FindTable (FT_Face face, FT_ULong tabletag, FT_ULong *tablesize)
{
FT_Stream stream = face->stream;
FT_Error error;
@@ -2770,7 +2769,7 @@ FindTable (FT_Face face, FT_ULong tabletag)
if (!stream)
return FcFalse;
- if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
+ if (( error = ftglue_face_goto_table( face, tabletag, stream, tablesize ) ))
return FcFalse;
return FcTrue;
@@ -2788,7 +2787,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
if (!stream)
return 0;
- if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
+ if (( error = ftglue_face_goto_table( face, tabletag, stream, NULL ) ))
return 0;
base_offset = ftglue_stream_pos ( stream );
@@ -2911,9 +2910,29 @@ bail:
}
static FcBool
-FcFontHasHint (FT_Face face)
+FcFontHasHint(FT_Face face)
{
- return FindTable (face, TTAG_prep);
+ FT_ULong size;
+
+ /* For a workaround of gttools fix-nonhinting.
+ * See https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/426
+ */
+ if (FcDebug() & FC_DBG_SCANV)
+ {
+ FT_ULong ret;
+
+ fprintf(stderr, "*** Has hint:\n");
+ fprintf(stderr, " fpgm table: %s\n",
+ FindTable(face, TTAG_fpgm, NULL) ? "True" : "False");
+ fprintf(stderr, " cvt table: %s\n",
+ FindTable(face, TTAG_cvt, NULL) ? "True" : "False");
+ fprintf(stderr, " prep table: %s\n",
+ FindTable(face, TTAG_prep, &ret) ? "True" : "False");
+ fprintf(stderr, " prep size: %lu\n", ret);
+ }
+ return FindTable(face, TTAG_fpgm, NULL) ||
+ FindTable(face, TTAG_cvt, NULL) ||
+ (FindTable (face, TTAG_prep, &size) && size > 7);
}
diff --git a/src/ftglue.c b/src/ftglue.c
index 7490a8c..f6ad79c 100644
--- a/src/ftglue.c
+++ b/src/ftglue.c
@@ -166,7 +166,8 @@ ftglue_stream_frame_exit( FT_Stream stream )
FTGLUE_APIDEF( FT_Error )
ftglue_face_goto_table( FT_Face face,
FT_ULong the_tag,
- FT_Stream stream )
+ FT_Stream stream,
+ FT_ULong *table_size )
{
FT_Error error;
@@ -238,6 +239,8 @@ ftglue_face_goto_table( FT_Face face,
{
LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size ));
error = ftglue_stream_seek( stream, start );
+ if (table_size)
+ *table_size = size;
goto FoundIt;
}
}
diff --git a/src/ftglue.h b/src/ftglue.h
index 650ee28..5399249 100644
--- a/src/ftglue.h
+++ b/src/ftglue.h
@@ -104,7 +104,8 @@ ftglue_stream_frame_exit( FT_Stream stream );
FTGLUE_API( FT_Error )
ftglue_face_goto_table( FT_Face face,
FT_ULong tag,
- FT_Stream stream );
+ FT_Stream stream,
+ FT_ULong *table_size );
FT_END_HEADER
More information about the Fontconfig
mailing list