Очистка форматирования текста в редакторе MyTetra #5

Closed
xintrea opened this Issue Oct 2, 2015 · 1 comment

Projects

None yet

1 participant

@xintrea
Owner
xintrea commented Oct 2, 2015

Проблема:

При вставке текста, взятого из окна браузера, текст может содержать различные теги форматирования. В MyTetra предусмотрена кнопка [C] - для сброса форматирования к стандартному, заданному в настройках редактора.

Задача:

Написать функцию (метод), очищающий форматирование выделенного текста в виджете EditorTextArea (наследник QTextEdit). При очистке
форматирование должно быть установлено в шрифт и размер, взятый из конфига редактора (методы получения настроек уже присутсвуют). Очистка текста должна удовлетворять следующим требованиям:

  • Если выделена строка в абзаце (то, есть не весь абзац), очищать форматирование только для начертания. Нельзя изменять отступы.
  • Если начало и конец выделения находятся на начале/конце абзаца, то надо очистить как начертание, так и отступы.
  • Если в выделенном фрагменте есть картинка, то картинка должна остаться. (Стандартный Qt-метод setCurrentCharFormat() удаляет картинки из текста).
  • Учесть, что если применить технику "вырезаем выделение, чистим, и вставляем заново через removeSelectedText()/insertHtml()", то первая строка такой вставки получит форматирование, отличное от заданного - будут по неизвестной причине добавлены вертикальные отступы самим Qt. Эту особенность надо как-то скомпенсировать или обойти.

Подробности:

  • Весь код редактора сосредоточен в каталоге /src/libraries/wyedit;
  • Метод, который очищает форматирование, находится в файле:
/src/libraries/wyedit/formatters/TypefaceFormatter.cpp

метод называется:

void TypefaceFormatter::onClearClicked(void)

его можно (и нужно) менять.

  • При необходимости можно создать класс-очиститель текста, с именем типа TextCleaner.
  • Основной класс (виджет) редактора - класс Editor, размещенн в файле Editor.cpp;
  • Класс области редактирования называется EditorTextArea, он унаследован от QTextEdit. Указатель на нее в рамках класса Editor называется textArea.
  • Начертание и размер стандартного шрифта, который надо установить на очищаемый кусок текста, берутся вот отсюда:
editorConfig->get_default_font()
editorConfig->get_default_font_size()

Правка кода:

Правка кода должна проводиться в отдельной ветке. После проверки, код будет влит в ветку experimental.

@xintrea
Owner
xintrea commented Dec 20, 2016

Очистка кода доведена до некоторого рабочего вида в MyTetra 1.42

@xintrea xintrea closed this Dec 20, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment