[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41140] trunk/blender/source/blender: - add BLI_string_utf8.h for unicode functions.

Campbell Barton ideasman42 at gmail.com
Thu Oct 20 11:47:06 CEST 2011


Revision: 41140
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41140
Author:   campbellbarton
Date:     2011-10-20 09:47:05 +0000 (Thu, 20 Oct 2011)
Log Message:
-----------
- add BLI_string_utf8.h for unicode functions.
- move font.c unicode functions into string_utf8.c and rename to fit with other BLI_string funcs.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_font.h
    trunk/blender/source/blender/blenkernel/intern/font.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/smoke.c
    trunk/blender/source/blender/blenlib/BLI_blenlib.h
    trunk/blender/source/blender/blenlib/BLI_string.h
    trunk/blender/source/blender/blenlib/CMakeLists.txt
    trunk/blender/source/blender/blenlib/intern/BLI_args.c
    trunk/blender/source/blender/blenlib/intern/string_utf8.c
    trunk/blender/source/blender/editors/curve/editfont.c
    trunk/blender/source/blender/editors/interface/interface_anim.c
    trunk/blender/source/blender/editors/interface/interface_draw.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/space_file/fsmenu.c
    trunk/blender/source/blender/imbuf/intern/indexer.c
    trunk/blender/source/blender/makesrna/intern/rna_curve.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/python/generic/py_capi_utils.c
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Added Paths:
-----------
    trunk/blender/source/blender/blenlib/BLI_string_utf8.h

Modified: trunk/blender/source/blender/blenkernel/BKE_font.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_font.h	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenkernel/BKE_font.h	2011-10-20 09:47:05 UTC (rev 41140)
@@ -85,11 +85,6 @@
 
 int BKE_font_getselection(struct Object *ob, int *start, int *end);
 
-size_t chtoutf8(const unsigned long c, char o[4]);
-void wcs2utf8s(char *dst, const wchar_t *src);
-size_t wcsleninu8(wchar_t *src);
-size_t utf8towchar(wchar_t *w, const char *c);
-
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenkernel/intern/font.c	2011-10-20 09:47:05 UTC (rev 41140)
@@ -64,142 +64,6 @@
 
 static ListBase ttfdata= {NULL, NULL};
 
-/* UTF-8 <-> wchar transformations */
-size_t chtoutf8(const unsigned long c, char o[4])
-{
-	// Variables and initialization
-/*	memset(o, 0, 4);	*/
-
-	// Create the utf-8 string
-	if (c < 0x80) {
-		o[0] = (char) c;
-		return 1;
-	}
-	else if (c < 0x800) {
-		o[0] = (0xC0 | (c>>6));
-		o[1] = (0x80 | (c & 0x3f));
-		return 2;
-	}
-	else if (c < 0x10000) {
-		o[0] = (0xe0 | (c >> 12));
-		o[1] = (0x80 | (c >>6 & 0x3f));
-		o[2] = (0x80 | (c & 0x3f));
-		return 3;
-	}
-	else if (c < 0x200000) {
-		o[0] = (0xf0 | (c>>18));
-		o[1] = (0x80 | (c >>12 & 0x3f));
-		o[2] = (0x80 | (c >> 6 & 0x3f));
-		o[3] = (0x80 | (c & 0x3f));
-		return 4;
-	}
-
-	/* should we assert here? */
-	return 0;
-}
-
-void wcs2utf8s(char *dst, const wchar_t *src)
-{
-	while(*src) {
-		dst += chtoutf8(*src++, dst);
-	}
-
-	*dst= '\0';
-}
-
-size_t wcsleninu8(wchar_t *src)
-{
-	char ch_dummy[4];
-	size_t len = 0;
-
-	while(*src) {
-		len += chtoutf8(*src++, ch_dummy);
-	}
-
-	return len;
-}
-
-static size_t utf8slen(const char *strc)
-{
-	int len=0;
-
-	while(*strc) {
-		if ((*strc & 0xe0) == 0xc0) {
-			if((strc[1] & 0x80) && (strc[1] & 0x40) == 0x00)
-				strc++;
-		} else if ((*strc & 0xf0) == 0xe0) {
-			if((strc[1] & strc[2] & 0x80) && ((strc[1] | strc[2]) & 0x40) == 0x00)
-				strc += 2;
-		} else if ((*strc & 0xf8) == 0xf0) {
-			if((strc[1] & strc[2] & strc[3] & 0x80) && ((strc[1] | strc[2] | strc[3]) & 0x40) == 0x00)
-				strc += 3;
-		}
-
-		strc++;
-		len++;
-	}
-
-	return len;
-}
-
-
-/* Converts Unicode to wchar
-
-According to RFC 3629 "UTF-8, a transformation format of ISO 10646"
-(http://tools.ietf.org/html/rfc3629), the valid UTF-8 encoding are:
-
-  Char. number range  |        UTF-8 octet sequence
-	  (hexadecimal)    |              (binary)
-   --------------------+---------------------------------------------
-   0000 0000-0000 007F | 0xxxxxxx
-   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
-   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
-   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-
-If the encoding incidated by the first character is incorrect (because the
-1 to 3 following characters do not match 10xxxxxx), the output is a '?' and
-only a single input character is consumed.
-
-*/
-
-size_t utf8towchar(wchar_t *w, const char *c)
-{
-	int len=0;
-
-	if(w==NULL || c==NULL) return(0);
-
-	while(*c) {
-		if ((*c & 0xe0) == 0xc0) {
-			if((c[1] & 0x80) && (c[1] & 0x40) == 0x00) {
-				*w=((c[0] &0x1f)<<6) | (c[1]&0x3f);
-				c++;
-			} else {
-				*w = '?';
-			}
-		} else if ((*c & 0xf0) == 0xe0) {
-			if((c[1] & c[2] & 0x80) && ((c[1] | c[2]) & 0x40) == 0x00) {
-				*w=((c[0] & 0x0f)<<12) | ((c[1]&0x3f)<<6) | (c[2]&0x3f);
-				c += 2;
-			} else {
-				*w = '?';
-			}
-		} else if ((*c & 0xf8) == 0xf0) {
-			if((c[1] & c[2] & c[3] & 0x80) && ((c[1] | c[2] | c[3]) & 0x40) == 0x00) {
-				*w=((c[0] & 0x07)<<18) | ((c[1]&0x1f)<<12) | ((c[2]&0x3f)<<6) | (c[3]&0x3f);
-				c += 3;
-			} else {
-				*w = '?';
-			}
-		} else
-			*w=(c[0] & 0x7f);
-
-		c++;
-		w++;
-		len++;
-	}
-	return len;
-}
-
 /* The vfont code */
 void free_vfont(struct VFont *vf)
 {
@@ -691,10 +555,10 @@
 	if(vfont == NULL) return NULL;
 
 	// Create unicode string
-	utf8len = utf8slen(cu->str);
+	utf8len = BLI_strlen_utf8(cu->str);
 	mem = MEM_callocN(((utf8len + 1) * sizeof(wchar_t)), "convertedmem");
 	
-	utf8towchar(mem, cu->str);
+	BLI_strncpy_wchar_from_utf8(mem, cu->str, utf8len + 1);
 
 	// Count the wchar_t string length
 	slen = wcslen(mem);

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-10-20 09:47:05 UTC (rev 41140)
@@ -70,7 +70,6 @@
 #include "BLI_listbase.h"
 #include "BLI_threads.h"
 #include "BLI_storage.h" /* For _LARGEFILE64_SOURCE;  zlib needs this on some systems */
-#include "BLI_string.h"
 #include "BLI_utildefines.h"
 
 #include "BKE_main.h"

Modified: trunk/blender/source/blender/blenkernel/intern/smoke.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/smoke.c	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenkernel/intern/smoke.c	2011-10-20 09:47:05 UTC (rev 41140)
@@ -812,13 +812,12 @@
 	}
 }
 
+#ifdef WITH_SMOKE
 
 // forward decleration
 static void smoke_calc_transparency(float *result, float *input, float *p0, float *p1, int res[3], float dx, float *light, bresenham_callback cb, float correct);
 static float calc_voxel_transp(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
 
-#ifdef WITH_SMOKE
-
 static int get_lamp(Scene *scene, float *light)
 {	
 	Base *base_tmp = NULL;	

Modified: trunk/blender/source/blender/blenlib/BLI_blenlib.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_blenlib.h	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenlib/BLI_blenlib.h	2011-10-20 09:47:05 UTC (rev 41140)
@@ -74,6 +74,8 @@
 
 #include "BLI_string.h"
 
+#include "BLI_string_utf8.h"
+
 #include "BLI_path_util.h"
 
 #include "BLI_storage.h"

Modified: trunk/blender/source/blender/blenlib/BLI_string.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_string.h	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenlib/BLI_string.h	2011-10-20 09:47:05 UTC (rev 41140)
@@ -25,9 +25,7 @@
  * Contributor(s): none yet.
  *
  * ***** END GPL LICENSE BLOCK *****
- *
- * $Id$ 
-*/
+ */
 
 #ifndef BLI_STRING_H
 #define BLI_STRING_H
@@ -142,16 +140,6 @@
 void BLI_ascii_strtolower(char *str, int len);
 void BLI_ascii_strtoupper(char *str, int len);
 
-
-/* string_utf8.c - may move these into their own header some day - campbell */
-char *BLI_strncpy_utf8(char *dst, const char *src, size_t maxncpy);
-int BLI_utf8_invalid_byte(const char *str, int length);
-int BLI_utf8_invalid_strip(char *str, int length);
-      /* copied from glib */
-char *BLI_str_find_prev_char_utf8(const char *str, const char *p);
-char *BLI_str_find_next_char_utf8(const char *p, const char *end);
-char *BLI_str_prev_char_utf8(const char *p);
-
 #ifdef __cplusplus
 }
 #endif

Added: trunk/blender/source/blender/blenlib/BLI_string_utf8.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_string_utf8.h	                        (rev 0)
+++ trunk/blender/source/blender/blenlib/BLI_string_utf8.h	2011-10-20 09:47:05 UTC (rev 41140)
@@ -0,0 +1,55 @@
+/*
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BLI_STRING_UTF8_H
+#define BLI_STRING_UTF8_H
+
+/** \file BLI_string.h
+ *  \ingroup bli
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char       *BLI_strncpy_utf8(char *dst, const char *src, size_t maxncpy);
+int         BLI_utf8_invalid_byte(const char *str, int length);
+int         BLI_utf8_invalid_strip(char *str, int length);
+
+    /* copied from glib */
+char       *BLI_str_find_prev_char_utf8(const char *str, const char *p);
+char       *BLI_str_find_next_char_utf8(const char *p, const char *end);
+char       *BLI_str_prev_char_utf8(const char *p);
+
+    /* wchar_t functions, copied from blenders own font.c originally */
+size_t      BLI_wstrlen_utf8(const wchar_t *src);
+size_t      BLI_strlen_utf8(const char *strc);
+size_t      BLI_strncpy_wchar_as_utf8(char *dst, const wchar_t *src, const size_t maxcpy);
+size_t      BLI_strncpy_wchar_from_utf8(wchar_t *dst, const char *src, const size_t maxcpy);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Modified: trunk/blender/source/blender/blenlib/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenlib/CMakeLists.txt	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenlib/CMakeLists.txt	2011-10-20 09:47:05 UTC (rev 41140)
@@ -128,6 +128,7 @@
 	BLI_storage.h
 	BLI_storage_types.h
 	BLI_string.h
+	BLI_string_utf8.h
 	BLI_threads.h
 	BLI_utildefines.h
 	BLI_uvproject.h

Modified: trunk/blender/source/blender/blenlib/intern/BLI_args.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_args.c	2011-10-20 08:32:26 UTC (rev 41139)
+++ trunk/blender/source/blender/blenlib/intern/BLI_args.c	2011-10-20 09:47:05 UTC (rev 41140)
@@ -39,7 +39,6 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_listbase.h"
-#include "BLI_string.h"
 #include "BLI_utildefines.h"
 #include "BLI_args.h"
 #include "BLI_ghash.h"


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list