├── FCKEditor
├── fckplugin.js
├── readme.md
├── typograf2.gif
└── typograf2.php
├── LICENSE.md
├── cakephp
├── app
│ ├── controllers
│ │ └── components
│ │ │ └── typographus.php
│ └── vendors
│ │ └── typographus
│ │ └── readme.md
└── readme.md
├── drupal
└── typographus
│ ├── readme.md
│ ├── typographus.info
│ └── typographus.module
├── history.md
├── invision_power_board
└── readme.md
├── readme.md
├── smarty
├── modifier.typograph.php
├── outputfilter.typograph.php
└── readme.md
├── tests
├── _test.dr_death.dat
├── _test.fazeful.dat
├── _test.isaykin.dat
├── _test.typo-basic.dat
├── _test.typo-dizzyman.dat
├── _test.typo-html.dat
├── _test.typo-latest.dat
├── _test.typo-not_used.dat
├── _test.typo-phones.dat
├── _test.typo-quotes.dat
├── _test.typo-symbols.dat
├── _test.typo-unix.dat
└── index.php
├── typographus.php
└── wordpress
└── TypographMachine
├── readme.md
└── typograph_machine.php
/FCKEditor/fckplugin.js:
--------------------------------------------------------------------------------
1 | //fckplugin.js
2 | /*
3 | * Типограф. Использует класс типографа с сайта http://rmcreative.ru/article/programming/typograph.
4 | * Папку с плагином положить в FCK и подключить в конфиге
5 | *в fckeditor.config.js добавить:
6 | * FCKConfig.Plugins.Add( 'typograf2' ) ;
7 | *
8 | * и в нужнный тулбар добавить (например "DrupalFull"):
9 | * ['typograf2'],
10 | *
11 | * @author: Igor V.Hudorozhrov , Click1.ru (http://Click1.ru),typo@click1.ru
12 | */
13 | var InsertVariableCommand=function(){
14 | //create our own command, we dont want to use the FCKDialogCommand because it uses the default fck layout and not our own
15 | };
16 | InsertVariableCommand.GetState=function() {
17 | return FCK_TRISTATE_OFF; //we dont want the button to be toggled
18 | }
19 | InsertVariableCommand.Execute=function() {
20 | var _name = document.getElementById("nameDiv");
21 | var _text = base64_encode(FCK.GetHTML());
22 | var _path = base64_encode(FCKConfig.PluginsPath + 'typograf2');
23 |
24 | var params = {name:_name,title:"user preview",text:_text,plpath:_path};
25 |
26 | var previewPopup = Form2Popup(params,FCKConfig.PluginsPath + 'typograf2/typograf2.php', 'preview', 'top=100,left=100,scrollbars=1');
27 | }
28 | FCKCommands.RegisterCommand('typograf2', InsertVariableCommand ); //otherwise our command will not be found
29 | var oInsertVariables = new FCKToolbarButton('typograf2', 'TYPORAF_offline');
30 | oInsertVariables.IconPath = FCKConfig.PluginsPath + 'typograf2/typograf2.gif'; //specifies the image used in the toolbar
31 | FCKToolbarItems.RegisterItem( 'typograf2', oInsertVariables );
32 |
33 |
34 | function utf8_encode ( str_data ) { // Encodes an ISO-8859-1 string to UTF-8
35 | //
36 | // + original by: Webtoolkit.info (http://www.webtoolkit.info/)
37 |
38 | str_data = str_data.replace(/\r\n/g,"\n");
39 | var utftext = "";
40 |
41 | for (var n = 0; n < str_data.length; n++) {
42 | var c = str_data.charCodeAt(n);
43 | if (c < 128) {
44 | utftext += String.fromCharCode(c);
45 | } else if((c > 127) && (c < 2048)) {
46 | utftext += String.fromCharCode((c >> 6) | 192);
47 | utftext += String.fromCharCode((c & 63) | 128);
48 | } else {
49 | utftext += String.fromCharCode((c >> 12) | 224);
50 | utftext += String.fromCharCode(((c >> 6) & 63) | 128);
51 | utftext += String.fromCharCode((c & 63) | 128);
52 | }
53 | }
54 |
55 | return utftext;
56 | }
57 |
58 |
59 |
60 | function base64_encode( data ) {
61 |
62 | var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
63 | var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, enc="", tmp_arr = [];
64 | data = utf8_encode(data);
65 |
66 | do { // pack three octets into four hexets
67 | o1 = data.charCodeAt(i++);
68 | o2 = data.charCodeAt(i++);
69 | o3 = data.charCodeAt(i++);
70 |
71 | bits = o1<<16 | o2<<8 | o3;
72 |
73 | h1 = bits>>18 & 0x3f;
74 | h2 = bits>>12 & 0x3f;
75 | h3 = bits>>6 & 0x3f;
76 | h4 = bits & 0x3f;
77 |
78 | // use hexets to index into b64, and append result to encoded string
79 | tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
80 | } while (i < data.length);
81 |
82 | enc = tmp_arr.join('');
83 |
84 | switch( data.length % 3 ){
85 | case 1:
86 | enc = enc.slice(0, -2) + '==';
87 | break;
88 | case 2:
89 | enc = enc.slice(0, -1) + '=';
90 | break;
91 | }
92 |
93 | return enc;
94 | }
95 |
96 | function Form2Popup(params, actionUrl, name, popupConfig, get) {
97 | var method = (get == undefined || !get) ? 'POST' : 'GET';
98 |
99 | if (name == undefined || name == '') {
100 | name = 'tmpPopup';
101 | }
102 | var form = document.createElement('
');
103 | var element = null;
104 | for (var propName in params) {
105 | element = document.createElement(' ');
106 | form.appendChild(element);
107 | }
108 | document.body.appendChild(form);
109 |
110 | var win = window.open('about:blank', name, popupConfig);
111 |
112 | win.focus();
113 | form.submit();
114 | form.removeNode(true);
115 | return win;
116 | }
117 |
--------------------------------------------------------------------------------
/FCKEditor/readme.md:
--------------------------------------------------------------------------------
1 | Плагин для FCKEditor
2 | --------------------
3 | Автор: Igor V.Hudorozhrov , Click1.ru (http://Click1.ru),typo@click1.ru
4 |
5 | Положить в директорию typographus.php.
6 |
7 | Оттестирован на FCKeditor 2.6.3. Пока работает только в IE.
--------------------------------------------------------------------------------
/FCKEditor/typograf2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/FCKEditor/typograf2.gif
--------------------------------------------------------------------------------
/FCKEditor/typograf2.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
90 |
91 |
92 | process($word);
102 | //$out_txt = iconv("WINDOWS-1251", "UTF-8",$out_txt);
103 |
104 | ?>
105 |
109 | Вставить текст
110 |
111 |
До типографирования
112 |
113 |
114 |
115 |
116 |
117 |
После типографирования
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The Typograph is free software. It is released under the terms of
2 | the following BSD License.
3 |
4 | Copyright © 2008 by Alexander Makarov (http://rmcreative.ru/)
5 | All rights reserved.
6 |
7 | Redistribution and use in source and binary forms, with or without
8 | modification, are permitted provided that the following conditions
9 | are met:
10 |
11 | * Redistributions of source code must retain the above copyright
12 | notice, this list of conditions and the following disclaimer.
13 | * Redistributions in binary form must reproduce the above copyright
14 | notice, this list of conditions and the following disclaimer in
15 | the documentation and/or other materials provided with the
16 | distribution.
17 | * The name of Alexander Makarov may not be used to endorse or
18 | promote products derived from this software without specific
19 | prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 | POSSIBILITY OF SUCH DAMAGE.
33 |
--------------------------------------------------------------------------------
/cakephp/app/controllers/components/typographus.php:
--------------------------------------------------------------------------------
1 | controller = $controller;
7 | }
8 |
9 | function process($str)
10 | {
11 | App::import('Vendor', 'typographus');
12 | $typo = new Typographus('UTF-8');
13 | return $typo->process($str);
14 | }
15 | }
--------------------------------------------------------------------------------
/cakephp/app/vendors/typographus/readme.md:
--------------------------------------------------------------------------------
1 | Сюда нужно положить typographus.php.
--------------------------------------------------------------------------------
/cakephp/readme.md:
--------------------------------------------------------------------------------
1 | Компонент для CakePHP
2 | ---------------------
3 |
4 | УСТАНОВКА
5 | — Скопировать в папку с приложением.
6 | — Положить класс типографа в vendors/typographus.
7 |
8 | ПРИМЕР
9 | typographus->process($str);
21 | $this->set('text', $str);
22 | }
23 | }
--------------------------------------------------------------------------------
/drupal/typographus/readme.md:
--------------------------------------------------------------------------------
1 | Подожить в эту же папку последнюю версию typographus.php.
2 |
3 | Обсуждение на Drupal.ru: http://drupal.ru/node/18675
4 | Автор модуля: HIgor1968
5 |
6 | !На высоконагруженных сайтах плагин в текцщем его виде использовать не рекомендуется!
--------------------------------------------------------------------------------
/drupal/typographus/typographus.info:
--------------------------------------------------------------------------------
1 | ; $Id: typographus.info,v 1.0 2007/09/25 13:03:33 rmcreative Exp $
2 |
3 | name = Typographus
4 | description = Форматирует текст для приведения его к более правильному с точки зрения типографики виду.
5 | package = "Фильтры форматов ввода"
6 | dependencies = filter
7 | project = "typographus"
8 | version = 1.0
--------------------------------------------------------------------------------
/drupal/typographus/typographus.module:
--------------------------------------------------------------------------------
1 | " .
13 | "web-изданию. Форматирует текст для приведения его к более " .
14 | "правильному с точки зрения типографики виду.");
15 | break;
16 | case "admin/help#typographus":
17 | // Подробное описание
18 | $the_output = t("«Типограф» — средство подготовки текстов к " .
19 | "web-изданию . Форматирует текст для приведения его к более " .
20 | "правильному с точки зрения типографики виду. " .
21 | "Ссылка: " .
22 | "http://rmcreative.ru/blog/post/tipograf " .
23 | "Авторы:" .
26 | "На данный момент «типограф» умеет:" .
27 | "Обрабатывать тексты в различных кодировках(требуется iconv). " .
28 | "Заменять кавычки на ёлочки. " .
29 | "Склеивать двойные кавычки. " .
30 | "Заменять знак дефиса или два знака дефиса подряд — на знак длинного тире. " .
31 | "Заменять знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире. " .
32 | "Заменять два-четыре знака точки подряд — на знак многоточия. " .
33 | "Заменять множество пробелов или табуляций на один пробел. " .
34 | "Заменять х в выражениях вроде 10×10 на знак умножения. " .
35 | "Исправлять неправильную расстановку запятых. " .
36 | "Разносить неправильно расставленные кавычки. " .
37 | "Форматировать номера телефонов. " .
38 | "Вставлять неразрывный пробел после инициалов, слеплять инициалы. " .
39 | "Делать неразрывными названия организаций и абревиатуры форм собственности. " .
40 | "Делать неразрывными имя собственное и относящееся к нему сокращение. " .
41 | "Не разделять 2007 г., ставить пробел, если его нет. " .
42 | "Слеплять скобки со словами. " .
43 | "Заменять ½, ¼, ¾, +-, ©, ® , ™ на спецсимволы. " .
44 | "Следить за тем, чтобы предлоги и союзы не находились в конце строки. " .
45 | "Следить за тем, чтобы частицы бы, ли, же и т.д. не отрывались от предшествующего слова. " .
46 | "Форматировать русские денежные суммы, расставляя пробелы в нужных местах. " .
47 | "Заменять от 2-х до 5-и точек подряд на троеточие. " .
48 | "Притягивать к слову запятые, отделять пробелом от последующего слова. " .
49 | "Притягивать к слову восклицательный знак. " .
50 | "Делать замену для +-. " .
51 | "Пока не умеет:" .
52 | "Обрабатывать вложенные кавычки. ");
53 | break;
54 | }
55 | //
56 | return $the_output;
57 | }
58 |
59 | // Реализация ловушки hook_filter_tips
60 | // Предоставляет подсказки к фильтру
61 | function typographus_filter_tips($delta = 0, $format = -1, $long)
62 | {
63 | if ($long) {
64 | // Детальная подсказка
65 | $the_output = t("Текст автоматически преобразуется к более правильному с точки зрения типографики виду:" .
66 | "Кавычки заменяются на ёлочки. " .
67 | "Двойные кавычки склеиваются. " .
68 | "Знак дефиса или два знака дефиса подряд заменяются на знак длинного тире. " .
69 | "Знак дефиса, ограниченный с обоих сторон цифрами, заменяется на знак короткого тире. " .
70 | "Два-четыре знака точки подряд заменяются на знак многоточия. " .
71 | "Множество пробелов или табуляций заменяются на один пробел. " .
72 | "Символ x в выражениях вроде 10x10 заменяется на знак умножения. " .
73 | "Исправляется неправильная расстановка запятых. " .
74 | "Разносятся неправильно расставленные кавычки. " .
75 | "Форматируются номера телефонов. " .
76 | "Вставляется неразрывный пробел после инициалов, слепляются инициалы. " .
77 | "Делаются неразрывными названия организаций и абревиатуры форм собственности. " .
78 | "Делаются неразрывными имя собственное и относящееся к нему сокращение. " .
79 | "Не разделяется 2007 г., ставится пробел, если его нет. " .
80 | "Слепляются скобки со словами. " .
81 | "Заменяются ½, ¼, ¾, +-, ©, ® , ™ на спецсимволы. " .
82 | "Контролируется, чтобы предлоги и союзы не находились в конце строки. " .
83 | "Контролируется, чтобы частицы бы, ли, же и т.д. не отрывались от предшествующего слова. " .
84 | "Форматируются русские денежные суммы, расставляются пробелы в нужных местах. " .
85 | "От 2-х до 5-и точек подряд заменяются на троеточие. " .
86 | "Притягиваются к слову запятые, отделяются пробелом от последующего слова. " .
87 | "Притягивается к слову восклицательный знак. " .
88 | "Делается замена для +-. ");
89 | }
90 | else {
91 | // Короткая подсказка
92 | $the_output = t("Текст автоматически преобразуется к более правильному с точки зрения типографики виду.");
93 | }
94 | //
95 | return $the_output;
96 | }
97 |
98 | // Реализация ловушки hook_filter
99 | // Предоставляет контент (текст), пропущенный через фильтр,
100 | // а также настройки и описание фильтра "Типограф"
101 | function typographus_filter($op, $delta = 0, $format = -1, $text = "")
102 | {
103 | switch ($op) {
104 | case "list":
105 | // Название фильтра
106 | return array(t("Типограф"));
107 | case "description":
108 | // Краткое описание фильтра
109 | return t("Форматирует текст для приведения его к более правильному с точки зрения типографики виду.");
110 | case "settings":
111 | // Настройки фильтра
112 | return _typographus_settings($format);
113 | case "process":
114 | // Преобразование контента (текста)
115 | return _typographus_process($text, $format);
116 | default:
117 | return $text;
118 | }
119 | }
120 |
121 | // Вспомогательная функция для получения всего списка допустимых сущностей HTML,
122 | // либо, если параметр $return_keys == true, всех ключей списка сущностей
123 | function _get_all_essences($return_keys = false)
124 | {
125 | $essences = array(
126 | "",
127 | "nbsp" => t("Неразрывный пробел"),
128 | "lnowrap" => t("Откр. тэг неразрывного блока"),
129 | "rnowrap" => t("Закр. тэг неразрывного блока"),
130 | "lquote" => t("Левая двойная кавычка"),
131 | "rquote" => t("Правая двойная кавычка"),
132 | "lquote2" => t("Левая одинарная кавычка"),
133 | "rquote2" => t("Правая одинарная кавычка"),
134 | "mdash" => t("Знак длинного тире"),
135 | "ndash" => t("Знак короткого тире"),
136 | "hellip" => t("Знак многоточия"),
137 | "copy" => t("Знак (c)"),
138 | "trade" => t("Знак (tm)"),
139 | "apos" => t("Апостроф"),
140 | "reg" => t("Знак (r)"),
141 | "multiply" => t("Знак умножения"),
142 | "1/2" => t("Спецсимвол 1/2"),
143 | "1/4" => t("Спецсимвол 1/4"),
144 | "3/4" => t("Спецсимвол 3/4"),
145 | "plusmn" => t("Знак +-")
146 | );
147 | //
148 | if ($return_keys)
149 | return array_keys($essences);
150 | else
151 | return array_values($essences);
152 | }
153 |
154 | // Вспомогательная функция для получения ключа списка сущностей HTML по индексу
155 | function _get_essence($index)
156 | {
157 | $essences = _get_all_essences(true);
158 | return $essences[$index];
159 | }
160 |
161 | // Вспомогательная функция, предоставляющая настройки "Типографа"
162 | // Все элементы формы настройки фильтра описываются здесь
163 | function _typographus_settings($format)
164 | {
165 | // Секция настроек "Типографа" в общей форме настроек фильтров контента
166 | $form["typographus_settings"] = array(
167 | "#type" => "fieldset",
168 | "#title" => t("Типограф"),
169 | "#collapsible" => true,
170 | "#collapsed" => false
171 | );
172 | //
173 | // Секция добавления блоков, внутри которых текст не типографируется
174 | $form["typographus_settings"]["blocks"] = array(
175 | "#type" => "fieldset",
176 | "#title" => t("Безопасные блоки"),
177 | "#collapsible" => true,
178 | "#collapsed" => false
179 | );
180 | //
181 | // Подсказка для настройки
182 | $form["typographus_settings"]["blocks"]["help"] = array(
183 | "#type" => "markup",
184 | "#value" => "Если возникнет необходимость не обрабатывать текст внутри какого-либо блока – " .
185 | "добавьте его в строке «Добавить» и нажмите кнопку «Сохранить настройки». " .
186 | "Добавленные блоки можно удалять, отметив их в столбце «Удалить» и нажав " .
187 | "кнопку «Сохранить настройки».
"
188 | );
189 | //
190 | // Получение всех строк таблицы настроек безопасных блоков из БД Drupal'а
191 | $blocks = variable_get("typographus_blocks_ids_on_$format", array());
192 | $new_open = variable_get("typographus_block_new_open_on_$format", "");
193 | $new_close = variable_get("typographus_block_new_close_on_$format", "");
194 | //
195 | // Добавление новой строки в таблицу настроек безопасных блоков
196 | if (strcmp($new_open, "") > 0) {
197 | $n = count($blocks);
198 | $id = ($n > 0) ? ($blocks[$n - 1] + 1) : 1;
199 | $blocks[] = $id;
200 | //
201 | variable_set("typographus_block_{$id}_open_on_$format", $new_open);
202 | variable_set("typographus_block_{$id}_close_on_$format", ((strcmp($new_close, "") > 0) ? $new_close : "/$new_open"));
203 | //
204 | variable_set("typographus_block_new_open_on_$format", "");
205 | variable_set("typographus_block_new_close_on_$format", "");
206 | }
207 | //
208 | // Шапка таблицы
209 | $form["typographus_settings"]["blocks"]["typographus_blocks_head"] = array(
210 | "#type" => "markup",
211 | "#value" => "" .
212 | t("Включено") . " " .
213 | t("Откр. тэг") . " " .
214 | t("Закр. тэг") . " " .
215 | t("Удалить") . " "
216 | );
217 | //
218 | $row_classes = array(false => "even", true => "odd");
219 | $is_row_odd = true;
220 | //
221 | $frame_prefix = "< ";
222 | $frame_suffix = " >
";
223 | //
224 | // Вывод всех строк таблицы настроек безопасных блоков на форму
225 | $n = count($blocks);
226 | for ($i = 0; $i < $n; $i++) {
227 | $id = $blocks[$i];
228 | //
229 | // Удаление строк, отмеченных пользователем на удаление
230 | if (variable_get("typographus_block_{$id}_delete_on_$format", 0) == 1) {
231 | unset($blocks[$i]);
232 | //
233 | variable_del("typographus_block_{$id}_enabled_on_$format");
234 | variable_del("typographus_block_{$id}_open_on_$format");
235 | variable_del("typographus_block_{$id}_close_on_$format");
236 | variable_del("typographus_block_{$id}_delete_on_$format");
237 | //
238 | continue;
239 | }
240 | //
241 | // Вывод не удаленных строк таблицы
242 | $form["typographus_settings"]["blocks"]["typographus_block_{$id}_enabled_on_$format"] = array(
243 | "#type" => "checkbox",
244 | "#default_value" => variable_get("typographus_block_{$id}_enabled_on_$format", 1),
245 | "#prefix" => "",
246 | "#suffix" => " "
247 | );
248 | $form["typographus_settings"]["blocks"]["typographus_block_{$id}_open_on_$format"] = array(
249 | "#type" => "textfield",
250 | "#size" => 10,
251 | "#maxlength" => 60,
252 | "#default_value" => variable_get("typographus_block_{$id}_open_on_$format", ""),
253 | "#prefix" => "$frame_prefix",
254 | "#suffix" => "$frame_suffix … "
255 | );
256 | $form["typographus_settings"]["blocks"]["typographus_block_{$id}_close_on_$format"] = array(
257 | "#type" => "textfield",
258 | "#size" => 10,
259 | "#maxlength" => 60,
260 | "#default_value" => variable_get("typographus_block_{$id}_close_on_$format", ""),
261 | "#prefix" => "$frame_prefix",
262 | "#suffix" => "$frame_suffix "
263 | );
264 | $form["typographus_settings"]["blocks"]["typographus_block_{$id}_delete_on_$format"] = array(
265 | "#type" => "checkbox",
266 | "#default_value" => variable_get("typographus_block_{$id}_delete_on_$format", 0),
267 | "#prefix" => "",
268 | "#suffix" => " "
269 | );
270 | //
271 | $is_row_odd = !$is_row_odd;
272 | }
273 | //
274 | // Вывод строки для ввода нового безопасного блока
275 | $form["typographus_settings"]["blocks"]["typographus_block_new_open_on_$format"] = array(
276 | "#type" => "textfield",
277 | "#size" => 10,
278 | "#maxlength" => 60,
279 | "#default_value" => variable_get("typographus_block_new_open_on_$format", ""),
280 | "#prefix" => "" .
281 | t("Добавить") . ": $frame_prefix",
282 | "#suffix" => "$frame_suffix … "
283 | );
284 | $form["typographus_settings"]["blocks"]["typographus_block_new_close_on_$format"] = array(
285 | "#type" => "textfield",
286 | "#size" => 10,
287 | "#maxlength" => 60,
288 | "#default_value" => variable_get("typographus_block_new_close_on_$format", ""),
289 | "#prefix" => "$frame_prefix",
290 | "#suffix" => "$frame_suffix
"
291 | );
292 | //
293 | // Сохранение таблицы настроек безопасных блоков в БД Drupal'а
294 | $blocks = array_values($blocks);
295 | variable_set("typographus_blocks_ids_on_$format", $blocks);
296 | //
297 | // Секция добавления сущностей HTML и замен для них
298 | $form["typographus_settings"]["essences"] = array(
299 | "#type" => "fieldset",
300 | "#title" => t("Замена сущностей на символы"),
301 | "#collapsible" => true,
302 | "#collapsed" => false
303 | );
304 | //
305 | // Подсказка для настройки
306 | $form["typographus_settings"]["essences"]["help"] = array(
307 | "#type" => "markup",
308 | "#value" => "Иногда удобно использовать для замены символы вместо сущностей HTML. " .
309 | "Код получается более компактным. Для добавления сущности и замены для неё " .
310 | "заполните поля в строке «Добавить» и нажмите кнопку «Сохранить настройки». " .
311 | "Добавленные сущности можно удалять, отметив их в столбце «Удалить» и нажав " .
312 | "кнопку «Сохранить настройки».
"
313 | );
314 | //
315 | // Получение всех строк таблицы настроек сущностей HTML из БД Drupal'а
316 | $essences = variable_get("typographus_essences_ids_on_$format", array());
317 | $new_essence = variable_get("typographus_essence_new_essence_on_$format", 0);
318 | $new_change = variable_get("typographus_essence_new_change_on_$format", "");
319 | //
320 | // Добавление новой строки в таблицу настроек сущностей HTML
321 | if ($new_essence > 0) {
322 | $n = count($essences);
323 | $id = ($n > 0) ? ($essences[$n - 1] + 1) : 1;
324 | $essences[] = $id;
325 | //
326 | variable_set("typographus_essence_{$id}_essence_on_$format", $new_essence);
327 | variable_set("typographus_essence_{$id}_change_on_$format", $new_change);
328 | //
329 | variable_set("typographus_essence_new_essence_on_$format", 0);
330 | variable_set("typographus_essence_new_change_on_$format", "");
331 | }
332 | //
333 | // Шапка таблицы
334 | $form["typographus_settings"]["essences"]["typographus_essences_head"] = array(
335 | "#type" => "markup",
336 | "#value" => "" .
337 | t("Включено") . " " .
338 | t("Сущность") . " " .
339 | t("Замена") . " " .
340 | t("Удалить") . " "
341 | );
342 | //
343 | $row_classes = array(false => "even", true => "odd");
344 | $is_row_odd = true;
345 | //
346 | // Вывод всех строк таблицы настроек сущностей HTML на форму
347 | $n = count($essences);
348 | for ($i = 0; $i < $n; $i++) {
349 | $id = $essences[$i];
350 | //
351 | // Удаление строк, отмеченных пользователем на удаление
352 | if (variable_get("typographus_essence_{$id}_delete_on_$format", 0) == 1) {
353 | unset($essences[$i]);
354 | //
355 | variable_del("typographus_essence_{$id}_enabled_on_$format");
356 | variable_del("typographus_essence_{$id}_essence_on_$format");
357 | variable_del("typographus_essence_{$id}_change_on_$format");
358 | variable_del("typographus_essence_{$id}_delete_on_$format");
359 | //
360 | continue;
361 | }
362 | //
363 | // Вывод не удаленных строк таблицы
364 | $form["typographus_settings"]["essences"]["typographus_essence_{$id}_enabled_on_$format"] = array(
365 | "#type" => "checkbox",
366 | "#default_value" => variable_get("typographus_essence_{$id}_enabled_on_$format", 1),
367 | "#prefix" => "",
368 | "#suffix" => " "
369 | );
370 | $form["typographus_settings"]["essences"]["typographus_essence_{$id}_essence_on_$format"] = array(
371 | "#type" => "select",
372 | "#default_value" => variable_get("typographus_essence_{$id}_essence_on_$format", 0),
373 | "#options" => _get_all_essences(),
374 | "#prefix" => "",
375 | "#suffix" => " → "
376 | );
377 | $form["typographus_settings"]["essences"]["typographus_essence_{$id}_change_on_$format"] = array(
378 | "#type" => "textfield",
379 | "#size" => 10,
380 | "#maxlength" => 60,
381 | "#default_value" => variable_get("typographus_essence_{$id}_change_on_$format", ""),
382 | "#prefix" => "",
383 | "#suffix" => " "
384 | );
385 | $form["typographus_settings"]["essences"]["typographus_essence_{$id}_delete_on_$format"] = array(
386 | "#type" => "checkbox",
387 | "#default_value" => variable_get("typographus_essence_{$id}_delete_on_$format", 0),
388 | "#prefix" => "",
389 | "#suffix" => " "
390 | );
391 | //
392 | $is_row_odd = !$is_row_odd;
393 | }
394 | //
395 | // Вывод строки для ввода новой сущности HTML и замены для неё
396 | $form["typographus_settings"]["essences"]["typographus_essence_new_essence_on_$format"] = array(
397 | "#type" => "select",
398 | "#default_value" => variable_get("typographus_essence_new_essence_on_$format", 0),
399 | "#options" => _get_all_essences(),
400 | "#prefix" => "" .
401 | t("Добавить") . ": ",
402 | "#suffix" => " → "
403 | );
404 | $form["typographus_settings"]["essences"]["typographus_essence_new_change_on_$format"] = array(
405 | "#type" => "textfield",
406 | "#size" => 10,
407 | "#maxlength" => 60,
408 | "#default_value" => variable_get("typographus_essence_new_change_on_$format", ""),
409 | "#prefix" => "",
410 | "#suffix" => "
"
411 | );
412 | //
413 | // Сохранение таблицы настроек сущностей HTML в БД Drupal'а
414 | $essences = array_values($essences);
415 | variable_set("typographus_essences_ids_on_$format", $essences);
416 | //
417 | // Секция информации о фильтре "Типограф"
418 | $form["typographus_settings"]["info"] = array(
419 | "#type" => "fieldset",
420 | "#title" => t("Информация о фильтре"),
421 | "#collapsible" => true,
422 | "#collapsed" => true
423 | );
424 | //
425 | $form["typographus_settings"]["info"]["typographus_status"] = array(
426 | "#type" => "markup",
427 | "#value" => "«Типограф» — средство подготовки текстов к web-изданию . " .
428 | "Ссылка: http://rmcreative.ru/article/programming/typograph/ " .
429 | "Текущая версия: 2.0.5(PHP5), 1.0.5(PHP4)
"
430 | );
431 | //
432 | return $form;
433 | }
434 |
435 | // Вспомогательная функция, преобразующая контент (текст) к
436 | // более правильному с точки зрения типографики виду
437 | function _typographus_process($text, $format)
438 | {
439 | require_once(drupal_get_path("module", "typographus") . "/typographus.php");
440 | //
441 | $typo = new Typographus("UTF-8");
442 | //
443 | // Добавление блоков, внутри которых текст не типографируется, указанных в настройках фильтра
444 | $blocks = variable_get("typographus_blocks_ids_on_$format", array());
445 | for ($i = 0; $i < count($blocks); $i++) {
446 | $id = $blocks[$i];
447 | //
448 | $is_enabled = variable_get("typographus_block_{$id}_enabled_on_$format", 1);
449 | $open_block = variable_get("typographus_block_{$id}_open_on_$format", "");
450 | $close_block = variable_get("typographus_block_{$id}_close_on_$format", "");
451 | //
452 | if (($is_enabled == 1) && (strcmp($open_block, "") > 0))
453 | $typo->addSafeBlock("<" . $open_block . ">",
454 | "<" . ((strcmp($close_block, "") > 0) ? $close_block : "/$open_block") . ">");
455 | }
456 | //
457 | // Замена сущностей на символы, указанных в настройках фильтра
458 | $essences = variable_get("typographus_essences_ids_on_$format", array());
459 | for ($i = 0; $i < count($essences); $i++) {
460 | $id = $essences[$i];
461 | //
462 | $is_enabled = variable_get("typographus_essence_{$id}_enabled_on_$format", 1);
463 | $essence_id = variable_get("typographus_essence_{$id}_essence_on_$format", 0);
464 | $change_sym = variable_get("typographus_essence_{$id}_change_on_$format", "");
465 | //
466 | if (($is_enabled == 1) && ($essence_id > 0))
467 | $typo->setSym(_get_essence($essence_id), $change_sym);
468 | }
469 | //
470 | // Типографирование текста
471 | $text = $typo->process($text);
472 | //
473 | return $text;
474 | }
--------------------------------------------------------------------------------
/history.md:
--------------------------------------------------------------------------------
1 | v.2.2.1
2 | [+] Правило «Оторвать тире от слова» теперь работает корректно.
3 | [+] Расстановка дефисов в предлогах «из-за», «из-под», «по-над», «по-под».
4 | [+] Привязка «-либо», «-нибудь» к вопросам кто, что, где, когда, почему, зачем, кем, чем.
5 | [+] В сокращения добавлены «зам», «см» (заместитель, смотреть).
6 | [+] В сокращения перед числами добавлено «гл» (глава).
7 | [*] Фикс: Удаление повторяющихся знаков препинания в конце предложения.
8 | [*] Фикс: Удаление повторяющихся знаков написанных через любое количество пробелов. Троеточие и другие исключения учтены.
9 | [+] Немного оптимизирован код.
10 |
11 | v.2.2.0
12 | [*] Исправлена ошибка в выставлении опций и соответствующая документация.
13 | [+] Интеграция с CakePHP.
14 | [*] Типограф больше не будет удалять переводы строк, если строка начиналась или оканчивалась скобкой.
15 | [*] Приведены в порядок различные плагины и инструкции по интеграции.
16 | [*] Фикс: Ошибочно принимаемые за сокращения начала слов.
17 | [*] Фикс: Степени + единицы измерения.
18 | [*] Фикс: Неразрывные формы собственности и названия огранизаций.
19 | [-] Убрано правило «Оторвать тире от слова». Контрпример: «газо- и электросварка»
20 | [+] Прямая речь.
21 | [+] removeAllSafeBlocks() для очистки стандартного набора безопасных блоков.
22 | [+] Не разрывать IP-адреса.
23 |
24 | v.2.1.0
25 | [+] Вложенные кавычки.
26 | [-] Склейка ёлочек (временно убрано).
27 | [+] Притягивание чисел к знаку умножения.
28 | [+] Запятые до «а» и «но».
29 | [+] Притягивание «;» к предшествующему слову.
30 | [*] Троеточием теперь считается от трёх до пяти точек.
31 | [+] Убирает лишние знаки: «??» в «?», «!!!!» в «!!!».
32 | [+] К списку сокращений добавлена иллюстрация («илл.»).
33 | [+] Улучшено типографирование чисел прописью и денежных сумм.
34 | [+] Тире нельзя отрывать от стоящего перед ним слова.
35 | [-] Убрано форматирование телефонных номеров.
36 | [*] Исправлена обработка «МГУ, ГУМ».
37 | [+] Опциональное преобразование спецсимволов в коды HTML.
38 | [+] Обработка «уе» в денежных суммах.
39 | [+] !? => ?!
40 | [+] К единицам измерения добавлены dpi, px.
41 | [+] Правильные апострофы в «LO'Лайт».
42 |
43 | v.2.0.7
44 | [+] Оторвать скобку от слова. (Zav)
45 | [+] Дополнен список сокращений. (Спасибо Zav)
46 | [+] Нельзя переносить единицу измерения: 10 кг, писать раздельно. (Спасибо Zav)
47 | [+] Добавление пропущенных точек у сокращений. (Спасибо Zav)
48 | [+] Обработка квадратных и кубических(и др. степеней) метров(и др единиц измерения): 10м2.
49 | [+] Плагин для WordPress. (Спасибо MAX)
50 | [+] Модуль для Drupal. (Спасибо MAX)
51 | [+] Коррекция тел./факс: (812). (Спасибо Zav)
52 | [+] Опция для замены всех ё на е. $typo->convertE(true); (Спасибо Zav) См. также: http://diamondsteel.ru/useful/handbook/5.html#5.5.3.
53 | [*] fix: обработка закрывающей кавычки перед ;
54 | [*] Код для PHP4 больше обновляться не будет... если конечно кто-нибудь меня не попросит.
55 | [*] Класс переименован в Typographus из-за многочисленных конфликтов имён при использовании в популярных фреймворках.
56 |
57 | v.2.0.6, v.1.0.6
58 | --------------------------------------------------------------------------------
59 | [*] fix: Замена на вместо того, что передано в конфиге
60 | [+] Версия ПО пишется неразрывно с буковкой v. и названием ПО
61 | [*] fix: Неправильная обработка кавычек в выражении: да "тест"- уже
62 | [*] fix: ("слово") -> ("слово»)
63 | [+] Не отделяем табл. и рис. от номера
64 | [+] К словам теперь приятягиваются ?!:,
65 |
66 | v.2.0.5, v.1.0.5
67 | --------------------------------------------------------------------------------
68 | [*] fix: "тест""тест" (Спасибо Reki за багрепорт)
69 |
70 | v.2.0.4, v.1.0.4
71 | --------------------------------------------------------------------------------
72 | [+] Замена +- на соотв. знак
73 | [+] «Слово !» => «Слово!»
74 | [+] К аббревиатурам добавлены: НПФ, НИИ
75 |
76 | v.1.0.3
77 | --------------------------------------------------------------------------------
78 | [+] Версия для PHP4 приведена к версии для PHP5 насколько это возможно.
79 |
80 | v.2.0.3
81 | --------------------------------------------------------------------------------
82 | [+] В список форм собственности добавлен ИП.
83 | [*] fix: притягивание запятых к кавычкам, апострофам, знакам ™ и ®. (Спасибо grasshopper за багрепорт)
84 |
85 | v.2.0.2
86 | --------------------------------------------------------------------------------
87 | [*] fix: Пофиксены возможные проблемы с кодировкой. (Спасибо, eagle)
88 |
89 | v.2.0.1
90 | --------------------------------------------------------------------------------
91 | [*]Теперь конвертируются абсолютно любые кавчки и ёлочки в правильно расставленные ёлочки.
92 | [*]Число точек при замене на троеточие расширено до 5-и. (По заявкам трудящихся)
93 |
94 | v.2.0.0
95 | --------------------------------------------------------------------------------
96 | [*] Переход на PHP5.
97 | [+] Оформлен в виде класса.
98 | [*] Подправлены плагины Smarty для работы с классом.
99 | [+] Обработка текстов не в кодировке WINDOWS-1251.
100 | [+] Склейка ёлочек: "test "quote"" -> «test «quote»
101 | [+] Неразрывный пробел после инициалов, слепка инициалов.
102 | [+] Неразрывные названия организаций и абревиатуры форм собственности.
103 | [+] Нельзя отрывать имя собственное от относящегося к нему сокращения. Например: тов. Сталин, г. Воронеж. Ставит пробел, если его нет.
104 | [+] Не разделять 2007 г., ставить пробел, если его нет.
105 | [+] Слепка скобок со словами.
106 | [+] Замена 1/2 1/4 3/4 на спецсимволы.
107 | [+] Русские денежные суммы, расставляя пробелы в нужных местах.
108 | [+] Не отделять стр. и с. от номера странцы.
109 | [*] Приподнятые ™ и ®.
110 | [*] Замена (c) с русской "c".
111 |
112 | v. 1.0.3
113 | --------------------------------------------------------------------------------
114 | [*] fix: v.1.0.2
115 |
116 | v. 1.0.2
117 | --------------------------------------------------------------------------------
118 | [*] fix: "новый тариф*"
119 | [*] fix: "personal:"
120 | [*] fix: "c:\www\sites\"
121 | [*] fix: "ICQ #"
122 | [*] − заменён –, соответствующие символы тоже.
123 | [+] Разнос неправильно расставленных кавычек. (вася"пупкин") => (вася "пупкин")
124 | [+] Дополнен список предлогов и союзов, после которых надо ставить неразрывный пробел.
125 | [+] Дополнен список частиц
126 | [+] Расстановка запятых. (Слово ,слово) (Слово,слово) (Слово , слово) => (Слово, слово)
127 | [+] тел: 81231231212 -> тел: 8 (123) 123-12-12
128 |
129 | v. 1.0.1
130 | --------------------------------------------------------------------------------
131 | [+]Много пробелов -> один пробел.
132 | [*]Пофиксена проблема с некорректной работой на *nix хостинге. Спасибо -=Ustas=- ( http://vingrad.ru/@-=Ustas=- )
133 |
134 | v. 1.0
135 | --------------------------------------------------------------------------------
136 | Первый релиз
137 |
--------------------------------------------------------------------------------
/invision_power_board/readme.md:
--------------------------------------------------------------------------------
1 | Типограф для IP.Board
2 | -----------------------------------------------------------
3 | For IP.board 2.1.x, 2.2.x, (?)2.3.x
4 | -----------------------------------------------------------
5 | (C) 2007-2008 Олег «Sannis» Ефимов, Алексей «Arhar» Баранов,
6 | Макаров Александр
7 | -----------------------------------------------------------
8 | Авторы модуля типографики:
9 | (C) 2007-2008 Оранский Максим и Макаров Александр
10 | http://rmcreative.ru/article/programming/typograph/
11 | -----------------------------------------------------------
12 | «Типограф» — средство подготовки текстов к web-изданию.
13 | Форматирует текст для приведения его к более правильному
14 | с точки зрения типографики виду.
15 | -----------------------------------------------------------
16 | Для того чтобы введённый текст проверился Типографом,
17 | его необходимо будет заключить в теги [typo] [/typo].
18 | -----------------------------------------------------------
19 | Объём работ:
20 | -----------------------------------------------------------
21 | Файлы для изменения:
22 | - ./sources/classes/bbcode/class_bbcode_core.php
23 | - ./sources/classes/bbcode/class_bbcode.php
24 | - ./sources/classes/bbcode/class_bbcode_legacy.php
25 |
26 |
27 | -----------------------------------------------------------
28 | УСТАНОВКА
29 | -----------------------------------------------------------
30 | 1. Поместить в папку ./typograph/ последнюю версию typographus.php.
31 | 2. Загрузить папку в ./sources/classes/bbcode/ на сервере форума.
32 | 3. Открыть файл ./sources/classes/bbcode/class_bbcode_core.php, найти:
33 |
34 | /*-------------------------------------------------------------------------*/
35 | // regex_code_tag: Builds this code tag HTML
36 | /*-------------------------------------------------------------------------*/
37 |
38 | Добавить перед:
39 |
40 | /*-------------------------------------------------------------------------*/
41 | // (SnS) regex_typo_tag: Check typography in [typo] tags
42 | /*-------------------------------------------------------------------------*/
43 |
44 | /**
45 | * Check typography
46 | *
47 | * @author Oleg «Sannis» Efimov
48 | * @author Alex «Arhar» Baranov
49 | * @author Макаров Александр
50 | * @param string Raw text
51 | * @return string Converted text
52 | */
53 | function regex_typo_tag($matches=array()){
54 | $ver = substr(phpversion(), 0, 1);
55 |
56 | if( $ver == '5' ){
57 | if(!is_object($this->typo_class)){
58 | require_once(ROOT_PATH.'sources/classes/bbcode/typograph/typographus.php');
59 | $this->typo_class = new Typographus();
60 | }
61 |
62 | return $this->typo_class->process($matches[1]);
63 | }
64 | //PHP4 не поддерживается
65 | else return $matches[1];
66 | }
67 |
68 |
69 | 4. Открыть файл ./sources/classes/bbcode/class_bbcode.php, найти:
70 |
71 |
72 | //-----------------------------------------
73 | // Do [CODE] tag
74 | //-----------------------------------------
75 |
76 | $txt = preg_replace_callback( "#\[code\](.+?)\[/code\]#is", array( &$this, 'regex_code_tag' ), $txt );
77 |
78 | Добавить перед:
79 |
80 | //-----------------------------------------
81 | // Do [typo] tag
82 | //-----------------------------------------
83 |
84 | $txt = preg_replace_callback( "#\[typo\](.+?)\[/typo\]#is", array( &$this, 'regex_typo_tag' ), $txt );
85 |
86 | 4. Открыть файл ./sources/classes/bbcode/class_bbcode_legacy.php, найти:
87 |
88 | //-----------------------------------------
89 | // Do [CODE] tag
90 | //-----------------------------------------
91 |
92 | $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->regex_code_tag( '\\1' )", $txt );
93 |
94 | Добавить перед:
95 |
96 | //-----------------------------------------
97 | // Do [typo] tag
98 | //-----------------------------------------
99 |
100 | $txt = preg_replace( "#\[typo\](.+?)\[/typo\]#ies", "\$this->regex_typo_tag( '\\1' )", $txt );
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | Типограф (PHP5)
2 | ===============
3 |
4 | - Страничка: http://rmcreative.ru/blog/post/tipograf
5 | - Онлайн-версия: http://rmcreative.ru/typograph/
6 |
7 | Авторы:
8 |
9 | - [Максим Оранский](http://smee-again.livejournal.com/), первоначальный код, тестирование, правила.
10 | - [Александр Макаров](http://rmcreative.ru), код, тестирование, правила, плагины для Smarty, дальнейшая поддержка.
11 |
12 | При создании типографа помимо личного опыта использовались:
13 |
14 | - http://philigon.ru/
15 | - http://artlebedev.ru/kovodstvo/
16 | - http://pvt.livejournal.com/
17 |
18 | Спасибо:
19 |
20 | - [-=Ustas=-](http://vingrad.ru/@-=Ustas=-/)
21 | - [faZeful](http://fazeful.ru/)
22 | - [Naruvi (Begemot)](http://priop.ru/)
23 | - grasshopper
24 | - eagle
25 | - SHAman
26 | - Eagle
27 | - grasshopper
28 | - Max
29 | - Reki
30 | - Zav
31 | - sadhaka
32 | - Алексей Волкогон
33 |
34 | … и всем, кто пользуется типографом и сообщает об ошибках.
35 |
36 | Отдельное спасибо Max-у за плагин к Wordpress.
37 |
38 |
39 |
40 | На данный момент типограф умеет:
41 | --------------------------------
42 |
43 | - Обрабатывать тексты в различных кодировках(требуется iconv).
44 | - Заменять кавычки на ёлочки.
45 | - Склеивать двойные кавычки.
46 | - Заменять знак дефиса или два знака дефиса подряд — на знак длинного тире.
47 | - Заменять знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире.
48 | - Заменять множество пробелов или табуляций на один пробел.
49 | - Заменять х в выражениях вроде 10x10 на знак умножения.
50 | - Исправлять неправильную расстановку запятых.
51 | - Разносить неправильно расставленные кавычки.
52 | - Вставлять неразрывный пробел после инициалов, сцеплять инициалы.
53 | - Делать неразрывными названия организаций и аббревиатуры форм собственности.
54 | - Делать неразрывными имя собственное и относящееся к нему сокращение.
55 | - Не разделять 2007 г., ставить пробел, если его нет.
56 | - Сцеплять скобки со словами.
57 | - Заменять 1/2 1/4 3/4 на спецсимволы.
58 | - Следить за тем, чтобы предлоги и союзы не находились в конце строки.
59 | - Следить за тем, чтобы частицы бы, ли, же и т.д. не отрывались от предшествующего слова.
60 | - Форматировать русские денежные суммы, расставляя пробелы в нужных местах.
61 | - Заменять от 3-х до 5-и точек подряд на троеточие.
62 | - Притягивать к слову запятые, отделять пробелом от последующего слова.
63 | - Притягивать к слову восклицательный знак.
64 | - Делать замену для +-.
65 | - Обрабатывать вложенные кавычки.
66 | - Притягивание чисел к знаку умножения.
67 | - Запятые до «а» и «но».
68 | - Притягивание «;» к предшествующему слову.
69 | - Убирает лишние знаки: «??» в «?», «!!!!» в «!!!».
70 | - Правильные апострофы в «LO'Лайт».
71 | - Прямая речь.
72 | - Неразрывные IP-адреса.
73 |
74 | Использование класса
75 | --------------------
76 |
77 | Простой пример:
78 |
79 | ~~~
80 | require_once('Typographus.php');
81 | $typo = new Typographus();
82 | $text = $typo->process($text);
83 | ~~~
84 |
85 | Для обработки текста в кодировке, отличной от `WINDOWS-1251`, укажите кодировку в
86 | конструкторе(требуется iconv):
87 |
88 | ~~~
89 | $typo = new Typographus('UTF-8');
90 | ~~~
91 |
92 | Если возникнет необходимость не обрабатывать текст внутри какого-либо блока —
93 | добавьте его при помощи метода `addSafeBlock()`:
94 |
95 | ~~~
96 | $typo->addSafeBlock('', ' ');
97 | ~~~
98 |
99 | Для задания полностью своего набора безопасных блоков можно сначала очистить набор блоков:
100 |
101 | ~~~
102 | $typo->removeAllSafeBlocks();
103 | ~~~
104 |
105 | Если вам понадобится изменить символы замены, воспользуйтесь методом setSym():
106 |
107 | ~~~
108 | $typo->setSym('nbsp', ' ');
109 | ~~~
110 |
111 | Если хотите, чтобы все буквы ё менялись автоматом на е:
112 |
113 | ~~~
114 | $typo->setOpt(Typographus::CONVERT_E, true);
115 | ~~~
116 |
117 | Если хотите, чтобы спец-знаки были выведены как HTML-сущности:
118 |
119 | ~~~
120 | $typo->setOpt(Typographus::HTML_ENTITIES, true);
121 | ~~~
122 |
123 | Использование типографа в Smarty
124 | --------------------------------
125 |
126 | Вместе с классом типографа в архиве вы можете найти плагины для Smarty.
127 | Скопируйте их в вашу папку `plugins`.
128 |
129 | Если вы хотите подключить постфильтр Smarty (т.е. обработать всю страницу уже
130 | после её формирования) — пишем при инициализации Smarty:
131 |
132 | ~~~
133 | $smarty->load_filter('output', 'typograph');
134 | ~~~
135 |
136 | Данный подход не рекомендуется использовать т.к. использование может сказаться на производительности.
137 |
138 |
139 | Если вам необходимо обработать конкретную переменную - применеям модификатор в
140 | шаблоне:
141 |
142 | ~~~
143 | {$text|typograph}
144 | ~~~
145 |
146 | Использование типографа в WordPress, Drupal, CakePHP, Invision Power Board
147 | --------------------------------------------------------------------------
148 |
149 | В архиве прилагаются инструкции и необходимые файлы.
--------------------------------------------------------------------------------
/smarty/modifier.typograph.php:
--------------------------------------------------------------------------------
1 | process($str);
21 | }
--------------------------------------------------------------------------------
/smarty/outputfilter.typograph.php:
--------------------------------------------------------------------------------
1 | process($output);
21 | }
--------------------------------------------------------------------------------
/smarty/readme.md:
--------------------------------------------------------------------------------
1 | Плагины для Smarty
2 | ------------------
3 | Поместить в папку плагинов Smarty.
4 | Туда же поместить последнюю версию typographus.php.
--------------------------------------------------------------------------------
/tests/_test.dr_death.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.dr_death.dat
--------------------------------------------------------------------------------
/tests/_test.fazeful.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.fazeful.dat
--------------------------------------------------------------------------------
/tests/_test.isaykin.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.isaykin.dat
--------------------------------------------------------------------------------
/tests/_test.typo-basic.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-basic.dat
--------------------------------------------------------------------------------
/tests/_test.typo-dizzyman.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-dizzyman.dat
--------------------------------------------------------------------------------
/tests/_test.typo-html.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-html.dat
--------------------------------------------------------------------------------
/tests/_test.typo-latest.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-latest.dat
--------------------------------------------------------------------------------
/tests/_test.typo-not_used.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-not_used.dat
--------------------------------------------------------------------------------
/tests/_test.typo-phones.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-phones.dat
--------------------------------------------------------------------------------
/tests/_test.typo-quotes.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-quotes.dat
--------------------------------------------------------------------------------
/tests/_test.typo-symbols.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-symbols.dat
--------------------------------------------------------------------------------
/tests/_test.typo-unix.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/_test.typo-unix.dat
--------------------------------------------------------------------------------
/tests/index.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/tests/index.php
--------------------------------------------------------------------------------
/typographus.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/samdark/Typograph/9d2a06bf07dc3f1addf11d0fc6906c12e65b9671/typographus.php
--------------------------------------------------------------------------------
/wordpress/TypographMachine/readme.md:
--------------------------------------------------------------------------------
1 | Плагин для WordPress
2 | --------------------
3 | В эту папку необходимо поместить последнюю версию typographus.php.
4 |
5 | Работоспособность проверена на версии 2.6.3.
--------------------------------------------------------------------------------
/wordpress/TypographMachine/typograph_machine.php:
--------------------------------------------------------------------------------
1 | process($text);
48 | }
--------------------------------------------------------------------------------