EMTTretNobr   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

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