xintrea / mytetra_dev

MyTetra - smart crossplatform manager for information collecting / MyTetra - кроссплатформенный менеджер накопления информации / Официальная страница:
http://webhamster.ru/site/page/index/articles/projectcode/105
254 stars 55 forks source link

Улучшено форматирование, как Code #101

Closed DikBSD closed 5 years ago

DikBSD commented 5 years ago

Исправлены замечания по Pool Request:

  1. Внесены изменения в код, учитывающие мягкий перенос в конце выделения. Форматирование Codo проходит корректно.
  2. Устранен скачек области текста при попытке форматирования в Code. Для этого удален код textArea->textCursor().removeSelectedText(), который избыточен, так как вставка текста в html в выделенную курсором область (textArea->textCursor().insertText()) просто заменяет эту область.
xintrea commented 5 years ago

Коммит #91 нужно откатить перед применеием этого?

DikBSD commented 5 years ago

Нет, откат не нужен, иначе в других файлах исчезнут изменения коммита #91 , которых нет в этом Pull Request. Здесь я только подправил метод workingSoftCarryInSelection() в файле TypefaceFormatter.cpp. Так что все конфликты, если они будут (думаю, что их не должно быть), будут только в этом методе.

xintrea commented 5 years ago

Накатил я и этот пулл реквест, все работает. Но есть проблема, когда идет два мягких переноса, и за ними делается выделение для форматирование в код. В одном случае срабатывает, в другом нет.

Вот видео: https://www.youtube.com/watch?v=hdQfRemdBHI

Там в середине я затупил, потому что не сделал отмену дважды: форматирование в код отменил, а преобразование из мягкого переноса в настоящий - нет. В любом случае вот текст видео:

----- 8< -----

Есть два одинаковых места, где расположены два мягких переноса подряд. Если выделить в певром месте текст после этих переносов, то он отформатируется в код. А если выделить во втором месте текст после двух мягких переносов, то он НЕ отформатируется в код.

Это происходит видимо из-за того, что второй текст обрамляется в span, а первый нет. А, блин, в первом тексте не откатился до двух мягких переносов... Щас покажу как было.

<p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'monospace';">В результате, я получил следующие результаты:<br /><br />======== sample-nin/webpbn-00001.nin ========</span></p>

<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'monospace';">apsnono finished.</span><br /><br /><span style=" font-family:'monospace';">real    0m0,610s</span></p>

В общем, если после <br /><br /> идет сразу текст, то форматирование в код работает. А если после <br /><br /> идет <span...> - то не форматируется.

DikBSD commented 5 years ago

Я завтра на работе посиотрю.

DikBSD commented 5 years ago

Завтра доработаю регулярное выражение на считывание левого символа от выделения. Не учл, что после мягкого переноса может идти <span ...>.

xintrea commented 5 years ago

И еще надо обернуть эти изменения - преобразование мягких переносов в обычные и форматирование в код в одно атомарное изменение. Где-то в коде я делал так, щас что-то не могу найти.

Это нужно чтобы отмена действия после нажатия "В код" откатывало состояние текста до момента до нажатия клавиши "В код", а то пользователь будет путаться, как я в видео запутался.

DikBSD commented 5 years ago

Хорошо. Если не ошибаюсь, это метод QTextCursor beginBlockEdit() и endBlockEdit().

DikBSD commented 5 years ago

Сергей, я вставил ваш код в свой тестовый файл. Все форматируется в код, в обоих случаях. Мне трудно увидеть, почему у нас получаются разные результаты форматирования. Не могли бы Вы прикрепить сюда html текст Вашего тестового файла из видео? Возможно там надо учитывать еще что-то, кроме <span ...>. Спасибо.

DikBSD commented 5 years ago

Сергей, я выслал новый Pull Request #102. В нем сделано атомарная обработка для форматирования в Code.

На всякий случай напишу и здесь, что написал в комментарии к новому Pull Request:

Сергей, пришлите мне, пожалуйста, тот html текст (полный), на котором форматирование в код не происходит. Я отскриншотил часть этого текста с Вашего видео на Ютуб, распознал скриншот в текст, поэкспериментировал на нем - все работает, все форматируется в код. По-видимому, нужная часть текста как раз и не попала в Ваш видео ролик - та, что идет сразу после проблемного места.