emuravjev / mdash Goto Github PK
View Code? Open in Web Editor NEWMuravjev Typograph
Home Page: mdash.ru
License: Other
Muravjev Typograph
Home Page: mdash.ru
License: Other
EMT.php: 720-723
$ret['map'] = $test['params']['map'];
$ret['disable'] = $test['params']['map_disable'];
$ret['strict'] = $test['params']['map_strict'];
$test['params']['maps'] = array($ret);
Типограф обрабатывает ldquo но игнорирует rdquo, в результате при обработке текста добавленного на сайт через tinymce получаласть конструкция [«В пролете"], локально исправил добавлением в массив EMT_Lib::$_charsTable['"']['html'] значения '”'
Скачал типограф, дописал в него namespace app\components;
При попытке типографировать лезут ошибки
Invalid argument supplied for foreach() EMTypograph.php #3063
foreach($tret_obj->rules as $rulename => $v)
Всем привет! Если у кого-то есть время и желание, то у нас есть идея реализовать вот такой небольшой виджет http://cl.ly/image/371O3k2f0Z0I/o. Пользователь кладет в закладки браузера нужную ссылку и вызывая на любом сайте, может типографировать выделенный текст.
Здравствуйте!
Меня зовут Алексей, и я решил сделать расширение для UMI.CMS, использующее ваш Типограф.
В процессе разработки возникло несколько вопросов.
В чем суть: я решил сделать расширение максимально кастомизируемым, поэтому реализовал возможность пользовательской настройки всех его опций. В процессе тестирования работы опций, обратил внимание на некоторые несоответствия с тем-как-должно-быть:
Заметил, что опция "Quote.quotation" не реагирует на "off" - внутренние кавычки-лапки как проставлялись, так и продолжают проставляться, если активирована опция "Quote.quotes".
В целом, большинство (если не все) опций странно себя ведут внутри конструкции
. К примеру, если указать (и больше ничего), при этом опция "Text.email" будет включена, то на выходе не произойдет оборачивание указанного адреса в ссылку. Но если указать:Мой e-mail: [email protected]
, то типограф обернет адрес эл. почты в ссылку.Использую последнюю, на текущий момент, версию скрипта (3.5).
Буду благодарен за ответы.
--
С уважением,
Алексей Арендаренко
Здравствуйте!
Нашел довольно-таки интересное поведение, которое воспроизводится без проблем.
Итак, вот код:
$emt = new \EMTypograph();
$emt->settings['dounicode'] = 'on';
$emt->set_text("<p>test - \"test\"</p><p>\"test\" - test</p>");
echo $emt->apply() . PHP_EOL;
В результате работы этого кода будет выведено:
<p>test — «test»</p><p>"test" - test</p>
Как видно, второй абзац не обработался. Если эти абзацы разделить переносом строки \n
, то второй абзац будет обработан.
PHP Deprecated: Non-static method EMT_Lib::split_number() should not be called statically in EMT.php(1006) : eval()'d code on line 1
private function thereplcallback($m)
{
$x = "";
eval('$x = '.($this->thereplacement?$this->thereplacement:'""').';');
return $x;
}
Добрый день,
Обнаружил странное - если в типограф вставить фразу "Тарифы зон А и Б", то результат получается "Тарифы зон, А и Б". Откуда берется запятая, не очень ясно. Проверял в программе на php-классе, а также на странице http://mdash.ru/demo.html
Это можно как-нибудь исправить?
С уважением, Алексей
Здравствуйте!
Если этот текст пропустить через типограф (3.4), то кавычки после Мамы и Не все коту масленица не становятся елочками.
Где ты могла меня видеть?
В самом добром кино “Мамы”, в молодежном триллере “Закрытая школа” на СТС. А еще на сцене театра им. Вл. Маяковского в спектакле “Не все коту масленица”.
если скормить ему = или
Новая часть называется "<a href="/articles/finalhourshl/?page=3">Отличие Valve</a>":
типографируется в
Новая часть называется «Отличие Valve«:
В репозитории находится одновременно две версии EMT.py. В корне с 3000 строк кода, в src-py с 2000. Оставте только одну версию.
README.md
:
"To build EMT you need php version 5.2 or older. "
Did you mean "... or newer" ?
Прошу включить возможность автоматически нумеровать списки через ol/li. На php у меня отлично справляется следующий код (с регуляркой):
//Нумерование точками списков ul li
//$modx->log(1,$content);
if (!function_exists("convert_ul_li")) {
function convert_ul_li($matches) {
$text = preg_replace('/(?s)(?:<p>)*(?:\s+)(?:–|–|-|\*|•){1}\s+((?:(?!<\/br>|<br>|<\/p>).)*)\s*(<\/br>|<br>|<\/p>)+/iu', '<li>$1</li>', $matches[0]);
$text = "<ul>".$text."</ul>";
return $text;
}
}
$content = preg_replace_callback('/((?:\s*(<p>)*(\s+)(-){1}(\s+)(?:(?!<\/br>|<br>|<\/p>).)*\s*(<\/br>|<br>|<\/p>)+){2,})/iu', 'convert_ul_li', $content);
//Нумерование цифрами списков ol li
if (!function_exists("convert_ol_li")) {
function convert_ol_li($matches) {
$text = preg_replace('/(?s)(?:<(?:[^>]*)>)*\s*(?:\d+(?:\.|–|-)){1}(?:<(?:[^>]*)>)*(?:\s)+((?:(?!<br>).)*)(<\/br>|<br>)*/iu', '<li>$1</li>', $matches[0]);
$text = "<ol>".$text."</ol>";
return $text;
}
}
$content = preg_replace_callback('/(?s)((?:(<([^>]*)>)*(\s)*(\d+(\.|–|-)){1}(<\/([^>]*)>)*\s+(?:(?!<\/p>).)*(<\/br>|<br>)*){2,})/iu', 'convert_ol_li', $content);
У вас есть тест строки для проверки правил?
http://alexsuslov.github.io/emt/ - доки
https://github.com/alexsuslov/emt - исходники
Озвученное правило вызывает подобные эффекты:
В 2000 году ему предложили снять несколько серий детективного сериала «Черная комната» для канала РЕН ТВ.
Превращается в
В 2000 году ему предложили снять несколько серий детективного сериала «Черная комната» для канала РЕН Т.В.
Подскажите, как задать регулярное выражение для исключения элементов из обрабатываемого текста? к примеру,
exclude=!(((title|alt|href|src|value|action|name)=(\"|\')(.*?)(\"|\'))|(<pre(.*?)</pre>)|(<option(.*?)</option>))!ise
<!-- <tag/> -->
заменяется на <!-- <tag/> -→
По итогам вот этого вопроса: https://toster.ru/q/130977
Написано что в 2015 году уже фиксили проблему, но простой пример осыпается. :-(
$t = new \Emuravjev\Mdash\Typograph();
$t->add_safe_tag('code');
$t->set_text("<pre><code>text</code></pre>");
echo $t->apply();
Тикет из прошлого: #16
Пожалуйста, оформите документацию к Python-версии в соответствии с стандартом языка Python (docstrings), примеры лучше оформлять в виде doctests
def some_fun():
''' We do something here
We explain what do we do.
'''
Добавляются лишние пробелы в имена доменов
hl2.gamingsource.co.uk -> hl2. gamingsource. co.uk
showme.info -> showme. info
Framework.NET -> Framework. NET
В шаблоне '/([,]|[:]|[;]]){2,}/' лишняя "]".
Да и сам шаблон какой-то странный, думаю можно заменить на '/(,|:|;){2,}/'.
Но даже если убрать лишнюю скобку, то типограф начинает спотыкаться на
ЗАО «Фирма», или &;
получается
ЗАО «Фирма», или &
и тд и тп.
преобразует в :
и тд и т. п.
Смушает что как-то наполовину.
В тексте
"Проектирование молниезащиты с помощью ПО Model Studio CS Молниезащита"
нет инициалов, но они появляются
"Проектирование молниезащиты с помощью П. О. Model Studio C. S. Молниезащита"
«Текст«
Ожидание:
«<a href="#">Текст</a>»
Реальность:
«<a href="#">Текст</a>«
;)
Исходный код текущей версии типографа написан в кодировке UTF-8 (речь о версии на PHP). Разумеется, в нем присутствуют последовательности, состоящие более чем из одного байта. Это накладывает некоторые ограничения. Технически, самому типографу достаточно быть в однобайтной кодировке, чтобы обрабатывать тексты в UTF-8.
Пример ограничения: при создании модуля, в который включен типограф, для 1С-Битрикс мы столкнулись со следующей проблемой. При размещении модуля в Маркетплейсе (чтобы иметь возможность быстро обновлять его на всех обслуживаемых сайтах) весь исходный код перекодируется в CP-1251. Затем, при установке на сайт в UTF-8, Маркетплейс обратно перекодирует его. В результате те самые не-однобайтные последовательности превращаются в знаки вопроса, в том числе в регулярных выражениях.
Мое предложение: заменить все эти последовательности шестнадцатеричными кодами символов. Мне уже пришлось это сделать, так что я готов сделать fork и pull-request, если это необходимо.
Добрый день, обнаружилась некорректная работа типографа с кириллическими ссылками.
Метод: safe_sequences() https://github.com/emuravjev/mdash/blob/master/src-php/EMT.php#L329
Regexp: EMT_Lib::url_regex() https://github.com/emuravjev/mdash/blob/master/src-php/EMT.Lib.php#L704
При нахождении ссылки в тексте типа https://пример.укр, типограф возвращает пустую строку.
Проблему решает добавление модификатора u в regexp https://github.com/emuravjev/mdash/blob/master/src-php/EMT.Lib.php#L704
Здравствуйте!
Имеем: самописный сайт + redactor от Imperavi (http://imperavi.com/redactor/ ) + EMT.
Типограф вызываю при сохранении статьи, на сервере (не через Ajax запрос). Поймала следующий баг: если в статье есть ссылки вроде http://www.bolshoyvopros.ru/questions/693440-kogda-otmechaetsja-den-synovej-kakie-pozdravlenija-s-dnjom-synovej.html (обратите внимание на цифры и дефис после них), то типограф падает с ошибкой:
#8192
Non-static method EMT_Lib::split_number() should not be called statically, assuming $this from incompatible context
location
/хххх/хххх/htdocs/inc/EMT.php(1006) : eval'd code at line 1
Ставить апач и пхп, чтобы собрать либу немного громоздко :)
Из <h1>text</h1> получается <p><h1>text</h1></p>
https://github.com/emuravjev/mdash/blob/master/src-php/EMT.Lib.php#L200
$text = preg_replace_callback('/(\<\/?)([^<>]+?)(\>)/s', create_function('$m','return (strlen($m[1])==1 && substr(trim($m[2]), 0, 1) == \'-\' && substr(trim($m[2]), 1, 1) != \'-\')? $m[0] : $m[1].( substr(trim($m[2]), 0, 1) === "a" ? "%%___" : "" ) . EMT_Lib::encrypt_tag(trim($m[2])) . $m[3];'), $text);
Без create_function()
это раскрывается в:
$text = preg_replace_callback('/(\<\/?)([^<>]+?)(\>)/s', function ($m) {
return
(strlen($m[1])==1 && substr(trim($m[2]), 0, 1) == '-' && substr(trim($m[2]), 1, 1) != '-') ? $m[0] : $m[1]
.
( substr(trim($m[2]), 0, 1) === "a" ? "%%___" : "" )
.
EMT_Lib::encrypt_tag(trim($m[2]))
.
$m[3];
}, $text);
что вообще выглядит как ошибка: приоритет тернарного оператора ?:
ниже оператора .
и этот код выполняется как:
(strlen($m[1])==1 && substr(trim($m[2]), 0, 1) == '-' && substr(trim($m[2]), 1, 1) != '-')
? $m[0]
: ( $m[1] . ( substr(trim($m[2]), 0, 1) === "a" ? "%%___" : "" )... ) ;
То есть либо $m[0]
либо склеенная строка.
Все правильно?
Например:
Иван Иванов: ""Барселона" сегодня продемонстрировала футбол высшего класса.
На выходе из типографа:
Иван Иванов: «"Барселона» сегодня продемонстрировала футбол высшего класса.
При обработке "Форматирование денежных сокращений (расстановка пробелов и привязка названия валюты к числу)"
Блок "nbsp_money_abbr"
Ошибочно устанавливается денежная единица при этом нарушая целостность слова.
Пример:
До обработки типографа:
после 19.00 уехать от остановки
После:
после 19.00 у.е.хать от остановки
Как решение добавить в регулярку проверку на целостность слова.
"проблемная ссылка"
"а тут всё хорошо" и
и ещё одна ссылка для примера.
<a href="#" target="_blank">"проблемная ссылка"</a>
<a href="#" target="_blank">"а тут всё хорошо"</a> и
<a href="#" target="_blank">и ещё одна ссылка для примера</a>.
«проблемная ссылка»
«а тут всё хорошо» и
и ещё одна ссылка для примера.
<p><span style="margin-left:-0.44em;">«</span><a href="#" target="_blank">проблемная ссылка</a>»<br />
<span style="margin-left:-0.44em;">«</span><a href="#" target="_blank">а тут всё хорошо</a>» и<br />
<a href="#" target="_blank">и ещё одна ссылка для примера</a>.</p>
«проблемная ссылка«
«а тут всё хорошо» и
и ещё одна ссылка для примера.
<p><span style="margin-left:-0.44em;">«</span><a href="#" target="_blank">проблемная ссылка</a>«<br />
<span style="margin-left:-0.44em;">«</span><a href="#" target="_blank">а тут всё хорошо</a>» и<br />
<a href="#" target="_blank">и ещё одна ссылка для примера</a>.</p>
'utf8' => array('×') /* какой же у него может быть код? */),
Дак вроде бы 0x00D7. Или это сделано специально?
Добавьте пожалуйста на packagist.org
"МФУ "Большой братик""
→ «МФ„uo;Большо“атик»»
Для 1С-Битрикс актуальная проблема.
Я решил так: в /vendor/emuravjev/mdash/src/Tret/Quote.php
исправил функцию inject_in
на такую:
$thetext = substr($thetext, 0, $pos) . $text . substr($thetext, $pos + strlen($text));
Есть ли более изящное решение и можно ли это как-то исправлять «для всех»? Кажется, что этот цикл был не спроста. Я слышал, что бывает юникодные строки, где кириллица 2 байта, а латиница 1 байт, такие вещи вроде бы не учитываются таким циклом.
Если что, могу оформить пулл-реквест.
'Etc.unicode_convert' => 'on' убирает всё, кроме  
Подскажите пожалуйста как мнемонический символ   убрать в выдаче?
$t->add_safe_tag('code');
$t->set_text("<pre><code>text</code></pre>");
echo $t->apply();
В результате получаем дважды обработанный text:
"<pre><code>��m</code></pre>"
При кодировании обрабатывается тег pre и тег code скрывается,
а при обратном декодировании обработка тега pre возвращает code.
Добрый день.
Типографирую такой текст:
"Поступление"/"Списание"
Результат:
«Поступление"/"Списание»
Причины такого поведения понятны (пробелов нет). Но было бы замечательно, если бы такой текст обрабатывался корректно.
С уважением,
Дмитрий
"сообщила корреспонденту сайта XXX.RU Лариса Федоровна" преобразует в
"сообщила корреспонденту сайта XXX.R. U. Лариса Федоровна"
после адреса сайта в нижнем регистре, преобразует нормально
Привет, скажи пожалуйста есть тесты для типографа? не могу найти их в репозитории
Было бы неплохо зарегистрировать скрипт на packagist.org, удобно внедрять и использовать.
Notice: Undefined index: action in F:\projects\GitHub\EMT\builder\builder.php on line 8
Strict Standards: Non-static method FS::list_only_files() should not be called statically in F:\projects\GitHub\EMT\builder\builder.php on line 73
Ссылке в тексте сначала типографируются (в hesh-е ссылки были заменены тире на дефисы), а за тем преобразуется в HTML ссылку.
Пример URI:
https://some.domain.ru/#hesh:a1fe4bd7-ad5a-4588-8127-8496db8f6c5d
Например:
Государственная дума РФ.
Измениться на:
Государственная дума Р Ф.
Но если обернуть фразу в тег, то пробел не добавиться.
Пропадает неразрывный пробел перед единицей измерения при повторном прогоне
1 15 мм
2 <p>15 мм</p>
3 <p>15 мм</p>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.