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