X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcstr.c;h=6068596679929c8af6c15ca98620b5d39a1a275d;hb=4ee9ca67867ec9517c90d6947bb88d3f25707746;hp=368761dfb65d2eca3fa8b76412f47a7e0387e3af;hpb=1de7a4cc09172bbc99912e1410f46fc16c1a05ec;p=fontconfig.git diff --git a/src/fcstr.c b/src/fcstr.c index 368761d..6068596 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -323,6 +323,26 @@ FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) 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? */ @@ -347,7 +367,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 * @@ -362,6 +382,34 @@ FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) 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 * FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) { @@ -833,7 +881,7 @@ FcStrBasename (const FcChar8 *file) return FcStrCopy (slash + 1); } -FcChar8 * +static FcChar8 * FcStrCanonAbsoluteFilename (const FcChar8 *s) { FcChar8 *file;