5

我正在用 Java 编写 HTML 编辑器。我希望它支持自动缩进。我实现了一个复合模式来表示当前正在编辑的文件中的 HTML 标记对象。例如,这段代码:

<table> <tr> <th>Col1</th> <th>Col2</th> </tr> <tr> <td>Data1</td> <td>Data2</td> </tr> </table>

将导致复合材料中的这种结构表示:

  • 表 -> tr(第一),tr(第二)
  • tr(first) -> th(Col1), th(Col2)
  • tr(秒) -> td(Data1), td(Data2)

其中 x -> y, z 表示 x 是 y 和 z 的父级。

我在这里有两个选择:

  1. 创建一个递归函数以返回包含缩进的字符串。
  2. 创建一个递归函数,它只返回当前 HTML 代码的非格式化字符串,然后添加缩进。

做第一个很容易;但是,如果用户更改了模式,我发现很难继续按照用户的缩进模式自动缩进。因此,我认为选项 2 更可取。如果我能让它正常工作,我觉得这也可能更具动态性。问题是,我不太确定如何操作字符串。

我的想法是我可以以某种方式使用堆栈。我可以将一个打开的标签推到它上面,并在它关闭时将其弹出。堆栈上的标签数量将决定我需要在新行的下一个标签之前缩进的次数。我可以改用整数,但同样的概念也适用。问题是我不知道如何遍历字符串中的标签以便我可以操作它。

那么,有没有办法按照我描述的方式进行字符串操作?还是使用递归函数更好?

4

2 回答 2

1

鉴于您的问题如此清晰,我认为您是回答它的最佳人选,您只需要更多信息。

要提供该信息,这可能会有所帮助:

  1. 考虑文本的整个生命周期。您将需要对击键等做出反应。然后将模型和表示清楚地分开比操纵填充字符串要好得多。另一个好处是您可以选择相对独立于模型的现有文本编辑组件

  2. 考虑示例:富文本编辑器、jEdit 等开源软件等。

于 2012-10-20T09:12:12.233 回答
0

对于 XHTML,使用 XSLT 和 XSL 样式表可以很容易地完成这项工作。

于 2012-10-20T09:14:57.463 回答