Bug 59379 - FC_PRGNAME
Can be used for per-application configuration.
This commit is contained in:
parent
3f84695104
commit
ec5ca08c80
|
@ -141,7 +141,7 @@ AC_TYPE_PID_T
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_FUNC_MMAP
|
AC_FUNC_MMAP
|
||||||
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp mkostemp _mktemp_s strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs lstat])
|
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp mkostemp _mktemp_s strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror readlink regexec regfree fstatvfs fstatfs lstat])
|
||||||
|
|
||||||
dnl AC_CHECK_FUNCS doesn't check for header files.
|
dnl AC_CHECK_FUNCS doesn't check for header files.
|
||||||
dnl posix_fadvise() may be not available in older libc.
|
dnl posix_fadvise() may be not available in older libc.
|
||||||
|
|
|
@ -190,11 +190,12 @@ convenience for the application's rendering mechanism.
|
||||||
the font
|
the font
|
||||||
embolden FC_EMBOLDEN Bool Rasterizer should
|
embolden FC_EMBOLDEN Bool Rasterizer should
|
||||||
synthetically embolden the font
|
synthetically embolden the font
|
||||||
fontfeatures FC_FONT_FEATURES String List of the feature tags in
|
fontfeatures FC_FONT_FEATURES String List of extra feature tags in
|
||||||
OpenType to be enabled
|
OpenType to be enabled
|
||||||
namelang FC_NAMELANG String Language name to be used for the
|
namelang FC_NAMELANG String Language name to be used for the
|
||||||
default value of familylang,
|
default value of familylang,
|
||||||
stylelang and fullnamelang
|
stylelang and fullnamelang
|
||||||
|
prgname FC_PRGNAME String Name of the running program
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
|
@ -132,6 +132,7 @@ convenience for the applications' rendering mechanism.
|
||||||
capability String List of layout capabilities in the font
|
capability String List of layout capabilities in the font
|
||||||
embolden Bool Rasterizer should synthetically embolden the font
|
embolden Bool Rasterizer should synthetically embolden the font
|
||||||
fontfeatures String List of the feature tags in OpenType to be enabled
|
fontfeatures String List of the feature tags in OpenType to be enabled
|
||||||
|
prgname String String Name of the running program
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</refsect2>
|
</refsect2>
|
||||||
<refsect2>
|
<refsect2>
|
||||||
|
|
|
@ -114,6 +114,7 @@ typedef int FcBool;
|
||||||
#define FC_LCD_FILTER "lcdfilter" /* Int */
|
#define FC_LCD_FILTER "lcdfilter" /* Int */
|
||||||
#define FC_FONT_FEATURES "fontfeatures" /* String */
|
#define FC_FONT_FEATURES "fontfeatures" /* String */
|
||||||
#define FC_NAMELANG "namelang" /* String RFC 3866 langs */
|
#define FC_NAMELANG "namelang" /* String RFC 3866 langs */
|
||||||
|
#define FC_PRGNAME "prgname" /* String */
|
||||||
|
|
||||||
#define FC_CACHE_SUFFIX ".cache-" FC_CACHE_VERSION
|
#define FC_CACHE_SUFFIX ".cache-" FC_CACHE_VERSION
|
||||||
#define FC_DIR_CACHE_FILE "fonts.cache-" FC_CACHE_VERSION
|
#define FC_DIR_CACHE_FILE "fonts.cache-" FC_CACHE_VERSION
|
||||||
|
|
|
@ -1478,6 +1478,7 @@ FcConfigSubstituteWithPat (FcConfig *config,
|
||||||
FcPattern *p_pat,
|
FcPattern *p_pat,
|
||||||
FcMatchKind kind)
|
FcMatchKind kind)
|
||||||
{
|
{
|
||||||
|
FcValue v;
|
||||||
FcSubst *s;
|
FcSubst *s;
|
||||||
FcSubState *st;
|
FcSubState *st;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1513,6 +1514,12 @@ FcConfigSubstituteWithPat (FcConfig *config,
|
||||||
}
|
}
|
||||||
FcStrListDone (l);
|
FcStrListDone (l);
|
||||||
}
|
}
|
||||||
|
if (FcPatternObjectGet (p, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)
|
||||||
|
{
|
||||||
|
FcChar8 *prgname = FcGetPrgname ();
|
||||||
|
if (prgname)
|
||||||
|
FcPatternObjectAddString (p, FC_PRGNAME_OBJECT, prgname);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case FcMatchFont:
|
case FcMatchFont:
|
||||||
s = config->substFont;
|
s = config->substFont;
|
||||||
|
|
|
@ -104,11 +104,81 @@ retry:
|
||||||
return lang;
|
return lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FcChar8 *default_prgname;
|
||||||
|
|
||||||
|
FcChar8 *
|
||||||
|
FcGetPrgname (void)
|
||||||
|
{
|
||||||
|
FcChar8 *prgname;
|
||||||
|
retry:
|
||||||
|
prgname = fc_atomic_ptr_get (&default_prgname);
|
||||||
|
if (!prgname)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
char buf[MAX_PATH+1];
|
||||||
|
|
||||||
|
/* TODO This is ASCII-only; fix it. */
|
||||||
|
if (GetModuleFileNameA (GetModuleHandle (NULL), buf, sizeof (buf) / sizeof (buf[0])) > 0)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
unsigned int len;
|
||||||
|
|
||||||
|
p = strrchr (buf, '\\');
|
||||||
|
if (p)
|
||||||
|
p++;
|
||||||
|
else
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
len = strlen (p);
|
||||||
|
|
||||||
|
if (len > 4 && 0 == strcmp (p + len - 4, ".exe"))
|
||||||
|
{
|
||||||
|
len -= 4;
|
||||||
|
buf[len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
prgname = FcStrdup (p);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
char buf[8192];
|
||||||
|
unsigned int len;
|
||||||
|
|
||||||
|
len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1);
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = strrchr (buf, '/');
|
||||||
|
if (p)
|
||||||
|
p++;
|
||||||
|
else
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
prgname = FcStrdup (p);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!prgname)
|
||||||
|
prgname = FcStrdup ("");
|
||||||
|
|
||||||
|
if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) {
|
||||||
|
free (prgname);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prgname && !prgname[0])
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return prgname;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FcDefaultFini (void)
|
FcDefaultFini (void)
|
||||||
{
|
{
|
||||||
FcChar8 *lang;
|
FcChar8 *lang;
|
||||||
FcStrSet *langs;
|
FcStrSet *langs;
|
||||||
|
FcChar8 *prgname;
|
||||||
|
|
||||||
lang = fc_atomic_ptr_get (&default_lang);
|
lang = fc_atomic_ptr_get (&default_lang);
|
||||||
if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL)) {
|
if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL)) {
|
||||||
|
@ -120,6 +190,11 @@ FcDefaultFini (void)
|
||||||
FcRefInit (&langs->ref, 1);
|
FcRefInit (&langs->ref, 1);
|
||||||
FcStrSetDestroy (langs);
|
FcStrSetDestroy (langs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prgname = fc_atomic_ptr_get (&default_prgname);
|
||||||
|
if (prgname && fc_atomic_ptr_cmpexch (&default_prgname, prgname, NULL)) {
|
||||||
|
free (prgname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -195,7 +270,7 @@ FcDefaultSubstitute (FcPattern *pattern)
|
||||||
* exact matched "en" has higher score than ll-cc.
|
* exact matched "en" has higher score than ll-cc.
|
||||||
*/
|
*/
|
||||||
v2.type = FcTypeString;
|
v2.type = FcTypeString;
|
||||||
v2.u.s = FcStrdup ("en-us");
|
v2.u.s = (FcChar8 *) "en-us";
|
||||||
if (FcPatternObjectGet (pattern, FC_FAMILYLANG_OBJECT, 0, &v) == FcResultNoMatch)
|
if (FcPatternObjectGet (pattern, FC_FAMILYLANG_OBJECT, 0, &v) == FcResultNoMatch)
|
||||||
{
|
{
|
||||||
FcPatternObjectAdd (pattern, FC_FAMILYLANG_OBJECT, namelang, FcTrue);
|
FcPatternObjectAdd (pattern, FC_FAMILYLANG_OBJECT, namelang, FcTrue);
|
||||||
|
@ -211,7 +286,13 @@ FcDefaultSubstitute (FcPattern *pattern)
|
||||||
FcPatternObjectAdd (pattern, FC_FULLNAMELANG_OBJECT, namelang, FcTrue);
|
FcPatternObjectAdd (pattern, FC_FULLNAMELANG_OBJECT, namelang, FcTrue);
|
||||||
FcPatternObjectAddWithBinding (pattern, FC_FULLNAMELANG_OBJECT, v2, FcValueBindingWeak, FcTrue);
|
FcPatternObjectAddWithBinding (pattern, FC_FULLNAMELANG_OBJECT, v2, FcValueBindingWeak, FcTrue);
|
||||||
}
|
}
|
||||||
FcFree (v2.u.s);
|
|
||||||
|
if (FcPatternObjectGet (pattern, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)
|
||||||
|
{
|
||||||
|
FcChar8 *prgname = FcGetPrgname ();
|
||||||
|
if (prgname)
|
||||||
|
FcPatternObjectAddString (pattern, FC_PRGNAME_OBJECT, prgname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#define __fcdefault__
|
#define __fcdefault__
|
||||||
#include "fcaliastail.h"
|
#include "fcaliastail.h"
|
||||||
|
|
|
@ -770,6 +770,9 @@ FcInitDebug (void);
|
||||||
FcPrivate FcChar8 *
|
FcPrivate FcChar8 *
|
||||||
FcGetDefaultLang (void);
|
FcGetDefaultLang (void);
|
||||||
|
|
||||||
|
FcPrivate FcChar8 *
|
||||||
|
FcGetPrgname (void);
|
||||||
|
|
||||||
FcPrivate void
|
FcPrivate void
|
||||||
FcDefaultFini (void);
|
FcDefaultFini (void);
|
||||||
|
|
||||||
|
|
|
@ -42,4 +42,5 @@ FC_OBJECT (DECORATIVE, FcTypeBool)
|
||||||
FC_OBJECT (LCD_FILTER, FcTypeInteger)
|
FC_OBJECT (LCD_FILTER, FcTypeInteger)
|
||||||
FC_OBJECT (NAMELANG, FcTypeString)
|
FC_OBJECT (NAMELANG, FcTypeString)
|
||||||
FC_OBJECT (FONT_FEATURES, FcTypeString)
|
FC_OBJECT (FONT_FEATURES, FcTypeString)
|
||||||
|
FC_OBJECT (PRGNAME, FcTypeString)
|
||||||
/* ^-------------- Add new objects here. */
|
/* ^-------------- Add new objects here. */
|
||||||
|
|
Loading…
Reference in New Issue