Käyttöympäristön tekstikehys mahdollistaa syntaksin värityksen vaurionkäsittelyn, korjauksen ja yhdistämisen mallien avulla. Jokaisen asiakirjaan tehdyn muutoksen kohdalla esityksen yhdistämistoiminto määrittää, miltä ulkoasun alueelta poistetaan kelpoisuus ja miten vika korjataan. Asiakirjan eri sisältölajeille voidaan käyttää erilaisia strategioita.
Syntaksin värityksen toteutus (esityksen yhdistämistoiminnon avulla) ei ole pakollista. Oletusarvon mukaan SourceViewerConfigurationei asenna esityksen yhdistämistoimintoa, koska se ei tunne muokkausohjelman käyttämää asiakirjamallia eikä sillä ole toimintoja syntaksin väritystä varten.
Jotta yhdistämisen luokkia voidaan käyttää syntaksin korostuksen toteutuksessa, muokkausohjelman lähdekoodin katseluohjelman kokoonpanon pitää olla määritetty määrittämään esityksen yhdistämistoiminto. JavaSourceViewerConfiguration näyttää, miten muokkausohjelmalle on määritetty esityksen yhdistämistoiminto.
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler= new PresentationReconciler(); ... return reconciler; }
Jotta voidaan ymmärtää, miten esityksen yhdistämistoiminto toimii, on ensin perehdyttävä vaurionkäsittelyn, korjauksen ja yhdistämisen käsitteisiin.
Sitä mukaa kuin käyttäjä muokkaa tekstiä muokkausohjelmassa, joitakin muokkausohjelman osia on tuotava uudelleen näkyviin muutosten näyttämiseksi. Uudelleen näytettävän tekstin laskemista kutsutaan vaurioiden laskemiseksi. Kun syntaksin väritys on käytössä, muokkauksen aiheuttama vika voi olla laaja, sillä yksi merkki tai sen puuttuminen voi muuttaa merkkiä ympäröivän tekstin värityksen.
Vaurionkäsittelytoiminnot (IPresentationDamager) määrittävät sen asiakirjan esityksen alueen, joka pitää luoda uudelleen asiakirjaan tehdyn muutoksen vuoksi. Esityksen vaurionkäsittelytoiminnon oletetaan olevan sisältölajikohtainen (tai aluekohtainen). Toiminnon pitää kyetä palauttamaan vioittunut alue, joka on kelvollista syötettä esityksen korjaustoiminnolle (IPresentationRepairer). Korjaustoiminnon taas pitää kyetä johtamaan vioittuneesta alueesta kaikki se tieto, jota se tarvitsee määrittämään kunkin sisältölajin tarvitsemia korjauksia.
Yhdistäminen kuvaa sitä prosessia, jossa säilytetään asiakirjan ulkoasu muokkausohjelmassa tehdyistä muutoksista huolimatta. Esityksen yhdistämistoiminto (IPresentationReconciler) valvoo tekstiin tehtäviä muutoksia toimintoon liitetyn katseluohjelman kautta. Asiakirjan alueiden perusteella se määrittää ne sisältölajit, joihin muutos on vaikuttanut, ja ilmoittaa asiasta sisältölajia vastaavalle vaurionkäsittelytoiminnolle. Kun vauriot on määritetty, ne välitetään sopivalle korjaustoiminnolle, joka muodostaa korjauskuvauksia. Näiden kuvausten avulla katseluohjelma synkronoi alueen taustalla olevan sisällön kanssa.
org.eclipse.jface.text.reconciler-paketin luokat määrittävät ylimääräisiä tukiluokkia, joiden avulla asiakirjamalli synkronoidaan asiakirjan ulkoisen muokkauksen kanssa.
Esityksen yhdistämistoiminnoille pitää jokaista asiakirjan sisältölajia varten määrittää sekä korjaustoiminto että vaurionkäsittelytoiminto. Kukin muokkausohjelma määrittää sopivan toteutuksen esityksen yhdistämistoiminnolle. org.eclipse.jface.text.rules tukee kuitenkin sääntöpohjaista asiakirjojen läpikäyntiohjelmaa vaurion laskemisessa ja korjauksessa. Paketissa on määritetty myös oletusvaurionkäsittely- ja oletuskorjaustoiminnot. Niitä voi käyttää yhdessä org.eclipse.jface.text.presentation-paketin vakioyhdistämistoimintojen kanssa määrittämään asiakirjan läpikäynnin sääntöjä ja siten toteuttamaan syntaksin väritystä.
Seuraavassa perehdytään tarkemmin erään esityksen yhdistämistoiminnon luomiseen. Java-esimerkkimuokkausohjelma toteuttaa JavaPartitionScanner-luokan, joka jakaa asiakirjan sisältölajeihin, kuten javadociin ja monirivisiin kommentteihin.
Jokaiselle sisältölajille pitää määrittää vaurionkäsittely- ja korjaustoiminto. Määritys tehdään alla olevassa esimerkissä PresentationReconciler- ja DefaultDamagerRepairer-luokkien avulla.
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;
Huomaa, että esimerkissä jokaiselle sisältölajille määritettiin läpikäyntitoiminto.
Oletussisältölaji määritetään JavaCodeScanner-luokan avulla, jotta avainsanoja voidaan tunnistaa tekstistä ja niitä voidaan värittää. JavaCodeScanner luo sääntöjä eri sanakkeiden, kuten yksirivisten kommenttien, tyhjän tilan ja sanojen, tunnistamista varten. Se määrittää myös värit, joita pitää käyttää kunkin sanakelajin sanoissa.
Muut sisältölajit määritetään SingleTokenScanner-luokan avulla ja niiden sisältämille sanakkeille määritetään myös väri.
Kaiken asiakirjan osien läpikäyntisääntöjen mukaiseen vaurionkäsittelyyn ja korjaukseen liittyvän tiedon käsittelee DefaultDamagerRepairer. Lisäosan koodin ei yleensä tarvitse käsitellä näitä tietoja. Lisäosan tulee sen sijaan luoda säännöt, joita voidaan käyttää lisäosan muokkausohjelman sisällön osiointiin ja läpikäyntiin.
Java-esimerkkimuokkausohjelman SourceViewerConfiguration -luokan aliluokka asentaa esityksen yhdistämistoiminnon edellä kuvatulla tavalla. Esityksen yhdistämistoiminto voidaan myös asentaa tekstinkatseluohjelmaan dynaamisesti IPresentationReconciler-rajapinnan yhteyskäytännön avulla. Kummastakaan asennustavasta ei ole erityistä ajonaikaista hyötyä, mutta kaikkien lisättävissä olevien toimintojen ohitusten laittaminen SourceViewerConfiguration -luokan aliluokkaan mahdollistaa kaikkien ohitusten sijoittamisen samaan paikkaan. Dynaaminen yhteyskäytäntö voi olla hyödyksi silloin, kun eri esityksen yhdistämistoiminnot on liitetty yhteen katseluohjelmaan koko muokkausohjelman toiminnan ajaksi.