Document ASCII limitations of Fc character conversion macros
Fix off-by-one error in utf-8 case walking code. Add FcStrDowncase (useful for testing case conversion functions)
This commit is contained in:
parent
02748dd3b8
commit
479f551f6d
|
@ -1,3 +1,11 @@
|
||||||
|
2004-12-29 Keith Packard <keithp@keithp.com>
|
||||||
|
|
||||||
|
* fontconfig/fontconfig.h:
|
||||||
|
Document ASCII limitations of Fc character conversion macros
|
||||||
|
* src/fcstr.c: (FcStrCaseWalkerLong), (FcStrDowncase):
|
||||||
|
Fix off-by-one error in utf-8 case walking code.
|
||||||
|
Add FcStrDowncase (useful for testing case conversion functions)
|
||||||
|
|
||||||
2004-12-29 Keith Packard <keithp@keithp.com>
|
2004-12-29 Keith Packard <keithp@keithp.com>
|
||||||
|
|
||||||
* .cvsignore:
|
* .cvsignore:
|
||||||
|
|
|
@ -749,9 +749,13 @@ FcStrCopy (const FcChar8 *s);
|
||||||
FcChar8 *
|
FcChar8 *
|
||||||
FcStrCopyFilename (const FcChar8 *s);
|
FcStrCopyFilename (const FcChar8 *s);
|
||||||
|
|
||||||
#define FcIsUpper(c) (('A' <= (c) && (c) <= 'Z'))
|
/* These are ASCII only, suitable only for pattern element names */
|
||||||
#define FcIsLower(c) (('a' <= (c) && (c) <= 'z'))
|
#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132))
|
||||||
#define FcToLower(c) (FcIsUpper(c) ? (c) - 'A' + 'a' : (c))
|
#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172))
|
||||||
|
#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
|
||||||
|
|
||||||
|
FcChar8 *
|
||||||
|
FcStrDowncase (const FcChar8 *s);
|
||||||
|
|
||||||
int
|
int
|
||||||
FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
|
FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
|
|
21
src/fcstr.c
21
src/fcstr.c
|
@ -92,7 +92,7 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
|
||||||
FcChar32 ucs4;
|
FcChar32 ucs4;
|
||||||
int slen;
|
int slen;
|
||||||
|
|
||||||
slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len);
|
slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len + 1);
|
||||||
if (slen <= 0)
|
if (slen <= 0)
|
||||||
return r;
|
return r;
|
||||||
if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
|
if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
|
||||||
|
@ -188,6 +188,25 @@ FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FcChar8 *
|
||||||
|
FcStrDowncase (const FcChar8 *s)
|
||||||
|
{
|
||||||
|
FcCaseWalker w;
|
||||||
|
int len = 0;
|
||||||
|
FcChar8 *dst, *d;
|
||||||
|
|
||||||
|
FcStrCaseWalkerInit (s, &w);
|
||||||
|
while (FcStrCaseWalkerNext (&w))
|
||||||
|
len++;
|
||||||
|
d = dst = malloc (len + 1);
|
||||||
|
if (!d)
|
||||||
|
return 0;
|
||||||
|
FcMemAlloc (FC_MEM_STRING, len + 1);
|
||||||
|
FcStrCaseWalkerInit (s, &w);
|
||||||
|
while ((*d++ = FcStrCaseWalkerNext (&w)));
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue