Compare commits
1 Commits
main
...
ultra-weig
Author | SHA1 | Date |
---|---|---|
Keith Packard | 4e21e6f6e6 |
|
@ -935,8 +935,18 @@ FcStringContainsConst (const FcChar8 *string,
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < nc; i++)
|
for (i = 0; i < nc; i++)
|
||||||
if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name))
|
{
|
||||||
return c[i].value;
|
if (c[i].name[0] == '<')
|
||||||
|
{
|
||||||
|
if (FcStrContainsWord (string, c[i].name + 1))
|
||||||
|
return c[i].value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name))
|
||||||
|
return c[i].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,6 +968,8 @@ static const FcStringConst weightConsts[] = {
|
||||||
{ (FC8) "superbold", FC_WEIGHT_EXTRABOLD },
|
{ (FC8) "superbold", FC_WEIGHT_EXTRABOLD },
|
||||||
{ (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD },
|
{ (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD },
|
||||||
{ (FC8) "bold", FC_WEIGHT_BOLD },
|
{ (FC8) "bold", FC_WEIGHT_BOLD },
|
||||||
|
{ (FC8) "<ultra", FC_WEIGHT_ULTRABOLD }, /* only if a word */
|
||||||
|
{ (FC8) "bold", FC_WEIGHT_BOLD },
|
||||||
{ (FC8) "black", FC_WEIGHT_BLACK },
|
{ (FC8) "black", FC_WEIGHT_BLACK },
|
||||||
{ (FC8) "heavy", FC_WEIGHT_HEAVY },
|
{ (FC8) "heavy", FC_WEIGHT_HEAVY },
|
||||||
};
|
};
|
||||||
|
|
|
@ -1046,6 +1046,9 @@ FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
const FcChar8 *
|
const FcChar8 *
|
||||||
FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
|
FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
|
|
||||||
|
const FcChar8 *
|
||||||
|
FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcStrUsesHome (const FcChar8 *s);
|
FcStrUsesHome (const FcChar8 *s);
|
||||||
|
|
||||||
|
|
50
src/fcstr.c
50
src/fcstr.c
|
@ -320,6 +320,26 @@ FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FcBool
|
||||||
|
FcCharIsPunct (const FcChar8 c)
|
||||||
|
{
|
||||||
|
if (c < '0')
|
||||||
|
return FcTrue;
|
||||||
|
if (c <= '9')
|
||||||
|
return FcFalse;
|
||||||
|
if (c < 'A')
|
||||||
|
return FcTrue;
|
||||||
|
if (c <= 'Z')
|
||||||
|
return FcFalse;
|
||||||
|
if (c < 'a')
|
||||||
|
return FcTrue;
|
||||||
|
if (c <= 'z')
|
||||||
|
return FcFalse;
|
||||||
|
if (c <= '~')
|
||||||
|
return FcTrue;
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is the head of s1 equal to s2?
|
* Is the head of s1 equal to s2?
|
||||||
*/
|
*/
|
||||||
|
@ -344,7 +364,7 @@ FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Does s1 contain an instance of s2 (ignoring blanks and case)?
|
* Does s1 contain an instance of s2 (ignoring case)?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const FcChar8 *
|
const FcChar8 *
|
||||||
|
@ -359,6 +379,34 @@ FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Does s1 contain an instance of s2 on a word boundary (ignoring case)?
|
||||||
|
*/
|
||||||
|
|
||||||
|
const FcChar8 *
|
||||||
|
FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
|
{
|
||||||
|
FcBool wordStart = FcTrue;
|
||||||
|
int s1len = strlen ((char *) s1);
|
||||||
|
int s2len = strlen ((char *) s2);
|
||||||
|
|
||||||
|
while (s1len >= s2len)
|
||||||
|
{
|
||||||
|
if (wordStart &&
|
||||||
|
FcStrIsAtIgnoreCase (s1, s2) &&
|
||||||
|
(s1len == s2len || FcCharIsPunct (s1[s2len])))
|
||||||
|
{
|
||||||
|
return s1;
|
||||||
|
}
|
||||||
|
wordStart = FcFalse;
|
||||||
|
if (FcCharIsPunct (*s1))
|
||||||
|
wordStart = FcTrue;
|
||||||
|
s1++;
|
||||||
|
s1len--;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const FcChar8 *
|
const FcChar8 *
|
||||||
FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue