|
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\;\ \;)([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]) . " " . ($m[4] ? trim($m[4]) . " " : "") . $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 \2.\3' |
|
23
|
|
|
), |
|
24
|
|
|
'phone_builder' => array( |
|
25
|
|
|
'description' => 'Объединение в неразрывные конструкции номеров телефонов', |
|
26
|
|
|
'pattern' => |
|
27
|
|
|
array( |
|
28
|
|
|
'/([^\d\+]|^)([\+]?[0-9]{1,3})( |\ \;|\&thinsp\;)([0-9]{3,4}|\([0-9]{3,4}\))( |\ \;|\&thinsp\;)([0-9]{2,3})(-|\&minus\;)([0-9]{2})(-|\&minus\;)([0-9]{2})([^\d]|$)/e', |
|
29
|
|
|
'/([^\d\+]|^)([\+]?[0-9]{1,3})( |\ \;|\&thinsp\;)([0-9]{3,4}|[0-9]{3,4})( |\ \;|\&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|\ \;|^)(\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|^|\.|\,|\;|\:|\?|\!|\ \;)([A-ZА-ЯЁ])\.?(\s|\ \;)?([A-ZА-ЯЁ])(\.(\s|\ \;)?|(\s|\ \;))([A-ZА-ЯЁ][a-zа-яё]+)(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/ue', |
|
47
|
|
|
'/(\s|^|\.|\,|\;|\:|\?|\!|\ \;)([A-ZА-ЯЁ][a-zа-яё]+)(\s|\ \;)([A-ZА-ЯЁ])\.?(\s|\ \;)?([A-ZА-ЯЁ])\.?(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/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)+(ли|бы|б|же|ж)(\ \;|\.|\,|\:|\;|\&hellip\;|\?|\s)/iue', |
|
58
|
|
|
'replacement' => '" ".$m[2] . ($m[3] == " " ? " " : $m[3])' |
|
59
|
|
|
), |
|
60
|
|
|
'nbsp_v_kak_to' => array( |
|
61
|
|
|
'description' => 'Неразрывный пробел в как то', |
|
62
|
|
|
'pattern' => '/как то\:/ui', |
|
63
|
|
|
'replacement' => 'как то:' |
|
64
|
|
|
), |
|
65
|
|
|
'nbsp_celcius' => array( |
|
66
|
|
|
'description' => 'Привязка градусов к числу', |
|
67
|
|
|
'pattern' => '/(\s|^|\>|\ \;)(\d+)( |\ \;)?(°|\°\;)(C|С)(\s|\.|\!|\?|\,|$|\ \;|\;)/iu', |
|
68
|
|
|
'replacement' => '\1\2 \4C\6' |
|
69
|
|
|
), |
|
70
|
|
|
'hyphen_nowrap_in_small_words' => array( |
|
71
|
|
|
'description' => 'Обрамление пятисимвольных слов разделенных дефисом в неразрывные блоки', |
|
72
|
|
|
'disabled' => true, |
|
73
|
|
|
'cycled' => true, |
|
74
|
|
|
'pattern' => '/(\ \;|\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|\.|\,|\!|\?|\ \;|\&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' => '/(\ \;|\s|\>|^)([a-zа-яё]+)((\-([a-zа-яё]+)){1,2})(\s|\.|\,|\!|\?|\ \;|\&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
|
|
|
|