Python/Javascript: WYSIWYG HTML编辑器 - 高效处理大型文档和/或设计理论

2 投票
1 回答
1810 浏览
提问于 2025-04-17 07:52

背景:

我正在用Python写一个电子书编辑程序。目前这个程序使用的是源代码视图来编辑,我想把它改成所见即所得(wysiwyg)视图来编辑。对我来说,找到的最好的(也是唯一的)Python HTML渲染器是webkit(我使用的是PyQt版本)。

问题:

我该如何实现所见即所得的编辑呢?以下是我的一些需求和问题:

  1. 一本电子书可能有多达10,000个段落或1,000,000个字符。
    • 使用PyQt Webkit(ContentEditable):没问题。
    • 使用PyQt Webkit(TinyMce等):打开这些文件的速度慢得让人抓狂!
  2. 格式是<body><p>...</p><p>...</p>...</body>。这个body元素里只包含段落,没有div等其他元素(不过在段落里可能会有span、链接等)。用户在编辑时不能有明显的延迟。
    • 使用PyQt Webkit(ContentEditable):如果你尝试删除多个段落的文本,速度慢得让人受不了!我理解这是因为它重置了被更改元素的共同父元素——也就是整个body元素,因为你在删除/合并两个不同的段落。但其实不应该这样,应该只需要删除/合并/更改那些单独的段落就可以了!

我愿意自己实现所见即所得的编辑功能,但我实在搞不懂如何正确地删除/剪切/粘贴/合并/更改HTML代码。我在网上搜索了关于HTML所见即所得设计理论的文章,但没有找到有用的内容。

谢谢!

1 个回答

1

我能建议一种完全不同的方法吗?因为你的电子书内容只有 <p></p>

  • 先把文本按照 <p></p> 分开,这样你就能得到一个包含所有段落的数组。
  • 自己做一个分页系统,让屏幕上显示 N 个段落,这些段落会自动从这个数组中获取足够的文本。
  • 在选择文本时,可以用 [段落索引 + 段落中的字符索引] 来确定选择的开始和结束位置。
  • 然后根据这些假设来实现剪切、复制、粘贴、删除、撤销和重做功能。

(注意:当你进行选择时,因为起始点是保存的,所以你可以安全地更改屏幕上的文本或分页,直到选择结束。)

撰写回答