Meditor Archiv: Unterschied zwischen den Versionen

Aus Physik
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
  +
=Versionen=
  +
* [[Meditor_101|Version 1.0.1]]
  +
  +
 
=Anfänglich 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.

Version vom 9. Dezember 2005, 15:24 Uhr

Versionen


Anfänglich vorhandene Strukturen

In grün Geschriebenes sind die selbst entwickelten Klassen.

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

Indent Strategy

public class MatlabConfiguration extends SourceViewerConfiguration {
    public IAutoIndentStrategy getAutoIndentStrategy(ISourceViewer sourceViewer,String contentType){
        if (autoIndentStrategy == null){
            autoIndentStrategy = new MatlabAutoIndentStrategy();
        }
        return autoIndentStrategy;
    }
    ...
}

Recht ungut weil

  1. Deprecated
  2. MatlabAutoIndentStrategy() ist von DefaultAutoIndentStrategy abgeleitet.
    • Diese ist ebenfalls deprecated
    • Davon soll nicht abgeleitet werden - und vom "neuen" Äquivalent ebenfalls nicht

Eine Änderung des Typs der Indent Strategy hat Auswirkungen in:

  • MatlabConfiguration.autoEditStrategy
  • MatlabConfiguration.getAutoEditStrategies(...)
  • MatlabConfiguration.resetIndentPrefixes()
  • MatlabEditor.indentStrategy
  • MatlabEditor.MatlabEditor()
  • MatlabEditor.resetForceTabs()

- ist mir ein bissi viel - meiner Meinung nach braucht nur die MatlabConfiguration was von der Indent Strategy zu wissen --Osiris 13:45, 1 December 2005 (CET)


Neue Strukuren

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)


Fragen

Erledigte

  • 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)