James Westman, sviluppatore dell'app GNOME Maps, ha presentato un nuovo linguaggio di markup chiamato Blueprint, progettato per costruire interfacce utilizzando la libreria GTK. Il codice del compilatore per trasformare il markup Blueprint in file ui GTK è scritto in Python e distribuito con licenza LGPLv3.
Tra le ragioni per cui è stato creato il progetto c’è l'associazione dei file ui di GTK, che descrivono l'interfaccia, al formato XML, che è sovraccarico e poco pratico per scrivere o modificare il markup a mano. Il formato Blueprint si distingue per la lucidità nella rappresentazione delle informazioni e, grazie alla sua sintassi leggibile, consente di evitare l'uso di editor visivi specializzati nell'interfaccia durante la creazione, modifica e valutazione delle modifiche negli elementi dell'interfaccia.
Inoltre, Blueprint non richiede modifiche a GTK, riproduce completamente il modello dei widget GTK e si posiziona come un'estensione che compila il markup nel formato XML standard per GtkBuilder. Le funzionalità di Blueprint corrispondono esattamente a quelle di GtkBuilder; differisce solo nel metodo di rappresentazione delle informazioni. Per passare al progetto Blueprint è sufficiente aggiungere una chiamata a blueprint-compiler nello script di build senza modificare il codice. using Gtk 4.0; template MyAppWindow : Gtk.ApplicationWindow { title: _(«My App Title»); [titlebar] HeaderBar header_bar {} Label { styles [«heading»] label: _(«Hello, world!»); } }

Oltre al compilatore nel formato XML standard GTK, è in fase di sviluppo anche un plugin con supporto Blueprint per l'ambiente di sviluppo integrato GNOME Builder. È in fase di sviluppo anche un server LSP (Language Server Protocol) per Blueprint, che potrà essere utilizzato per la sintassi evidenziata, l'analisi degli errori, il suggerimento e l'autocompletamento del codice in editor di codice compatibili con LSP, tra cui Visual Studio Code.
Tra i piani per lo sviluppo di Blueprint c'è l'aggiunta di elementi di programmazione reattiva nel markup, implementata utilizzando la classe Gtk.Expression fornita in GTK4. Il metodo proposto è più familiare per gli sviluppatori di interfacce web in JavaScript e consente di ottenere la sincronizzazione automatica della rappresentazione dell'interfaccia con il modello di dati associato, senza necessità di aggiornare manualmente l'interfaccia utente dopo ogni modifica ai dati.
Fonte: opennet.ru
