Fix #27445: various operators missing with some non-english system languages.

In the case of this bug e.g. material.new became MATERiAL_OT_new, due to
different capitalization of "i" in Turkish. Fixed by not using the locale
dependent toupper/tolower functions.
This commit is contained in:
Brecht Van Lommel 2011-05-26 09:58:22 +00:00
parent 686859afad
commit 042a3ff382
3 changed files with 31 additions and 7 deletions

@ -147,6 +147,9 @@ void BLI_timestr(double _time, char *str); /* time var is global */
int BLI_utf8_invalid_byte(const char *str, int length);
int BLI_utf8_invalid_strip(char *str, int length);
void BLI_ascii_strtolower(char *str, int len);
void BLI_ascii_strtoupper(char *str, int len);
#ifdef __cplusplus
}
#endif

@ -469,3 +469,21 @@ int BLI_utf8_invalid_strip(char *str, int length)
return tot;
}
void BLI_ascii_strtolower(char *str, int len)
{
int i;
for(i=0; i<len; i++)
if(str[i] >= 'A' && str[i] <= 'Z')
str[i] += 'a' - 'A';
}
void BLI_ascii_strtoupper(char *str, int len)
{
int i;
for(i=0; i<len; i++)
if(str[i] >= 'a' && str[i] <= 'z')
str[i] -= 'a' - 'A';
}

@ -56,6 +56,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h" /*for WM_operator_pystring */
#include "BLI_math.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BLO_readfile.h"
@ -441,10 +442,12 @@ void WM_operator_py_idname(char *to, const char *from)
{
char *sep= strstr(from, "_OT_");
if(sep) {
int i, ofs= (sep-from);
int ofs= (sep-from);
for(i=0; i<ofs; i++)
to[i]= tolower(from[i]);
/* note, we use ascii tolower instead of system tolower, because the
latter depends on the locale, and can lead to idname mistmatch */
memcpy(to, from, sizeof(char)*ofs);
BLI_ascii_strtolower(to, ofs);
to[ofs] = '.';
BLI_strncpy(to+(ofs+1), sep+4, OP_MAX_TYPENAME);
@ -462,10 +465,10 @@ void WM_operator_bl_idname(char *to, const char *from)
char *sep= strchr(from, '.');
if(sep) {
int i, ofs= (sep-from);
int ofs= (sep-from);
for(i=0; i<ofs; i++)
to[i]= toupper(from[i]);
memcpy(to, from, sizeof(char)*ofs);
BLI_ascii_strtoupper(to, ofs);
BLI_strncpy(to+ofs, "_OT_", OP_MAX_TYPENAME);
BLI_strncpy(to+(ofs+4), sep+1, OP_MAX_TYPENAME);