Nobr   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 108
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 1
dl 0
loc 108
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A nowrap_ip_address() 0 19 4
1
<?php
2
namespace EMT\Tret;
3
4
class Nobr extends AbstractTret
5
{
6
    public $title = "Неразрывные конструкции";
7
8
    public $classes = array(
9
        'nowrap' => 'word-spacing:nowrap;',
10
    );
11
12
    public $rules = array(
13
14
        'super_nbsp' => array(
15
            'description' => 'Привязка союзов и предлогов к написанным после словам',
16
            'pattern' => '/(\s|^|\&(la|bd)quo\;|\>|\(|\&mdash\;\&nbsp\;)([a-zа-яё]{1,2}\s+)([a-zа-яё]{1,2}\s+)?([a-zа-яё0-9\-]{2,}|[0-9])/ieu',
17
            'replacement' => '$m[1] . trim($m[3]) . "&nbsp;" . ($m[4] ? trim($m[4]) . "&nbsp;" : "") . $m[5]'
18
        ),
19
        'nbsp_in_the_end' => array(
20
            'description' => 'Привязка союзов и предлогов к предыдущим словам в случае конца предложения',
21
            'pattern' => '/([a-zа-яё0-9\-]{3,}) ([a-zа-яё]{1,2})\.( [A-ZА-ЯЁ]|$)/u',
22
            'replacement' => '\1&nbsp;\2.\3'
23
        ),
24
        'phone_builder' => array(
25
            'description' => 'Объединение в неразрывные конструкции номеров телефонов',
26
            'pattern' =>
27
                array(
28
                    '/([^\d\+]|^)([\+]?[0-9]{1,3})( |\&nbsp\;|\&thinsp\;)([0-9]{3,4}|\([0-9]{3,4}\))( |\&nbsp\;|\&thinsp\;)([0-9]{2,3})(-|\&minus\;)([0-9]{2})(-|\&minus\;)([0-9]{2})([^\d]|$)/e',
29
                    '/([^\d\+]|^)([\+]?[0-9]{1,3})( |\&nbsp\;|\&thinsp\;)([0-9]{3,4}|[0-9]{3,4})( |\&nbsp\;|\&thinsp\;)([0-9]{2,3})(-|\&minus\;)([0-9]{2})(-|\&minus\;)([0-9]{2})([^\d]|$)/e',
30
                ),
31
            'replacement' =>
32
                array(
33
                    '$m[1]  .(($m[1] == ">" || $m[11] == "<") ? $m[2]." ".$m[4]." ".$m[6]."-".$m[8]."-".$m[10] :$this->tag($m[2]." ".$m[4]." ".$m[6]."-".$m[8]."-".$m[10], "span", array("class"=>"nowrap"))  ).$m[11]',
34
                    '$m[1]  .(($m[1] == ">" || $m[11] == "<") ? $m[2]." ".$m[4]." ".$m[6]."-".$m[8]."-".$m[10] :$this->tag($m[2]." ".$m[4]." ".$m[6]."-".$m[8]."-".$m[10], "span", array("class"=>"nowrap"))  ).$m[11]',
35
                ),
36
        ),
37
        'ip_address' => array(
38
            'description' => 'Объединение IP-адресов',
39
            'pattern' => '/(\s|\&nbsp\;|^)(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3})/ie',
40
            'replacement' => '$m[1] . $this->nowrap_ip_address($m[2])'
41
        ),
42
        'spaces_nobr_in_surname_abbr' => array(
43
            'description' => 'Привязка инициалов к фамилиям',
44
            'pattern' =>
45
                array(
46
                    '/(\s|^|\.|\,|\;|\:|\?|\!|\&nbsp\;)([A-ZА-ЯЁ])\.?(\s|\&nbsp\;)?([A-ZА-ЯЁ])(\.(\s|\&nbsp\;)?|(\s|\&nbsp\;))([A-ZА-ЯЁ][a-zа-яё]+)(\s|$|\.|\,|\;|\:|\?|\!|\&nbsp\;)/ue',
47
                    '/(\s|^|\.|\,|\;|\:|\?|\!|\&nbsp\;)([A-ZА-ЯЁ][a-zа-яё]+)(\s|\&nbsp\;)([A-ZА-ЯЁ])\.?(\s|\&nbsp\;)?([A-ZА-ЯЁ])\.?(\s|$|\.|\,|\;|\:|\?|\!|\&nbsp\;)/ue',
48
                ),
49
            'replacement' =>
50
                array(
51
                    '$m[1].$this->tag($m[2].". ".$m[4].". ".$m[8], "span",  array("class" => "nowrap")).$m[9]',
52
                    '$m[1].$this->tag($m[2]." ".$m[4].". ".$m[6].".", "span",  array("class" => "nowrap")).$m[7]',
53
                ),
54
        ),
55
        'nbsp_before_particle' => array(
56
            'description' => 'Неразрывный пробел перед частицей',
57
            'pattern' => '/(\040|\t)+(ли|бы|б|же|ж)(\&nbsp\;|\.|\,|\:|\;|\&hellip\;|\?|\s)/iue',
58
            'replacement' => '"&nbsp;".$m[2] . ($m[3] == "&nbsp;" ? " " : $m[3])'
59
        ),
60
        'nbsp_v_kak_to' => array(
61
            'description' => 'Неразрывный пробел в как то',
62
            'pattern' => '/как то\:/ui',
63
            'replacement' => 'как&nbsp;то:'
64
        ),
65
        'nbsp_celcius' => array(
66
            'description' => 'Привязка градусов к числу',
67
            'pattern' => '/(\s|^|\>|\&nbsp\;)(\d+)( |\&nbsp\;)?(°|\&deg\;)(C|С)(\s|\.|\!|\?|\,|$|\&nbsp\;|\;)/iu',
68
            'replacement' => '\1\2&nbsp;\4C\6'
69
        ),
70
        'hyphen_nowrap_in_small_words' => array(
71
            'description' => 'Обрамление пятисимвольных слов разделенных дефисом в неразрывные блоки',
72
            'disabled' => true,
73
            'cycled' => true,
74
            'pattern' => '/(\&nbsp\;|\s|\>|^)([a-zа-яё]{1}\-[a-zа-яё]{4}|[a-zа-яё]{2}\-[a-zа-яё]{3}|[a-zа-яё]{3}\-[a-zа-яё]{2}|[a-zа-яё]{4}\-[a-zа-яё]{1}|когда\-то|кое\-как|кой\-кого|вс[её]\-таки|[а-яё]+\-(кась|ка|де))(\s|\.|\,|\!|\?|\&nbsp\;|\&hellip\;|$)/uie',
75
            'replacement' => '$m[1] . $this->tag($m[2], "span", array("class"=>"nowrap")) . $m[4]',
76
        ),
77
        'hyphen_nowrap' => array(
78
            'description' => 'Отмена переноса слова с дефисом',
79
            'disabled' => true,
80
            'cycled' => true,
81
            'pattern' => '/(\&nbsp\;|\s|\>|^)([a-zа-яё]+)((\-([a-zа-яё]+)){1,2})(\s|\.|\,|\!|\?|\&nbsp\;|\&hellip\;|$)/uie',
82
            'replacement' => '$m[1] . $this->tag($m[2].$m[3], "span", array("class"=>"nowrap")) . $m[6]'
83
        ),
84
    );
85
86
    /**
87
     * Объединение IP-адрессов в неразрывные конструкции (IPv4 only)
88
     *
89
     * @param  unknown_type $triads
90
     * @return unknown
91
     */
92
    protected function nowrap_ip_address($triads)
93
    {
94
        $triad = explode('.', $triads);
95
        $addTag = true;
96
97
        foreach ($triad as $value) {
98
            $value = (int)$value;
99
            if ($value > 255) {
100
                $addTag = false;
101
                break;
102
            }
103
        }
104
105
        if (true === $addTag) {
106
            $triads = $this->tag($triads, 'span', array('class' => "nowrap"));
107
        }
108
109
        return $triads;
110
    }
111
}
112