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. All rights reserved.
2// このソースコードの使用は、LICENSEファイルにあるMITライセンスに準拠しています。
3#include <functional> // for function
4#include <sstream> // for basic_istream, stringstream
5#include <string> // for string, allocator, getline
6#include <utility> // for move
7
8#include "ftxui/dom/elements.hpp" // for flexbox, Element, text, Elements, operator|, xflex, paragraph, paragraphAlignCenter, paragraphAlignJustify, paragraphAlignLeft, paragraphAlignRight
9#include "ftxui/dom/flexbox_config.hpp" // for FlexboxConfig, FlexboxConfig::JustifyContent, FlexboxConfig::JustifyContent::Center, FlexboxConfig::JustifyContent::FlexEnd, FlexboxConfig::JustifyContent::SpaceBetween
10
11namespace ftxui {
12
13namespace {
14Elements Split(const std::string& the_text) {
15 Elements output;
16 std::stringstream ss(the_text);
17 std::string word;
18 while (std::getline(ss, word, ' ')) {
19 output.push_back(text(word));
20 }
21 return output;
22}
23
24Element Split(const std::string& paragraph,
25 const std::function<Element(std::string)>& f) {
26 Elements output;
27 std::stringstream ss(paragraph);
28 std::string line;
29 while (std::getline(ss, line, '\n')) {
30 output.push_back(f(line));
31 }
32 return vbox(std::move(output));
33}
34
35} // namespace
36
37/// @brief 段落を複数行で描画する要素を返します。
38/// @ingroup dom
39/// @see flexbox.
40Element paragraph(const std::string& the_text) {
41 return paragraphAlignLeft(the_text);
42}
43
44/// @brief 段落を複数行にわたって左揃えで描画する要素を返します。
45/// @ingroup dom
46/// @see flexbox.
47Element paragraphAlignLeft(const std::string& the_text) {
48 return Split(the_text, [](const std::string& line) {
49 static const auto config = FlexboxConfig().SetGap(1, 0);
50 return flexbox(Split(line), config);
51 });
52};
53
54/// @brief 段落を複数行にわたって右揃えで描画する要素を返します。
55/// @ingroup dom
56/// @see flexbox.
57Element paragraphAlignRight(const std::string& the_text) {
58 return Split(the_text, [](const std::string& line) {
59 static const auto config = FlexboxConfig().SetGap(1, 0).Set(
61 return flexbox(Split(line), config);
62 });
63}
64
65/// @brief 段落を複数行にわたって中央揃えで描画する要素を返します。
66/// @ingroup dom
67/// @see flexbox.
68Element paragraphAlignCenter(const std::string& the_text) {
69 return Split(the_text, [](const std::string& line) {
70 static const auto config =
72 return flexbox(Split(line), config);
73 });
74}
75
76/// @brief 段落を複数行にわたって両端揃えで描画する要素を返します。
77/// 中央に。
78/// @ingroup dom
79/// @see flexbox.
80Element paragraphAlignJustify(const std::string& the_text) {
81 return Split(the_text, [](const std::string& line) {
82 static const auto config = FlexboxConfig().SetGap(1, 0).Set(
84 Elements words = Split(line);
85 words.push_back(text("") | xflex);
86 return flexbox(std::move(words), config);
87 });
88}
89
90} // namespace ftxui
FlexboxConfig & SetGap(int gap_x, int gap_y)
フレックスボックスのギャップを設定します。
@ Center
アイテムは行の中央に配置されます。
@ FlexEnd
アイテムはflexboxの方向の終了位置に揃えられます。
@ SpaceBetween
アイテムは行に沿って均等に分配されます。最初のアイテムは開始行に、最後のアイテムは終了行に配置されます。
FlexboxConfig & Set(FlexboxConfig::Direction)
フレックスボックスの方向を設定します。
Element paragraphAlignRight(const std::string &text)
段落を複数行にわたって右揃えで描画する要素を返します。
Element paragraphAlignCenter(const std::string &text)
段落を複数行にわたって中央揃えで描画する要素を返します。
Element text(std::wstring text)
ユニコードテキストを表示します。
Definition text.cpp:160
Element paragraphAlignLeft(const std::string &text)
段落を複数行にわたって左揃えで描画する要素を返します。
Element paragraphAlignJustify(const std::string &text)
段落を複数行にわたって両端揃えで描画する要素を返します。 中央に。
Element vbox(Elements)
要素を縦に一つずつ表示するコンテナ。
Definition vbox.cpp:94
FlexboxConfigは、flexboxコンテナのレイアウトプロパティを定義する構成構造体です。
FTXUI ftxui:: 名前空間
Definition animation.hpp:9
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
行/列に要素を表示し、一杯になると次の列/行に折り返すことができるコンテナ。
Definition flexbox.cpp:250
std::shared_ptr< Node > Element
Definition elements.hpp:21
std::vector< Element > Elements
Definition elements.hpp:22
Elements paragraph(std::wstring text)