4#include "acme/prototype/string/x/x_charcategory.h"
5#include "acme/prototype/string/x/x_defines.h"
6#include "acme/prototype/string/x/x_tables.h"
9CLASS_DECL_ACME ::i32 trailingBytesForUTF8(::ansi_character ch);
12inline ::i32 utf8_unicode_length(::i32 c) {
return trailingBytesForUTF8(c) + 1; }
16inline ::i32 utf8_o(::i8 cExtraBytes);
19inline ::i8 utf8_e(::u8 c);
23CLASS_DECL_ACME character_count utf8_len(const_char_pointer psz);
26template <
typename CHARACTER,
typename CHARACTER_COUNT >
31template<
typename CHARACTER,
typename CHARACTER_COUNT>
36template<
typename CHARACTER,
typename CHARACTER_COUNT>
41template <
typename CHARACTER >
45 return unicode_next(psz, (::i32 *)
nullptr);
50template<
typename CHARACTER>
51inline CHARACTER *unicode_prior(
CHARACTER *psz,
const non_const<CHARACTER> *piRemaining)
55template<
typename CHARACTER>
56inline CHARACTER *unicode_prior(
CHARACTER *psz,
const non_const<CHARACTER> *piRemaining)
60template<
typename CHARACTER>
61inline CHARACTER *unicode_prior(
CHARACTER *psz,
const non_const<CHARACTER> *piRemaining)
69CLASS_DECL_ACME character_count ansi_to_ansi_len(const_char_pointer pcwsz, character_count input_size = -1);
70CLASS_DECL_ACME character_count ansi_to_ansi_len2(const_char_pointer pcwsz, character_count & input_size);
71CLASS_DECL_ACME character_count ansi_to_ansi(const_char_pointer *pwsz,
const const_char_pointer *pcwsz,
72 character_count input_size = -1);
76CLASS_DECL_ACME character_count wd16_to_wd32_len(const ::wd16_character* pcwsz, character_count input_size = -1);
77CLASS_DECL_ACME character_count wd16_to_wd32_len2(const ::wd16_character *pcwsz, character_count & input_size);
78CLASS_DECL_ACME character_count wd16_to_wd32(::wd32_character* pwsz, const ::wd16_character* pcwsz, character_count input_size = -1);
81CLASS_DECL_ACME ::wd32_character* wd16_to_wd32_dup(const ::wd16_character* pcwsz, character_count input_size = -1);
85CLASS_DECL_ACME character_count wd32_to_wd16_len(const ::wd32_character* pcwsz, character_count input_size = -1);
86CLASS_DECL_ACME character_count wd32_to_wd16_len2(const ::wd32_character *pcwsz, character_count & input_size);
87CLASS_DECL_ACME character_count wd32_to_wd16(::wd16_character * pwsz, const ::wd32_character* pcwsz, character_count input_size = -1);
89CLASS_DECL_ACME ::wd16_character* wd32_to_wd16_dup(const ::wd16_character* pcwsz, character_count input_size = -1);
93CLASS_DECL_ACME character_count utf16_len(const ::wd16_character* psz);
99CLASS_DECL_ACME character_count wd16_to_wd16_len(
const wd16_character * pcwsz, character_count input_size = -1);
100CLASS_DECL_ACME character_count wd16_to_wd16_len2(
const wd16_character * pcwsz, character_count &input_size);
101CLASS_DECL_ACME character_count wd16_to_wd16(wd16_character *pwsz,
const wd16_character *pcwsz,
102 character_count input_size = -1);
107CLASS_DECL_ACME character_count ansi_to_wd16_len(const_char_pointer psz, character_count srclen = -1);
108CLASS_DECL_ACME character_count ansi_to_wd16_len2(const_char_pointer psz, character_count & srclen);
109CLASS_DECL_ACME character_count ansi_to_wd16(::wd16_character* pwsz, const_char_pointer psz, character_count srclen = -1);
111CLASS_DECL_ACME ::wd16_character * ansi_to_wd16_dup(const_char_pointer input, character_count input_size);
114CLASS_DECL_ACME character_count wd16_to_ansi_len(const ::wd16_character* pwsz, character_count srclen = -1);
115CLASS_DECL_ACME character_count wd16_to_ansi_len2(const ::wd16_character *pwsz, character_count & srclen);
116CLASS_DECL_ACME character_count wd16_to_ansi(char_pointer psz, const ::wd16_character* pwsz, character_count srclen = -11);
118CLASS_DECL_ACME char_pointer wd16_to_ansi_dup(const ::wd16_character * input, character_count input_size);
133CLASS_DECL_ACME character_count utf32_len(const ::wd32_character* psz);
140CLASS_DECL_ACME character_count wd32_to_wd32_len(
const wd32_character * pcwsz, character_count input_size = -1);
141CLASS_DECL_ACME character_count wd32_to_wd32_len2(
const wd32_character * pcwsz, character_count &input_size);
142CLASS_DECL_ACME character_count wd32_to_wd32(wd32_character *pwsz,
const wd32_character *pcwsz,
143 character_count input_size = -1);
146CLASS_DECL_ACME character_count ansi_to_wd32_len(const_char_pointer psz, character_count srclen = -1);
147CLASS_DECL_ACME character_count ansi_to_wd32_len2(const_char_pointer psz, character_count & srclen);
148CLASS_DECL_ACME character_count ansi_to_wd32(::wd32_character* pwsz, const_char_pointer psz, character_count srclen = -1);
150CLASS_DECL_ACME ::wd32_character* ansi_to_wd32_dup(const_char_pointer pcwsz, character_count input_size = -1);
153CLASS_DECL_ACME character_count wd32_to_ansi_len(const ::wd32_character* pwsz, character_count srclen = -1);
154CLASS_DECL_ACME character_count wd32_to_ansi_len2(const ::wd32_character *pwsz, character_count & srclen);
155CLASS_DECL_ACME character_count wd32_to_ansi(char_pointer psz, const ::wd32_character* pwsz, character_count srclen = -1);
157CLASS_DECL_ACME char_pointer wd32_to_ansi_dup(const ::wd32_character * input, character_count input_size);
171inline character_count wd32_to_ansi_char_len(::wd32_character wch);
173inline character_count wd32_to_ansi_char(char_pointer psz, ::wd32_character wch);
176inline character_count replacement_utf8_char(char_pointer psz)
178 psz[0] = (::i8) 0xEF;
179 psz[1] = (::i8) 0xBF;
180 psz[2] = (::i8) 0xBD;
195inline character_count wd16_to_wd32_char_len(const ::wd16_character * input, character_count len);
198inline character_count wd16_to_wd32_char(::wd32_character * output, const ::wd16_character * input, character_count len);
201inline character_count wd16_to_ansi_char_len(const ::wd16_character ** ppu16a, character_count * plen);
204inline character_count wd16_to_ansi_char(char_pointer psz, const ::wd16_character ** ppu16a, character_count * plen);
207#if WCHAR_T_SIZE == 16
210inline character_count utf8_to_unichar_len(const_char_pointer psz);
211inline character_count utf8_to_unichar_len(const_char_pointer psz, character_count srclen);
212inline character_count utf8_to_unichar(::wd16_character * pwsz, const_char_pointer psz);
213inline character_count utf8_to_unichar(::wd16_character * pwsz, const_char_pointer psz, character_count srclen);
216inline character_count unichar_to_utf8_len(const ::wd16_character * pwsz);
217inline character_count unichar_to_utf8_len(const ::wd16_character * pwsz, character_count srclen);
218inline character_count unichar_to_utf8(char_pointer psz, const ::wd16_character * pwsz);
219inline character_count unichar_to_utf8(char_pointer psz, const ::wd16_character * pwsz, character_count srclen);
225inline character_count utf8_to_unichar_len(const_char_pointer psz, character_count srclen = -1);
226inline character_count utf8_to_unichar(::wd32_character* pwsz, const_char_pointer psz, character_count srclen = -1);
229inline character_count unichar_to_utf8_len(const ::wd32_character* pwsz, character_count srclen = -1);
230inline character_count unichar_to_utf8(char_pointer psz, const ::wd32_character* pwsz, character_count srclen = -1);
236inline character_count ansi_to_wd32_char(::wd32_character * output, const_char_pointer input, character_count srclen);
239inline ::i64 _ansi_to_wd32_char(const_char_pointer *ppsz, character_count * psrclen);
242inline character_count wd32_to_wd16_char(::wd16_character * pwd16sz, ::wd32_character wd32ch);