WIF (Weaving Information File, archivo de información de tejido) es un formato de texto orientado a líneas para intercambiar esquemas de tejido entre programas. La versión 1.1, fechada el 20 de abril de 1997, es la que se usa para el intercambio actual.

Este documento es una referencia anotada del WIF 1.1. Las reglas de formato siguen la especificación de 1997. Las notas etiquetadas Bower registran cómo Bower y el visor WIF gratuito implementan esas reglas. Las notas Bower son documentación de implementación; no forman parte de la especificación de 1997. Para una visión no normativa, véase ¿Qué es un archivo WIF?.

Las notas Bower usan los siguientes términos de estado:

  • Admitido — el campo o la sección se lee, se escribe, o ambas cosas.
  • Ignorado — el campo o la sección puede aparecer en un archivo; se omite y no hace fallar la importación por sí solo.
  • No escrito — la exportación nunca lo emite.
  • Suspendido en 1.1 — listado en el texto de 1997, pero fuera del intercambio actual.

1. Objetivos de diseño

WIF está diseñado para seguir siendo extensible, legible en un editor de texto y procesable por cualquier sistema que pueda leer texto plano.

Los datos de estructura se almacenan como números de lizos y pedales separados por comas, no como campos binarios empaquetados. El diseño físico se parece a un archivo .INI de Windows: encabezados de sección entre corchetes y líneas Key=value. A diferencia de los archivos private-profile clásicos de Windows 3.1, WIF no está limitado a 64K, y las API private-profile de Windows no sirven para analizarlo. Se requiere un analizador dedicado.

2. Tipo de archivo

Un archivo WIF es texto plano. No hay contenedor binario. La extensión convencional es .wif. El formato se identifica a partir de la sección [WIF].

Extensión             .wif
Codificación          ASCII (UTF-8 sin BOM se acepta en la práctica)
Fines de línea        LF o CRLF
Orden                 El orden de secciones y claves no es significativo

Bower. La importación y la exportación tratan el .wif como texto ordinario.

3. Reglas léxicas

La gramática es por líneas. Cada línea está en blanco, es un comentario, un encabezado de sección o un par clave/valor.

  • Las líneas en blanco se ignoran.
  • Si el primer carácter que no es espacio es ;, toda la línea es un comentario. Un comentario final puede seguir a un número o un booleano, a menudo después de un segundo ;. Los valores de texto libre no deben llevar un comentario al final de la misma línea.
  • Los encabezados de sección tienen la forma [Section Name]. La comparación no distingue mayúsculas. Por convención, los nombres se escriben en mayúsculas.
  • Las asignaciones tienen la forma Key=value. La comparación de clave no distingue mayúsculas. El valor es el resto de la línea después del primer =.
  • Las claves duplicadas en una sección no son conformes. Un lector no debe hacer fallar el archivo solo por un duplicado; puede conservar el primer valor o el último.
  • El orden de las secciones y el orden de las claves dentro de una sección no son significativos.

El siguiente fragmento ilustra las formas léxicas. No es un esquema completo:

; esta línea se ignora
[WEAVING]
Shafts=4
Treadles=4

Bower. Se omiten las líneas en blanco y los comentarios ; de línea completa. Los nombres se comparan sin distinguir mayúsculas. En las claves ordinarias, gana el último valor. Las filas de estructura se indexan por número. Los valores se recortan. Los comentarios finales en la misma línea no se eliminan.

4. Booleanos y símbolos

Los valores booleanos aceptados como verdadero son true, on, yes y 1. Los aceptados como falso son false, off, no y 0. Un booleano opcional omitido es falso, salvo que una sección concreta indique otra cosa.

Bower. true, yes y 1 se tratan como verdadero. Cualquier otro valor no vacío se trata como falso. on y off no son casos especiales.

Un tipo símbolo codifica un solo carácter de visualización usado en lugar de una celda rellena:

=1        dígito
=X        un carácter
='X'      carácter entre comillas
=#219     código de carácter 0..255

Escribir un espacio como ' ' o #32.
Escribir una almohadilla como '#' o #35.

Bower. Los símbolos no están implementados. La apariencia es solo color. Las secciones de símbolos se ignoran al importar y nunca se escriben al exportar.

5. Requisitos mínimos

Un archivo 1.1 conforme contiene [WIF] y [CONTENTS]. Toda otra sección que aparezca en el archivo debe listarse bajo [CONTENTS] con el valor true. Las secciones no usadas pueden omitirse, o listarse como false. Si una sección está presente, sus claves obligatorias también deben estarlo.

Un archivo que contiene datos de remetido pero no un bloque [WIF] no es un documento WIF 1.1 válido, aunque algunos programas intenten leerlo.

Bower. La importación falla sin [WIF]. [CONTENTS] no se exige ni se valida al importar. La exportación siempre escribe ambas secciones y marca true para cada sección emitida.

6. Clases de sección y datos dispersos

Las secciones informativas registran valores de fondo (título, tamaño de paleta, conteos del telar). Las secciones de datos registran filas por hilo y por pasada (remetido, colores y tablas asociadas). [CONTENTS] lista las secciones incluidas. No lista [WIF].

Los datos son dispersos. Los hilos de urdimbre y las pasadas se asignan a partir de Threads. Los valores por defecto vienen de [WARP] y [WEFT]. Las celdas de estructura valen cero por defecto (sin uso). Solo hace falta escribir las claves que difieren de esos valores. Los lectores invierten ese proceso.

Si ocho hilos de urdimbre comparten un color y solo el hilo 3 difiere, el valor por defecto de la urdimbre aporta el color común y una sola sobrescritura registra la excepción:

[WARP]
Threads=8
Color=1

[WARP COLORS]
3=2

Los hilos 1, 2 y 4–8 usan el color de paleta 1; el hilo 3 usa el color de paleta 2. La misma regla vale para la estructura: una línea de remetido ausente significa ningún lizo en ese hilo, no una copia del hilo anterior.

Bower. Se usan los conteos de hilos y las tablas de estructura y color. Los valores por defecto de espaciado y grosor, y las tablas dispersas de grosor y espaciado, no están implementados. La estructura queda vacía por defecto; las claves de estructura ausentes siguen vacías. Cuando hay una tabla de color, se aplican los Color por defecto de [WARP] / [WEFT] si el índice es mayor que cero, y después las sobrescrituras por hilo y por pasada.

7. Secciones privadas

Las implementaciones pueden guardar datos privados sin romper el intercambio. El nombre de la sección debe incluir un identificador de origen único para que los proveedores no colisionen:

[PRIVATE <SourceID> <SectionName>]

Las líneas interiores no deben empezar por '[' para que un lector pueda hallar la sección siguiente.

Bower. Las secciones privadas se omiten y nunca se escriben. No se define un Source ID privado.

8. Catálogo de secciones

Esta sección lista cada sección con nombre del WIF 1.1 y el estado de implementación de Bower. El intercambio con Bower depende de la estructura, el color y el perfil de exportación de la sección 10.

8.1 [WIF] — obligatorio

Sección de identidad obligatoria. Un archivo sin [WIF] no es un documento WIF 1.1 válido.

Clave            Oficial      Descripción
----             --------     -----------
Version          obligatorio  p. ej. 1.1
Date             obligatorio  cadena de fecha libre
Developers       obligatorio  contacto / autores
Source Program   obligatorio  nombre del programa creador
Source Version   opcional     versión del programa creador

Bower. La sección es obligatoria al importar. La exportación escribe Version=1.1, Date=April 20, 1997, [email protected], Source Program=Bower y Source Version=1.0. Las claves individuales ausentes dentro de [WIF] no hacen fallar la importación.

8.2 [CONTENTS] — obligatorio en 1.1

Tabla de contenido: nombre de sección como clave, true o false como valor. Solo las secciones que existen necesitan listarse como true. Listar todas las secciones definidas con true o false está permitido, no es obligatorio.

Un lector puede seleccionar secciones solo a partir de CONTENTS.

Indicadores informativos:
  COLOR PALETTE, WARP SYMBOL PALETTE, WEFT SYMBOL PALETTE, TEXT,
  WEAVING, WARP, WEFT

Indicadores de datos:
  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>

Suspendido / reservado:
  TRANSLATIONS
  BITMAP IMAGE, BITMAP FILE, BITMAP IMAGE DATA

Bower. CONTENTS no se exige al importar y no se usa para elegir qué analizar. La exportación escribe true para cada sección realmente emitida.

8.3 [COLOR PALETTE]

Declara el tamaño de la paleta y el rango numérico de los valores RGB. Los archivos antiguos pueden usar 0–999 en lugar de 0–255; los lectores deben escalar.

Clave     Oficial      Descripción
----      --------     -----------
Entries   obligatorio  entero > 0, tamaño de paleta
Range     obligatorio  min,max con max > min
Form=RGB  obsoleto     no escribir; ignorar si está presente

Range=0,999 con la entrada de tabla 1=999,0,0 asigna el canal rojo a 255 en 8 bits. Range=0,255 con 1=255,0,0 no requiere escalado.

Bower. Se lee Range (valor por defecto 0,255 si falta). Cada canal se convierte con round((c − min) / (max − min) * 255) y se recorta a 0–255. Si max−min es cero o negativo, la importación falla. Entries no se exige. La exportación usa siempre Range=0,255.

8.4 [WARP SYMBOL PALETTE] / [WEFT SYMBOL PALETTE]

Clave     Oficial      Descripción
----      --------     -----------
Entries   obligatorio  entero > 0

Bower. Ignorado. No escrito.

8.5 [TEXT]

Metadatos opcionales sobre la pieza y quien la hizo: título, autor, datos de contacto. Ninguna de estas claves afecta la cuadrícula del esquema.

Clave       Oficial
----        --------
Title       opcional
Author      opcional
Address     opcional
EMail       opcional
Telephone   opcional
FAX         opcional

Bower. Ignorado. No escrito.

8.6 [WEAVING]

Tamaño del telar y convención de calada. Los conteos de lizos y pedales pueden aumentar si las secciones de estructura nombran índices más altos que los declarados aquí.

Clave         Oficial      Descripción
----          --------     -----------
Shafts        obligatorio  entero > 0
Treadles      obligatorio  entero > 0
Rising Shed   opcional     true = los lizos listados suben
Profile       obsoleto     ignorar; no escribir

Calada ascendente significa que los lizos listados en el plan de elevación (o levantados por el camino pedal/amarre) suben. La calada descendente es la convención física opuesta. Cuando un archivo especifica calada descendente, las celdas del plan de elevación — o las del amarre — se invierten tras la carga para que las cuadrículas internas queden en calada ascendente y el tejido coincida con el archivo.

Bower. Se leen Shafts y Treadles (valor por defecto 4 si faltan) y se amplían desde la estructura cuando hace falta. Un Rising Shed ausente se trata como true. False dispara la inversión descrita arriba. La exportación siempre escribe Rising Shed=true, y Treadles=0 en modo plan de elevación. Profile se ignora.

8.7 [WARP] y [WEFT]

Estas secciones describen la urdimbre o la trama en conjunto y el valor por defecto de cada hilo. Tras conocer Threads, se asignan ese número de hilos o pasadas, se aplican los valores por defecto y las secciones dispersas sobrescriben individuos (sección 6).

Clave            Oficial               Descripción
----             --------              -----------
Threads          obligatorio           número de hilos o pasadas
Color            opcional              índice de paleta, o índice + R,G,B
Symbol           opcional              tipo símbolo
Symbol Number    opcional              índice en la tabla de símbolos
Units            obligatorio si hay    Decipoints | Inches | Centimeters
                 espaciado/grosor
Spacing          opcional              real ≥ 0
Thickness        opcional              real ≥ 0
Spacing Zoom     opcional              entero ≥ 0
Thickness Zoom   opcional              entero ≥ 0

Obsoleto en 1.1 (ignorar / no escribir):
  Colors, Palette, ColorMix

Para Color, un índice de paleta simple es la forma de intercambio preferida. Algunos archivos también adjuntan un triplete RGB después del índice.

Color=2              ; cada hilo/pasada toma por defecto la entrada 2 de COLOR TABLE
Color=2,255,0,0      ; índice más RGB opcional — solo se conserva el índice

Si una implementación solo admite uno de espaciado y grosor, se prefiere Spacing cuando ambos están presentes. Una implementación que solo modela grosor debería escribir Spacing, o escribir ambos con los mismos números.

Bower. Se lee Threads (valores por defecto 32 para urdimbre y 48 para trama si falta). Color se lee como un índice de paleta cuando es mayor que cero. Se ignoran símbolos, espaciado, grosor, zooms y el RGB extra en Color. La exportación escribe Threads, Color y Units=Centimeters.

8.8 [NOTES]

Texto libre, una cadena por línea numerada. No forma parte de las cuadrículas del esquema.

1=Primera línea de notas
2=Segunda línea

Bower. Ignorado. No escrito.

8.9 [TIEUP]

Cada pedal lista los lizos que levanta (sentido de calada ascendente, antes de cualquier inversión). Se usa con remetido y pedaleo cuando el archivo no es un plan de elevación puro.

Clave   = pedal (1..n)
Valor   = lizos, separados por comas
          0 solo significa sin uso
Las líneas ausentes quedan sin uso

Ejemplo: 1=1,2  → el pedal 1 levanta los lizos 1 y 2

Bower. Admitido en modo amarre. Se aceptan valores de varios lizos. La exportación escribe una línea por pedal.

8.10 [COLOR TABLE]

Entradas de paleta. Las claves Color de urdimbre y trama apuntan a índices de esta tabla. Los números R,G,B usan el Range de [COLOR PALETTE].

Clave   = índice de paleta
Valor   = R,G,B en el Range de la paleta

Paleta, valor por defecto de urdimbre y dos sobrescrituras por hilo:

[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

Los hilos 1 y 3 toman por defecto la entrada de paleta 1; los hilos 2 y 4 usan la entrada de paleta 2.

Bower. Admitido, con el mapeo de Range descrito arriba. La exportación escribe una entrada de tabla por color de hilo único y siempre usa Range=0,255.

8.11 [WARP SYMBOL TABLE] / [WEFT SYMBOL TABLE]

Clave   = índice de símbolo
Valor   = tipo símbolo WIF (véase la sección 4)

Bower. Ignorado. No escrito.

8.12 [THREADING]

Lizos de cada hilo de urdimbre. Se permiten varios lizos en un mismo hilo.

Clave   = hilo de urdimbre (1..n)
Valor   = lizo, o lizo,lizo,...
          1=1,5 significa que el hilo 1 está en los lizos 1 y 5
          0 significa sin uso
Las líneas ausentes quedan sin uso

Bower. Admitido, incluidos los hilos de varios lizos. La exportación escribe una línea por hilo.

8.13 Secciones por hilo y por pasada

Estas secciones asignan valores a hilos o pasadas individuales. Hay tres grupos: estructura (pedaleo / plan de elevación), color y apariencia (grosor, espaciado, símbolos).

Sección                 Valor         Defecto si falta
-------                 -----         ----------------
[WARP THICKNESS]        real ≥ 0      [WARP].Thickness
[WARP THICKNESS ZOOM]   entero ≥ 0    [WARP].Thickness Zoom
[WARP SPACING]          real ≥ 0      [WARP].Spacing
[WARP SPACING ZOOM]     entero ≥ 0    [WARP].Spacing Zoom
[WARP COLORS]           idx paleta    [WARP].Color
                        (un entero; ignorar la cola R,G,B antigua)
[WARP SYMBOLS]          idx símbolo   [WARP].Symbol Number

[TREADLING]             pedales       sin uso (cero)
[LIFTPLAN]              lizos         sin uso (cero)

[WEFT THICKNESS]        real ≥ 0      [WEFT].Thickness
[WEFT THICKNESS ZOOM]   entero ≥ 0    [WEFT].Thickness Zoom
[WEFT SPACING]          real ≥ 0      [WEFT].Spacing
[WEFT SPACING ZOOM]     entero ≥ 0    [WEFT].Spacing Zoom
[WEFT COLORS]           idx paleta    [WEFT].Color
[WEFT SYMBOLS]          idx símbolo   [WEFT].Symbol Number

El pedaleo es el camino de control por amarre: la clave es la pasada, el valor son los pedales pisados, por ejemplo 5=1,2. El plan de elevación es directo: la clave es la pasada, el valor son los lizos que suben, por ejemplo 5=1,3. Un archivo típico usa un solo camino de control, no ambos (sección 8.14).

Bower. Se admiten pedaleo, plan de elevación y colores de urdimbre/trama. Las secciones de grosor, espaciado, zoom y símbolos se ignoran y nunca se escriben.

8.14 Tipo de telar, calada ascendente y patrón del tejido

No hay una clave mode=. El tipo de telar se infiere de las secciones de estructura presentes.

Bower y el visor WIF gratuito usan la siguiente regla:

Si [LIFTPLAN] está presente
   y ([TREADLING] falta o Treadles es 0)
entonces tratar el archivo como plan de elevación
     (THREADING + LIFTPLAN)
si no, tratarlo como amarre
     (THREADING + TIEUP + TREADLING)

El plan de elevación es el modelo de ratiera: cada pasada lista lizos. El amarre es el modelo de telar de lizos: los pedales eligen una columna del amarre, y el pedaleo es la secuencia de pedales.

Cuando Rising Shed es false, cada celda del plan de elevación (modo plan de elevación) o cada celda de amarre (modo amarre) se invierte después de cargar las cuadrículas. El remetido y el pedaleo se dejan como están escritos.

Rising Shed=true,  pasada 1=1,2   → lizos 1 y 2 arriba
Rising Shed=false, la misma línea → esos lizos se guardan abajo,
                                    los demás lizos se invierten arriba

El patrón del tejido no se guarda en el archivo. Tras cargar la estructura y aplicar cualquier inversión de calada, una celda del paño es urdimbre arriba si algún lizo remetido en ese hilo también está levantado en esa pasada — desde el plan de elevación, o desde un pedal activo y su amarre. Si no, la celda es trama arriba. Los programas recalculan el patrón del tejido para mostrarlo; no hay una sección de patrón del tejido que exportar.

Bower. La carga y la visualización siguen este procedimiento. El visor WIF gratuito usa las mismas reglas de estructura y color. En modo plan de elevación, el visor omite el bloque de amarre vacío y muestra los pedales como “-” en el panel lateral.

8.15 Elementos suspendidos y obsoletos

Suspendido en 1.1:
  [TRANSLATIONS]
  [BITMAP FILE], [BITMAP IMAGE], [BITMAP IMAGE DATA]

Descartado / obsoleto en el relato 1.1:
  sección Design, ColorMix, clave Colors, clave Palette,
  cola RGB en WARP/WEFT COLORS

Bower. Todo lo anterior se ignora y no se escribe. Las secciones desconocidas no hacen fallar la importación por sí solas.

9. Límites de tamaño de la implementación

Estos límites no forman parte del WIF 1.1. Al importar, las dimensiones se recortan para que un archivo no pueda asignar una cuadrícula sin tope. Los valores fuera de rango se traen al rango en lugar de rechazarse como no-WIF.

Urdimbre, trama     1 .. 4096
Lizos, pedales      1 .. 64

10. Perfil de exportación

La exportación de Bower es un archivo WIF 1.1 completo de calada ascendente, pensado para lectores que entienden las secciones centrales siguientes. Notas, símbolos, espaciado y datos privados de una importación previa no se conservan en un viaje de ida y vuelta.

  • [WIF], [CONTENTS], [COLOR PALETTE] con Range=0,255, [WEAVING] con Rising Shed=true
  • [WARP] y [WEFT] con Threads, índice Color, Units=Centimeters
  • [COLOR TABLE], [THREADING], [WARP COLORS], [WEFT COLORS]
  • O bien [LIFTPLAN] y Treadles=0, o bien [TIEUP] y [TREADLING] juntos
  • Sin secciones TEXT, NOTES, símbolos, espaciado, grosor, privadas ni bitmap

11. Ejemplos

Los siguientes ejemplos son archivos WIF 1.1 completos. Solo contienen estructura; omiten una tabla de color.

11.1 Modo amarre

Ocho hilos, ocho pasadas, cuatro lizos, cuatro pedales. Remetido recto, amarre de tipo sarga y pedaleo que repite la secuencia de los cuatro pedales.

[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 Modo plan de elevación

Cuatro hilos, cuatro pasadas. Treadles es 0 y [LIFTPLAN] está presente, así que el archivo se lee como plan de elevación. Cada pasada lista lizos de forma directa. No hay amarre ni pedaleo.

[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. Software relacionado

Un archivo .wif puede abrirse en el visor WIF gratuito para inspeccionar el esquema en un navegador, o importarse en Bower para editarlo. El visor ofrece la acción Abrir en Bower.

13. Referencias

Fuentes del texto de formato. Las notas etiquetadas Bower en esta página describen el comportamiento de importación y exportación de Bower; no forman parte de la especificación de 1997.

  1. Nielsen, Ravi, et al. Weaving Information File (WIF) Specification, Version 1.1. 20 de abril de 1997. Contribuyeron Ravi Nielsen (Patternland / Maple Hill Software), Bob Keates (Fiberworks), Rob Sinkler (SwiftWeave) y miembros de la lista de correo WIF de 1997. Texto: http://www.tantradharma.com/maplehill/wif/wif1-1.txt.
  2. Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0. 3 de marzo de 1996. Sustituida por 1.1 para el intercambio actual.
  3. Asunder — Bower y el visor WIF gratuito.