7#include "text_shaper_char.hpp"
8#include "text_shaper_line.hpp"
9#include "text_cursor.hpp"
10#include "text_theme.hpp"
12#include "../layout/box_constraints.hpp"
13#include "../font/module.hpp"
14#include "../geometry/module.hpp"
15#include "../unicode/module.hpp"
19namespace hi::inline
v1 {
37 using char_iterator = char_vector::iterator;
38 using char_const_iterator = char_vector::const_iterator;
39 using char_reference = char_vector::reference;
40 using char_const_reference = char_vector::const_reference;
42 using line_iterator = line_vector::iterator;
43 using line_const_iterator = line_vector::const_iterator;
45 constexpr text_shaper()
noexcept =
default;
46 constexpr text_shaper(text_shaper
const&)
noexcept =
default;
47 constexpr text_shaper(text_shaper&&)
noexcept =
default;
48 constexpr text_shaper& operator=(text_shaper
const&)
noexcept =
default;
49 constexpr text_shaper& operator=(text_shaper&&)
noexcept =
default;
81 bool left_to_right)
noexcept;
83 [[nodiscard]]
bool empty() const noexcept
88 [[nodiscard]]
size_t size() const noexcept
93 [[nodiscard]] char_iterator begin() noexcept
98 [[nodiscard]] char_const_iterator
begin() const noexcept
100 return _text.begin();
103 [[nodiscard]] char_const_iterator cbegin() const noexcept
105 return _text.cbegin();
108 [[nodiscard]] char_iterator
end() noexcept
113 [[nodiscard]] char_const_iterator
end() const noexcept
118 [[nodiscard]] char_const_iterator cend() const noexcept
123 auto const& lines() const noexcept
146 [[nodiscard]] aarectangle
147 bounding_rectangle(
float maximum_line_width,
float line_spacing = 1.0f,
float paragraph_spacing = 1.5f) noexcept;
165 float line_spacing = 1.0f,
166 float paragraph_spacing = 1.5f) noexcept;
179 return _text_direction;
189 return resolve(_alignment, _text_direction == unicode_bidi_class::L);
199 [[nodiscard]] char_const_iterator
get_it(
size_t index)
const noexcept;
210 return get_it(cursor.index());
221 [[nodiscard]] char_const_iterator
get_it(
size_t column,
size_t row)
const noexcept;
232 return get_it(column_row.first, column_row.second);
267 [[nodiscard]]
size_t get_index(text_shaper::char_const_iterator it)
const noexcept;
375 [[nodiscard]] char_const_iterator
move_left_char(char_const_iterator it)
const noexcept;
382 [[nodiscard]] char_const_iterator
move_right_char(char_const_iterator it)
const noexcept;
408 hi::alignment _alignment;
412 unicode_break_vector _line_break_opportunities;
420 unicode_break_vector _word_break_opportunities;
424 unicode_break_vector _sentence_break_opportunities;
432 unicode_bidi_class _text_direction;
446 aarectangle _rectangle;
456 [[nodiscard]] line_vector make_lines(
461 float paragraph_spacing)
noexcept;
475 void resolve_font_and_widths(
hi::text_theme const &text_theme)
noexcept;
478 get_selection_from_break(
text_cursor cursor, unicode_break_vector
const& break_opportunities)
const noexcept;
481 get_line_metrics(text_shaper::char_const_iterator first, text_shaper::char_const_iterator last)
const noexcept;
DOXYGEN BUG.
Definition algorithm.hpp:13
constexpr extent2 sub_pixel_size(subpixel_orientation orientation) noexcept
Get the size of a sub-pixel based on the sub-pixel orientation.
Definition subpixel_orientation.hpp:38
The metrics of a font.
Definition font_metrics.hpp:15
Horizontal/Vertical alignment combination.
Definition alignment.hpp:238
A cursor-position in text.
Definition text_cursor.hpp:22
char_const_iterator get_it(size_t column, size_t row) const noexcept
Get the character at column and row in display order.
std::pair< text_cursor, text_cursor > select_paragraph(text_cursor cursor) const noexcept
Get the selection for a paragraph at the cursor.
std::pair< size_t, size_t > get_column_line(size_t index) const noexcept
Get the column and line of a character.
Definition text_shaper.hpp:247
char_const_iterator get_it(text_cursor cursor) const noexcept
Get the character at the cursor.
Definition text_shaper.hpp:208
std::pair< text_cursor, text_cursor > select_sentence(text_cursor cursor) const noexcept
Get the selection for the sentence at the cursor.
bool is_on_left(text_cursor cursor) const noexcept
Check if the cursor is on the left side of the character in display order.
bool is_on_right(text_cursor cursor) const noexcept
Check if the cursor is on the right side of the character in display order.
aarectangle bounding_rectangle(float maximum_line_width, float line_spacing=1.0f, float paragraph_spacing=1.5f) noexcept
Get bounding rectangle.
text_cursor get_after_cursor(text_shaper::char_const_iterator it) const noexcept
Get the cursor after the character in logical order.
Definition text_shaper.hpp:310
unicode_bidi_class text_direction() const noexcept
Get the text-direction as a whole.
Definition text_shaper.hpp:177
aarectangle rectangle() const noexcept
The rectangle used when laying out the text.
Definition text_shaper.hpp:170
std::pair< text_cursor, text_cursor > select_char(text_cursor cursor) const noexcept
Get the selection for the character at the cursor.
std::pair< size_t, size_t > get_column_line(text_shaper::char_const_iterator it) const noexcept
Get the column and line of a character.
text_cursor get_left_cursor(text_shaper::char_const_iterator it) const noexcept
Get the cursor left of the character in display order.
std::pair< text_cursor, text_cursor > select_word(text_cursor cursor) const noexcept
Get the selection for the word at the cursor.
size_t get_index(text_shaper::char_const_iterator it) const noexcept
Get the index of the character in logical order.
char_const_iterator get_it(size_t index) const noexcept
Get the character at index in logical order.
text_cursor get_end_cursor() const noexcept
Get the cursor at the end of the document.
std::pair< text_cursor, text_cursor > select_document(text_cursor cursor) const noexcept
Get the selection for a paragraph at the cursor.
text_cursor get_nearest_cursor(point2 point) const noexcept
find the nearest character.
char_const_iterator move_right_char(char_const_iterator it) const noexcept
Get the character to the right.
void layout(aarectangle rectangle, float baseline, extent2 sub_pixel_size, float line_spacing=1.0f, float paragraph_spacing=1.5f) noexcept
Layout the lines of the text.
text_shaper(hi::text const &text, hi::text_theme const &text_theme, hi::alignment alignment, bool left_to_right) noexcept
Construct a text_shaper with a text and alignment.
char_const_iterator get_it(std::pair< size_t, size_t > column_row) const noexcept
Get the character at column and row in display order.
Definition text_shaper.hpp:230
text_cursor get_begin_cursor() const noexcept
Get the cursor at the beginning of the document.
text_cursor get_after_cursor(size_t index) const noexcept
Get the cursor after the character in logical order.
alignment resolved_alignment() const noexcept
Get the resolved alignment of the text.
Definition text_shaper.hpp:187
text_cursor get_before_cursor(size_t index) const noexcept
Get the cursor before the character in logical order.
std::pair< size_t, size_t > get_column_line(text_cursor cursor) const noexcept
Get the column and line of a character.
Definition text_shaper.hpp:257
text_cursor get_right_cursor(text_shaper::char_const_iterator it) const noexcept
Get the cursor right of the character in display order.
char_const_iterator move_left_char(char_const_iterator it) const noexcept
Get the character to the left.
Definition text_theme.hpp:16
Definition unicode_bidi.hpp:18