4#include "acme/prototype/collection/range.h"
9CLASS_DECL_ACME
wstring wd32_to_wd16_str(const ::wd32_character * pcwsz, character_count input_size = -1);
13CLASS_DECL_ACME
string wd16_to_ansi_str(const ::wd16_character * pwsz, character_count srclen = -1);
15CLASS_DECL_ACME
string wd32_to_ansi_str(const ::wd32_character * pwsz, character_count srclen = -1);
19CLASS_DECL_ACME
string get_utf8_char(const_char_pointer psz);
20inline bool next_unicode_character(::string & strChar, const ::ansi_character*& psz)
22 strChar = get_utf8_char(psz);
23 if (strChar.is_empty())
28 psz += strChar.length();
32::i32 get_utf8_char_length(const_char_pointer psz);
33string get_utf8_char(const_char_pointer psz, const_char_pointer pszEnd);
34::const_ansi_range get_utf8_char(::const_ansi_range &
range);
36bool get_utf8_char(
string & strChar, const_char_pointer &psz, const_char_pointer pszEnd);
37string get_utf8_char(const_char_pointer pszBeg, const_char_pointer psz, character_count i);
38string utf8_next_char(const_char_pointer pszBeg, const_char_pointer psz, character_count i = 0);
39string utf8_previous_char(const_char_pointer pszBeg, const_char_pointer psz, character_count i = 0);
40CLASS_DECL_ACME character_count unicode_to_utf8_length(::i64 ch);
41::i32 unicode_to_utf8_2_or_more(::ansi_character * dest, ::i32 ch);
44CLASS_DECL_ACME const_char_pointer utf8_dec(const_char_pointer pszBeg, const_char_pointer psz);
54inline ::i32 unicode_index_length(const_char_pointer pszChar, ::i32 & len);
55inline ::i32 unicode_index_length(const ::wd16_character * pszChar, ::i32 & len);
56inline ::i32 unicode_index_length(const ::wd32_character * pszChar, ::i32 & len) { len = *pszChar != 0;
return *pszChar; }
59inline ::i32 consume_unicode_index_length(const_char_pointer &pszChar);
60inline ::i32 consume_unicode_index_length(const ::wd16_character * & pszChar);
61inline ::i32 consume_unicode_index_length(const ::wd32_character * & pszChar) {
return *pszChar++; }
64inline ::i32 unicode_index(const_char_pointer pszChar) { ::i32 len = 0;
return unicode_index_length(pszChar, len); }
65inline ::i32 unicode_index(const ::wd16_character * pszChar) { ::i32 len = 0;
return unicode_index_length(pszChar, len); }
66inline ::i32 unicode_index(const ::wd32_character * pszChar) { ::i32 len = 0;
return unicode_index_length(pszChar, len); }
69inline bool is_legal_unicode_index(::i32 iUnicodeIndex);
72CLASS_DECL_ACME ::i32 unicode_to_lower_case(::i32 i);
73CLASS_DECL_ACME ::i32 unicode_to_upper_case(::i32 i);
76#define UNI_DECLARE_IS_FUNCTION(function) \
77inline bool function(::i32 i); \
78inline bool function(const_char_pointer psz); \
79inline bool function(const ::wd16_character * psz); \
80inline bool function(const ::wd32_character * psz);
82#define UNI_IMPLEMENT_IS_FUNCTION(function) \
83inline bool function(const_char_pointer psz) { return function(unicode_index(psz)); } \
84inline bool function(const ::wd16_character * psz) { return function(unicode_index(psz)); } \
85inline bool function(const ::wd32_character * psz) { return function(unicode_index(psz)); }
88UNI_DECLARE_IS_FUNCTION(unicode_is_whitespace);
89UNI_DECLARE_IS_FUNCTION(unicode_is_lower_case);
90UNI_DECLARE_IS_FUNCTION(unicode_is_upper_case);
91UNI_DECLARE_IS_FUNCTION(unicode_is_title_case);
92UNI_DECLARE_IS_FUNCTION(unicode_is_letter);
93UNI_DECLARE_IS_FUNCTION(unicode_is_letter_or_digit);
94UNI_DECLARE_IS_FUNCTION(unicode_is_digit);
95UNI_DECLARE_IS_FUNCTION(unicode_is_assigned);
96UNI_DECLARE_IS_FUNCTION(unicode_is_space_char);
97UNI_DECLARE_IS_FUNCTION(unicode_is_number);
98UNI_DECLARE_IS_FUNCTION(unicode_is_mirrored);
101UNI_IMPLEMENT_IS_FUNCTION(unicode_is_whitespace);
102UNI_IMPLEMENT_IS_FUNCTION(unicode_is_lower_case);
103UNI_IMPLEMENT_IS_FUNCTION(unicode_is_upper_case);
104UNI_IMPLEMENT_IS_FUNCTION(unicode_is_title_case);
105UNI_IMPLEMENT_IS_FUNCTION(unicode_is_letter);
106UNI_IMPLEMENT_IS_FUNCTION(unicode_is_letter_or_digit);
107UNI_IMPLEMENT_IS_FUNCTION(unicode_is_digit);
108UNI_IMPLEMENT_IS_FUNCTION(unicode_is_assigned);
109UNI_IMPLEMENT_IS_FUNCTION(unicode_is_space_char);
110UNI_IMPLEMENT_IS_FUNCTION(unicode_is_number);
111UNI_IMPLEMENT_IS_FUNCTION(unicode_is_mirrored);
114inline ::i32 unicode_to_title_case(::i32 i);
115inline ::i32 unicode_to_numeric_value(::i32 i, ::f32 * f);
116inline ECharCategory unicode_get_category(::i32 i);
117inline ::i32 unicode_get_combining_class(::i32 i);
118inline ::i32 unicode_size_of_tables();
121CLASS_DECL_ACME ::i32 unicode_to_lower_case(::i32 i);
122CLASS_DECL_ACME ::i32 unicode_to_upper_case(::i32 i);
134inline ::i32 ansichar_unicode_len(::wd32_character i);
142template <
typename TYPE1,
typename TYPE2 >
143inline ::std::strong_ordering compare(
const TYPE1 & str1,
const TYPE2 & str2);
146template <
typename TYPE1,
typename TYPE2 >
147inline ::std::strong_ordering case_insensitive_order(
const TYPE1 & str1,
const TYPE2 & str2);
150template <
typename TYPE1,
typename TYPE2 >
151inline bool equals(
const TYPE1 & str1,
const TYPE2 & str2) {
return compare(str1, str2) == 0; }
154template <
typename TYPE1,
typename TYPE2 >
155inline bool case_insensitive_equals(
const TYPE1 & str1,
const TYPE2 & str2) {
return case_insensitive_order(str1, str2) == 0; }
158template <
typename TYPE1,
typename TYPE2 >
159inline TYPE1 equals_get(
const TYPE1 & str1,
const TYPE2 & str2,
const TYPE1 & strOnEqual,
const TYPE1 & strOnDifferent);
162template <
typename TYPE1,
typename TYPE2 >
163inline TYPE1 equals_ci_get(
const TYPE1 & str1,
const TYPE2 & str2,
const TYPE1 & strOnEqual,
const TYPE1 & strOnDifferent);
168template < prototype_
character CHARACTER >
169inline bool case_insensitive_range_begins(::range < const CHARACTER * >
range, ::range < const CHARACTER * > rangePrefix)
177template < prototype_
character CHARACTER >
178inline bool case_insensitive_range_ends(::range < const CHARACTER * >
range, ::range < const CHARACTER * > rangeSuffix)
186template < prototype_
character CHARACTER >
187constexpr bool case_insensitive_sz_begins_sz(
const CHARACTER * psz,
const CHARACTER * pszPrefix)
192 if (sz_contains_sz_prefix(b, psz, pszPrefix))
199 while (*psz && *pszPrefix)
202 if (::comparison::case_insensitive < CHARACTER >()(*psz, *pszPrefix))
227inline bool string_begins(const_char_pointer pz, const_char_pointer pzPrefix)
229inline bool string_begins(const ::wd16_character * pz, const ::wd16_character * pzPrefix)
231inline bool string_begins(const ::wd32_character * pz, const ::wd32_character * pzPrefix)
235template < prototype_
character CHARACTER >
236inline bool _string_begins(
const CHARACTER * psz, character_count len,
const CHARACTER * pszPrefix, character_count & lenPrefix)
238 return string_begins<const CHARACTER>({ psz, len }, { pszPrefix, (character_count)(lenPrefix = string_safe_length(pszPrefix)) });
256inline bool string_ends(const_char_pointer psz, const_char_pointer pszSuffix)
258inline bool string_ends(const ::wd16_character * psz, const ::wd16_character * pszSuffix)
260inline bool string_ends(const ::wd32_character * psz, const ::wd32_character * pszSuffix)
281inline bool case_insensitive_string_begins(const_char_pointer psz, const_char_pointer pszPrefix)
283inline bool case_insensitive_string_begins(const ::wd16_character * psz, const ::wd16_character * pszPrefix)
285inline bool case_insensitive_string_begins(const ::wd32_character * psz, const ::wd32_character * pszPrefix)
303inline bool case_insensitive_string_ends(const_char_pointer psz, const_char_pointer pszSuffix)
305inline bool case_insensitive_string_ends(const ::wd16_character * psz, const ::wd16_character * pszSuffix)
307inline bool case_insensitive_string_ends(const ::wd32_character * psz, const ::wd32_character * pszSuffix)
325template <
typename CHAR_TYPE >
326bool string_eat_before(string_base < CHAR_TYPE > & strBefore,
const string_base < CHAR_TYPE > & strSeparator, string_base < CHAR_TYPE > & str,
bool bEatEverythingIfNotFound);
329template <
typename CHAR_TYPE >
330bool string_eat_before_let_separator(string_base < CHAR_TYPE > & strBefore,
const string_base < CHAR_TYPE > & strSeparator, string_base < CHAR_TYPE > & str,
bool bEatEverythingIfNotFound);
332template <
typename CHAR_STRING >
333inline bool is_trimmed_string_empty(CHAR_STRING p);
336inline bool is_trimmed_empty(const_char_pointer p) {
return is_trimmed_string_empty(p); }
337inline bool is_trimmed_empty(const ::wd16_character * p) {
return is_trimmed_string_empty(p); }
338inline bool is_trimmed_empty(const ::wd32_character * p) {
return is_trimmed_string_empty(p); }
344inline ::i32 unicode_len(const_char_pointer pszChar);
345inline ::i32 unicode_len(const ::wd16_character * pszChar) {
return utf16_is_1st_surrogate(*pszChar) ? 2 : 1; }
346inline ::i32 unicode_len(const ::wd32_character * pszChar) {
return 1; }
349inline ::i32 ansichar_unicode_len(::wd32_character i);
350inline ::i32 wd16char_unicode_len(::wd32_character i) {
return utf32_is_surrogated(i) ? 2 : 1; }
351inline ::i32 wd32char_unicode_len(::wd32_character i) {
return 1; }
354inline ::i32 char_unicode_len(const_char_pointer ,::wd32_character i) {
return ansichar_unicode_len(i); }
355inline ::i32 char_unicode_len(const ::wd16_character *, ::wd32_character i) {
return wd16char_unicode_len(i); }
356inline ::i32 char_unicode_len(const ::wd32_character *, ::wd32_character i) {
return wd32char_unicode_len(i); }
362inline bool unicode_is_whitespace(::i32 i);
363inline bool unicode_is_space_char(::i32 i);
364inline ::i32 unicode_to_lower_case(::i32 i);
365inline ::i32 unicode_to_upper_case(::i32 i);
366inline ::i32 unicode_to_title_case(::i32 i);
367inline ::i32 unicode_to_numeric_value(::i32 i, ::f32 * f);
370inline bool unicode_is_lower_case(::i32 iUniIndex);
371inline bool unicode_is_upper_case(::i32 iUniIndex);
372inline bool unicode_is_title_case(::i32 iUniIndex);
373inline bool unicode_is_letter(::i32 iUniIndex);
374inline bool unicode_is_letter_or_digit(::i32 iUniIndex);
375inline bool unicode_is_digit(::i32 iUniIndex);
376inline bool unicode_is_number(::i32 iUniIndex);
377inline bool unicode_is_assigned(::i32 iUniIndex);
378inline bool unicode_is_space_char(::i32 iUniIndex);
383bool unicode_is_number(const ::scoped_string & scopedstrUtf8Char);
386inline ECharCategory unicode_get_category(::i32 i);
387inline ::i32 unicode_get_combining_class(::i32 i);
388inline bool unicode_is_mirrored(::i32 i);
390string unicode_get_category_name(const ::scoped_string & scopedstrUtf8Char);
391ECharCategory unicode_get_category(const ::scoped_string & scopedstrUtf8Char);
393::i32 unicode_get_combining_class(const ::scoped_string & scopedstrUtf8Char);
394bool unicode_is_mirrored(const ::scoped_string & scopedstrUtf8Char);
396::i32 unicode_size_of_tables();
399inline bool unicode_is_kanji(::i64 i) {
return i >= 0x4E00 && i <= 0x9FBF; }
400inline bool unicode_is_hiragana(::i64 i) {
return i >= 0x3040 && i <= 0x309F; }
401inline bool unicode_is_katakana(::i64 i) {
return i >= 0x30A0 && i <= 0x30FF; }
402inline bool unicode_is_japanese(::i64 i) {
return unicode_is_kanji(i) || unicode_is_hiragana(i) || unicode_is_katakana(i); }
403inline bool unicode_is_kanji(const_char_pointer pszUtf8) {
return unicode_is_kanji(unicode_index(pszUtf8)); }
404inline bool unicode_is_hiragana(const_char_pointer pszUtf8) {
return unicode_is_hiragana(unicode_index(pszUtf8)); }
405inline bool unicode_is_katakana(const_char_pointer pszUtf8) {
return unicode_is_katakana(unicode_index(pszUtf8)); }
406inline bool unicode_is_japanese(const_char_pointer pszUtf8) {
return unicode_is_japanese(unicode_index(pszUtf8)); }
409void * unicode_char_bidi_names_non_usage_warning();
412::i32 unicode_ref_tables();
413const_char_pointer unicode_get_category_name(::i32 i);
429CLASS_DECL_ACME
string type_name(const ::std::type_info& typeinfo);
441CLASS_DECL_ACME
string string_from_strdup(const_char_pointer psz);
Definition _template_after_initial_concepts.h:15
Definition aaa_want_to_remove_str_wstring.h:94