From 2ff4ec3f52ea23d2cbc7051aba0e9ff17a37fc88 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 14:09:12 +0300 Subject: [PATCH 1/8] =?UTF-8?q?*=20Composer.json:=20=09+=20`homepage`=20?= =?UTF-8?q?=09+=20`authors`.=20=09*=20`require`=20=E2=86=92=20`dd/evolutio?= =?UTF-8?q?ncms-libraries-ddtools`:=20Renamed=20from=20`dd/modxevo-library?= =?UTF-8?q?-ddtools`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index c88cd37..b12afbd 100644 --- a/composer.json +++ b/composer.json @@ -21,8 +21,23 @@ "text correction", "text typography" ], + "homepage": "https://code.divandesign.biz/modx/ddtypograph", + "authors": [ + { + "name": "DD Group", + "email": "code@DivanDesign.biz", + "homepage": "https://code.divandesign.biz", + "role": "Owner" + }, + { + "name": "Ilyas Ronef", + "email": "ilyas@DivanDesign.ru", + "homepage": "https://ronef.ru", + "role": "Developer" + } + ], "require": { "php": ">=5.4.0", - "dd/modxevo-library-ddtools": ">=0.32.0" + "dd/evolutioncms-libraries-ddtools": ">=0.32.0" } } \ No newline at end of file From 157d9e5c2b9d7cd630a39cf54bcdca6ad1b2c5c5 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 17:09:21 +0300 Subject: [PATCH 2/8] * Attention! PHP >= 5.6 is required. * Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.48.1 is required. * Refactoring: The `$params` variable is used instead of a standalone variable for each parameter. --- README.md | 4 +- README_ru.md | 4 +- composer.json | 4 +- ddTypograph_snippet.php | 126 ++++++++++++++++++++-------------------- 4 files changed, 68 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index cd0142a..4c54c48 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ The snippet doesn’t use third-party services, also it sends no requests. In ot ## Requires -* PHP >= 5.4 -* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 +* PHP >= 5.6 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.48.1 * [PHP.libraries.EMT](http://mdash.ru) 3.5 (contains in archive) diff --git a/README_ru.md b/README_ru.md index 41d8c9d..e549ef7 100644 --- a/README_ru.md +++ b/README_ru.md @@ -5,8 +5,8 @@ ## Использует -* PHP >= 5.4 -* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 +* PHP >= 5.6 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.48.1 * [PHP.libraries.EMT](http://mdash.ru) 3.5 (содержится в архиве) diff --git a/composer.json b/composer.json index b12afbd..0069ec5 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ } ], "require": { - "php": ">=5.4.0", - "dd/evolutioncms-libraries-ddtools": ">=0.32.0" + "php": ">=5.6.0", + "dd/evolutioncms-libraries-ddtools": ">=0.48.1" } } \ No newline at end of file diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 416377e..608f2db 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -10,15 +10,44 @@ * @copyright 2010–2020 DD Group {@link https://DivanDesign.biz } */ +//Renaming params with backward compatibility +$params = \ddTools::verifyRenamedParams([ + 'params' => $params, + 'compliance' => [ + 'optAlign' => 'OptAlign', + 'text_paragraphs' => 'Text_paragraphs', + 'text_autoLinks' => 'Text_autoLinks', + 'etc_unicodeConvert' => 'Etc_unicodeConvert' + ], + 'returnCorrectedOnly' => false +]); + +//Defaults +$params = \DDTools\ObjectTools::extend([ + 'objects' => [ + (object) [ + //Required + 'text' => '', + 'optAlign' => false, + 'text_paragraphs' => false, + 'text_autoLinks' => false, + 'etc_unicodeConvert' => true, + 'noTags' => false, + 'excludeTags' => 'notg,code' + ], + $params + ] +]); + //Если есть что типографировать -if (strlen($text) > 4){ +if (strlen($params->text) > 4){ global $ddTypograph; //Заменим кавычки, вставленные через спец. символы на обычные (а то не обрабатываются в библиотеке) - $text = str_replace( + $params->text = str_replace( '"', '"', - $text + $params->text ); if (!isset($ddTypograph)){ @@ -37,30 +66,14 @@ 'assets/libs/ddTools/modx.ddtools.class.php' ); - //Для обратной совместимости - extract(\ddTools::verifyRenamedParams([ - 'params' => $params, - 'compliance' => [ - 'optAlign' => 'OptAlign', - 'text_paragraphs' => 'Text_paragraphs', - 'text_autoLinks' => 'Text_autoLinks', - 'etc_unicodeConvert' => 'Etc_unicodeConvert' - ] - ])); - //Safe tags - $excludeTags = - isset($excludeTags) ? - strtolower($excludeTags) : - 'notg,code' - ; - $excludeTags = explode( + $params->excludeTags = explode( ',', - $excludeTags + strtolower($params->excludeTags) ); foreach ( - $excludeTags as + $params->excludeTags as $excludeTags_item ){ $excludeTags_item = trim($excludeTags_item); @@ -68,7 +81,7 @@ //We don't need anything with default EMT tag if ($excludeTags_item != 'notg'){ //Wrap - $text = str_ireplace( + $params->text = str_ireplace( [ //Tag start '<' . $excludeTags_item, @@ -81,47 +94,35 @@ //Tag end '' ], - $text + $params->text ); } } //Если нельзя добавлять теги к тексту - if ( - isset($noTags) && - $noTags == 1 - ){ + if ($params->noTags){ // $noTags = 'off'; - $optAlign = 'off'; - $text_paragraphs = 'off'; - $text_autoLinks = 'off'; + $params->optAlign = 'off'; + $params->text_paragraphs = 'off'; + $params->text_autoLinks = 'off'; $etc_nobr_to_nbsp = 'on'; }else{ // $noTags = 'on'; - $optAlign = - ( - isset($optAlign) && - $optAlign == 1 - ) ? + $params->optAlign = + $params->optAlign ? 'on' : 'off' ; - $text_paragraphs = - ( - isset($text_paragraphs) && - $text_paragraphs == 1 - ) ? + $params->text_paragraphs = + $params->text_paragraphs ? 'on' : 'off' ; - $text_autoLinks = - ( - isset($text_autoLinks) && - $text_autoLinks == 1 - ) ? + $params->text_autoLinks = + $params->text_autoLinks ? 'on' : 'off' ; @@ -129,13 +130,10 @@ $etc_nobr_to_nbsp = 'off'; } - $etc_unicodeConvert = - ( - isset($etc_unicodeConvert) && - $etc_unicodeConvert - ) == 0 ? - 'off' : - 'on' + $params->etc_unicodeConvert = + $params->etc_unicodeConvert ? + 'on' : + 'off' ; $ddTypograph->setup([ @@ -281,39 +279,39 @@ //Все настройки оптического выравнивания // 'OptAlign.all' => 'off', //Оптическое выравнивание открывающей кавычки - 'OptAlign.oa_oquote' => $optAlign, + 'OptAlign.oa_oquote' => $params->optAlign, //Оптическое выравнивание для пунктуации (скобка и запятая) - 'OptAlign.oa_obracket_coma' => $optAlign, + 'OptAlign.oa_obracket_coma' => $params->optAlign, //TODO: Параметр не ясен //Оптическое выравнивание кавычки - 'OptAlign.oa_oquote_extra' => $optAlign, + 'OptAlign.oa_oquote_extra' => $params->optAlign, //Inline стили или CSS-классы 'OptAlign.layout' => 'style', //Простановка параграфов - 'Text.paragraphs' => $text_paragraphs, + 'Text.paragraphs' => $params->text_paragraphs, //Выделение ссылок из текста - 'Text.auto_links' => $text_autoLinks, + 'Text.auto_links' => $params->text_autoLinks, //Выделение электронной почты из текста - 'Text.email' => $text_autoLinks, + 'Text.email' => $params->text_autoLinks, //Простановка переносов строк - 'Text.breakline' => $text_paragraphs, + 'Text.breakline' => $params->text_paragraphs, //Удаление повторяющихся слов 'Text.no_repeat_words' => 'off', //Преобразовывать html-сущности в юникод - 'Etc.unicode_convert' => $etc_unicodeConvert, + 'Etc.unicode_convert' => $params->etc_unicodeConvert, //Использовать символ « » вместо тегов для связывания 'Etc.nobr_to_nbsp' => $etc_nobr_to_nbsp, //Разбиение числа на триады («10000» → «10 000») 'Etc.split_number_to_triads' => 'on' ]); - $ddTypograph->set_text($text); + $ddTypograph->set_text($params->text); //Типографируем - $text = $ddTypograph->apply(); + $params->text = $ddTypograph->apply(); } -return $text; +return $params->text; ?> \ No newline at end of file From 31dca42c2258d16cb22661d4272b31721dd36746 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 17:11:10 +0300 Subject: [PATCH 3/8] * Refactoring: All includes in one place. --- ddTypograph_snippet.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 608f2db..2bfad0c 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -10,6 +10,19 @@ * @copyright 2010–2020 DD Group {@link https://DivanDesign.biz } */ +//Include (MODX)EvolutionCMS.libraries.ddTools +require_once( + $modx->getConfig('base_path') . + 'assets/libs/ddTools/modx.ddtools.class.php' +); + +//Include PHP.libraries.EMT +require_once( + $modx->getConfig('base_path') . + 'assets/snippets/ddTypograph/EMT.php' +); + + //Renaming params with backward compatibility $params = \ddTools::verifyRenamedParams([ 'params' => $params, @@ -51,21 +64,9 @@ ); if (!isset($ddTypograph)){ - //Подключаем EMT типограф - require_once( - $modx->getConfig('base_path') . - 'assets/snippets/ddTypograph/EMT.php' - ); - $ddTypograph = new EMTypograph(); } - //Include (MODX)EvolutionCMS.libraries.ddTools - require_once( - $modx->getConfig('base_path') . - 'assets/libs/ddTools/modx.ddtools.class.php' - ); - //Safe tags $params->excludeTags = explode( ',', From 2ca7f497a71c7ce84756a79b2728fa0842a749be Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 17:29:20 +0300 Subject: [PATCH 4/8] * Refactoring. --- ddTypograph_snippet.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 2bfad0c..122644d 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -52,15 +52,19 @@ ] ]); + +$snippetResult = $params->text; + + //Если есть что типографировать -if (strlen($params->text) > 4){ +if (strlen($snippetResult) > 4){ global $ddTypograph; //Заменим кавычки, вставленные через спец. символы на обычные (а то не обрабатываются в библиотеке) - $params->text = str_replace( + $snippetResult = str_replace( '"', '"', - $params->text + $snippetResult ); if (!isset($ddTypograph)){ @@ -82,7 +86,7 @@ //We don't need anything with default EMT tag if ($excludeTags_item != 'notg'){ //Wrap - $params->text = str_ireplace( + $snippetResult = str_ireplace( [ //Tag start '<' . $excludeTags_item, @@ -95,7 +99,7 @@ //Tag end '' ], - $params->text + $snippetResult ); } } @@ -308,11 +312,11 @@ 'Etc.split_number_to_triads' => 'on' ]); - $ddTypograph->set_text($params->text); + $ddTypograph->set_text($snippetResult); //Типографируем - $params->text = $ddTypograph->apply(); + $snippetResult = $ddTypograph->apply(); } -return $params->text; +return $snippetResult; ?> \ No newline at end of file From 5362fd2a55452464781eea79d7dc7089d8bd7f58 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 17:31:11 +0300 Subject: [PATCH 5/8] * Refactoring. --- ddTypograph_snippet.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 122644d..3811bf1 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -52,6 +52,11 @@ ] ]); +$params->excludeTags = explode( + ',', + strtolower($params->excludeTags) +); + $snippetResult = $params->text; @@ -72,11 +77,6 @@ } //Safe tags - $params->excludeTags = explode( - ',', - strtolower($params->excludeTags) - ); - foreach ( $params->excludeTags as $excludeTags_item From ccf3d565cb7d199537d9a3f2002ab6704db9bfb8 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 17:34:10 +0300 Subject: [PATCH 6/8] =?UTF-8?q?+=20README=20=E2=86=92=20Links.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- README_ru.md | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c54c48..c46a79e 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,11 @@ The snippet doesn’t use third-party services, also it sends no requests. In ot ``` -## [Home page →](https://code.divandesign.biz/modx/ddtypograph) +## Links + +* [Home page](https://code.divandesign.biz/modx/ddtypograph) +* [Telegram chat](https://t.me/dd_code) +* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddtypograph) \ No newline at end of file diff --git a/README_ru.md b/README_ru.md index e549ef7..48cc956 100644 --- a/README_ru.md +++ b/README_ru.md @@ -120,7 +120,11 @@ ``` -## [Home page →](https://code.divandesign.biz/modx/ddtypograph) +## Ссылки + +* [Home page](https://code.divandesign.ru/modx/ddtypograph) +* [Telegram chat](https://t.me/dd_code) +* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddtypograph) \ No newline at end of file From 2e3bc454d67e6b8d4370b22d802f2c9053290c1f Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 18:04:44 +0300 Subject: [PATCH 7/8] + You can just call `\DDTools\Snippet::runSnippet` to run the snippet without DB and eval. + `\ddDomainComparator\Snippet`: The new class. All snippet code was moved here. --- README.md | 27 ++++ README_ru.md | 27 ++++ ddTypograph_snippet.php | 307 +------------------------------------- require.php | 15 ++ src/Snippet.php | 322 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 395 insertions(+), 303 deletions(-) create mode 100644 require.php create mode 100644 src/Snippet.php diff --git a/README.md b/README.md index c46a79e..18f521c 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,33 @@ The snippet doesn’t use third-party services, also it sends no requests. In ot ``` +#### Run the snippet through `\DDTools\Snippet::runSnippet` without DB and eval + +```php +\DDTools\Snippet::runSnippet([ + 'name' => 'ddTypograph', + 'params' => [ + 'text' => " + There's nothing you can do that can't be done + Nothing you can sing that can't be sung + + https://en.wikipedia.org/wiki/The_Beatles + ", + 'text_paragraphs' => true, + 'text_autoLinks' => true + ] +]); +``` + +Returns: + +``` +

There’s nothing you can do that can’t be done
+Nothing you can sing that can’t be sung

+

en.wikipedia.org/wiki/The_Beatles

+``` + + ## Links * [Home page](https://code.divandesign.biz/modx/ddtypograph) diff --git a/README_ru.md b/README_ru.md index 48cc956..6634c87 100644 --- a/README_ru.md +++ b/README_ru.md @@ -120,6 +120,33 @@ ``` +#### Запустить сниппет без DB и eval через `\DDTools\Snippet::runSnippet` + +```php +\DDTools\Snippet::runSnippet([ + 'name' => 'ddTypograph', + 'params' => [ + 'text' => " + There's nothing you can do that can't be done + Nothing you can sing that can't be sung + + https://ru.wikipedia.org/wiki/The_Beatles + ", + 'text_paragraphs' => true, + 'text_autoLinks' => true + ] +]); +``` + +Вернёт: + +``` +

There’s nothing you can do that can’t be done
+Nothing you can sing that can’t be sung

+

en.wikipedia.org/wiki/The_Beatles

+``` + + ## Ссылки * [Home page](https://code.divandesign.ru/modx/ddtypograph) diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 3811bf1..3472db1 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -14,309 +14,10 @@ require_once( $modx->getConfig('base_path') . 'assets/libs/ddTools/modx.ddtools.class.php' -); - -//Include PHP.libraries.EMT -require_once( - $modx->getConfig('base_path') . - 'assets/snippets/ddTypograph/EMT.php' -); - - -//Renaming params with backward compatibility -$params = \ddTools::verifyRenamedParams([ - 'params' => $params, - 'compliance' => [ - 'optAlign' => 'OptAlign', - 'text_paragraphs' => 'Text_paragraphs', - 'text_autoLinks' => 'Text_autoLinks', - 'etc_unicodeConvert' => 'Etc_unicodeConvert' - ], - 'returnCorrectedOnly' => false -]); - -//Defaults -$params = \DDTools\ObjectTools::extend([ - 'objects' => [ - (object) [ - //Required - 'text' => '', - 'optAlign' => false, - 'text_paragraphs' => false, - 'text_autoLinks' => false, - 'etc_unicodeConvert' => true, - 'noTags' => false, - 'excludeTags' => 'notg,code' - ], - $params - ] -]); - -$params->excludeTags = explode( - ',', - strtolower($params->excludeTags) -); - - -$snippetResult = $params->text; - - -//Если есть что типографировать -if (strlen($snippetResult) > 4){ - global $ddTypograph; - - //Заменим кавычки, вставленные через спец. символы на обычные (а то не обрабатываются в библиотеке) - $snippetResult = str_replace( - '"', - '"', - $snippetResult ); - - if (!isset($ddTypograph)){ - $ddTypograph = new EMTypograph(); - } - - //Safe tags - foreach ( - $params->excludeTags as - $excludeTags_item - ){ - $excludeTags_item = trim($excludeTags_item); - - //We don't need anything with default EMT tag - if ($excludeTags_item != 'notg'){ - //Wrap - $snippetResult = str_ireplace( - [ - //Tag start - '<' . $excludeTags_item, - //Tag end - '' - ], - [ - //Tag start - '<' . $excludeTags_item, - //Tag end - '' - ], - $snippetResult - ); - } - } - - //Если нельзя добавлять теги к тексту - if ($params->noTags){ -// $noTags = 'off'; - - $params->optAlign = 'off'; - $params->text_paragraphs = 'off'; - $params->text_autoLinks = 'off'; - - $etc_nobr_to_nbsp = 'on'; - }else{ -// $noTags = 'on'; - - $params->optAlign = - $params->optAlign ? - 'on' : - 'off' - ; - $params->text_paragraphs = - $params->text_paragraphs ? - 'on' : - 'off' - ; - $params->text_autoLinks = - $params->text_autoLinks ? - 'on' : - 'off' - ; - - $etc_nobr_to_nbsp = 'off'; - } - - $params->etc_unicodeConvert = - $params->etc_unicodeConvert ? - 'on' : - 'off' - ; - - $ddTypograph->setup([ - //Расстановка «кавычек-елочек» первого уровня - 'Quote.quotes' => 'on', - //Внутренние кавычки-лапки - 'Quote.quotation' => 'on', - - //Автоматическая простановка дефисов в обезличенных местоимениях и междометиях - 'Dash.to_libo_nibud' => 'on', - //Расстановка дефисов между «из-за», «из-под» - 'Dash.iz_za_pod' => 'on', - //Расстановка дефисов перед «-ка», «-де», «-кась». - 'Dash.ka_de_kas' => 'on', - - //Привязка союзов и предлогов к написанным после словам - 'Nobr.super_nbsp' => 'on', - //Привязка союзов и предлогов к предыдущим словам в случае конца предложения - 'Nobr.nbsp_in_the_end' => 'on', - //TODO: работает плоховато (в «+7 777 777 77 77» ставит неразнывные пробелы только в двух первых случаях), обсудить с Евгением - //Объединение в неразрывные конструкции номеров телефонов -// 'Nobr.phone_builder' => $noTags, - 'Nobr.phone_builder' => 'on', - //Дополнительный формат номеров телефонов («+7(123)1234567» → «+7 123 123-45-67») -// 'Nobr.phone_builder_v2' => $noTags, - 'Nobr.phone_builder_v2' => 'on', - //Объединение IP-адресов. - 'Nobr.ip_address' => 'off', - //Привязка инициалов к фамилиям («Иванов И. И.» → «Иванов И. И.») -// 'Nobr.spaces_nobr_in_surname_abbr' => $noTags, - 'Nobr.spaces_nobr_in_surname_abbr' => 'on', - //Расстановка точек у инициалов («Иванов И И» | «Иванов ИИ» → «Иванов И. И.») -// 'Nobr.dots_for_surname_abbr' => $noTags, - 'Nobr.dots_for_surname_abbr' => 'on', - //TODO: Не работает (по крайней мере, не удалось увидеть работу) - //Привязка градусов к числу - 'Nobr.nbsp_celcius' => 'on', - //TODO: Параметр не ясен - //Обрамление пятисимвольных слов разделенных дефисом в неразрывные блоки - 'Nobr.hyphen_nowrap_in_small_words' => 'off', - //Отмена переноса слова с дефисом -// 'Nobr.hyphen_nowrap' => $noTags, - 'Nobr.hyphen_nowrap' => 'on', - //TODO: Тег «nobr» невалидный, а для «word-spacing» нет значения «nowrap», нужно использовать свойство «white-space». - //Использовать nowrap для неразрывных конструкций - 'Nobr.nowrap' => 'on', - - //Замена «(tm)» на символ торговой марки «™» - 'Symbol.tm_replace' => 'on', - //Замена «(r)» на символ зарегистрированной торговой марки «®» - 'Symbol.r_sign_replace' => 'on', - //Замена «(c)» на символ копирайта «©» - 'Symbol.copy_replace' => 'on', - //Расстановка правильного апострофа в текстах - 'Symbol.apostrophe' => 'on', - //TODO: Параметр не ясен - //Градусы по Фаренгейту - 'Symbol.degree_f' => 'on', - //TODO: Не срабатывает в конце предложения - //Замена стрелок «<-» и «->» на символы «←» и «→» - 'Symbol.arrows_symbols' => 'on', - //TODO: Параметр не ясен - //Расстановка дюйма после числа - 'Symbol.no_inches' => 'on', - - //Расстановка запятых перед «а» и «но» - 'Punctmark.auto_comma' => 'on', - //Замена трех точек на знак многоточия («...» → «…») - 'Punctmark.hellip' => 'on', - //Замена сдвоенных знаков препинания на одинарные - 'Punctmark.fix_pmarks' => 'on', - //Замена восклицательного и вопросительного знаков местами - 'Punctmark.fix_excl_quest_marks' => 'on', - //Точка в конце текста, если её там нет - 'Punctmark.dot_on_end' => 'off', - - //Расстановка знака минус между числами - 'Number.minus_between_nums' => 'on', - //TODO: Параметр не ясен - //Расстановка знака минус между диапозоном чисел - 'Number.minus_in_numbers_range' => 'off', - //Замена «x» (и по-русски и по-английски) на символ «×» в размерных единицах - 'Number.auto_times_x' => 'on', - //Замена дробей на соответствующие символы («1/2» → «½», «1/4» → «⅓», «3/4» → «¼») - 'Number.simple_fraction' => 'off', - //Математические знаки больше или равно/меньше или равно/плюс минус/неравно («>=» → «≥», «<=» → «≤», «+-» → «±», «!=» → «≠») - 'Number.math_chars' => 'on', - //Объединение триад чисел полупробелом (не разбивает на триады, просто заменяет обычный пробел на полупробел) - 'Number.thinsp_between_number_triads' => 'on', - //Пробел между символом номера и числом - 'Number.thinsp_between_no_and_number' => 'on', - //Пробел между символом параграфа и числом - 'Number.thinsp_between_sect_and_number' => 'on', - - //TODO: Параметр не ясен - //Установка тире и пробельных символов в периодах дат - 'Date.years' => 'on', - //Расстановка тире и объединение в неразрывные периоды месяцев - 'Date.mdash_month_interval' => 'off', - //Расстановка тире и объединение в неразрывные периоды дней - 'Date.nbsp_and_dash_month_interval' => 'off', - //Привязка года к дате (« 01.01.2015г.» → « 01.01.2015 г.») - 'Date.nobr_year_in_date' => 'on', - - //Удаление лишних пробельных символов и табуляций - 'Space.many_spaces_to_one' => 'on', - //Удаление пробела перед символом процента - 'Space.clear_percent' => 'on', - //Удаление пробелов перед и после знаков препинания в предложении - 'Space.clear_before_after_punct' => 'on', - //Расстановка пробелов после знаков препинания - 'Space.autospace_after' => 'on', - //Удаление пробелов внутри скобок, а также расстановка пробела перед скобками - 'Space.bracket_fix' => 'on', - - //Форматирование денежных сокращений (расстановка пробелов и привязка названия валюты к числу) - 'Abbr.nbsp_money_abbr' => 'on', - //Объединение сокращений «и т. д.», «и т. п.», «в т. ч.» -// 'Abbr.nobr_vtch_itd_itp' => $noTags, - 'Abbr.nobr_vtch_itd_itp' => 'on', - //Расстановка пробелов перед сокращениями «см.», «им.» - 'Abbr.nobr_sm_im' => 'on', - //Расстановка пробелов перед сокращениями «гл.», «стр.», «рис.», «илл.», «ст.», «п.» - 'Abbr.nobr_acronym' => 'on', - //Расстановка пробелов в сокращениях «г.», «ул.», «пер.», «д.» - 'Abbr.nobr_locations' => 'on', - //Расстановка пробелов перед сокращениями «dpi», «lpi» - 'Abbr.nobr_abbreviation' => 'on', - //Объединение сокращений «P.S.», «P.P.S.» -// 'Abbr.ps_pps' => $noTags, - 'Abbr.ps_pps' => 'on', - //Привязка сокращений форм собственности к названиям организаций - 'Abbr.nbsp_org_abbr' => 'on', - //Привязка аббревиатуры «ГОСТ» к номеру -// 'Abbr.nobr_gost' => $noTags, - 'Abbr.nobr_gost' => 'on', - //Установка пробельных символов в сокращении вольт - 'Abbr.nobr_before_unit_volt' => 'on', - //Замена символов и привязка сокращений в размерных величинах («м», «см», «м2», …) - 'Abbr.nbsp_before_unit' => 'on', - - //TODO: Разобраться, что это за параметр и какие значения он может принимать - //Все настройки оптического выравнивания -// 'OptAlign.all' => 'off', - //Оптическое выравнивание открывающей кавычки - 'OptAlign.oa_oquote' => $params->optAlign, - //Оптическое выравнивание для пунктуации (скобка и запятая) - 'OptAlign.oa_obracket_coma' => $params->optAlign, - //TODO: Параметр не ясен - //Оптическое выравнивание кавычки - 'OptAlign.oa_oquote_extra' => $params->optAlign, - //Inline стили или CSS-классы - 'OptAlign.layout' => 'style', - - //Простановка параграфов - 'Text.paragraphs' => $params->text_paragraphs, - //Выделение ссылок из текста - 'Text.auto_links' => $params->text_autoLinks, - //Выделение электронной почты из текста - 'Text.email' => $params->text_autoLinks, - //Простановка переносов строк - 'Text.breakline' => $params->text_paragraphs, - //Удаление повторяющихся слов - 'Text.no_repeat_words' => 'off', - - //Преобразовывать html-сущности в юникод - 'Etc.unicode_convert' => $params->etc_unicodeConvert, - //Использовать символ « » вместо тегов для связывания - 'Etc.nobr_to_nbsp' => $etc_nobr_to_nbsp, - //Разбиение числа на триады («10000» → «10 000») - 'Etc.split_number_to_triads' => 'on' - ]); - - $ddTypograph->set_text($snippetResult); - - //Типографируем - $snippetResult = $ddTypograph->apply(); -} -return $snippetResult; +return \DDTools\Snippet::runSnippet([ + 'name' => 'ddTypograph', + 'params' => $params +]); ?> \ No newline at end of file diff --git a/require.php b/require.php new file mode 100644 index 0000000..6355602 --- /dev/null +++ b/require.php @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/src/Snippet.php b/src/Snippet.php new file mode 100644 index 0000000..a2b9cd0 --- /dev/null +++ b/src/Snippet.php @@ -0,0 +1,322 @@ + '', + 'optAlign' => false, + 'text_paragraphs' => false, + 'text_autoLinks' => false, + 'etc_unicodeConvert' => true, + 'noTags' => false, + 'excludeTags' => 'notg,code' + ], + + $paramsTypes = [ + 'optAlign' => 'boolean', + 'text_paragraphs' => 'boolean', + 'text_autoLinks' => 'boolean', + 'etc_unicodeConvert' => 'boolean', + 'noTags' => 'boolean' + ], + + $renamedParamsCompliance = [ + 'optAlign' => 'OptAlign', + 'text_paragraphs' => 'Text_paragraphs', + 'text_autoLinks' => 'Text_autoLinks', + 'etc_unicodeConvert' => 'Etc_unicodeConvert' + ] + ; + + /** + * prepareParams + * @version 1.0 (2021-03-29) + * + * @param $params {stdClass|arrayAssociative|stringJsonObject|stringQueryFormatted} + * + * @return {void} + */ + protected function prepareParams($params = []){ + //Call base method + parent::prepareParams($params); + + $this->params->excludeTags = explode( + ',', + strtolower($this->params->excludeTags) + ); + } + + /** + * run + * @version 1.0 (2021-03-29) + * + * @return {string} + */ + public function run(){ + //The snippet must return an empty string even if result is absent + $result = $this->params->text; + + //Если есть что типографировать + if (strlen($result) > 4){ + global $ddTypograph; + + //Заменим кавычки, вставленные через спец. символы на обычные (а то не обрабатываются в библиотеке) + $result = str_replace( + '"', + '"', + $result + ); + + if (!isset($ddTypograph)){ + $ddTypograph = new \EMTypograph(); + } + + //Safe tags + foreach ( + $this->params->excludeTags as + $excludeTags_item + ){ + $excludeTags_item = trim($excludeTags_item); + + //We don't need anything with default EMT tag + if ($excludeTags_item != 'notg'){ + //Wrap + $result = str_ireplace( + [ + //Tag start + '<' . $excludeTags_item, + //Tag end + '' + ], + [ + //Tag start + '<' . $excludeTags_item, + //Tag end + '' + ], + $result + ); + } + } + + //Если нельзя добавлять теги к тексту + if ($this->params->noTags){ +// $noTags = 'off'; + + $this->params->optAlign = 'off'; + $this->params->text_paragraphs = 'off'; + $this->params->text_autoLinks = 'off'; + + $etc_nobr_to_nbsp = 'on'; + }else{ +// $noTags = 'on'; + + $this->params->optAlign = + $this->params->optAlign ? + 'on' : + 'off' + ; + $this->params->text_paragraphs = + $this->params->text_paragraphs ? + 'on' : + 'off' + ; + $this->params->text_autoLinks = + $this->params->text_autoLinks ? + 'on' : + 'off' + ; + + $etc_nobr_to_nbsp = 'off'; + } + + $this->params->etc_unicodeConvert = + $this->params->etc_unicodeConvert ? + 'on' : + 'off' + ; + + $ddTypograph->setup([ + //Расстановка «кавычек-елочек» первого уровня + 'Quote.quotes' => 'on', + //Внутренние кавычки-лапки + 'Quote.quotation' => 'on', + + //Автоматическая простановка дефисов в обезличенных местоимениях и междометиях + 'Dash.to_libo_nibud' => 'on', + //Расстановка дефисов между «из-за», «из-под» + 'Dash.iz_za_pod' => 'on', + //Расстановка дефисов перед «-ка», «-де», «-кась». + 'Dash.ka_de_kas' => 'on', + + //Привязка союзов и предлогов к написанным после словам + 'Nobr.super_nbsp' => 'on', + //Привязка союзов и предлогов к предыдущим словам в случае конца предложения + 'Nobr.nbsp_in_the_end' => 'on', + //TODO: работает плоховато (в «+7 777 777 77 77» ставит неразнывные пробелы только в двух первых случаях), обсудить с Евгением + //Объединение в неразрывные конструкции номеров телефонов +// 'Nobr.phone_builder' => $noTags, + 'Nobr.phone_builder' => 'on', + //Дополнительный формат номеров телефонов («+7(123)1234567» → «+7 123 123-45-67») +// 'Nobr.phone_builder_v2' => $noTags, + 'Nobr.phone_builder_v2' => 'on', + //Объединение IP-адресов. + 'Nobr.ip_address' => 'off', + //Привязка инициалов к фамилиям («Иванов И. И.» → «Иванов И. И.») +// 'Nobr.spaces_nobr_in_surname_abbr' => $noTags, + 'Nobr.spaces_nobr_in_surname_abbr' => 'on', + //Расстановка точек у инициалов («Иванов И И» | «Иванов ИИ» → «Иванов И. И.») +// 'Nobr.dots_for_surname_abbr' => $noTags, + 'Nobr.dots_for_surname_abbr' => 'on', + //TODO: Не работает (по крайней мере, не удалось увидеть работу) + //Привязка градусов к числу + 'Nobr.nbsp_celcius' => 'on', + //TODO: Параметр не ясен + //Обрамление пятисимвольных слов разделенных дефисом в неразрывные блоки + 'Nobr.hyphen_nowrap_in_small_words' => 'off', + //Отмена переноса слова с дефисом +// 'Nobr.hyphen_nowrap' => $noTags, + 'Nobr.hyphen_nowrap' => 'on', + //TODO: Тег «nobr» невалидный, а для «word-spacing» нет значения «nowrap», нужно использовать свойство «white-space». + //Использовать nowrap для неразрывных конструкций + 'Nobr.nowrap' => 'on', + + //Замена «(tm)» на символ торговой марки «™» + 'Symbol.tm_replace' => 'on', + //Замена «(r)» на символ зарегистрированной торговой марки «®» + 'Symbol.r_sign_replace' => 'on', + //Замена «(c)» на символ копирайта «©» + 'Symbol.copy_replace' => 'on', + //Расстановка правильного апострофа в текстах + 'Symbol.apostrophe' => 'on', + //TODO: Параметр не ясен + //Градусы по Фаренгейту + 'Symbol.degree_f' => 'on', + //TODO: Не срабатывает в конце предложения + //Замена стрелок «<-» и «->» на символы «←» и «→» + 'Symbol.arrows_symbols' => 'on', + //TODO: Параметр не ясен + //Расстановка дюйма после числа + 'Symbol.no_inches' => 'on', + + //Расстановка запятых перед «а» и «но» + 'Punctmark.auto_comma' => 'on', + //Замена трех точек на знак многоточия («...» → «…») + 'Punctmark.hellip' => 'on', + //Замена сдвоенных знаков препинания на одинарные + 'Punctmark.fix_pmarks' => 'on', + //Замена восклицательного и вопросительного знаков местами + 'Punctmark.fix_excl_quest_marks' => 'on', + //Точка в конце текста, если её там нет + 'Punctmark.dot_on_end' => 'off', + + //Расстановка знака минус между числами + 'Number.minus_between_nums' => 'on', + //TODO: Параметр не ясен + //Расстановка знака минус между диапозоном чисел + 'Number.minus_in_numbers_range' => 'off', + //Замена «x» (и по-русски и по-английски) на символ «×» в размерных единицах + 'Number.auto_times_x' => 'on', + //Замена дробей на соответствующие символы («1/2» → «½», «1/4» → «⅓», «3/4» → «¼») + 'Number.simple_fraction' => 'off', + //Математические знаки больше или равно/меньше или равно/плюс минус/неравно («>=» → «≥», «<=» → «≤», «+-» → «±», «!=» → «≠») + 'Number.math_chars' => 'on', + //Объединение триад чисел полупробелом (не разбивает на триады, просто заменяет обычный пробел на полупробел) + 'Number.thinsp_between_number_triads' => 'on', + //Пробел между символом номера и числом + 'Number.thinsp_between_no_and_number' => 'on', + //Пробел между символом параграфа и числом + 'Number.thinsp_between_sect_and_number' => 'on', + + //TODO: Параметр не ясен + //Установка тире и пробельных символов в периодах дат + 'Date.years' => 'on', + //Расстановка тире и объединение в неразрывные периоды месяцев + 'Date.mdash_month_interval' => 'off', + //Расстановка тире и объединение в неразрывные периоды дней + 'Date.nbsp_and_dash_month_interval' => 'off', + //Привязка года к дате (« 01.01.2015г.» → « 01.01.2015 г.») + 'Date.nobr_year_in_date' => 'on', + + //Удаление лишних пробельных символов и табуляций + 'Space.many_spaces_to_one' => 'on', + //Удаление пробела перед символом процента + 'Space.clear_percent' => 'on', + //Удаление пробелов перед и после знаков препинания в предложении + 'Space.clear_before_after_punct' => 'on', + //Расстановка пробелов после знаков препинания + 'Space.autospace_after' => 'on', + //Удаление пробелов внутри скобок, а также расстановка пробела перед скобками + 'Space.bracket_fix' => 'on', + + //Форматирование денежных сокращений (расстановка пробелов и привязка названия валюты к числу) + 'Abbr.nbsp_money_abbr' => 'on', + //Объединение сокращений «и т. д.», «и т. п.», «в т. ч.» +// 'Abbr.nobr_vtch_itd_itp' => $noTags, + 'Abbr.nobr_vtch_itd_itp' => 'on', + //Расстановка пробелов перед сокращениями «см.», «им.» + 'Abbr.nobr_sm_im' => 'on', + //Расстановка пробелов перед сокращениями «гл.», «стр.», «рис.», «илл.», «ст.», «п.» + 'Abbr.nobr_acronym' => 'on', + //Расстановка пробелов в сокращениях «г.», «ул.», «пер.», «д.» + 'Abbr.nobr_locations' => 'on', + //Расстановка пробелов перед сокращениями «dpi», «lpi» + 'Abbr.nobr_abbreviation' => 'on', + //Объединение сокращений «P.S.», «P.P.S.» +// 'Abbr.ps_pps' => $noTags, + 'Abbr.ps_pps' => 'on', + //Привязка сокращений форм собственности к названиям организаций + 'Abbr.nbsp_org_abbr' => 'on', + //Привязка аббревиатуры «ГОСТ» к номеру +// 'Abbr.nobr_gost' => $noTags, + 'Abbr.nobr_gost' => 'on', + //Установка пробельных символов в сокращении вольт + 'Abbr.nobr_before_unit_volt' => 'on', + //Замена символов и привязка сокращений в размерных величинах («м», «см», «м2», …) + 'Abbr.nbsp_before_unit' => 'on', + + //TODO: Разобраться, что это за параметр и какие значения он может принимать + //Все настройки оптического выравнивания +// 'OptAlign.all' => 'off', + //Оптическое выравнивание открывающей кавычки + 'OptAlign.oa_oquote' => $this->params->optAlign, + //Оптическое выравнивание для пунктуации (скобка и запятая) + 'OptAlign.oa_obracket_coma' => $this->params->optAlign, + //TODO: Параметр не ясен + //Оптическое выравнивание кавычки + 'OptAlign.oa_oquote_extra' => $this->params->optAlign, + //Inline стили или CSS-классы + 'OptAlign.layout' => 'style', + + //Простановка параграфов + 'Text.paragraphs' => $this->params->text_paragraphs, + //Выделение ссылок из текста + 'Text.auto_links' => $this->params->text_autoLinks, + //Выделение электронной почты из текста + 'Text.email' => $this->params->text_autoLinks, + //Простановка переносов строк + 'Text.breakline' => $this->params->text_paragraphs, + //Удаление повторяющихся слов + 'Text.no_repeat_words' => 'off', + + //Преобразовывать html-сущности в юникод + 'Etc.unicode_convert' => $this->params->etc_unicodeConvert, + //Использовать символ « » вместо тегов для связывания + 'Etc.nobr_to_nbsp' => $etc_nobr_to_nbsp, + //Разбиение числа на триады («10000» → «10 000») + 'Etc.split_number_to_triads' => 'on' + ]); + + $ddTypograph->set_text($result); + + //Типографируем + $result = $ddTypograph->apply(); + } + + return $result; + } +} \ No newline at end of file From 4774ecee7acfcdaa2eb4d3ea0593efe91cd60b3e Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Mon, 29 Mar 2021 19:20:38 +0300 Subject: [PATCH 8/8] Prerelease --- CHANGELOG.md | 12 ++++++++++++ CHANGELOG_ru.md | 12 ++++++++++++ README.md | 2 +- README_ru.md | 2 +- composer.json | 2 +- ddTypograph_snippet.php | 4 ++-- src/Snippet.php | 2 +- 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b24aec4..683bce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # (MODX)EvolutionCMS.snippets.ddTypograph changelog +## Version 2.5 (2021-03-29) +* \* Attention! PHP >= 5.6 is required. +* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.48.1 is required. +* \+ You can just call `\DDTools\Snippet::runSnippet` to run the snippet without DB and eval (see README → Examples). +* \+ `\ddDomainComparator\Snippet`: The new class. All snippet code was moved here. +* \+ README → Links. +* \* Composer.json: + * \+ `homepage` + * \+ `authors`. + * \* `require` → `dd/evolutioncms-libraries-ddtools`: Renamed from `dd/modxevo-library-ddtools`. + + ## Version 2.4.2 (2020-05-06) * \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.32 is required. * \* Compatibility with (MODX)EvolutionCMS.libraries.ddTools >= 0.32. diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md index 21c45bb..d71708b 100644 --- a/CHANGELOG_ru.md +++ b/CHANGELOG_ru.md @@ -1,6 +1,18 @@ # (MODX)EvolutionCMS.snippets.ddTypograph changelog +## Version 2.5 (2021-03-29) +* \* Внимание! Требуется PHP >= 5.6. +* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.48.1. +* \+ Запустить сниппет без DB и eval можно через `\DDTools\Snippet::runSnippet` (см. примеры в README). +* \+ `\ddTypograph\Snippet`: Новый класс. Весь код сниппета перенесён туда. +* \+ README → Ссылки. +* \* Composer.json: + * \+ `homepage` + * \+ `authors`. + * \* `require` → `dd/evolutioncms-libraries-ddtools`: Переименовано из `dd/modxevo-library-ddtools`. + + ## Версия 2.4.2 (2020-05-06) * \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.32. * \* Совместимость с (MODX)EvolutionCMS.libraries.ddTools >= 0.32. diff --git a/README.md b/README.md index 18f521c..6362ec9 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The snippet doesn’t use third-party services, also it sends no requests. In ot #### 1. Elements → Snippets: Create a new snippet with the following data 1. Snippet name: `ddTypograph`. -2. Description: `2.4.2 Snippet for text typography. The snippet doesn’t use third-party services, also it sends no requests. In other words, everything is performed on your server.`. +2. Description: `2.5 Snippet for text typography. The snippet doesn’t use third-party services, also it sends no requests. In other words, everything is performed on your server.`. 3. Category: `Core`. 4. Parse DocBlock: `no`. 5. Snippet code (php): Insert content of the `ddTypograph_snippet.php` file from the archive. diff --git a/README_ru.md b/README_ru.md index 6634c87..f55526d 100644 --- a/README_ru.md +++ b/README_ru.md @@ -19,7 +19,7 @@ #### 1. Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами 1. Название сниппета: `ddTypograph`. -2. Описание: `2.4.2 Сниппет типографирует текст. Не использует сторонних сервисов, не отправляет никаких запросов, всё делается прямо у вас на сервере.`. +2. Описание: `2.5 Сниппет типографирует текст. Не использует сторонних сервисов, не отправляет никаких запросов, всё делается прямо у вас на сервере.`. 3. Категория: `Core`. 4. Анализировать DocBlock: `no`. 5. Код сниппета (php): Вставьте содержимое файла `ddTypograph_snippet.php` из архива. diff --git a/composer.json b/composer.json index 0069ec5..99a6891 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "dd/evolutioncms-snippets-ddtypograph", "type": "modxevo-snippet", - "version": "2.4.2", + "version": "2.5.0", "description": "Snippet for text typography. The snippet doesn't use third-party services, also it sends no requests. In other words, everything is performed on your server.", "keywords": [ "modx", diff --git a/ddTypograph_snippet.php b/ddTypograph_snippet.php index 3472db1..c30a90a 100644 --- a/ddTypograph_snippet.php +++ b/ddTypograph_snippet.php @@ -1,13 +1,13 @@