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