Python/Javascript: WYSIWYG HTML编辑器 - 高效处理大型文档和/或设计理论
背景:
我正在用Python写一个电子书编辑程序。目前这个程序使用的是源代码视图来编辑,我想把它改成所见即所得(wysiwyg)视图来编辑。对我来说,找到的最好的(也是唯一的)Python HTML渲染器是webkit(我使用的是PyQt版本)。
问题:
我该如何实现所见即所得的编辑呢?以下是我的一些需求和问题:
- 一本电子书可能有多达10,000个段落或1,000,000个字符。
- 使用PyQt Webkit(ContentEditable):没问题。
- 使用PyQt Webkit(TinyMce等):打开这些文件的速度慢得让人抓狂!
- 格式是
<body><p>...</p><p>...</p>...</body>
。这个body元素里只包含段落,没有div等其他元素(不过在段落里可能会有span、链接等)。用户在编辑时不能有明显的延迟。- 使用PyQt Webkit(ContentEditable):如果你尝试删除多个段落的文本,速度慢得让人受不了!我理解这是因为它重置了被更改元素的共同父元素——也就是整个body元素,因为你在删除/合并两个不同的段落。但其实不应该这样,应该只需要删除/合并/更改那些单独的段落就可以了!
我愿意自己实现所见即所得的编辑功能,但我实在搞不懂如何正确地删除/剪切/粘贴/合并/更改HTML代码。我在网上搜索了关于HTML所见即所得设计理论的文章,但没有找到有用的内容。
谢谢!
1 个回答
1
我能建议一种完全不同的方法吗?因为你的电子书内容只有 <p></p>
:
- 先把文本按照
<p></p>
分开,这样你就能得到一个包含所有段落的数组。 - 自己做一个分页系统,让屏幕上显示 N 个段落,这些段落会自动从这个数组中获取足够的文本。
- 在选择文本时,可以用 [段落索引 + 段落中的字符索引] 来确定选择的开始和结束位置。
- 然后根据这些假设来实现剪切、复制、粘贴、删除、撤销和重做功能。
(注意:当你进行选择时,因为起始点是保存的,所以你可以安全地更改屏幕上的文本或分页,直到选择结束。)