formular lesen (binär) und openspec für codex
This commit is contained in:
72
openspec/specs/forms-dateiformat/spec.md
Normal file
72
openspec/specs/forms-dateiformat/spec.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# forms-dateiformat Specification
|
||||
|
||||
## Purpose
|
||||
|
||||
Das Formulardateiformat legt fest, wie ein Formular samt seiner
|
||||
Steuerelemente und seines Codes als Textdatei abgelegt, wieder gelesen
|
||||
und aus binären Dateien des Vorbilds übernommen wird — die Grundlage
|
||||
dafür, dass Formulare überhaupt gespeichert und ausgetauscht werden
|
||||
können.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: Aufbau des Textformats
|
||||
Eine Formulardatei SHALL aus einer `VERSION`-Zeile, einem
|
||||
Beschreibungsteil und einem Codeteil bestehen. Der Beschreibungsteil
|
||||
SHALL aus verschachtelten Blöcken `Begin <Klasse> <Name>` … `End` mit
|
||||
Zeilen `Eigenschaft = Wert` bestehen; Zeichenketten stehen in
|
||||
Anführungszeichen. Der Codeteil SHALL gewöhnlicher Quelltext des
|
||||
Formularmoduls sein. Die Versionen `1.00` und `2.00` SHALL angenommen
|
||||
werden; eine andere Version MUST mit Nennung der vorgefundenen Version
|
||||
abgewiesen werden.
|
||||
|
||||
#### Scenario: Formular mit einem Steuerelement
|
||||
- **WHEN** eine Datei ein `Form`-Blockelement mit einem eingebetteten `CommandButton`-Block und anschließendem `SUB`-Code enthält
|
||||
- **THEN** entsteht daraus eine Formularbeschreibung mit einem Steuerelement und dem zugehörigen Quelltext
|
||||
|
||||
#### Scenario: Unbekannte Version
|
||||
- **WHEN** die Datei mit `VERSION 3.00` beginnt
|
||||
- **THEN** wird sie abgewiesen und die Meldung nennt `3.00`
|
||||
|
||||
### Requirement: Schreiben ist die Umkehrung des Lesens
|
||||
Das Schreiben einer gelesenen Formularbeschreibung SHALL dieselbe Datei
|
||||
ergeben. Geschrieben SHALL nur werden, was vom Vorgabewert abweicht;
|
||||
Reihenfolge und Einrückung SHALL festgelegt und dokumentiert sein, damit
|
||||
zwei Läufe dieselbe Datei erzeugen.
|
||||
|
||||
#### Scenario: Rundlauf
|
||||
- **WHEN** eine Formulardatei gelesen und unverändert wieder geschrieben wird
|
||||
- **THEN** ist die geschriebene Datei byte-gleich zur gelesenen
|
||||
|
||||
#### Scenario: Vorgabewerte werden nicht geschrieben
|
||||
- **WHEN** ein Steuerelement nur Vorgabewerte trägt
|
||||
- **THEN** enthält sein Block außer `Begin`/`End` keine Eigenschaftszeile
|
||||
|
||||
### Requirement: Fehlerhafte Dateien werden benannt
|
||||
Eine unbekannte Klasse, eine für die Klasse unbekannte Eigenschaft, ein
|
||||
Wert außerhalb des Wertebereichs und ein unausgeglichener Block MUST je
|
||||
mit Dateiname, Zeilennummer und dem betroffenen Namen gemeldet werden.
|
||||
Eine solche Datei MUST NOT teilweise übernommen werden.
|
||||
|
||||
#### Scenario: Unbekannte Eigenschaft
|
||||
- **WHEN** ein `CommandButton`-Block die Zeile `Farbe = 3` enthält
|
||||
- **THEN** nennt die Meldung Datei, Zeile, `CommandButton` und `Farbe`
|
||||
|
||||
#### Scenario: Unausgeglichener Block
|
||||
- **WHEN** einer Datei ein `End` fehlt
|
||||
- **THEN** nennt die Meldung die Zeile des offenen `Begin`-Blocks
|
||||
|
||||
### Requirement: Konvertierung binärer Formulardateien
|
||||
Ein Unterbefehl SHALL eine binäre Formulardatei des Vorbilds (Kennung
|
||||
`FC 08 01 00`) in das Textformat übersetzen. Eine nicht erkannte oder
|
||||
beschädigte Datei MUST mit Nennung der Fundstelle abgewiesen werden;
|
||||
eine Teilausgabe MUST NOT entstehen. Der erschlossene Aufbau des
|
||||
Binärformats SHALL dokumentiert sein.
|
||||
|
||||
#### Scenario: Bekannte Beispieldatei
|
||||
- **WHEN** eine binäre Beispieldatei konvertiert wird
|
||||
- **THEN** entsteht eine Textdatei, deren Lesen dieselbe Formularbeschreibung ergibt wie die dokumentierte Erwartung
|
||||
|
||||
#### Scenario: Fremde Datei
|
||||
- **WHEN** eine Datei ohne die Kennung übergeben wird
|
||||
- **THEN** bricht der Befehl mit einer Meldung ab und schreibt keine Ausgabedatei
|
||||
Reference in New Issue
Block a user