1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Symbols for frames take from article https://en.wikipedia.org/wiki/Box-drawing_character [Unix, CP/M, BBS] |
5
|
|
|
*/ |
6
|
|
|
|
7
|
|
|
namespace VPA\Console; |
8
|
|
|
|
9
|
|
|
use VPA\DI\Injectable; |
10
|
|
|
|
11
|
|
|
#[Injectable] |
12
|
|
|
class FrameConsoleConfig implements FrameConfigInterface |
13
|
|
|
{ |
14
|
|
|
private FrameSymbol $cornerLeftTop; |
15
|
|
|
private FrameSymbol $cornerRightTop; |
16
|
|
|
private FrameSymbol $cornerMiddleTop; |
17
|
|
|
private FrameSymbol $cornerLeftBottom; |
18
|
|
|
private FrameSymbol $cornerRightBottom; |
19
|
|
|
private FrameSymbol $cornerMiddleBottom; |
20
|
|
|
private FrameSymbol $lineVertical; |
21
|
|
|
private FrameSymbol $lineHorizontal; |
22
|
|
|
private FrameSymbol $cornerLeftMiddle; |
23
|
|
|
private FrameSymbol $cornerRightMiddle; |
24
|
|
|
private FrameSymbol $cornerMiddleMiddle; |
25
|
|
|
private Symbol $space; |
26
|
|
|
|
27
|
55 |
|
public function __construct(private Shell $shell) |
28
|
|
|
{ |
29
|
55 |
|
$this->space = new Symbol(" "); |
30
|
55 |
|
$this->lineVertical = new FrameSymbol("\x78", "|"); |
31
|
55 |
|
$this->lineHorizontal = new FrameSymbol("\x71", "-"); |
32
|
55 |
|
$this->cornerLeftMiddle = new FrameSymbol("\x74", "a"); |
33
|
55 |
|
$this->cornerRightMiddle = new FrameSymbol("\x75", "d"); |
34
|
55 |
|
$this->cornerMiddleMiddle = new FrameSymbol("\x6e", "s"); |
35
|
|
|
|
36
|
55 |
|
$this->cornerLeftTop = new FrameSymbol("\x6c", "q"); |
37
|
55 |
|
$this->cornerRightTop = new FrameSymbol("\x6b", "e"); |
38
|
55 |
|
$this->cornerMiddleTop = new FrameSymbol("\x77", "w"); |
39
|
55 |
|
$this->cornerLeftBottom = new FrameSymbol("\x6d", "z"); |
40
|
55 |
|
$this->cornerRightBottom = new FrameSymbol("\x6a", "c"); |
41
|
55 |
|
$this->cornerMiddleBottom = new FrameSymbol("\x76", "x"); |
42
|
|
|
} |
43
|
|
|
|
44
|
25 |
|
public function __get(string $name): object |
45
|
|
|
{ |
46
|
25 |
|
return $this->$name ?? $this->space; |
47
|
|
|
} |
48
|
|
|
} |
49
|
|
|
|