1 package tview
2
3 import "github.com/gdamore/tcell/v2"
4
5
6
7
8
9 const (
10
11 SemigraphicsHorizontalEllipsis rune = '\u2026'
12
13
14 BoxDrawingsLightHorizontal rune = '\u2500'
15 BoxDrawingsHeavyHorizontal rune = '\u2501'
16 BoxDrawingsLightVertical rune = '\u2502'
17 BoxDrawingsHeavyVertical rune = '\u2503'
18 BoxDrawingsLightTripleDashHorizontal rune = '\u2504'
19 BoxDrawingsHeavyTripleDashHorizontal rune = '\u2505'
20 BoxDrawingsLightTripleDashVertical rune = '\u2506'
21 BoxDrawingsHeavyTripleDashVertical rune = '\u2507'
22 BoxDrawingsLightQuadrupleDashHorizontal rune = '\u2508'
23 BoxDrawingsHeavyQuadrupleDashHorizontal rune = '\u2509'
24 BoxDrawingsLightQuadrupleDashVertical rune = '\u250a'
25 BoxDrawingsHeavyQuadrupleDashVertical rune = '\u250b'
26 BoxDrawingsLightDownAndRight rune = '\u250c'
27 BoxDrawingsDownLighAndRightHeavy rune = '\u250d'
28 BoxDrawingsDownHeavyAndRightLight rune = '\u250e'
29 BoxDrawingsHeavyDownAndRight rune = '\u250f'
30 BoxDrawingsLightDownAndLeft rune = '\u2510'
31 BoxDrawingsDownLighAndLeftHeavy rune = '\u2511'
32 BoxDrawingsDownHeavyAndLeftLight rune = '\u2512'
33 BoxDrawingsHeavyDownAndLeft rune = '\u2513'
34 BoxDrawingsLightUpAndRight rune = '\u2514'
35 BoxDrawingsUpLightAndRightHeavy rune = '\u2515'
36 BoxDrawingsUpHeavyAndRightLight rune = '\u2516'
37 BoxDrawingsHeavyUpAndRight rune = '\u2517'
38 BoxDrawingsLightUpAndLeft rune = '\u2518'
39 BoxDrawingsUpLightAndLeftHeavy rune = '\u2519'
40 BoxDrawingsUpHeavyAndLeftLight rune = '\u251a'
41 BoxDrawingsHeavyUpAndLeft rune = '\u251b'
42 BoxDrawingsLightVerticalAndRight rune = '\u251c'
43 BoxDrawingsVerticalLightAndRightHeavy rune = '\u251d'
44 BoxDrawingsUpHeavyAndRightDownLight rune = '\u251e'
45 BoxDrawingsDownHeacyAndRightUpLight rune = '\u251f'
46 BoxDrawingsVerticalHeavyAndRightLight rune = '\u2520'
47 BoxDrawingsDownLightAnbdRightUpHeavy rune = '\u2521'
48 BoxDrawingsUpLightAndRightDownHeavy rune = '\u2522'
49 BoxDrawingsHeavyVerticalAndRight rune = '\u2523'
50 BoxDrawingsLightVerticalAndLeft rune = '\u2524'
51 BoxDrawingsVerticalLightAndLeftHeavy rune = '\u2525'
52 BoxDrawingsUpHeavyAndLeftDownLight rune = '\u2526'
53 BoxDrawingsDownHeavyAndLeftUpLight rune = '\u2527'
54 BoxDrawingsVerticalheavyAndLeftLight rune = '\u2528'
55 BoxDrawingsDownLightAndLeftUpHeavy rune = '\u2529'
56 BoxDrawingsUpLightAndLeftDownHeavy rune = '\u252a'
57 BoxDrawingsHeavyVerticalAndLeft rune = '\u252b'
58 BoxDrawingsLightDownAndHorizontal rune = '\u252c'
59 BoxDrawingsLeftHeavyAndRightDownLight rune = '\u252d'
60 BoxDrawingsRightHeavyAndLeftDownLight rune = '\u252e'
61 BoxDrawingsDownLightAndHorizontalHeavy rune = '\u252f'
62 BoxDrawingsDownHeavyAndHorizontalLight rune = '\u2530'
63 BoxDrawingsRightLightAndLeftDownHeavy rune = '\u2531'
64 BoxDrawingsLeftLightAndRightDownHeavy rune = '\u2532'
65 BoxDrawingsHeavyDownAndHorizontal rune = '\u2533'
66 BoxDrawingsLightUpAndHorizontal rune = '\u2534'
67 BoxDrawingsLeftHeavyAndRightUpLight rune = '\u2535'
68 BoxDrawingsRightHeavyAndLeftUpLight rune = '\u2536'
69 BoxDrawingsUpLightAndHorizontalHeavy rune = '\u2537'
70 BoxDrawingsUpHeavyAndHorizontalLight rune = '\u2538'
71 BoxDrawingsRightLightAndLeftUpHeavy rune = '\u2539'
72 BoxDrawingsLeftLightAndRightUpHeavy rune = '\u253a'
73 BoxDrawingsHeavyUpAndHorizontal rune = '\u253b'
74 BoxDrawingsLightVerticalAndHorizontal rune = '\u253c'
75 BoxDrawingsLeftHeavyAndRightVerticalLight rune = '\u253d'
76 BoxDrawingsRightHeavyAndLeftVerticalLight rune = '\u253e'
77 BoxDrawingsVerticalLightAndHorizontalHeavy rune = '\u253f'
78 BoxDrawingsUpHeavyAndDownHorizontalLight rune = '\u2540'
79 BoxDrawingsDownHeavyAndUpHorizontalLight rune = '\u2541'
80 BoxDrawingsVerticalHeavyAndHorizontalLight rune = '\u2542'
81 BoxDrawingsLeftUpHeavyAndRightDownLight rune = '\u2543'
82 BoxDrawingsRightUpHeavyAndLeftDownLight rune = '\u2544'
83 BoxDrawingsLeftDownHeavyAndRightUpLight rune = '\u2545'
84 BoxDrawingsRightDownHeavyAndLeftUpLight rune = '\u2546'
85 BoxDrawingsDownLightAndUpHorizontalHeavy rune = '\u2547'
86 BoxDrawingsUpLightAndDownHorizontalHeavy rune = '\u2548'
87 BoxDrawingsRightLightAndLeftVerticalHeavy rune = '\u2549'
88 BoxDrawingsLeftLightAndRightVerticalHeavy rune = '\u254a'
89 BoxDrawingsHeavyVerticalAndHorizontal rune = '\u254b'
90 BoxDrawingsLightDoubleDashHorizontal rune = '\u254c'
91 BoxDrawingsHeavyDoubleDashHorizontal rune = '\u254d'
92 BoxDrawingsLightDoubleDashVertical rune = '\u254e'
93 BoxDrawingsHeavyDoubleDashVertical rune = '\u254f'
94 BoxDrawingsDoubleHorizontal rune = '\u2550'
95 BoxDrawingsDoubleVertical rune = '\u2551'
96 BoxDrawingsDownSingleAndRightDouble rune = '\u2552'
97 BoxDrawingsDownDoubleAndRightSingle rune = '\u2553'
98 BoxDrawingsDoubleDownAndRight rune = '\u2554'
99 BoxDrawingsDownSingleAndLeftDouble rune = '\u2555'
100 BoxDrawingsDownDoubleAndLeftSingle rune = '\u2556'
101 BoxDrawingsDoubleDownAndLeft rune = '\u2557'
102 BoxDrawingsUpSingleAndRightDouble rune = '\u2558'
103 BoxDrawingsUpDoubleAndRightSingle rune = '\u2559'
104 BoxDrawingsDoubleUpAndRight rune = '\u255a'
105 BoxDrawingsUpSingleAndLeftDouble rune = '\u255b'
106 BoxDrawingsUpDobuleAndLeftSingle rune = '\u255c'
107 BoxDrawingsDoubleUpAndLeft rune = '\u255d'
108 BoxDrawingsVerticalSingleAndRightDouble rune = '\u255e'
109 BoxDrawingsVerticalDoubleAndRightSingle rune = '\u255f'
110 BoxDrawingsDoubleVerticalAndRight rune = '\u2560'
111 BoxDrawingsVerticalSingleAndLeftDouble rune = '\u2561'
112 BoxDrawingsVerticalDoubleAndLeftSingle rune = '\u2562'
113 BoxDrawingsDoubleVerticalAndLeft rune = '\u2563'
114 BoxDrawingsDownSingleAndHorizontalDouble rune = '\u2564'
115 BoxDrawingsDownDoubleAndHorizontalSingle rune = '\u2565'
116 BoxDrawingsDoubleDownAndHorizontal rune = '\u2566'
117 BoxDrawingsUpSingleAndHorizontalDouble rune = '\u2567'
118 BoxDrawingsUpDoubleAndHorizontalSingle rune = '\u2568'
119 BoxDrawingsDoubleUpAndHorizontal rune = '\u2569'
120 BoxDrawingsVerticalSingleAndHorizontalDouble rune = '\u256a'
121 BoxDrawingsVerticalDoubleAndHorizontalSingle rune = '\u256b'
122 BoxDrawingsDoubleVerticalAndHorizontal rune = '\u256c'
123 BoxDrawingsLightArcDownAndRight rune = '\u256d'
124 BoxDrawingsLightArcDownAndLeft rune = '\u256e'
125 BoxDrawingsLightArcUpAndLeft rune = '\u256f'
126 BoxDrawingsLightArcUpAndRight rune = '\u2570'
127 BoxDrawingsLightDiagonalUpperRightToLowerLeft rune = '\u2571'
128 BoxDrawingsLightDiagonalUpperLeftToLowerRight rune = '\u2572'
129 BoxDrawingsLightDiagonalCross rune = '\u2573'
130 BoxDrawingsLightLeft rune = '\u2574'
131 BoxDrawingsLightUp rune = '\u2575'
132 BoxDrawingsLightRight rune = '\u2576'
133 BoxDrawingsLightDown rune = '\u2577'
134 BoxDrawingsHeavyLeft rune = '\u2578'
135 BoxDrawingsHeavyUp rune = '\u2579'
136 BoxDrawingsHeavyRight rune = '\u257a'
137 BoxDrawingsHeavyDown rune = '\u257b'
138 BoxDrawingsLightLeftAndHeavyRight rune = '\u257c'
139 BoxDrawingsLightUpAndHeavyDown rune = '\u257d'
140 BoxDrawingsHeavyLeftAndLightRight rune = '\u257e'
141 BoxDrawingsHeavyUpAndLightDown rune = '\u257f'
142
143
144 BlockUpperHalfBlock rune = '\u2580'
145 BlockLowerOneEighthBlock rune = '\u2581'
146 BlockLowerOneQuarterBlock rune = '\u2582'
147 BlockLowerThreeEighthsBlock rune = '\u2583'
148 BlockLowerHalfBlock rune = '\u2584'
149 BlockLowerFiveEighthsBlock rune = '\u2585'
150 BlockLowerThreeQuartersBlock rune = '\u2586'
151 BlockLowerSevenEighthsBlock rune = '\u2587'
152 BlockFullBlock rune = '\u2588'
153 BlockLeftSevenEighthsBlock rune = '\u2589'
154 BlockLeftThreeQuartersBlock rune = '\u258A'
155 BlockLeftFiveEighthsBlock rune = '\u258B'
156 BlockLeftHalfBlock rune = '\u258C'
157 BlockLeftThreeEighthsBlock rune = '\u258D'
158 BlockLeftOneQuarterBlock rune = '\u258E'
159 BlockLeftOneEighthBlock rune = '\u258F'
160 BlockRightHalfBlock rune = '\u2590'
161 BlockLightShade rune = '\u2591'
162 BlockMediumShade rune = '\u2592'
163 BlockDarkShade rune = '\u2593'
164 BlockUpperOneEighthBlock rune = '\u2594'
165 BlockRightOneEighthBlock rune = '\u2595'
166 BlockQuadrantLowerLeft rune = '\u2596'
167 BlockQuadrantLowerRight rune = '\u2597'
168 BlockQuadrantUpperLeft rune = '\u2598'
169 BlockQuadrantUpperLeftAndLowerLeftAndLowerRight rune = '\u2599'
170 BlockQuadrantUpperLeftAndLowerRight rune = '\u259A'
171 BlockQuadrantUpperLeftAndUpperRightAndLowerLeft rune = '\u259B'
172 BlockQuadrantUpperLeftAndUpperRightAndLowerRight rune = '\u259C'
173 BlockQuadrantUpperRight rune = '\u259D'
174 BlockQuadrantUpperRightAndLowerLeft rune = '\u259E'
175 BlockQuadrantUpperRightAndLowerLeftAndLowerRight rune = '\u259F'
176 )
177
178
179
180
181
182
183
184 var SemigraphicJoints = map[string]rune{
185
186 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVertical}): BoxDrawingsLightVerticalAndHorizontal,
187
188 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndRight}): BoxDrawingsLightDownAndHorizontal,
189
190 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightDownAndHorizontal,
191
192 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndRight}): BoxDrawingsLightUpAndHorizontal,
193
194 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightUpAndHorizontal,
195
196 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,
197
198 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,
199
200 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,
201
202 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,
203
204 string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
205
206
207 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndRight}): BoxDrawingsLightVerticalAndRight,
208
209 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightVerticalAndLeft,
210
211 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndRight,
212
213 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndLeft,
214
215 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,
216
217 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,
218
219 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
220
221 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
222
223 string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
224
225
226 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightDownAndHorizontal,
227
228 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndRight,
229
230 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndHorizontal,
231
232 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,
233
234 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,
235
236 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,
237
238 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
239
240 string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
241
242
243 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndHorizontal,
244
245 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndLeft,
246
247 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,
248
249 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,
250
251 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,
252
253 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
254
255 string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
256
257
258 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightUpAndHorizontal,
259
260 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,
261
262 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,
263
264 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
265
266 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,
267
268 string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
269
270
271 string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,
272
273 string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,
274
275 string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
276
277 string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,
278
279 string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
280
281
282 string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,
283
284 string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
285
286 string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
287
288 string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
289
290
291 string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
292
293 string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
294
295 string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
296
297
298 string([]rune{BoxDrawingsLightDownAndHorizontal, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
299
300 string([]rune{BoxDrawingsLightDownAndHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
301
302
303 string([]rune{BoxDrawingsLightUpAndHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
304 }
305
306
307
308
309 func PrintJoinedSemigraphics(screen tcell.Screen, x, y int, ch rune, style tcell.Style) {
310 previous, _, _, _ := screen.GetContent(x, y)
311
312
313 var result rune
314 if ch == previous {
315 result = ch
316 } else {
317 if ch < previous {
318 previous, ch = ch, previous
319 }
320 result = SemigraphicJoints[string([]rune{previous, ch})]
321 }
322 if result == 0 {
323 result = ch
324 }
325
326
327 screen.SetContent(x, y, result, nil, style)
328 }
329
View as plain text