實作內容檢視器

比較外掛程式為實作本身內容檢視器提供了豐富的支援:

內容合併檢視器

ContentMergeViewer 是一個抽象的比較與合併檢視器,具有兩個並列的內容區域,以及一個供共用上代使用的選用內容區域(用於三向比較)。 因為實作方式並沒有做出任何有關內容類型的假設,所以處理特定類型是子類別的責任。 org.eclipse.compare.internal 中的 ImageMergeViewer 顯示如何使用 ContentMergeViewer 為影像實作一個簡單合併檢視器。ContentMergeViewer 可利用必須實作 IMergeViewerContentProvider 介面的內容提供者,來存取它的模型。

文字合併檢視器

TextMergeViewerContentMergeViewer 的標準具體子類別,為了比較以及合併文字內容。文字合併檢視器使用 RangeDifferencer 對兩個(或三個)輸入文件進行文字性的或行對行的文字比較。 對於不同的文字行, TextMergeViewer 使用 ITokenComparator 尋找相符和不相符記號最長的序列關係。 TextMergeViewer 的 預設記號比較對於利用空格分隔的字元有效。如果需要不同的策略(例如,有 Java 的合併檢視器中的 Java 記號), 從屬站可以藉由實作 ITokenComparator 介面來建立它們自己的記號比較子。 TextMergeViewer 可處理整個文件和文件的子範圍。對部份文件而言,檢視器的輸入必須是 IDocumentRange, 而不是 IDocument

範圍差異器

RangeDifferencer 會尋找相符及不相符可比較實體的最長序列。它的實作依據 A File Comparison Program, by Webb Miller and Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985. 介紹的演算法具體化版本。從屬站必須提供輸入資料給差異器作為 IRangeComparator 介面的實作。 IRangeComparator 可以將輸入資料分成一連串的實體,並提供將一個實體與另一個 IRangeComparator 中實體比較。

例如,要比較兩個文件,並找出相符和不相符行最長共同序列的方法, IRangeComparator 的實作必須將文件分成一行一行,並提供方法以測試兩行是否視為相同。 請參閱 org.eclipse.compare.internal.DocLineComparator 以取得如何完成此項工作的範例。

差異器將傳回這些連續項目之間的差異,作為 RangeDifference 物件的陣列。每一個單一的 RangeDifference 說明差異的種類(不變、變更、新增、刪除),以及在兩個或三個輸入中,基礎可比較實體的對應範圍。

 

Copyright IBM Corp. and others 2000,2002.