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