【发布时间】:2019-06-11 23:27:38
【问题描述】:
我必须编辑已在语义上标记的文档。
假设我有一个 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(即:如果我编辑“John”->“Jonathan”,它应该仍然有class="name")。 - 我应该能够将
class应用于特定的文本片段(即:选择一些文本,打开上下文菜单并选择可能的classes 之一)。 - 从选择中删除标记。
- 序列化已编辑的文本(即:遍历已编辑的文本,识别
class更改并能够生成我想要的任何标记)。 - 注意
classes 可以相互包含(但不能部分重叠);这意味着某段代码有两个(或更多)classes。
这可以通过标准方式实现吗?
据我所见,QTextDocument 和相关类(例如:QTextFrame、QTextFormat 等)面向视觉表示(字体样式、颜色等),而我需要一些可能反映也可能不反映的“逻辑”标记在视觉变化中。我的意思是:文本可以全部使用相同的字体/颜色/背景,但是将光标移到它上面我应该能够列出在该特定位置(如果有的话)所有活动的classes。
如果相关,我正在 PyQt5 中编码。
我似乎看到的唯一(相当丑陋!)方法是使用QTextCharFormat 的tooltip 属性来存储每个QTextFragment 的类。有更好的选择吗?
【问题讨论】:
标签: pyqt5 semantic-markup tagging qtextedit qtextdocument