FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/paragraph.cpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. Todos los derechos reservados.
2// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
3// el archivo LICENSE.
4#include <functional> // for function
5#include <sstream> // for basic_istream, stringstream
6#include <string> // for string, allocator, getline
7#include <utility> // for move
8
9#include "ftxui/dom/elements.hpp" // for flexbox, Element, text, Elements, operator|, xflex, paragraph, paragraphAlignCenter, paragraphAlignJustify, paragraphAlignLeft, paragraphAlignRight
10#include "ftxui/dom/flexbox_config.hpp" // for FlexboxConfig, FlexboxConfig::JustifyContent, FlexboxConfig::JustifyContent::Center, FlexboxConfig::JustifyContent::FlexEnd, FlexboxConfig::JustifyContent::SpaceBetween
11
12namespace ftxui {
13
14namespace {
15Elements Split(const std::string& the_text) {
16 Elements output;
17 std::stringstream ss(the_text);
18 std::string word;
19 while (std::getline(ss, word, ' ')) {
20 output.push_back(text(word));
21 }
22 return output;
23}
24
25Element Split(const std::string& paragraph,
26 const std::function<Element(std::string)>& f) {
27 Elements output;
28 std::stringstream ss(paragraph);
29 std::string line;
30 while (std::getline(ss, line, '\n')) {
31 output.push_back(f(line));
32 }
33 return vbox(std::move(output));
34}
35
36} // namespace
37
38/// @brief Devuelve un elemento que dibuja el párrafo en varias líneas.
39/// @ingroup dom
40/// @see flexbox.
41Element paragraph(const std::string& the_text) {
42 return paragraphAlignLeft(the_text);
43}
44
45/// @brief Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a
46/// la izquierda.
47/// @ingroup dom
48/// @see flexbox.
49Element paragraphAlignLeft(const std::string& the_text) {
50 return Split(the_text, [](const std::string& line) {
51 static const auto config = FlexboxConfig().SetGap(1, 0);
52 return flexbox(Split(line), config);
53 });
54};
55
56/// @brief Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a
57/// la derecha.
58/// @ingroup dom
59/// @see flexbox.
60Element paragraphAlignRight(const std::string& the_text) {
61 return Split(the_text, [](const std::string& line) {
62 static const auto config = FlexboxConfig().SetGap(1, 0).Set(
64 return flexbox(Split(line), config);
65 });
66}
67
68/// @brief Devuelve un elemento que dibuja el párrafo en varias líneas, alineado al
69/// centro.
70/// @ingroup dom
71/// @see flexbox.
72Element paragraphAlignCenter(const std::string& the_text) {
73 return Split(the_text, [](const std::string& line) {
74 static const auto config =
76 return flexbox(Split(line), config);
77 });
78}
79
80/// @brief Devuelve un elemento que dibuja el párrafo en varias líneas, alineado
81/// utilizando una alineación justificada.
82/// @ingroup dom
83/// @see flexbox.
84Element paragraphAlignJustify(const std::string& the_text) {
85 return Split(the_text, [](const std::string& line) {
86 static const auto config = FlexboxConfig().SetGap(1, 0).Set(
88 Elements words = Split(line);
89 words.push_back(text("") | xflex);
90 return flexbox(std::move(words), config);
91 });
92}
93
94} // namespace ftxui
FlexboxConfig & SetGap(int gap_x, int gap_y)
Establece el espacio (gap) del flexbox.
@ Center
Los elementos se centran a lo largo de la línea.
@ FlexEnd
Los elementos se alinean al final de la dirección del flexbox.
@ SpaceBetween
Los elementos se distribuyen uniformemente en la línea; el primer elemento está al.
FlexboxConfig & Set(FlexboxConfig::Direction)
Establece la dirección del flexbox.
Element paragraphAlignRight(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la derecha.
Element paragraphAlignCenter(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado al centro.
Element text(std::wstring text)
Muestra un fragmento de texto Unicode.
Definition text.cpp:160
Element paragraphAlignLeft(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la izquierda.
Element paragraphAlignJustify(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado utilizando una alineación justi...
FlexboxConfig es una estructura de configuración que define las propiedades de diseño para un contene...
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:10
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un contenedor que muestra elementos en filas/columnas y es capaz de ajustarse a la siguiente columna/...
Definition flexbox.cpp:251
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::vector< Element > Elements
Definition elements.hpp:23
Element vbox(Elements)
Elements paragraph(std::wstring text)