Meditor XML-Export: Unterschied zwischen den Versionen

Aus Physik
Zur Navigation springen Zur Suche springen
Zeile 8: Zeile 8:
 
* Aufruf von außen für ein File
 
* Aufruf von außen für ein File
 
* Export des aktuellen Files aus dem MLTutor heraus
 
* Export des aktuellen Files aus dem MLTutor heraus
  +
** Menüpunkt "Export as..." mit "Speichern unter" Dialog
  +
** Menüpunkt "Export" welcher die Einstellungen aus der Preference Page nimmt
 
* Konfiguration über XML-File
 
* Konfiguration über XML-File
 
* Erzeugen eines XML-Files <br> enthält:
 
* Erzeugen eines XML-Files <br> enthält:
Zeile 25: Zeile 27:
 
** Transformation in PDF (aus tex-File)
 
** Transformation in PDF (aus tex-File)
 
*** Rohgerüst ist da, es funktioniert aber etwas noch nicht <br> (sobald ich einen Befehl, welcher pdf-output erzeugt, verwende, geht's nicht - <tt>latex</tt> geht, <tt>pdflatex</tt> oder <tt>dvipdfm</tt> nicht)
 
*** Rohgerüst ist da, es funktioniert aber etwas noch nicht <br> (sobald ich einen Befehl, welcher pdf-output erzeugt, verwende, geht's nicht - <tt>latex</tt> geht, <tt>pdflatex</tt> oder <tt>dvipdfm</tt> nicht)
  +
* Preference Page für den Export
  +
** Einstellungen für:
  +
*** Speicherort
  +
*** Ausgabeformate (XML, HTML, LaTeX)
   
 
=== Beispieldokument ===
 
=== Beispieldokument ===
Zeile 76: Zeile 82:
 
* Preference Page für den Export
 
* Preference Page für den Export
 
** Einstellungen für:
 
** Einstellungen für:
*** Speicherort (oder Dialog)
 
 
*** Autor
 
*** Autor
 
*** Was kommt in den Header
 
*** Was kommt in den Header
** Idee: "Quickexport", für den in den Preferences Format (HTML, LaTeX, PDF), Speicherort, ... eingestellt wird<br> und dann noch eigene Befehle "Export as HTML", ... wo man evtl. auch nach dem Speicherort gefragt wird.
 
 
* Ausgabe in LaTeX / PDF
 
* Ausgabe in LaTeX / PDF
 
** Lösung des <tt>commandchars</tt>-Problems
 
** Lösung des <tt>commandchars</tt>-Problems
Zeile 242: Zeile 246:
   
 
===Export aus dem MLTutor heraus===
 
===Export aus dem MLTutor heraus===
Dafür ist in gewohnter Manier die Klasse
+
Dafür sind in gewohnter Manier die Klasse
 
public class <span style="color:#00CC44">MatlabExportAction</span> extends <span style="color:#00CC44">MatlabAction</span> implements IEditorActionDelegate{
 
public class <span style="color:#00CC44">MatlabExportAction</span> extends <span style="color:#00CC44">MatlabAction</span> implements IEditorActionDelegate{
 
...
 
...
 
}
 
}
  +
public class <span style="color:#00CC44">MatlabExportAsAction</span> extends <span style="color:#00CC44">MatlabAction</span> implements IEditorActionDelegate{
zuständig.
 
  +
...
 
  +
}
Beim Aufruf von "File->Export as XML" wird ein File-Speichern Dialog generiert, in welchem man den Namen des Zielfiles angeben kann. Die Quelle ist stets der im Editor angezeigte Text, d.h. das File muss nicht gespeichert sein. Als kleine Erleichterung wird das letzte verwendete Verzeichnis im <tt>PreferenceStore</tt> gespeichert und als Ausgangspunkt für den nächsten Aufruf des Dialogs verwendet.
 
  +
zuständig. Diese sind mit den Menüpunkten File->Export bzw. File->Export as... verbunden.
   
Es wird <span style="color:#00CC44">XMLExporter</span> zum Exportieren verwendet, wobei hier eine Initialisierung entfällt, da es ja schon einen Partitioner zum Dokument gibt. Dadurch ist das <tt>CONFIGFILEDIR</tt> ohne Bedeutung.
+
Es wird von beiden <span style="color:#00CC44">XMLExporter</span> zum Exportieren verwendet, wobei hier eine Initialisierung entfällt, da es ja schon einen Partitioner zum Dokument gibt. Dadurch ist das <tt>CONFIGFILEDIR</tt> ohne Bedeutung.
   
 
===Scripts===
 
===Scripts===
Zeile 260: Zeile 265:
 
==Bedienung und Konfiguration im MLTutor==
 
==Bedienung und Konfiguration im MLTutor==
 
===Menüpunkte===
 
===Menüpunkte===
* File->Export as... <br> Erzeugt "Speichern Unter"-Dialog, wobei das Ausgabeformat durch die angegebene Dateiendung bestimmt wird. <br> Das gewählte Verzeichnis und die Dateiendung werden gespeichert und beim nächsten Aufruf des Dialogs vorgeschlagen. Der vorgeschlagene Filename entspricht (bis auf die Endung) dem des Matlab Files.
+
* File->'''Export as...''' <br> Erzeugt "Speichern Unter"-Dialog, wobei das Ausgabeformat durch die angegebene Dateiendung bestimmt wird. <br> Das gewählte Verzeichnis und die Dateiendung werden gespeichert und beim nächsten Aufruf des Dialogs vorgeschlagen. Der vorgeschlagene Filename entspricht (bis auf die Endung) dem des Matlab Files. Als Quelle für die Daten dient der im Editor angezeigte Text, nicht das gespeicherte File.
  +
* File->'''Export''' <br> Führt alle Exporte wie in der zugehörigen Preference Page angegeben durch und verlangt keine weiteren Usereingaben.
   
 
===Die Propertypage===
 
===Die Propertypage===
 
====gewünschte Konfigurationsmöglichkeiten====
 
====gewünschte Konfigurationsmöglichkeiten====
* Ausgabeverzeichnis
+
* Ausgabeverzeichnis <span style="color:#00FF00">imlementiert</span>
* Ausgabeformat(e)
+
* Ausgabeformat(e) <span style="color:#00FF00">imlementiert</span>
 
* Namen der erzeugten Files
 
* Namen der erzeugten Files
 
* für HTML:
 
* für HTML:
Zeile 271: Zeile 277:
 
** Auswahl aus mehreren Styles
 
** Auswahl aus mehreren Styles
 
* für LaTeX:
 
* für LaTeX:
  +
** Präambel in eigenem File oder im Dokument
 
** Angabe einer eigenen Präambel
 
** Angabe einer eigenen Präambel

Version vom 26. Mai 2006, 16:55 Uhr

Es soll möglich sein "von außen" dem MLTutor ein Matlab-File zu übergeben, woraufhin er dieses partitioniert und diese Information in einem XML-File speichert.

Für dieses File sind Transformationen für html und tex zu schreiben.

Zielsetzung für html: z.B. http://itp.tugraz.at/LV/kernbich/AppSoft-1/MatlabPublish/

Was geht

  • Aufruf von außen für ein File
  • Export des aktuellen Files aus dem MLTutor heraus
    • Menüpunkt "Export as..." mit "Speichern unter" Dialog
    • Menüpunkt "Export" welcher die Einstellungen aus der Preference Page nimmt
  • Konfiguration über XML-File
  • Erzeugen eines XML-Files
    enthält:
    • Partitionierung
    • Den Originalcode
    • Auszeichnungselemente
  • Urform eines Schemas existiert - muss aktualisiert werden
  • Transformation allgemein
    • Java-Funktionalität zum Transformieren (in beliebiges Format)
    • Transformation in HTML
      • XSL File
      • php-Skript für serverseitige Transformation
      • Java-Funktion um gleich ein html-File zu exportieren
    • Transformation in LaTeX
      • XSL File und LaTeX Template
      • Java-Funktionalität um gleich ein tex-File zu exportieren
    • Transformation in PDF (aus tex-File)
      • Rohgerüst ist da, es funktioniert aber etwas noch nicht
        (sobald ich einen Befehl, welcher pdf-output erzeugt, verwende, geht's nicht - latex geht, pdflatex oder dvipdfm nicht)
  • Preference Page für den Export
    • Einstellungen für:
      • Speicherort
      • Ausgabeformate (XML, HTML, LaTeX)

Beispieldokument

Das html-Ergebnis kann hier betrachtet werden.

Den XML-Output gibt's da.

Für die LaTeX Ausgabe kann man sich das tex und das dvi File ansehen.

short.m:

% ==Einfaches Testbeispiel==
% ===Der Code===  

ex = [0:5]     % dies ist der laufindex 
for ind=1:10
    sin(ind)
    ind.^ex
end
disp('fertig'); 

% ===Formatierungstests=== 
%% jetzt ein bissi text
%% und noch etwas
%%  
%% neue zeile
% ====Ueberschrift3====
%% und auch <tt>variablen</tt> gibts hier
%%
%% genauso wie [http://links.da]
%% und Formeln:
%% $$a=\int_0^1 x^2 dx$$

Änderungen:

Kleine Änderung bei den Gleichungen und der Formatierung des XML-Files --Osiris 18:32, 16 May 2006 (CEST)

Was fehlt / Ideen

  • Im XML-Format:
    • Tags für Metadaten
      • Filename
      • Autor ???
      •  ???
Wie wärs mit http://dublincore.org/documents/dcmi-terms/?
Ist das eine bekannte/verbreitete Nomenklatur? --Osiris 15:39, 6 April 2006 (CEST)
Open Document Format / RSS. Siehe [1] --Camhy 20:48, 9 April 2006 (CEST)
  • Im erzeugten HTML-File:
    • Link zum .m-File
    • Zeilennummern ???
  • Funktionalität der Klassen
    • Nur Funktionen liefern
    • Nur Variablen liefern
  • Preference Page für den Export
    • Einstellungen für:
      • Autor
      • Was kommt in den Header
  • Ausgabe in LaTeX / PDF
    • Lösung des commandchars-Problems
      • Entweder einen anderen Satz von cc's zum Laufen bringen (derzeit '\' '{' '}', also Latex-Standard)
      • Wenn obiges nicht funktioniert, diese Chars escapen.
        • Geht nicht mit XSL, da keine Schleifen möglich sind -> Lösung in Java nötig, damit wäre aber für eine Transformation das XML-File mit dem Transformationsfile nicht mehr ausreichend.
  • Verbindung mit der Matlab-Konsole
    • Matlab-Ausgaben sollen angezeigt werden können
      • Dafür den Code Zeile für Zeile an Matlab übergeben und die Antwort auswerten (Variante 2)
      • oder nur bei Anforderung etwas an Matlab schicken (Variante 1)

Auszeichnungssprache

Es soll möglich sein, in Kommentaren Text auszeichnen zu können. Dieser wird nun nicht als Matlab-Kommentar sondern entsprechend seiner Bestimmung formatiert ausgegeben. Ziel ist es, damit bereits im .m File eine schön formatierte Seite zu definieren, um Code einfach und ansehnlich zu dokumentieren.

Als Basis wird die Wiki-Syntax verwendet.

Elemente

Überschriften mit

%==Überschrift 1==
%===Überschrift 2===

Wobei auch die Erstellung von Inhaltsverzeichnissen möglich sein soll.

Überschriften funktionieren


Gewöhnlicher Text in Proportionalschrift, wobei Absätze durch "Leerzeilen" erzeugt werden.

%% blabla blablabla
%%
%% Hier startet ein neuer Absatz, und blabla

Funktioniert


Hervorhebung von Variablen im Text:

%% bla <tt>variable</tt>

Funktioniert


Links und vordefinierte Platzhalter

%% [http://something.somedomain Links] wie im Wiki, 
%% und Kurzformen: [matref://sin]

Links funktionieren, müssen aber in [] angegeben werden


Verborgener Text

% <!-- Dies kommt zwar ins XML, wird aber in den entgültigen Seiten nicht mehr 
% dargestellt -->

% <!-- Auch enthaltener Matlab Code 
testi = sin(input) > 0; 
% wird ausgeblendet -->

Formeln Sowohl inline

%% Hier steht eine Formel $l = a \cdot tex$ im Text

Als auch zentriert in einer eigenen Zeile

%% $$ l = a \cdot tex $$

Letzteres funktioniert (in html mit png-Bildchen)


Matlab-Ausgaben

1. Variante: Den Wert von x ausgeben lassen mit z.B.:

%#x

2.Variante: überall wo Matlab etwas ausgeben würde dieses auch anzeigen

Weiters sollen von Matlab generierte Bilder auch angezeigt werden (können).


Weiteres:

  • Listen
  • ...

Formeln

  • schreiben in Latex-Syntax
  • Umsetzung in Planung, Ideen:
    • MathML und XHTML
      Darstellungsprobleme, LaTeX2MathML Transformation fraglich
    • Bilder generieren und ins zu erstellende File einbauen
      Wie generieren, geht's auch ohne Latex (weit entfernter Traum: Webservice)

Anmerkung zur Entwicklung

  • Vordefinierte Platzhalter
    • konfigurierbar machen -> Property Page
    • speichern in Properties-File
    • brauchen nicht mehr im XML-File stehen
  • Für Matlab-Ausgaben den Code Zeile für Zeile an die ML-Konsole schicken
  • Variablenerkennung: Was links von einem = steht ist eine Variable
    • Diese Erkennung ist nicht für die Partitionierung geeignet!!

Struktur

Die Klasse XMLExporter

public class XMLExporter {
    /** keys and default values for the properties */
    private final static String PROPERTYFILE      = "XML_export_properties.xml";
    public  final static String CONFIGFILEDIR_KEY = "CONFIGFILEDIR";
    private final static String CONFIGFILEDIR_DEF = "./";
    public  final static String OUTPUTDIR_KEY     = "OUTPUTDIR";
    private final static String OUTPUTDIR_DEF     = "./";
    public  final static String SCHEMAFILE_KEY    = "SCHEMAFILE";
    private final static String SCHEMAFILE_DEF    = "schema.xsd";

    // Definitionen der XML-Tags
    ...

    public static void main(String[] args) {}
    public static void writeToFile(String content, IPath outputFilePath) 
            throws FileNotFoundException, UnsupportedEncodingException, IOException {}
    public String export(IDocument document, Properties properties, String filetitle, IPath XMLOutputFilePath) {}
    public String export(Properties properties, String filetitle, IPath XMLOutputFilePath) {}
    public void exportPics(IPath outputDir, String filetitle) {}
    public void transformToHTML(String filetitle) {}
    public static void transform(String xmlFile, String xslFile, String outputFile) 
            throws FileNotFoundException, TransformerException {}
    public static String genSingleLineTag(String tag, String args, String content) {}
    public static String genSingleLineTag(String tag, String args, String content, boolean newline) {}
    ...
}

Der Funktion export(...) kann man über das Properties Objekt den Namen des Schema-Files mitteilen (mehr wird nicht verwendet). Passt dessen Default-Wert, so kann null übergeben werden. Der Titel des zu exportierenden Files wird im XML-File festgehalten, falls er übergeben wird.

Verwendung als Anwendung

java at.tugraz.itp.mltutor.tools.XMLExporter <inputfile> [-o <outputfile>] [--html]

Als Parameter ist dem Programm der Filename des zu exportierenden .m Files anzugeben. Als optionalen Parameter kann man den Namen des Output-Files angeben. Wenn das nicht geschieht, wird der Name des Matlab-Files verwendet, wobei die Dateiendung von .m auf .xml geändert wird. Bei Angabe von Pfaden beim Ausgabefile ist zu beachten, dass diese relativ zum (evtl. im Konfigurationsfile angegebenen) Ausgabeverzeichnis liegen. Weiters kann mit der Option --html die Generierung eines html-Files, welches (bis auf die Endung) gleich wie das Ausgabefile benannt wird, befohlen werden.

Es sollte an der durch PROPERTYFILE spezifizierten Stelle ein Properties-XML File befinden, falls von den Default-Werten abweichende Einstellungen vorgenommen werden sollen.

Und natürlich müssen die benötigten Eclipse Klassen irgendwie zugänglich gemacht werden (Package org.eclipse.jface.text)

Konfiguration

Die Konfiguration wird über ein zur Klasse java.util.Properties kompatibles XML-File durchgeführt. Die Keys sind in der oben angeführten Beschreibung der Klasse enthalten.

  • CONFIGFILEDIR - Verzeichnis in welchem die Konfigurationsfiles für den Partitioner liegen.
  • OUTPUTDIR - Verzeichnis in welches das erzeugte File gespeichert wird.
  • SCHEMAFILE - Pfad und Name des XML-Schema Files (wird wie angegeben in das XML-File eingetragen)

Entwicklungsnotizen

Benennung von Variablen, die Filenamen und Verzeichnisse speichern:

*Dir Verzeichnis
*FileName Name des Files, ohne Pfad/Verzeichnis - Angaben
*FilePath Komplette Pfadangabe eines Files

Export aus dem MLTutor heraus

Dafür sind in gewohnter Manier die Klasse

public class MatlabExportAction extends MatlabAction implements IEditorActionDelegate{
...
}
public class MatlabExportAsAction extends MatlabAction implements IEditorActionDelegate{
...
}

zuständig. Diese sind mit den Menüpunkten File->Export bzw. File->Export as... verbunden.

Es wird von beiden XMLExporter zum Exportieren verwendet, wobei hier eine Initialisierung entfällt, da es ja schon einen Partitioner zum Dokument gibt. Dadurch ist das CONFIGFILEDIR ohne Bedeutung.

Scripts

tex2png.sh transformiert ein Latex-File in ein schönes Bildchen. Dies wird für die Umwandlung von Formeln in Bilder (für HTML) in der Funktion XMLExporter.latexToPic(...) benötigt.
Aufruf:

$ tex2png.sh <outputdir> <picname>

wobei <outputdir> das jenen Ort, an dem das zu transformierende .tex-File liegt, bezeichnet und <picname> den vollen Pfad des zu erzeugenden Bildes beinhaltet.

Bedienung und Konfiguration im MLTutor

Menüpunkte

  • File->Export as...
    Erzeugt "Speichern Unter"-Dialog, wobei das Ausgabeformat durch die angegebene Dateiendung bestimmt wird.
    Das gewählte Verzeichnis und die Dateiendung werden gespeichert und beim nächsten Aufruf des Dialogs vorgeschlagen. Der vorgeschlagene Filename entspricht (bis auf die Endung) dem des Matlab Files. Als Quelle für die Daten dient der im Editor angezeigte Text, nicht das gespeicherte File.
  • File->Export
    Führt alle Exporte wie in der zugehörigen Preference Page angegeben durch und verlangt keine weiteren Usereingaben.

Die Propertypage

gewünschte Konfigurationsmöglichkeiten

  • Ausgabeverzeichnis imlementiert
  • Ausgabeformat(e) imlementiert
  • Namen der erzeugten Files
  • für HTML:
    • CSS: lokales File, File am ITP-Server oder im html-Head eingebunden
    • Auswahl aus mehreren Styles
  • für LaTeX:
    • Präambel in eigenem File oder im Dokument
    • Angabe einer eigenen Präambel