富文本格式的大量分析笔者成功的构造了一个富文本格式语法分析与构造程序的框架。
我们只需要对框架程序的关键字表等数据结构进行有规矩可循的扩充同时加入相应的语法动作我们就可以从容的对这个框架结构的分析与构造功能进行扩展。
利用这个框架我们还可以实现一些有趣的功能。
例如对富文本格式文档中的对象进行枚举。
建立富文本格式文档与剪贴板之间的数据交换联系的方法就简单介绍到这里。
下表归纳了上述五种方法的一些特点。
其中“对对象进行修改”这一项表示我们是否可以对富文本格式文档中的对象例如文字进行修改例如改变字体颜色。
方法种类 所需技术 代码量 对对象进行修改 方法一 间接方法 MFC 几乎为零 不可以 方法二 间接方法 MFC 极小 不可以 方法三 间接方法 COM 较少 可以 方法四 间接方法 COM 较少 可以 方法五 直接方法 编译MFC 几K-几十K 可以 第二章 富文本格式语法 7 第二章 富文本格式语法 本章主要阐述的是富文本格式的语法。
富文本格式的结构并不复杂但是内容繁多本文不可能一一说明只能从总体上讨论一下。
为了满足编程的需要使得编程有据可寻还给出了一部分富文本格式语法的范式描述。
在对语法进行讨论之前笔者将富文本格式与Word文档格式.doc从它们的表达能力安全性和可编程能力等方面进行了比较。
2.1 Word文档格式.DOC与富文本格式 办公室工作人员习惯交换用 Microsoft Word .doc 格式编码的文档。
丰富的开放源码工具使得自动化管理这些文档的内容成为可能。
极少有办公室工作人员能实现自动化尽管 Microsoft 和其它公司已经在脚本编制、“活动文档”和相关技术方面投入了巨额资金。
“文员们”普遍都习惯了这样的日常事务输入来自计算机打印输出的数据。
我们看到在大量的工作场所中甚至于对这样的惯例提出质疑都认为是不寻常的。
另一方面许多系统程序员他们身怀可以帮助终端用户集成复杂工作流的专业技能却并不认为 Microsoft Word 格式.doc是服务器端编程切实可行的目标。
虽然我们可以使用商业文档管理软件包但价格都非常昂贵。
事实上我们可以用适度的代价对 Word 文档进行大量的处理工作。
举个最简单的例子 对于粗略的字数统计而言用字符串扫描 .doc 文档通常就足够了。
像 strings mydoc.doc wc -w 这样的命令返回的字数统计值误差通常在 10 以内。
对这样粗糙的方法进行改进会非常困难。
问题的核心在于 .doc 作为一种文件编码方式在这些年里已经进行了很大的更改我们难于对这些改变进行跟踪。
相关的富文本格式有几个优势它用 ASCII 进行编码几乎具有人工可读性并且它不太可能被病毒传染。
而且这些年里它已经显得稳定多了现今的文本阅读器几乎都能理解富文本格式。
第二章 富文本格式语法 8 在一些有丰富经验的网络管理员所管理的一些网络上他们进行了流量限制把 .doc 排除在外而赞成使用富文本格式以预防恶意代码。
原则上说这剥夺了用户使用某些字处理特性的权利而这些特性只能从 .doc中 获得。
实际的情况是笔者从未遇到过一个这样的用户他或她真正使用了一种用富文本格式无法描述的效果。
Microsoft 公开了Word的编程接口Word还集成了宏录制这使得我们可以用VBA、Java、C、Python、OpenOffice、StarScript、PHP、CORBA或OLE Automation等编程语言或者技术手段对文档内容进行编程。
2.2 富文本格式的语法 富文本格式文件由以下内容构成未格式化的文本控制字控制符号和组。
为了方便传输标准的富文本格式的文件由只有7位的ASCII字符流所构成。
但是与Macintosh操作系统下的Word进行通信的转换器程序可能需要8位的字符。
富文本格式文件的最大长度是没有限制的。
2.2.1控制字 控制字是一类拥有特殊格式的命令富文本格式使用这类命令去标记打印机的控制码以及一些信息这些信息是在应用程序管理文档的时候所需要和必不可少的。
一个控制字的长度必须小于或者等于32个字符大小。
控制字采用如下形式的语法 字符序列lt分隔符gt 注意每个控制字都以反斜线符号为开始符号。
?? 2.2.1.1字符序列 字符序列由从quotaquot 到 quotzquot包括quotaquot 和 quotzquot的小写字母所组成。
需要注意的是富文本格式是大小写敏感的所有的富文本格式控制字都必须是小写的。
?? 2.2.1.2分隔符 分隔符标记一个富文本格式控制字的结束它可以是如下几种情况之一 ?? 空格 在这种情况下空格是作为控制字的一部分而存在的。
?? 数字或者负号- 第二章 富文本格式语法 9 它们表示后面紧紧跟随着一个数值型的参数。
随后的数字序列是由一个空格或者是任何其它的非字母或者数字的字符所分隔。
参数既可以是正数也可以是负数。
富文本格式分析器必须能够将任意的数字串转换为关键字的合法值进行处理。
如果一个数值型参数紧紧跟在一个控制字的后面那么这个参数就成为这个控制字的一部分这个控制字按照同其它控制字一样的方式被控格或者非字母和数字的字符所分隔开来。
?? 任何非字母或者数字以外的其它字符 在这种情况下这个分隔字符终结了这个控制字然而这个字符实际上并不是这个分隔字符的一部分了。
如果一个空格分隔了控制字这个空格并不在文档中显示出来。
接下来的任何字符包括空格都将会显示在文档中。
正是出于这个原因.
上一篇:
webkit开发学习笔记
下一篇:
青青子衿,悠悠我心