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\;\ \;)([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]) . " " . ($m[4] ? trim($m[4]) . " " : "") . $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 \2.\3'
|
35
|
|
|
),
|
36
|
|
|
'phone_builder' => array(
|
37
|
|
|
'description' => 'Объединение в неразрывные конструкции номеров телефонов',
|
38
|
|
|
'pattern' =>
|
39
|
|
|
array(
|
40
|
|
|
'/([^\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',
|
41
|
|
|
'/([^\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',
|
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|\ \;|^)(\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|^|\.|\,|\;|\:|\?|\!|\ \;)([А-ЯЁ])\.?(\s|\ \;)?([А-ЯЁ])(\.(\s|\ \;)?|(\s|\ \;))([А-ЯЁ][а-яё]+)(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/ue',
|
59
|
|
|
'/(\s|^|\.|\,|\;|\:|\?|\!|\ \;)([А-ЯЁ][а-яё]+)(\s|\ \;)([А-ЯЁ])\.?(\s|\ \;)?([А-ЯЁ])\.?(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/ue',
|
60
|
|
|
//'/(\s|^|\.|\,|\;|\:|\?|\!|\ \;)([A-Z])\.?(\s|\ \;)?([A-Z])(\.(\s|\ \;)?|(\s|\ \;))([A-Z][a-z]+)(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/ue',
|
61
|
|
|
//'/(\s|^|\.|\,|\;|\:|\?|\!|\ \;)([A-Z][a-z]+)(\s|\ \;)([A-Z])\.?(\s|\ \;)?([A-Z])\.?(\s|$|\.|\,|\;|\:|\?|\!|\ \;)/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)+(ли|бы|б|же|ж)(\ \;|\.|\,|\:|\;|\&hellip\;|\?|\s)/iue',
|
74
|
|
|
'replacement' => '" ".$m[2] . ($m[3] == " " ? " " : $m[3])'
|
75
|
|
|
),
|
76
|
|
|
'nbsp_v_kak_to' => array(
|
77
|
|
|
'description' => 'Неразрывный пробел в как то',
|
78
|
|
|
'pattern' => '/как то\:/ui',
|
79
|
|
|
'replacement' => 'как то:'
|
80
|
|
|
),
|
81
|
|
|
'nbsp_celcius' => array(
|
82
|
|
|
'description' => 'Привязка градусов к числу',
|
83
|
|
|
'pattern' => '/(\s|^|\>|\ \;)(\d+)( |\ \;)?(°|\°\;)(C|С)(\s|\.|\!|\?|\,|$|\ \;|\;)/iu',
|
84
|
|
|
'replacement' => '\1\2 \4C\6'
|
85
|
|
|
),
|
86
|
|
|
'hyphen_nowrap_in_small_words' => array(
|
87
|
|
|
'description' => 'Обрамление пятисимвольных слов разделенных дефисом в неразрывные блоки',
|
88
|
|
|
'disabled' => true,
|
89
|
|
|
'cycled' => true,
|
90
|
|
|
'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',
|
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' => '/(\ \;|\s|\>|^)([a-zа-яё]+)((\-([a-zа-яё]+)){1,2})(\s|\.|\,|\!|\?|\ \;|\&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
|
|
|
} |