PXAML cevovod

PXAML cevovod pretvarja deklarativno UI označevanje v delujoče uporabniške vmesnike.

Pregled

PXAML (označevanje) → Razčlenjevalnik → IR (JSON) → Upodabljalnik → GUI/TUI/Web

Faze cevovoda

Faza 1: Razčlenjevanje

PXAML razčlenjevalnik bere XML označevanje in ustvari abstraktno sintaksno drevo (AST).

<!-- Vhod: PXAML -->
<Window Title="Demo" Width="400">
  <Button Content="Klikni me" Click="OnClick"/>
</Window>

Naloge razčlenjevalnika:

  • XML validacija
  • Razreševanje imenskih prostorov
  • Prepoznavanje elementov
  • Razčlenjevanje atributov
  • Prepoznavanje povezav dogodkov

Faza 2: Generiranje IR

AST se pretvori v vmesno predstavitev (IR) - vmesni format na osnovi JSON.

{
  "type": "Window",
  "properties": {
    "Title": { "value": "Demo", "type": "string" },
    "Width": { "value": 400, "type": "number" }
  },
  "children": [
    {
      "type": "Button",
      "properties": {
        "Content": { "value": "Klikni me", "type": "string" }
      },
      "events": {
        "Click": { "handler": "OnClick" }
      }
    }
  ]
}

Lastnosti IR:

  • Platformno neodvisna
  • Serializabilna (JSON)
  • Primerna za razlike pri vročem ponovnem nalaganju
  • Ohranjene informacije o tipih

Faza 3: Razreševanje povezav

Podatkovne povezave se analizirajo in pretvorijo v izvršljive strukture.

<!-- PXAML s povezavo -->
<TextBox Text="{Binding Path=UserName, Mode=TwoWay}"/>
{
  "type": "TextBox",
  "properties": {
    "Text": {
      "type": "binding",
      "path": "UserName",
      "mode": "TwoWay"
    }
  }
}

Faza 4: Upodabljanje

IR se s ciljno specifičnim upodabljalnikom prevede v naravne UI elemente.

Upodabljalnik Izhod Tehnologija
GUI Naravni kontrolniki LCL/WinAPI
TUI Terminalski znaki ANSI/VT100
Web DOM elementi HTML/CSS

Komponente

TWvdSPxamlParser

type
  TWvdSPxamlParser = class
  public
    function Parse(const ASource: string): TWvdSIRNode;
    function ParseFile(const APath: string): TWvdSIRNode;
  end;

TWvdSIRNode

type
  TWvdSIRNode = class
    NodeType: string;
    Properties: TWvdSPropertyMap;
    Children: TWvdSIRNodeList;
    Events: TWvdSEventMap;
    Bindings: TWvdSBindingList;
  end;

TWvdSRenderer (abstraktni)

type
  TWvdSRenderer = class abstract
  public
    procedure Render(ARoot: TWvdSIRNode); virtual; abstract;
    procedure Update(AOldRoot, ANewRoot: TWvdSIRNode); virtual; abstract;
  end;

Vroče ponovno nalaganje

Cevovod podpira vroče ponovno nalaganje z razlikovanje IR:

1. Nova PXAML → Razčlenjevalnik → Nova IR
2. Diff(Stara IR, Nova IR) → Seznam popravkov
3. Renderer.ApplyPatches(Seznam popravkov)

Prednosti:

  • Posodobijo se samo spremenjeni elementi
  • Stanje ostane ohranjeno
  • Hiter cikel med razvojem

Obravnavanje napak

Tip napake Faza Obravnava
XML sintaksna napaka Razčlenjevanje Pozicija + sporočilo
Neznan element Razčlenjevanje Opozorilo + nadomestek
Neveljaven tip lastnosti IR Prisilna pretvorba tipa + opozorilo
Napaka povezave Povezovanje Nadomestna vrednost

Glejte tudi

Zuletzt geändert: dne 29.01.2026 ob 22:21