WIF signifie Weaving Information File (fichier d’information de tissage). C’est un format texte que la plupart des programmes de tissage peuvent ouvrir et enregistrer, pour déplacer un dessin d’armure d’une appli à une autre sans le redessiner. La version utilisée par tout le monde est la 1.1, du 20 avril 1997.
Ci-dessous, nous passons en revue la structure d’un fichier .wif, section par section, et nous indiquons ce que Bower et notre visionneuse WIF gratuite font réellement de chaque partie. Si vous écrivez un outil ou si vous corrigez un fichier qui ne s’ouvre pas correctement, cela devrait aider. Pour une introduction simple d’abord, voir Qu’est-ce qu’un fichier WIF ?.
Quand nous parlons de Bower, nous utilisons ces étiquettes :
- Pris en charge — nous le lisons, l’écrivons, ou les deux.
- Partiel — nous le gérons, mais pas tous les cas limites du texte 1.1.
- Ignoré — le fichier peut le contenir ; nous le sautons et n’échouons pas l’import seulement parce qu’il est là.
- Non écrit — notre export ne l’émet jamais.
- Suspendu en 1.1 — encore listé dans l’ancien texte du format, mais plus d’usage courant aujourd’hui.
1. Objectifs de conception
Les concepteurs du WIF voulaient un format capable d’évoluer sans devenir illisible, qu’une personne puisse ouvrir dans un éditeur de texte et encore comprendre, et qu’un ordinateur capable de lire du texte brut puisse traiter.
Ils ont choisi des listes de numéros de lames et de marches séparés par des virgules, faciles à lire, plutôt que des champs binaires compacts. La mise en page ressemble beaucoup à un ancien fichier .INI Windows — sections entre crochets, lignes Key=value — mais elle n’est pas limitée aux 64 Ko des ini Windows 3.1 classiques. On ne peut pas utiliser les anciennes API private-profile de Windows ; il faut parser le texte soi-même.
2. Type de fichier
Un fichier .wif n’est que du texte. Il n’y a pas d’enveloppe binaire. On attend l’extension .wif ; ce qui compte, c’est le contenu.
Typical extension .wif Character set ASCII (UTF-8 without BOM is fine in practice) Line endings LF or CRLF Order Readers must not depend on section or key order
Bower : Nous lisons et écrivons le .wif comme du texte ordinaire.
3. Règles lexicales
Tout est basé sur les lignes. Une ligne est vide, un commentaire, un en-tête de section, ou une paire clé/valeur.
- Les lignes vides sont ignorées.
- Si le premier caractère non blanc est « ; », toute la ligne est un commentaire. On peut aussi mettre un commentaire après un nombre ou un booléen (souvent après un autre « ; »). Les clés en texte libre ne doivent pas avoir de commentaire en fin de ligne.
- Les en-têtes de section ressemblent à [Section Name]. La comparaison ignore la casse ; par convention, les noms sont en majuscules.
- Les affectations ressemblent à Key=value. La clé est comparée sans distinction de casse. La valeur est tout ce qui suit le premier « = » sur la ligne.
- Des clés en double dans une section sont de mauvaise forme. Les lecteurs ne doivent pas planter ; ils peuvent garder la première ou la dernière valeur.
- L’ordre des sections et l’ordre des clés dans une section n’ont pas d’importance pour un lecteur correct.
Voici un petit fragment (pas un dessin d’armure complet) :
; this line is ignored [WEAVING] Shafts=4 Treadles=4
Bower : Nous ignorons les lignes vides et les commentaires ; en début de ligne, comparons les noms sans distinction de casse, et pour les clés ordinaires la dernière valeur l’emporte. Les lignes de structure sont indexées par numéro. Nous tronquons les espaces des valeurs mais ne retirons pas spécialement les commentaires en fin de ligne.
4. Booléens et symboles
Pour vrai/faux, le format autorise true, on, yes et 1 du côté vrai, et false, off, no et 0 du côté faux. Si un booléen optionnel est absent, le traiter comme faux sauf indication contraire d’une section.
Bower : Nous traitons true, yes et 1 comme vrai. Toute autre valeur non vide compte comme faux. Nous ne gérons pas spécialement on ni off.
Certains programmes stockent des « symboles » de dessin (caractères à la place de cases remplies). Ils utilisent un petit type symbole :
=1 digit =X single character ='X' quoted character =#219 character code 0..255 Write a space as ' ' or #32. Write a hash as '#' or #35.
Bower : Nous n’implémentons pas les symboles. L’apparence repose uniquement sur les couleurs. Les sections de symboles sont ignorées à l’import et jamais écrites à l’export.
5. Exigences minimales
Un fichier 1.1 correct a toujours [WIF] et [CONTENTS]. Toute autre section présente dans le fichier doit être listée sous [CONTENTS] avec la valeur true. Vous pouvez omettre les sections inutilisées, ou les lister à false. Si une section est présente, ses clés obligatoires doivent l’être aussi.
Ainsi, un fichier qui n’a que le rentrage et pas de bloc [WIF] n’est pas un document WIF 1.1 valide — même si certains outils tentent encore de le lire.
Bower : L’import échoue sans [WIF]. Nous n’exigeons ni ne validons [CONTENTS] à l’entrée. À l’export, nous écrivons toujours les deux, et marquons true pour chaque section émise.
6. Sections d’information, sections de données et données éparses
Certaines sections sont du contexte (titre, taille de palette, effectifs du métier) et d’autres sont les lignes réelles du dessin (rentrage, couleurs par fil, etc.). [CONTENTS] liste ce qui est inclus. Elle ne liste pas [WIF] elle-même.
Le format attend des données éparses. On crée tous les fils de chaîne et de trame à partir de Threads, on remplit les défauts depuis [WARP] et [WEFT], on met les cellules de structure à zéro (inutilisées), puis on n’écrit que les lignes qui diffèrent de ces défauts. Les lecteurs font l’inverse.
Par exemple, si huit fils de chaîne sont le même rouge et seul le fil 3 est bleu, vous pouvez mettre le rouge par défaut sur la chaîne et surcharger une ligne :
[WARP] Threads=8 Color=1 [WARP COLORS] 3=2
Les fils 1, 2, 4–8 restent en couleur de palette 1 ; le fil 3 utilise la couleur 2. Même idée pour la structure : une ligne de rentrage absente signifie « aucune lame sur ce fil », pas « copier le fil précédent ».
Bower : Nous utilisons les nombres de fils et les tables de structure/couleur. Nous n’implémentons pas les défauts d’espacement/épaisseur ni l’espacement/épaisseur épars. La structure est vide par défaut ; les clés de structure manquantes restent vides. Si une table de couleurs est présente, nous appliquons les défauts Color de [WARP] / [WEFT] quand l’indice est supérieur à zéro, puis les surcharges par fil et par duite.
7. Sections privées
Les applications peuvent stocker leurs propres données sans casser les autres. Le nom doit inclure un identifiant de source unique pour éviter les collisions entre éditeurs :
[PRIVATE <SourceID> <SectionName>] Lines inside must not start with '[' so a reader can find the next section.
Bower : Nous ignorons les sections privées et ne les écrivons jamais. Nous ne définissons pas d’identifiant Source privé.
8. Catalogue des sections
Voici chaque section nommée du WIF 1.1, et ce que nous en faisons. Si vous ne vous intéressez qu’à ouvrir des dessins dans Bower, vous pouvez parcourir les entrées « Ignoré » et vous concentrer sur la structure, les couleurs et la liste d’export en section 10.
8.1 [WIF] — obligatoire
C’est le bloc d’identité. Sans lui, nous ne traitons pas le fichier comme du WIF.
Key Official Description ---- -------- ----------- Version required e.g. 1.1 Date required free-form date string Developers required contact / authors Source Program required creating program name Source Version optional creating program version
Bower : La section elle-même est obligatoire à l’import. Nous écrivons Version=1.1, Date, Developers, Source Program=Bower et Source Version à l’export. Nous n’échouons pas durement si des clés individuelles dans [WIF] manquent à l’import.
8.2 [CONTENTS] — obligatoire en 1.1
C’est une table des matières : nom de section comme clé, true ou false comme valeur. Seules les sections qui existent doivent être listées à true. Certains auteurs listent toutes les sections possibles en true/false ; c’est autorisé, pas obligatoire.
En théorie, un lecteur soigneux pourrait décider quoi charger à partir de CONTENTS seul. En pratique, beaucoup d’outils (y compris nous) parcourent simplement tout le fichier.
Informational flags: COLOR PALETTE, WARP SYMBOL PALETTE, WEFT SYMBOL PALETTE, TEXT, WEAVING, WARP, WEFT Data flags: 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> Suspended / reserved: TRANSLATIONS BITMAP IMAGE, BITMAP FILE, BITMAP IMAGE DATA
Bower : Nous n’exigeons pas CONTENTS à l’import et ne l’utilisons pas pour choisir quoi parser. À l’export, nous écrivons true pour chaque section réellement émise.
8.3 [COLOR PALETTE]
Cela indique la taille de la palette et la plage numérique des valeurs RVB. Les anciens fichiers utilisent parfois 0–999 au lieu de 0–255, donc les lecteurs doivent mettre à l’échelle.
Key Official Description ---- -------- ----------- Entries required integer > 0, palette size Range required min,max with max > min Form=RGB obsolete do not write; ignore if present
Par exemple, Range=0,999 et une entrée 1=999,0,0 mappe le canal rouge à environ 255 en 8 bits. Avec Range=0,255 et 1=255,0,0, aucun redimensionnement n’est nécessaire.
Bower : Nous lisons Range (défaut 0,255 s’il manque) et convertissons chaque canal avec round((c − min) / (max − min) * 255), puis bornons à 0–255. Si max−min est nul ou négatif, l’import échoue. Nous n’imposons pas Entries. L’export utilise toujours Range=0,255.
8.4 [WARP SYMBOL PALETTE] / [WEFT SYMBOL PALETTE]
Key Official Description ---- -------- ----------- Entries required integer > 0
Bower : Ignoré. Non écrit.
8.5 [TEXT]
Notes optionnelles sur l’œuvre et le créateur — titre, auteur, coordonnées. Rien de tout cela ne change la grille du dessin.
Key Official ---- -------- Title optional Author optional Address optional EMail optional Telephone optional FAX optional
Bower : Ignoré. Non écrit.
8.6 [WEAVING]
Taille du métier et convention de foule. Les lames et marches peuvent croître si les sections de structure mentionnent des numéros plus élevés que ceux déclarés ici.
Key Official Description ---- -------- ----------- Shafts required integer > 0 Treadles required integer > 0 Rising Shed optional true = listed shafts go up Profile obsolete ignore; do not write
Foule montante signifie que les lames listées dans le plan de levée (ou levées via marche/attachage) sont celles qui montent. La foule descendante est l’autre convention physique. Si un fichier indique une foule descendante, nous inversons les cellules du plan de levée — ou d’attachage — après chargement pour que nos grilles internes restent en foule montante et que le tissu corresponde encore au sens du fichier.
Bower : Nous lisons Shafts et Treadles (défaut 4 si manquants) et les faisons croître depuis la structure si besoin. Rising Shed absent est traité comme true. False déclenche l’inversion ci-dessus. L’export écrit toujours Rising Shed=true, et Treadles=0 en mode plan de levée. Profile est ignoré.
8.7 [WARP] et [WEFT]
Ces sections décrivent toute la chaîne ou la trame et le défaut pour chaque fil. Une fois Threads connu, on alloue autant de fils ou de duites, on applique les défauts, puis les sections éparses surchargent les individus (voir section 6).
Key Official Description
---- -------- -----------
Threads required number of ends or picks
Color optional palette index, or index + R,G,B
Symbol optional symbol type
Symbol Number optional index into symbol table
Units required if spacing/ Decipoints | Inches | Centimeters
thickness used
Spacing optional real ≥ 0
Thickness optional real ≥ 0
Spacing Zoom optional integer ≥ 0
Thickness Zoom optional integer ≥ 0
Obsolete in 1.1 (ignore / do not write):
Colors, Palette, ColorMix
Pour Color, préférez un simple indice de palette pour l’échange. Certains fichiers ajoutent aussi un triplet RVB ; nous n’utilisons que l’indice.
Color=2 ; every end/pick defaults to COLOR TABLE entry 2 Color=2,255,0,0 ; index plus optional RGB — we keep the index only
Si un programme ne gère qu’un des deux, espacement ou épaisseur, le format dit de préférer Spacing quand les deux sont présents. Si vous ne pensez qu’en « épaisseur », écrivez Spacing (ou les deux avec les mêmes nombres).
Bower : Nous lisons Threads (défauts 32 pour la chaîne et 48 pour la trame si manquants) et Color comme un indice de palette quand il est supérieur à zéro. Nous ignorons symboles, espacement, épaisseur, zooms et RVB supplémentaire sur Color. L’export écrit Threads, Color et Units=Centimeters.
8.8 [NOTES]
Texte libre, une chaîne par ligne numérotée. Ne fait pas partie des grilles du dessin.
1=First line of notes 2=Second line
Bower : Ignoré. Non écrit.
8.9 [TIEUP]
Chaque marche liste les lames qu’elle lève (sens foule montante, avant toute inversion). On l’utilise avec le rentrage et le pédalage hors plan de levée pur.
Key = treadle (1..n)
Value = shafts, comma-separated
0 alone means unused
Missing lines stay unused
Example: 1=1,2 → treadle 1 raises shafts 1 and 2
Bower : Pris en charge en mode attachage. Les valeurs multi-lames sont acceptées. L’export écrit une ligne par marche.
8.10 [COLOR TABLE]
C’est la palette. Les indices ici sont ceux que pointent les clés Color de chaîne/trame. Les nombres R,G,B vivent dans le Range de [COLOR PALETTE].
Key = palette index Value = R,G,B in the palette Range
Voici un petit exemple de palette, défaut de chaîne, et deux surcharges :
[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
Les fils 1 et 3 prennent par défaut l’entrée rougeâtre ; les fils 2 et 4 utilisent la bleutée.
Bower : Pris en charge, avec le mappage Range décrit plus haut. L’export écrit une entrée de table par couleur de fil unique et utilise toujours Range=0,255.
8.11 [WARP SYMBOL TABLE] / [WEFT SYMBOL TABLE]
Key = symbol index Value = WIF symbol type (see section 4)
Bower : Ignoré. Non écrit.
8.12 [THREADING]
Par quelles lames passe chaque fil de chaîne. Plusieurs lames sur un même fil sont autorisées.
Key = warp end (1..n)
Value = shaft, or shaft,shaft,...
1=1,5 means end 1 is on shafts 1 and 5
0 means unused
Missing lines stay unused
Bower : Pris en charge, y compris les fils multi-lames. L’export écrit une ligne par fil.
8.13 Sections par fil et par duite
Ces sections attachent des valeurs à des fils ou duites individuels. Trois groupes : structure (pédalage / plan de levée), couleur, et apparence (épaisseur, espacement, symboles).
Section Value Default if missing
------- ----- ------------------
[WARP THICKNESS] real ≥ 0 [WARP].Thickness
[WARP THICKNESS ZOOM] integer ≥ 0 [WARP].Thickness Zoom
[WARP SPACING] real ≥ 0 [WARP].Spacing
[WARP SPACING ZOOM] integer ≥ 0 [WARP].Spacing Zoom
[WARP COLORS] palette idx [WARP].Color
(one integer; ignore old R,G,B tail)
[WARP SYMBOLS] symbol idx [WARP].Symbol Number
[TREADLING] treadles unused (zero)
[LIFTPLAN] shafts unused (zero)
[WEFT THICKNESS] real ≥ 0 [WEFT].Thickness
[WEFT THICKNESS ZOOM] integer ≥ 0 [WEFT].Thickness Zoom
[WEFT SPACING] real ≥ 0 [WEFT].Spacing
[WEFT SPACING ZOOM] integer ≥ 0 [WEFT].Spacing Zoom
[WEFT COLORS] palette idx [WEFT].Color
[WEFT SYMBOLS] symbol idx [WEFT].Symbol Number
Le pédalage est pour le mode attachage : la clé est la duite, la valeur les marches enfoncées, p. ex. 5=1,2. Le plan de levée est direct : la clé est la duite, la valeur les lames levées, p. ex. 5=1,3. Un fichier normal utilise l’un ou l’autre chemin de contrôle, pas les deux à la fois (voir la section suivante).
Bower : Nous prenons en charge pédalage, plan de levée et couleurs chaîne/trame. Nous ignorons épaisseur, espacement, zoom et sections de symboles, et ne les écrivons jamais.
8.14 Mode métier, foule montante et dessin d’armure
Il n’y a pas de clé unique « mode= » dans le fichier. On déduit comment lire la structure d’après ce qui est présent.
Voici la règle que nous utilisons dans Bower et la visionneuse WIF gratuite :
If [LIFTPLAN] is present
and ([TREADLING] is missing or Treadles is 0)
then treat the file as liftplan
(THREADING + LIFTPLAN)
else treat it as tie-up
(THREADING + TIEUP + TREADLING)
Le plan de levée est le modèle style dobby « chaque duite liste les lames ». L’attachage est le modèle classique de métier à lames : les marches sélectionnent une colonne d’attachage, et le pédalage est la séquence de marches.
Quand Rising Shed est false, après chargement des grilles nous inversons chaque cellule du plan de levée (mode plan de levée) ou chaque cellule d’attachage (mode attachage). Le rentrage et le pédalage restent tels qu’écrits.
Rising Shed=true, pick 1=1,2 → shafts 1 and 2 up
Rising Shed=false, same line → those shafts stored as down,
other shafts flipped on
Le dessin d’armure n’est pas stocké dans le fichier. Après chargement de la structure (et toute inversion de foule), chaque case du tissu est chaîne en dessus si une lame rentrée sur ce fil est aussi levée pour cette duite — soit depuis le plan de levée, soit via une marche active et son attachage. Sinon c’est trame en dessus. Les programmes recalculent cela pour l’affichage ; il n’y a pas de section drawdown à exporter.
Bower : C’est ainsi que nous chargeons et affichons. La visionneuse WIF gratuite suit les mêmes règles de structure et de couleur. En mode plan de levée, la visionneuse omet le bloc d’attachage vide et affiche « - » pour les marches dans le panneau latéral.
8.15 Éléments suspendus et obsolètes
Suspended at 1.1: [TRANSLATIONS] [BITMAP FILE], [BITMAP IMAGE], [BITMAP IMAGE DATA] Dropped / obsolete in the 1.1 narrative: Design section, ColorMix, Colors key, Palette key, RGB tail on WARP/WEFT COLORS
Bower : Nous les ignorons tous et ne les écrivons pas. Les sections inconnues ne font jamais échouer l’import à elles seules.
9. Limites de taille Bower
Ce ne fait pas partie du WIF 1.1. À l’import, nous bornons les dimensions pour qu’un fichier sauvage n’alloue pas une grille illimitée. Les valeurs hors plage sont ramenées dans la plage plutôt que rejetées comme « pas du WIF ».
Warps, wefts 1 .. 4096 Shafts, treadles 1 .. 64
10. Ce que Bower écrit
Notre export est un fichier complet en foule montante, destiné à s’ouvrir dans d’autres lecteurs 1.1 qui comprennent les mêmes sections de base. Nous ne cherchons pas à conserver notes, symboles, espacement ou données privées d’un import précédent — tout cela est perdu si vous faites un aller-retour chez nous.
- [WIF], [CONTENTS], [COLOR PALETTE] avec Range=0,255, [WEAVING] avec Rising Shed=true
- [WARP] et [WEFT] avec Threads, indice Color, Units=Centimeters
- [COLOR TABLE], [THREADING], [WARP COLORS], [WEFT COLORS]
- Soit [LIFTPLAN] et Treadles=0, soit [TIEUP] et [TREADLING] ensemble
- Pas de sections TEXT, NOTES, symboles, espacement, épaisseur, privées ou bitmap
11. Exemples
Deux petits fichiers complets. Pas de table de couleurs — juste la structure.
11.1 Mode attachage
Huit fils, huit duites, quatre lames, quatre marches. Rentrage droit, attachage simple style sergé, pédalage qui parcourt les quatre marches deux fois.
[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 Mode plan de levée
Quatre fils, quatre duites. Treadles vaut 0 et [LIFTPLAN] est présent, donc le fichier est lu en plan de levée. Chaque duite liste les lames directement — pas d’attachage, pas de pédalage.
[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. Outils associés
Vous pouvez ouvrir un .wif dans la visionneuse WIF gratuite pour vérifier le dessin dans le navigateur, ou l’importer dans Bower (y compris Ouvrir dans Bower depuis la visionneuse) pour l’éditer.
13. Références
Voici les sources du texte du format. Les notes « Bower : » de cette page décrivent notre comportement d’import et d’export ; elles ne font pas partie de la spécification de 1997.
- Nielsen, Ravi, et al. Weaving Information File (WIF) Specification, Version 1.1. 20 April 1997. Contributors included Ravi Nielsen (Patternland / Maple Hill Software), Bob Keates (Fiberworks), Rob Sinkler (SwiftWeave), and members of the 1997 WIF email list. Text: http://www.tantradharma.com/maplehill/wif/wif1-1.txt.
- Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0. 3 March 1996. Superseded by 1.1 for current interchange.
- Asunder — Bower et la visionneuse WIF gratuite.