New functions next_utf8_char and nth_utf8_char.
authorPeter Verthez <Peter.Verthez@advalvas.be>
Sat, 1 Feb 2003 16:50:51 +0000 (16:50 +0000)
committerPeter Verthez <Peter.Verthez@advalvas.be>
Sat, 1 Feb 2003 16:50:51 +0000 (16:50 +0000)
utf8/ChangeLog
utf8/utf8.c
utf8/utf8tools.h

index 3420dabe2d3d3d1d1dcaec956f69f3e1c27f6fff..d23aad350375594573b081b57e7775dec6590fb7 100644 (file)
@@ -1,3 +1,7 @@
+2003-02-01  Peter Verthez  <Peter.Verthez@advalvas.be>
+
+       * utf8tools.h, utf8.c: New functions next_utf8_char and nth_utf8_char.
+
 2002-12-30  Peter Verthez  <Peter.Verthez@advalvas.be>
 
        * release 0.1.0
index e3809b99dc7cc0f917d7980828de0c1337d39dfe..6c5f5be81745c05b93e73e0b7b6023c069de57d0 100644 (file)
@@ -21,6 +21,7 @@
 /* $Name$ */
 
 #include "utf8tools.h"
+#include <string.h>
 
 int is_utf8_string(const char* str)
 {
@@ -78,11 +79,37 @@ int utf8_strlen(const char* str)
   if (!str) return 0;
   
   while (*str) {
-    if ((*str & 0x80) == 0 || (*str & 0xC0) == 0xC0)
-      num_char++;
+    if ((*str & 0xC0) != 0xC0) num_char++;
     str++;
   }
   
   return num_char;
 }
 
+char* next_utf8_char(char* str)
+{
+  if (!str) return NULL;
+
+  if (*str) {
+    str++;
+    while (*str && (*str & 0xC0) == 0x80)
+      str++;
+  }
+  return str;
+}
+
+char* nth_utf8_char(char* str, int n)
+{
+  int num_char = 0;
+  if (!str) return NULL;
+
+  if (*str) {
+    str++;
+    while (*str) {
+      if ((*str & 0xC0) != 0x80) num_char++;
+      if (num_char == n) break;
+      str++;
+    }
+  }
+  return str;
+}
index 0eca7da82f36bf5aa72efff4d609d540f64c7c02..d2e4e981126d8e50577cf95f98ce2457e2f000dc 100644 (file)
@@ -41,6 +41,12 @@ int   utf8_strlen(const char* input);
   /* Returns 1 if string is valid UTF-8 string, 0 otherwise */
 int   is_utf8_string(const char* input);
 
+  /* Returns respectively a pointer to the next or the nth UTF-8 character.
+     The value n = 0 is the first character of the input, i.e.
+     next_utf8_char(input) is the same as nth_utf8_char(input, 1) */
+char* next_utf8_char(char* input);
+char* nth_utf8_char(char* input, int n);
+
   /* Functions for creating and freeing conversion buffers yourself */
 conv_buffer_t create_conv_buffer(int size);
 void free_conv_buffer(conv_buffer_t buf);