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

Behdad Esfahbod behdad at kemper.freedesktop.org
Thu Jul 24 12:29:18 PDT 2014


 src/fcfreetype.c |  164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 164 insertions(+)

New commits:
commit aeba5bf4b69f8b559cb909df12d0a636e6054325
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Jul 24 15:28:09 2014 -0400

    Decode MacRoman encoding in name table without iconv
    
    iconv support was turned off by default in f30a5d76.
    Some fonts, like Apple Color Emoji, only have their English
    name in a MacRoman entry.  As such, decode MacRoman ourselves.

diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index bfbcad0..8a95ee4 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -558,6 +558,139 @@ FcFontCapabilities(FT_Face face);
 
 #define NUM_FC_MAC_ROMAN_FAKE	(int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0]))
 
+
+/* From http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT */
+static const FcChar16 fcMacRomanNonASCIIToUnicode[128] = {
+  /*0x80*/ 0x00C4, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
+  /*0x81*/ 0x00C5, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
+  /*0x82*/ 0x00C7, /* LATIN CAPITAL LETTER C WITH CEDILLA */
+  /*0x83*/ 0x00C9, /* LATIN CAPITAL LETTER E WITH ACUTE */
+  /*0x84*/ 0x00D1, /* LATIN CAPITAL LETTER N WITH TILDE */
+  /*0x85*/ 0x00D6, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
+  /*0x86*/ 0x00DC, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
+  /*0x87*/ 0x00E1, /* LATIN SMALL LETTER A WITH ACUTE */
+  /*0x88*/ 0x00E0, /* LATIN SMALL LETTER A WITH GRAVE */
+  /*0x89*/ 0x00E2, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
+  /*0x8A*/ 0x00E4, /* LATIN SMALL LETTER A WITH DIAERESIS */
+  /*0x8B*/ 0x00E3, /* LATIN SMALL LETTER A WITH TILDE */
+  /*0x8C*/ 0x00E5, /* LATIN SMALL LETTER A WITH RING ABOVE */
+  /*0x8D*/ 0x00E7, /* LATIN SMALL LETTER C WITH CEDILLA */
+  /*0x8E*/ 0x00E9, /* LATIN SMALL LETTER E WITH ACUTE */
+  /*0x8F*/ 0x00E8, /* LATIN SMALL LETTER E WITH GRAVE */
+  /*0x90*/ 0x00EA, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
+  /*0x91*/ 0x00EB, /* LATIN SMALL LETTER E WITH DIAERESIS */
+  /*0x92*/ 0x00ED, /* LATIN SMALL LETTER I WITH ACUTE */
+  /*0x93*/ 0x00EC, /* LATIN SMALL LETTER I WITH GRAVE */
+  /*0x94*/ 0x00EE, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
+  /*0x95*/ 0x00EF, /* LATIN SMALL LETTER I WITH DIAERESIS */
+  /*0x96*/ 0x00F1, /* LATIN SMALL LETTER N WITH TILDE */
+  /*0x97*/ 0x00F3, /* LATIN SMALL LETTER O WITH ACUTE */
+  /*0x98*/ 0x00F2, /* LATIN SMALL LETTER O WITH GRAVE */
+  /*0x99*/ 0x00F4, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
+  /*0x9A*/ 0x00F6, /* LATIN SMALL LETTER O WITH DIAERESIS */
+  /*0x9B*/ 0x00F5, /* LATIN SMALL LETTER O WITH TILDE */
+  /*0x9C*/ 0x00FA, /* LATIN SMALL LETTER U WITH ACUTE */
+  /*0x9D*/ 0x00F9, /* LATIN SMALL LETTER U WITH GRAVE */
+  /*0x9E*/ 0x00FB, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
+  /*0x9F*/ 0x00FC, /* LATIN SMALL LETTER U WITH DIAERESIS */
+  /*0xA0*/ 0x2020, /* DAGGER */
+  /*0xA1*/ 0x00B0, /* DEGREE SIGN */
+  /*0xA2*/ 0x00A2, /* CENT SIGN */
+  /*0xA3*/ 0x00A3, /* POUND SIGN */
+  /*0xA4*/ 0x00A7, /* SECTION SIGN */
+  /*0xA5*/ 0x2022, /* BULLET */
+  /*0xA6*/ 0x00B6, /* PILCROW SIGN */
+  /*0xA7*/ 0x00DF, /* LATIN SMALL LETTER SHARP S */
+  /*0xA8*/ 0x00AE, /* REGISTERED SIGN */
+  /*0xA9*/ 0x00A9, /* COPYRIGHT SIGN */
+  /*0xAA*/ 0x2122, /* TRADE MARK SIGN */
+  /*0xAB*/ 0x00B4, /* ACUTE ACCENT */
+  /*0xAC*/ 0x00A8, /* DIAERESIS */
+  /*0xAD*/ 0x2260, /* NOT EQUAL TO */
+  /*0xAE*/ 0x00C6, /* LATIN CAPITAL LETTER AE */
+  /*0xAF*/ 0x00D8, /* LATIN CAPITAL LETTER O WITH STROKE */
+  /*0xB0*/ 0x221E, /* INFINITY */
+  /*0xB1*/ 0x00B1, /* PLUS-MINUS SIGN */
+  /*0xB2*/ 0x2264, /* LESS-THAN OR EQUAL TO */
+  /*0xB3*/ 0x2265, /* GREATER-THAN OR EQUAL TO */
+  /*0xB4*/ 0x00A5, /* YEN SIGN */
+  /*0xB5*/ 0x00B5, /* MICRO SIGN */
+  /*0xB6*/ 0x2202, /* PARTIAL DIFFERENTIAL */
+  /*0xB7*/ 0x2211, /* N-ARY SUMMATION */
+  /*0xB8*/ 0x220F, /* N-ARY PRODUCT */
+  /*0xB9*/ 0x03C0, /* GREEK SMALL LETTER PI */
+  /*0xBA*/ 0x222B, /* INTEGRAL */
+  /*0xBB*/ 0x00AA, /* FEMININE ORDINAL INDICATOR */
+  /*0xBC*/ 0x00BA, /* MASCULINE ORDINAL INDICATOR */
+  /*0xBD*/ 0x03A9, /* GREEK CAPITAL LETTER OMEGA */
+  /*0xBE*/ 0x00E6, /* LATIN SMALL LETTER AE */
+  /*0xBF*/ 0x00F8, /* LATIN SMALL LETTER O WITH STROKE */
+  /*0xC0*/ 0x00BF, /* INVERTED QUESTION MARK */
+  /*0xC1*/ 0x00A1, /* INVERTED EXCLAMATION MARK */
+  /*0xC2*/ 0x00AC, /* NOT SIGN */
+  /*0xC3*/ 0x221A, /* SQUARE ROOT */
+  /*0xC4*/ 0x0192, /* LATIN SMALL LETTER F WITH HOOK */
+  /*0xC5*/ 0x2248, /* ALMOST EQUAL TO */
+  /*0xC6*/ 0x2206, /* INCREMENT */
+  /*0xC7*/ 0x00AB, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+  /*0xC8*/ 0x00BB, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+  /*0xC9*/ 0x2026, /* HORIZONTAL ELLIPSIS */
+  /*0xCA*/ 0x00A0, /* NO-BREAK SPACE */
+  /*0xCB*/ 0x00C0, /* LATIN CAPITAL LETTER A WITH GRAVE */
+  /*0xCC*/ 0x00C3, /* LATIN CAPITAL LETTER A WITH TILDE */
+  /*0xCD*/ 0x00D5, /* LATIN CAPITAL LETTER O WITH TILDE */
+  /*0xCE*/ 0x0152, /* LATIN CAPITAL LIGATURE OE */
+  /*0xCF*/ 0x0153, /* LATIN SMALL LIGATURE OE */
+  /*0xD0*/ 0x2013, /* EN DASH */
+  /*0xD1*/ 0x2014, /* EM DASH */
+  /*0xD2*/ 0x201C, /* LEFT DOUBLE QUOTATION MARK */
+  /*0xD3*/ 0x201D, /* RIGHT DOUBLE QUOTATION MARK */
+  /*0xD4*/ 0x2018, /* LEFT SINGLE QUOTATION MARK */
+  /*0xD5*/ 0x2019, /* RIGHT SINGLE QUOTATION MARK */
+  /*0xD6*/ 0x00F7, /* DIVISION SIGN */
+  /*0xD7*/ 0x25CA, /* LOZENGE */
+  /*0xD8*/ 0x00FF, /* LATIN SMALL LETTER Y WITH DIAERESIS */
+  /*0xD9*/ 0x0178, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
+  /*0xDA*/ 0x2044, /* FRACTION SLASH */
+  /*0xDB*/ 0x20AC, /* EURO SIGN */
+  /*0xDC*/ 0x2039, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+  /*0xDD*/ 0x203A, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+  /*0xDE*/ 0xFB01, /* LATIN SMALL LIGATURE FI */
+  /*0xDF*/ 0xFB02, /* LATIN SMALL LIGATURE FL */
+  /*0xE0*/ 0x2021, /* DOUBLE DAGGER */
+  /*0xE1*/ 0x00B7, /* MIDDLE DOT */
+  /*0xE2*/ 0x201A, /* SINGLE LOW-9 QUOTATION MARK */
+  /*0xE3*/ 0x201E, /* DOUBLE LOW-9 QUOTATION MARK */
+  /*0xE4*/ 0x2030, /* PER MILLE SIGN */
+  /*0xE5*/ 0x00C2, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+  /*0xE6*/ 0x00CA, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
+  /*0xE7*/ 0x00C1, /* LATIN CAPITAL LETTER A WITH ACUTE */
+  /*0xE8*/ 0x00CB, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
+  /*0xE9*/ 0x00C8, /* LATIN CAPITAL LETTER E WITH GRAVE */
+  /*0xEA*/ 0x00CD, /* LATIN CAPITAL LETTER I WITH ACUTE */
+  /*0xEB*/ 0x00CE, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+  /*0xEC*/ 0x00CF, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
+  /*0xED*/ 0x00CC, /* LATIN CAPITAL LETTER I WITH GRAVE */
+  /*0xEE*/ 0x00D3, /* LATIN CAPITAL LETTER O WITH ACUTE */
+  /*0xEF*/ 0x00D4, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+  /*0xF0*/ 0xF8FF, /* Apple logo */
+  /*0xF1*/ 0x00D2, /* LATIN CAPITAL LETTER O WITH GRAVE */
+  /*0xF2*/ 0x00DA, /* LATIN CAPITAL LETTER U WITH ACUTE */
+  /*0xF3*/ 0x00DB, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
+  /*0xF4*/ 0x00D9, /* LATIN CAPITAL LETTER U WITH GRAVE */
+  /*0xF5*/ 0x0131, /* LATIN SMALL LETTER DOTLESS I */
+  /*0xF6*/ 0x02C6, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
+  /*0xF7*/ 0x02DC, /* SMALL TILDE */
+  /*0xF8*/ 0x00AF, /* MACRON */
+  /*0xF9*/ 0x02D8, /* BREVE */
+  /*0xFA*/ 0x02D9, /* DOT ABOVE */
+  /*0xFB*/ 0x02DA, /* RING ABOVE */
+  /*0xFC*/ 0x00B8, /* CEDILLA */
+  /*0xFD*/ 0x02DD, /* DOUBLE ACUTE ACCENT */
+  /*0xFE*/ 0x02DB, /* OGONEK */
+  /*0xFF*/ 0x02C7, /* CARON */
+};
+
 #if USE_ICONV
 #include <iconv.h>
 #endif
@@ -696,6 +829,35 @@ FcSfntNameTranscode (FT_SfntName *sname)
 	*u8 = '\0';
 	goto done;
     }
+    if (!strcmp (fromcode, "MACINTOSH"))
+    {
+	FcChar8	    *src = sname->string;
+	int	    src_len = sname->string_len;
+	int	    olen;
+	FcChar8	    *u8;
+	FcChar32    ucs4;
+
+	/*
+	 * Convert Latin1 to Utf8. Freed below
+	 */
+	utf8 = malloc (src_len + 1);
+	if (!utf8)
+	    return 0;
+
+	u8 = utf8;
+	while (src_len > 0)
+	{
+	    ucs4 = *src++;
+	    if (ucs4 >= 128)
+	        ucs4 = fcMacRomanNonASCIIToUnicode[ucs4 - 128];
+	    src_len--;
+	    olen = FcUcs4ToUtf8 (ucs4, u8);
+	    u8 += olen;
+	}
+	*u8 = '\0';
+	goto done;
+    }
+
 #if USE_ICONV
     cd = iconv_open ("UTF-8", fromcode);
     if (cd && cd != (iconv_t) (-1))
commit 07a0f511b13a872824c2c57251b7e47ee7df1354
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Jul 24 15:01:57 2014 -0400

    Call FcInitDebug from FcFreeTypeQueryFace

diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index baf13e5..bfbcad0 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1107,6 +1107,8 @@ FcFreeTypeQueryFace (const FT_Face  face,
     FcRange	    *r = NULL;
     double	    lower_size = 0.0L, upper_size = DBL_MAX;
 
+    FcInitDebug (); /* We might be called with no initizalization whatsoever. */
+
     pat = FcPatternCreate ();
     if (!pat)
 	goto bail0;


More information about the Fontconfig mailing list