文字处理器:连续部分的逻辑

问题描述 投票:-1回答:1

我今天要写一些离题的东西,因为我想了解它的工作原理,以及在Word处理程序中编写连续部分的过程,就像您从Microsoft Word,Libre Office或Apple Pages所知道的那样。

我目前正在编写自己的文字处理器控件。这应该是非常广泛的。我有两个模块。一个负责数据,另一个负责数据的表示。因此,第二个是数据类的渲染器。

带有格式化文本的数据文档的结构可以大致描述如下:

Document
  + Section (2 Columns)
    + Paragraph
      + Text
      + Tabstop
      + Text
      + Picture
    + Paragraph
      + Text
  + Section
    ...

所以我们有一个只有一部分的数据结构,该数据结构又包含两个内容不同的段落。渲染引擎当前将整个内容转换如下:

Document
  + Page
    + PageColumn (1. Column)
      + Blocks
        + Paragraph
          + Line
            + Text
            + Tabstop
            + Text
            + Picture
          ...
        + Paragraph
          + Line
            + Text
          ...
    + PageColumn (2. Column)
      + Blocks
        ...

渲染器计算数据结构生成的多少行适合一个段落。然后,它再次查看一列中可容纳多少块(段落或表格)。如果超出高度,则在下一列中继续,并在必要时添加新页面。

这意味着目前,我可以显示结构中的“固定”部分,即从偶数/奇数/下一页开始的部分。对于绘制控件,这仅意味着对于每一页,我从左至右输出所有列,其中包含列的内容,然后从上至下绘制块。

但是,在Word,Pages等中,可以在页面上显示连续的部分。示例:

Page
  Section (1 Column)
  Section (2 Columns)
  Section (1 Column)

您必须如何更改结构才能实现此目的?在具有不止一列的连续部分中,您必须以某种方式预先计算每列中将容纳多少块和行才能获得平衡的显示结果。

有人有建议吗?

非常感谢。enter image description here

vba architecture rendering application-design wordprocessingml
1个回答
1
投票

具有两列的部分可在各列之间平衡文本,因为实际上这是一列在整个页面中流动。该部分将扩展以容纳文本的总量。输入一些文本似乎在光标移至第2列之前第1列将占用两行文本。当两列保持平衡时,在第2列中添加更多文本将使文本跨两列重排,通常在末尾保留两行空白第2列与第1列比较。

© www.soinside.com 2019 - 2024. All rights reserved.