OpenSpec-Baseline: Phasen 0/1 als Specs nachgeruestet
Change "baseline-phasen-0-1" (Explore/Retrofit des umgesetzten Stands), per Archiv in die Haupt-Specs uebernommen und validiert: - sprach-frontend (6 Requirements: Lexik, Literal-Typisierung, Anweisungs-Grammatik, Semantik, Non-Feature-Abweisung, Diagnostik) - laufzeitfehler (2: Katalog 1-480, Unprintable error) - textbildschirm (5: dynamische Groesse, PRINT/Scroll, Cursor-API, Farbpalette/Blink, Unicode-Zellenmodell) - kompat-testkorpus (2: byte-genaue Sollausgaben, Frontend-Meilenstein) Workflow ab jetzt je Phase: Explore -> Proposal -> Umsetzung -> Archiv. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
## Purpose
|
||||
|
||||
Der emulierte Textbildschirm ist die Rendering-Grundlage für `PRINT`,
|
||||
`LOCATE`, `COLOR`, `CLS` und später die Forms-Engine: Unicode-Zellenpuffer
|
||||
mit dynamischer Terminalgröße und klassischer 16-Farben-Palette auf
|
||||
Ratatui.
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Dynamische Terminalgröße mit Mindestmaß
|
||||
Der Bildschirm SHALL der Terminalgröße folgen (Puffer per `resize`
|
||||
anpassbar; Inhalt bleibt oben links erhalten, Cursor wird geklemmt).
|
||||
Die Mindestgröße ist 80×25: kleinere Werte werden auf 80×25 geklemmt,
|
||||
und ist die Render-Fläche kleiner als 80×25, SHALL nur ein Hinweis
|
||||
„Terminal zu klein" mit Ist- und Mindestgröße gerendert werden.
|
||||
|
||||
#### Scenario: Vergrößertes Terminal
|
||||
- **WHEN** der Bildschirm auf 120×40 gesetzt wird
|
||||
- **THEN** sind alle 120 Spalten und 40 Zeilen adressierbar (`LOCATE 40, 120`)
|
||||
|
||||
#### Scenario: Zu kleines Terminal
|
||||
- **WHEN** die Render-Fläche 60×20 misst
|
||||
- **THEN** erscheint statt des Puffers der Hinweis mit Minimum 80×25
|
||||
|
||||
### Requirement: PRINT-Semantik mit Umbruch und Scrollen
|
||||
`print` SHALL Zeichen an der Cursorposition ausgeben, am rechten Rand
|
||||
umbrechen und am unteren Rand des Scrollbereichs den Bereich um eine
|
||||
Zeile nach oben scrollen; `\n` bricht um, `\r` setzt an den Zeilenanfang.
|
||||
`VIEW PRINT oben TO unten` SHALL das Scrollen auf den Bereich begrenzen;
|
||||
ohne eigene Einstellung folgt der Scrollbereich der Bildschirmgröße.
|
||||
|
||||
#### Scenario: Scrollen in VIEW-PRINT-Bereich
|
||||
- **WHEN** der Scrollbereich Zeilen 3–5 umfasst und in Zeile 5 ein Umbruch erfolgt
|
||||
- **THEN** scrollen nur die Zeilen 3–5; Kopfzeilen außerhalb bleiben unverändert
|
||||
|
||||
### Requirement: 1-basierte Cursor-API mit Bereichsprüfung
|
||||
`LOCATE`, `CSRLIN` und `POS` SHALL 1-basiert arbeiten; `LOCATE`
|
||||
außerhalb der aktuellen Bildschirmgrenzen SHALL als Fehler abgewiesen
|
||||
werden (Basis für Laufzeitfehler 5).
|
||||
|
||||
#### Scenario: Grenzprüfung
|
||||
- **WHEN** bei 80×25 `LOCATE 26, 1` aufgerufen wird
|
||||
- **THEN** wird der Aufruf abgewiesen
|
||||
|
||||
### Requirement: Klassische Farbpalette und Blink-Simulation
|
||||
Der Bildschirm SHALL die klassische Palette abbilden (Vordergrund 0–15,
|
||||
Hintergrund 0–7) und auf ANSI-Indexfarben mappen (klassisch 1 = Blau ↔
|
||||
ANSI 4 usw.). Blinkende Vordergrundfarben (16–31) SHALL als „hell"
|
||||
simuliert werden (Farbe − 16, Intensitätsbit gesetzt) — kein echtes
|
||||
Terminal-Blinken.
|
||||
|
||||
#### Scenario: Blink wird hell
|
||||
- **WHEN** `COLOR 17, 0` gesetzt wird (blinkend Blau)
|
||||
- **THEN** wird mit heller Vordergrundfarbe 9 gerendert
|
||||
|
||||
### Requirement: Unicode-Zellenmodell
|
||||
Der Puffer SHALL Unicode-Zeichen speichern (keine CP437-Emulation);
|
||||
aktuell gilt strikt 1 Zeichen = 1 Zelle. (Zeichen mit Darstellungsbreite
|
||||
2 belegen künftig zwei Zellen — beschlossene Änderung, Umsetzung in
|
||||
Phase 3 als eigenes Change.)
|
||||
|
||||
#### Scenario: Umlaute und Symbole
|
||||
- **WHEN** `Ä☃` ausgegeben wird
|
||||
- **THEN** belegen `Ä` und `☃` je genau eine Zelle
|
||||
Reference in New Issue
Block a user