Meditor: Unterschied zwischen den Versionen

Aus Physik
Zur Navigation springen Zur Suche springen
Zeile 10: Zeile 10:
   
   
==Vorhandene Strukturen==
+
=Anfänglich vorhandene Strukturen=
 
In <span style="color:#00CC44">grün</span> Geschriebenes sind die selbst entwickelten Klassen.
 
In <span style="color:#00CC44">grün</span> Geschriebenes sind die selbst entwickelten Klassen.
   
===Editor===
+
==Editor==
 
...
 
...
 
|- org.eclipse.ui.texteditor.AbstractTextEditor
 
|- org.eclipse.ui.texteditor.AbstractTextEditor
Zeile 23: Zeile 23:
   
   
===Partitionierung des Dokuments===
+
==Partitionierung des Dokuments==
 
PartitionScanner ist <tt>MatlabPartitionScanner</tt>.
 
PartitionScanner ist <tt>MatlabPartitionScanner</tt>.
 
java.lang.Object
 
java.lang.Object
Zeile 44: Zeile 44:
 
: Ist ausprobiert und: geht NICHT
 
: Ist ausprobiert und: geht NICHT
   
==Weitere Schritte==
 
   
  +
=Neue Strukturen=
===Deprecated Klassen ersetzen===
 
  +
<span style="color:#00CC44"><tt>MatlabScanner</tt></span> kommt weg. Die darin enthaltenen Funktionalitäten werden in <span style="color:#00CC44"><tt>MatlabPartitionScanner</tt></span> eingebaut. Da dieser nicht mit <tt>WordRule</tt> umgehen kann, wird eine neue innere Klasse für das Detektieren der Keywörter eingeführt:
  +
static class <span style="color:#00CC44">WordPredicateRule</span> extends WordRule implements IPredicateRule{
  +
public WordPredicateRule(IWordDetector detector, IToken successToken, IToken defaultToken);
  +
public void setWordList(String[] words);
  +
...
  +
}
  +
  +
  +
  +
=Weitere Schritte=
  +
  +
==Deprecated Klassen ersetzen==
 
'''Ersetzte Klassen:'''
 
'''Ersetzte Klassen:'''
 
* <tt>FastPartitioner</tt> durch <tt>DefaultPartitioner</tt>
 
* <tt>FastPartitioner</tt> durch <tt>DefaultPartitioner</tt>
Zeile 65: Zeile 76:
 
** Übrigens ist <tt>DefaultAutoIndentStrategy</tt> von <tt>DefaultIndentLineAutoEditStrategy</tt> abgeleitet, womit beide <tt>IAutoEditStrategy</tt> implementieren.
 
** Übrigens ist <tt>DefaultAutoIndentStrategy</tt> von <tt>DefaultIndentLineAutoEditStrategy</tt> abgeleitet, womit beide <tt>IAutoEditStrategy</tt> implementieren.
   
===Partitionierung===
+
==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.
 
* 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 <tt>RuleBasedScanner</tt> nur die Klassen:
 
** Leider gibt es als Futter für den <tt>RuleBasedScanner</tt> nur die Klassen:
Zeile 88: Zeile 99:
 
--[[User:Camhy|Camhy]] 09:10, 14 November 2005 (CET)
 
--[[User:Camhy|Camhy]] 09:10, 14 November 2005 (CET)
   
==Diverses==
+
=Diverses=
   
===Anmerkungen zur Entwicklung===
+
==Anmerkungen zur Entwicklung==
   
 
Folgende Plugins werden vom Meditor-Plugin benötigt (einzutragen bei Dependencies)
 
Folgende Plugins werden vom Meditor-Plugin benötigt (einzutragen bei Dependencies)
Zeile 104: Zeile 115:
 
* org.eclipse.help
 
* org.eclipse.help
   
===Erstellen eines eigenen Editors (nur Anmerkungen)===
+
==Erstellen eines eigenen Editors (nur Anmerkungen)==
   
 
# Klasse von <tt>AbstractTextEditor</tt> ableiten
 
# Klasse von <tt>AbstractTextEditor</tt> ableiten
Zeile 112: Zeile 123:
   
   
==Fragen==
+
=Fragen=
   
 
* Wie wichtig ist eine korrekte Partitionierung des Dokuments? => evt. sollten die beiden Scanner zusammengelegt werden.
 
* Wie wichtig ist eine korrekte Partitionierung des Dokuments? => evt. sollten die beiden Scanner zusammengelegt werden.
  +
: Wäre wesentlich schöner und ausbaufähiger wenn es nur einen Scanner gibt -> werden zusammengelegt. --[[User:Osiris|Osiris]] 11:34, 24 November 2005 (CET)
 
* Deprecated Klassen wegkriegen?
 
* Deprecated Klassen wegkriegen?
 
:Wäre vielleicht nicht schlecht, unter Eclipse 3.2 solltens aber noch funktionieren, wenn das ähnlich wie beim aktuellen RC läuft. --[[User:Camhy|Camhy]] 09:18, 14 November 2005 (CET)
 
:Wäre vielleicht nicht schlecht, unter Eclipse 3.2 solltens aber noch funktionieren, wenn das ähnlich wie beim aktuellen RC läuft. --[[User:Camhy|Camhy]] 09:18, 14 November 2005 (CET)

Version vom 24. November 2005, 12:34 Uhr

Ziel

Ein professioneller Editor für Matlab

Features:

  • Syntax-Highlighting
  • Automatische Einrückung
  • Matching Brackets
  • Templates?


Anfänglich 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 ist jedoch für IPredicateRules, was von WordRule nicht implementiert ist, gedacht. Letzteres wird für das Scannen nach den Keywords benutzt, weshalb für diesen Zweck letztendlich eine weitere Klasse von RuleBasedScanner abgeleitet wurde.
ABER: es gibt auch die Funktion RuleBasedPartitionScanner.setRules(IRule[] rules), es müsste nur ausprobiert werden, ob die WordRules damit wirklich funktionieren (bin ein wenig durch die Hilfe verwirrt --Osiris).

Ist ausprobiert und: geht NICHT


Neue Strukturen

MatlabScanner kommt weg. Die darin enthaltenen Funktionalitäten werden in MatlabPartitionScanner eingebaut. Da dieser nicht mit WordRule umgehen kann, wird eine neue innere Klasse für das Detektieren der Keywörter eingeführt:

static class WordPredicateRule extends WordRule implements IPredicateRule{
    public WordPredicateRule(IWordDetector detector, IToken successToken, IToken defaultToken);
    public void setWordList(String[] words);
    ...
}


Weitere Schritte

Deprecated Klassen ersetzen

Ersetzte Klassen:

  • FastPartitioner durch DefaultPartitioner
    • FastPartitioner implementiert alle benötigten Funktionalitäten, somit keine weiteren Änderungen
  • org.eclipse.ui.help.WorkbenchHelp soll ersetzt werden durch org.eclipse.ui.help.IWorkbenchHelpSystem
    • zumindest laut Eclipse-Hilfe, was aber nicht direkt geht (ist ja auch ein Interface)
    • Ein neues Hilfesystem, welches aber weniger kann als org.eclipse.ui.help.WorkbenchHelp, ist org.eclipse.help.HelpSystem
    • Mit IWorkbenchHelpSystem IWorkbench.getHelpSystem() kann eine Instanz des passenden Interfaces geholt werden.
      • Ein IWorkbench Objekt wiederum bekommt man mit static IWorkbench PlatformUI.getWorkbench()
    • Ein Beispiel:
      Statt WorkbenchHelp.setHelp(...);
      Wird jetzt PlatformUI.getWorkbench().getHelpSystem().setHelp(...) verwendet.


In Arbeit:

  • org.eclipse.jface.text.DefaultAutoIndentStrategy soll ersetzt werden durch org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy
    • Muss sowieso anders gelöst werden, da von beiden nicht abgeleitet werden soll.
    • Übrigens ist DefaultAutoIndentStrategy von DefaultIndentLineAutoEditStrategy abgeleitet, womit beide IAutoEditStrategy implementieren.

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:
      1. NumberRule
      2. PatternRule, davon abgeleitet:
        • MultiLineRule
        • SingleLineRule
      3. WhitespaceRule
      4. WordRule
    • Idee: Eine Klasse für RegEx schreiben, die IRule oder IPredicateRule implementiert.

Diese Klasse gibt es schon fertig implementiert: RegExRule
Eine Möglichkeit wäre es vielleicht teilweise auch, die vorgegebenen Rules für dieses Unterfangen zu verwenden, z.B.

WordRule wordRule = new WordRule(new MatlabWordDetector(), def); 

wobei MatlabWordDetector wie folgt implementiert wird:

import java.util.regex.Pattern;
import org.eclipse.jface.text.rules.IWordDetector;
public class MatlabWordDetector implements IWordDetector {
public boolean isWordStart(char c) {return Pattern.matches("Regular Expression für WordStart", String.valueOf(c));}
public boolean isWordPart(char c) {return Pattern.matches("Regular Expression für WordPart", String.valueOf(c));}

--Camhy 09:10, 14 November 2005 (CET)

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
  • org.eclipse.help

Erstellen eines eigenen Editors (nur Anmerkungen)

  1. Klasse von AbstractTextEditor ableiten
  2. Klasse von SourceViewerConfiguration ableiten
    Dies ist der Ausgangspunkt für das Hinzufügen von eigenen Funktionalitäten
  3. Einen DocumentProvider erweitern um ein IDocument Objekt, welches die Datenrepräsentation darstellt, zu erhalten. Dies ist auch der Ausgangspunkt für Notifacations.
  4. Actions werden in der Funktion createActions() (Memberfunktion des erzeugten Editors) hinzugefügt.


Fragen

  • Wie wichtig ist eine korrekte Partitionierung des Dokuments? => evt. sollten die beiden Scanner zusammengelegt werden.
Wäre wesentlich schöner und ausbaufähiger wenn es nur einen Scanner gibt -> werden zusammengelegt. --Osiris 11:34, 24 November 2005 (CET)
  • Deprecated Klassen wegkriegen?
Wäre vielleicht nicht schlecht, unter Eclipse 3.2 solltens aber noch funktionieren, wenn das ähnlich wie beim aktuellen RC läuft. --Camhy 09:18, 14 November 2005 (CET)
Unbedingt notwendig, da man sich typischerweise besser auskennt, wenn man gerade daran arbeitet. Sonst kann sich jemand in relativer zeitlicher Nähe wieder damit bechäftigen. Das heisst insgesamt sollte man bei solchen Projekten eher auf Zukunftssicherheit setzen.--Winny 11:42, 14 November 2005 (CET)
Hätt ich auch gedacht, v.a. da der ML-Tutor einige Eclipse-Upgrades miterleben dürfte. Ich würde sagen, dass das als erstes zu erledigen wär, damit wir gleich auf den "neueren" Klassen aufbauen. --Osiris 11:54, 14 November 2005 (CET)