Barevné značení syntaxe

Barevné značení syntaxe poskytuje textový rámec platformy s použitím modelu poškození, opravy a sesouhlasení.   Pro každou změnu provedenou v dokumentu sesouhlasovač prezentace určí, která oblast vizuální prezentace by se měla zneplatnit a jak ji opravit.  Pro různé typy obsahu v dokumentu lze použít různé strategie.

Implementace barevného značení syntaxe (pomocí sesouhlasovače prezentace) je volitelná.  Standardně třída SourceViewerConfiguration neinstaluje sesouhlasovač prezentace, protože nezná model dokumentu použitý pro konkrétní editor a nemá pro zvýraznění syntaxe obecné chování.  

Abyste mohli použít třídy pro sesouhlasení k implementaci zvýraznění syntaxe, musí být konfigurace prohlížeče zdroje vašeho editoru nakonfigurována tak, aby definovala sesouhlasovač prezentace.  Znovu začneme třídou JavaSourceViewerConfiguration, abychom viděli, jak je pro náš editor definován sesouhlasovač prezentace.

public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {

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

Abychom porozuměli, co sesouhlasovač prezentace provádí, musíme se nejprve podívat na koncepty poškození, opravy a sesouhlasení.

Poškození, oprava a sesouhlasení

Jak uživatel text v editoru upravuje, musí se části editoru znovu zobrazovat, aby se zobrazily změny.  Výpočet textu, který se musí znovu zobrazit, se nazývá výpočet poškození.  Když se toho účastní i barevné značení syntaxe, stává se poškození způsobené jednou editační operací rozsáhlejší, protože přítomnost nebo nepřítomnost jediného znaku může změnit barvení textu okolo něj.   

Zjišťovače poškození (IPresentationDamager) určují region prezentace dokumentu, který se musí kvůli změně dokumentu znovu sestavit. Předpokládá se, že zjišťovač poškození prezentace je specifický pro konkrétní typ obsahu dokumentu (nebo regionu). Musí být schopen vrátit region poškození, který je platným vstupem pro opravovač prezentace (IPresentationRepairer).  Opravovač musí být schopen odvodit veškeré potřebné informace z oblasti poškození, aby úspěšně popsal opravy, které jsou zapotřebí pro konkrétní typ obsahu.

Sesouhlasení popisuje celkový proces udržování prezentace dokumentu, zatímco se v editoru provádí změny.  Sesouhlasovač prezentace (IPresentationReconciler) monitoruje změny textu prostřednictvím svého přidruženého prohlížeče.  Používá regiony dokumentu ke zjištění typů obsahu, které změna ovlivnila, a upozorní zjišťovač poškození, který přísluší ovlivněnému typu obsahu.   Jakmile je vypočteno poškození, předá se příslušnému opravovači, jenž sestaví popisy oprav, které se aplikují na prohlížeč, aby byl znovu synchronizován s obsahem. 

Třídy v org.eclipse.jface.text.reconciler definují další podpůrné třídy pro synchronizaci modelu dokumentu s externí manipulací dokumentu.

Sesouhlasovače prezentací by měly být poskytovány s párem opravovače a zjišťovače poškození pro každý typ obsahu, který se v dokumentu může nacházet.  Určení odpovídající implementace sesouhlasovače prezentace je na každém editoru.  Platforma nicméně v org.eclipse.jface.text.rules poskytuje podporu pro používání skenerů dokumentů na bázi pravidel pro výpočet a opravu poškození.  Výchozí zjišťovače poškození a opravovače jsou definovány v tomto balíčku.  Lze je použít společně se standardními sesouhlasovači v org.eclipse.jface.text.presentation k implementaci barevného značení syntaxe pomocí definování pravidel procházení dokumentu.

Sesouhlasení na bázi pravidel

Nyní máme dostatek podkladů, abychom se podrobně podívali na vytváření ukázkového sesouhlasovače prezentace.   Připomeňme si, že ukázkový editor jazyka Java implementuje JavaPartitionScanner, který rozdělí dokument na typy obsahu reprezentující dokumentaci Javadoc, víceřádkové komentáře a vše ostatní.  

Pro každý z těchto typů obsahu musí být uvedena dvojice zjišťovač poškození/opravovač.   To je provedeno níže s použitím PresentationReconciler a DefaultDamagerRepairer.

	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;

Všimněte si, že příklad poskytuje skenery pro každý typ obsahu.  

Pro výchozí typ obsahu se nastaví JavaCodeScanner, takže lze zjistit a obarvit klíčová slova.  JavaCodeScanner sestaví pravidla pro zjišťování různých druhů tokenů, například jednořádkových komentářů, neviditelných znaků a slov.   Popisuje barvy, které by se měly použít pro slova s různými typy tokenů.   

Pro další typy obsahu se nastaví SingleTokenScanner a určí barva, která se použije pro tokeny v těchto typech obsahu.

Všechny podrobnosti ohledně poškozování a opravování náležitých částí dokumentu podle pravidel procházení obsluhuje DefaultDamagerRepairer.  Těmto detailům zpravidla nemusí rozumět kód modulu plug-in.  Váš modul plug-in by se měl zaměřit na sestavení sady pravidel vhodné pro rozdělení na oddíly a procházení obsahu svého editoru.

Dynamická instalace sesouhlasovače

Ukázkový editor jazyka Java poskytuje podtřídu třídy SourceViewerConfiguration pro instalaci sesouhlasovače prezentace, jak jsme již viděli.  Sesouhlasovač prezentace lze na textový prohlížeč instalovat také dynamicky pomocí protokolu IPresentationReconciler.   Žádný z těchto způsobů nepřináší za běhu konkrétní výhody, ale umístění veškerého přídavného potlačení chování do podtřídy třídy SourceViewerConfiguration je výhodné v tom, že se veškeré předefinované chování sloučí do jednoho místa.  Dynamický protokol může být užitečný, když jsou k prohlížeči po dobu života editoru připojeny různé sesouhlasovače prezentací.