비교 플러그인을 사용하여 구조화되지 않은 요소 간의 컨텐츠 차이점을 보고 병합하는 데 필요한 특수화된 표시기를 제공할 수 있습니다.
단일 입력만 사용할 수 있기 때문에 비교가 필요없는 경우에는 컨텐츠 표시기를 사용합니다. 이를 위한 일반적인 예가 바로 "로컬 히스토리에서 복원" 기능입니다. org.eclipse.compare.contentViewers 확장점을 사용하여 해당 입력을 비교하지 않는 특수화된 컨텐츠 표시기를 정의할 수 있습니다.
<extension point="org.eclipse.compare.contentViewers"> <viewer extensions="java,java2" class="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator" id="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"> </viewer> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaSource" contentViewerId="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"> </contentTypeBinding> </extension>
플러그인에서 제공하는 특수 표시기는 표시기 요소에 지정됩니다. 표시기의 ID 및 ID를 작성하는 클래스를 지정해야 합니다. 컨텐츠 표시기를 사용해야 하는 모든 파일 확장자도 지정할 수 있습니다.
contentTypeBinding 요소를 사용하여 컨텐츠 유형을 컨텐츠 표시기와 연관시킬 수도 있습니다.
컨텐츠 병합 표시기에서 해당 입력에 대한 2방향 또는 3방향 비교를 수행하고, 결과를 나란히 또는 다른 적절한 방법으로 제공합니다. 표시기를 사용하여 입력 간에 병합할 수 있습니다. 컨텐츠 병합 표시기는 텍스트나 이미지에 공통입니다.
표준 병합 표시기가 플러그인 기능에 적합하지 않은 경우 고유의 컨텐츠 병합 표시기를 구현하도록 선택할 수 있습니다. org.eclipse.compare.contentMergeViewers 확장점을 사용하여 플랫폼에 컨텐츠 병합 표시기를 등록해야 합니다. 다음 마크업은 Java IDE에서 Java 파일 및 특성 파일을 볼 수 있도록 특수화된 컨텐츠 병합 표시기의 정의를 보여 줍니다.
<extension point="org.eclipse.compare.contentMergeViewers"> <viewer extensions="java,java2" class="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator" id="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"> </viewer> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaProperties" contentMergeViewerId="org.eclipse.compare.TextMergeViewerCreator"> </contentTypeBinding> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaSource" contentMergeViewerId="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"> </contentTypeBinding> </extension>
플러그인에서 제공하는 컨텐츠 표시기와 유사한 특수 병합 표시기는 표시기 요소에 지정됩니다. 표시기의 ID 및 ID를 작성하는 클래스를 지정해야 합니다. 컨텐츠 병합 표시기를 사용해야 하는 모든 파일 확장자도 지정할 수 있습니다.
또한 컨텐츠 표시기와 유사하므로 contentTypeBinding을 사용하여 컨텐츠 유형을 병합 표시기와 연관시킬 수 있습니다. JDT 플러그인은 컨텐츠 병합 표시기를 두 개의 다른 컨텐츠 유형(Java 소스 및 Java 특성 파일)에 바인드합니다.
ContentMergeViewer는 두 개의 컨텐츠 영역이 나란히 있고 공통 상위(3방향 비교용)에 대한 선택적 컨텐츠 영역이 있는 추상적인 비교 및 병합 표시기입니다. 구현에는 컨텐츠 유형에 대한 가정이 없으므로, 서브클래스가 특정 컨텐츠 유형을 처리해야 합니다.
org.eclipse.compare.internal의 ImageMergeViewer에서는 ContentMergeViewer를 사용하여 이미지에 대한 간단한 병합 표시기를 구현하는 방법을 보여줍니다. 컨텐츠 병합 표시기는 IMergeViewerContentProvider 인터페이스를 구현해야 하는 컨텐츠 제공자를 통해 해당 모델에 액세스합니다.
표시기가 텍스트를 사용하는 경우 텍스트 컨텐츠를 비교하고 병합하는 추가 클래스를 사용할 수 있습니다.
TextMergeViewer는 텍스트 컨텐츠를 비교 및 병합하기 위한 ContentMergeViewer의 구체적인 표준 서브클래스입니다. 텍스트 병합 표시기에서는 RangeDifferencer를 사용하여 두 개 또는 세 개의 입력 문서를 행별로 텍스트 비교를 수행합니다.
서로 다른 텍스트 행의 경우 TextMergeViewer에서는 ITokenComparator를 사용하여 일치하는 토큰과 일치하지 않는 토큰의 가장 긴 순서를 찾습니다. TextMergeViewer의 기본 토큰 비교는 공백으로 구분된 문자에서 작동합니다. 다른 계획이 필요할 경우(예: Java 인식 병합 표시기의 Java 토큰) 클라이언트는 ITokenComparator 인터페이스를 구현하여 자체 토큰 비교기를 작성할 수 있습니다.
TextMergeViewer는 전체 문서와 문서의 하위 범위에서 작동합니다. 일부 문서의 경우 표시기의 입력은 IDocument 대신 IDocumentRange여야 합니다.
RangeDifferencer는 일치하는 비교 가능한 엔티티와 일치하지 않는 비교 가능한 텍스트 컨텐츠에서 엔티티의 가장 긴 순서를 찾습니다. 해당 구현은 파일 비교 프로그램(작성자: Webb Miller 및 Eugene W. Myers, Software Practice and Experience, 볼륨 15, 1985년 11월)에서 설명한 오브젝트화된 버전의 알고리즘을 기준으로 합니다. 클라이언트는 IRangeComparator 인터페이스를 구현하는 차별기에 입력을 제공해야 합니다. IRangeComparator는 입력 데이터를 엔티티의 순서로 세분하고 한 엔티티를 다른 IRangeComparator의 엔티티와 비교하기 위한 메소드를 제공합니다.
예를 들어, 두 개의 텍스트 문서를 비교하고 일치하는 행과 일치하지 않는 행의 가장 긴 공통 순서를 찾기 위해 IRangeComparator의 구현에서 문서를 행으로 세분하고 두 행이 같은지 테스트하기 위한 메소드를 제공합니다. 이를 수행할 수 있는 방법 예제는 org.eclipse.compare.internal.DocLineComparator를 참조하십시오.
차별기에서는 이 순서 사이의 차이를 RangeDifference 오브젝트의 배열로 리턴합니다. 모든 단일 RangeDifference에서는 차이 종류(변경 없음, 변경, 추가, 삭제)와 두 개나 세 개의 입력에서 기본이 되는 비교 가능한 엔티티의 해당 범위를 설명합니다.