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