@akiojin/gwt 9.0.4 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +106 -146
- package/README.md +103 -143
- package/bin/gwt.cjs +1 -1
- package/package.json +5 -5
- package/rustfmt.toml +0 -2
- package/scripts/check-release-flow.sh +2 -8
- package/scripts/postinstall.js +17 -7
- package/scripts/run-local-backend-tests-on-commit.sh +6 -12
- package/scripts/test-all.sh +1 -5
- package/scripts/check-e2e-coverage-threshold.mjs +0 -238
- package/scripts/run-local-e2e-coverage-on-commit.sh +0 -69
- package/scripts/run-local-e2e-on-commit.sh +0 -60
- package/scripts/verify-ci-node-toolchain.sh +0 -76
- package/scripts/voice-eval.sh +0 -48
- package/vendor/ratatui-core/src/backend/test.rs +0 -1077
- package/vendor/ratatui-core/src/backend.rs +0 -405
- package/vendor/ratatui-core/src/buffer/assert.rs +0 -71
- package/vendor/ratatui-core/src/buffer/buffer.rs +0 -1388
- package/vendor/ratatui-core/src/buffer/cell.rs +0 -377
- package/vendor/ratatui-core/src/buffer.rs +0 -9
- package/vendor/ratatui-core/src/layout/alignment.rs +0 -89
- package/vendor/ratatui-core/src/layout/constraint.rs +0 -526
- package/vendor/ratatui-core/src/layout/direction.rs +0 -63
- package/vendor/ratatui-core/src/layout/flex.rs +0 -212
- package/vendor/ratatui-core/src/layout/layout.rs +0 -2838
- package/vendor/ratatui-core/src/layout/margin.rs +0 -79
- package/vendor/ratatui-core/src/layout/offset.rs +0 -66
- package/vendor/ratatui-core/src/layout/position.rs +0 -253
- package/vendor/ratatui-core/src/layout/rect/iter.rs +0 -356
- package/vendor/ratatui-core/src/layout/rect/ops.rs +0 -136
- package/vendor/ratatui-core/src/layout/rect.rs +0 -1114
- package/vendor/ratatui-core/src/layout/size.rs +0 -147
- package/vendor/ratatui-core/src/layout.rs +0 -333
- package/vendor/ratatui-core/src/lib.rs +0 -82
- package/vendor/ratatui-core/src/style/anstyle.rs +0 -348
- package/vendor/ratatui-core/src/style/color.rs +0 -788
- package/vendor/ratatui-core/src/style/palette/material.rs +0 -608
- package/vendor/ratatui-core/src/style/palette/tailwind.rs +0 -653
- package/vendor/ratatui-core/src/style/palette.rs +0 -6
- package/vendor/ratatui-core/src/style/palette_conversion.rs +0 -82
- package/vendor/ratatui-core/src/style/stylize.rs +0 -668
- package/vendor/ratatui-core/src/style.rs +0 -1069
- package/vendor/ratatui-core/src/symbols/bar.rs +0 -51
- package/vendor/ratatui-core/src/symbols/block.rs +0 -51
- package/vendor/ratatui-core/src/symbols/border.rs +0 -709
- package/vendor/ratatui-core/src/symbols/braille.rs +0 -21
- package/vendor/ratatui-core/src/symbols/half_block.rs +0 -3
- package/vendor/ratatui-core/src/symbols/line.rs +0 -259
- package/vendor/ratatui-core/src/symbols/marker.rs +0 -82
- package/vendor/ratatui-core/src/symbols/merge.rs +0 -748
- package/vendor/ratatui-core/src/symbols/pixel.rs +0 -30
- package/vendor/ratatui-core/src/symbols/scrollbar.rs +0 -46
- package/vendor/ratatui-core/src/symbols/shade.rs +0 -5
- package/vendor/ratatui-core/src/symbols.rs +0 -15
- package/vendor/ratatui-core/src/terminal/frame.rs +0 -192
- package/vendor/ratatui-core/src/terminal/terminal.rs +0 -926
- package/vendor/ratatui-core/src/terminal/viewport.rs +0 -58
- package/vendor/ratatui-core/src/terminal.rs +0 -40
- package/vendor/ratatui-core/src/text/grapheme.rs +0 -84
- package/vendor/ratatui-core/src/text/line.rs +0 -1678
- package/vendor/ratatui-core/src/text/masked.rs +0 -149
- package/vendor/ratatui-core/src/text/span.rs +0 -904
- package/vendor/ratatui-core/src/text/text.rs +0 -1434
- package/vendor/ratatui-core/src/text.rs +0 -64
- package/vendor/ratatui-core/src/widgets/stateful_widget.rs +0 -193
- package/vendor/ratatui-core/src/widgets/widget.rs +0 -174
- package/vendor/ratatui-core/src/widgets.rs +0 -9
|
@@ -1,709 +0,0 @@
|
|
|
1
|
-
use crate::symbols::{block, line};
|
|
2
|
-
|
|
3
|
-
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
|
|
4
|
-
pub struct Set<'a> {
|
|
5
|
-
pub top_left: &'a str,
|
|
6
|
-
pub top_right: &'a str,
|
|
7
|
-
pub bottom_left: &'a str,
|
|
8
|
-
pub bottom_right: &'a str,
|
|
9
|
-
pub vertical_left: &'a str,
|
|
10
|
-
pub vertical_right: &'a str,
|
|
11
|
-
pub horizontal_top: &'a str,
|
|
12
|
-
pub horizontal_bottom: &'a str,
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
impl Default for Set<'_> {
|
|
16
|
-
fn default() -> Self {
|
|
17
|
-
PLAIN
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Helper function to convert a line set to a border set
|
|
22
|
-
const fn from_line_set(line_set: line::Set<'_>) -> Set<'_> {
|
|
23
|
-
Set {
|
|
24
|
-
top_left: line_set.top_left,
|
|
25
|
-
top_right: line_set.top_right,
|
|
26
|
-
bottom_left: line_set.bottom_left,
|
|
27
|
-
bottom_right: line_set.bottom_right,
|
|
28
|
-
vertical_left: line_set.vertical,
|
|
29
|
-
vertical_right: line_set.vertical,
|
|
30
|
-
horizontal_top: line_set.horizontal,
|
|
31
|
-
horizontal_bottom: line_set.horizontal,
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/// Border Set with a single line width
|
|
36
|
-
///
|
|
37
|
-
/// ```text
|
|
38
|
-
/// ┌─────┐
|
|
39
|
-
/// │xxxxx│
|
|
40
|
-
/// │xxxxx│
|
|
41
|
-
/// └─────┘
|
|
42
|
-
/// ```
|
|
43
|
-
pub const PLAIN: Set = Set {
|
|
44
|
-
top_left: line::NORMAL.top_left,
|
|
45
|
-
top_right: line::NORMAL.top_right,
|
|
46
|
-
bottom_left: line::NORMAL.bottom_left,
|
|
47
|
-
bottom_right: line::NORMAL.bottom_right,
|
|
48
|
-
vertical_left: line::NORMAL.vertical,
|
|
49
|
-
vertical_right: line::NORMAL.vertical,
|
|
50
|
-
horizontal_top: line::NORMAL.horizontal,
|
|
51
|
-
horizontal_bottom: line::NORMAL.horizontal,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
/// Border Set with a single line width and rounded corners
|
|
55
|
-
///
|
|
56
|
-
/// ```text
|
|
57
|
-
/// ╭─────╮
|
|
58
|
-
/// │xxxxx│
|
|
59
|
-
/// │xxxxx│
|
|
60
|
-
/// ╰─────╯
|
|
61
|
-
/// ```
|
|
62
|
-
pub const ROUNDED: Set = Set {
|
|
63
|
-
top_left: line::ROUNDED.top_left,
|
|
64
|
-
top_right: line::ROUNDED.top_right,
|
|
65
|
-
bottom_left: line::ROUNDED.bottom_left,
|
|
66
|
-
bottom_right: line::ROUNDED.bottom_right,
|
|
67
|
-
vertical_left: line::ROUNDED.vertical,
|
|
68
|
-
vertical_right: line::ROUNDED.vertical,
|
|
69
|
-
horizontal_top: line::ROUNDED.horizontal,
|
|
70
|
-
horizontal_bottom: line::ROUNDED.horizontal,
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/// Border Set with a double line width
|
|
74
|
-
///
|
|
75
|
-
/// ```text
|
|
76
|
-
/// ╔═════╗
|
|
77
|
-
/// ║xxxxx║
|
|
78
|
-
/// ║xxxxx║
|
|
79
|
-
/// ╚═════╝
|
|
80
|
-
/// ```
|
|
81
|
-
pub const DOUBLE: Set = Set {
|
|
82
|
-
top_left: line::DOUBLE.top_left,
|
|
83
|
-
top_right: line::DOUBLE.top_right,
|
|
84
|
-
bottom_left: line::DOUBLE.bottom_left,
|
|
85
|
-
bottom_right: line::DOUBLE.bottom_right,
|
|
86
|
-
vertical_left: line::DOUBLE.vertical,
|
|
87
|
-
vertical_right: line::DOUBLE.vertical,
|
|
88
|
-
horizontal_top: line::DOUBLE.horizontal,
|
|
89
|
-
horizontal_bottom: line::DOUBLE.horizontal,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/// Border Set with a thick line width
|
|
93
|
-
///
|
|
94
|
-
/// ```text
|
|
95
|
-
/// ┏━━━━━┓
|
|
96
|
-
/// ┃xxxxx┃
|
|
97
|
-
/// ┃xxxxx┃
|
|
98
|
-
/// ┗━━━━━┛
|
|
99
|
-
/// ```
|
|
100
|
-
pub const THICK: Set = Set {
|
|
101
|
-
top_left: line::THICK.top_left,
|
|
102
|
-
top_right: line::THICK.top_right,
|
|
103
|
-
bottom_left: line::THICK.bottom_left,
|
|
104
|
-
bottom_right: line::THICK.bottom_right,
|
|
105
|
-
vertical_left: line::THICK.vertical,
|
|
106
|
-
vertical_right: line::THICK.vertical,
|
|
107
|
-
horizontal_top: line::THICK.horizontal,
|
|
108
|
-
horizontal_bottom: line::THICK.horizontal,
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
/// Border Set with light double-dashed border lines
|
|
112
|
-
///
|
|
113
|
-
/// ```text
|
|
114
|
-
/// ┌╌╌╌╌╌┐
|
|
115
|
-
/// ╎xxxxx╎
|
|
116
|
-
/// ╎xxxxx╎
|
|
117
|
-
/// └╌╌╌╌╌┘
|
|
118
|
-
/// ```
|
|
119
|
-
pub const LIGHT_DOUBLE_DASHED: Set = from_line_set(line::LIGHT_DOUBLE_DASHED);
|
|
120
|
-
|
|
121
|
-
/// Border Set with thick double-dashed border lines
|
|
122
|
-
///
|
|
123
|
-
/// ```text
|
|
124
|
-
/// ┏╍╍╍╍╍┓
|
|
125
|
-
/// ╏xxxxx╏
|
|
126
|
-
/// ╏xxxxx╏
|
|
127
|
-
/// ┗╍╍╍╍╍┛
|
|
128
|
-
/// ```
|
|
129
|
-
pub const HEAVY_DOUBLE_DASHED: Set = from_line_set(line::HEAVY_DOUBLE_DASHED);
|
|
130
|
-
|
|
131
|
-
/// Border Set with light triple-dashed border lines
|
|
132
|
-
///
|
|
133
|
-
/// ```text
|
|
134
|
-
/// ┌┄┄┄┄┄┐
|
|
135
|
-
/// ┆xxxxx┆
|
|
136
|
-
/// ┆xxxxx┆
|
|
137
|
-
/// └┄┄┄┄┄┘
|
|
138
|
-
/// ```
|
|
139
|
-
pub const LIGHT_TRIPLE_DASHED: Set = from_line_set(line::LIGHT_TRIPLE_DASHED);
|
|
140
|
-
|
|
141
|
-
/// Border Set with thick triple-dashed border lines
|
|
142
|
-
///
|
|
143
|
-
/// ```text
|
|
144
|
-
/// ┏┅┅┅┅┅┓
|
|
145
|
-
/// ┇xxxxx┇
|
|
146
|
-
/// ┇xxxxx┇
|
|
147
|
-
/// ┗┅┅┅┅┅┛
|
|
148
|
-
/// ```
|
|
149
|
-
pub const HEAVY_TRIPLE_DASHED: Set = from_line_set(line::HEAVY_TRIPLE_DASHED);
|
|
150
|
-
|
|
151
|
-
/// Border Set with light quadruple-dashed border lines
|
|
152
|
-
///
|
|
153
|
-
/// ```text
|
|
154
|
-
/// ┌┈┈┈┈┈┐
|
|
155
|
-
/// ┊xxxxx┊
|
|
156
|
-
/// ┊xxxxx┊
|
|
157
|
-
/// └┈┈┈┈┈┘
|
|
158
|
-
/// ```
|
|
159
|
-
pub const LIGHT_QUADRUPLE_DASHED: Set = from_line_set(line::LIGHT_QUADRUPLE_DASHED);
|
|
160
|
-
|
|
161
|
-
/// Border Set with thick quadruple-dashed border lines
|
|
162
|
-
///
|
|
163
|
-
/// ```text
|
|
164
|
-
/// ┏┉┉┉┉┉┓
|
|
165
|
-
/// ┋xxxxx┋
|
|
166
|
-
/// ┋xxxxx┋
|
|
167
|
-
/// ┗┉┉┉┉┉┛
|
|
168
|
-
/// ```
|
|
169
|
-
pub const HEAVY_QUADRUPLE_DASHED: Set = from_line_set(line::HEAVY_QUADRUPLE_DASHED);
|
|
170
|
-
|
|
171
|
-
pub const QUADRANT_TOP_LEFT: &str = "▘";
|
|
172
|
-
pub const QUADRANT_TOP_RIGHT: &str = "▝";
|
|
173
|
-
pub const QUADRANT_BOTTOM_LEFT: &str = "▖";
|
|
174
|
-
pub const QUADRANT_BOTTOM_RIGHT: &str = "▗";
|
|
175
|
-
pub const QUADRANT_TOP_HALF: &str = "▀";
|
|
176
|
-
pub const QUADRANT_BOTTOM_HALF: &str = "▄";
|
|
177
|
-
pub const QUADRANT_LEFT_HALF: &str = "▌";
|
|
178
|
-
pub const QUADRANT_RIGHT_HALF: &str = "▐";
|
|
179
|
-
pub const QUADRANT_TOP_LEFT_BOTTOM_LEFT_BOTTOM_RIGHT: &str = "▙";
|
|
180
|
-
pub const QUADRANT_TOP_LEFT_TOP_RIGHT_BOTTOM_LEFT: &str = "▛";
|
|
181
|
-
pub const QUADRANT_TOP_LEFT_TOP_RIGHT_BOTTOM_RIGHT: &str = "▜";
|
|
182
|
-
pub const QUADRANT_TOP_RIGHT_BOTTOM_LEFT_BOTTOM_RIGHT: &str = "▟";
|
|
183
|
-
pub const QUADRANT_TOP_LEFT_BOTTOM_RIGHT: &str = "▚";
|
|
184
|
-
pub const QUADRANT_TOP_RIGHT_BOTTOM_LEFT: &str = "▞";
|
|
185
|
-
pub const QUADRANT_BLOCK: &str = "█";
|
|
186
|
-
|
|
187
|
-
/// Quadrant used for setting a border outside a block by one half cell "pixel".
|
|
188
|
-
///
|
|
189
|
-
/// ```text
|
|
190
|
-
/// ▛▀▀▀▀▀▜
|
|
191
|
-
/// ▌xxxxx▐
|
|
192
|
-
/// ▌xxxxx▐
|
|
193
|
-
/// ▙▄▄▄▄▄▟
|
|
194
|
-
/// ```
|
|
195
|
-
pub const QUADRANT_OUTSIDE: Set = Set {
|
|
196
|
-
top_left: QUADRANT_TOP_LEFT_TOP_RIGHT_BOTTOM_LEFT,
|
|
197
|
-
top_right: QUADRANT_TOP_LEFT_TOP_RIGHT_BOTTOM_RIGHT,
|
|
198
|
-
bottom_left: QUADRANT_TOP_LEFT_BOTTOM_LEFT_BOTTOM_RIGHT,
|
|
199
|
-
bottom_right: QUADRANT_TOP_RIGHT_BOTTOM_LEFT_BOTTOM_RIGHT,
|
|
200
|
-
vertical_left: QUADRANT_LEFT_HALF,
|
|
201
|
-
vertical_right: QUADRANT_RIGHT_HALF,
|
|
202
|
-
horizontal_top: QUADRANT_TOP_HALF,
|
|
203
|
-
horizontal_bottom: QUADRANT_BOTTOM_HALF,
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
/// Quadrant used for setting a border inside a block by one half cell "pixel".
|
|
207
|
-
///
|
|
208
|
-
/// ```text
|
|
209
|
-
/// ▗▄▄▄▄▄▖
|
|
210
|
-
/// ▐xxxxx▌
|
|
211
|
-
/// ▐xxxxx▌
|
|
212
|
-
/// ▝▀▀▀▀▀▘
|
|
213
|
-
/// ```
|
|
214
|
-
pub const QUADRANT_INSIDE: Set = Set {
|
|
215
|
-
top_right: QUADRANT_BOTTOM_LEFT,
|
|
216
|
-
top_left: QUADRANT_BOTTOM_RIGHT,
|
|
217
|
-
bottom_right: QUADRANT_TOP_LEFT,
|
|
218
|
-
bottom_left: QUADRANT_TOP_RIGHT,
|
|
219
|
-
vertical_left: QUADRANT_RIGHT_HALF,
|
|
220
|
-
vertical_right: QUADRANT_LEFT_HALF,
|
|
221
|
-
horizontal_top: QUADRANT_BOTTOM_HALF,
|
|
222
|
-
horizontal_bottom: QUADRANT_TOP_HALF,
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
pub const ONE_EIGHTH_TOP_EIGHT: &str = "▔";
|
|
226
|
-
pub const ONE_EIGHTH_BOTTOM_EIGHT: &str = "▁";
|
|
227
|
-
pub const ONE_EIGHTH_LEFT_EIGHT: &str = "▏";
|
|
228
|
-
pub const ONE_EIGHTH_RIGHT_EIGHT: &str = "▕";
|
|
229
|
-
|
|
230
|
-
/// Wide border set based on McGugan box technique
|
|
231
|
-
///
|
|
232
|
-
/// ```text
|
|
233
|
-
/// ▁▁▁▁▁▁▁
|
|
234
|
-
/// ▏xxxxx▕
|
|
235
|
-
/// ▏xxxxx▕
|
|
236
|
-
/// ▔▔▔▔▔▔▔
|
|
237
|
-
/// ```
|
|
238
|
-
#[expect(clippy::doc_markdown)]
|
|
239
|
-
pub const ONE_EIGHTH_WIDE: Set = Set {
|
|
240
|
-
top_right: ONE_EIGHTH_BOTTOM_EIGHT,
|
|
241
|
-
top_left: ONE_EIGHTH_BOTTOM_EIGHT,
|
|
242
|
-
bottom_right: ONE_EIGHTH_TOP_EIGHT,
|
|
243
|
-
bottom_left: ONE_EIGHTH_TOP_EIGHT,
|
|
244
|
-
vertical_left: ONE_EIGHTH_LEFT_EIGHT,
|
|
245
|
-
vertical_right: ONE_EIGHTH_RIGHT_EIGHT,
|
|
246
|
-
horizontal_top: ONE_EIGHTH_BOTTOM_EIGHT,
|
|
247
|
-
horizontal_bottom: ONE_EIGHTH_TOP_EIGHT,
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
/// Tall border set based on McGugan box technique
|
|
251
|
-
///
|
|
252
|
-
/// ```text
|
|
253
|
-
/// ▕▔▔▏
|
|
254
|
-
/// ▕xx▏
|
|
255
|
-
/// ▕xx▏
|
|
256
|
-
/// ▕▁▁▏
|
|
257
|
-
/// ```
|
|
258
|
-
#[expect(clippy::doc_markdown)]
|
|
259
|
-
pub const ONE_EIGHTH_TALL: Set = Set {
|
|
260
|
-
top_right: ONE_EIGHTH_LEFT_EIGHT,
|
|
261
|
-
top_left: ONE_EIGHTH_RIGHT_EIGHT,
|
|
262
|
-
bottom_right: ONE_EIGHTH_LEFT_EIGHT,
|
|
263
|
-
bottom_left: ONE_EIGHTH_RIGHT_EIGHT,
|
|
264
|
-
vertical_left: ONE_EIGHTH_RIGHT_EIGHT,
|
|
265
|
-
vertical_right: ONE_EIGHTH_LEFT_EIGHT,
|
|
266
|
-
horizontal_top: ONE_EIGHTH_TOP_EIGHT,
|
|
267
|
-
horizontal_bottom: ONE_EIGHTH_BOTTOM_EIGHT,
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
/// Wide proportional (visually equal width and height) border with using set of quadrants.
|
|
271
|
-
///
|
|
272
|
-
/// The border is created by using half blocks for top and bottom, and full
|
|
273
|
-
/// blocks for right and left sides to make horizontal and vertical borders seem equal.
|
|
274
|
-
///
|
|
275
|
-
/// ```text
|
|
276
|
-
/// ▄▄▄▄
|
|
277
|
-
/// █xx█
|
|
278
|
-
/// █xx█
|
|
279
|
-
/// ▀▀▀▀
|
|
280
|
-
/// ```
|
|
281
|
-
pub const PROPORTIONAL_WIDE: Set = Set {
|
|
282
|
-
top_right: QUADRANT_BOTTOM_HALF,
|
|
283
|
-
top_left: QUADRANT_BOTTOM_HALF,
|
|
284
|
-
bottom_right: QUADRANT_TOP_HALF,
|
|
285
|
-
bottom_left: QUADRANT_TOP_HALF,
|
|
286
|
-
vertical_left: QUADRANT_BLOCK,
|
|
287
|
-
vertical_right: QUADRANT_BLOCK,
|
|
288
|
-
horizontal_top: QUADRANT_BOTTOM_HALF,
|
|
289
|
-
horizontal_bottom: QUADRANT_TOP_HALF,
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
/// Tall proportional (visually equal width and height) border with using set of quadrants.
|
|
293
|
-
///
|
|
294
|
-
/// The border is created by using full blocks for all sides, except for the top and bottom,
|
|
295
|
-
/// which use half blocks to make horizontal and vertical borders seem equal.
|
|
296
|
-
///
|
|
297
|
-
/// ```text
|
|
298
|
-
/// ▕█▀▀█
|
|
299
|
-
/// ▕█xx█
|
|
300
|
-
/// ▕█xx█
|
|
301
|
-
/// ▕█▄▄█
|
|
302
|
-
/// ```
|
|
303
|
-
pub const PROPORTIONAL_TALL: Set = Set {
|
|
304
|
-
top_right: QUADRANT_BLOCK,
|
|
305
|
-
top_left: QUADRANT_BLOCK,
|
|
306
|
-
bottom_right: QUADRANT_BLOCK,
|
|
307
|
-
bottom_left: QUADRANT_BLOCK,
|
|
308
|
-
vertical_left: QUADRANT_BLOCK,
|
|
309
|
-
vertical_right: QUADRANT_BLOCK,
|
|
310
|
-
horizontal_top: QUADRANT_TOP_HALF,
|
|
311
|
-
horizontal_bottom: QUADRANT_BOTTOM_HALF,
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
/// Solid border set
|
|
315
|
-
///
|
|
316
|
-
/// The border is created by using full blocks for all sides.
|
|
317
|
-
///
|
|
318
|
-
/// ```text
|
|
319
|
-
/// ████
|
|
320
|
-
/// █xx█
|
|
321
|
-
/// █xx█
|
|
322
|
-
/// ████
|
|
323
|
-
/// ```
|
|
324
|
-
pub const FULL: Set = Set {
|
|
325
|
-
top_left: block::FULL,
|
|
326
|
-
top_right: block::FULL,
|
|
327
|
-
bottom_left: block::FULL,
|
|
328
|
-
bottom_right: block::FULL,
|
|
329
|
-
vertical_left: block::FULL,
|
|
330
|
-
vertical_right: block::FULL,
|
|
331
|
-
horizontal_top: block::FULL,
|
|
332
|
-
horizontal_bottom: block::FULL,
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
/// Empty border set
|
|
336
|
-
///
|
|
337
|
-
/// The border is created by using empty strings for all sides.
|
|
338
|
-
///
|
|
339
|
-
/// This is useful for ensuring that the border style is applied to a border on a block with a title
|
|
340
|
-
/// without actually drawing a border.
|
|
341
|
-
///
|
|
342
|
-
/// ░ Example
|
|
343
|
-
///
|
|
344
|
-
/// `░` represents the content in the area not covered by the border to make it easier to see the
|
|
345
|
-
/// blank symbols.
|
|
346
|
-
///
|
|
347
|
-
/// ```text
|
|
348
|
-
/// ░░░░░░░░
|
|
349
|
-
/// ░░ ░░
|
|
350
|
-
/// ░░ ░░ ░░
|
|
351
|
-
/// ░░ ░░ ░░
|
|
352
|
-
/// ░░ ░░
|
|
353
|
-
/// ░░░░░░░░
|
|
354
|
-
/// ```
|
|
355
|
-
pub const EMPTY: Set = Set {
|
|
356
|
-
top_left: " ",
|
|
357
|
-
top_right: " ",
|
|
358
|
-
bottom_left: " ",
|
|
359
|
-
bottom_right: " ",
|
|
360
|
-
vertical_left: " ",
|
|
361
|
-
vertical_right: " ",
|
|
362
|
-
horizontal_top: " ",
|
|
363
|
-
horizontal_bottom: " ",
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
#[cfg(test)]
|
|
367
|
-
mod tests {
|
|
368
|
-
use alloc::format;
|
|
369
|
-
use alloc::string::String;
|
|
370
|
-
|
|
371
|
-
use indoc::{formatdoc, indoc};
|
|
372
|
-
|
|
373
|
-
use super::*;
|
|
374
|
-
|
|
375
|
-
#[test]
|
|
376
|
-
fn default() {
|
|
377
|
-
assert_eq!(Set::default(), PLAIN);
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/// A helper function to render a border set to a string.
|
|
381
|
-
///
|
|
382
|
-
/// '░' (U+2591 Light Shade) is used as a placeholder for empty space to make it easier to see
|
|
383
|
-
/// the size of the border symbols.
|
|
384
|
-
fn render(set: Set) -> String {
|
|
385
|
-
formatdoc!(
|
|
386
|
-
"░░░░░░
|
|
387
|
-
░{}{}{}{}░
|
|
388
|
-
░{}░░{}░
|
|
389
|
-
░{}░░{}░
|
|
390
|
-
░{}{}{}{}░
|
|
391
|
-
░░░░░░",
|
|
392
|
-
set.top_left,
|
|
393
|
-
set.horizontal_top,
|
|
394
|
-
set.horizontal_top,
|
|
395
|
-
set.top_right,
|
|
396
|
-
set.vertical_left,
|
|
397
|
-
set.vertical_right,
|
|
398
|
-
set.vertical_left,
|
|
399
|
-
set.vertical_right,
|
|
400
|
-
set.bottom_left,
|
|
401
|
-
set.horizontal_bottom,
|
|
402
|
-
set.horizontal_bottom,
|
|
403
|
-
set.bottom_right
|
|
404
|
-
)
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
#[test]
|
|
408
|
-
fn border_set_from_line_set() {
|
|
409
|
-
let custom_line_set = line::Set {
|
|
410
|
-
top_left: "a",
|
|
411
|
-
top_right: "b",
|
|
412
|
-
bottom_left: "c",
|
|
413
|
-
bottom_right: "d",
|
|
414
|
-
vertical: "e",
|
|
415
|
-
horizontal: "f",
|
|
416
|
-
vertical_left: "g",
|
|
417
|
-
vertical_right: "h",
|
|
418
|
-
horizontal_down: "i",
|
|
419
|
-
horizontal_up: "j",
|
|
420
|
-
cross: "k",
|
|
421
|
-
};
|
|
422
|
-
|
|
423
|
-
let border_set = from_line_set(custom_line_set);
|
|
424
|
-
|
|
425
|
-
assert_eq!(
|
|
426
|
-
border_set,
|
|
427
|
-
Set {
|
|
428
|
-
top_left: "a",
|
|
429
|
-
top_right: "b",
|
|
430
|
-
bottom_left: "c",
|
|
431
|
-
bottom_right: "d",
|
|
432
|
-
vertical_left: "e",
|
|
433
|
-
vertical_right: "e",
|
|
434
|
-
horizontal_bottom: "f",
|
|
435
|
-
horizontal_top: "f",
|
|
436
|
-
}
|
|
437
|
-
);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
#[test]
|
|
441
|
-
fn plain() {
|
|
442
|
-
assert_eq!(
|
|
443
|
-
render(PLAIN),
|
|
444
|
-
indoc!(
|
|
445
|
-
"░░░░░░
|
|
446
|
-
░┌──┐░
|
|
447
|
-
░│░░│░
|
|
448
|
-
░│░░│░
|
|
449
|
-
░└──┘░
|
|
450
|
-
░░░░░░"
|
|
451
|
-
)
|
|
452
|
-
);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
#[test]
|
|
456
|
-
fn rounded() {
|
|
457
|
-
assert_eq!(
|
|
458
|
-
render(ROUNDED),
|
|
459
|
-
indoc!(
|
|
460
|
-
"░░░░░░
|
|
461
|
-
░╭──╮░
|
|
462
|
-
░│░░│░
|
|
463
|
-
░│░░│░
|
|
464
|
-
░╰──╯░
|
|
465
|
-
░░░░░░"
|
|
466
|
-
)
|
|
467
|
-
);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
#[test]
|
|
471
|
-
fn double() {
|
|
472
|
-
assert_eq!(
|
|
473
|
-
render(DOUBLE),
|
|
474
|
-
indoc!(
|
|
475
|
-
"░░░░░░
|
|
476
|
-
░╔══╗░
|
|
477
|
-
░║░░║░
|
|
478
|
-
░║░░║░
|
|
479
|
-
░╚══╝░
|
|
480
|
-
░░░░░░"
|
|
481
|
-
)
|
|
482
|
-
);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
#[test]
|
|
486
|
-
fn thick() {
|
|
487
|
-
assert_eq!(
|
|
488
|
-
render(THICK),
|
|
489
|
-
indoc!(
|
|
490
|
-
"░░░░░░
|
|
491
|
-
░┏━━┓░
|
|
492
|
-
░┃░░┃░
|
|
493
|
-
░┃░░┃░
|
|
494
|
-
░┗━━┛░
|
|
495
|
-
░░░░░░"
|
|
496
|
-
)
|
|
497
|
-
);
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
#[test]
|
|
501
|
-
fn light_double_dashed() {
|
|
502
|
-
assert_eq!(
|
|
503
|
-
render(LIGHT_DOUBLE_DASHED),
|
|
504
|
-
indoc!(
|
|
505
|
-
"░░░░░░
|
|
506
|
-
░┌╌╌┐░
|
|
507
|
-
░╎░░╎░
|
|
508
|
-
░╎░░╎░
|
|
509
|
-
░└╌╌┘░
|
|
510
|
-
░░░░░░"
|
|
511
|
-
)
|
|
512
|
-
);
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
#[test]
|
|
516
|
-
fn heavy_double_dashed() {
|
|
517
|
-
assert_eq!(
|
|
518
|
-
render(HEAVY_DOUBLE_DASHED),
|
|
519
|
-
indoc!(
|
|
520
|
-
"░░░░░░
|
|
521
|
-
░┏╍╍┓░
|
|
522
|
-
░╏░░╏░
|
|
523
|
-
░╏░░╏░
|
|
524
|
-
░┗╍╍┛░
|
|
525
|
-
░░░░░░"
|
|
526
|
-
)
|
|
527
|
-
);
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
#[test]
|
|
531
|
-
fn light_triple_dashed() {
|
|
532
|
-
assert_eq!(
|
|
533
|
-
render(LIGHT_TRIPLE_DASHED),
|
|
534
|
-
indoc!(
|
|
535
|
-
"░░░░░░
|
|
536
|
-
░┌┄┄┐░
|
|
537
|
-
░┆░░┆░
|
|
538
|
-
░┆░░┆░
|
|
539
|
-
░└┄┄┘░
|
|
540
|
-
░░░░░░"
|
|
541
|
-
)
|
|
542
|
-
);
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
#[test]
|
|
546
|
-
fn heavy_triple_dashed() {
|
|
547
|
-
assert_eq!(
|
|
548
|
-
render(HEAVY_TRIPLE_DASHED),
|
|
549
|
-
indoc!(
|
|
550
|
-
"░░░░░░
|
|
551
|
-
░┏┅┅┓░
|
|
552
|
-
░┇░░┇░
|
|
553
|
-
░┇░░┇░
|
|
554
|
-
░┗┅┅┛░
|
|
555
|
-
░░░░░░"
|
|
556
|
-
)
|
|
557
|
-
);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
#[test]
|
|
561
|
-
fn light_quadruple_dashed() {
|
|
562
|
-
assert_eq!(
|
|
563
|
-
render(LIGHT_QUADRUPLE_DASHED),
|
|
564
|
-
indoc!(
|
|
565
|
-
"░░░░░░
|
|
566
|
-
░┌┈┈┐░
|
|
567
|
-
░┊░░┊░
|
|
568
|
-
░┊░░┊░
|
|
569
|
-
░└┈┈┘░
|
|
570
|
-
░░░░░░"
|
|
571
|
-
)
|
|
572
|
-
);
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
#[test]
|
|
576
|
-
fn heavy_quadruple_dashed() {
|
|
577
|
-
assert_eq!(
|
|
578
|
-
render(HEAVY_QUADRUPLE_DASHED),
|
|
579
|
-
indoc!(
|
|
580
|
-
"░░░░░░
|
|
581
|
-
░┏┉┉┓░
|
|
582
|
-
░┋░░┋░
|
|
583
|
-
░┋░░┋░
|
|
584
|
-
░┗┉┉┛░
|
|
585
|
-
░░░░░░"
|
|
586
|
-
)
|
|
587
|
-
);
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
#[test]
|
|
591
|
-
fn quadrant_outside() {
|
|
592
|
-
assert_eq!(
|
|
593
|
-
render(QUADRANT_OUTSIDE),
|
|
594
|
-
indoc!(
|
|
595
|
-
"░░░░░░
|
|
596
|
-
░▛▀▀▜░
|
|
597
|
-
░▌░░▐░
|
|
598
|
-
░▌░░▐░
|
|
599
|
-
░▙▄▄▟░
|
|
600
|
-
░░░░░░"
|
|
601
|
-
)
|
|
602
|
-
);
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
#[test]
|
|
606
|
-
fn quadrant_inside() {
|
|
607
|
-
assert_eq!(
|
|
608
|
-
render(QUADRANT_INSIDE),
|
|
609
|
-
indoc!(
|
|
610
|
-
"░░░░░░
|
|
611
|
-
░▗▄▄▖░
|
|
612
|
-
░▐░░▌░
|
|
613
|
-
░▐░░▌░
|
|
614
|
-
░▝▀▀▘░
|
|
615
|
-
░░░░░░"
|
|
616
|
-
)
|
|
617
|
-
);
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
#[test]
|
|
621
|
-
fn one_eighth_wide() {
|
|
622
|
-
assert_eq!(
|
|
623
|
-
render(ONE_EIGHTH_WIDE),
|
|
624
|
-
indoc!(
|
|
625
|
-
"░░░░░░
|
|
626
|
-
░▁▁▁▁░
|
|
627
|
-
░▏░░▕░
|
|
628
|
-
░▏░░▕░
|
|
629
|
-
░▔▔▔▔░
|
|
630
|
-
░░░░░░"
|
|
631
|
-
)
|
|
632
|
-
);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
#[test]
|
|
636
|
-
fn one_eighth_tall() {
|
|
637
|
-
assert_eq!(
|
|
638
|
-
render(ONE_EIGHTH_TALL),
|
|
639
|
-
indoc!(
|
|
640
|
-
"░░░░░░
|
|
641
|
-
░▕▔▔▏░
|
|
642
|
-
░▕░░▏░
|
|
643
|
-
░▕░░▏░
|
|
644
|
-
░▕▁▁▏░
|
|
645
|
-
░░░░░░"
|
|
646
|
-
)
|
|
647
|
-
);
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
#[test]
|
|
651
|
-
fn proportional_wide() {
|
|
652
|
-
assert_eq!(
|
|
653
|
-
render(PROPORTIONAL_WIDE),
|
|
654
|
-
indoc!(
|
|
655
|
-
"░░░░░░
|
|
656
|
-
░▄▄▄▄░
|
|
657
|
-
░█░░█░
|
|
658
|
-
░█░░█░
|
|
659
|
-
░▀▀▀▀░
|
|
660
|
-
░░░░░░"
|
|
661
|
-
)
|
|
662
|
-
);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
#[test]
|
|
666
|
-
fn proportional_tall() {
|
|
667
|
-
assert_eq!(
|
|
668
|
-
render(PROPORTIONAL_TALL),
|
|
669
|
-
indoc!(
|
|
670
|
-
"░░░░░░
|
|
671
|
-
░█▀▀█░
|
|
672
|
-
░█░░█░
|
|
673
|
-
░█░░█░
|
|
674
|
-
░█▄▄█░
|
|
675
|
-
░░░░░░"
|
|
676
|
-
)
|
|
677
|
-
);
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
#[test]
|
|
681
|
-
fn full() {
|
|
682
|
-
assert_eq!(
|
|
683
|
-
render(FULL),
|
|
684
|
-
indoc!(
|
|
685
|
-
"░░░░░░
|
|
686
|
-
░████░
|
|
687
|
-
░█░░█░
|
|
688
|
-
░█░░█░
|
|
689
|
-
░████░
|
|
690
|
-
░░░░░░"
|
|
691
|
-
)
|
|
692
|
-
);
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
#[test]
|
|
696
|
-
fn empty() {
|
|
697
|
-
assert_eq!(
|
|
698
|
-
render(EMPTY),
|
|
699
|
-
indoc!(
|
|
700
|
-
"░░░░░░
|
|
701
|
-
░ ░
|
|
702
|
-
░ ░░ ░
|
|
703
|
-
░ ░░ ░
|
|
704
|
-
░ ░
|
|
705
|
-
░░░░░░"
|
|
706
|
-
)
|
|
707
|
-
);
|
|
708
|
-
}
|
|
709
|
-
}
|