Cerca Totem's Lair su Facebook



Un nuovo formato di testo


Non trovando nessun altro formato descritto in maniera approfondita su Internet, ho deciso che per dare corpo a questa sezione avrei scritto una specie di piccolo tutorial su come creare un proprio formato di files. In questa sottosezione, descriverò un nuovo formato di testo che ho pensato per l'occasione e, dopo averne scritto le specifiche, scriverò anche un programma per leggere e scrivere testi in questo formato.


Il concetto
Prima di tutto bisogna pensare a cosa si vuole immagazzinare nel file, e a un modo semplice, ma soprattutto economico in termini di spazio, per farlo. Come ho detto prima, ho pensato ad un semplice file testuale, che però possa anche contenere i principali elementi di formattazione (grassetto, corsivo, sottolineato, allineato, colorato, font differente, grandezza, eccetera...). Dopo alcuni tentativi, ripensando al formato mp3 che avevo già analizzato, ho concluso che la via migliore per scrivere dati di questo tipo sia attraverso blocchi compatti di informazione, spesso chiamati chunk. Ogni chunk conterrà il testo e tutto ciò che riguarda la sua formattazione.


TLT Format Specification
Siccome non sono un megalomane, ho deciso di chiamare questo formato TLT, acronimo per Totem's Lair Text. Ok, ok... forse sono stato troppo egoista... proseguiamo.
L'inizio del file dovrebbe sempre essere costituito dalla stringa "TLT" per indicare che si tratta proprio di questo tipo di file: questo è un comune espediente che si usa per evitare di leggere files a cui è semplicemente stata cambiata l'estensione. Dopo i tre bytes dell'intestazione, cominciano subito i chunk di testo. E' vero che, di solito, le prime informazioni lette non costituiscono il vero contenuto, ma riguardano molto spesso alcune opzioni dell'intero file: dato che in questo caso non abbiamo ancora pensato a quali potrebbero essere, non ci serve altro per ora.
Ogni chunk è preceduto da un byte intero dedicato ai flags di formattazione:

a b c d e f gg
Ora, per non creare confusione, facciamo qualche esempio: Questa era la descrizione del chunk header, ma manca ancora una cosa fondamentale: la lunghezza del testo. Infatti, dopo l'header ci dovrebbe essere il testo, ma non si sa a priori di quanti bytes sia costituito, quindi dobbiamo usare altri quattro bytes per specificare la sua lunghezza e poterlo poi leggere. Riassumendo, quindi, l'header è strutturato in questo modo:

Intestazione chunk
Flags Colore (opzionale) Grandezza (opzionale) Nome font (opzionale) Lunghezza testo
1 byte 4 bytes 1 byte x bytes 4 bytes