[Fontconfig] fontconfig: Branch 'master' - 3 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 16 06:39:49 UTC 2020


 src/Makefile.am  |    1 
 src/fcdir.c      |    3 +
 src/fcfreetype.c |   84 +++------------------------------------------------
 src/fcint.h      |    4 ++
 src/fcopentype.c |   90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/meson.build  |    1 
 6 files changed, 104 insertions(+), 79 deletions(-)

New commits:
commit dbd67ccc63bcf5983e47123d9ec06eb4389e2d1b
Author: Akira TAGOH <akira at tagoh.org>
Date:   Wed Sep 16 15:06:43 2020 +0900

    Update meson.build

diff --git a/src/meson.build b/src/meson.build
index ee5b8cc..0065e8f 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -19,6 +19,7 @@ fc_sources = [
   'fcmatrix.c',
   'fcname.c',
   'fcobjs.c',
+  'fcopentype.c',
   'fcpat.c',
   'fcrange.c',
   'fcserialize.c',
commit c78e7fd6deea835a522a89b3ae9ecc4fb1a2b672
Author: Akira TAGOH <akira at tagoh.org>
Date:   Fri Apr 3 19:44:00 2020 +0900

    Add fullname later once FcConfigSubstitute() is done
    
    So user's changes in family and style will be reflected into fullname.

diff --git a/src/Makefile.am b/src/Makefile.am
index 4ddcb1a..eddb87c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -151,6 +151,7 @@ libfontconfig_la_SOURCES = \
 	fcname.c \
 	fcobjs.c \
 	fcobjs.h \
+	fcopentype.c \
 	fcpat.c \
 	fcrange.c \
 	fcserialize.c \
diff --git a/src/fcdir.c b/src/fcdir.c
index e332897..06644a0 100644
--- a/src/fcdir.c
+++ b/src/fcdir.c
@@ -117,6 +117,9 @@ FcFileScanFontConfig (FcFontSet		*set,
 	if (config && !FcConfigSubstitute (config, font, FcMatchScan))
 	    ret = FcFalse;
 
+	if (!FcPatternAddFullname (font))
+	    ret = FcFalse;
+
 	if (FcDebug() & FC_DBG_SCANV)
 	{
 	    printf ("Final font pattern:\n");
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 672c33a..0001f38 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1666,63 +1666,6 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 	++nfamily;
     }
 
-    /* Add the fullname into the cache */
-    if (!variable)
-    {
-	FcChar8 *family, *style, *lang;
-	int n = 0;
-	size_t len, i;
-	FcStrBuf sbuf;
-
-	while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &lang) == FcResultMatch)
-	{
-	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
-		break;
-	    n++;
-	    lang = NULL;
-	}
-	if (!lang)
-	    n = 0;
-	if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
-	    goto bail1;
-	len = strlen ((const char *) family);
-	for (i = len; i > 0; i--)
-	{
-	    if (!isspace (family[i]))
-		break;
-	}
-	family[i] = 0;
-	while (FcPatternObjectGetString (pat, FC_STYLELANG_OBJECT, n, &lang) == FcResultMatch)
-	{
-	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
-		break;
-	    n++;
-	    lang = NULL;
-	}
-	if (!lang)
-	    n = 0;
-	if (FcPatternObjectGetString (pat, FC_STYLE_OBJECT, n, &style) != FcResultMatch)
-	    goto bail1;
-	len = strlen ((const char *) style);
-	for (i = 0; style[i] != 0 && isspace (style[i]); i++)
-	    break;
-	memcpy (style, &style[i], len - i);
-	FcStrBufInit (&sbuf, NULL, 0);
-	FcStrBufString (&sbuf, family);
-	if (FcStrCmpIgnoreBlanksAndCase(style, (const FcChar8 *) "Regular") != 0)
-	{
-	    FcStrBufChar (&sbuf, ' ');
-	    FcStrBufString (&sbuf, style);
-	}
-	if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
-	{
-	    FcStrBufDestroy (&sbuf);
-	    goto bail1;
-	}
-	FcStrBufDestroy (&sbuf);
-	if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
-	    goto bail1;
-    }
     /* Add the PostScript name into the cache */
     if (!variable)
     {
diff --git a/src/fcint.h b/src/fcint.h
index a3b192d..2d4a2c4 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -1368,6 +1368,10 @@ FcObjectLookupOtherTypeById (FcObject id);
 FcPrivate const FcObjectType *
 FcObjectLookupOtherTypeByName (const char *str);
 
+/* fcopentype.c */
+FcPrivate FcBool
+FcPatternAddFullname (FcPattern *pat);
+
 /* fchash.c */
 FcPrivate FcBool
 FcHashStrCopy (const void  *src,
diff --git a/src/fcopentype.c b/src/fcopentype.c
new file mode 100644
index 0000000..9382a1b
--- /dev/null
+++ b/src/fcopentype.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright © 2000 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the author(s) not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  The authors make no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+#include "fcint.h"
+
+FcBool
+FcPatternAddFullname (FcPattern *pat)
+{
+    FcBool b = FcFalse;
+
+    if (FcRefIsConst (&pat->ref))
+	return FcFalse;
+    if (FcPatternObjectGetBool (pat, FC_VARIABLE_OBJECT, 0, &b) != FcResultMatch || b == FcFalse)
+    {
+	FcChar8 *family, *style, *lang = NULL;
+	int n = 0;
+	size_t len, i;
+	FcStrBuf sbuf;
+
+	while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &lang) == FcResultMatch)
+	{
+	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
+		break;
+	    n++;
+	    lang = NULL;
+	}
+	if (!lang)
+	    n = 0;
+	if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
+	    return FcFalse;
+	len = strlen ((const char *) family);
+	for (i = len; i > 0; i--)
+	{
+	    if (!isspace (family[i]))
+		break;
+	}
+	family[i] = 0;
+	lang = NULL;
+	while (FcPatternObjectGetString (pat, FC_STYLELANG_OBJECT, n, &lang) == FcResultMatch)
+	{
+	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
+		break;
+	    n++;
+	    lang = NULL;
+	}
+	if (!lang)
+	    n = 0;
+	if (FcPatternObjectGetString (pat, FC_STYLE_OBJECT, n, &style) != FcResultMatch)
+	    return FcFalse;
+	len = strlen ((const char *) style);
+	for (i = 0; style[i] != 0 && isspace (style[i]); i++)
+	    break;
+	memcpy (style, &style[i], len - i);
+	FcStrBufInit (&sbuf, NULL, 0);
+	FcStrBufString (&sbuf, family);
+	if (FcStrCmpIgnoreBlanksAndCase(style, (const FcChar8 *) "Regular") != 0)
+	{
+	    FcStrBufChar (&sbuf, ' ');
+	    FcStrBufString (&sbuf, style);
+	}
+	if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
+	{
+	    FcStrBufDestroy (&sbuf);
+	    return FcFalse;
+	}
+	FcStrBufDestroy (&sbuf);
+	if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
+	    return FcFalse;
+    }
+
+    return FcTrue;
+}
commit 0f9040406cae2b3c574110acd925867c4a987a37
Author: Akira TAGOH <akira at tagoh.org>
Date:   Tue Feb 4 15:34:42 2020 +0900

    Construct fullname from family and style
    
    OpenType spec says that the Regular descriptor would generally be
    omitted from fullname. but some fonts doesn't follow on it.
    
    So decided to construct a fullname from family and style instead of
    relying on the meta data in a font.
    
    Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/208

diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 7147569..672c33a 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1133,12 +1133,10 @@ static const FT_UShort platform_order[] = {
 
 static const FT_UShort nameid_order[] = {
     TT_NAME_ID_WWS_FAMILY,
-    TT_NAME_ID_PREFERRED_FAMILY,
+    TT_NAME_ID_TYPOGRAPHIC_FAMILY,
     TT_NAME_ID_FONT_FAMILY,
-    TT_NAME_ID_MAC_FULL_NAME,
-    TT_NAME_ID_FULL_NAME,
     TT_NAME_ID_WWS_SUBFAMILY,
-    TT_NAME_ID_PREFERRED_SUBFAMILY,
+    TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY,
     TT_NAME_ID_FONT_SUBFAMILY,
     TT_NAME_ID_TRADEMARK,
     TT_NAME_ID_MANUFACTURER,
@@ -1272,8 +1270,6 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
     int		    nfamily_lang = 0;
     int		    nstyle = 0;
     int		    nstyle_lang = 0;
-    int		    nfullname = 0;
-    int		    nfullname_lang = 0;
     unsigned int    p, n;
 
     FcChar8	    *style = 0;
@@ -1495,8 +1491,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 		 * and treat the instance's nameid as FONT_SUBFAMILY.
 		 * Postscript name is automatically handled by FreeType. */
 		if (nameid == TT_NAME_ID_WWS_SUBFAMILY ||
-		    nameid == TT_NAME_ID_PREFERRED_SUBFAMILY ||
-		    nameid == TT_NAME_ID_FULL_NAME)
+		    nameid == TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY)
 		    continue;
 
 		if (nameid == TT_NAME_ID_FONT_SUBFAMILY)
@@ -1512,7 +1507,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 	    {
 		switch (nameid) {
 		case TT_NAME_ID_WWS_FAMILY:
-		case TT_NAME_ID_PREFERRED_FAMILY:
+		case TT_NAME_ID_TYPOGRAPHIC_FAMILY:
 		case TT_NAME_ID_FONT_FAMILY:
 #if 0	
 		case TT_NAME_ID_UNIQUE_ID:
@@ -1527,22 +1522,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 		    np = &nfamily;
 		    nlangp = &nfamily_lang;
 		    break;
-		case TT_NAME_ID_MAC_FULL_NAME:
-		case TT_NAME_ID_FULL_NAME:
-		    if (variable)
-			break;
-		    if (FcDebug () & FC_DBG_SCANV)
-			printf ("found full   (n %2d p %d e %d l 0x%04x)",
-				sname.name_id, sname.platform_id,
-				sname.encoding_id, sname.language_id);
-
-		    obj = FC_FULLNAME_OBJECT;
-		    objlang = FC_FULLNAMELANG_OBJECT;
-		    np = &nfullname;
-		    nlangp = &nfullname_lang;
-		    break;
 		case TT_NAME_ID_WWS_SUBFAMILY:
-		case TT_NAME_ID_PREFERRED_SUBFAMILY:
+		case TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY:
 		case TT_NAME_ID_FONT_SUBFAMILY:
 		    if (variable)
 			break;
@@ -1686,7 +1667,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
     }
 
     /* Add the fullname into the cache */
-    if (!variable && !nfullname)
+    if (!variable)
     {
 	FcChar8 *family, *style, *lang;
 	int n = 0;
@@ -1728,8 +1709,11 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 	memcpy (style, &style[i], len - i);
 	FcStrBufInit (&sbuf, NULL, 0);
 	FcStrBufString (&sbuf, family);
-	FcStrBufChar (&sbuf, ' ');
-	FcStrBufString (&sbuf, style);
+	if (FcStrCmpIgnoreBlanksAndCase(style, (const FcChar8 *) "Regular") != 0)
+	{
+	    FcStrBufChar (&sbuf, ' ');
+	    FcStrBufString (&sbuf, style);
+	}
 	if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
 	{
 	    FcStrBufDestroy (&sbuf);
@@ -1738,7 +1722,6 @@ FcFreeTypeQueryFaceInternal (const FT_Face  face,
 	FcStrBufDestroy (&sbuf);
 	if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
 	    goto bail1;
-	++nfullname;
     }
     /* Add the PostScript name into the cache */
     if (!variable)


More information about the Fontconfig mailing list