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
|
|
|
|