구문 색상

손상, 수리 및 조정 모델을 사용하여 구문 색상이 플랫폼 텍스트 플레임워크에 제공됩니다. 문서에 각 변경이 적용된 경우 프리젠테이션 조정자는 무효화될 비주얼 프리젠테이션의 영역 및 이 영역을 수리하는 방법을 판별합니다. 문서의 다른 컨텐츠 유형에 서로 다른 계획이 사용될 수 있습니다.

구문 색상 구현(및 프리젠테이션 조정자를 사용하여 이를 수행)은 선택적입니다. 기본적으로 SourceViewerConfiguration은 특정 편집기에 사용된 문서 모델을 모르고 구문 강조표시에 대한 일반 작동이 없으므로 프리젠테이션 조정자를 설치하지 않습니다.  

구문 강조표시 구현 시 조정 클래스를 사용하려면 편집기 소스 표시기 구성은 프리젠테이션 조정자를 정의하도록 구성되어야 합니다. 편집기의 프리젠테이션 조정자가 정의되는 방법을 확인하기 위해 다시 JavaSourceViewerConfiguration에서 시작합니다.

public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {

	PresentationReconciler reconciler= new PresentationReconciler();
	...
	return reconciler;
}

프리젠테이션 조정자가 수행할 내용을 이해하려면 우선 손상, 수리 및 조정의 개념을 살펴보아야 합니다.

손상, 수리 및 조정

사용자가 편집기의 텍스트 수정하는 경우 변경사항을 표시하려면 편집기 파트를 다시 표시해야 합니다. 다시 표시할 텍스트 계산은 손상 계산으로 알려져 있습니다. 구문 색상이 관련된 경우 단일 문자의 존재 여부가 주변의 텍스트 색상을 변경할 수 있으므로 편집 조작에 의한 손상 정도는 더욱 확대됩니다.  

손상자(IPresentationDamager)는 문서 변경으로 인해 다시 빌드해야 할 문서의 프리젠테이션 영역을 판별합니다. 프리젠테이션 손상자는 특정 문서 컨텐츠 유형(또는 영역)에 특정한 것으로 가정합니다. 프리젠테이션 손상자는 프리젠테이션 수리자(IPresentationRepairer)에 올바른 입력인 손상 영역을 리턴할 수 있어야 합니다. 수리자는 특정 컨텐츠 유형에 필요한 수리를 제대로 설명할 수 있도록 손상 영역에서 필요한 모든 정보를 얻을 수 있어야 합니다.

조정은 편집기에서 변경이 작성될 때 문서의 프리젠테이션을 유지보수하는 전체 프로세스를 설명합니다. 프리젠테이션 조정자(IPresentationReconciler)는 연관된 표시기를 통해 텍스트의 변경사항을 모니터합니다. 프리젠테이션 조정자는 변경으로 영향을 받은 컨텐츠 유형을 판별하는 데 문서의 영역을 사용하며 영향을 받은 컨텐츠 유형에 적절한 손상자를 알립니다. 일단 손상이 계산되면 이 값은 기본 컨텐트와 동기화하여 제자리로 돌려 놓을 수 있도록 표시기에 적용되는 수리 설명을 구성할 적절한 수리자에게 전달됩니다. 

org.eclipse.jface.text.reconciler의 클래스는 문서의 외부 조작과 문서 모델을 동기화할 수 있도록 추가 지원 클래스를 정의합니다.

프리젠테이션 조정자에는 문서에 있는 각 컨텐츠 유형에 대한 수리자 및 손상자 쌍이 제공되어야 합니다. 프리젠테이션 조정자에 대한 적절한 구현을 판별하는 것은 각 편집기에 달려 있습니다. 그러나 플랫폼은 손상을 계산하고 수리할 수 있도록 org.eclipse.jface.text.rules에 규칙 기반 문서 스캐너에 대한 지원을 제공합니다. 기본 손상자 및 수리자는 이 패키지에서 정의됩니다. 기본 손상자와 수리자는 문서의 스캐닝 규칙을 정의하여 구문 색상을 구현할 수 있도록 org.eclipse.jface.text.presentation에서 표준 조정자와 함께 사용될 수 있습니다.

규칙 기반 조정

이제 예제 프리젠테이션 조정자 작성 시 세부사항을 살펴보기에 충분한 지식을 갖추었습니다. Java 편집기 예제가 Javadoc, 복수행 주석 등을 표시하는 컨텐츠 유형으로 문서를 파티션하는 JavaPartitionScanner를 구현한다는 점을 상기합니다. 

이러한 각 컨텐츠 유형의 경우 손상자/수리자 쌍이 지정되어야 합니다. 이 작업은 PresentationReconcilerDefaultDamagerRepairer를 사용하여 다음과 같이 수행됩니다.

	JavaColorProvider provider= JavaEditorEnvironment.getJavaColorProvider();
	PresentationReconciler reconciler= new PresentationReconciler();
		
	DefaultDamagerRepairer dr= new DefaultDamagerRepairer(JavaEditorEnvironment.getJavaCodeScanner());
	reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
	reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

	dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_DEFAULT))));
	reconciler.setDamager(dr, JavaPartitionScanner.JAVA_DOC);
	reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_DOC);

	dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.MULTI_LINE_COMMENT))));
	reconciler.setDamager(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT);
	reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT);

	return reconciler;

예제가 각 컨텐츠 유형에 대해 스캐너를 제공함에 유의하십시오.  

기본 컨텐츠 유형은 키워드가 발견되고 채색될 수 있도록 JavaCodeScanner와 함께 설정됩니다. JavaCodeScanner는 단일행 주석, 공백 및 단어 등 서로 다른 종류의 토큰을 발견하는 데 필요한 규칙을 빌드합니다. 다른 토큰 유형의 단어에 사용될 색상을 설명합니다.   

다른 컨텐츠 유형이 SingleTokenScanner로 설정되고 이러한 컨텐츠 유형의 토큰에 사용할 색상이 제공됩니다.

스캐닝 규칙에 따라 문서의 적절한 파트 손상 및 수리에 대한 모든 세부사항은 DefaultDamagerRepairer에서 처리됩니다.  일반적으로 플러그인 코드가 이러한 세부사항을 이해할 필요는 없습니다. 사용자의 플러그인은 편집기 컨텐츠 파티셔닝 및 스캐닝에 적절한 규칙 세트를 빌드하는 데 초점을 두어야 합니다.

동적으로 조정자 설치

Java 편집기 예제는 이전에 나타난 대로 프리젠테이션 조정자를 설치하기 위해 SourceViewerConfiguration의 서브클래스를 제공합니다. 또한 프리젠테이션 조정자는 IPresentationReconciler 프로토콜을 사용하여 텍스트 표시기에 동적으로 설치될 수 있습니다. 이런 식으로 수행하는 경우 특별한 런타임 이점은 없으나 SourceViewerConfiguration의 서브클래스에 플러그 가능한 작동 대체사항을 모두 놓으면 한 위치에서 모든 작동 대체사항을 통합할 수 있는 이점이 있습니다. 다른 프리젠테이션 조정자가 편집기 수명 동안 표시기에 첨부될 때 동적 프로토콜이 유용할 수 있습니다.