Completed
Push — master ( 069124...27e495 )
by Edson
02:00
created

Loop   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 47.62%

Importance

Changes 0
Metric Value
eloc 35
dl 0
loc 76
ccs 20
cts 42
cp 0.4762
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A repeat2() 0 13 1
A repeat1() 0 15 1
A for1() 0 15 1
A for2() 0 13 1
1
<?php
2
3
namespace Sketch\Tpl\Tag;
4
5
class Loop extends Tag
6
{
7 2
    public function __construct()
8
    {
9 2
        $this->for1();
10 2
        $this->for2();
11
12 2
        $this->repeat1();
13 2
        $this->repeat2();
14 2
    }
15
16 2
    private function for1()
17
    {
18 2
        $search = "/{(\s?)+for(\s?)+([\w]+)(\s?)+:(\s?)+([\w\.]+)(\s?)+}(.*?){(\s?)+\/for(\s?)+}/is";
19
20
        Tag::match($search, function($right, $left, $content = "") {
21
            
22
            $left = str_replace('.', '->', $left);
23
24
            $res  = "<?php foreach ($$left as $$right) { ?>";
25
            $res .= $content;
26
            $res .= "<?php } ?>";
27
28
            Tag::replace($res);
29
30
            $this->for1();
31 2
        });
32 2
    }
33
34 2
    private function for2()
35
    {
36 2
        $search = "/{(\s?)+for(\s?)+([\$\w]+)(\s?)+=>(\s?)+([\$\w]+)(\s?)+:(\s?)+([\$\w]+)(\s?)+}(.*?){(\s?)+\/for(\s?)+}/is";
37
38
        Tag::match($search, function($key, $value, $left, $content = "") {
39
            
40
            $res  = "<?php foreach ($left as $key => $value) { ?>";
41
            $res .= $content;
42
            $res .= "<?php } ?>";
43
44
            Tag::replace($res);
45
46
            $this->for2();
47 2
        });
48 2
    }
49
50 2
    private function repeat1(): void
51
    {
52 2
        $search = "/{(\s?)+repeat (\s?)+([\d]+)(\s?)+}(.*?){(\s?)+\/repeat(\s?)+}/is";
53
54
        Tag::match($search, function($times, $content) {
55
56
            $var = "v".md5(microtime());
57
58
            $replace  = "<?php for (\$$var = 0; \$$var < $times; \$$var++) { ?>";
59
            $replace .= $content;
60
            $replace .= "<?php } ?>";
61
            
62
            Tag::replace($replace);
63
64
            $this->repeat1();
65 2
        });
66 2
    }
67
68 2
    private function repeat2(): void
69
    {
70 2
        $search = "/{(\s?)+repeat (\s?)+([\d]+)(\s?)+:(\s?)+([\w]+)(\s?)+}(.*?){(\s?)+\/repeat(\s?)+}/is";
71
72
        Tag::match($search, function($times, $var, $content) {
73
            
74
            $replace  = "<?php for (\$$var = 0; \$$var < $times; \$$var++) { ?>";
75
            $replace .= $content;
76
            $replace .= "<?php } ?>";
77
            
78
            Tag::replace($replace);
79
80
            $this->repeat2();
81 2
        });
82 2
    }
83
}
84