Skip to content

Commit 19e6a7d

Browse files
committed
✨ windows_code_page in the registry
1 parent 70dea2a commit 19e6a7d

File tree

3 files changed

+192
-0
lines changed

3 files changed

+192
-0
lines changed

include/ztd/cuneicode/mcchar_named.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,6 @@
8989
#include <ztd/cuneicode/windows_1255.h>
9090
#include <ztd/cuneicode/windows_1257.h>
9191
#include <ztd/cuneicode/windows_1258.h>
92+
#include <ztd/cuneicode/windows_code_page.h>
9293

9394
#endif

source/ztd/cuneicode/conv.cpp

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,16 @@ namespace {
132132
return __code_and_ptr.first;
133133
}
134134

135+
template <uint32_t _CodePageId, bool _SetAssumeValidToTrue = false>
136+
static inline cnc_open_err __windows_code_page_open_function(
137+
cnc_conversion_registry* __registry, cnc_conversion* __conversion,
138+
size_t* __p_available_space, size_t* __p_max_alignment, void** __p_space) noexcept {
139+
auto __code_and_ptr = __core_open_function<cnc_mcstate_t, _SetAssumeValidToTrue>(
140+
__registry, __conversion, __p_available_space, __p_max_alignment, __p_space);
141+
cnc_mcstate_set_win32_code_page(__code_and_ptr.second, _CodePageId);
142+
return __code_and_ptr.first;
143+
}
144+
135145
struct __intermediary_cnc_conversion {
136146
cnc_conversion __link0;
137147
cnc_conversion __link1;
@@ -1125,6 +1135,186 @@ extern cnc_open_err __cnc_add_default_registry_entries(cnc_conversion_registry*
11251135
_CHECK_ERR_AND_RETURN(cnc_registry_add_alias_c8(
11261136
__registry, ::cnc::__cnc_detail::__exec_alias(), ::cnc::__cnc_detail::__exec_name()));
11271137

1138+
// Windows conversions
1139+
#if ZTD_IS_ON(ZTD_PLATFORM_WINDOWS)
1140+
#define _ADD_WINDOWS_CODE_PAGE_MCN(_NAME, _ALIAS, _CODE_PAGE_ID) \
1141+
_CHECK_ERR_AND_RETURN(cnc_registry_add_c8(__registry, (const ztd_char8_t*)(_NAME), \
1142+
::cnc::__cnc_detail::__utf32_name(), \
1143+
&__typical_multi_conversion<char, ztd_char32_t, \
1144+
decltype(&::cnc_mcsnrtoc32sn_windows_code_page), \
1145+
&::cnc_mcsnrtoc32sn_windows_code_page>, \
1146+
&__typical_single_conversion<char, ztd_char32_t, \
1147+
decltype(&::cnc_mcnrtoc32n_windows_code_page), \
1148+
&::cnc_mcnrtoc32n_windows_code_page>, \
1149+
&::__typical_state_is_complete, &::__windows_code_page_open_function<_CODE_PAGE_ID>, \
1150+
&::__basic_close_function<cnc_mcstate_t>)); \
1151+
_CHECK_ERR_AND_RETURN(cnc_registry_add_c8(__registry, ::cnc::__cnc_detail::__utf32_name(), \
1152+
(const ztd_char8_t*)(_NAME), \
1153+
&__typical_multi_conversion<ztd_char32_t, char, \
1154+
decltype(&::cnc_c32snrtomcsn_windows_code_page), \
1155+
&::cnc_c32snrtomcsn_windows_code_page>, \
1156+
&__typical_single_conversion<ztd_char32_t, char, \
1157+
decltype(&::cnc_c32nrtomcn_windows_code_page), \
1158+
&::cnc_c32nrtomcn_windows_code_page>, \
1159+
&::__typical_state_is_complete, &::__windows_code_page_open_function<_CODE_PAGE_ID>, \
1160+
&::__basic_close_function<cnc_mcstate_t>)); \
1161+
_CHECK_ERR_AND_RETURN(cnc_registry_add_alias_c8( \
1162+
__registry, (const ztd_char8_t*)(_ALIAS), (const ztd_char8_t*)(_NAME)));
1163+
1164+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-037", "win32-037", 037);
1165+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-437", "win32-437", 437);
1166+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-500", "win32-500", 500);
1167+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-708", "win32-708", 708);
1168+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-709", "win32-709", 709);
1169+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-710", "win32-710", 710);
1170+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-720", "win32-720", 720);
1171+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-737", "win32-737", 737);
1172+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-775", "win32-775", 775);
1173+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-850", "win32-850", 850);
1174+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-852", "win32-852", 852);
1175+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-855", "win32-855", 855);
1176+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-857", "win32-857", 857);
1177+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-858", "win32-858", 858);
1178+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-860", "win32-860", 860);
1179+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-861", "win32-861", 861);
1180+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-862", "win32-862", 862);
1181+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-863", "win32-863", 863);
1182+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-864", "win32-864", 864);
1183+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-865", "win32-865", 865);
1184+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-866", "win32-866", 866);
1185+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-869", "win32-869", 869);
1186+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-870", "win32-870", 870);
1187+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-874", "win32-874", 874);
1188+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-875", "win32-875", 875);
1189+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-932", "win32-932", 932);
1190+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-936", "win32-936", 936);
1191+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-949", "win32-949", 949);
1192+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-950", "win32-950", 950);
1193+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1026", "win32-1026", 1026);
1194+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1047", "win32-1047", 1047);
1195+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1140", "win32-1140", 1140);
1196+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1141", "win32-1141", 1141);
1197+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1142", "win32-1142", 1142);
1198+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1143", "win32-1143", 1143);
1199+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1144", "win32-1144", 1144);
1200+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1145", "win32-1145", 1145);
1201+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1146", "win32-1146", 1146);
1202+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1147", "win32-1147", 1147);
1203+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1148", "win32-1148", 1148);
1204+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1149", "win32-1149", 1149);
1205+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1200", "win32-1200", 1200);
1206+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1201", "win32-1201", 1201);
1207+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1250", "win32-1250", 1250);
1208+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1251", "win32-1251", 1251);
1209+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1252", "win32-1252", 1252);
1210+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1253", "win32-1253", 1253);
1211+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1254", "win32-1254", 1254);
1212+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1255", "win32-1255", 1255);
1213+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1256", "win32-1256", 1256);
1214+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1257", "win32-1257", 1257);
1215+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1258", "win32-1258", 1258);
1216+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-1361", "win32-1361", 1361);
1217+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10000", "win32-10000", 10000);
1218+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10001", "win32-10001", 10001);
1219+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10002", "win32-10002", 10002);
1220+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10003", "win32-10003", 10003);
1221+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10004", "win32-10004", 10004);
1222+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10005", "win32-10005", 10005);
1223+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10006", "win32-10006", 10006);
1224+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10007", "win32-10007", 10007);
1225+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10008", "win32-10008", 10008);
1226+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10010", "win32-10010", 10010);
1227+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10017", "win32-10017", 10017);
1228+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10021", "win32-10021", 10021);
1229+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10029", "win32-10029", 10029);
1230+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10079", "win32-10079", 10079);
1231+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10081", "win32-10081", 10081);
1232+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-10082", "win32-10082", 10082);
1233+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-12000", "win32-12000", 12000);
1234+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-12001", "win32-12001", 12001);
1235+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20000", "win32-20000", 20000);
1236+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20001", "win32-20001", 20001);
1237+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20002", "win32-20002", 20002);
1238+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20003", "win32-20003", 20003);
1239+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20004", "win32-20004", 20004);
1240+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20005", "win32-20005", 20005);
1241+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20105", "win32-20105", 20105);
1242+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20106", "win32-20106", 20106);
1243+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20107", "win32-20107", 20107);
1244+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20108", "win32-20108", 20108);
1245+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20127", "win32-20127", 20127);
1246+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20261", "win32-20261", 20261);
1247+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20269", "win32-20269", 20269);
1248+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20273", "win32-20273", 20273);
1249+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20277", "win32-20277", 20277);
1250+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20278", "win32-20278", 20278);
1251+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20280", "win32-20280", 20280);
1252+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20284", "win32-20284", 20284);
1253+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20285", "win32-20285", 20285);
1254+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20290", "win32-20290", 20290);
1255+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20297", "win32-20297", 20297);
1256+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20420", "win32-20420", 20420);
1257+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20423", "win32-20423", 20423);
1258+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20424", "win32-20424", 20424);
1259+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20833", "win32-20833", 20833);
1260+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20838", "win32-20838", 20838);
1261+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20866", "win32-20866", 20866);
1262+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20871", "win32-20871", 20871);
1263+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20880", "win32-20880", 20880);
1264+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20905", "win32-20905", 20905);
1265+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20924", "win32-20924", 20924);
1266+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20932", "win32-20932", 20932);
1267+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20936", "win32-20936", 20936);
1268+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-20949", "win32-20949", 20949);
1269+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-21025", "win32-21025", 21025);
1270+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-21866", "win32-21866", 21866);
1271+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28591", "win32-28591", 28591);
1272+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28592", "win32-28592", 28592);
1273+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28593", "win32-28593", 28593);
1274+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28594", "win32-28594", 28594);
1275+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28595", "win32-28595", 28595);
1276+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28596", "win32-28596", 28596);
1277+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28597", "win32-28597", 28597);
1278+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28598", "win32-28598", 28598);
1279+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28599", "win32-28599", 28599);
1280+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28603", "win32-28603", 28603);
1281+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-28605", "win32-28605", 28605);
1282+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-29001", "win32-29001", 29001);
1283+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-38598", "win32-38598", 38598);
1284+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50220", "win32-50220", 50220);
1285+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50221", "win32-50221", 50221);
1286+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50222", "win32-50222", 50222);
1287+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50225", "win32-50225", 50225);
1288+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50227", "win32-50227", 50227);
1289+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50229", "win32-50229", 50229);
1290+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50930", "win32-50930", 50930);
1291+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50931", "win32-50931", 50931);
1292+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50933", "win32-50933", 50933);
1293+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50935", "win32-50935", 50935);
1294+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50936", "win32-50936", 50936);
1295+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50937", "win32-50937", 50937);
1296+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-50939", "win32-50939", 50939);
1297+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-51932", "win32-51932", 51932);
1298+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-51936", "win32-51936", 51936);
1299+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-51949", "win32-51949", 51949);
1300+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-51950", "win32-51950", 51950);
1301+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-52936", "win32-52936", 52936);
1302+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-54936", "win32-54936", 54936);
1303+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57002", "win32-57002", 57002);
1304+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57003", "win32-57003", 57003);
1305+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57004", "win32-57004", 57004);
1306+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57005", "win32-57005", 57005);
1307+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57006", "win32-57006", 57006);
1308+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57007", "win32-57007", 57007);
1309+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57008", "win32-57008", 57008);
1310+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57009", "win32-57009", 57009);
1311+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57010", "win32-57010", 57010);
1312+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-57011", "win32-57011", 57011);
1313+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-65000", "win32-65000", 65000);
1314+
_ADD_WINDOWS_CODE_PAGE_MCN("win32-code_page-65001", "win32-65001", 65001);
1315+
#endif
1316+
1317+
#undef _ADD_WINDOWS_CODE_PAGE_MCN
11281318
#undef _ADD_MCN_NAMED_ENCODING
11291319
#undef _ADD_MCN_NAMED_ENCODING_BASIC
11301320
#undef _CHECK_ERR_AND_RETURN

source/ztd/cuneicode/mcstate.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void cnc_mcstate_set_win32_code_page(cnc_mcstate_t* __state, uint32_t __win32_co
6464
if (__state == nullptr) {
6565
return;
6666
}
67+
__state->__win32_code_page.__indicator = __mc_s_i_win32_code_page;
6768
__state->__win32_code_page.__code_page = __win32_code_page_id;
6869
}
6970

0 commit comments

Comments
 (0)