├── 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 | "На данный момент «типограф» умеет:" . 51 | "Пока не умеет:"); 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("Текст автоматически преобразуется к более правильному с точки зрения типографики виду:"); 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" => "" 216 | ); 217 | // 218 | $row_classes = array(false => "even", true => "odd"); 219 | $is_row_odd = true; 220 | // 221 | $frame_prefix = "
" . 212 | t("Включено") . "" . 213 | t("Откр. тэг") . "" . 214 | t("Закр. тэг") . "" . 215 | t("Удалить") . "
<"; 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" => "" 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" => "" 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" => "" 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" => "" 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" => "" 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" => "" 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" => "
" . 337 | t("Включено") . "" . 338 | t("Сущность") . "" . 339 | t("Замена") . "" . 340 | t("Удалить") . "
", 368 | "#suffix" => "", 375 | "#suffix" => "", 383 | "#suffix" => "", 389 | "#suffix" => "
" . 401 | t("Добавить") . ":", 402 | "#suffix" => "", 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 | } --------------------------------------------------------------------------------