WIF (Weaving Information File) è un formato di testo semplice, organizzato per righe, con cui i programmi si scambiano le messe in carta. La versione 1.1, del 20 aprile 1997, è quella usata oggi per lo scambio.
Questo documento descrive WIF 1.1 e lo correda di commenti. Le regole del formato seguono la specifica del 1997. Le note contrassegnate con Bower descrivono come Bower e il Visualizzatore WIF gratuito applicano queste regole. Queste note riguardano l’implementazione e non fanno parte della specifica del 1997. Per una panoramica introduttiva, senza valore normativo, consulta Che cos’è un file WIF?.
Nelle note su Bower lo stato è indicato con questi termini:
- Supportato — il campo o la sezione viene letto, scritto o entrambe le cose.
- Ignorato — il campo o la sezione può comparire in un file; viene saltato e la sua presenza, da sola, non fa fallire l’importazione.
- Non scritto — l’esportazione non scrive mai il campo o la sezione.
- Sospeso nella 1.1 — compare nel testo del 1997, ma non fa parte dello scambio attuale.
1. Obiettivi del formato
WIF è pensato per restare estensibile, leggibile in un editor di testo ed elaborabile da qualsiasi sistema in grado di leggere testo semplice.
I dati della struttura sono salvati come numeri di licci e pedali separati da virgole, non come campi di bit binari compattati. L’organizzazione del file ricorda quella di un file .INI di Windows: intestazioni di sezione tra parentesi quadre e righe Key=value. A differenza dei classici file di profilo privato di Windows 3.1, WIF non ha il limite di 64 KB e non si può analizzare con le API di profilo privato di Windows. Serve un parser apposito.
2. Tipo di file
Un file WIF è testo semplice. Non c’è alcun contenitore binario. Per convenzione l’estensione del file è .wif. Il formato si riconosce dalla sezione [WIF].
Estensione .wif Codifica ASCII (in pratica si accetta UTF-8 senza BOM) Fine riga LF o CRLF Ordine L’ordine delle sezioni e delle chiavi non conta
Bower. L’importazione e l’esportazione trattano i file .wif come testo semplice.
3. Regole lessicali
La grammatica è organizzata per righe. Ogni riga è vuota, un commento, un’intestazione di sezione o una coppia chiave/valore.
- Le righe vuote vengono ignorate.
- Se il primo carattere diverso da uno spazio è
;, l’intera riga è un commento. Un commento a fine riga può seguire un numero o un valore booleano, di solito dopo un secondo;. I valori di testo libero non devono avere un commento a fine riga. - Le intestazioni di sezione hanno la forma
[Section Name]. Il confronto non fa distinzione tra maiuscole e minuscole. Per convenzione i nomi si scrivono in maiuscolo. - Le assegnazioni hanno la forma
Key=value. Il confronto delle chiavi non fa distinzione tra maiuscole e minuscole. Il valore è il resto della riga dopo il primo=. - Le chiavi duplicate in una sezione non sono conformi. Il programma che legge il file non deve rifiutarlo solo per una chiave duplicata; può tenere il primo valore o l’ultimo.
- L’ordine delle sezioni e quello delle chiavi all’interno di una sezione non contano.
Il frammento seguente illustra le forme lessicali. Non è una messa in carta completa:
; this line is ignored [WEAVING] Shafts=4 Treadles=4
Bower. Le righe vuote e le righe di commento che iniziano con ; vengono saltate. I nomi si confrontano senza distinzione tra maiuscole e minuscole. Per le chiavi ordinarie vale l’ultimo valore. Le righe della struttura hanno come chiave il loro numero. Dai valori si tolgono gli spazi iniziali e finali. I commenti a fine riga non vengono rimossi.
4. Valori booleani e simboli
I valori booleani accettati come vero sono true, on, yes e 1. I valori booleani accettati come falso sono false, off, no e 0. Un valore booleano facoltativo omesso vale falso, a meno che una determinata sezione non stabilisca diversamente.
Bower. I valori true, yes e 1 valgono vero. Qualsiasi altro valore non vuoto vale falso. I valori on e off non sono trattati in modo particolare.
Un valore di tipo simbolo codifica un solo carattere, che viene mostrato al posto di un quadretto pieno:
=1 cifra =X carattere singolo ='X' carattere tra apici =#219 codice del carattere 0–255 Uno spazio si scrive ' ' oppure #32. Un cancelletto si scrive '#' oppure #35.
Bower. I simboli non sono implementati. L’aspetto è dato solo dai colori. Le sezioni dei simboli vengono ignorate all’importazione e non vengono mai scritte all’esportazione.
5. Requisiti minimi
Un file 1.1 conforme contiene [WIF] e [CONTENTS]. Ogni altra sezione presente nel file deve essere elencata in [CONTENTS] con il valore true. Le sezioni non usate possono essere omesse o elencate come false. Se una sezione è presente, devono esserci anche le sue chiavi obbligatorie.
Un file che contiene dati di rimettaggio ma nessuna sezione [WIF] non è un documento WIF 1.1 valido, anche se alcuni programmi provano a leggerlo.
Bower. Senza [WIF] l’importazione non riesce. La sezione [CONTENTS] non è né richiesta né verificata all’importazione. L’esportazione scrive sempre entrambe le sezioni e segna true per ogni sezione scritta.
6. Classi di sezioni e dati sparsi
Le sezioni informative registrano valori generali (titolo, dimensione della tavolozza, numero di licci e pedali). Le sezioni di dati registrano righe per filo e per trama (rimettaggio, colori e tabelle collegate). La sezione [CONTENTS] elenca le sezioni incluse, ma non elenca [WIF].
I dati sono sparsi. Il numero dei fili d’ordito e delle trame si ricava da Threads. I valori predefiniti si prendono da [WARP] e [WEFT]. Per i quadretti della struttura il valore predefinito è zero (non usato). Basta scrivere le chiavi che differiscono da questi valori predefiniti. I programmi che leggono il file seguono il procedimento inverso.
Se otto fili d’ordito hanno lo stesso colore e solo il filo 3 è diverso, il valore predefinito dell’ordito fornisce il colore comune e una sola eccezione registra la differenza:
[WARP] Threads=8 Color=1 [WARP COLORS] 3=2
I fili 1, 2 e 4–8 usano il colore 1 della tavolozza; il filo 3 usa il colore 2. La stessa regola vale per la struttura: una riga di rimettaggio mancante significa che quel filo non passa in nessun liccio, non che copia il filo precedente.
Bower. Si usano il numero dei fili e le tabelle della struttura e dei colori. I valori predefiniti di spaziatura e spessore, e le tabelle sparse di spessore e spaziatura, non sono implementati. Per impostazione predefinita la struttura è vuota; le chiavi di struttura mancanti restano vuote. Quando c’è una tabella dei colori, i valori predefiniti della chiave Color di [WARP] / [WEFT] si applicano se l’indice è maggiore di zero; poi si applicano i valori dei singoli fili e delle singole trame.
7. Sezioni private
I programmi possono salvare dati privati senza compromettere lo scambio. Il nome della sezione deve contenere un identificativo univoco della fonte, perché le sezioni di produttori diversi non entrino in conflitto:
[PRIVATE <SourceID> <SectionName>] Le righe all’interno non devono iniziare con '[', così il programma che legge il file trova la sezione successiva.
Bower. Le sezioni private vengono saltate e non vengono mai scritte. Bower non definisce alcun Source ID privato.
8. Elenco delle sezioni
Questo paragrafo elenca tutte le sezioni definite in WIF 1.1 e, per ciascuna, lo stato dell’implementazione in Bower. Lo scambio con Bower dipende dalla struttura, dal colore e dal profilo di esportazione descritto al paragrafo 10.
8.1 [WIF] — obbligatoria
Sezione di identificazione obbligatoria. Un file senza [WIF] non è un documento WIF 1.1 valido.
Chiave Ufficiale Descrizione ------ --------- ----------- Version obbligatoria es. 1.1 Date obbligatoria data in formato libero Developers obbligatoria contatto / autori Source Program obbligatoria nome del programma che ha creato il file Source Version facoltativa versione del programma che ha creato il file
Bower. All’importazione la sezione è obbligatoria. L’esportazione scrive Version=1.1, Date=April 20, 1997, [email protected], Source Program=Bower e Source Version=1.0. Se mancano singole chiavi in [WIF], l’importazione non fallisce.
8.2 [CONTENTS] — obbligatoria nella 1.1
Indice: il nome della sezione come chiave, true o false come valore. Basta elencare come true le sezioni presenti. È consentito, ma non obbligatorio, elencare tutte le sezioni definite con true o false.
Per scegliere le sezioni da elaborare, al programma che legge il file basta CONTENTS.
Sezioni informative: COLOR PALETTE, WARP SYMBOL PALETTE, WEFT SYMBOL PALETTE, TEXT, WEAVING, WARP, WEFT Sezioni di dati: NOTES, TIEUP, COLOR TABLE, WARP SYMBOL TABLE, WEFT SYMBOL TABLE, THREADING, WARP THICKNESS, WARP THICKNESS ZOOM, WARP SPACING, WARP SPACING ZOOM, WARP COLORS, WARP SYMBOLS, TREADLING, LIFTPLAN, WEFT THICKNESS, WEFT THICKNESS ZOOM, WEFT SPACING, WEFT SPACING ZOOM, WEFT COLORS, WEFT SYMBOLS, PRIVATE <SourceID> <SectionName> Sospese / riservate: TRANSLATIONS BITMAP IMAGE, BITMAP FILE, BITMAP IMAGE DATA
Bower. La sezione CONTENTS non è obbligatoria all’importazione e non serve a scegliere che cosa analizzare. L’esportazione scrive true per ogni sezione effettivamente scritta.
8.3 [COLOR PALETTE]
Dichiara la dimensione della tavolozza e l’intervallo numerico dei valori RGB. I file più vecchi possono usare 0–999 invece di 0–255; i programmi che leggono il file devono convertire i valori nella scala 0–255.
Chiave Ufficiale Descrizione ------ --------- ----------- Entries obbligatoria intero > 0, dimensione della tavolozza Range obbligatoria min,max con max > min Form=RGB obsoleta non scrivere; ignorare se presente
Range=0,999 con la voce di tabella 1=999,0,0 porta il canale del rosso a 255 su 8 bit. Range=0,255 con 1=255,0,0 non richiede alcuna conversione di scala.
Bower. Range viene letto (se manca, l’intervallo va da 0 a 255). Ogni canale si converte con round((c − min) / (max − min) * 255), poi si limita a 0–255. Se max−min è zero o negativo, l’importazione non riesce. Il valore di Entries non viene controllato. L’esportazione usa sempre Range=0,255.
8.4 [WARP SYMBOL PALETTE] / [WEFT SYMBOL PALETTE]
Chiave Ufficiale Descrizione ------ --------- ----------- Entries obbligatoria intero > 0
Bower. Ignorata. Non scritta.
8.5 [TEXT]
Metadati facoltativi sul lavoro e su chi l’ha realizzato: titolo, autore, recapiti. Nessuna di queste chiavi influisce sulla griglia della messa in carta.
Chiave Ufficiale ------ --------- Title facoltativa Author facoltativa Address facoltativa EMail facoltativa Telephone facoltativa FAX facoltativa
Bower. Ignorata. Non scritta.
8.6 [WEAVING]
Dimensioni del telaio e tipo di passo (in alzata o in abbassata). Il numero di licci e di pedali può aumentare se le sezioni della struttura indicano indici più alti di quelli dichiarati qui.
Chiave Ufficiale Descrizione ------ --------- ----------- Shafts obbligatoria intero > 0 Treadles obbligatoria intero > 0 Rising Shed facoltativa true = i licci elencati si alzano Profile obsoleta ignorare; non scrivere
Con il passo in alzata si sollevano i licci indicati nell’alzata dei licci (o sollevati tramite pedali e legatura). Il passo in abbassata funziona al contrario. Quando un file indica il passo in abbassata, dopo il caricamento i quadretti dell’alzata dei licci — o quelli della legatura — vengono invertiti, così le griglie usate internamente dal programma restano in alzata e il tessuto corrisponde al file.
Bower. Legge Shafts e Treadles (4 se mancano) e li aumenta in base alla struttura quando serve. Se Rising Shed manca, vale true; con false si applica l’inversione descritta sopra. In esportazione scrive sempre Rising Shed=true e, in modalità alzata dei licci, Treadles=0. Ignora Profile.
8.7 [WARP] e [WEFT]
Queste sezioni descrivono l’ordito o la trama nel loro insieme e i valori predefiniti di ogni filo. Una volta noto Threads, si crea quel numero di fili o di trame e si applicano i valori predefiniti; le sezioni per filo e per trama elencano solo i fili e le trame con un valore proprio, che prevale su quello predefinito (paragrafo 6).
Chiave Ufficiale Descrizione
------ --------- -----------
Threads obbligatoria numero di fili o di trame
Color facoltativa indice della tavolozza, o indice + R,G,B
Symbol facoltativa tipo di simbolo
Symbol Number facoltativa indice nella tabella dei simboli
Units obbligatoria con Decipoints | Inches | Centimeters
Spacing/Thickness
Spacing facoltativa numero reale ≥ 0
Thickness facoltativa numero reale ≥ 0
Spacing Zoom facoltativa numero intero ≥ 0
Thickness Zoom facoltativa numero intero ≥ 0
Chiavi obsolete nella 1.1 (da ignorare e non scrivere):
Colors, Palette, ColorMix
Per Color, la forma preferita per lo scambio è un semplice indice della tavolozza. Alcuni file aggiungono dopo l’indice anche una terna RGB.
Color=2 ; every end/pick defaults to COLOR TABLE entry 2 Color=2,255,0,0 ; index plus optional RGB — index only is kept
Se un’implementazione supporta solo uno dei due valori, spaziatura o spessore, e il file li contiene entrambi, Spacing ha la precedenza. Un’implementazione che gestisce solo lo spessore dovrebbe scrivere Spacing, oppure scriverli entrambi con gli stessi valori.
Bower. Legge Threads (se manca, 32 per l’ordito e 48 per la trama). Legge Color come un solo indice della tavolozza, se è maggiore di zero. Ignora simboli, spaziatura, spessore, zoom e l’eventuale RGB aggiunto a Color. In esportazione scrive Threads, Color e Units=Centimeters.
8.8 [NOTES]
Testo libero, una stringa per ogni riga numerata. Non fa parte delle griglie della messa in carta.
1=First line of notes 2=Second line
Bower. Ignorata. Non scritta.
8.9 [TIEUP]
Per ogni pedale si elencano i licci che fa alzare (con il passo in alzata, prima di un’eventuale inversione). La sezione serve, insieme al rimettaggio e alla pedalatura, quando il file non descrive la struttura con la sola alzata dei licci.
Chiave = pedale (1..n)
Valore = licci, separati da virgole
0 da solo significa non usato
Una riga mancante indica un pedale non usato
Esempio: 1=1,2 → il pedale 1 fa alzare i licci 1 e 2
Bower. Sezione supportata in modalità legatura. Accetta valori con più licci. In esportazione scrive una riga per pedale.
8.10 [COLOR TABLE]
Voci della tavolozza. Le chiavi Color di ordito e trama rimandano agli indici di questa tabella. I valori R,G,B usano il Range di [COLOR PALETTE].
Chiave = indice della tavolozza Valore = R,G,B nel Range della tavolozza
Esempio: tavolozza, colore predefinito dell’ordito e due fili con un colore proprio:
[COLOR PALETTE] Entries=2 Range=0,255 [COLOR TABLE] 1=200,40,40 2=40,40,200 [WARP] Threads=4 Color=1 [WARP COLORS] 2=2 4=2
I fili 1 e 3 usano la voce 1 della tavolozza, quella predefinita; i fili 2 e 4 usano la voce 2.
Bower. Sezione supportata, con la conversione di Range descritta sopra. In esportazione scrive una voce della tabella per ogni colore di filato distinto e usa sempre Range=0,255.
8.11 [WARP SYMBOL TABLE] / [WEFT SYMBOL TABLE]
Chiave = indice del simbolo Valore = tipo di simbolo WIF (paragrafo 4)
Bower. Ignorate. Non scritte.
8.12 [THREADING]
Per ogni filo d’ordito, i licci in cui è rimesso. Un filo può essere rimesso in più licci.
Chiave = filo d’ordito (1..n)
Valore = liccio, oppure liccio,liccio,...
1=1,5 significa che il filo 1 è rimesso nei licci 1 e 5
0 significa non usato
Una riga mancante indica un filo non usato
Bower. Sezione supportata, anche con fili rimessi in più licci. In esportazione scrive una riga per filo.
8.13 Sezioni per filo e per trama
Queste sezioni assegnano valori a singoli fili o trame. Sono di tre tipi: struttura (pedalatura o alzata dei licci), colore e aspetto (spessore, spaziatura, simboli).
Sezione Valore Predefinito se manca
------- ------ --------------------
[WARP THICKNESS] reale ≥ 0 [WARP].Thickness
[WARP THICKNESS ZOOM] intero ≥ 0 [WARP].Thickness Zoom
[WARP SPACING] reale ≥ 0 [WARP].Spacing
[WARP SPACING ZOOM] intero ≥ 0 [WARP].Spacing Zoom
[WARP COLORS] indice tavolozza [WARP].Color
(un solo intero; ignora la vecchia coda R,G,B)
[WARP SYMBOLS] indice simbolo [WARP].Symbol Number
[TREADLING] pedali non usato (zero)
[LIFTPLAN] licci non usato (zero)
[WEFT THICKNESS] reale ≥ 0 [WEFT].Thickness
[WEFT THICKNESS ZOOM] intero ≥ 0 [WEFT].Thickness Zoom
[WEFT SPACING] reale ≥ 0 [WEFT].Spacing
[WEFT SPACING ZOOM] intero ≥ 0 [WEFT].Spacing Zoom
[WEFT COLORS] indice tavolozza [WEFT].Color
[WEFT SYMBOLS] indice simbolo [WEFT].Symbol Number
La pedalatura comanda i licci attraverso la legatura: la chiave è la trama, il valore indica i pedali premuti, per esempio 5=1,2. L’alzata dei licci li comanda direttamente: la chiave è la trama, il valore indica i licci che si alzano, per esempio 5=1,3. Di solito un file usa uno solo dei due comandi (paragrafo 8.14).
Bower. Supporta pedalatura, alzata dei licci e colori di ordito e trama. Ignora le sezioni di spessore, spaziatura, zoom e simboli e non le scrive mai.
8.14 Modalità telaio, passo in alzata e armatura
Non esiste una chiave mode=. La modalità telaio si ricava dalle sezioni di struttura presenti nel file.
Bower e il Visualizzatore WIF gratuito usano questa regola:
Se [LIFTPLAN] è presente
e ([TREADLING] manca o Treadles è 0)
allora leggi il file come alzata dei licci
(THREADING + LIFTPLAN)
altrimenti leggilo come legatura
(THREADING + TIEUP + TREADLING)
L’alzata dei licci è il modello della ratiera: per ogni trama si elencano i licci. La legatura è il modello del telaio a licci: ogni pedale corrisponde a una colonna della legatura e la pedalatura è la sequenza dei pedali.
Quando Rising Shed è false, dopo il caricamento delle griglie si invertono tutti i quadretti dell’alzata dei licci (in modalità alzata dei licci) o tutti quelli della legatura (in modalità legatura). Rimettaggio e pedalatura restano come sono scritti.
Rising Shed=true, trama 1=1,2 → si alzano i licci 1 e 2
Rising Shed=false, stessa riga → quei licci restano registrati come abbassati,
e si alzano gli altri licci
L’armatura non è memorizzata nel file. Caricata la struttura e applicata l’eventuale inversione del passo, un quadretto dell’armatura è ad effetto ordito se il suo filo è rimesso in almeno un liccio che si alza sulla sua trama — secondo l’alzata dei licci, oppure secondo il pedale premuto e la sua legatura. Altrimenti il quadretto è ad effetto trama. I programmi ricalcolano l’armatura per mostrarla; non esiste una sezione dell’armatura da esportare.
Bower. Caricamento e visualizzazione seguono questa procedura. Il Visualizzatore WIF gratuito usa le stesse regole per struttura e colori. In modalità alzata dei licci il visualizzatore non mostra il blocco vuoto della legatura e nel pannello laterale indica i pedali con “-”.
8.15 Elementi sospesi e obsoleti
Sospesi nella 1.1: [TRANSLATIONS] [BITMAP FILE], [BITMAP IMAGE], [BITMAP IMAGE DATA] Eliminati o obsoleti nel testo della 1.1: sezione Design, ColorMix, chiave Colors, chiave Palette, coda RGB in WARP/WEFT COLORS
Bower. Ignora tutti questi elementi e non li scrive. Una sezione sconosciuta, da sola, non fa fallire l’importazione.
9. Limiti di dimensione dell’implementazione
Questi limiti non fanno parte di WIF 1.1. In importazione le dimensioni vengono contenute entro questi valori, così un file non può creare una griglia illimitata. I valori fuori intervallo vengono riportati entro l’intervallo; il file non viene rifiutato come non WIF.
Fili, trame 1 .. 4096 Licci, pedali 1 .. 64
10. Profilo di esportazione
Bower esporta un file WIF 1.1 completo, con il passo in alzata, destinato a programmi che leggono le sezioni principali elencate qui sotto. Note, simboli, spaziatura e dati privati di altri produttori presenti in un file importato non vengono conservati tra importazione ed esportazione.
- [WIF], [CONTENTS], [COLOR PALETTE] con Range=0,255, [WEAVING] con Rising Shed=true
- [WARP] e [WEFT] con Threads, indice Color, Units=Centimeters
- [COLOR TABLE], [THREADING], [WARP COLORS], [WEFT COLORS]
- O [LIFTPLAN] e Treadles=0, oppure sia [TIEUP] sia [TREADLING]
- Nessuna sezione TEXT, NOTES, dei simboli, di spaziatura, di spessore, privata o bitmap
11. Esempi
Gli esempi che seguono sono file WIF 1.1 completi. Contengono solo la struttura, senza tabella dei colori.
11.1 Modalità legatura
Otto fili, otto trame, quattro licci, quattro pedali. Rimettaggio seguente, legatura a saia e una pedalatura che ripete la sequenza dei quattro pedali.
[WIF] Version=1.1 Date=April 20, 1997 [email protected] Source Program=Example Source Version=1.0 [CONTENTS] WEAVING=true WARP=true WEFT=true THREADING=true TIEUP=true TREADLING=true [WEAVING] Shafts=4 Treadles=4 Rising Shed=true [WARP] Threads=8 [WEFT] Threads=8 [THREADING] 1=1 2=2 3=3 4=4 5=1 6=2 7=3 8=4 [TIEUP] 1=1,2 2=2,3 3=3,4 4=1,4 [TREADLING] 1=1 2=2 3=3 4=4 5=1 6=2 7=3 8=4
11.2 Modalità alzata dei licci
Quattro fili, quattro trame. Treadles è 0 e [LIFTPLAN] è presente, quindi il file si legge come alzata dei licci. Ogni trama elenca direttamente i licci. Non ci sono né legatura né pedalatura.
[WIF] Version=1.1 Date=April 20, 1997 [email protected] Source Program=Example [CONTENTS] WEAVING=true WARP=true WEFT=true THREADING=true LIFTPLAN=true [WEAVING] Shafts=4 Treadles=0 Rising Shed=true [WARP] Threads=4 [WEFT] Threads=4 [THREADING] 1=1 2=2 3=3 4=4 [LIFTPLAN] 1=1,2 2=2,3 3=3,4 4=1,4
12. Programmi correlati
Un file .wif si può aprire nel Visualizzatore WIF gratuito per esaminare la messa in carta nel browser, oppure importare in Bower per modificarla. Il visualizzatore offre il comando “Apri in Bower”.
13. Riferimenti
Fonti della specifica. Le note contrassegnate con Bower in questa pagina descrivono come Bower importa ed esporta i file; non fanno parte della specifica del 1997.
- Nielsen, Ravi, et al. Weaving Information File (WIF) Specification, Version 1.1. 20 aprile 1997. Hanno collaborato, tra gli altri, Ravi Nielsen (Patternland / Maple Hill Software), Bob Keates (Fiberworks), Rob Sinkler (SwiftWeave) e i membri della mailing list WIF del 1997. Testo: http://www.tantradharma.com/maplehill/wif/wif1-1.txt.
- Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0. 3 marzo 1996. Sostituita dalla 1.1 per gli scambi attuali.
- Asunder — Bower e il Visualizzatore WIF gratuito.