NAME

gesy2ltx -A converter for G.E.S.yII (© Michael Denzlein) files to LaTeX files using style StrukTeX and substyle strukto.


SYNOPSIS

gesy2ltx.pl [options]


DESCRIPTION

Dieses Programm konvertiert Struktogrammdateien die mit G.E.S.yII (© Michael Denzlein) erstellt worden sind in LaTeX-Dateien. Es werden dazu Struktogramm-Umgebungen erstellt für den Style StrukTeX (© Jobst Hoffmann).

Werden beim Aufruf keine Optionen angegeben so durchsucht das Programm das aktuelle Verzeichnis nach .smd und .wmd Dateien ab und erzeugt entsprechende .ltx Dateien. Diese LaTeX-Dateien können anschließend mit \input in ein Hauptdokument eingebunden werden, dieses Hauptdokument kann mit der Option -m durch gesy2ltx.pl erzeugt werden.

Soll nur eine einzige Datei konvertiert werden, so ist die Optionen -ifür die Eingabedatei zu verwenden.


OPTIONS

-d directory

Verzeichnis zum Durchsuchen nach .smd und .wmd Dateien (Standard: Aktuelles Verzeichnis).

-l

Benutze die Textdatei load_list.txt in dem Verzeichnis von -d.

-i infile

Name der Eingabedatei (Schaltet die Option -d ab).

-o destfile

Name der Ausgabedatei (Schaltet die Option -d ab).

-m mainfile

Name des Hauptdokuments für LaTeX.

-e floatenv

Um jedes Struktogramm wird eine Floating-Umgebung gebildet. Die Standardumgebung ist strukto und erstellt eine Liste der Struktogramme.

-c precaption

Text der vor der normalen Beschriftung der Floating-Umgebung stehen soll. Bei der Umgebung strukto werden die Umgebungen mit Struktogrammn benannt.

-w

Schalte um auf WinGESy-Format. Dieser Schalter muss bei Einzeldateien und der Ladeliste angewendet werden. Bei einem Verzeichnisscan wird automatisch gewechselt.

-p

Schalte die Ausgabe von \sProofOn und \sProofOff ein.

-s

Sortiere die Eingabedateien vor der Verarbeitung.

-q

Keine Kommentare während der Verarbeitung.

-g

Sehr viele Kommentare aufSTDERR während der Verarbeitung.

-h

Kurze Hilfe.


INSTALLATION


Voraussetzungen

Betriebssyteme: Egal, Hauptsache ein Perl-Interpreter Programme:perl, TeX, G.E.S.y II oder WinGESy sowie die Styles StrukTeX, Here 


Erste Installation

Die beiliegende Styledatei strukto.sty sollte nach TEXINPUTS kopiert werden. Das Hauptskript gesy2ltx.pl ist in ein beliebiges Verzeichnis innerhalb von PATH zu kopieren.

Ist auf dem Rechner make vorhanden, so kann mit make install die Installation durchgeführt werden, eventuell müssen im CONFIG die Pfade angepaßt werden. Ein abschliessendes make all erstellt die Dokumentation und mit make test werden die Testdateien aus dem Verzeichnis smd/ nach LaTeX konvertiert.


BUGS

Es dürften noch einige Sonderzeichen für TeX durchgereicht werden... Dafür sind die Routinen HiASCII2TeX (HiASCII2TeX) und HiASCII2TeXlabel (HiASCII2TeXlabel) zuständig.

In der Datei CHANGES sind die einzelnen Änderungen zu den Version zu lesen.


AUTHOR

DokuTransData Jürgen A.Lamers Altstr. 112 D-52066 Aachen Tel.: +49-241-970504 Fax : +49-241-970506 

 Email: Juergen A.Lamers (jaloma@dokutransdata.de)WWW: http://www.DokuTransData.de/ 


COPYRIGHT

GESY2LTX.PL 1.1.0b (29.06.01) Perl-Version by Jürgen A.Lamers (jaloma@dokutransdata.de)

Copyright(C) 1995/99/2001 Jürgen A.Lamers

This program is free software; you can redistribute it and/or modify it under the terms of theGNU General Public License. This program comes with absolutely no warranty.


SUPPORT

Durch die Benutzung dieses Produktes akzeptierst du die volle Verantwortung für alle Schäden, die durch seine Benutzung oder das Unvermögen seiner Benutzung auftreten können. Die Entwickler dieser Software und der Autor und die Übersetzer dieser ``Urheberrechts-Notiz'' können nicht verantwortlich gemacht werden.


Sonstige Worte meinerseits

Halloele!

Da ich meine Dokumentation grundsätzlich in TeX setze, aber meine lieben Kollegen keine Ahnung davon haben (sie ärgern sich lieber mit Wysiwyg alaWP 6.1 oder Word 6.0 herum) und sowieso nur mit ``intuitiven'' Programmen umgehen können, mußte ich mir eine Schnittstelle zwischen G.E.S.yII (© Michael Denzlein) und TeX einfallen lassen.

Glücklicherweise speichert G.E.S.yII die erstellten Struktogramme als Textdatei ab, so daß mir der Umweg ``Einbinden einer Druckdatei in ein TeX-Dokument'' erspart bleibt.

In der jetzigen Version wird eine Konvertierung nach StrukTeX (Version 5.2b, 28. Mai 1998) unterstützt.

Über Anregungen bzw. Fehlermeldungen würde ich mich freuen. Wie ich erreichbar bin, kannst Du dem Abschnitt AUTHOR entnehmen.


Anmerkungen

Ein Perl-Guru wird wahrscheinlich milde über die Programmierung dieses Programmes lächeln. Ich weiß, daß ich nicht alle Features von Perl ausgenutzt habe. Nicht destotrotz ist dieses Programm besser programmiert als die vorherige Version (von daher hatte ich auch den Source nicht freigegeben...). Wer also Zeit und Lust hat, kann mir gerne die optimierte Version zu senden.


Hinweise

  1. Prozedurnamen:

    Ich verwende die Prozedurnamen um Referenzen zu den einzelnen Struktogrammen über den TeX-Befehl \ref zu erzeugen. Es dürfen somit keine Umlaute, Klammern oder ähnliches in den Prozedurnamen auftauchen, ansonsten darfst Du Dich auf kuriose Fehlermeldungen freuen.

  2. Aussehen:

    Ich habe mir nicht die Mühe gemacht die Attribute der einzelnen Strukturelemente die G.E.S.yII angibt auszuwerten. Daher sind folgende Parameter festverankert:


EBNF zu G.E.S.y II SMD-Dateien

Ich habe versucht die G.E.S.yII Dateien zu verstehen und mir anschließend die entsprechenden Syntaxdiagramme zu den einzelnen Bausteinen aufgemalt. Ich gebe diese Syntaxdiagramme an dieser Stelle in EBNF-Notation an (Ich hoffe jetzt nur, daß ich keine formalen Fehler mache...).


Anweisung

anweisung := ANWEISUNG anwattribute; 

anwattribute := ATTRIBUTE TEXT text* TEXTENDGROESSE float ATTR_END; 


While

while := WHILE anwattribute stmt* END; 


For

for := FOR forattribute stmt* END; 

forattribute := ATTRIBUTE TEXT text* TEXTENDGROESSE float TEXT2 text* TEXTENDGROESSE2 float ATTR_END; 


Repeat

repeat := REPEAT anwattribute stmt* END; 


Case

case := CASE anwattribute casestmt* END; 

casestmt := BEGIN XCASE anwattribute stmt* END; 


If

if := IF anwattribute xif ELSE xif END; 

xif := XIF anwattribute stmt*; 


Parallel

parallel := PARALLEL anwattribute parastmt* END; 

parastmt := BEGIN stmt* END; 


Exit

exit := EXIT name nameattribute; 


Subcall

subcall := PROCEDURE name nameattribute; 


Nameattribute

nameattribute := ATTRIBUTE TEXT text* TEXTEND GROESSE float NAME text GROESSE_NAME float ATTR_END; 


Stmt

stmt := anweisung | while | for | repeat | case | if | parallel | exit | subcall; 


Procedure

procedure := PROCEDURE name procattribute BEGIN stmt* END leerzeile; 

procattribute := ATTRIBUTE TEXT text TEXTEND GROESSE float GROESSE_ROOTNAME float ATTR_END 


Program

prghead := PROGRAM name prgattribute; 

prgend := eof; 

prgattribute := ATTRIBUTE stuff ATTR_END; 


Smd

smd := (leerzeile leerzeile | prghead) procedure* prgend; 


Anmerkungen

Die Module name, leerzeile, text, float, stuff und eof gebe ich jetzt nicht an, sie sollten selbsterklärend sein.

Ansonsten sind diese Definitionen einszueins abgebildet worden, mit der Zusatzfunktion das sofort die Ergebnissdatei erzeugt wird. Mit diesem Manko muß man/frau zum Beispiel beim CASE-Statement leben, da ich zu Beginn natürlich noch nicht wissen kann wieviele Fälle es geben wird.


Beschreibung der Methoden

Im nachfolgenden werden kurz die einzelnen Unterroutinen beschrieben.


parse_smd

Hauptroutine zum Parsen der G.E.S.y II-Dateien.


parse_procedure

Parsen der Prozedur Anweisungen.


parse_stmt

Parsen der einzelnen Anweisungen in einem beliebigen Block.


parse_anweisung

Parsen des BlocksANWEISUNG.


parse_exit

Parsen des BlocksEXIT.


parse_subcall

Parsen des BlockPROCEDURE Aufrufs.


parse_while

Parsen des BlocksWHILE.


parse_repeat

Parsen des BlocksREPEAT.


parse_for

Parsen des BlocksFOR.


parse_case

Parsen des BlocksCASE.


parse_parallel

Parsen des BlocksPARALLEL. Da StrukTeX diesen Block nicht unterstützt werden alle nachfolgenden Anweisungen als Kommentar ausgegeben.


parse_if

Parsen des BlocksIF.


parse_casestmt

Parsen der Attribute zuCASE und der eingebundenen Anweisungen.


parse_parastmt

Parsen der Anweisungen in einem Parallel-Block.


parse_xif

Parsen der Attribute zuXIF und der eingebundenen Anweisungen.


parse_forattribute

Parsen der Attribute zuFOR.


parse_nameattribute

Parsen der Attribute zuEXIT oderSUBCALL.


parse_anwattribute

Parsen der Attribute zuANWEISUNG,WHILE,REPEAT,CASE,IF,XIF undPARALLEL.


parse_procattribute

Parsen der Attribute zuPROCEDURE.


parse_prgattribute

Parsen der Attribute zuPROGRAM.


Ausgaberoutinen für die einzelnen Struktogramm-Elemente


write_prg_head

Im nachfolgenden wird der Kopf für eine komplette G.E.S.yII - Datei gebildet, sofern diese als PROGRAM abgespeichert worden ist.


write_prg_foot

Die Umgebung zu PROGRAM wird beendet.


write_proc_head

Im nachfolgenden wird der Kopf für jedes Struktogramm aufgebaut. Insbesondere wird mit $FLOATENV eine Floating-Umgebung gebildet.


write_proc_foot

Die Floating-Umgebung $FLOATENV sowie die Umgebung struktogramm werden beendet. Dabei werden zusätzlich noch ein Caption- sowie Labeltext gesetzt.


write_subcall_head

Ausgabe von \sub mit Argument $subname.


write_subcall_foot

Abschluß des Befehls \sub.


write_anweisung_head

Ausgabe von \assign mit Argument @anwtextbuf.


write_anweisung_foot

Abschluß des Befehls \assign.


write_while_head

Ausgabe von \while mit Argument @anwtextbuf.


write_while_foot

Abschluß von \while


write_for_head

Ausgabe von \forever.


write_for_foot

Abschluß von \forever.


write_repeat_head

Ausgabe von \until mit Argument @anwtextbuf.


write_repeat_foot

Abschluß von \until.


write_if_head

Ausgabe von \ifthenelse mit Argument @anwtextbuf.


write_else_block

Ausgabe von \change.


write_if_foot

Abschluß von \ifthenelse.


write_case_head

Ausgabe von \case mit Argument @anwtextbuf.

Anzahl der Fälle ist 3!


write_case_block

Ausgabe des Case-Block mit Argument @anwtextbuf.


write_xcase_block

Ausgabe von \switch für den nächsten Fall im Case-Block.


write_case_foot

Abschluß von \case.


write_parallel_head

Pseudo-Ausgabe des Kopfes einer PARALLEL-Anweisung.


write_parallel_block

Pseudo-Ausgabe für einen PARALLEL-Block.


write_parallel_foot

Pseudo-Ausgabe des Fusses einer PARALLEL-Anweisung.


write_exit_head

Ausgabe von \return.


write_exit_foot

Abschluß von \return.


Konvertierungsroutinen


HiASCII2TeX

Konvertiert Umlaute in TeX-Umlaute und quotet TeX-Befehlszeichen.


HiASCII2TeXlabel

Konvertiert alle Sonderzeichen die in einem Programmnamen vorhanden sein können zu einem Doppelpunkt, deutsche Umlaute werden nach Low-ASCII umgewandelt.


read_file_list


Und Tschüss