forked from bartvdbraak/blender
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:
parent
686859afad
commit
042a3ff382
@ -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_byte(const char *str, int length);
|
||||||
int BLI_utf8_invalid_strip(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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -469,3 +469,21 @@ int BLI_utf8_invalid_strip(char *str, int length)
|
|||||||
return tot;
|
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_blenlib.h"
|
||||||
#include "BLI_dynstr.h" /*for WM_operator_pystring */
|
#include "BLI_dynstr.h" /*for WM_operator_pystring */
|
||||||
#include "BLI_math.h"
|
#include "BLI_math.h"
|
||||||
|
#include "BLI_string.h"
|
||||||
#include "BLI_utildefines.h"
|
#include "BLI_utildefines.h"
|
||||||
|
|
||||||
#include "BLO_readfile.h"
|
#include "BLO_readfile.h"
|
||||||
@ -441,10 +442,12 @@ void WM_operator_py_idname(char *to, const char *from)
|
|||||||
{
|
{
|
||||||
char *sep= strstr(from, "_OT_");
|
char *sep= strstr(from, "_OT_");
|
||||||
if(sep) {
|
if(sep) {
|
||||||
int i, ofs= (sep-from);
|
int ofs= (sep-from);
|
||||||
|
|
||||||
for(i=0; i<ofs; i++)
|
/* note, we use ascii tolower instead of system tolower, because the
|
||||||
to[i]= tolower(from[i]);
|
latter depends on the locale, and can lead to idname mistmatch */
|
||||||
|
memcpy(to, from, sizeof(char)*ofs);
|
||||||
|
BLI_ascii_strtolower(to, ofs);
|
||||||
|
|
||||||
to[ofs] = '.';
|
to[ofs] = '.';
|
||||||
BLI_strncpy(to+(ofs+1), sep+4, OP_MAX_TYPENAME);
|
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, '.');
|
char *sep= strchr(from, '.');
|
||||||
|
|
||||||
if(sep) {
|
if(sep) {
|
||||||
int i, ofs= (sep-from);
|
int ofs= (sep-from);
|
||||||
|
|
||||||
for(i=0; i<ofs; i++)
|
memcpy(to, from, sizeof(char)*ofs);
|
||||||
to[i]= toupper(from[i]);
|
BLI_ascii_strtoupper(to, ofs);
|
||||||
|
|
||||||
BLI_strncpy(to+ofs, "_OT_", OP_MAX_TYPENAME);
|
BLI_strncpy(to+ofs, "_OT_", OP_MAX_TYPENAME);
|
||||||
BLI_strncpy(to+(ofs+4), sep+1, OP_MAX_TYPENAME);
|
BLI_strncpy(to+(ofs+4), sep+1, OP_MAX_TYPENAME);
|
||||||
|
Loading…
Reference in New Issue
Block a user