Define u8_casefold as a wrapper around u8_ct_casefold.
authorBruno Haible <bruno@clisp.org>
Mon, 29 Jun 2009 22:17:58 +0000 (00:17 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 29 Jun 2009 22:17:58 +0000 (00:17 +0200)
ChangeLog
lib/unicase/u-casefold.h
lib/unicase/u8-casefold.c
modules/unicase/u8-casefold

index e5aa1a2..cb931ac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-06-29  Bruno Haible  <bruno@clisp.org>
 
+       Define u8_casefold as a wrapper around u8_ct_casefold.
+       * lib/unicase/u-casefold.h (FUNC): Delegate to U_CT_CASEFOLD.
+       * lib/unicase/u8-casefold.c: Update.
+       * modules/unicase/u8-casefold (Depends-on): Add unicase/u8-ct-casefold,
+       unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up.
+
        Define u32_totitle as a wrapper around u32_ct_totitle.
        * lib/unicase/u32-totitle.c: Update.
        * modules/unicase/u32-totitle (Depends-on): Add unicase/u32-ct-totitle,
index 01699fc..c41f4e1 100644 (file)
@@ -20,84 +20,9 @@ FUNC (const UNIT *s, size_t n, const char *iso639_language,
       uninorm_t nf,
       UNIT *resultbuf, size_t *lengthp)
 {
-  /* Implement the three definitions of caseless matching, as described in
-     Unicode 5.0, section "Default caseless matching":
-       - If no normalization is requested, simply apply the casefolding.
-           X -> toCasefold(X).
-       - If canonical normalization is requested, apply it, and apply an NFD
-         before.
-           X -> NFD(toCasefold(NFD(X))).
-       - If compatibility normalization is requested, apply it twice, apply
-         the normalization after each, and apply an NFD before:
-           X -> NFKD(toCasefold(NFKD(toCasefold(NFD(X))))).  */
-  if (nf == NULL)
-    /* X -> toCasefold(X) */
-    return U_CASEMAP (s, n, iso639_language,
-                     uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]),
-                     NULL,
-                     resultbuf, lengthp);
-  else
-    {
-      uninorm_t nfd = uninorm_decomposing_form (nf);
-      /* X -> nf(toCasefold(NFD(X))) or
-        X -> nf(toCasefold(nfd(toCasefold(NFD(X)))))  */
-      int repeat = (uninorm_is_compat_decomposing (nf) ? 2 : 1);
-      UNIT tmpbuf1[2048 / sizeof (UNIT)];
-      UNIT tmpbuf2[2048 / sizeof (UNIT)];
-      UNIT *tmp1;
-      size_t tmp1_length;
-      UNIT *tmp2;
-      size_t tmp2_length;
-
-      tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT);
-      tmp1 = U_NORMALIZE (UNINORM_NFD, s, n, tmpbuf1, &tmp1_length);
-      if (tmp1 == NULL)
-       /* errno is set here.  */
-       return NULL;
-
-      do
-       {
-         tmp2_length = sizeof (tmpbuf2) / sizeof (UNIT);
-         tmp2 = U_CASEMAP (tmp1, tmp1_length, iso639_language,
-                           uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]),
-                           NULL,
-                           tmpbuf2, &tmp2_length);
-         if (tmp2 == NULL)
-           {
-             int saved_errno = errno;
-             if (tmp1 != tmpbuf1)
-               free (tmp1);
-             errno = saved_errno;
-             return NULL;
-           }
-
-         if (tmp1 != tmpbuf1)
-           free (tmp1);
-
-         if (repeat > 1)
-           {
-             tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT);
-             tmp1 = U_NORMALIZE (nfd, tmp2, tmp2_length,
-                                 tmpbuf1, &tmp1_length);
-           }
-         else
-           /* Last run through this loop.  */
-           tmp1 = U_NORMALIZE (nf, tmp2, tmp2_length,
-                               resultbuf, lengthp);
-         if (tmp1 == NULL)
-           {
-             int saved_errno = errno;
-             if (tmp2 != tmpbuf2)
-               free (tmp2);
-             errno = saved_errno;
-             return NULL;
-           }
-
-         if (tmp2 != tmpbuf2)
-           free (tmp2);
-       }
-      while (--repeat > 0);
-
-      return tmp1;
-    }
+  return U_CT_CASEFOLD (s, n,
+                       unicase_empty_prefix_context, unicase_empty_suffix_context,
+                       iso639_language,
+                       nf,
+                       resultbuf, lengthp);
 }
index f0f71f2..3210813 100644 (file)
 /* Specification.  */
 #include "unicase.h"
 
-#include <errno.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-#include "unicasemap.h"
-#include "special-casing.h"
-#include "casefold.h"
-
 #define FUNC u8_casefold
 #define UNIT uint8_t
-#define U_CASEMAP u8_casemap
-#define U_NORMALIZE u8_normalize
+#define U_CT_CASEFOLD u8_ct_casefold
 #include "u-casefold.h"
 
 
index 5996151..1687184 100644 (file)
@@ -7,12 +7,9 @@ lib/unicase/u-casefold.h
 
 Depends-on:
 unicase/base
-unicase/u8-casemap
-unicase/special-casing
-unicase/tocasefold
-uninorm/decomposing-form
-uninorm/u8-normalize
-uninorm/nfd
+unicase/u8-ct-casefold
+unicase/empty-prefix-context
+unicase/empty-suffix-context
 
 configure.ac: