Skip to content

Commit 70dea2a

Browse files
committed
✨ windows_code_page cuneicode type initial markup
1 parent 0c83923 commit 70dea2a

File tree

5 files changed

+843
-14
lines changed

5 files changed

+843
-14
lines changed

include/ztd/cuneicode/mcstate.h

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,22 @@ typedef enum cnc_mcstate_indicator {
8282
CNC_MCSTATE_INDICATOR_RAW = 1,
8383
//////
8484
/// @brief Reserved, do NOT use.
85-
CNC_MCSTATE_INDICATOR___RESERVED1 = 2
85+
CNC_MCSTATE_INDICATOR___RESERVED1 = 2,
86+
//////
87+
/// @brief Reserved, do NOT use.
88+
CNC_MCSTATE_INDICATOR___RESERVED2 = 3,
89+
//////
90+
/// @brief Reserved, do NOT use.
91+
CNC_MCSTATE_INDICATOR___RESERVED3 = 4,
92+
//////
93+
/// @brief Reserved, do NOT use.
94+
CNC_MCSTATE_INDICATOR___RESERVED4 = 5,
95+
//////
96+
/// @brief Reserved, do NOT use.
97+
CNC_MCSTATE_INDICATOR___RESERVED5 = 6,
98+
//////
99+
/// @brief Reserved, do NOT use.
100+
CNC_MCSTATE_INDICATOR___RESERVED6 = 7
86101
} cnc_mcstate_indicator;
87102

88103
//////
@@ -95,7 +110,7 @@ typedef union cnc_mcstate_t {
95110
/// @brief Shared data as part of every structure within a cnc_mcstate_t.
96111
struct cnc_header_t {
97112
//////
98-
/// @brief The indactor. Must be set by any custom encoding routine using cnc_mcstate_t
113+
/// @brief The indicator. Must be set by any custom encoding routine using cnc_mcstate_t
99114
/// and desiring custom completion behavior to CNC_MCSTATE_INDICATOR_RAW.
100115
cnc_mcstate_indicator indicator : CHAR_BIT;
101116
//////
@@ -129,11 +144,27 @@ typedef union cnc_mcstate_t {
129144
ztd_mbstate_t __state1;
130145
} __locale;
131146
#endif
147+
//////
148+
/// @brief Private, do not access.
149+
struct __win32_code_page_t {
150+
//////
151+
/// @brief Private, do not access.
152+
cnc_mcstate_indicator __indicator : CHAR_BIT;
153+
//////
154+
/// @brief Private, do not access.
155+
unsigned int __assume_valid : 1;
156+
//////
157+
/// @brief Private, do not access.
158+
unsigned int __padding : (((sizeof(cnc_mcstate_indicator) * CHAR_BIT) - CHAR_BIT) - 1);
159+
//////
160+
/// @brief Private, do not access.
161+
uint32_t __code_page;
162+
} __win32_code_page;
132163
//////
133164
/// @brief The raw type for user use.
134165
struct __raw_t {
135166
//////
136-
/// @brief The indactor. Must be set by any custom encoding routine using cnc_mcstate_t
167+
/// @brief The indicator. Must be set by any custom encoding routine using cnc_mcstate_t
137168
/// and desiring custom completion behavior to CNC_MCSTATE_INDICATOR_RAW.
138169
cnc_mcstate_indicator indicator : CHAR_BIT;
139170
//////
@@ -161,7 +192,7 @@ typedef union cnc_mcstate_t {
161192
/// applicable.
162193
///
163194
/// @param[in,out] __state The state to turn validity on for.
164-
/// @param[in,out] __check_validity Whether or not to check for validity.
195+
/// @param[in] __check_validity Whether or not to check for validity.
165196
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
166197
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
167198
void cnc_mcstate_set_assume_valid(cnc_mcstate_t* __state, bool __check_validity);
@@ -174,6 +205,25 @@ void cnc_mcstate_set_assume_valid(cnc_mcstate_t* __state, bool __check_validity)
174205
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
175206
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE) bool cnc_mcstate_is_assuming_valid(const cnc_mcstate_t* __state);
176207

208+
//////
209+
/// @brief Sets internal state for the cnc_mcstate_t object to be a conversion working with a win32
210+
/// code page identifier.
211+
///
212+
/// @param[in,out] __state The state to inspect.
213+
/// @param[in] __win32_code_page_id Whether or not to check for validity.
214+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
215+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
216+
void cnc_mcstate_set_win32_code_page(cnc_mcstate_t* __state, uint32_t __win32_code_page_id);
217+
218+
//////
219+
/// @brief Gets the internal state for the cnc_mcstate_t object representing its current win32 code
220+
/// page identifier.
221+
///
222+
/// @param[in] __state The state to inspect.
223+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
224+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
225+
uint32_t cnc_mcstate_get_win32_code_page(const cnc_mcstate_t* __state);
226+
177227
//////
178228
/// @brief Returns whether or not the given cnc_mcstate_t has no more data that needs to be output.
179229
///
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
// ============================================================================
2+
//
3+
// ztd.cuneicode
4+
// Copyright © JeanHeyd "ThePhD" Meneide and Shepherd's Oasis, LLC
5+
// Contact: opensource@soasis.org
6+
//
7+
// Commercial License Usage
8+
// Licensees holding valid commercial ztd.cuneicode licenses may use this file
9+
// in accordance with the commercial license agreement provided with the
10+
// Software or, alternatively, in accordance with the terms contained in
11+
// a written agreement between you and Shepherd's Oasis, LLC.
12+
// For licensing terms and conditions see your agreement. For
13+
// further information contact opensource@soasis.org.
14+
//
15+
// Apache License Version 2 Usage
16+
// Alternatively, this file may be used under the terms of Apache License
17+
// Version 2.0 (the "License"); you may not use this file except in compliance
18+
// with the License. You may obtain a copy of the License at
19+
//
20+
// https://www.apache.org/licenses/LICENSE-2.0
21+
//
22+
// Unless required by applicable law or agreed to in writing, software
23+
// distributed under the License is distributed on an "AS IS" BASIS,
24+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25+
// See the License for the specific language governing permissions and
26+
// limitations under the License.
27+
//
28+
// ========================================================================= //
29+
30+
#ifndef ZTD_CUNEICODE_WINDOWS_CODE_PAGE_H
31+
#define ZTD_CUNEICODE_WINDOWS_CODE_PAGE_H
32+
33+
#pragma once
34+
35+
#include <ztd/cuneicode/version.h>
36+
37+
#include <ztd/cuneicode/mcerr.h>
38+
#include <ztd/cuneicode/mcstate.h>
39+
#include <ztd/idk/charN_t.h>
40+
41+
#if ZTD_IS_ON(ZTD_CXX)
42+
#include <cstddef>
43+
#else
44+
#include <stddef.h>
45+
#include <stdbool.h>
46+
#endif
47+
48+
//////
49+
/// @addtogroup ztd_cuneicode_conversion Conversion Functions
50+
///
51+
/// @{
52+
53+
//////
54+
/// @see cnc_c32ntomcn
55+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
56+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
57+
cnc_mcerr cnc_c32ntomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
58+
size_t* __p_src_len, const ztd_char32_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
59+
60+
//////
61+
/// @see cnc_c32nrtomcn
62+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
63+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
64+
cnc_mcerr cnc_c32nrtomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
65+
size_t* __p_src_len, const ztd_char32_t** __p_src, cnc_mcstate_t* __p_state)
66+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
67+
68+
//////
69+
/// @see cnc_mcntoc32n
70+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
71+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
72+
cnc_mcerr cnc_mcntoc32n_windows_code_page(size_t* __p_maybe_dst_len, ztd_char32_t** __p_maybe_dst,
73+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
74+
75+
//////
76+
/// @see cnc_mcnrtoc32n
77+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
78+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
79+
cnc_mcerr cnc_mcnrtoc32n_windows_code_page(size_t* __p_maybe_dst_len, ztd_char32_t** __p_maybe_dst,
80+
size_t* __p_src_len, const ztd_char_t** __p_src, cnc_mcstate_t* __p_state)
81+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
82+
83+
84+
85+
//////
86+
/// @see cnc_c32sntomcsn
87+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
88+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
89+
cnc_mcerr cnc_c32sntomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
90+
size_t* __p_src_len, const ztd_char32_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
91+
92+
//////
93+
/// @see cnc_c32snrtomcsn
94+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
95+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
96+
cnc_mcerr cnc_c32snrtomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
97+
size_t* __p_src_len, const ztd_char32_t** __p_src, cnc_mcstate_t* __p_state)
98+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
99+
100+
//////
101+
/// @see cnc_mcsntoc32sn
102+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
103+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
104+
cnc_mcerr cnc_mcsntoc32sn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char32_t** __p_maybe_dst,
105+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
106+
107+
//////
108+
/// @see cnc_mcsnrtoc32sn
109+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
110+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
111+
cnc_mcerr cnc_mcsnrtoc32sn_windows_code_page(size_t* __p_maybe_dst_len,
112+
ztd_char32_t** __p_maybe_dst, size_t* __p_src_len, const ztd_char_t** __p_src,
113+
cnc_mcstate_t* __p_state) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
114+
115+
116+
//////
117+
/// @see cnc_c16ntomcn
118+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
119+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
120+
cnc_mcerr cnc_c16ntomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
121+
size_t* __p_src_len, const ztd_char16_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
122+
123+
//////
124+
/// @see cnc_c16nrtomcn
125+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
126+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
127+
cnc_mcerr cnc_c16nrtomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
128+
size_t* __p_src_len, const ztd_char16_t** __p_src, cnc_mcstate_t* __p_state)
129+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
130+
131+
//////
132+
/// @see cnc_mcntoc16n
133+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
134+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
135+
cnc_mcerr cnc_mcntoc16n_windows_code_page(size_t* __p_maybe_dst_len, ztd_char16_t** __p_maybe_dst,
136+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
137+
138+
//////
139+
/// @see cnc_mcnrtoc16n
140+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
141+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
142+
cnc_mcerr cnc_mcnrtoc16n_windows_code_page(size_t* __p_maybe_dst_len, ztd_char16_t** __p_maybe_dst,
143+
size_t* __p_src_len, const ztd_char_t** __p_src, cnc_mcstate_t* __p_state)
144+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
145+
146+
147+
148+
//////
149+
/// @see cnc_c16sntomcsn
150+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
151+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
152+
cnc_mcerr cnc_c16sntomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
153+
size_t* __p_src_len, const ztd_char16_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
154+
155+
//////
156+
/// @see cnc_c16snrtomcsn
157+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
158+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
159+
cnc_mcerr cnc_c16snrtomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
160+
size_t* __p_src_len, const ztd_char16_t** __p_src, cnc_mcstate_t* __p_state)
161+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
162+
163+
//////
164+
/// @see cnc_mcsntoc16sn
165+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
166+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
167+
cnc_mcerr cnc_mcsntoc16sn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char16_t** __p_maybe_dst,
168+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
169+
170+
//////
171+
/// @see cnc_mcsnrtoc16sn
172+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
173+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
174+
cnc_mcerr cnc_mcsnrtoc16sn_windows_code_page(size_t* __p_maybe_dst_len,
175+
ztd_char16_t** __p_maybe_dst, size_t* __p_src_len, const ztd_char_t** __p_src,
176+
cnc_mcstate_t* __p_state) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
177+
178+
179+
180+
//////
181+
/// @see cnc_mwcntomcn
182+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
183+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
184+
cnc_mcerr cnc_mwcntomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
185+
size_t* __p_src_len, const ztd_wchar_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
186+
187+
//////
188+
/// @see cnc_mwcnrtomcn
189+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
190+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
191+
cnc_mcerr cnc_mwcnrtomcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
192+
size_t* __p_src_len, const ztd_wchar_t** __p_src, cnc_mcstate_t* __p_state)
193+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
194+
195+
//////
196+
/// @see cnc_mcntomwcn
197+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
198+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
199+
cnc_mcerr cnc_mcntomwcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_wchar_t** __p_maybe_dst,
200+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
201+
202+
//////
203+
/// @see cnc_mcnrtomwcn
204+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
205+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
206+
cnc_mcerr cnc_mcnrtomwcn_windows_code_page(size_t* __p_maybe_dst_len, ztd_wchar_t** __p_maybe_dst,
207+
size_t* __p_src_len, const ztd_char_t** __p_src, cnc_mcstate_t* __p_state)
208+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
209+
210+
211+
212+
//////
213+
/// @see cnc_mwcsntomcsn
214+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
215+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
216+
cnc_mcerr cnc_mwcsntomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
217+
size_t* __p_src_len, const ztd_wchar_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
218+
219+
//////
220+
/// @see cnc_mwcsnrtomcsn
221+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
222+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
223+
cnc_mcerr cnc_mwcsnrtomcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_char_t** __p_maybe_dst,
224+
size_t* __p_src_len, const ztd_wchar_t** __p_src, cnc_mcstate_t* __p_state)
225+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
226+
227+
//////
228+
/// @see cnc_mcsntomwcsn
229+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
230+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
231+
cnc_mcerr cnc_mcsntomwcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_wchar_t** __p_maybe_dst,
232+
size_t* __p_src_len, const ztd_char_t** __p_src) ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
233+
234+
//////
235+
/// @see cnc_mcsnrtomwcsn
236+
ZTD_USE(ZTD_C_LANGUAGE_LINKAGE)
237+
ZTD_USE(ZTD_CUNEICODE_API_LINKAGE)
238+
cnc_mcerr cnc_mcsnrtomwcsn_windows_code_page(size_t* __p_maybe_dst_len, ztd_wchar_t** __p_maybe_dst,
239+
size_t* __p_src_len, const ztd_char_t** __p_src, cnc_mcstate_t* __p_state)
240+
ZTD_USE(ZTD_NOEXCEPT_IF_CXX);
241+
242+
243+
//////
244+
/// @}
245+
246+
#endif

source/include/ztd/cuneicode/detail/state.hpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,13 @@
3535
#include <ztd/cuneicode/mcstate.h>
3636
#include <ztd/idk/static_assert.hpp>
3737

38-
inline constexpr cnc_mcstate_indicator __mc_s_i_locale = (cnc_mcstate_indicator)0;
39-
inline constexpr cnc_mcstate_indicator __mc_s_i_raw = (cnc_mcstate_indicator)1;
40-
inline constexpr cnc_mcstate_indicator __mc_s_i_punycode = (cnc_mcstate_indicator)2;
41-
42-
static_assert(__mc_s_i_locale == CNC_MCSTATE_INDICATOR___RESERVED0,
43-
"mismatch between reserved and internal indicator values (locale)");
44-
static_assert(__mc_s_i_raw == CNC_MCSTATE_INDICATOR_RAW,
45-
"mismatch between reserved and internal indicator values (raw)");
46-
static_assert(__mc_s_i_punycode == CNC_MCSTATE_INDICATOR___RESERVED1,
47-
"mismatch between reserved and internal indicator values (punycode)");
38+
inline constexpr cnc_mcstate_indicator __mc_s_i_locale
39+
= (cnc_mcstate_indicator)CNC_MCSTATE_INDICATOR___RESERVED0;
40+
inline constexpr cnc_mcstate_indicator __mc_s_i_raw
41+
= (cnc_mcstate_indicator)CNC_MCSTATE_INDICATOR_RAW;
42+
inline constexpr cnc_mcstate_indicator __mc_s_i_punycode
43+
= (cnc_mcstate_indicator)CNC_MCSTATE_INDICATOR___RESERVED1;
44+
inline constexpr cnc_mcstate_indicator __mc_s_i_win32_code_page
45+
= (cnc_mcstate_indicator)CNC_MCSTATE_INDICATOR___RESERVED2;
4846

4947
#endif

0 commit comments

Comments
 (0)