Orcus
Loading...
Searching...
No Matches
types.hpp
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 */
7
8#ifndef INCLUDED_ORCUS_TYPES_HPP
9#define INCLUDED_ORCUS_TYPES_HPP
10
11#include <cstdint>
12#include <cstdlib>
13#include <vector>
14#include <string>
15#include <unordered_set>
16#include "env.hpp"
17
18namespace orcus {
19
20class xmlns_context;
21class xmlns_repository;
22
27ORCUS_PSR_DLLPUBLIC extern const size_t index_not_found;
28
29// XML specific types
30
31using xml_token_t = size_t;
32using xmlns_id_t = const char*;
33
34using xml_token_pair_t = std::pair<xmlns_id_t, xml_token_t>;
35
36struct ORCUS_PSR_DLLPUBLIC xml_token_pair_hash
37{
38 size_t operator()(const xml_token_pair_t& v) const;
39};
40
41using xml_elem_stack_t = std::vector<xml_token_pair_t>;
42using xml_elem_set_t = std::unordered_set<xml_token_pair_t, xml_token_pair_hash>;
43
44ORCUS_PSR_DLLPUBLIC extern const xmlns_id_t XMLNS_UNKNOWN_ID;
45ORCUS_PSR_DLLPUBLIC extern const xml_token_t XML_UNKNOWN_TOKEN;
46
47struct ORCUS_PSR_DLLPUBLIC parse_error_value_t
48{
49 std::string_view str;
50 std::ptrdiff_t offset;
51
53 parse_error_value_t(std::string_view _str, std::ptrdiff_t _offset);
54
55 bool operator==(const parse_error_value_t& other) const;
56 bool operator!=(const parse_error_value_t& other) const;
57};
58
59struct ORCUS_PSR_DLLPUBLIC xml_name_t
60{
61 enum to_string_type { use_alias, use_short_name };
62
63 xmlns_id_t ns;
64 std::string_view name;
65
66 xml_name_t();
67 xml_name_t(xmlns_id_t _ns, std::string_view _name);
68 xml_name_t(const xml_name_t& r);
69
70 xml_name_t& operator= (const xml_name_t& other);
71
72 bool operator== (const xml_name_t& other) const;
73 bool operator!= (const xml_name_t& other) const;
74
75 std::string to_string(const xmlns_context& cxt, to_string_type type) const;
76
77 std::string to_string(const xmlns_repository& repo) const;
78};
79
80struct ORCUS_PSR_DLLPUBLIC xml_token_attr_t
81{
82 xmlns_id_t ns;
83 xml_token_t name;
84 std::string_view raw_name;
85 std::string_view value;
86
95
98 xmlns_id_t _ns, xml_token_t _name, std::string_view _value, bool _transient);
100 xmlns_id_t _ns, xml_token_t _name, std::string_view _raw_name,
101 std::string_view _value, bool _transient);
102};
103
108struct ORCUS_PSR_DLLPUBLIC xml_token_element_t
109{
110 xmlns_id_t ns;
111 xml_token_t name;
112 std::string_view raw_name;
113 std::vector<xml_token_attr_t> attrs;
114
115 xml_token_element_t& operator= (xml_token_element_t) = delete;
116
118 xml_token_element_t(xmlns_id_t _ns, xml_token_t _name, std::string_view _raw_name, std::vector<xml_token_attr_t>&& _attrs);
121};
122
128enum class character_set_t
129{
130 unspecified = 0,
131 us_ascii, // US-ASCII
132 iso_8859_1_1987, // ISO_8859-1:1987
133 iso_8859_2_1987, // ISO_8859-2:1987
134 iso_8859_3_1988, // ISO_8859-3:1988
135 iso_8859_4_1988, // ISO_8859-4:1988
136 iso_8859_5_1988, // ISO_8859-5:1988
137 iso_8859_6_1987, // ISO_8859-6:1987
138 iso_8859_7_1987, // ISO_8859-7:1987
139 iso_8859_8_1988, // ISO_8859-8:1988
140 iso_8859_9_1989, // ISO_8859-9:1989
141 iso_8859_10, // ISO-8859-10
142 iso_6937_2_add, // ISO_6937-2-add
143 jis_x0201, // JIS_X0201
144 jis_encoding, // JIS_Encoding
145 shift_jis, // Shift_JIS
146 extended_unix_code_packed_format_for_japanese, // Extended_UNIX_Code_Packed_Format_for_Japanese
147 extended_unix_code_fixed_width_for_japanese, // Extended_UNIX_Code_Fixed_Width_for_Japanese
148 bs_4730, // BS_4730
149 sen_850200_c, // SEN_850200_C
150 it, // IT
151 es, // ES
152 din_66003, // DIN_66003
153 ns_4551_1, // NS_4551-1
154 nf_z_62_010, // NF_Z_62-010
155 iso_10646_utf_1, // ISO-10646-UTF-1
156 iso_646_basic_1983, // ISO_646.basic:1983
157 invariant, // INVARIANT
158 iso_646_irv_1983, // ISO_646.irv:1983
159 nats_sefi, // NATS-SEFI
160 nats_sefi_add, // NATS-SEFI-ADD
161 nats_dano, // NATS-DANO
162 nats_dano_add, // NATS-DANO-ADD
163 sen_850200_b, // SEN_850200_B
164 ks_c_5601_1987, // KS_C_5601-1987
165 iso_2022_kr, // ISO-2022-KR
166 euc_kr, // EUC-KR
167 iso_2022_jp, // ISO-2022-JP
168 iso_2022_jp_2, // ISO-2022-JP-2
169 jis_c6220_1969_jp, // JIS_C6220-1969-jp
170 jis_c6220_1969_ro, // JIS_C6220-1969-ro
171 pt, // PT
172 greek7_old, // greek7-old
173 latin_greek, // latin-greek
174 nf_z_62_010_1973, // NF_Z_62-010_(1973)
175 latin_greek_1, // Latin-greek-1
176 iso_5427, // ISO_5427
177 jis_c6226_1978, // JIS_C6226-1978
178 bs_viewdata, // BS_viewdata
179 inis, // INIS
180 inis_8, // INIS-8
181 inis_cyrillic, // INIS-cyrillic
182 iso_5427_1981, // ISO_5427:1981
183 iso_5428_1980, // ISO_5428:1980
184 gb_1988_80, // GB_1988-80
185 gb_2312_80, // GB_2312-80
186 ns_4551_2, // NS_4551-2
187 videotex_suppl, // videotex-suppl
188 pt2, // PT2
189 es2, // ES2
190 msz_7795_3, // MSZ_7795.3
191 jis_c6226_1983, // JIS_C6226-1983
192 greek7, // greek7
193 asmo_449, // ASMO_449
194 iso_ir_90, // iso-ir-90
195 jis_c6229_1984_a, // JIS_C6229-1984-a
196 jis_c6229_1984_b, // JIS_C6229-1984-b
197 jis_c6229_1984_b_add, // JIS_C6229-1984-b-add
198 jis_c6229_1984_hand, // JIS_C6229-1984-hand
199 jis_c6229_1984_hand_add, // JIS_C6229-1984-hand-add
200 jis_c6229_1984_kana, // JIS_C6229-1984-kana
201 iso_2033_1983, // ISO_2033-1983
202 ansi_x3_110_1983, // ANSI_X3.110-1983
203 t_61_7bit, // T.61-7bit
204 t_61_8bit, // T.61-8bit
205 ecma_cyrillic, // ECMA-cyrillic
206 csa_z243_4_1985_1, // CSA_Z243.4-1985-1
207 csa_z243_4_1985_2, // CSA_Z243.4-1985-2
208 csa_z243_4_1985_gr, // CSA_Z243.4-1985-gr
209 iso_8859_6_e, // ISO_8859-6-E
210 iso_8859_6_i, // ISO_8859-6-I
211 t_101_g2, // T.101-G2
212 iso_8859_8_e, // ISO_8859-8-E
213 iso_8859_8_i, // ISO_8859-8-I
214 csn_369103, // CSN_369103
215 jus_i_b1_002, // JUS_I.B1.002
216 iec_p27_1, // IEC_P27-1
217 jus_i_b1_003_serb, // JUS_I.B1.003-serb
218 jus_i_b1_003_mac, // JUS_I.B1.003-mac
219 greek_ccitt, // greek-ccitt
220 nc_nc00_10_81, // NC_NC00-10:81
221 iso_6937_2_25, // ISO_6937-2-25
222 gost_19768_74, // GOST_19768-74
223 iso_8859_supp, // ISO_8859-supp
224 iso_10367_box, // ISO_10367-box
225 latin_lap, // latin-lap
226 jis_x0212_1990, // JIS_X0212-1990
227 ds_2089, // DS_2089
228 us_dk, // us-dk
229 dk_us, // dk-us
230 ksc5636, // KSC5636
231 unicode_1_1_utf_7, // UNICODE-1-1-UTF-7
232 iso_2022_cn, // ISO-2022-CN
233 iso_2022_cn_ext, // ISO-2022-CN-EXT
234 utf_8, // UTF-8
235 iso_8859_13, // ISO-8859-13
236 iso_8859_14, // ISO-8859-14
237 iso_8859_15, // ISO-8859-15
238 iso_8859_16, // ISO-8859-16
239 gbk, // GBK
240 gb18030, // GB18030
241 osd_ebcdic_df04_15, // OSD_EBCDIC_DF04_15
242 osd_ebcdic_df03_irv, // OSD_EBCDIC_DF03_IRV
243 osd_ebcdic_df04_1, // OSD_EBCDIC_DF04_1
244 iso_11548_1, // ISO-11548-1
245 kz_1048, // KZ-1048
246 iso_10646_ucs_2, // ISO-10646-UCS-2
247 iso_10646_ucs_4, // ISO-10646-UCS-4
248 iso_10646_ucs_basic, // ISO-10646-UCS-Basic
249 iso_10646_unicode_latin1, // ISO-10646-Unicode-Latin1
250 iso_10646_j_1, // ISO-10646-J-1
251 iso_unicode_ibm_1261, // ISO-Unicode-IBM-1261
252 iso_unicode_ibm_1268, // ISO-Unicode-IBM-1268
253 iso_unicode_ibm_1276, // ISO-Unicode-IBM-1276
254 iso_unicode_ibm_1264, // ISO-Unicode-IBM-1264
255 iso_unicode_ibm_1265, // ISO-Unicode-IBM-1265
256 unicode_1_1, // UNICODE-1-1
257 scsu, // SCSU
258 utf_7, // UTF-7
259 utf_16be, // UTF-16BE
260 utf_16le, // UTF-16LE
261 utf_16, // UTF-16
262 cesu_8, // CESU-8
263 utf_32, // UTF-32
264 utf_32be, // UTF-32BE
265 utf_32le, // UTF-32LE
266 bocu_1, // BOCU-1
267 iso_8859_1_windows_3_0_latin_1, // ISO-8859-1-Windows-3.0-Latin-1
268 iso_8859_1_windows_3_1_latin_1, // ISO-8859-1-Windows-3.1-Latin-1
269 iso_8859_2_windows_latin_2, // ISO-8859-2-Windows-Latin-2
270 iso_8859_9_windows_latin_5, // ISO-8859-9-Windows-Latin-5
271 hp_roman8, // hp-roman8
272 adobe_standard_encoding, // Adobe-Standard-Encoding
273 ventura_us, // Ventura-US
274 ventura_international, // Ventura-International
275 dec_mcs, // DEC-MCS
276 ibm850, // IBM850
277 pc8_danish_norwegian, // PC8-Danish-Norwegian
278 ibm862, // IBM862
279 pc8_turkish, // PC8-Turkish
280 ibm_symbols, // IBM-Symbols
281 ibm_thai, // IBM-Thai
282 hp_legal, // HP-Legal
283 hp_pi_font, // HP-Pi-font
284 hp_math8, // HP-Math8
285 adobe_symbol_encoding, // Adobe-Symbol-Encoding
286 hp_desktop, // HP-DeskTop
287 ventura_math, // Ventura-Math
288 microsoft_publishing, // Microsoft-Publishing
289 windows_31j, // Windows-31J
290 gb2312, // GB2312
291 big5, // Big5
292 macintosh, // macintosh
293 ibm037, // IBM037
294 ibm038, // IBM038
295 ibm273, // IBM273
296 ibm274, // IBM274
297 ibm275, // IBM275
298 ibm277, // IBM277
299 ibm278, // IBM278
300 ibm280, // IBM280
301 ibm281, // IBM281
302 ibm284, // IBM284
303 ibm285, // IBM285
304 ibm290, // IBM290
305 ibm297, // IBM297
306 ibm420, // IBM420
307 ibm423, // IBM423
308 ibm424, // IBM424
309 ibm437, // IBM437
310 ibm500, // IBM500
311 ibm851, // IBM851
312 ibm852, // IBM852
313 ibm855, // IBM855
314 ibm857, // IBM857
315 ibm860, // IBM860
316 ibm861, // IBM861
317 ibm863, // IBM863
318 ibm864, // IBM864
319 ibm865, // IBM865
320 ibm868, // IBM868
321 ibm869, // IBM869
322 ibm870, // IBM870
323 ibm871, // IBM871
324 ibm880, // IBM880
325 ibm891, // IBM891
326 ibm903, // IBM903
327 ibm904, // IBM904
328 ibm905, // IBM905
329 ibm918, // IBM918
330 ibm1026, // IBM1026
331 ebcdic_at_de, // EBCDIC-AT-DE
332 ebcdic_at_de_a, // EBCDIC-AT-DE-A
333 ebcdic_ca_fr, // EBCDIC-CA-FR
334 ebcdic_dk_no, // EBCDIC-DK-NO
335 ebcdic_dk_no_a, // EBCDIC-DK-NO-A
336 ebcdic_fi_se, // EBCDIC-FI-SE
337 ebcdic_fi_se_a, // EBCDIC-FI-SE-A
338 ebcdic_fr, // EBCDIC-FR
339 ebcdic_it, // EBCDIC-IT
340 ebcdic_pt, // EBCDIC-PT
341 ebcdic_es, // EBCDIC-ES
342 ebcdic_es_a, // EBCDIC-ES-A
343 ebcdic_es_s, // EBCDIC-ES-S
344 ebcdic_uk, // EBCDIC-UK
345 ebcdic_us, // EBCDIC-US
346 unknown_8bit, // UNKNOWN-8BIT
347 mnemonic, // MNEMONIC
348 mnem, // MNEM
349 viscii, // VISCII
350 viqr, // VIQR
351 koi8_r, // KOI8-R
352 hz_gb_2312, // HZ-GB-2312
353 ibm866, // IBM866
354 ibm775, // IBM775
355 koi8_u, // KOI8-U
356 ibm00858, // IBM00858
357 ibm00924, // IBM00924
358 ibm01140, // IBM01140
359 ibm01141, // IBM01141
360 ibm01142, // IBM01142
361 ibm01143, // IBM01143
362 ibm01144, // IBM01144
363 ibm01145, // IBM01145
364 ibm01146, // IBM01146
365 ibm01147, // IBM01147
366 ibm01148, // IBM01148
367 ibm01149, // IBM01149
368 big5_hkscs, // Big5-HKSCS
369 ibm1047, // IBM1047
370 ptcp154, // PTCP154
371 amiga_1251, // Amiga-1251
372 koi7_switched, // KOI7-switched
373 brf, // BRF
374 tscii, // TSCII
375 cp51932, // CP51932
376 windows_874, // windows-874
377 windows_1250, // windows-1250
378 windows_1251, // windows-1251
379 windows_1252, // windows-1252
380 windows_1253, // windows-1253
381 windows_1254, // windows-1254
382 windows_1255, // windows-1255
383 windows_1256, // windows-1256
384 windows_1257, // windows-1257
385 windows_1258, // windows-1258
386 tis_620, // TIS-620
387 cp50220, // CP50220
388};
389
390struct ORCUS_PSR_DLLPUBLIC xml_declaration_t
391{
392 uint8_t version_major;
393 uint8_t version_minor;
394 character_set_t encoding;
395 bool standalone;
396
398 xml_declaration_t(uint8_t _version_major, uint8_t _version_minor, character_set_t _encoding, bool _standalone);
401
402 xml_declaration_t& operator= (const xml_declaration_t& other);
403
404 bool operator== (const xml_declaration_t& other) const;
405 bool operator!= (const xml_declaration_t& other) const;
406};
407
408// Other types
409
410enum class length_unit_t
411{
412 unknown = 0,
413 centimeter,
414 millimeter,
415 xlsx_column_digit,
416 inch,
417 point,
418 twip,
419 pixel
420
421 // TODO: Add more.
422};
423
424enum class format_t
425{
426 unknown = 0,
427 ods,
428 xlsx,
429 gnumeric,
430 xls_xml,
431 csv
432};
433
434enum class dump_format_t
435{
436 unknown,
437 none,
438 check,
439 csv,
440 flat,
441 html,
442 json,
443 xml,
444 yaml
445};
446
447struct ORCUS_PSR_DLLPUBLIC length_t
448{
449 length_unit_t unit;
450 double value;
451
452 length_t();
453
454 std::string to_string() const;
455
456 bool operator== (const length_t& other) const noexcept;
457 bool operator!= (const length_t& other) const noexcept;
458};
459
460struct ORCUS_PSR_DLLPUBLIC date_time_t
461{
462 int year;
463 int month;
464 int day;
465 int hour;
466 int minute;
467 double second;
468
469 date_time_t();
470 date_time_t(int _year, int _month, int _day);
471 date_time_t(int _year, int _month, int _day, int _hour, int _minute, double _second);
472 date_time_t(const date_time_t& other);
473 ~date_time_t();
474
475 date_time_t& operator= (date_time_t other);
476
477 bool operator== (const date_time_t& other) const;
478 bool operator!= (const date_time_t& other) const;
479 bool operator< (const date_time_t& other) const;
480
481 std::string to_string() const;
482
483 void swap(date_time_t& other);
484};
485
486ORCUS_PSR_DLLPUBLIC dump_format_t to_dump_format_enum(std::string_view s);
487
488ORCUS_PSR_DLLPUBLIC std::vector<std::pair<std::string_view, dump_format_t>> get_dump_format_entries();
489
490ORCUS_PSR_DLLPUBLIC std::ostream& operator<< (std::ostream& os, const date_time_t& v);
491ORCUS_PSR_DLLPUBLIC std::ostream& operator<< (std::ostream& os, format_t v);
492
493typedef ::std::vector<xml_token_attr_t> xml_attrs_t;
494
495}
496
497#endif
498/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Definition: xml_namespace.hpp:82
Definition: xml_namespace.hpp:27
Definition: types.hpp:461
Definition: types.hpp:448
Definition: types.hpp:48
Definition: types.hpp:391
Definition: types.hpp:60
Definition: types.hpp:81
bool transient
Definition: types.hpp:94
Definition: types.hpp:109
Definition: types.hpp:37