Meditor: Unterschied zwischen den Versionen
Osiris (Diskussion | Beiträge) |
Osiris (Diskussion | Beiträge) |
||
Zeile 31: | Zeile 31: | ||
|- at.tugraz.itp.mltutor.meditor.editors.<span style="color:#00CC44">MatlabPartitionScanner</span> |
|- at.tugraz.itp.mltutor.meditor.editors.<span style="color:#00CC44">MatlabPartitionScanner</span> |
||
− | Der Partitioner ist<tt>FastPartitioner</tt> (war vorher der deprecated <tt>DefaultPartitioner</tt>) |
+ | Der Partitioner ist <tt>FastPartitioner</tt> (war vorher der deprecated <tt>DefaultPartitioner</tt>) |
Zeile 38: | Zeile 38: | ||
|- org.eclipse.jface.text.rules.RuleBasedScanner |
|- org.eclipse.jface.text.rules.RuleBasedScanner |
||
|- at.tugraz.itp.mltutor.meditor.editors.<span style="color:#00CC44">MatlabScanner</span> |
|- at.tugraz.itp.mltutor.meditor.editors.<span style="color:#00CC44">MatlabScanner</span> |
||
− | Anmerkung: <tt>RuleBasedPartitionScanner</tt> ist nur für <tt>IPredicateRules</tt>. |
||
+ | '''Warum zwei Scanner:''' <br> |
||
+ | <tt>FastPartitioner</tt> wird von <tt>MatlabDocumentProvider.createDocument(...)</tt> verwendet, und braucht ein <tt>IPartitionTokenScanner</tt>. Dieses wird von <tt>RuleBasedPartitionScanner</tt> implementiert, jedoch nicht von <tt>RuleBasedScanner</tt>. <tt>RuleBasedPartitionScanner</tt> arbeitet jedoch nur mit <tt>IPredicateRules</tt>, was von <tt>WordRule</tt> nicht implementiert ist. Letzteres wird für das Scannen nach den Keywords benutzt, weshalb für diesen Zweck letztendlich eine weitere Klasse von <tt>RuleBasedScanner</tt> abgeleitet wurde. (denk ich mir zumindest - [[User:Osiris|Osiris]]) |
||
==Weitere Schritte== |
==Weitere Schritte== |
Version vom 13. November 2005, 16:56 Uhr
Inhaltsverzeichnis
Ziel
Ein professioneller Editor für Matlab
Features:
- Syntax-Highlighting
- Automatische Einrückung
- Matching Brackets
- Templates?
Vorhandene Strukturen
In grün Geschriebenes sind die selbst entwickelten Klassen.
Editor
... |- org.eclipse.ui.texteditor.AbstractTextEditor |- org.eclipse.ui.texteditor.StatusTextEditor |- org.eclipse.ui.texteditor.AbstractDecoratedTextEditor |- org.eclipse.ui.editors.text.TextEditor |- at.tugraz.itp.mltutor.meditor.editors.MatlabEditProjection |- at.tugraz.itp.mltutor.meditor.editors.MatlabEditor
Partitionierung des Dokuments
PartitionScanner ist MatlabPartitionScanner.
java.lang.Object
|- org.eclipse.jface.text.rules.RuleBasedScanner
|- org.eclipse.jface.text.rules.BufferedRuleBasedScanner
|- org.eclipse.jface.text.rules.RuleBasedPartitionScanner
|- at.tugraz.itp.mltutor.meditor.editors.MatlabPartitionScanner
Der Partitioner ist FastPartitioner (war vorher der deprecated DefaultPartitioner)
Weiters gibt es MatlabScanner, welche allerdings nur für die Erstellung eines DefaultDamageRepairer in der Funktion MatlabConfiguration.getPresentationReconciler(...) verwendet wird.
java.lang.Object
|- org.eclipse.jface.text.rules.RuleBasedScanner
|- at.tugraz.itp.mltutor.meditor.editors.MatlabScanner
Warum zwei Scanner:
FastPartitioner wird von MatlabDocumentProvider.createDocument(...) verwendet, und braucht ein IPartitionTokenScanner. Dieses wird von RuleBasedPartitionScanner implementiert, jedoch nicht von RuleBasedScanner. RuleBasedPartitionScanner arbeitet jedoch nur mit IPredicateRules, was von WordRule nicht implementiert ist. Letzteres wird für das Scannen nach den Keywords benutzt, weshalb für diesen Zweck letztendlich eine weitere Klasse von RuleBasedScanner abgeleitet wurde. (denk ich mir zumindest - Osiris)
Weitere Schritte
Partitionierung
- Schön wäre es, wenn auch Regular Expressions für die Partitionierung verwendet werden könnten. Damit könnten z.B. Variablen erkannt werden, weiters ist es besonders praktisch, dass die RegEx bereits entwickelt sind.
- Leider gibt es als Futter für den RuleBasedScanner nur die Klassen:
- NumberRule
- PatternRule, davon abgeleitet:
- MultiLineRule
- SingleLineRule
- WhitespaceRule
- WordRule
- Idee: Eine Klasse für RegEx schreiben, die IRule oder IPredicateRule implementiert.
- Leider gibt es als Futter für den RuleBasedScanner nur die Klassen:
Diverses
Anmerkungen zur Entwicklung
Folgende Plugins werden vom Meditor-Plugin benötigt (einzutragen bei Dependencies)
- org.eclipse.ui
- org.eclipse.core.runtime
- org.eclipse.ui.workbench.texteditor
- org.eclipse.jface.text
- org.eclipse.ui.editors
- org.eclipse.core.resources
- org.eclipse.ui.ide
- org.eclipse.ui.views
- org.eclipse.jdt.ui
Erstellen eines eigenen Editors (nur Anmerkungen)
- Klasse von AbstractTextEditor ableiten
- Klasse von SourceViewerConfiguration ableiten
Dies ist der Ausgangspunkt für das Hinzufügen von eigenen Funktionalitäten - Einen DocumentProvider erweitern um ein IDocument Objekt, welches die Datenrepräsentation darstellt, zu erhalten. Dies ist auch der Ausgangspunkt für Notifacations.
- Actions werden in der Funktion createActions() (Memberfunktion des erzeugten Editors) hinzugefügt.
Fragen
- Warum werden die Keywords in einer eigenen Klasse (MatlabScanner) nur für den DefaultDamageRepairer und nicht für die Partitionierung verwendet?
Oder anders gefragt: Wozu MatlabScanner und MatlabPartitionScanner.