Lines Matching refs:writer

29     JSONWriter *writer = g_new(JSONWriter, 1);  in json_writer_new()  local
31 writer->pretty = pretty; in json_writer_new()
32 writer->need_comma = false; in json_writer_new()
33 writer->contents = g_string_new(NULL); in json_writer_new()
34 writer->container_is_array = g_byte_array_new(); in json_writer_new()
35 return writer; in json_writer_new()
38 const char *json_writer_get(JSONWriter *writer) in json_writer_get() argument
40 g_assert(!writer->container_is_array->len); in json_writer_get()
41 return writer->contents->str; in json_writer_get()
44 GString *json_writer_get_and_free(JSONWriter *writer) in json_writer_get_and_free() argument
46 GString *contents = writer->contents; in json_writer_get_and_free()
48 writer->contents = NULL; in json_writer_get_and_free()
49 g_byte_array_free(writer->container_is_array, true); in json_writer_get_and_free()
50 g_free(writer); in json_writer_get_and_free()
54 void json_writer_free(JSONWriter *writer) in json_writer_free() argument
56 if (writer) { in json_writer_free()
57 g_string_free(json_writer_get_and_free(writer), true); in json_writer_free()
61 static void enter_container(JSONWriter *writer, bool is_array) in enter_container() argument
63 unsigned depth = writer->container_is_array->len; in enter_container()
65 g_byte_array_set_size(writer->container_is_array, depth + 1); in enter_container()
66 writer->container_is_array->data[depth] = is_array; in enter_container()
67 writer->need_comma = false; in enter_container()
70 static void leave_container(JSONWriter *writer, bool is_array) in leave_container() argument
72 unsigned depth = writer->container_is_array->len; in leave_container()
75 assert(writer->container_is_array->data[depth - 1] == is_array); in leave_container()
76 g_byte_array_set_size(writer->container_is_array, depth - 1); in leave_container()
77 writer->need_comma = true; in leave_container()
80 static bool in_object(JSONWriter *writer) in in_object() argument
82 unsigned depth = writer->container_is_array->len; in in_object()
84 return depth && !writer->container_is_array->data[depth - 1]; in in_object()
87 static void pretty_newline(JSONWriter *writer) in pretty_newline() argument
89 if (writer->pretty) { in pretty_newline()
90 g_string_append_printf(writer->contents, "\n%*s", in pretty_newline()
91 writer->container_is_array->len * 4, ""); in pretty_newline()
95 static void pretty_newline_or_space(JSONWriter *writer) in pretty_newline_or_space() argument
97 if (writer->pretty) { in pretty_newline_or_space()
98 g_string_append_printf(writer->contents, "\n%*s", in pretty_newline_or_space()
99 writer->container_is_array->len * 4, ""); in pretty_newline_or_space()
101 g_string_append_c(writer->contents, ' '); in pretty_newline_or_space()
105 static void quoted_str(JSONWriter *writer, const char *str) in quoted_str() argument
111 g_string_append_c(writer->contents, '"'); in quoted_str()
117 g_string_append(writer->contents, "\\\""); in quoted_str()
120 g_string_append(writer->contents, "\\\\"); in quoted_str()
123 g_string_append(writer->contents, "\\b"); in quoted_str()
126 g_string_append(writer->contents, "\\f"); in quoted_str()
129 g_string_append(writer->contents, "\\n"); in quoted_str()
132 g_string_append(writer->contents, "\\r"); in quoted_str()
135 g_string_append(writer->contents, "\\t"); in quoted_str()
143 g_string_append_printf(writer->contents, "\\u%04X\\u%04X", in quoted_str()
147 g_string_append_printf(writer->contents, "\\u%04X", cp); in quoted_str()
149 g_string_append_c(writer->contents, cp); in quoted_str()
154 g_string_append_c(writer->contents, '"'); in quoted_str()
157 static void maybe_comma_name(JSONWriter *writer, const char *name) in maybe_comma_name() argument
159 if (writer->need_comma) { in maybe_comma_name()
160 g_string_append_c(writer->contents, ','); in maybe_comma_name()
161 pretty_newline_or_space(writer); in maybe_comma_name()
163 if (writer->contents->len) { in maybe_comma_name()
164 pretty_newline(writer); in maybe_comma_name()
166 writer->need_comma = true; in maybe_comma_name()
169 if (in_object(writer)) { in maybe_comma_name()
170 quoted_str(writer, name); in maybe_comma_name()
171 g_string_append(writer->contents, ": "); in maybe_comma_name()
175 void json_writer_start_object(JSONWriter *writer, const char *name) in json_writer_start_object() argument
177 maybe_comma_name(writer, name); in json_writer_start_object()
178 g_string_append_c(writer->contents, '{'); in json_writer_start_object()
179 enter_container(writer, false); in json_writer_start_object()
182 void json_writer_end_object(JSONWriter *writer) in json_writer_end_object() argument
184 leave_container(writer, false); in json_writer_end_object()
185 pretty_newline(writer); in json_writer_end_object()
186 g_string_append_c(writer->contents, '}'); in json_writer_end_object()
189 void json_writer_start_array(JSONWriter *writer, const char *name) in json_writer_start_array() argument
191 maybe_comma_name(writer, name); in json_writer_start_array()
192 g_string_append_c(writer->contents, '['); in json_writer_start_array()
193 enter_container(writer, true); in json_writer_start_array()
196 void json_writer_end_array(JSONWriter *writer) in json_writer_end_array() argument
198 leave_container(writer, true); in json_writer_end_array()
199 pretty_newline(writer); in json_writer_end_array()
200 g_string_append_c(writer->contents, ']'); in json_writer_end_array()
203 void json_writer_bool(JSONWriter *writer, const char *name, bool val) in json_writer_bool() argument
205 maybe_comma_name(writer, name); in json_writer_bool()
206 g_string_append(writer->contents, val ? "true" : "false"); in json_writer_bool()
209 void json_writer_null(JSONWriter *writer, const char *name) in json_writer_null() argument
211 maybe_comma_name(writer, name); in json_writer_null()
212 g_string_append(writer->contents, "null"); in json_writer_null()
215 void json_writer_int64(JSONWriter *writer, const char *name, int64_t val) in json_writer_int64() argument
217 maybe_comma_name(writer, name); in json_writer_int64()
218 g_string_append_printf(writer->contents, "%" PRId64, val); in json_writer_int64()
221 void json_writer_uint64(JSONWriter *writer, const char *name, uint64_t val) in json_writer_uint64() argument
223 maybe_comma_name(writer, name); in json_writer_uint64()
224 g_string_append_printf(writer->contents, "%" PRIu64, val); in json_writer_uint64()
227 void json_writer_double(JSONWriter *writer, const char *name, double val) in json_writer_double() argument
229 maybe_comma_name(writer, name); in json_writer_double()
240 g_string_append_printf(writer->contents, "%.17g", val); in json_writer_double()
243 void json_writer_str(JSONWriter *writer, const char *name, const char *str) in json_writer_str() argument
245 maybe_comma_name(writer, name); in json_writer_str()
246 quoted_str(writer, str); in json_writer_str()