实现“内容查看器”

比较插件提供对实现您自已的内容查看器的充分支持:

内容合并查看器

ContentMergeViewer 是一个抽象比较与合并查看器,它有两个并排的内容区以及一个公共祖先的可选内容区(用于三向比较)。由于此实现不作任何关于内容类型的假定,所以由子类负责处理特定的类型。 org.eclipse.compare.internal 中的 ImageMergeViewer 显示如何使用 ContentMergeViewer 对图像实现简单合并查看器。ContentMergeViewer 通过内容提供程序访问它的模型,该提供程序必须实现 IMergeViewerContentProvider 接口。

文本合并查看器

TextMergeViewer 是用来比较和合并文本内容的 ContentMergeViewer 的标准具体子类。文本合并查看器使用 RangeDifferencer 来执行对两个(或三个)输入文档的逐行文本比较。对于不同的文本行,TextMergeViewer 使用 ITokenComparator 来查找匹配和不匹配标记的最长序列。 TextMergeViewer 对由空格分隔的字符执行缺省标记比较。如果需要另一策略(例如,Java 合并查看器中的 Java 标记),则客户机可以通过实现 ITokenComparator 接口来创建它们自已的标记比较器。TextMergeViewer 对全部文档和文档的子范围工作。对于部分文档,查看器的输入必须是 IDocumentRange 而不是 IDocument

范围区分器

RangeDifferencer 查找匹配和不匹配的可比较实体的最长序列。它的实现基于以下程序中所描述的算法的对象化版本: A File Comparison Program(来自 Software Practice and Experience,Vol. 15, Nov. 1985,作者为 Webb Miller 和 Eugene W. Myers)。 客户机必须将区分器的输入作为 IRangeComparator 接口的实现来提供。IRangeComparator 将输入数据分割为实体序列并提供用于将一个实体与另一 IRangeComparator 中的实体进行比较的方法。

例如,要对两个文本文档进行比较并查找匹配和不匹配行的最长公共序列,IRangeComparator 的实现必须将文档分割成若干行并提供用于测试是否认为两行相同的方法。有关如何完成它的示例,参见 org.eclipse.compare.internal.DocLineComparator

区分器将这些序列之间的差别作为 RangeDifference 对象的数组返回。每一个 RangeDifference 都描述差别类型(无更改、更改、添加或删除)以及两个或三个输出中的基本可比较实体的对应范围。

 

Copyright IBM Corp. and others 2000,2002.