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>
|
||||
|
||||
* .cvsignore:
|
||||
|
|
|
@ -749,9 +749,13 @@ FcStrCopy (const FcChar8 *s);
|
|||
FcChar8 *
|
||||
FcStrCopyFilename (const FcChar8 *s);
|
||||
|
||||
#define FcIsUpper(c) (('A' <= (c) && (c) <= 'Z'))
|
||||
#define FcIsLower(c) (('a' <= (c) && (c) <= 'z'))
|
||||
#define FcToLower(c) (FcIsUpper(c) ? (c) - 'A' + 'a' : (c))
|
||||
/* These are ASCII only, suitable only for pattern element names */
|
||||
#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132))
|
||||
#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172))
|
||||
#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
|
||||
|
||||
FcChar8 *
|
||||
FcStrDowncase (const FcChar8 *s);
|
||||
|
||||
int
|
||||
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;
|
||||
int slen;
|
||||
|
||||
slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len);
|
||||
slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len + 1);
|
||||
if (slen <= 0)
|
||||
return r;
|
||||
if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
|
||||
|
@ -188,6 +188,25 @@ FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
|
|||
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
|
||||
FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue