怎样开发一个简易文字处理系统

字处理器是一个比较复杂的软件,通常有以下几个重要部分:1. 数据结构 你这里想用XML,那就是树形结构(Word和WPS用的是另一种结构,流式结构)。不管哪种结构,都需要管理如下数据: * 字符及属性 * 段、表格、嵌套表格等结构及其属性 还要实现如下操作: * 插入、删除字符 * 设置字符格式 * 插入、删除段、表格等结构性数据 * 所有操作都应该可以UNDO/REDO2. 排版 简单地说,就是把文档数据从前到后地显示在窗口上。这里最重要的地方是局部更新,比如,在某个地方插入一个字符,就需要将这个字符,及被影响的其它字符重新显示到窗口上。可以看到,这个“计算被影响到的字符”会比较困难。有时,插入一个字符只影响一行,有时会影响整段,有时则会影响整个文档。 你不能每次显示就重排一下,所以需要“排版缓存”,把“排版结果”以数据的形式记录下来。文档有修改的时候,就更新这些排版缓存。而绘制的时候,就绘制排版缓存到窗口上。 排版本身有两个主要模块: * 行排:把段切分成行,中英文通常好做,但双向文字及复杂文字就困难了 * 页排:排段、表格等“结构性数据”,注意有嵌套表格3. 绘制、点击 绘制,顾名思义,就是把排版缓存绘制到窗口上;绘制也有复杂的优化,比如插入一个字符,就只绘制“影响到的部分”。当然可以重绘整个窗口,只是在快速输入时会有卡顿 点击,是指,鼠标点击时,要计算出击中的字符的“字符位置”,设置当前的选区4. View层 比如选区管理,工具栏更新,键盘的响应 这里也有复杂的地方,比方说选区: * 如何表达,通常用字符位置 [start, end);在树形中,还需要实现字符位置与节点的转换 * 处理跨越普通段与表格的选区 * 表格选区:行选、列选、单元格选区 * 如上复杂选区下的各种操作 还有光标的管理5. IO 将XML转换成前面描述的内部数据 注意,内核中的数据结构通常与磁盘上的形式有较大的区别。内核结构需要为排版、效率等做优化。可以先从纯文本做起,参考 Neatpad Overview然后可以看看 Swing 中的TextLayout: http://docs.oracle.com/javase/tutorial/2d/text/index.html这里有TextLayout的示例代码: Text Layout with mouse clicking and selecting action : TextLayout ? 2D Graphics ? Java Tutorial再底层的,可以看看FreeTypeHarfBuzz总之,字处理不是一个容易做的东西,不建议新手自己做!


    推荐阅读