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