I plattformens textramverk finns en funktion för färgläggning av syntax. En modell för skada, reparation och avstämning används då. För varje ändring som tillämpas på ett dokument, bestämmer en presentationsavstämmare vilket område i den visuella presentationen som ska inaktiveras och hur det ska repareras. Olika strategier kan användas för olika innehållstyper i dokumentet.
Implementering av syntaxfärger (som görs med en presentationsavstämmare) är valfri. Som standard installerar inte SourceViewerConfiguration en presentationsavstämmare eftersom den inte känner till dokumentmodellen som används för en viss redigerare och har inget allmänt beteende för syntaxfärger.
Om avstämningsklasser ska användas till att implementera syntaxfärgläggning måste din redigerares källkodsvisningsprogram konfigureras så att en presentationsavstämmare definieras. Vi börjar med JavaSourceViewerConfiguration för att visa hur en presentationsavstämmare definieras för vår redigerare.
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler= new PresentationReconciler(); ... return reconciler; }
För att förstå vad en presentationsavstämmare gör, måste vi först titta på koncepten för skada, reparation och avstämning.
När användaren modifierar text i en redigerare, måste delar i redigeraren visas igen så att ändringarna visas. Beräkning av denna text kallas beräkning av skada. När det gäller syntaxfärger, blir mängden skada som orsakats av en redigeringsfunktion större, eftersom närvaron eller frånvaron av ett enstaka tecken kan ändra färgen på texten runt det.
Skademoduler (IPresentationDamager) bestämmer det område i ett dokuments presentation som måste återskapas p.g.a. en dokumentändring. En skademodul antas vara specifik för en viss dokumentinnehållstyp (eller område). Den måste kunna returnera ett skadeområde som är giltig inmatning till en reparationsmodul IPresentationRepairer). En reparationsmodul måste kunna härleda all information som behövs från ett skadeområde för att reparationerna som krävs för en viss innehållstyp ska kunna beskrivas.
Avstämning beskriver hela processen för underhåll av presentationen av ett dokument under det att ändringar görs i redigeraren. En presentationsavstämmare (IPresentationReconciler) övervakar ändringar i texten via tillhörande visningsprogram. I den används dokumentets områden för att fastställa de innehållstyper som påverkas av ändringen och en skademodul som är lämplig för påverkad innehållstyp anropas. När skadan beräknats, skickas den till lämplig reparationsmodul som konstruerar reparationsbeskrivningar som tillämpas visningsprogrammet för att synkronisera den med underliggande innehåll.
Klasserna i org.eclipse.jface.text.reconciler definierar ytterligare stödklasser för synkronisering av en dokumentmodell med extern manipulering av dokumentet.
Presentationsavstämmare ska tillhandahållas med ett reparations-/skademodulspar för varje innehållstyp som finns i dokumentet. Det är respektive redigerare som bestämmer lämplig implementering av en presentationsavstämmare. I plattformen finns dock i org.eclipse.jface.text.rules stöd för användning av regelbaserade dokumentskannrar för beräkning och reparation av skada. Förvalda skade- och reparationsmoduler definieras i detta paket. De kan användas tillsammans med standardavstämmarna i org.eclipse.jface.text.presentation för att implementera syntaxfärgläggning genom att definiera skanningsregler för dokumentet.
Nu har vi tillräckligt med bakgrund för att detaljgranska exemplet med skapandet av en presentationsavstämmare. Kom ihåg att i exemplet med Java-redigeraren implementeras en JavaPartitionScanner som delar in dokumentet i innehållstyper som representerar javadoc, flerradskommentarer och allting annat.
För var och en av dessa innehållstyper måste ett skade-/reparationsmodulspar anges. Det görs nedan med hjälp av PresentationReconciler och 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;
Observera att i exemplet anges skannrar för varje innehållstyp.
Standardinnehållstypen ställs in via en JavaCodeScanner så att nyckelord kan upptäckas och färgläggas. I JavaCodeScanner definieras regler för identifiering av olika typer av symboler, som t.ex. enradskommentarer, blanktecken och ord. Färgerna som ska användas för ord av olika symboltyper beskrivs.
De andra innehållstyperna definieras via en SingleTokenScanner och en färg som ska användas för symboler i dessa innehållstyper anges.
All information om att korrekta delar i dokumenten skadegörs och repareras enligt skanningsreglerna hanteras av DefaultDamagerRepairer. Denna information används normalt inte i instickskoden. I insticksprogrammet ska tonvikten läggas på uppbyggnad av en uppsättning regler som är lämpliga för partitionering och skanning av redigerarens innehåll.
I exemplet med Java-redigeraren finns en subklass av SourceViewerConfiguration för installation av presentationsavstämmaren som tidigare visats. En presentationsavstämmare kan även installeras dynamiskt i ett textvisningsprogram med hjälp av protokollet IPresentationReconciler. Man vinner inget i runtime genom att göra detta på något av sätten, men genom att placera alla förbigångar för anslutningsbart beteende i en subklass i SourceViewerConfiguration får man en fördel genom att alla beteendeförbigångar placeras på ett och samma ställe. Det dynamiska protokollet är praktiskt när olika presentationsavstämmare är kopplade till ett visningsprogram under hela livscykeln för en redigerare.