📜  创建 WYSIWYG 文档编辑器 |自然语言编程

📅  最后修改于: 2021-10-19 06:13:05             🧑  作者: Mango

当我和我的大儿子完成编写我们的普通英语编译器时,我们决定通过添加一个所见即所得的文档编辑器来测试它的实用性,然后我们可以用它来记录我们的系统。一石两鸟!

文档视图

我们称这个设施为 Writer。这是您在 Writer 中打开我们的使用说明书时的样子:

我们称之为文档视图:每页一行。可以在此视图中选择、复制、剪切、粘贴、复制和打印整页(以及连续或不连续的页面组)。它们也可以保存为 Adobe PDF 格式,以便没有 Writer 的人可以阅读它们。

页面预览

当您打开一个页面时,您会看到该页面与打印(或另存为 PDF 页面)时显示的完全一样,尽管带有天蓝色网格线以帮助进行雅致的布局。这是我们的使用说明书第 8 页在屏幕上的显示方式:

在此视图中,可以放大、缩小、旋转和检查整个页面。并且可以添加、删除、移动、调整大小、着色、翻转、镜像、旋转、复制、剪切、粘贴、复制、分组等各种文本和图形“形状”。 Home、End、Page Up 和 Page Down 键可用于方便地翻阅页面,而无需返回文档视图。

外化页面

如上所述,文档(和文档的一部分)可以保存为 PDF。但是永久存储的原生格式要简单得多,而且只有文本。例如,考虑下面的文档,它只有一页,上面有四种形状:粉色椭圆、绿色三角形、蓝色正方形和一个带有“ABC”的文本框:

如果您使用我们的“以文本形式打开”命令(或任何其他文本编辑器)打开此文档,您将看到以下内容:

ream cal-3024
  page 15840 12240 1 1440
    ellipse 0 0 0 0 1000 875 1440 1440 2880 2880
    polygon 0 0 0 1500 1000 875 4 4320 1440 5760 2880 4320 2880 4320 1440
    rectangle 0 0 0 2100 1000 875 7200 1440 8640 2880 0
    text 0 0 0 -1 0 0 10080 1440 14400 2880 0 "title" "osmosian" 1440 "center" 0 0 0 yes
       "ABC"
    end
  end
end

整个文档一个条目,每个页面一个条目,页面上的每个形状一个条目。并且看不到一个“<”!

在这里粘贴定义整个 Writer 的 4,000 个简单的英语句子就太多了。它们包含在我们系统随附的源代码中 www.osmosian.com/cal-4700.zip。现在,让我们解决一个示例程序:

To group any selected shapes on a page:
If the page is nil, exit.
Create a group shape.
Put "group" into the group shape's kind.
Put the page's scale into the group shape's scale.
Move the page's shapes to some original shapes.
Loop.
Put the original shapes' first into a shape.
If the shape is nil, break.
Remove the shape from the original shapes.
If the shape is not selected, append the shape to the page's shapes; repeat.
Deselect the shape.
Append the shape to the group shape's shapes.
Repeat.  
Append the group shape to the page's shapes.
Select the group shape.
Adjust the group shape.

页面上的形状是从后到前绘制的,因此新分组的形状将出现在页面上其他形状的顶部。

不是玩具

请记住,这是设施不是“玩具”。正如我上面提到的,我们使用它来为我们的系统编写文档。从那时起,它就被用来制作一个 800 页的插图“教你的孩子阅读”课程,你可以在这里看到:www.rhymingreader.com。更不用说其他几本儿童书籍、大量培训手册以及各种大小的演示材料。这是我最喜欢的页面之一,由一位小学老师开发,试图解决一个古老的问题:

QED。