jsoncons 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/ext/jsoncons/extconf.rb +43 -0
  3. data/ext/jsoncons/jsoncons.cpp +161 -0
  4. data/ext/jsoncons/jsoncons.h +10 -0
  5. data/jsoncons.gemspec +44 -0
  6. data/lib/jsoncons/jsoncons/examples/input/address-book.json +13 -0
  7. data/lib/jsoncons/jsoncons/examples/input/books.json +28 -0
  8. data/lib/jsoncons/jsoncons/examples/input/countries.json +7 -0
  9. data/lib/jsoncons/jsoncons/examples/input/employees.json +30 -0
  10. data/lib/jsoncons/jsoncons/examples/input/jsonschema/name.json +15 -0
  11. data/lib/jsoncons/jsoncons/examples/input/multiple-json-objects.json +3 -0
  12. data/lib/jsoncons/jsoncons/examples/input/sales.csv +6 -0
  13. data/lib/jsoncons/jsoncons/examples/input/store.json +28 -0
  14. data/lib/jsoncons/jsoncons/examples/input/tasks.csv +6 -0
  15. data/lib/jsoncons/jsoncons/include/jsoncons/allocator_holder.hpp +38 -0
  16. data/lib/jsoncons/jsoncons/include/jsoncons/basic_json.hpp +5905 -0
  17. data/lib/jsoncons/jsoncons/include/jsoncons/bigint.hpp +1611 -0
  18. data/lib/jsoncons/jsoncons/include/jsoncons/byte_string.hpp +820 -0
  19. data/lib/jsoncons/jsoncons/include/jsoncons/config/binary_config.hpp +226 -0
  20. data/lib/jsoncons/jsoncons/include/jsoncons/config/compiler_support.hpp +375 -0
  21. data/lib/jsoncons/jsoncons/include/jsoncons/config/jsoncons_config.hpp +309 -0
  22. data/lib/jsoncons/jsoncons/include/jsoncons/config/version.hpp +40 -0
  23. data/lib/jsoncons/jsoncons/include/jsoncons/conv_error.hpp +218 -0
  24. data/lib/jsoncons/jsoncons/include/jsoncons/decode_json.hpp +209 -0
  25. data/lib/jsoncons/jsoncons/include/jsoncons/decode_traits.hpp +651 -0
  26. data/lib/jsoncons/jsoncons/include/jsoncons/detail/endian.hpp +44 -0
  27. data/lib/jsoncons/jsoncons/include/jsoncons/detail/grisu3.hpp +312 -0
  28. data/lib/jsoncons/jsoncons/include/jsoncons/detail/optional.hpp +483 -0
  29. data/lib/jsoncons/jsoncons/include/jsoncons/detail/parse_number.hpp +1133 -0
  30. data/lib/jsoncons/jsoncons/include/jsoncons/detail/span.hpp +188 -0
  31. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_view.hpp +537 -0
  32. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_wrapper.hpp +370 -0
  33. data/lib/jsoncons/jsoncons/include/jsoncons/detail/write_number.hpp +567 -0
  34. data/lib/jsoncons/jsoncons/include/jsoncons/encode_json.hpp +315 -0
  35. data/lib/jsoncons/jsoncons/include/jsoncons/encode_traits.hpp +378 -0
  36. data/lib/jsoncons/jsoncons/include/jsoncons/json.hpp +18 -0
  37. data/lib/jsoncons/jsoncons/include/jsoncons/json_array.hpp +324 -0
  38. data/lib/jsoncons/jsoncons/include/jsoncons/json_content_handler.hpp +12 -0
  39. data/lib/jsoncons/jsoncons/include/jsoncons/json_cursor.hpp +448 -0
  40. data/lib/jsoncons/jsoncons/include/jsoncons/json_decoder.hpp +420 -0
  41. data/lib/jsoncons/jsoncons/include/jsoncons/json_encoder.hpp +1587 -0
  42. data/lib/jsoncons/jsoncons/include/jsoncons/json_error.hpp +156 -0
  43. data/lib/jsoncons/jsoncons/include/jsoncons/json_exception.hpp +241 -0
  44. data/lib/jsoncons/jsoncons/include/jsoncons/json_filter.hpp +653 -0
  45. data/lib/jsoncons/jsoncons/include/jsoncons/json_fwd.hpp +23 -0
  46. data/lib/jsoncons/jsoncons/include/jsoncons/json_object.hpp +1772 -0
  47. data/lib/jsoncons/jsoncons/include/jsoncons/json_options.hpp +862 -0
  48. data/lib/jsoncons/jsoncons/include/jsoncons/json_parser.hpp +2900 -0
  49. data/lib/jsoncons/jsoncons/include/jsoncons/json_reader.hpp +731 -0
  50. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros.hpp +1072 -0
  51. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros_deprecated.hpp +144 -0
  52. data/lib/jsoncons/jsoncons/include/jsoncons/json_type.hpp +206 -0
  53. data/lib/jsoncons/jsoncons/include/jsoncons/json_type_traits.hpp +1830 -0
  54. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor.hpp +1560 -0
  55. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor2.hpp +2079 -0
  56. data/lib/jsoncons/jsoncons/include/jsoncons/pretty_print.hpp +89 -0
  57. data/lib/jsoncons/jsoncons/include/jsoncons/ser_context.hpp +62 -0
  58. data/lib/jsoncons/jsoncons/include/jsoncons/sink.hpp +289 -0
  59. data/lib/jsoncons/jsoncons/include/jsoncons/source.hpp +777 -0
  60. data/lib/jsoncons/jsoncons/include/jsoncons/source_adaptor.hpp +148 -0
  61. data/lib/jsoncons/jsoncons/include/jsoncons/staj2_cursor.hpp +1189 -0
  62. data/lib/jsoncons/jsoncons/include/jsoncons/staj_cursor.hpp +1254 -0
  63. data/lib/jsoncons/jsoncons/include/jsoncons/staj_iterator.hpp +449 -0
  64. data/lib/jsoncons/jsoncons/include/jsoncons/tag_type.hpp +245 -0
  65. data/lib/jsoncons/jsoncons/include/jsoncons/text_source_adaptor.hpp +144 -0
  66. data/lib/jsoncons/jsoncons/include/jsoncons/traits_extension.hpp +884 -0
  67. data/lib/jsoncons/jsoncons/include/jsoncons/typed_array_view.hpp +250 -0
  68. data/lib/jsoncons/jsoncons/include/jsoncons/unicode_traits.hpp +1330 -0
  69. data/lib/jsoncons/jsoncons/include/jsoncons/uri.hpp +635 -0
  70. data/lib/jsoncons/jsoncons/include/jsoncons/value_converter.hpp +340 -0
  71. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson.hpp +23 -0
  72. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_cursor.hpp +320 -0
  73. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_decimal128.hpp +865 -0
  74. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_encoder.hpp +585 -0
  75. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_error.hpp +103 -0
  76. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_oid.hpp +245 -0
  77. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_options.hpp +75 -0
  78. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_parser.hpp +645 -0
  79. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_reader.hpp +92 -0
  80. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_type.hpp +44 -0
  81. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/decode_bson.hpp +201 -0
  82. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/encode_bson.hpp +144 -0
  83. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor.hpp +26 -0
  84. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor.hpp +351 -0
  85. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor2.hpp +265 -0
  86. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_detail.hpp +93 -0
  87. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_encoder.hpp +1766 -0
  88. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_error.hpp +105 -0
  89. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_options.hpp +113 -0
  90. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_parser.hpp +1942 -0
  91. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_reader.hpp +116 -0
  92. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/decode_cbor.hpp +203 -0
  93. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/encode_cbor.hpp +151 -0
  94. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv.hpp +17 -0
  95. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_cursor.hpp +358 -0
  96. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_encoder.hpp +954 -0
  97. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_error.hpp +85 -0
  98. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_options.hpp +973 -0
  99. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_parser.hpp +2099 -0
  100. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_reader.hpp +348 -0
  101. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_serializer.hpp +12 -0
  102. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/decode_csv.hpp +208 -0
  103. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/encode_csv.hpp +122 -0
  104. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath.hpp +5215 -0
  105. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath_error.hpp +215 -0
  106. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch.hpp +579 -0
  107. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch_error.hpp +121 -0
  108. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/expression.hpp +3329 -0
  109. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/flatten.hpp +432 -0
  110. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_location.hpp +445 -0
  111. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_query.hpp +115 -0
  112. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath.hpp +13 -0
  113. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_error.hpp +240 -0
  114. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_expression.hpp +2612 -0
  115. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_selector.hpp +1322 -0
  116. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer.hpp +1577 -0
  117. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer_error.hpp +119 -0
  118. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/format_validator.hpp +968 -0
  119. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/json_validator.hpp +120 -0
  120. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema.hpp +13 -0
  121. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_error.hpp +105 -0
  122. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_version.hpp +18 -0
  123. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator.hpp +1745 -0
  124. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator_factory.hpp +556 -0
  125. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_draft7.hpp +198 -0
  126. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_location.hpp +200 -0
  127. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_version.hpp +35 -0
  128. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/subschema.hpp +144 -0
  129. data/lib/jsoncons/jsoncons/include/jsoncons_ext/mergepatch/mergepatch.hpp +103 -0
  130. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/decode_msgpack.hpp +202 -0
  131. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/encode_msgpack.hpp +142 -0
  132. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack.hpp +24 -0
  133. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor.hpp +343 -0
  134. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor2.hpp +259 -0
  135. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_encoder.hpp +753 -0
  136. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_error.hpp +94 -0
  137. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_options.hpp +74 -0
  138. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_parser.hpp +748 -0
  139. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_reader.hpp +116 -0
  140. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_type.hpp +63 -0
  141. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/decode_ubjson.hpp +201 -0
  142. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/encode_ubjson.hpp +142 -0
  143. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson.hpp +23 -0
  144. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_cursor.hpp +307 -0
  145. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_encoder.hpp +502 -0
  146. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_error.hpp +100 -0
  147. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_options.hpp +87 -0
  148. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_parser.hpp +880 -0
  149. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_reader.hpp +92 -0
  150. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_type.hpp +43 -0
  151. data/lib/jsoncons/version.rb +5 -0
  152. data/lib/jsoncons.rb +33 -0
  153. data/test/jsoncons_test.rb +108 -0
  154. data/test/test_helper.rb +7 -0
  155. metadata +268 -0
@@ -0,0 +1,862 @@
1
+ // Copyright 2013 Daniel Parker
2
+ // Distributed under the Boost license, Version 1.0.
3
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+
5
+ // See https://github.com/danielaparker/jsoncons for latest version
6
+
7
+ #ifndef JSONCONS_JSON_OPTIONS_HPP
8
+ #define JSONCONS_JSON_OPTIONS_HPP
9
+
10
+ #include <string>
11
+ #include <limits> // std::numeric_limits
12
+ #include <cwchar>
13
+ #include <jsoncons/json_exception.hpp>
14
+ #include <jsoncons/traits_extension.hpp>
15
+
16
+ namespace jsoncons {
17
+
18
+ enum class float_chars_format : uint8_t {general,fixed,scientific,hex};
19
+
20
+ #if !defined(JSONCONS_NO_DEPRECATED)
21
+ JSONCONS_DEPRECATED_MSG("Instead, use float_chars_format") typedef float_chars_format chars_format;
22
+ #endif
23
+
24
+ enum class indenting : uint8_t {no_indent = 0, indent = 1};
25
+
26
+ enum class line_split_kind : uint8_t {same_line,new_line,multi_line};
27
+
28
+ enum class bigint_chars_format : uint8_t {number, base10, base64, base64url
29
+ #if !defined(JSONCONS_NO_DEPRECATED)
30
+ ,integer = number
31
+ #endif
32
+ };
33
+
34
+ #if !defined(JSONCONS_NO_DEPRECATED)
35
+ JSONCONS_DEPRECATED_MSG("Instead, use bigint_chars_format") typedef bigint_chars_format bignum_chars_format;
36
+ JSONCONS_DEPRECATED_MSG("Instead, use bigint_chars_format") typedef bigint_chars_format big_integer_chars_format;
37
+ #endif
38
+
39
+ enum class byte_string_chars_format : uint8_t {none=0,base16,base64,base64url};
40
+
41
+ enum class spaces_option : uint8_t {no_spaces=0,space_after,space_before,space_before_and_after};
42
+
43
+ template <class CharT>
44
+ class basic_json_options;
45
+
46
+ template <class CharT>
47
+ class basic_json_options_common
48
+ {
49
+ friend class basic_json_options<CharT>;
50
+ public:
51
+ using char_type = CharT;
52
+ using string_type = std::basic_string<CharT>;
53
+ private:
54
+ #if !defined(JSONCONS_NO_DEPRECATED)
55
+ bool can_read_nan_replacement_;
56
+ bool can_read_pos_inf_replacement_;
57
+ bool can_read_neg_inf_replacement_;
58
+ string_type nan_replacement_;
59
+ string_type pos_inf_replacement_;
60
+ string_type neg_inf_replacement_;
61
+ #endif
62
+
63
+ bool enable_nan_to_num_:1;
64
+ bool enable_inf_to_num_:1;
65
+ bool enable_neginf_to_num_:1;
66
+ bool enable_nan_to_str_:1;
67
+ bool enable_inf_to_str_:1;
68
+ bool enable_neginf_to_str_:1;
69
+ bool enable_str_to_nan_:1;
70
+ bool enable_str_to_inf_:1;
71
+ bool enable_str_to_neginf_:1;
72
+
73
+ string_type nan_to_num_;
74
+ string_type inf_to_num_;
75
+ string_type neginf_to_num_;
76
+ string_type nan_to_str_;
77
+ string_type inf_to_str_;
78
+ string_type neginf_to_str_;
79
+ int max_nesting_depth_;
80
+
81
+ protected:
82
+ basic_json_options_common()
83
+ :
84
+ #if !defined(JSONCONS_NO_DEPRECATED)
85
+ can_read_nan_replacement_(false),
86
+ can_read_pos_inf_replacement_(false),
87
+ can_read_neg_inf_replacement_(false),
88
+ #endif
89
+ enable_nan_to_num_(false),
90
+ enable_inf_to_num_(false),
91
+ enable_neginf_to_num_(false),
92
+ enable_nan_to_str_(false),
93
+ enable_inf_to_str_(false),
94
+ enable_neginf_to_str_(false),
95
+ enable_str_to_nan_(false),
96
+ enable_str_to_inf_(false),
97
+ enable_str_to_neginf_(false),
98
+ max_nesting_depth_(1024)
99
+ {}
100
+
101
+ virtual ~basic_json_options_common() noexcept = default;
102
+
103
+ basic_json_options_common(const basic_json_options_common&) = default;
104
+ basic_json_options_common& operator=(const basic_json_options_common&) = default;
105
+ basic_json_options_common(basic_json_options_common&&) = default;
106
+ basic_json_options_common& operator=(basic_json_options_common&&) = default;
107
+
108
+ public:
109
+
110
+ bool enable_nan_to_num() const
111
+ {
112
+ return enable_nan_to_num_;
113
+ }
114
+
115
+ bool enable_inf_to_num() const
116
+ {
117
+ return enable_inf_to_num_;
118
+ }
119
+
120
+ bool enable_neginf_to_num() const
121
+ {
122
+ return enable_neginf_to_num_ || enable_inf_to_num_;
123
+ }
124
+
125
+ bool enable_nan_to_str() const
126
+ {
127
+ return enable_nan_to_str_;
128
+ }
129
+
130
+ bool enable_str_to_nan() const
131
+ {
132
+ return enable_str_to_nan_;
133
+ }
134
+
135
+ bool enable_inf_to_str() const
136
+ {
137
+ return enable_inf_to_str_;
138
+ }
139
+
140
+ bool enable_str_to_inf() const
141
+ {
142
+ return enable_str_to_inf_;
143
+ }
144
+
145
+ bool enable_neginf_to_str() const
146
+ {
147
+ return enable_neginf_to_str_ || enable_inf_to_str_;
148
+ }
149
+
150
+ bool enable_str_to_neginf() const
151
+ {
152
+ return enable_str_to_neginf_ || enable_str_to_inf_;
153
+ }
154
+
155
+ string_type nan_to_num() const
156
+ {
157
+ if (enable_nan_to_num_)
158
+ {
159
+ return nan_to_num_;
160
+ }
161
+ #if !defined(JSONCONS_NO_DEPRECATED)
162
+ else if (!can_read_nan_replacement_) // not string
163
+ {
164
+ return nan_replacement_;
165
+ }
166
+ #endif
167
+ else
168
+ {
169
+ return nan_to_num_; // empty string
170
+ }
171
+ }
172
+
173
+ string_type inf_to_num() const
174
+ {
175
+ if (enable_inf_to_num_)
176
+ {
177
+ return inf_to_num_;
178
+ }
179
+ #if !defined(JSONCONS_NO_DEPRECATED)
180
+ else if (!can_read_pos_inf_replacement_) // not string
181
+ {
182
+ return pos_inf_replacement_;
183
+ }
184
+ #endif
185
+ else
186
+ {
187
+ return inf_to_num_; // empty string
188
+ }
189
+ }
190
+
191
+ string_type neginf_to_num() const
192
+ {
193
+ if (enable_neginf_to_num_)
194
+ {
195
+ return neginf_to_num_;
196
+ }
197
+ else if (enable_inf_to_num_)
198
+ {
199
+ string_type s;
200
+ s.push_back('-');
201
+ s.append(inf_to_num_);
202
+ return s;
203
+ }
204
+ #if !defined(JSONCONS_NO_DEPRECATED)
205
+ else if (!can_read_neg_inf_replacement_) // not string
206
+ {
207
+ return neg_inf_replacement_;
208
+ }
209
+ #endif
210
+ else
211
+ {
212
+ return neginf_to_num_; // empty string
213
+ }
214
+ }
215
+
216
+ string_type nan_to_str() const
217
+ {
218
+ if (enable_nan_to_str_)
219
+ {
220
+ return nan_to_str_;
221
+ }
222
+ #if !defined(JSONCONS_NO_DEPRECATED)
223
+ else if (can_read_nan_replacement_ && nan_replacement_.size() >= 2) // string
224
+ {
225
+ return nan_replacement_.substr(1, nan_replacement_.size() - 2); // Remove quotes
226
+ }
227
+ #endif
228
+ else
229
+ {
230
+ return nan_to_str_; // empty string
231
+ }
232
+ }
233
+
234
+ string_type inf_to_str() const
235
+ {
236
+ if (enable_inf_to_str_)
237
+ {
238
+ return inf_to_str_;
239
+ }
240
+ #if !defined(JSONCONS_NO_DEPRECATED)
241
+ else if (can_read_pos_inf_replacement_ && pos_inf_replacement_.size() >= 2) // string
242
+ {
243
+ return pos_inf_replacement_.substr(1, pos_inf_replacement_.size() - 2); // Strip quotes
244
+ }
245
+ #endif
246
+ else
247
+ {
248
+ return inf_to_str_; // empty string
249
+ }
250
+ }
251
+
252
+ string_type neginf_to_str() const
253
+ {
254
+ if (enable_neginf_to_str_)
255
+ {
256
+ return neginf_to_str_;
257
+ }
258
+ else if (enable_inf_to_str_)
259
+ {
260
+ string_type s;
261
+ s.push_back('-');
262
+ s.append(inf_to_str_);
263
+ return s;
264
+ }
265
+ #if !defined(JSONCONS_NO_DEPRECATED)
266
+ else if (can_read_neg_inf_replacement_ && neg_inf_replacement_.size() >= 2) // string
267
+ {
268
+ return neg_inf_replacement_.substr(1, neg_inf_replacement_.size() - 2); // Strip quotes
269
+ }
270
+ #endif
271
+ else
272
+ {
273
+ return neginf_to_str_; // empty string
274
+ }
275
+ }
276
+
277
+ int max_nesting_depth() const
278
+ {
279
+ return max_nesting_depth_;
280
+ }
281
+
282
+ #if !defined(JSONCONS_NO_DEPRECATED)
283
+ JSONCONS_DEPRECATED_MSG("Instead, use enable_nan_to_num() or enable_nan_to_str()")
284
+ bool can_read_nan_replacement() const { return can_read_nan_replacement_; }
285
+
286
+ JSONCONS_DEPRECATED_MSG("Instead, use enable_inf_to_num() or enable_inf_to_str()")
287
+ bool can_read_pos_inf_replacement() const { return can_read_pos_inf_replacement_; }
288
+
289
+ JSONCONS_DEPRECATED_MSG("Instead, use enable_neginf_to_num() or enable_neginf_to_str()")
290
+ bool can_read_neg_inf_replacement() const { return can_read_neg_inf_replacement_; }
291
+
292
+ bool can_write_nan_replacement() const { return !nan_replacement_.empty(); }
293
+
294
+ bool can_write_pos_inf_replacement() const { return !pos_inf_replacement_.empty(); }
295
+
296
+ bool can_write_neg_inf_replacement() const { return !neg_inf_replacement_.empty(); }
297
+
298
+ JSONCONS_DEPRECATED_MSG("Instead, use nan_to_num() or nan_to_str()")
299
+ const string_type& nan_replacement() const
300
+ {
301
+ return nan_replacement_;
302
+ }
303
+
304
+ JSONCONS_DEPRECATED_MSG("Instead, use inf_to_num() or inf_to_str()")
305
+ const string_type& pos_inf_replacement() const
306
+ {
307
+ return pos_inf_replacement_;
308
+ }
309
+
310
+ JSONCONS_DEPRECATED_MSG("Instead, use neginf_to_num() or neginf_to_str()")
311
+ const string_type& neg_inf_replacement() const
312
+ {
313
+ return neg_inf_replacement_;
314
+ }
315
+ #endif
316
+ };
317
+
318
+ template <class CharT>
319
+ class basic_json_decode_options : public virtual basic_json_options_common<CharT>
320
+ {
321
+ friend class basic_json_options<CharT>;
322
+ using super_type = basic_json_options_common<CharT>;
323
+ public:
324
+ using typename super_type::char_type;
325
+ using typename super_type::string_type;
326
+ private:
327
+ bool lossless_number_:1;
328
+ public:
329
+ basic_json_decode_options()
330
+ : lossless_number_(false)
331
+ {
332
+ }
333
+
334
+ basic_json_decode_options(const basic_json_decode_options&) = default;
335
+
336
+ basic_json_decode_options(basic_json_decode_options&& other)
337
+ : super_type(std::forward<basic_json_decode_options>(other)),
338
+ lossless_number_(other.lossless_number_)
339
+ {
340
+ }
341
+
342
+ basic_json_decode_options& operator=(const basic_json_decode_options&) = default;
343
+
344
+ bool lossless_number() const
345
+ {
346
+ return lossless_number_;
347
+ }
348
+
349
+ #if !defined(JSONCONS_NO_DEPRECATED)
350
+ JSONCONS_DEPRECATED_MSG("Instead, use lossless_number()")
351
+ bool dec_to_str() const
352
+ {
353
+ return lossless_number_;
354
+ }
355
+ #endif
356
+ };
357
+
358
+ template <class CharT>
359
+ class basic_json_encode_options : public virtual basic_json_options_common<CharT>
360
+ {
361
+ friend class basic_json_options<CharT>;
362
+ using super_type = basic_json_options_common<CharT>;
363
+ public:
364
+ using typename super_type::char_type;
365
+ using typename super_type::string_type;
366
+
367
+ static constexpr uint8_t indent_size_default = 4;
368
+ static constexpr size_t line_length_limit_default = 120;
369
+ private:
370
+ bool escape_all_non_ascii_:1;
371
+ bool escape_solidus_:1;
372
+ bool pad_inside_object_braces_:1;
373
+ bool pad_inside_array_brackets_:1;
374
+ float_chars_format float_format_;
375
+ byte_string_chars_format byte_string_format_;
376
+ bigint_chars_format bigint_format_;
377
+ line_split_kind object_object_line_splits_;
378
+ line_split_kind object_array_line_splits_;
379
+ line_split_kind array_array_line_splits_;
380
+ line_split_kind array_object_line_splits_;
381
+ spaces_option spaces_around_colon_;
382
+ spaces_option spaces_around_comma_;
383
+ int8_t precision_;
384
+ uint8_t indent_size_;
385
+ std::size_t line_length_limit_;
386
+ string_type new_line_chars_;
387
+ public:
388
+ basic_json_encode_options()
389
+ : escape_all_non_ascii_(false),
390
+ escape_solidus_(false),
391
+ pad_inside_object_braces_(false),
392
+ pad_inside_array_brackets_(false),
393
+ float_format_(float_chars_format::general),
394
+ byte_string_format_(byte_string_chars_format::none),
395
+ bigint_format_(bigint_chars_format::base10),
396
+ object_object_line_splits_(line_split_kind::multi_line),
397
+ object_array_line_splits_(line_split_kind::same_line),
398
+ array_array_line_splits_(line_split_kind::new_line),
399
+ array_object_line_splits_(line_split_kind::multi_line),
400
+ spaces_around_colon_(spaces_option::space_after),
401
+ spaces_around_comma_(spaces_option::space_after),
402
+ precision_(0),
403
+ indent_size_(indent_size_default),
404
+ line_length_limit_(line_length_limit_default)
405
+ {
406
+ new_line_chars_.push_back('\n');
407
+ }
408
+
409
+ basic_json_encode_options(const basic_json_encode_options&) = default;
410
+
411
+ basic_json_encode_options(basic_json_encode_options&& other)
412
+ : super_type(std::forward<basic_json_encode_options>(other)),
413
+ escape_all_non_ascii_(other.escape_all_non_ascii_),
414
+ escape_solidus_(other.escape_solidus_),
415
+ pad_inside_object_braces_(other.pad_inside_object_braces_),
416
+ pad_inside_array_brackets_(other.pad_inside_array_brackets_),
417
+ float_format_(other.float_format_),
418
+ byte_string_format_(other.byte_string_format_),
419
+ bigint_format_(other.bigint_format_),
420
+ object_object_line_splits_(other.object_object_line_splits_),
421
+ object_array_line_splits_(other.object_array_line_splits_),
422
+ array_array_line_splits_(other.array_array_line_splits_),
423
+ array_object_line_splits_(other.array_object_line_splits_),
424
+ spaces_around_colon_(other.spaces_around_colon_),
425
+ spaces_around_comma_(other.spaces_around_comma_),
426
+ precision_(other.precision_),
427
+ indent_size_(other.indent_size_),
428
+ line_length_limit_(other.line_length_limit_),
429
+ new_line_chars_(std::move(other.new_line_chars_))
430
+ {
431
+ }
432
+
433
+ basic_json_encode_options& operator=(const basic_json_encode_options&) = default;
434
+
435
+ byte_string_chars_format byte_string_format() const {return byte_string_format_;}
436
+
437
+ bigint_chars_format bigint_format() const {return bigint_format_;}
438
+
439
+ line_split_kind object_object_line_splits() const {return object_object_line_splits_;}
440
+
441
+ line_split_kind array_object_line_splits() const {return array_object_line_splits_;}
442
+
443
+ line_split_kind object_array_line_splits() const {return object_array_line_splits_;}
444
+
445
+ line_split_kind array_array_line_splits() const {return array_array_line_splits_;}
446
+
447
+ uint8_t indent_size() const
448
+ {
449
+ return indent_size_;
450
+ }
451
+
452
+ spaces_option spaces_around_colon() const
453
+ {
454
+ return spaces_around_colon_;
455
+ }
456
+
457
+ spaces_option spaces_around_comma() const
458
+ {
459
+ return spaces_around_comma_;
460
+ }
461
+
462
+ bool pad_inside_object_braces() const
463
+ {
464
+ return pad_inside_object_braces_;
465
+ }
466
+
467
+ bool pad_inside_array_brackets() const
468
+ {
469
+ return pad_inside_array_brackets_;
470
+ }
471
+
472
+ string_type new_line_chars() const
473
+ {
474
+ return new_line_chars_;
475
+ }
476
+
477
+ std::size_t line_length_limit() const
478
+ {
479
+ return line_length_limit_;
480
+ }
481
+
482
+ float_chars_format float_format() const
483
+ {
484
+ return float_format_;
485
+ }
486
+
487
+ int8_t precision() const
488
+ {
489
+ return precision_;
490
+ }
491
+
492
+ bool escape_all_non_ascii() const
493
+ {
494
+ return escape_all_non_ascii_;
495
+ }
496
+
497
+ bool escape_solidus() const
498
+ {
499
+ return escape_solidus_;
500
+ }
501
+
502
+ #if !defined(JSONCONS_NO_DEPRECATED)
503
+ JSONCONS_DEPRECATED_MSG("Instead, use bigint_format()")
504
+ bigint_chars_format bignum_format() const {return bigint_format_;}
505
+
506
+ JSONCONS_DEPRECATED_MSG("Instead, use indent_size()")
507
+ uint8_t indent() const
508
+ {
509
+ return indent_size();
510
+ }
511
+
512
+ JSONCONS_DEPRECATED_MSG("Instead, use object_object_line_splits()")
513
+ line_split_kind object_object_split_lines() const {return object_object_line_splits_;}
514
+
515
+ JSONCONS_DEPRECATED_MSG("Instead, use array_object_line_splits()")
516
+ line_split_kind array_object_split_lines() const {return array_object_line_splits_;}
517
+
518
+ JSONCONS_DEPRECATED_MSG("Instead, use object_array_line_splits()")
519
+ line_split_kind object_array_split_lines() const {return object_array_line_splits_;}
520
+
521
+ JSONCONS_DEPRECATED_MSG("Instead, use array_array_line_splits()")
522
+ line_split_kind array_array_split_lines() const {return array_array_line_splits_;}
523
+ #endif
524
+ };
525
+
526
+ template <class CharT>
527
+ class basic_json_options final: public basic_json_decode_options<CharT>,
528
+ public basic_json_encode_options<CharT>
529
+ {
530
+ public:
531
+ using char_type = CharT;
532
+ using string_type = std::basic_string<CharT>;
533
+
534
+ using basic_json_options_common<CharT>::max_nesting_depth;
535
+
536
+ using basic_json_decode_options<CharT>::enable_str_to_nan;
537
+ using basic_json_decode_options<CharT>::enable_str_to_inf;
538
+ using basic_json_decode_options<CharT>::enable_str_to_neginf;
539
+ using basic_json_decode_options<CharT>::nan_to_str;
540
+ using basic_json_decode_options<CharT>::inf_to_str;
541
+ using basic_json_decode_options<CharT>::neginf_to_str;
542
+ using basic_json_decode_options<CharT>::nan_to_num;
543
+ using basic_json_decode_options<CharT>::inf_to_num;
544
+ using basic_json_decode_options<CharT>::neginf_to_num;
545
+
546
+ using basic_json_decode_options<CharT>::lossless_number;
547
+
548
+ using basic_json_encode_options<CharT>::byte_string_format;
549
+ using basic_json_encode_options<CharT>::bigint_format;
550
+ using basic_json_encode_options<CharT>::object_object_line_splits;
551
+ using basic_json_encode_options<CharT>::array_object_line_splits;
552
+ using basic_json_encode_options<CharT>::object_array_line_splits;
553
+ using basic_json_encode_options<CharT>::array_array_line_splits;
554
+ using basic_json_encode_options<CharT>::indent_size;
555
+ using basic_json_encode_options<CharT>::spaces_around_colon;
556
+ using basic_json_encode_options<CharT>::spaces_around_comma;
557
+ using basic_json_encode_options<CharT>::pad_inside_object_braces;
558
+ using basic_json_encode_options<CharT>::pad_inside_array_brackets;
559
+ using basic_json_encode_options<CharT>::new_line_chars;
560
+ using basic_json_encode_options<CharT>::line_length_limit;
561
+ using basic_json_encode_options<CharT>::float_format;
562
+ using basic_json_encode_options<CharT>::precision;
563
+ using basic_json_encode_options<CharT>::escape_all_non_ascii;
564
+ using basic_json_encode_options<CharT>::escape_solidus;
565
+ public:
566
+
567
+ // Constructors
568
+
569
+ basic_json_options() = default;
570
+ basic_json_options(const basic_json_options&) = default;
571
+ basic_json_options(basic_json_options&&) = default;
572
+ basic_json_options& operator=(const basic_json_options&) = default;
573
+ basic_json_options& operator=(basic_json_options&&) = default;
574
+
575
+ basic_json_options& nan_to_num(const string_type& value)
576
+ {
577
+ this->enable_nan_to_num_ = true;
578
+ this->nan_to_str_.clear();
579
+ this->nan_to_num_ = value;
580
+ return *this;
581
+ }
582
+
583
+ basic_json_options& inf_to_num(const string_type& value)
584
+ {
585
+ this->enable_inf_to_num_ = true;
586
+ this->inf_to_str_.clear();
587
+ this->inf_to_num_ = value;
588
+ return *this;
589
+ }
590
+
591
+ basic_json_options& neginf_to_num(const string_type& value)
592
+ {
593
+ this->enable_neginf_to_num_ = true;
594
+ this->neginf_to_str_.clear();
595
+ this->neginf_to_num_ = value;
596
+ return *this;
597
+ }
598
+
599
+ basic_json_options& nan_to_str(const string_type& value, bool enable_inverse = true)
600
+ {
601
+ this->enable_nan_to_str_ = true;
602
+ this->enable_str_to_nan_ = enable_inverse;
603
+ this->nan_to_num_.clear();
604
+ this->nan_to_str_ = value;
605
+ return *this;
606
+ }
607
+
608
+ basic_json_options& inf_to_str(const string_type& value, bool enable_inverse = true)
609
+ {
610
+ this->enable_inf_to_str_ = true;
611
+ this->enable_str_to_inf_ = enable_inverse;
612
+ this->inf_to_num_.clear();
613
+ this->inf_to_str_ = value;
614
+ return *this;
615
+ }
616
+
617
+ basic_json_options& neginf_to_str(const string_type& value, bool enable_inverse = true)
618
+ {
619
+ this->enable_neginf_to_str_ = true;
620
+ this->enable_str_to_neginf_ = enable_inverse;
621
+ this->neginf_to_num_.clear();
622
+ this->neginf_to_str_ = value;
623
+ return *this;
624
+ }
625
+
626
+ JSONCONS_DEPRECATED_MSG("Instead, use inf_to_num(const string_type&) or inf_to_str(const string_type&)")
627
+ basic_json_options& replace_inf(bool replace)
628
+ {
629
+ this->can_read_pos_inf_replacement_ = replace;
630
+ this->can_read_neg_inf_replacement_ = replace;
631
+ return *this;
632
+ }
633
+
634
+ JSONCONS_DEPRECATED_MSG("Instead, use inf_to_num(const string_type&) or inf_to_str(const string_type&)")
635
+ basic_json_options& replace_pos_inf(bool replace)
636
+ {
637
+ this->can_read_pos_inf_replacement_ = replace;
638
+ return *this;
639
+ }
640
+
641
+ JSONCONS_DEPRECATED_MSG("Instead, use neginf_to_num(const string_type&) or neginf_to_str(const string_type&)")
642
+ basic_json_options& replace_neg_inf(bool replace)
643
+ {
644
+ this->can_read_neg_inf_replacement_ = replace;
645
+ return *this;
646
+ }
647
+
648
+ JSONCONS_DEPRECATED_MSG("Instead, use nan_to_num(const string_type&) or nan_to_str(const string_type&)")
649
+ basic_json_options& nan_replacement(const string_type& value)
650
+ {
651
+ this->nan_replacement_ = value;
652
+
653
+ this->can_read_nan_replacement_ = is_string(value);
654
+
655
+ return *this;
656
+ }
657
+
658
+ JSONCONS_DEPRECATED_MSG("Instead, use inf_to_num(const string_type&) or inf_to_str(const string_type&)")
659
+ basic_json_options& pos_inf_replacement(const string_type& value)
660
+ {
661
+ this->pos_inf_replacement_ = value;
662
+ this->can_read_pos_inf_replacement_ = is_string(value);
663
+ return *this;
664
+ }
665
+
666
+ JSONCONS_DEPRECATED_MSG("Instead, use neginf_to_num(const string_type&) or neginf_to_str(const string_type&)")
667
+ basic_json_options& neg_inf_replacement(const string_type& value)
668
+ {
669
+ this->neg_inf_replacement_ = value;
670
+ this->can_read_neg_inf_replacement_ = is_string(value);
671
+ return *this;
672
+ }
673
+
674
+ basic_json_options& byte_string_format(byte_string_chars_format value) {this->byte_string_format_ = value; return *this;}
675
+
676
+ basic_json_options& bigint_format(bigint_chars_format value) {this->bigint_format_ = value; return *this;}
677
+
678
+ basic_json_options& object_object_line_splits(line_split_kind value) {this->object_object_line_splits_ = value; return *this;}
679
+
680
+ basic_json_options& array_object_line_splits(line_split_kind value) {this->array_object_line_splits_ = value; return *this;}
681
+
682
+ basic_json_options& object_array_line_splits(line_split_kind value) {this->object_array_line_splits_ = value; return *this;}
683
+
684
+ basic_json_options& array_array_line_splits(line_split_kind value) {this->array_array_line_splits_ = value; return *this;}
685
+
686
+ basic_json_options& indent_size(uint8_t value)
687
+ {
688
+ this->indent_size_ = value;
689
+ return *this;
690
+ }
691
+
692
+ basic_json_options& spaces_around_colon(spaces_option value)
693
+ {
694
+ this->spaces_around_colon_ = value;
695
+ return *this;
696
+ }
697
+
698
+ basic_json_options& spaces_around_comma(spaces_option value)
699
+ {
700
+ this->spaces_around_comma_ = value;
701
+ return *this;
702
+ }
703
+
704
+ basic_json_options& pad_inside_object_braces(bool value)
705
+ {
706
+ this->pad_inside_object_braces_ = value;
707
+ return *this;
708
+ }
709
+
710
+ basic_json_options& pad_inside_array_brackets(bool value)
711
+ {
712
+ this->pad_inside_array_brackets_ = value;
713
+ return *this;
714
+ }
715
+
716
+ basic_json_options& new_line_chars(const string_type& value)
717
+ {
718
+ this->new_line_chars_ = value;
719
+ return *this;
720
+ }
721
+
722
+ basic_json_options& lossless_number(bool value)
723
+ {
724
+ this->lossless_number_ = value;
725
+ return *this;
726
+ }
727
+
728
+ basic_json_options& line_length_limit(std::size_t value)
729
+ {
730
+ this->line_length_limit_ = value;
731
+ return *this;
732
+ }
733
+
734
+ basic_json_options& float_format(float_chars_format value)
735
+ {
736
+ this->float_format_ = value;
737
+ return *this;
738
+ }
739
+
740
+ basic_json_options& precision(int8_t value)
741
+ {
742
+ this->precision_ = value;
743
+ return *this;
744
+ }
745
+
746
+ basic_json_options& escape_all_non_ascii(bool value)
747
+ {
748
+ this->escape_all_non_ascii_ = value;
749
+ return *this;
750
+ }
751
+
752
+ basic_json_options& escape_solidus(bool value)
753
+ {
754
+ this->escape_solidus_ = value;
755
+ return *this;
756
+ }
757
+
758
+ basic_json_options& max_nesting_depth(int value)
759
+ {
760
+ this->max_nesting_depth_ = value;
761
+ return *this;
762
+ }
763
+
764
+ #if !defined(JSONCONS_NO_DEPRECATED)
765
+ JSONCONS_DEPRECATED_MSG("Instead, use bigint_format(bigint_chars_format)")
766
+ basic_json_options& big_integer_format(bigint_chars_format value) {this->bigint_format_ = value; return *this;}
767
+
768
+ JSONCONS_DEPRECATED_MSG("Instead, use bigint_format(bigint_chars_format)")
769
+ basic_json_options& bignum_format(bigint_chars_format value) {this->bigint_format_ = value; return *this;}
770
+
771
+ JSONCONS_DEPRECATED_MSG("Instead, use float_format(float_chars_format)")
772
+ basic_json_options& floating_point_format(float_chars_format value)
773
+ {
774
+ this->float_format_ = value;
775
+ return *this;
776
+ }
777
+
778
+ JSONCONS_DEPRECATED_MSG("Instead, use lossless_number(bool)")
779
+ basic_json_options& dec_to_str(bool value)
780
+ {
781
+ this->lossless_number_ = value;
782
+ return *this;
783
+ }
784
+
785
+ JSONCONS_DEPRECATED_MSG("Instead, use indent_size(uint8_t_t)")
786
+ basic_json_options& indent(uint8_t value)
787
+ {
788
+ return indent_size(value);
789
+ }
790
+
791
+ JSONCONS_DEPRECATED_MSG("Instead, use object_object_line_splits(line_split_kind)")
792
+ basic_json_options& object_object_split_lines(line_split_kind value) {this->object_object_line_splits_ = value; return *this;}
793
+
794
+ JSONCONS_DEPRECATED_MSG("Instead, use array_object_line_splits(line_split_kind)")
795
+ basic_json_options& array_object_split_lines(line_split_kind value) {this->array_object_line_splits_ = value; return *this;}
796
+
797
+ JSONCONS_DEPRECATED_MSG("Instead, use object_array_line_splits(line_split_kind)")
798
+ basic_json_options& object_array_split_lines(line_split_kind value) {this->object_array_line_splits_ = value; return *this;}
799
+
800
+ JSONCONS_DEPRECATED_MSG("Instead, use array_array_line_splits(line_split_kind)")
801
+ basic_json_options& array_array_split_lines(line_split_kind value) {this->array_array_line_splits_ = value; return *this;}
802
+ #endif
803
+ private:
804
+ enum class input_state {initial,begin_quote,character,end_quote,escape,error};
805
+ bool is_string(const string_type& s) const
806
+ {
807
+ input_state state = input_state::initial;
808
+ for (char_type c : s)
809
+ {
810
+ switch (c)
811
+ {
812
+ case '\t': case ' ': case '\n': case'\r':
813
+ break;
814
+ case '\\':
815
+ state = input_state::escape;
816
+ break;
817
+ case '\"':
818
+ switch (state)
819
+ {
820
+ case input_state::initial:
821
+ state = input_state::begin_quote;
822
+ break;
823
+ case input_state::begin_quote:
824
+ state = input_state::end_quote;
825
+ break;
826
+ case input_state::character:
827
+ state = input_state::end_quote;
828
+ break;
829
+ case input_state::end_quote:
830
+ state = input_state::error;
831
+ break;
832
+ case input_state::escape:
833
+ state = input_state::character;
834
+ break;
835
+ default:
836
+ state = input_state::character;
837
+ break;
838
+ }
839
+ break;
840
+ default:
841
+ break;
842
+ }
843
+
844
+ }
845
+ return state == input_state::end_quote;
846
+ }
847
+ };
848
+
849
+ using json_options = basic_json_options<char>;
850
+ using wjson_options = basic_json_options<wchar_t>;
851
+
852
+ #if !defined(JSONCONS_NO_DEPRECATED)
853
+ JSONCONS_DEPRECATED_MSG("json_options") typedef json_options output_format;
854
+ JSONCONS_DEPRECATED_MSG("wjson_options") typedef wjson_options woutput_format;
855
+ JSONCONS_DEPRECATED_MSG("json_options") typedef json_options serialization_options;
856
+ JSONCONS_DEPRECATED_MSG("wjson_options") typedef wjson_options wserialization_options;
857
+ JSONCONS_DEPRECATED_MSG("json_options") typedef json_options json_serializing_options;
858
+ JSONCONS_DEPRECATED_MSG("wjson_options") typedef wjson_options wjson_serializing_options;
859
+ #endif
860
+
861
+ }
862
+ #endif