| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  ustring.h                                                            */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-01 14:40:08 +01:00
										 |  |  | /* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md)    */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #ifndef RSTRING_H
 | 
					
						
							|  |  |  | #define RSTRING_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "array.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "typedefs.h"
 | 
					
						
							|  |  |  | #include "vector.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | 	@author red <red@killy> | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CharString : public Vector<char> { | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool operator<(const CharString &p_right) const; | 
					
						
							|  |  |  | 	int length() const { return size() ? size() - 1 : 0; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	const char *get_data() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	operator const char *() { return get_data(); }; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef wchar_t CharType; | 
					
						
							| 
									
										
										
										
											2016-06-19 00:05:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | struct StrRange { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const CharType *c_str; | 
					
						
							|  |  |  | 	int len; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	StrRange(const CharType *p_c_str = NULL, int p_len = 0) { | 
					
						
							|  |  |  | 		c_str = p_c_str; | 
					
						
							|  |  |  | 		len = p_len; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class String : public Vector<CharType> { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void copy_from(const char *p_cstr); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void copy_from(const CharType *p_cstr, int p_clip_to = -1); | 
					
						
							|  |  |  | 	void copy_from(const CharType &p_char); | 
					
						
							|  |  |  | 	bool _base_is_subsequence_of(const String &p_string, bool case_insensitive) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	enum { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		npos = -1 ///<for "some" compatibility with std::string (npos is a huge value in std::string)
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool operator==(const String &p_str) const; | 
					
						
							|  |  |  | 	bool operator!=(const String &p_str) const; | 
					
						
							|  |  |  | 	String operator+(const String &p_str) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	//String operator+(CharType p_char) const;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String &operator+=(const String &); | 
					
						
							| 
									
										
										
										
											2017-08-11 15:10:05 -04:00
										 |  |  | 	String &operator+=(CharType p_char); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String &operator+=(const char *p_str); | 
					
						
							|  |  |  | 	String &operator+=(const CharType *p_str); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Compatibility Operators */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void operator=(const char *p_str); | 
					
						
							|  |  |  | 	void operator=(const CharType *p_str); | 
					
						
							|  |  |  | 	bool operator==(const char *p_str) const; | 
					
						
							|  |  |  | 	bool operator==(const CharType *p_str) const; | 
					
						
							|  |  |  | 	bool operator==(const StrRange &p_str_range) const; | 
					
						
							|  |  |  | 	bool operator!=(const char *p_str) const; | 
					
						
							|  |  |  | 	bool operator!=(const CharType *p_str) const; | 
					
						
							|  |  |  | 	bool operator<(const CharType *p_str) const; | 
					
						
							|  |  |  | 	bool operator<(const char *p_str) const; | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	bool operator<(const String &p_str) const; | 
					
						
							|  |  |  | 	bool operator<=(const String &p_str) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	signed char casecmp_to(const String &p_str) const; | 
					
						
							|  |  |  | 	signed char nocasecmp_to(const String &p_str) const; | 
					
						
							| 
									
										
										
										
											2017-05-11 20:07:59 +01:00
										 |  |  | 	signed char naturalnocasecmp_to(const String &p_str) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	const CharType *c_str() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	/* standard size stuff */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	_FORCE_INLINE_ int length() const { | 
					
						
							|  |  |  | 		int s = size(); | 
					
						
							|  |  |  | 		return s ? (s - 1) : 0; // length does not include zero
 | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* complex helpers */ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String substr(int p_from, int p_chars) const; | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	int find(const String &p_str, int p_from = 0) const; ///< return <0 if failed
 | 
					
						
							|  |  |  | 	int find(const char *p_str, int p_from) const; ///< return <0 if failed
 | 
					
						
							|  |  |  | 	int find_last(const String &p_str) const; ///< return <0 if failed
 | 
					
						
							|  |  |  | 	int findn(const String &p_str, int p_from = 0) const; ///< return <0 if failed, case insensitive
 | 
					
						
							|  |  |  | 	int rfind(const String &p_str, int p_from = -1) const; ///< return <0 if failed
 | 
					
						
							|  |  |  | 	int rfindn(const String &p_str, int p_from = -1) const; ///< return <0 if failed, case insensitive
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	int findmk(const Vector<String> &p_keys, int p_from = 0, int *r_key = NULL) const; ///< return <0 if failed
 | 
					
						
							|  |  |  | 	bool match(const String &p_wildcard) const; | 
					
						
							|  |  |  | 	bool matchn(const String &p_wildcard) const; | 
					
						
							|  |  |  | 	bool begins_with(const String &p_string) const; | 
					
						
							|  |  |  | 	bool begins_with(const char *p_string) const; | 
					
						
							|  |  |  | 	bool ends_with(const String &p_string) const; | 
					
						
							| 
									
										
										
										
											2017-10-28 23:46:20 +02:00
										 |  |  | 	bool is_enclosed_in(const String &p_string) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool is_subsequence_of(const String &p_string) const; | 
					
						
							|  |  |  | 	bool is_subsequence_ofi(const String &p_string) const; | 
					
						
							| 
									
										
										
										
											2017-10-28 23:46:20 +02:00
										 |  |  | 	bool is_quoted() const; | 
					
						
							| 
									
										
										
										
											2016-06-13 14:06:03 -03:00
										 |  |  | 	Vector<String> bigrams() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	float similarity(const String &p_string) const; | 
					
						
							|  |  |  | 	String format(const Variant &values, String placeholder = "{_}") const; | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	String replace_first(const String &p_key, const String &p_with) const; | 
					
						
							|  |  |  | 	String replace(const String &p_key, const String &p_with) const; | 
					
						
							|  |  |  | 	String replace(const char *p_key, const char *p_with) const; | 
					
						
							|  |  |  | 	String replacen(const String &p_key, const String &p_with) const; | 
					
						
							|  |  |  | 	String insert(int p_at_pos, const String &p_string) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String pad_decimals(int p_digits) const; | 
					
						
							|  |  |  | 	String pad_zeros(int p_digits) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String lpad(int min_length, const String &character = " ") const; | 
					
						
							|  |  |  | 	String rpad(int min_length, const String &character = " ") const; | 
					
						
							|  |  |  | 	String sprintf(const Array &values, bool *error) const; | 
					
						
							| 
									
										
										
										
											2017-10-28 23:46:20 +02:00
										 |  |  | 	String quote(String quotechar = "\"") const; | 
					
						
							|  |  |  | 	String unquote() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	static String num(double p_num, int p_decimals = -1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	static String num_scientific(double p_num); | 
					
						
							|  |  |  | 	static String num_real(double p_num); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	static String num_int64(int64_t p_num, int base = 10, bool capitalize_hex = false); | 
					
						
							| 
									
										
										
										
											2018-02-22 13:13:51 +01:00
										 |  |  | 	static String num_uint64(uint64_t p_num, int base = 10, bool capitalize_hex = false); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	static String chr(CharType p_char); | 
					
						
							|  |  |  | 	static String md5(const uint8_t *p_md5); | 
					
						
							| 
									
										
										
										
											2016-06-17 10:55:16 +03:00
										 |  |  | 	static String hex_encode_buffer(const uint8_t *p_buffer, int p_len); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool is_numeric() const; | 
					
						
							|  |  |  | 	double to_double() const; | 
					
						
							|  |  |  | 	float to_float() const; | 
					
						
							| 
									
										
										
										
											2016-10-20 09:58:00 -03:00
										 |  |  | 	int hex_to_int(bool p_with_prefix = true) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	int to_int() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-08 20:58:39 -03:00
										 |  |  | 	int64_t hex_to_int64(bool p_with_prefix = true) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	int64_t to_int64() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	static int to_int(const char *p_str, int p_len = -1); | 
					
						
							|  |  |  | 	static double to_double(const char *p_str); | 
					
						
							|  |  |  | 	static double to_double(const CharType *p_str, const CharType **r_end = NULL); | 
					
						
							|  |  |  | 	static int64_t to_int(const CharType *p_str, int p_len = -1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String capitalize() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String camelcase_to_underscore(bool lowercase = true) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	int get_slice_count(String p_splitter) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String get_slice(String p_splitter, int p_slice) const; | 
					
						
							| 
									
										
										
										
											2017-08-11 15:10:05 -04:00
										 |  |  | 	String get_slicec(CharType p_splitter, int p_slice) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-12 05:14:38 +03:00
										 |  |  | 	Vector<String> split(const String &p_splitter, bool p_allow_empty = true, int p_maxsplit = 0) const; | 
					
						
							| 
									
										
										
										
											2014-10-09 19:44:27 -03:00
										 |  |  | 	Vector<String> split_spaces() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Vector<float> split_floats(const String &p_splitter, bool p_allow_empty = true) const; | 
					
						
							|  |  |  | 	Vector<float> split_floats_mk(const Vector<String> &p_splitters, bool p_allow_empty = true) const; | 
					
						
							|  |  |  | 	Vector<int> split_ints(const String &p_splitter, bool p_allow_empty = true) const; | 
					
						
							|  |  |  | 	Vector<int> split_ints_mk(const Vector<String> &p_splitters, bool p_allow_empty = true) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-02 22:01:43 +07:00
										 |  |  | 	String join(Vector<String> parts); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	static CharType char_uppercase(CharType p_char); | 
					
						
							|  |  |  | 	static CharType char_lowercase(CharType p_char); | 
					
						
							|  |  |  | 	String to_upper() const; | 
					
						
							|  |  |  | 	String to_lower() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String left(int p_pos) const; | 
					
						
							|  |  |  | 	String right(int p_pos) const; | 
					
						
							| 
									
										
										
										
											2017-10-11 16:27:54 +08:00
										 |  |  | 	String dedent() const; | 
					
						
							| 
									
										
										
										
											2016-05-11 09:22:59 +02:00
										 |  |  | 	String strip_edges(bool left = true, bool right = true) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String strip_escapes() const; | 
					
						
							| 
									
										
										
										
											2017-01-14 00:51:09 -03:00
										 |  |  | 	String get_extension() const; | 
					
						
							|  |  |  | 	String get_basename() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String plus_file(const String &p_file) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	CharType ord_at(int p_idx) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void erase(int p_pos, int p_chars); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	CharString ascii(bool p_allow_extended = false) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	CharString utf8() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool parse_utf8(const char *p_utf8, int p_len = -1); //return true on error
 | 
					
						
							|  |  |  | 	static String utf8(const char *p_utf8, int p_len = -1); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-11 15:10:05 -04:00
										 |  |  | 	static uint32_t hash(const CharType *p_cstr, int p_len); /* hash the string */ | 
					
						
							|  |  |  | 	static uint32_t hash(const CharType *p_cstr); /* hash the string */ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	static uint32_t hash(const char *p_cstr, int p_len); /* hash the string */ | 
					
						
							|  |  |  | 	static uint32_t hash(const char *p_cstr); /* hash the string */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	uint32_t hash() const; /* hash the string */ | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 	uint64_t hash64() const; /* hash the string */ | 
					
						
							| 
									
										
										
										
											2014-03-13 22:57:24 -03:00
										 |  |  | 	String md5_text() const; | 
					
						
							| 
									
										
										
										
											2016-06-17 10:55:16 +03:00
										 |  |  | 	String sha256_text() const; | 
					
						
							| 
									
										
										
										
											2014-08-01 22:10:38 -03:00
										 |  |  | 	Vector<uint8_t> md5_buffer() const; | 
					
						
							| 
									
										
										
										
											2016-06-23 13:57:45 -03:00
										 |  |  | 	Vector<uint8_t> sha256_buffer() const; | 
					
						
							| 
									
										
										
										
											2014-08-01 22:10:38 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	_FORCE_INLINE_ bool empty() const { return length() == 0; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// path functions
 | 
					
						
							|  |  |  | 	bool is_abs_path() const; | 
					
						
							|  |  |  | 	bool is_rel_path() const; | 
					
						
							|  |  |  | 	bool is_resource_file() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String path_to(const String &p_path) const; | 
					
						
							|  |  |  | 	String path_to_file(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String get_base_dir() const; | 
					
						
							|  |  |  | 	String get_file() const; | 
					
						
							|  |  |  | 	static String humanize_size(size_t p_size); | 
					
						
							|  |  |  | 	String simplify_path() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String xml_escape(bool p_escape_quotes = false) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String xml_unescape() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String http_escape() const; | 
					
						
							|  |  |  | 	String http_unescape() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String c_escape() const; | 
					
						
							| 
									
										
										
										
											2017-01-16 18:03:38 +01:00
										 |  |  | 	String c_escape_multiline() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String c_unescape() const; | 
					
						
							| 
									
										
										
										
											2016-01-10 15:01:06 -03:00
										 |  |  | 	String json_escape() const; | 
					
						
							| 
									
										
										
										
											2016-09-30 03:28:05 +09:00
										 |  |  | 	String word_wrap(int p_chars_per_line) const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String percent_encode() const; | 
					
						
							|  |  |  | 	String percent_decode() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool is_valid_identifier() const; | 
					
						
							|  |  |  | 	bool is_valid_integer() const; | 
					
						
							|  |  |  | 	bool is_valid_float() const; | 
					
						
							| 
									
										
										
										
											2016-10-20 09:58:00 -03:00
										 |  |  | 	bool is_valid_hex_number(bool p_with_prefix) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool is_valid_html_color() const; | 
					
						
							|  |  |  | 	bool is_valid_ip_address() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * The constructors must not depend on other overloads | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	/*	String(CharType p_char);*/ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	inline String() {} | 
					
						
							| 
									
										
										
										
											2017-12-11 23:38:07 +01:00
										 |  |  | 	inline String(const String &p_str) : | 
					
						
							|  |  |  | 			Vector(p_str) {} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String(const char *p_str); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String(const CharType *p_str, int p_clip_to_len = -1); | 
					
						
							|  |  |  | 	String(const StrRange &p_range); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | bool operator==(const char *p_chr, const String &p_str); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | String operator+(const char *p_chr, const String &p_str); | 
					
						
							|  |  |  | String operator+(CharType p_chr, const String &p_str); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | String itos(int64_t p_val); | 
					
						
							|  |  |  | String rtos(double p_val); | 
					
						
							|  |  |  | String rtoss(double p_val); //scientific version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct NoCaseComparator { | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool operator()(const String &p_a, const String &p_b) const { | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		return p_a.nocasecmp_to(p_b) < 0; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 20:07:59 +01:00
										 |  |  | struct NaturalNoCaseComparator { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool operator()(const String &p_a, const String &p_b) const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return p_a.naturalnocasecmp_to(p_b) < 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 15:31:30 +01:00
										 |  |  | template <typename L, typename R> | 
					
						
							|  |  |  | _FORCE_INLINE_ bool is_str_less(const L *l_ptr, const R *r_ptr) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	while (true) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (*l_ptr == 0 && *r_ptr == 0) | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		else if (*l_ptr == 0) | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		else if (*r_ptr == 0) | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		else if (*l_ptr < *r_ptr) | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		else if (*l_ptr > *r_ptr) | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		l_ptr++; | 
					
						
							|  |  |  | 		r_ptr++; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CRASH_COND(true); // unreachable
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | /* end of namespace */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | //tool translate
 | 
					
						
							| 
									
										
										
										
											2016-05-17 18:27:15 -03:00
										 |  |  | #ifdef TOOLS_ENABLED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | String TTR(const String &); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 18:27:15 -03:00
										 |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define TTR(m_val) (String())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //tool or regular translate
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | String RTR(const String &); | 
					
						
							| 
									
										
										
										
											2016-05-17 18:27:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 09:59:54 +01:00
										 |  |  | bool is_symbol(CharType c); | 
					
						
							|  |  |  | bool select_word(const String &p_s, int p_col, int &r_beg, int &r_end); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #endif
 |