]> mj.ucw.cz Git - libucw.git/blobdiff - charset/unicode.h
Export functions for explicit locking.
[libucw.git] / charset / unicode.h
index 5319e3718cbbe320ab07a3ded966dee771e0a86e..c0afc17abc9da1cb5c2e172385f7a272cd92de19 100644 (file)
@@ -1,16 +1,18 @@
 /*
  *     The UniCode Library
  *
- *     (c) 1997 Martin Mares, <mj@atrey.karlin.mff.cuni.cz>
+ *     (c) 1997 Martin Mares <mj@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
 #ifndef _UNICODE_H
 #define _UNICODE_H
 
-#include <lib/config.h>
-#include <lib/string.h>
+#include "lib/chartype.h"
 
-extern byte *_U_cat[], *_U_sig[];
+extern byte *_U_cat[];
 extern word *_U_upper[], *_U_lower[], *_U_unaccent[];
 
 static inline uns Ucategory(word x)
@@ -39,14 +41,6 @@ static inline word Uunaccent(word x)
   return w ? w : x;
 }
 
-static inline byte Usig(word x)
-{
-  if (_U_sig[x >> 8U])
-    return _U_sig[x >> 8U][x & 0xff] ? : 0xff;
-  else
-    return 0xff;
-}
-
 #define UCat(x,y) (Ucategory(x) & (y))
 
 #define Uupper(x) UCat(x, _C_UPPER)
@@ -111,6 +105,13 @@ static inline byte Usig(word x)
     else                               \
       u = *p++
 
+#define UTF8_SKIP(p) do {                              \
+    uns c = *p++;                                      \
+    if (c >= 0xc0)                                     \
+      while (c & 0x40 && *p >= 0x80 && *p < 0xc0)      \
+        p++, c <<= 1;                                  \
+  } while (0)
+
 #define UTF8_SPACE(u) ((u) < 0x80 ? 1 : (u) < 0x800 ? 2 : 3)
 
 uns ucs2_to_utf8(byte *, word *);