3#include "di/container/ring/prelude.h"
4#include "di/container/view/cache_last.h"
29 ASSERT_EQ(1, m_multi_cell_info.allocate({ wide_multi_cell_info }));
32 auto rows() -> di::Ring<Row>& {
return m_rows; }
33 auto rows() const -> di::Ring<
Row> const& {
return m_rows; }
35 auto empty() const ->
bool {
return m_rows.empty(); }
58 return m_graphics_renditions.lookup_key(rendition);
64 return m_graphics_renditions.use_id(
id);
67 return m_graphics_renditions.allocate(rendition);
78 return m_hyperlinks.use_id(
id);
81 return m_hyperlinks.allocate(di::move(
hyperlink));
98 return m_multi_cell_info.use_id(
id);
106 di::Optional<u32> desired_cols = {}) -> usize;
116 auto const& row_object =
rows()[row];
122 return row_object.cells |
123 di::transform([
this, &row_object, text_offset = 0zu, col = 0u](
Cell const& cell)
mutable {
126 return di::StringView {};
129 auto text_start = row_object.text.iterator_at_offset(text_offset);
131 auto text_end = row_object.text.iterator_at_offset(text_offset);
134 return row_object.text.substr(text_start.value(), text_end.value());
137 return di::make_tuple(
145 di::Ring<Row> m_rows;
A two-way map between a numberic id and a value.
Definition id_map.h:39
Represents the result of reflowing a RowGroup.
Definition reflow_result.h:22
Represents a group of terminal rows.
Definition row_group.h:24
auto multi_cell_id(MultiCellInfo const &multi_cell_info) -> di::Optional< u16 >
Definition row_group.h:85
auto allocate_multi_cell_id(MultiCellInfo const &multi_cell_info) -> di::Optional< u16 >
Definition row_group.h:100
auto use_graphics_id(u16 id) -> u16
Definition row_group.h:60
auto allocate_graphics_id(GraphicsRendition const &rendition) -> di::Optional< u16 >
Definition row_group.h:66
auto hyperlink_id(di::String const &hyperlink_id) -> di::Optional< u16 >
Definition row_group.h:71
auto maybe_allocate_multi_cell_id(MultiCellInfo const &multi_cell_info) -> di::Optional< u16 >
Definition row_group.cpp:132
auto maybe_allocate_hyperlink_id(Hyperlink const &hyperlink) -> di::Optional< u16 >
Definition row_group.cpp:124
auto iterate_row(u32 row) const
Definition row_group.h:113
auto rows() const -> di::Ring< Row > const &
Definition row_group.h:33
auto hyperlink(u16 id) const -> Hyperlink const &
Definition row_group.cpp:187
auto empty() const -> bool
Definition row_group.h:35
auto graphics_rendition(u16 id) const -> GraphicsRendition const &
Definition row_group.cpp:180
void drop_cell(Cell &cell)
Definition row_group.cpp:163
void drop_graphics_id(u16 &id)
Definition row_group.cpp:140
void drop_multi_cell_id(u16 &id)
Definition row_group.cpp:154
auto maybe_allocate_graphics_id(GraphicsRendition const &rendition) -> di::Optional< u16 >
Definition row_group.cpp:116
auto reflow(u64 absolute_row_start, u32 target_width) -> ReflowResult
Adjust each row in the group according to the new target width.
Definition row_group.cpp:9
auto graphics_id(GraphicsRendition const &rendition) -> di::Optional< u16 >
Definition row_group.h:54
auto rows() -> di::Ring< Row > &
Definition row_group.h:32
auto transfer_from(RowGroup &from, usize from_index, usize to_index, usize row_count, di::Optional< u32 > desired_cols={}) -> usize
Definition row_group.cpp:209
auto allocate_hyperlink_id(Hyperlink &&hyperlink) -> di::Optional< u16 >
Definition row_group.h:80
auto multi_cell_info(u16 id) const -> MultiCellInfo const &
Definition row_group.cpp:199
RowGroup()
Definition row_group.h:26
auto use_multi_cell_id(u16 id) -> u16
Definition row_group.h:94
auto strip_trailing_empty_cells(usize row_index) -> usize
Definition row_group.cpp:290
auto maybe_hyperlink(u16 id) const -> di::Optional< Hyperlink const & >
Definition row_group.cpp:192
auto use_hyperlink_id(u16 id) -> u16
Definition row_group.h:74
auto total_rows() const
Definition row_group.h:36
void drop_hyperlink_id(u16 &id)
Definition row_group.cpp:147
Definition absolute_position.h:6
constexpr auto wide_multi_cell_info
Definition multi_cell_info.h:34
constexpr auto narrow_multi_cell_info
Definition multi_cell_info.h:32
Definition graphics_rendition.h:114
Represents a on-screen terminal cell.
Definition cell.h:9
u16 text_size
The size in bytes of the text in this cell (0 means no text)
Definition cell.h:22
u16 multi_cell_id
0 means none (single cell)
Definition cell.h:21
auto graphics_rendition_id() const -> u16
Definition cell.h:34
auto hyperlink_id() const -> u16
Definition cell.h:35
Represents a hyperlink specified via OSC 6.
Definition hyperlink.h:21
Shared information for cells linked via text sizing protocol (OSC 66) or double width characters.
Definition multi_cell_info.h:8
Represents a on-screen terminal row of cells.
Definition row.h:9