【发布时间】:2011-12-13 21:18:49
【问题描述】:
我想为 HTML 编写一个所见即所得的编辑器。我正在寻找一种高级方法,我最终将在 C++ 中实现它。
我最初的方法是创建一个扩展公共基类(节点)的类层次结构。因此对象“body”将包含对象“p”,该对象将包含对象“b”,该对象将包含一些文本。
class node {
node *parent;
vector<node> children;
string name;
map<string,string> attributes;
string text;
virtual void render(const rect &rect, const point &offset) = 0;
virtual void onEvent(const event &e);
}
主引擎会调用类似 body.render(screen, point(0, 0)) 的东西,它会递归地渲染它的子引擎。
光标由指向对象层次结构的指针表示,每个节点都有自己的内部光标状态,当它是被选中的节点时会响应键盘事件。
例如,如果用户点击左箭头,并且选择了“p”节点,则“p”节点对按键的反应可能是将当前节点更改为“p”的父节点。
抽象地说,这似乎可行,我能找到的最接近我正在寻找的东西是Sigil,乍一看似乎很难学习(main.cpp 是 70k)。
在我走这条路之前,我想知道是否有人有更简单的方法,或者可以看到这种方法的任何缺陷。
【问题讨论】:
-
如果可以的话,一个更简单的方法是在您的应用程序中嵌入一个网络浏览器并将
contentEditable="true"设置为<body>。如果您使用的是 Windows,则可以使用内置引擎,也可以嵌入 Gecko 或 WebKit 等引擎。 -
@minitech:
contentEditable="true"不是编辑。如何在 24pt 处插入表格或使内容变为粗体和斜体? -
@n.m.
<table>标签、样式表或<b>标签。通过 C++ 完成这一切并不难。 -
@minitech,请重新提交您的评论作为答案,我会接受它,事实证明 contentEditable 足以满足我的需求。