În cadrul instrumentelor pentru dezvoltarea aplicațiilor oferite de proiectul GNOME (GNOME SDK) este inclus un compilator blueprint-compiler, care permite utilizarea markup-ului Blueprint pentru definirea interfeței aplicațiilor. Suportul pentru Blueprint în GNOME SDK va facilita utilizarea acestui limbaj de descriere a interfeței în aplicațiile GNOME fără a fi necesară instalarea manuală a dependențelor suplimentare. În prezent, Blueprint a fost adăugat în versiunile de noapte ale GNOME SDK și va face parte din lansările începând cu versiunea de toamnă GNOME 49.
Blueprint simplifică crearea interfeței utilizând biblioteca GTK4 și se distinge prin utilizarea unei sintaxe declarative simple, care reflectă modelul widget-urilor GTK, susținând șabloane tipice, tipuri și manipulatoare. Spre deosebire de formatul fișierelor ui GTK, Blueprint nu folosește markup XML, care este considerat supraîncărcat și incomod pentru editare manuală.
Pentru integrarea cu mediile de dezvoltare integrate și editorii de cod, se oferă un server LSP (Language Server Protocol), care poate fi folosit pentru evidențiere, analiză de erori, sugestii și completare automată a codului. Suportul pentru Blueprint este deja încorporat în GNOME Builder și este disponibil sub formă de pluginuri pentru Vim, GNU Emacs și Visual Studio Code. Există un utilitar pentru simplificarea portării definițiilor de interfață din XML în Blueprint.
Datorită sintaxei lizibile, formatul Blueprint permite evitarea utilizării editorilor vizuali specializați pentru interfețe. În același timp, Blueprint nu necesită modificări în GTK și este poziționat ca un addon, care compilează markup-ul în formatul XML standard pentru GtkBuilder. Funcționalitățile Blueprint sunt complet echivalente cu cele ale GtkBuilder, diferind doar prin metoda de prezentare a informațiilor. Codul instrumentarului este scris în Python și este distribuit sub licența LGPLv3. using Gtk 4.0; template $MyAppWindow: ApplicationWindow { default-width: 600; default-height: 300; title: _(«Hello, Blueprint!»); [titlebar] HeaderBar {} Label { label: bind template.main_text; } }
Sursa: opennet.ro
