Cleanup/refactor: Add new BLI_string_util.

Things like `BLI_uniquename` had nothing, but really nothing to do in
BLI_path_util files!

Also, got rid of length limitation in `BLI_uniquename_cb`, we can use
alloca here to avoid overhead of malloc while keeping free size (within
reasonable limits of course).
This commit is contained in:
Bastien Montagne 2017-01-16 17:33:34 +01:00
parent 3748defefe
commit b997988323
49 changed files with 319 additions and 180 deletions

View File

@ -44,6 +44,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLI_ghash.h"

View File

@ -43,6 +43,7 @@
#include "BLI_alloca.h"
#include "BLI_dynstr.h"
#include "BLI_listbase.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -42,7 +42,7 @@
#include "BLI_math.h"
#include "BLI_kdopbvh.h"
#include "BLI_utildefines.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"
#include "DNA_armature_types.h"

View File

@ -45,8 +45,9 @@
#include "DNA_ID.h"
#include "BLI_utildefines.h"
#include "BLI_string.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_math.h"
#include "BLI_math_color_blend.h"
#include "BLI_mempool.h"

View File

@ -45,8 +45,8 @@
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -32,6 +32,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_kdtree.h"
#include "BLI_string_utils.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"

View File

@ -47,6 +47,7 @@
#include "BLI_math.h"
#include "BLI_easing.h"
#include "BLI_threads.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -40,6 +40,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
// function declarations
static FreestyleLineSet *alloc_lineset(void);

View File

@ -39,6 +39,7 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
#include "BLI_math_vector.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -62,6 +62,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -38,6 +38,7 @@
#include "BLI_blenlib.h"
#include "BLI_math_vector.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -76,6 +76,7 @@
#include "BLI_ghash.h"
#include "BLI_linklist.h"
#include "BLI_memarena.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLT_translation.h"

View File

@ -41,6 +41,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BKE_context.h"

View File

@ -36,8 +36,8 @@
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_listbase.h"
#include "BLI_math.h"

View File

@ -49,6 +49,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BKE_global.h"

View File

@ -41,8 +41,8 @@
#include "DNA_scene_types.h"
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLI_memarena.h"

View File

@ -49,10 +49,11 @@
#include "DNA_object_types.h"
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
#include "BLI_listbase.h"
#include "BLI_linklist.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -40,9 +40,9 @@
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_ghash.h"
#include "BLT_translation.h"

View File

@ -46,10 +46,11 @@
#include "DNA_world_types.h"
#include "DNA_linestyle_types.h"
#include "BLI_string.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -56,6 +56,7 @@
#include "BLI_utildefines.h"
#include "BLI_callbacks.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLI_task.h"

View File

@ -34,8 +34,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLI_math.h"

View File

@ -49,8 +49,8 @@
#include "BLI_math.h"
#include "BLI_math_base.h"
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLT_translation.h"

View File

@ -42,8 +42,8 @@
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_ghash.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -91,12 +91,8 @@ bool BLI_testextensie_glob(const char *str, const char *ext_fnmatch) ATTR_NONNUL
bool BLI_replace_extension(char *path, size_t maxlen, const char *ext) ATTR_NONNULL();
bool BLI_ensure_extension(char *path, size_t maxlen, const char *ext) ATTR_NONNULL();
bool BLI_ensure_filename(char *filepath, size_t maxlen, const char *filename) ATTR_NONNULL();
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offs, int len);
bool BLI_uniquename_cb(bool (*unique_check)(void *arg, const char *name),
void *arg, const char *defname, char delim, char *name, int name_len);
int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen);
void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic);
int BLI_split_name_num(char *left, int *nr, const char *name, const char delim);
/* removes trailing slash */
void BLI_cleanup_file(const char *relabase, char *path) ATTR_NONNULL(2);

View File

@ -0,0 +1,58 @@
/*
* ***** 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.
*
* The Original Code is Copyright (C) 2017 by the Blender Foundation.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
*/
#ifndef __BLI_STRING_UTILS_H__
#define __BLI_STRING_UTILS_H__
/** \file BLI_string_utils.h
* \ingroup bli
*/
#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif
#include "BLI_compiler_attrs.h"
struct ListBase;
typedef bool (*UniquenameCheckCallback)(void *arg, const char *name);
int BLI_split_name_num(char *left, int *nr, const char *name, const char delim);
bool BLI_uniquename_cb(
UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_len);
bool BLI_uniquename(
struct ListBase *list, void *vlink, const char *defname, char delim, int name_offs, size_t len);
#ifdef __cplusplus
}
#endif
#endif /* __BLI_STRING_UTILS_H__ */

View File

@ -109,6 +109,7 @@ set(SRC
intern/string.c
intern/string_cursor_utf8.c
intern/string_utf8.c
intern/string_utils.c
intern/system.c
intern/task.c
intern/threads.c
@ -195,6 +196,7 @@ set(SRC
BLI_string.h
BLI_string_cursor_utf8.h
BLI_string_utf8.h
BLI_string_utils.h
BLI_sys_types.h
BLI_system.h
BLI_task.h

View File

@ -63,9 +63,6 @@
#include "MEM_guardedalloc.h"
/* local */
#define UNIQUE_NAME_MAX 128
/* Declarations */
#ifdef WIN32
@ -147,162 +144,6 @@ void BLI_stringenc(char *string, const char *head, const char *tail, unsigned sh
sprintf(string, "%s%.*d%s", head, numlen, MAX2(0, pic), tail);
}
/**
* Looks for a numeric suffix preceded by delim character on the end of
* name, puts preceding part into *left and value of suffix into *nr.
* Returns the length of *left.
*
* Foo.001 -> "Foo", 1
* Returning the length of "Foo"
*
* \param left Where to return copy of part preceding delim
* \param nr Where to return value of numeric suffix
* \param name String to split
* \param delim Delimiter character
* \return Length of \a left
*/
int BLI_split_name_num(char *left, int *nr, const char *name, const char delim)
{
const int name_len = strlen(name);
*nr = 0;
memcpy(left, name, (name_len + 1) * sizeof(char));
/* name doesn't end with a delimiter "foo." */
if ((name_len > 1 && name[name_len - 1] == delim) == 0) {
int a = name_len;
while (a--) {
if (name[a] == delim) {
left[a] = '\0'; /* truncate left part here */
*nr = atol(name + a + 1);
/* casting down to an int, can overflow for large numbers */
if (*nr < 0)
*nr = 0;
return a;
}
else if (isdigit(name[a]) == 0) {
/* non-numeric suffix - give up */
break;
}
}
}
return name_len;
}
/**
* Ensures name is unique (according to criteria specified by caller in unique_check callback),
* incrementing its numeric suffix as necessary. Returns true if name had to be adjusted.
*
* \param unique_check Return true if name is not unique
* \param arg Additional arg to unique_check--meaning is up to caller
* \param defname To initialize name if latter is empty
* \param delim Delimits numeric suffix in name
* \param name Name to be ensured unique
* \param name_len Maximum length of name area
* \return true if there if the name was changed
*/
bool BLI_uniquename_cb(bool (*unique_check)(void *arg, const char *name),
void *arg, const char *defname, char delim, char *name, int name_len)
{
if (name[0] == '\0') {
BLI_strncpy(name, defname, name_len);
}
if (unique_check(arg, name)) {
char numstr[16];
char tempname[UNIQUE_NAME_MAX];
char left[UNIQUE_NAME_MAX];
int number;
int len = BLI_split_name_num(left, &number, name, delim);
do {
/* add 1 to account for \0 */
const int numlen = BLI_snprintf(numstr, sizeof(numstr), "%c%03d", delim, ++number) + 1;
/* highly unlikely the string only has enough room for the number
* but support anyway */
if ((len == 0) || (numlen >= name_len)) {
/* number is know not to be utf-8 */
BLI_strncpy(tempname, numstr, name_len);
}
else {
char *tempname_buf;
tempname_buf = tempname + BLI_strncpy_utf8_rlen(tempname, left, name_len - numlen);
memcpy(tempname_buf, numstr, numlen);
}
} while (unique_check(arg, tempname));
BLI_strncpy(name, tempname, name_len);
return true;
}
return false;
}
/* little helper macro for BLI_uniquename */
#ifndef GIVE_STRADDR
# define GIVE_STRADDR(data, offset) ( ((char *)data) + offset)
#endif
/* Generic function to set a unique name. It is only designed to be used in situations
* where the name is part of the struct, and also that the name is at most UNIQUE_NAME_MAX chars long.
*
* For places where this is used, see constraint.c for example...
*
* name_offs: should be calculated using offsetof(structname, membername) macro from stddef.h
* len: maximum length of string (to prevent overflows, etc.)
* defname: the name that should be used by default if none is specified already
* delim: the character which acts as a delimiter between parts of the name
*/
static bool uniquename_find_dupe(ListBase *list, void *vlink, const char *name, int name_offs)
{
Link *link;
for (link = list->first; link; link = link->next) {
if (link != vlink) {
if (STREQ(GIVE_STRADDR(link, name_offs), name)) {
return true;
}
}
}
return false;
}
static bool uniquename_unique_check(void *arg, const char *name)
{
struct {ListBase *lb; void *vlink; int name_offs; } *data = arg;
return uniquename_find_dupe(data->lb, data->vlink, name, data->name_offs);
}
/**
* Ensures that the specified block has a unique name within the containing list,
* incrementing its numeric suffix as necessary. Returns true if name had to be adjusted.
*
* \param list List containing the block
* \param vlink The block to check the name for
* \param defname To initialize block name if latter is empty
* \param delim Delimits numeric suffix in name
* \param name_offs Offset of name within block structure
* \param name_len Maximum length of name area
*/
bool BLI_uniquename(ListBase *list, void *vlink, const char *defname, char delim, int name_offs, int name_len)
{
struct {ListBase *lb; void *vlink; int name_offs; } data;
data.lb = list;
data.vlink = vlink;
data.name_offs = name_offs;
assert((name_len > 1) && (name_len <= UNIQUE_NAME_MAX));
/* See if we are given an empty string */
if (ELEM(NULL, vlink, defname))
return false;
return BLI_uniquename_cb(uniquename_unique_check, &data, defname, delim, GIVE_STRADDR(vlink, name_offs), name_len);
}
static int BLI_path_unc_prefix_len(const char *path); /* defined below in same file */
/* ******************** string encoding ***************** */

View File

@ -0,0 +1,207 @@
/*
* ***** 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.
*
* The Original Code is Copyright (C) 2017 by the Blender FOundation.
* All rights reserved.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
*
*/
/** \file blender/blenlib/intern/string_utils.c
* \ingroup bli
*/
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "DNA_listBase.h"
#ifdef __GNUC__
# pragma GCC diagnostic error "-Wsign-conversion"
#endif
/**
* Looks for a numeric suffix preceded by delim character on the end of
* name, puts preceding part into *left and value of suffix into *nr.
* Returns the length of *left.
*
* Foo.001 -> "Foo", 1
* Returning the length of "Foo"
*
* \param left Where to return copy of part preceding delim
* \param nr Where to return value of numeric suffix
* \param name String to split
* \param delim Delimiter character
* \return Length of \a left
*/
int BLI_split_name_num(char *left, int *nr, const char *name, const char delim)
{
const size_t name_len = strlen(name);
*nr = 0;
memcpy(left, name, (name_len + 1) * sizeof(char));
/* name doesn't end with a delimiter "foo." */
if ((name_len > 1 && name[name_len - 1] == delim) == 0) {
int a = name_len;
while (a--) {
if (name[a] == delim) {
left[a] = '\0'; /* truncate left part here */
*nr = atol(name + a + 1);
/* casting down to an int, can overflow for large numbers */
if (*nr < 0)
*nr = 0;
return a;
}
else if (isdigit(name[a]) == 0) {
/* non-numeric suffix - give up */
break;
}
}
}
return name_len;
}
/* Unique name utils. */
/**
* Ensures name is unique (according to criteria specified by caller in unique_check callback),
* incrementing its numeric suffix as necessary. Returns true if name had to be adjusted.
*
* \param unique_check Return true if name is not unique
* \param arg Additional arg to unique_check--meaning is up to caller
* \param defname To initialize name if latter is empty
* \param delim Delimits numeric suffix in name
* \param name Name to be ensured unique
* \param name_len Maximum length of name area
* \return true if there if the name was changed
*/
bool BLI_uniquename_cb(
UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_len)
{
if (name[0] == '\0') {
BLI_strncpy(name, defname, name_len);
}
if (unique_check(arg, name)) {
char numstr[16];
char *tempname = alloca(name_len);
char *left = alloca(name_len);
int number;
int len = BLI_split_name_num(left, &number, name, delim);
do {
/* add 1 to account for \0 */
const size_t numlen = BLI_snprintf(numstr, sizeof(numstr), "%c%03d", delim, ++number) + 1;
/* highly unlikely the string only has enough room for the number
* but support anyway */
if ((len == 0) || (numlen >= name_len)) {
/* number is know not to be utf-8 */
BLI_strncpy(tempname, numstr, name_len);
}
else {
char *tempname_buf;
tempname_buf = tempname + BLI_strncpy_utf8_rlen(tempname, left, name_len - numlen);
memcpy(tempname_buf, numstr, numlen);
}
} while (unique_check(arg, tempname));
BLI_strncpy(name, tempname, name_len);
return true;
}
return false;
}
/* little helper macro for BLI_uniquename */
#ifndef GIVE_STRADDR
# define GIVE_STRADDR(data, offset) ( ((char *)data) + offset)
#endif
/* Generic function to set a unique name. It is only designed to be used in situations
* where the name is part of the struct.
*
* For places where this is used, see constraint.c for example...
*
* name_offs: should be calculated using offsetof(structname, membername) macro from stddef.h
* len: maximum length of string (to prevent overflows, etc.)
* defname: the name that should be used by default if none is specified already
* delim: the character which acts as a delimiter between parts of the name
*/
static bool uniquename_find_dupe(ListBase *list, void *vlink, const char *name, int name_offs)
{
Link *link;
for (link = list->first; link; link = link->next) {
if (link != vlink) {
if (STREQ(GIVE_STRADDR(link, name_offs), name)) {
return true;
}
}
}
return false;
}
static bool uniquename_unique_check(void *arg, const char *name)
{
struct {ListBase *lb; void *vlink; int name_offs; } *data = arg;
return uniquename_find_dupe(data->lb, data->vlink, name, data->name_offs);
}
/**
* Ensures that the specified block has a unique name within the containing list,
* incrementing its numeric suffix as necessary. Returns true if name had to be adjusted.
*
* \param list List containing the block
* \param vlink The block to check the name for
* \param defname To initialize block name if latter is empty
* \param delim Delimits numeric suffix in name
* \param name_offs Offset of name within block structure
* \param name_len Maximum length of name area
*/
bool BLI_uniquename(ListBase *list, void *vlink, const char *defname, char delim, int name_offs, size_t name_len)
{
struct {ListBase *lb; void *vlink; int name_offs; } data;
data.lb = list;
data.vlink = vlink;
data.name_offs = name_offs;
BLI_assert(name_len > 1);
/* See if we are given an empty string */
if (ELEM(NULL, vlink, defname))
return false;
return BLI_uniquename_cb(uniquename_unique_check, &data, defname, delim, GIVE_STRADDR(vlink, name_offs), name_len);
}

View File

@ -56,6 +56,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -35,8 +35,8 @@
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -37,6 +37,7 @@
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -34,6 +34,7 @@
#include "BLI_blenlib.h"
#include "BLI_dlrbTree.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -42,6 +42,7 @@
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -41,6 +41,7 @@
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -37,6 +37,7 @@
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -47,8 +47,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
#include "BKE_action.h"
#include "BKE_context.h"

View File

@ -40,6 +40,7 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLI_mempool.h"

View File

@ -42,7 +42,7 @@
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_path_util.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BKE_action.h"

View File

@ -32,8 +32,9 @@
#include "DNA_actuator_types.h"
#include "DNA_scene_types.h" /* for MAXFRAME */
#include "BLI_utildefines.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -29,6 +29,7 @@
#include "DNA_object_types.h"
#include "DNA_controller_types.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -31,6 +31,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -33,6 +33,7 @@
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"

View File

@ -27,6 +27,9 @@
#include <stdio.h>
#include <stdlib.h>
#include "BLI_utildefines.h"
#include "BLI_string_utils.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"

View File

@ -45,6 +45,8 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"
#include "rna_internal.h"

View File

@ -40,6 +40,7 @@
#include "DNA_scene_types.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -31,6 +31,7 @@
#include "DNA_object_types.h"
#include "BLI_path_util.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -40,6 +40,7 @@
#include "IMB_imbuf_types.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -32,6 +32,7 @@
#include "BLI_utildefines.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLT_translation.h"

View File

@ -32,7 +32,7 @@
#include <string.h>
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
#include "BLI_string_utils.h"
#include "BKE_context.h"