# Überblick

## Bausteine

| Teil | Pfad | Aufgabe |
|---|---|---|
| Kern | `libs/aura-core` | Bindungen (`aura/core/binding.h`), Log, String-Helfer, `TaskRunner` (`aura/core/tasks.h`), Aufnahmedatum aus EXIF (`aura/core/exif.h`), was die Maschine meldet (`aura/core/system.h`: freier Platz, Uptime, Prozesslaufzeit, Speicher, Kernel, CPU-Daten/-Last/-Temperatur, Lüfter, Board, Laufwerke, Netzwerk aus `/proc` und `/sys`), tar-Archive eines Ordners als Stream mit vorab bekannter Länge und das Entpacken (`aura/core/tar.h`); ohne Grafik |
| Netz | `libs/aura-net` | HTTP(S)-Client (`aura/net/http.h`, libcurl), HTTP(S)-Server mit Routen als Regex, gestreamten Antworten, Uploads auf die Platte und optionalen Client-Zertifikaten (`aura/net/server.h`, cpp-httplib), Zertifikate ausstellen und prüfen (`aura/net/tls.h`); Web-Anwendungen darauf (`aura/net/web_app.h`: Routen mit Zugriffsbits, die das Programm benennt und per `identify()` vergibt, HEAD/OPTIONS, 401 mit Basic-Challenge oder 403, CSRF-Schutz, Sicherheits-Header, CORS zwischen eigenen Ports, Upload erst nach der Zugriffsprüfung, Hooks `onRequest`/`onRouted`/`onResponse`, Helfer für JSON, Dateien, Query) Sitzungen mit gleitendem Ablauf (`aura/net/sessions.h`) und Kryptografie (`aura/net/crypto.h`, `aura::crypto`: Zufall, Hex/Base64/Base32, MD5/SHA/HMAC, HOTP/TOTP nach RFC 4226/6238, AES-256-GCM als IV\|Chiffre\|Tag, RSA-OAEP, Signaturen, Schlüssel prüfen und erzeugen, Vergleich in konstanter Zeit); ohne Grafik, Option `AURA_WITH_NET` |
| Skript | `libs/aura-script` | JavaScript (ES2023, QuickJS-ng) und Lua (5.4) hinter einer API: `aura::script::Context` (`Context(Language::Lua)`) mit Speicher- und Zeitlimit, native Funktionen (`function()`, für beide Sprachen dieselben), Werte von/nach JSON, `console` ins Log; kein Datei- und Netzzugriff, Lua nur mit den sicheren Bibliotheken; Option `AURA_WITH_SCRIPT` |
| Fernsteuerung | `libs/aura-remote` | ein Programm über HTTP bedienen und beobachten: Screenshot (PNG mit 304 solange unverändert, JPEG), MJPEG-Stream, Tippen/Ziehen, Tasten, Szene als JSON (`screen`, `nodes`, `actions`, `screentextelements`, `session`). `aura/remote/remote.h` (Routen, nur aura-net) mit der Schnittstelle `Target`; `aura/remote/controller.h` (`aura::remote_ui`) setzt sie für eine `Application` um, mit Hooks für Screen-/Dialognamen, Sitzung und eigene Tastennamen. Zugriffsregeln und Pfad-Präfix bestimmt das Programm. |
| Sprache | `libs/aura-lang` | Lexer, Parser, AST (`aura/lang/ast.h`), Elementtypen und Properties (`aura/lang/schema.h`), C++-Generator (`src/codegen/`). Ohne Abhängigkeiten, damit es auch als Host-Tool für Cross-Builds baut. |
| Generator | `tools/aurac` | `aurac --out <dir> [--header h] [--context-include h] [--context-type T] [--namespace ns] [--no-line] datei.aura...` |
| Oberfläche | `libs/aura-ui` | Szenengraph und Fenster (`aura/ui/node.h`, `application.h`, …), Helfer des generierten Codes (`aura/ui/runtime.h`: Bindungen, Blöcke, `pressSink`, `str`, …), der Kontext (`context.h`), Laufzeitwerte (`value.h`), der Loader für den dynamischen Modus (`loader.h`, Interpreter in `src/builder/`), Bilder wie QImage (`image.h`: `readImageInfo`, `loadImage` mit EXIF-Drehung und Verkleinern, HEIF über libheif, `scaled`/`scaledToWidth` Fast/Smooth, `cropped`, `mirrored`, `rotated`, `isGrey`, `grey`, `toRgb` auf `sk_sp<SkImage>`), Bild-Encoder (`image_codec.h`) und Codes zum Drucken (`barcode.h`: EAN-13, `BarcodeNode`, pixelgenaue QR-Bilder) |
| CMake | `cmake/Aura.cmake` | `aura_add_ui(<target> [CONTEXT_INCLUDE <h> CONTEXT_TYPE <T>] [NAMESPACE <ns>] FILES ...)` |

Generator und Loader nutzen dieselben Tabellen (`aura/lang/schema.h`) und dieselben Regeln (Reihenfolge der Properties, Abhängigkeiten, Neuaufbau). Deshalb bauen beide denselben Baum.

## Ein Beispiel

```qml
// The smallest AURA dialog (examples/hello): a text and a button that counts the taps.
Dialog Hello {
    signal countChanged(int value)
    property int count
    size: screen.width, screen.height

    Rect {
        id: background
        color: #dede97
        size: parent.width, parent.height
    }
    Text {
        id: title
        text: tr("hello_title", "Hallo AURA")
        pixelSize: 40
        place: centerX, top 120
    }
    Rect {
        id: button
        color: button.pressed ? #1d5bb0 : #246ccc
        radius: 8
        size: 260, 64
        place: centerX, below title 60
        onTap: countChanged(count + 1)
        Text {
            text: "Getippt: " + str(count)
            pixelSize: 24
            color: #ffffff
            place: center
        }
    }
}
```

Das Beispiel liegt in `examples/hello/hello.aura` und lässt sich direkt mit `aura-view examples/hello` öffnen. Der Host stellt Kontext und Dialograhmen bereit; der Loader baut den Inhalt und verbindet Properties und Signale.
