Χρωματισμός σύνταξης

Ο χρωματισμός σύνταξης παρέχεται στο πλαίσιο του κειμένου πλατφόρμας με χρήση ενός μοντέλου βλάβης, επιδιόρθωσης και διευθέτησης.  Για κάθε αλλαγή που εφαρμόζεται σε έγγραφο, μια λειτουργία διευθέτησης παρουσίασης καθορίζει την περιοχή της οπτικής παρουσίασης που θα πρέπει να ακυρωθεί και τον τρόπο της επιδιόρθωσής της.  Μπορούν να χρησιμοποιηθούν διαφορετικές στρατηγικές για διαφορετικά είδη περιεχομένου στο έγγραφο.

Η υλοποίηση του χρωματισμού σύνταξης (με μια λειτουργία διευθέτησης παρουσίασης) είναι προαιρετική.  Η κλάση 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 υλοποιεί μια κλάση JavaPartitionScanner η οποία διαχωρίζει το έγγραφο σε είδη περιεχομένου που αντιπροσωπεύουν javadoc, σχόλια πολλαπλών γραμμών και όλα τα υπόλοιπα. 

Για κάθε ένα από αυτά τα είδη περιεχομένου, το ζεύγος λειτουργιών βλάβης/επιδιόρθωσης πρέπει να προσδιοριστεί.  Αυτό γίνεται παρακάτω με χρήση των κλάσεων PresentationReconciler και 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;

Να σημειωθεί ότι το παράδειγμα παρέχει λειτουργίες σάρωσης για κάθε είδος περιεχομένου.  

Το προεπιλεγμένο είδος περιεχομένου ρυθμίζεται με μια κλάση JavaCodeScanner έτσι ώστε να είναι δυνατός ο εντοπισμός και χρωματισμός λέξεων-κλειδιών.  Η κλάση JavaCodeScanner κατασκευάζει κανόνες για τον εντοπισμό διαφόρων ειδών στοιχείων, όπως τα σχόλια γραμμής, τα κενά διαστήματα και οι λέξεις.  Περιγράφει τα χρώματα που θα πρέπει να χρησιμοποιηθούν για τις λέξεις που ανήκουν σε διαφορετικά είδη στοιχείων.   

Τα άλλα είδη περιεχομένου έχουν ρυθμιστεί με μια κλάση SingleTokenScanner και έχουν ένα χρώμα που χρησιμοποιείται για στοιχεία αυτών των ειδών περιεχομένου.

Η διαχείριση όλων των λεπτομερειών για τη βλάβη και την επιδιόρθωση των κατάλληλων τμημάτων των εγγράφων σύμφωνα με τους κανόνες σάρωσης γίνεται από την εφαρμογή DefaultDamagerRepairer.  Αυτές οι λεπτομέρειες συνήθως δε χρειάζεται να γίνουν κατανοητές από κώδικα πρόσθετης λειτουργίας.  Η πρόσθετη λειτουργία σας θα πρέπει να εστιάσει στη δόμηση ενός συνόλου κανόνων που είναι κατάλληλοι για το διαχωρισμό και τη σάρωση του περιεχομένου της λειτουργίας επεξεργασίας.

Δυναμική εγκατάσταση μιας λειτουργίας διευθέτησης

Το παράδειγμα λειτουργίας επεξεργασίας Java παρέχει μια υποκλάση της SourceViewerConfiguration για την εγκατάσταση της λειτουργίας διευθέτησης παρουσίασης όπως την εξετάσαμε νωρίτερα.  Μια λειτουργία διευθέτησης παρουσίασης μπορεί να εγκατασταθεί δυναμικά σε μια προβολή κειμένου με χρήση του πρωτοκόλλου IPresentationReconciler.  Κανένας από τους δύο τρόπους δεν παρέχει κάποιο ιδιαίτερο όφελος χρόνου εκτέλεσης, ωστόσο η τοποθέτηση όλων των αντικαταστάσεων συμπεριφοράς που μπορούν να προστεθούν, σε μια υποκλάση της SourceViewerConfiguration έχει το πλεονέκτημα της ενοποίησης όλων των αντικαταστάσεων συμπεριφοράς σε ένα μέρος.  Το δυναμικό πρωτόκολλο μπορεί να είναι χρήσιμο όταν διαφορετικές λειτουργίες διευθέτησης παρουσίασης συνδέονται με μια προβολή για όλη τη διάρκεια ζωής μιας λειτουργίας επεξεργασίας.