Stili del testo

Come indicato in precedenza, chi desidera compilare i propri codici sorgenti scritti in Inform per Glulx, deve assicurarsi di sostituire tutte le istruzioni Z-assembly in istruzioni Glulx assembly (o chiamare le routine di Glulx Inform che fanno quello che faceva lo Z-assembly). L'altra importante sostituzione che i programmatori di giochi devono fare, riguarda le chiamate tipo "style bold;" e "style underline;" -- Glulx non le riconosce. Al loro posto dovete usare le chiamate di stile di Glulx Inform.

Le chiamate di stile di Glulx Inform funzionano quasi allo stesso modo delle normali chiamate di stile di Inform. Si usa il comando glk_set_style() con lo stile che si vuole applicare tra parentesi, ed ogni testo visualizzato dopo tale comando apparirà nello stile specificato. Non c'è una "disattivazione" dello stile, come in HTML con i suoi tag </style> -- per ricominciare a visualizzare il testo con lo stile normale, si usa semplicemente la riga "glk_set_style(style_Normal);". Le altre opzioni includono:

Come appaiono esattamente questi stili? Varia in base all'interprete. style_Emphasized potrebbe essere in grassetto, o in corsivo, o semplicemente chiaro. Potete, naturalmente, fornire dei suggerimenti riguardo i vari aspetti di un particolare stile (compresi i due stili che sono lasciati al programmatore da definire: style_User1 e style_User2). Alcuni interpreti terranno conto di questi suggerimenti; altri no. (Ed altri ne terranno conto in maniera errata: DOS e Allegro Glulxe al momento prendono i suggerimenti per i colori di primo piano e sfondo al contrario!) Ad oggi non esiste una "gestalt_StyleHints" o qualcosa di simile per verificare se i suggerimenti verranno o meno ignorati. Ma se vi sentite fortunati, usate la chiamata a glk_stylehint_set(), che richiede quattro argomenti:

1) Il tipo di finestra alla quale il suggerimento di stile si dovrebbe applicare. Le opzioni sono wintype_TextBuffer, wintype_TextGrid o wintype_AllTypes (ma non wintype_Graphics, visto che non è possibile visualizzare il testo in una finestra grafica).

2) Lo stile al quale il suggerimento di stile andrebbe applicato.

3) L'aspetto dello stile da modificare (segue la lista).

4) Il numero o la costante che indica come quell'aspetto dello stile dovrebbe essere modificato.

Il significato del quarto argomento cambia drasticamente in base a cosa c'è nel terzo argomento: "1" potrebbe significare "indenta di una piccola quantità", "grassetto", "quasi nero", o molte altre cose a seconda del contesto. Così il terzo ed il quarto argormento non dovrebbero essere considerati separatamente, ma in tandem. Segue una tabella delle combinazioni attualmente supportate:

ASPETTO (3zo arg) VALORE (4to arg)
stylehint_Indentation Questo dovrebbe essere un numero, il cui significato è "sposta il seguente blocco di testo di queste unità a destra" (i numeri negativi sposteranno il testo a sinistra.) Quanto è grande un'unità? Varia a seconda dell'interprete.
stylehint_ParaIndentation È come stylehint_Indentation, ma riguarda solo la prima riga di ogni paragrafo.
stylehint_Justification Ci sono quattro costanti tra cui scegliere: stylehint_just_LeftFlush (allineato a sinistra), stylehint_just_RightFlush (allineato a destra), stylehint_just_LeftRight (giustificato), e stylehint_just_Centered (centrato).
stylehint_Size Dovrebbe essere un numero, ma non un numero assoluto (come la dimensione di un punto); invece, 0 significa "usa la dimensione di default del font", mentre i numeri positivi aumentano la dimensione del font di un certo numero di incrementi ed i numeri negativi la diminuiscono. Gli incrementi non sono necessariamente della stessa dimensione: se 0 è 12 punti, e +1 è 14 punti, +2 potrebbe essere 18 punti.
stylehint_Weight 0 = normale; 1 = grassetto; -1 = sottile.
stylehint_Oblique 0 = non corsivo; 1 = corsivo.
stylehint_Proportional 0 = font a larghezza fissa; 1 = font proporzionale.
stylehint_TextColor Dovrebbe essere un numero a 32 bit indicante il colore da usare. Il modo di gran lunga più semplice di indicarlo è quello di farlo in esadecimale (nota), che viene fatto come segue. Prima si digita il simbolo del dollaro (il quale indica che quello che segue è un numero esadecimale.) Poi, si scrive un numero a due cifre esadecimali, da 00 a FF, che indica la quantità di rosso da applicare al colore. Quindi viene un numero a due cifre esadecimali che rappresenta la quantità di verde, ed infine un numero a due cifre esadecimali che indica la quantità di blu. Così, $000000 sarà nero, $FFFFFF sarà bianco, $FF000000 sarà rosso chiaro, $FFC000 sarà un gradevole dorato, $C0C0FF sarà blu chiaro, e così via.
stylehint_BackColor Questo è un numero a 32 bit proprio come sopra, solo che questa volta si sceglie il colore che deve apparire dietro il testo. D'altra parte questo non è il colore dello sfondo della finestra, i risultati possono arrivare ad essere estremante sgradevoli su alcuni interpreti. (Qui c'è un'immagine). Ad oggi non c'è un suggerimento di stile per indicare il colore di sfondo della finestra; con qualche fortuna verrà aggiunto tra non troppo tempo.
stylehint_Reverse 0 = scrivi normalmente; 1 = scrivi con il colore di sfondo sopra il colore di primo piano.

Così, mettendo tutto insieme, diciamo che volete definire style_User1 come testo rosso su uno sfondo nero. Questo si ottiene mediante il seguente codice:

   glk_stylehint_set(wintype_TextBuffer, style_User1,
      stylehint_TextColor, $FF0000);
   glk_stylehint_set(wintype_TextBuffer, style_User1,
      stylehint_BackColor, $000000);

Comunque i suggerimenti di stile hanno effetto solo sulle finestre create in seguito. Questo significa che se volete usarli, dovete definirli prima della creazione della finestra nella quale volete appaiano. E visto che gg_mainwin viene creata dalla libreria, se volete che appaiano nella normale finestra di gioco, mettere i vostri suggerimenti di stile in Initialise() è troppo tardi -- dovete usare il punto d'ingresso InitGlkWindow(). InitGlkWindow() viene chiamata diverse volte, passandole un parametro differente ogni volta; nel nostro caso, volete dichiarare i vostri suggerimenti di stile se il valore è uguale al rock value di gg_mainwin, come in:

   [ InitGlkWindow winrock;
      switch (winrock) {
         GG_MAINWIN_ROCK:
            glk_stylehint_set(wintype_TextBuffer, style_User1,
               stylehint_TextColor, $FF0000);
            glk_stylehint_set(wintype_TextBuffer, style_User1,
               stylehint_BackColor, $000000);
      }
      rfalse; ! leaving out this line will lead to a messy crash!
   ];

Un'ultima nota prima di proseguire. Potrebbe sembrarvi che del codice come

   print "Io dico che la violenza ";
   glk_set_style(style_Emphasized);
   print "non";
   glk_set_style(style_Normal);
   print " è la risposta giusta.";

potrebbe essere un po' scomodo. Lo è. D'altra parte, non è molto peggio di

   print "Io dico che la violenza ";
   style bold;
   print "non";
   style roman;
   print " è la risposta giusta.";

È per questo che molti autori di IF usano già delle piccole routine che rendono questo tipo di cose più comodo. Non c'è bisogno di digitare "style_Emphasized" un centinaio di volte; qualcosa come questo funzionerà tranquillamente:

   [ b text;
      glk_set_style(style_Emphasized);
      print (string) text;
      glk_set_style(style_Normal);
   ];

E una volta che avete creato quella routine, potete rendere la frase dell'esempio come in:

   print "Io dico che la violenza ", (b) "non", " è la risposta giusta.";


Prossima sezione: Righe di stato
O ritorna al sommario