1#ifndef SIMDJSON_INTERNAL_FRACTURED_FORMATTER_H
2#define SIMDJSON_INTERNAL_FRACTURED_FORMATTER_H
4#include "simdjson/dom/serialization.h"
5#include "simdjson/dom/fractured_json.h"
6#include "simdjson/internal/json_structure_analyzer.h"
18class fractured_formatter :
public base_formatter<fractured_formatter> {
20 explicit fractured_formatter(
const fractured_json_options& opts = {});
23 simdjson_inline
void print_newline();
26 simdjson_inline
void print_indents(
size_t depth);
29 simdjson_inline
void print_space();
32 void set_layout_mode(layout_mode mode);
35 layout_mode get_layout_mode()
const;
38 void set_depth(
size_t depth);
41 size_t get_depth()
const;
44 void track_line_length(
size_t chars);
47 void reset_line_length();
50 size_t get_line_length()
const;
53 bool should_break_line(
size_t upcoming_length)
const;
56 const fractured_json_options& options()
const;
60 void begin_table_row();
66 void set_column_widths(
const std::vector<size_t>& widths);
69 size_t get_column_index()
const;
75 void align_to_column_width(
size_t actual_width);
78 fractured_json_options options_;
79 layout_mode current_layout_ = layout_mode::EXPANDED;
80 size_t current_depth_ = 0;
81 size_t current_line_length_ = 0;
84 bool in_table_mode_ =
false;
85 std::vector<size_t> column_widths_;
86 size_t current_column_ = 0;
96class fractured_string_builder {
98 fractured_string_builder(
const fractured_json_options& opts = {});
101 void append(
const dom::element& value);
104 void append(
const dom::array& value);
107 void append(
const dom::object& value);
110 simdjson_inline
void clear();
113 simdjson_inline std::string_view str()
const;
116 fractured_formatter format_;
117 structure_analyzer analyzer_;
118 fractured_json_options options_;
121 void format_element(
const dom::element& elem,
const element_metrics& metrics,
size_t depth);
124 void format_array(
const dom::array& arr,
const element_metrics& metrics,
size_t depth);
127 void format_array_inline(
const dom::array& arr,
const element_metrics& metrics);
130 void format_array_compact_multiline(
const dom::array& arr,
const element_metrics& metrics,
size_t depth);
133 void format_array_as_table(
const dom::array& arr,
const element_metrics& metrics,
size_t depth);
136 void format_array_expanded(
const dom::array& arr,
const element_metrics& metrics,
size_t depth);
139 void format_object(
const dom::object& obj,
const element_metrics& metrics,
size_t depth);
142 void format_object_inline(
const dom::object& obj,
const element_metrics& metrics);
145 void format_object_expanded(
const dom::object& obj,
const element_metrics& metrics,
size_t depth);
148 void format_scalar(
const dom::element& elem);
151 std::vector<size_t> calculate_column_widths(
const dom::array& arr,
152 const std::vector<std::string>& columns)
const;
155 size_t measure_value_length(
const dom::element& elem)
const;
The top level simdjson namespace, containing everything the library provides.