Мне нужно отредактировать документ, который был помечен семантически.
Предположим, у меня есть HTML-документ, в котором некоторые или все абзацы (или интервал) помечены определенным именем класса, например: <p class="bio"><span class="name">John</span><span class="surname">Doe</span>is a <span class="job">carpenter</span> living in <span class="place">York</span>.</p><p class="story">He was working at his bench when...</p>
Я хочу использовать виджет QTextEdit для редактирования такого текста (если это возможно).
Дополнительные требования:
- Каждый
class
должен иметь определенный графический рендеринг (это должно быть легко при использовании CSS).
- Редактирование конкретного
<span>
должно сохранить class
(т.е., если я отредактирую "Джон" -> "Джонатан", оно все равно должно иметь class="name"
).
- Я должен иметь возможность применить
class
к определенным фрагментам текста (т. Е. Выделить текст, открыть контекстное меню и выбрать один из возможных class
es).
- Удалить пометки из выделения.
- Сериализация отредактированного текста (т. Е. Просмотр отредактированного текста, распознавание
class
изменений и возможность создания любой разметки, которую я хочу).
- Примечание
class
могут содержаться друг в друге (но не частично перекрываться); это означает, что некоторый фрагмент кода имеет два (или более) class
es.
Может ли это быть достигнуто стандартными средствами?
Насколько я видел QTextDocument и связанные с ним классы (например, QTextFrame, QTextFormat и т. Д.) Ориентированы на визуальное представление (стиль шрифта, цвет и т. Д.), В то время как мне нужны некоторые «логические» теги, которые могут отражать или не отражать в визуальных изменениях. Я имею в виду: текст может быть написан одним шрифтом / цветом / фоном, но при наведении на него курсора я смогу перечислить все class
активных в этом конкретном месте (если есть).
Я пишу код в PyQt5, если это актуально.
Единственный (довольно некрасивый!) Способ, который я, похоже, вижу, чтобы добиться этого, - это использовать QTextCharFormat
свойство tooltip
для хранения классов (классов) каждого QTextFragment
. Есть ли лучший вариант?