[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