Completed
Push — master ( 6fdad0...29d188 )
by Roman
04:14
created

AbstractFormatter::line()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 9
nc 2
nop 1
1
<?php
2
3
namespace ToolkitLab\ASCII\Formatter;
4
5
use ToolkitLab\ASCII\FormatterInterface;
6
use ToolkitLab\ASCII\Table;
7
8
abstract class AbstractFormatter implements FormatterInterface {
9
10
    /**
11
     * @var Table
12
     */
13
    protected $table;
14
    protected $metadata = [];
15
16
    public function format(Table $table, $firstRowAsHeader = true) {
17
        $this->table = $table;
18
        $str = "";
19
20
        $firsRow = 0;
21
        if ($firstRowAsHeader) {
22
            $str .= $this->header();
23
            $firsRow = 1;
24
        } else if ($this->metadata['useHeader']) {
25
            $delimiter = $this->metadata["HBL"];
26
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
27
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
28
                $str .= $delimiter;
29
                $str .= str_repeat($this->metadata["HPAD"], $columnLenght);
30
                $delimiter = $this->metadata["HBM"];
31
            }
32
            $str .= $this->metadata["HBR"] . PHP_EOL;
33
        }
34
35
        for ($i = $firsRow; $i < $this->table->getDimensionY(); $i++) {
36
            $str .= $this->line($i);
37
        }
38
39
        if ($this->metadata['useFooter']) {
40
            $delimiter = $this->metadata["FBL"];
41
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
42
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
43
                $str .= $delimiter;
44
                $str .= str_repeat($this->metadata["FPAD"], $columnLenght);
45
                $delimiter = $this->metadata["FBM"];
46
            }
47
            $str .= $this->metadata["FBR"] . PHP_EOL;
48
        }
49
50
        return $str;
51
    }
52
53
    private function line($rowIndex) {
54
        $retStr = "";
55
        $delimiter = $this->metadata["BL"];
56
        for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
57
            $retStr .= $delimiter;
58
            $cell = $this->table->getCell($i, $rowIndex);
59
            $retStr .= " " . $cell . str_repeat(" ", $this->table->getColumnsMaxLenght($i) - strlen($cell)) . " ";
60
            $delimiter = $this->metadata["BM"];
61
        }
62
        $retStr .= $this->metadata["BR"] . PHP_EOL;
63
        return $retStr;
64
    }
65
66
    protected function header() {
67
        $retStr = "";
68
69
        // First row
70
        if ($this->metadata['useHeader']) {
71
            $delimiter = $this->metadata["HBL"];
72
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
73
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
74
                $retStr .= $delimiter;
75
                $retStr .= str_repeat($this->metadata["HPAD"], $columnLenght);
76
                $delimiter = $this->metadata["HBM"];
77
            }
78
            $retStr .= $this->metadata["HBR"] . PHP_EOL;
79
        }
80
81
        // Second row
82
        $delimiter = $this->metadata["BL"];
83
        for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
84
            $retStr .= $delimiter;
85
            $retStr .= " " . $this->table->getCell($i, 0) . " ";
86
        }
87
        $retStr .= $this->metadata["BR"] . PHP_EOL;
88
89
        // Third row
90
        $delimiter = $this->metadata["H2BL"];
91
        for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
92
            $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
93
            $retStr .= $delimiter;
94
            $retStr .= str_repeat($this->metadata["BPAD"], $columnLenght);
95
            $delimiter = $this->metadata["H2BM"];
96
        }
97
        $retStr .= $this->metadata["H2BR"] . PHP_EOL;
98
99
100
        return $retStr;
101
    }
102
103
}
104