Inhaltsverzeichnis
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