Blender V4.3
string_utils.cc File Reference
#include <cctype>
#include <cstdlib>
#include <cstring>
#include <array>
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "BLI_dynstr.h"
#include "DNA_listBase.h"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  UniqueNameCheckData
 

Functions

size_t BLI_string_split_name_number (const char *name, const char delim, char *r_name_left, int *r_number)
 
bool BLI_string_is_decimal (const char *string)
 
static bool is_char_sep (const char c)
 
void BLI_string_split_suffix (const char *string, const size_t string_maxlen, char *r_body, char *r_suf)
 
void BLI_string_split_prefix (const char *string, const size_t string_maxlen, char *r_pre, char *r_body)
 
size_t BLI_string_flip_side_name (char *name_dst, const char *name_src, const bool strip_number, const size_t name_dst_maxncpy)
 
void BLI_uniquename_cb (UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_maxncpy)
 
std::string BLI_uniquename_cb (blender::FunctionRef< bool(blender::StringRef)> unique_check, const char delim, const blender::StringRef name)
 
static bool uniquename_find_dupe (const ListBase *list, void *vlink, const char *name, int name_offset)
 
static bool uniquename_unique_check (void *arg, const char *name)
 
void BLI_uniquename (const ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy)
 
size_t BLI_string_len_array (const char *strings[], uint strings_num)
 
String Replace
char * BLI_string_replaceN (const char *__restrict str, const char *__restrict substr_old, const char *__restrict substr_new)
 
void BLI_string_replace_char (char *str, char src, char dst)
 
bool BLI_string_replace_table_exact (char *string, const size_t string_len, const char *replace_table[][2], int replace_table_len)
 
size_t BLI_string_replace_range (char *string, size_t string_maxncpy, int src_beg, int src_end, const char *dst)
 
Join Strings
size_t BLI_string_join_array (char *result, size_t result_maxncpy, const char *strings[], uint strings_num)
 
size_t BLI_string_join_array_by_sep_char (char *result, size_t result_maxncpy, char sep, const char *strings[], uint strings_num)
 
char * BLI_string_join_arrayN (const char *strings[], uint strings_num)
 
char * BLI_string_join_array_by_sep_charN (char sep, const char *strings[], uint strings_num)
 
char * BLI_string_join_array_by_sep_char_with_tableN (char sep, char *table[], const char *strings[], uint strings_num)
 

Function Documentation

◆ BLI_string_flip_side_name()

size_t BLI_string_flip_side_name ( char * name_dst,
const char * name_src,
const bool strip_number,
const size_t name_dst_maxncpy )

◆ BLI_string_is_decimal()

bool BLI_string_is_decimal ( const char * string)

Definition at line 198 of file string_utils.cc.

Referenced by ED_text_is_syntax_highlight_supported(), and TEST().

◆ BLI_string_join_array()

◆ BLI_string_join_array_by_sep_char()

◆ BLI_string_join_array_by_sep_char_with_tableN()

char * BLI_string_join_array_by_sep_char_with_tableN ( char sep,
char * table[],
const char * strings[],
uint strings_num )

Definition at line 635 of file string_utils.cc.

References BLI_assert, and result.

◆ BLI_string_join_array_by_sep_charN()

◆ BLI_string_join_arrayN()

◆ BLI_string_len_array()

size_t BLI_string_len_array ( const char * strings[],
uint strings_num )

◆ BLI_string_replace_char()

◆ BLI_string_replace_range()

size_t BLI_string_replace_range ( char * string,
size_t string_maxncpy,
int src_beg,
int src_end,
const char * dst )

Write dst into the range between src_beg & src_end, resize within string_maxncpy limits, ensure null terminated.

Returns
the length of string.

Definition at line 114 of file string_utils.cc.

References BLI_assert, int, and UNLIKELY.

Referenced by BLI_path_frame(), and BLI_path_frame_range().

◆ BLI_string_replace_table_exact()

bool BLI_string_replace_table_exact ( char * string,
size_t string_len,
const char * replace_table[][2],
int replace_table_len )

Simple exact-match string replacement.

Parameters
replace_tableArray of source, destination pairs.
Note
Larger tables should use a hash table.

Definition at line 98 of file string_utils.cc.

References BLI_string_debug_size_after_nil, BLI_strncpy(), and STREQ.

Referenced by BKE_workspace_tool_id_replace_table(), and blo_do_versions_userdef().

◆ BLI_string_replaceN()

char * BLI_string_replaceN ( const char *__restrict str,
const char *__restrict substr_old,
const char *__restrict substr_new )

◆ BLI_string_split_name_number()

size_t BLI_string_split_name_number ( const char * name,
const char delim,
char * r_name_left,
int * r_number )

Definition at line 165 of file string_utils.cc.

References int.

Referenced by BLI_uniquename_cb(), and BLI_uniquename_cb().

◆ BLI_string_split_prefix()

void BLI_string_split_prefix ( const char * string,
const size_t string_maxlen,
char * r_pre,
char * r_body )

Definition at line 242 of file string_utils.cc.

References BLI_string_debug_size, BLI_strncpy(), BLI_strnlen(), is_char_sep(), and len.

◆ BLI_string_split_suffix()

void BLI_string_split_suffix ( const char * string,
const size_t string_maxlen,
char * r_body,
char * r_suf )

Definition at line 218 of file string_utils.cc.

References BLI_string_debug_size, BLI_strncpy(), BLI_strnlen(), is_char_sep(), and len.

◆ BLI_uniquename()

void BLI_uniquename ( const ListBase * list,
void * vlink,
const char * defname,
char delim,
int name_offset,
size_t name_maxncpy )

◆ BLI_uniquename_cb() [1/2]

std::string BLI_uniquename_cb ( blender::FunctionRef< bool(blender::StringRef)> unique_check,
char delim,
blender::StringRef name )

Ensures name is unique (according to criteria specified by caller in unique_check callback), incrementing its numeric suffix as necessary.

Parameters
unique_checkReturn true if name is not unique
delimDelimits numeric suffix in name
nameName to be ensured unique

Definition at line 430 of file string_utils.cc.

References BLI_snprintf(), BLI_string_split_name_number(), blender::Array< T, InlineBufferCapacity, Allocator >::data(), and len.

◆ BLI_uniquename_cb() [2/2]

void BLI_uniquename_cb ( UniquenameCheckCallback unique_check,
void * arg,
const char * defname,
char delim,
char * name,
size_t name_maxncpy )

◆ is_char_sep()

static bool is_char_sep ( const char c)
static

Definition at line 213 of file string_utils.cc.

References ELEM.

Referenced by BLI_string_flip_side_name(), BLI_string_split_prefix(), and BLI_string_split_suffix().

◆ uniquename_find_dupe()

static bool uniquename_find_dupe ( const ListBase * list,
void * vlink,
const char * name,
int name_offset )
static

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.cc for example...

Parameters
name_offsetshould be calculated using offsetof(structname, membername) macro from stddef.h

Definition at line 471 of file string_utils.cc.

References POINTER_OFFSET, and STREQ.

Referenced by uniquename_unique_check().

◆ uniquename_unique_check()

static bool uniquename_unique_check ( void * arg,
const char * name )
static

Definition at line 494 of file string_utils.cc.

References uniquename_find_dupe().

Referenced by BLI_uniquename().