A szintaxisszínezést a platform szöveg keretrendszer biztosítja a kár-, javítási és összeegyeztetési modell segítségével. A dokumentum minden módosítása esetén egy megjelenítési összeegyeztető meghatározza, hogy a vizuális megjelenítés mely részeit kell érvényteleníteni, és hogyan javítható ki. Különböző stratégiák használhatók a dokumentum különböző tartalomtípusaihoz.
A szintaxisszínezés (és a megjelenítésegyengető segítségével) megvalósítása nem kötelező. A SourceViewerConfiguration alapértelmezés szerint nem telepíti a megjelenítésegyengetőt, mivel nem ismeri az adott szerkesztőhöz használt dokumentummodellt, és nem biztosít általános jellemzőket a szintaxiskiemeléshez.
Annak érdekében, hogy az egyengető osztályok szintaxisszínezést valósítsanak meg, a szerkesztő forrásmegjelenítő konfigurációnak beállítottnak kell lennie a megjelenítésegyengető megadásához. A JavaSourceViewerConfiguration elemmel indítunk annak megtekintéséhez, hogy a megjelenítésegyengető meg van adva a szerkesztőhöz.
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler= new PresentationReconciler(); ... return reconciler; }
A megjelenítésegyengető működésének megértéséhez először meg kell tekintenünk a kár, javítás és egyengető alapelveit.
Ha a felhasználó módosítja egy szerkesztőben a szöveget, akkor a szerkesztő részeit újból meg kell jeleníteni a módosítások megjelenítéséhez. A szöveg feldolgozása, amelyet újból meg kell jeleníteni, kár néven ismert. Szintaxisszínezés alkalmazásakor a szerkesztés művelet által okozott kár mértéke terjedelmesebb lesz, mivel egy karakter megléte vagy hiánya megváltoztathatja a körülötte lévő szöveg színezését.
A károkózók (IPresentationDamager) meghatározzák a dokumentum megjelenítésének helyét, amelyet a dokumentumváltozás miatt újból elő kell állítani. A megjelenítés károkozóról feltételeztük, hogy adott dokumentumtartalom-típus specifikus (vagy régió). Vissza kell tudnia térni a kár területére, amely érvényes bemenet a megjelenítés javítóhoz (IPresentationRepairer). A javítónak származtatnia kell tudni az összes szükséges információt a kárterületről az adott tartalomtípushoz szükséges javítások leírása érdekében.
Az Egyengetés leírja a dokumentum megjelenítésének átfogó karbantartási folyamatát, amint a szerkesztőben végzett módosításkor. A megjelenítésegyengető (IPresentationReconciler) megfigyeli a szöveg módosításait a hozzárendelt megjelenítőn keresztül. A dokumentum területét használja a változtatás által érintett tartalomtípusok meghatározásához és értesíti a károkozót, hogy ez megfelel az érintett tartalomtípusnak. A kár feldolgozás után átkerül a megfelelő javítóhoz, amely összeállítja a megjelenítőre alkalmazandó javításleírásokat, amelyek szinkronizálják az alapul szolgáló tartalommal.
A org.eclipse.jface.text.reconciler osztályai további támogatási osztályokat adnak meg a dokumentummodell szinkronizálása érdekében a dokumentum külső kezelésével.
A javító és károkozó párhoz megjelenítésegyengetőket kell megadni a dokumentumban található összes tartalomtípushoz. Minden szerkesztő meghatározza a megjelenítésegyengető megvalósítását. A platform támogatást biztosít az org.eclipse.jface.text.rules elemben a szabály alapú dokumentumelemzők használatához a kár feldolgozásához és kijavításához. Alapértelmezett károkozók és javítók meg vannak adva a csomagban. Ezek használhatók a szabványos egyengetőkkel az org.eclipse.jface.text.presentation elemben a szintaxisszínezés megvalósításához a dokumentum elemzési szabályok megadásához.
Most már elegendő háttérrel rendelkezünk a példa megjelenítésegyengető létrehozásának részletes megjelenítéséhez. Ne feledje el, hogy a Java szerkesztő példa megvalósít egy JavaPartitionScanner elemet, amely particionálja a dokumentumot javadocokra, többsoros megjegyzésekre és minden egyebet ábrázoló tartalomtípusokra.
Ezen tartalomtípusokhoz egy károkozó/javító párt kell megadni. Ennek végrehajtása az alábbiakban látható a PresentationReconciler és a DefaultDamagerRepairer segítségével.
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;
Ne feledje el, hogy a példa elemzőket biztosít az összes tartalomtípushoz.
Az alapértelmezett tartalomtípus a JavaCodeScanner elemmel van beállítva, így a kulcsszavak detektálhatók és színezhetők. A JavaCodeScanner szabályokat épít össze a különböző típusú jelsorok létrehozásához, mint például az egysoros parancsok, szóközszerű karakterek és szavak. Leírja a különböző jelsortípusok szavaihoz használandó színeket.
A többi tartalomtípus a SingleTokenScanner segítségével van beállítva és egy adott színt kell használni a jelsorokhoz ezekben a tartalomtípusokban.
A dokumentum megfelelő részeinek károkozásával és kijavításával kapcsolatos részleteket a DefaultDamagerRepairer kezeli az elemzésnek megfelelően. Ezeket a részletek a bedolgozókódnak jellemzően nem kell értenie. A bedolgozónak a szerkesztőtartalom particionálásához és elemzéséhez megfelelő szabályhalmaz összeépítésére kell fókuszálnia.
A Java szerkesztő példa biztosít egy SourceViewerConfiguration alosztályt a megjelenítésegyengető telepítéséhez, ahogy korábban láttuk. A megjelenítésegyengető a IPresentationReconciler protokoll segítségével dinamikusan is telepíthető egy szövegmegjelenítőn. Nincs különös futási előny egyik esetben sem, de az összes cserélhető viselkedés felülírás SourceViewerConfiguration alosztályában megadása biztosítja az összes viselkedési felülírás egyesítésének előnyeit egy helyen. A dinamikus protokoll akkor lehet hasznos, ha a különböző megjelenítésegyengetők a megjelenítőhöz vannak csatlakoztatva a szerkesztő teljes élettartama során.