Ü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 background {
        color: #dede97
        size: parent.width, parent.height
    }
    Text title {
        text: tr("hello_title", "Hallo AURA")
        pixelSize: 40
        place: centerX, top 120
    }
    Rect 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.

Dokumentationsquelle: docs/aura.md · Markdown herunterladen

Suche nach Themen, Widgets oder APIs.