O WIF (Weaving Information File) é um formato de texto simples, organizado por linhas, para o intercâmbio de debuxos de tecelagem entre programas. A versão 1.1, de 20 de abril de 1997, é a que se usa atualmente no intercâmbio.
Este documento é uma referência anotada do WIF 1.1. As regras do formato seguem a especificação de 1997. As notas assinaladas com Bower registam como o Bower e o Visualizador de WIF gratuito aplicam essas regras. As notas do Bower documentam a implementação e não fazem parte da especificação de 1997. Para uma apresentação geral, não normativa, consulte O que é um ficheiro WIF?
As notas do Bower usam os seguintes termos de estado:
- Suportada – o Bower lê o campo ou a secção, escreve-o ou faz as duas coisas.
- Ignorada – o campo ou a secção pode aparecer num ficheiro; o Bower salta-o, e isso, por si só, não faz falhar a importação.
- Não é escrita – a exportação nunca escreve o campo ou a secção.
- Suspensa na 1.1 – consta do texto de 1997, mas não faz parte do intercâmbio atual.
1. Objetivos do formato
O WIF foi concebido para se manter extensível, legível num editor de texto e processável por qualquer sistema que consiga ler texto simples.
Os dados de estrutura são guardados como números de liços e de pedais separados por vírgulas, e não como campos de bits binários compactados. A disposição física é semelhante à de um ficheiro .INI do Windows: cabeçalhos de secção entre parênteses retos e linhas Key=value. Ao contrário dos ficheiros de perfil privado clássicos do Windows 3.1, o WIF não está limitado a 64 KB, e as APIs de perfil privado do Windows não podem ser usadas para o analisar. É necessário um analisador próprio.
2. Tipo de ficheiro
Um ficheiro WIF é texto simples. Não existe nenhum contentor binário. A extensão habitual do nome do ficheiro é .wif. O formato é identificado pela secção [WIF].
Extensão .wif Codificação de caracteres ASCII (na prática, aceita-se UTF-8 sem BOM) Quebras de linha LF ou CRLF Ordem A ordem das secções e das chaves é indiferente
Bower. A importação e a exportação tratam os ficheiros .wif como texto simples.
3. Regras léxicas
A gramática baseia-se em linhas. Cada linha está em branco ou é um comentário, um cabeçalho de secção ou um par chave-valor.
- As linhas em branco são ignoradas.
- Se o primeiro carácter que não seja um espaço for
;, a linha inteira é um comentário. Pode haver um comentário no fim da linha a seguir a um número ou a um booleano, normalmente depois de um segundo;. Os valores de texto livre não podem ter um comentário no fim da mesma linha. - Os cabeçalhos de secção têm a forma
[Section Name]. Os nomes são comparados sem diferenciar maiúsculas de minúsculas. Por convenção, os nomes escrevem-se em maiúsculas. - As atribuições têm a forma
Key=value. As chaves são comparadas sem diferenciar maiúsculas de minúsculas. O valor é o resto da linha a seguir ao primeiro=. - As chaves duplicadas numa secção não cumprem a norma. O programa de leitura não pode rejeitar o ficheiro só por causa de uma chave duplicada; pode manter o primeiro ou o último valor.
- A ordem das secções e a ordem das chaves dentro de cada secção são indiferentes.
O fragmento seguinte ilustra as formas léxicas. Não é um debuxo completo:
; this line is ignored [WEAVING] Shafts=4 Treadles=4
Bower. As linhas em branco e os comentários de linha inteira com ; são saltados. Os nomes são comparados sem diferenciar maiúsculas de minúsculas. Nas chaves comuns, prevalece o último valor. Nas secções de estrutura, cada linha é identificada pelo seu número. Os espaços no início e no fim dos valores são removidos. Os comentários no fim da linha não são retirados.
4. Booleanos e símbolos
Os valores booleanos aceites como verdadeiros são true, on, yes e 1. Os valores booleanos aceites como falsos são false, off, no e 0. Um booleano opcional omitido é falso, a menos que uma secção específica indique o contrário.
Bower. true, yes e 1 são tratados como verdadeiros. Qualquer outro valor não vazio é tratado como falso. on e off não têm tratamento especial.
Os valores do tipo de símbolo codificam um único carácter, que se mostra em vez de uma quadrícula preenchida:
=1 algarismo =X um único carácter ='X' carácter entre plicas =#219 código de carácter 0..255 Um espaço escreve-se ' ' ou #32. Um cardinal escreve-se '#' ou #35.
Bower. Os símbolos não estão implementados. O aspeto é dado apenas pelas cores. As secções de símbolos são ignoradas na importação e nunca são escritas na exportação.
5. Requisitos mínimos
Um ficheiro 1.1 conforme contém [WIF] e [CONTENTS]. Todas as outras secções que aparecem no ficheiro têm de constar de [CONTENTS] com o valor true. As secções não usadas podem ser omitidas ou indicadas como false. Uma secção presente no ficheiro tem de conter as suas chaves obrigatórias.
Um ficheiro que contenha dados de remetido mas não tenha o bloco [WIF] não é um documento WIF 1.1 válido, mesmo que algumas ferramentas tentem lê-lo.
Bower. A importação falha sem [WIF]. Na importação, a secção [CONTENTS] não é obrigatória nem validada. A exportação escreve sempre as duas secções e marca true em todas as secções que escreve.
6. Classes de secções e dados esparsos
As secções informativas registam valores gerais (título, tamanho da paleta, número de liços e de pedais). As secções de dados registam linhas por fio e por passagem (remetido, cores e tabelas relacionadas). A secção [CONTENTS] enumera as secções incluídas; [WIF] não consta dessa lista.
Os dados são esparsos. O número de fios de teia e de passagens é dado por Threads. Os valores predefinidos vêm de [WARP] e de [WEFT]. Por predefinição, as quadrículas da estrutura valem zero (não usadas). Só é preciso escrever as chaves que diferem desses valores predefinidos. Os programas de leitura fazem o processo inverso.
Se oito fios de teia tiverem a mesma cor e só o fio 3 for diferente, o valor predefinido da teia dá a cor comum e uma única substituição regista a exceção:
[WARP] Threads=8 Color=1 [WARP COLORS] 3=2
Os fios 1, 2 e 4-8 usam a cor 1 da paleta; o fio 3 usa a cor 2 da paleta. A mesma regra aplica-se à estrutura: uma linha de remetido em falta significa que esse fio não passa em nenhum liço, e não que repete o fio anterior.
Bower. São usados o número de fios e de passagens e as tabelas de estrutura e de cor. Os valores predefinidos de espaçamento e de espessura, e as tabelas esparsas de espessura e de espaçamento, não estão implementados. Por predefinição, a estrutura fica vazia; as chaves de estrutura em falta continuam vazias. Quando existe uma tabela de cores, aplicam-se, se o índice for superior a zero, os valores predefinidos da chave Color de [WARP] / [WEFT] e, depois, as substituições por fio e por passagem.
7. Secções privadas
As implementações podem guardar dados privados sem prejudicar o intercâmbio. O nome da secção tem de incluir um identificador de origem único, para que os nomes de diferentes fabricantes não coincidam:
[PRIVATE <SourceID> <SectionName>] As linhas da secção não podem começar por '[', para que o programa de leitura encontre a secção seguinte.
Bower. As secções privadas são saltadas e nunca são escritas. O Bower não define nenhum identificador de origem próprio.
8. Catálogo de secções
Esta secção enumera todas as secções definidas no WIF 1.1 e o estado de cada uma na implementação do Bower. O intercâmbio com o Bower depende da estrutura, da cor e do perfil de exportação da secção 10.
8.1 [WIF] – obrigatória
Secção de identificação obrigatória. Um ficheiro sem [WIF] não é um documento WIF 1.1 válido.
Chave Na norma Descrição ----- -------- --------- Version obrigatória ex.: 1.1 Date obrigatória data em texto livre Developers obrigatória contacto / autores Source Program obrigatória nome do programa que criou o ficheiro Source Version opcional versão do programa que criou o ficheiro
Bower. A secção é obrigatória na importação. A exportação escreve Version=1.1, Date=April 20, 1997, [email protected], Source Program=Bower e Source Version=1.0. A falta de chaves individuais dentro de [WIF] não faz falhar a importação.
8.2 [CONTENTS] – obrigatória na 1.1
Índice: o nome da secção como chave e true ou false como valor. Só é preciso indicar como true as secções que existem. Indicar todas as secções definidas, com true ou false, é permitido, mas não obrigatório.
Um programa de leitura pode basear-se apenas em CONTENTS para escolher as secções.
Secções informativas: COLOR PALETTE, WARP SYMBOL PALETTE, WEFT SYMBOL PALETTE, TEXT, WEAVING, WARP, WEFT Secções de dados: 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> Suspensas / reservadas: TRANSLATIONS BITMAP IMAGE, BITMAP FILE, BITMAP IMAGE DATA
Bower. A secção CONTENTS não é obrigatória na importação e não é usada para escolher o que analisar. A exportação escreve true para todas as secções efetivamente escritas.
8.3 [COLOR PALETTE]
Declara o tamanho da paleta e o intervalo numérico dos valores RGB. Os ficheiros mais antigos podem usar 0-999 em vez de 0-255; os programas de leitura têm de converter a escala.
Chave Na norma Descrição ----- -------- --------- Entries obrigatória inteiro > 0, tamanho da paleta Range obrigatória min,max com max > min Form=RGB obsoleta não escrever; ignorar se existir
Range=0,999 com a entrada de tabela 1=999,0,0 faz corresponder o canal vermelho a 255 em 8 bits. Range=0,255 com 1=255,0,0 não exige conversão de escala.
Bower. Range é lido (0,255 por predefinição, se faltar). Cada canal é convertido com round((c − min) / (max − min) * 255) e depois limitado a 0-255. Se max−min for zero ou negativo, a importação falha. Entries não é verificado. A exportação usa sempre Range=0,255.
8.4 [WARP SYMBOL PALETTE] / [WEFT SYMBOL PALETTE]
Chave Na norma Descrição ----- -------- --------- Entries obrigatória inteiro > 0
Bower. Ignoradas. Não são escritas.
8.5 [TEXT]
Metadados opcionais sobre a peça e quem a fez: título, autor, informações de contacto. Nenhuma destas chaves afeta a grelha do debuxo.
Chave Na norma ----- -------- Title opcional Author opcional Address opcional EMail opcional Telephone opcional FAX opcional
Bower. Ignorada. Não é escrita.
8.6 [WEAVING]
Tamanho do tear e convenção de cala. O número de liços e de pedais pode aumentar se as secções de estrutura indicarem índices superiores aos aqui declarados.
Chave Na norma Descrição ----- -------- --------- Shafts obrigatória inteiro > 0 Treadles obrigatória inteiro > 0 Rising Shed opcional true = os liços indicados sobem Profile obsoleta ignorar; não escrever
Em cala de levante (Rising Shed), sobem os liços marcados na ordem de levantamento dos liços ou, no tear de pedais, os liços que o risco liga ao pedal. A cala de baixada é a convenção física oposta. Quando um ficheiro indica cala de baixada, as quadrículas da ordem de levantamento dos liços – ou as do risco – são invertidas depois de o ficheiro ser carregado, para que as grelhas internas fiquem em cala de levante e o tecido corresponda ao ficheiro.
Bower. As chaves Shafts e Treadles são lidas (4 por predefinição, se faltarem) e aumentadas quando a estrutura o exige. Se a chave Rising Shed faltar, é tratada como true. Com o valor false, aplica-se a inversão descrita acima. A exportação escreve sempre Rising Shed=true e, no modo de ordem de levantamento dos liços, Treadles=0. A chave Profile é ignorada.
8.7 [WARP] e [WEFT]
Estas secções descrevem a teia ou a trama no seu conjunto e o valor predefinido de cada fio. Conhecido o valor de Threads, reserva-se esse número de fios ou de passagens, aplicam-se os valores predefinidos e as secções que só registam as exceções substituem os valores de cada fio (secção 6).
Chave Na norma Descrição
----- -------- ---------
Threads obrigatória número de fios ou de passagens
Color opcional índice da paleta, ou índice + R,G,B
Symbol opcional tipo de símbolo
Symbol Number opcional índice na tabela de símbolos
Units obrigatória com Decipoints | Inches | Centimeters
espaçamento/espessura
Spacing opcional real ≥ 0
Thickness opcional real ≥ 0
Spacing Zoom opcional inteiro ≥ 0
Thickness Zoom opcional inteiro ≥ 0
Obsoletas na 1.1 (ignorar / não escrever):
Colors, Palette, ColorMix
Para Color, no intercâmbio de ficheiros prefere-se um simples índice da paleta. Alguns ficheiros juntam também os três valores RGB a seguir ao índice.
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 uma implementação só suportar um dos dois valores, o espaçamento ou a espessura, prefere-se Spacing quando ambos estiverem presentes. Uma implementação que só modele a espessura deve escrever Spacing, ou ambos, com os mesmos números.
Bower. A chave Threads é lida (por predefinição, 32 na teia e 48 na trama, se faltar). A chave Color é lida como um único índice da paleta quando é maior do que zero. Os símbolos, o espaçamento, a espessura, os valores de zoom e o RGB extra em Color são ignorados. A exportação escreve Threads, Color e Units=Centimeters.
8.8 [NOTES]
Texto livre, uma entrada por linha numerada. Não faz parte das grelhas do debuxo.
1=First line of notes 2=Second line
Bower. Ignorada. Não é escrita.
8.9 [TIEUP]
Cada pedal indica os liços que levanta (em cala de levante, antes de qualquer inversão). Usa-se com o remetido e a pedalagem quando o ficheiro não é apenas uma ordem de levantamento dos liços.
Chave = pedal (1..n)
Valor = liços, separados por vírgulas
0 sozinho significa que o pedal não é usado
Se faltar a linha, o pedal não é usado
Exemplo: 1=1,2 → o pedal 1 levanta os liços 1 e 2
Bower. Suportada no modo de risco. São aceites valores com vários liços. A exportação escreve uma linha por pedal.
8.10 [COLOR TABLE]
Entradas da paleta. As chaves Color da teia e da trama remetem para índices desta tabela. Os números R,G,B usam a escala definida por Range em [COLOR PALETTE].
Chave = índice da paleta Valor = R,G,B na escala de Range da paleta
Paleta, valor predefinido da teia e dois fios com outra cor:
[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
Os fios 1 e 3 usam por predefinição a entrada 1 da paleta; os fios 2 e 4 usam a entrada 2.
Bower. Suportada, com a conversão de Range descrita acima. A exportação escreve uma entrada na tabela por cada cor de fio diferente e usa sempre Range=0,255.
8.11 [WARP SYMBOL TABLE] / [WEFT SYMBOL TABLE]
Chave = índice do símbolo Valor = tipo de símbolo WIF (ver secção 4)
Bower. Ignoradas. Não são escritas.
8.12 [THREADING]
Liços de cada fio de teia. São permitidos vários liços por fio.
Chave = fio de teia (1..n)
Valor = liço, ou liço,liço,...
1=1,5 significa que o fio 1 está passado nos liços 1 e 5
0 significa que o fio não é usado
Se faltar a linha, o fio não é usado
Bower. Suportada, incluindo fios em vários liços. A exportação escreve uma linha por fio.
8.13 Secções por fio e por passagem
Estas secções atribuem valores a fios ou passagens individuais. Há três grupos: estrutura (pedalagem / ordem de levantamento dos liços), cor e aspeto (espessura, espaçamento, símbolos).
Secção Valor Predefinição se faltar
------ ----- ----------------------
[WARP THICKNESS] real ≥ 0 [WARP].Thickness
[WARP THICKNESS ZOOM] inteiro ≥ 0 [WARP].Thickness Zoom
[WARP SPACING] real ≥ 0 [WARP].Spacing
[WARP SPACING ZOOM] inteiro ≥ 0 [WARP].Spacing Zoom
[WARP COLORS] índ. paleta [WARP].Color
(um inteiro; ignorar os valores R,G,B antigos no fim)
[WARP SYMBOLS] índ. símbolo [WARP].Symbol Number
[TREADLING] pedais não usado (zero)
[LIFTPLAN] liços não usado (zero)
[WEFT THICKNESS] real ≥ 0 [WEFT].Thickness
[WEFT THICKNESS ZOOM] inteiro ≥ 0 [WEFT].Thickness Zoom
[WEFT SPACING] real ≥ 0 [WEFT].Spacing
[WEFT SPACING ZOOM] inteiro ≥ 0 [WEFT].Spacing Zoom
[WEFT COLORS] índ. paleta [WEFT].Color
[WEFT SYMBOLS] índ. símbolo [WEFT].Symbol Number
A pedalagem comanda os liços através do risco: a chave é a passagem e o valor são os pedais pressionados, por exemplo 5=1,2. A ordem de levantamento dos liços comanda-os diretamente: a chave é a passagem e o valor são os liços que sobem, por exemplo 5=1,3. Normalmente, um ficheiro usa só uma das duas formas, não ambas (secção 8.14).
Bower. A pedalagem, a ordem de levantamento dos liços e as cores da teia e da trama são suportadas. As secções de espessura, espaçamento, zoom e símbolos são ignoradas e nunca são escritas.
8.14 Modo do tear, cala de levante e efeito
Não existe uma chave mode=. O modo do tear deduz-se das secções de estrutura presentes.
O Bower e o Visualizador de WIF gratuito usam a seguinte regra:
Se [LIFTPLAN] estiver presente
e ([TREADLING] faltar ou Treadles for 0)
então tratar o ficheiro como ordem de levantamento dos liços
(THREADING + LIFTPLAN)
senão tratá-lo como risco
(THREADING + TIEUP + TREADLING)
A ordem de levantamento dos liços corresponde ao tear de maquineta (Dobby): cada passagem indica os liços. O risco corresponde ao tear de pedais: cada pedal seleciona uma coluna do risco e a pedalagem é a sequência dos pedais.
Quando Rising Shed é false, depois de carregadas as grelhas, invertem-se todas as quadrículas da ordem de levantamento dos liços (nesse modo do tear) ou todas as do risco (no modo de risco). O remetido e a pedalagem ficam tal como estão escritos.
Rising Shed=true, passagem 1=1,2 → liços 1 e 2 em cima
Rising Shed=false, mesma linha → esses liços ficam registados em baixo,
os outros liços passam a estar em cima
O efeito não é guardado no ficheiro. Depois de carregada a estrutura e aplicada a eventual inversão, uma quadrícula do tecido é uma pica (teia por cima) se algum dos liços em que está passado o fio de teia dessa quadrícula também for levantado nessa passagem – pela ordem de levantamento dos liços, ou por um pedal ativo e o seu risco. Caso contrário, é uma deixa (trama por cima). Os programas voltam a calcular o efeito para o mostrar; não há nenhuma secção de efeito para exportar.
Bower. O carregamento e a apresentação seguem este procedimento. O Visualizador de WIF gratuito usa as mesmas regras de estrutura e cor. No modo de ordem de levantamento dos liços, o visualizador omite o bloco vazio do risco e mostra os pedais como “-” no painel lateral.
8.15 Elementos suspensos e obsoletos
Suspensos na 1.1: [TRANSLATIONS] [BITMAP FILE], [BITMAP IMAGE], [BITMAP IMAGE DATA] Retirados / obsoletos no texto da 1.1: secção Design, ColorMix, chave Colors, chave Palette, valores RGB no fim de WARP/WEFT COLORS
Bower. Todos estes elementos são ignorados e não são escritos. As secções desconhecidas não fazem, por si só, falhar a importação.
9. Limites de tamanho da implementação
Estes limites não fazem parte do WIF 1.1. Na importação, as dimensões são restringidas a um intervalo, para que um ficheiro não possa reservar uma grelha sem limite de tamanho. Os valores fora do intervalo passam para o limite mais próximo, em vez de o ficheiro ser rejeitado por não ser WIF.
Fios de teia, passagens 1 .. 4096 Liços, pedais 1 .. 64
10. Perfil de exportação
A exportação do Bower produz um ficheiro WIF 1.1 completo, em cala de levante, destinado a programas que leiam as secções principais indicadas abaixo. As notas, os símbolos, o espaçamento e os dados privados de fabricantes vindos de uma importação anterior perdem-se quando o ficheiro é importado e novamente exportado.
- [WIF], [CONTENTS], [COLOR PALETTE] com Range=0,255, [WEAVING] com Rising Shed=true
- [WARP] e [WEFT] com Threads, índice de Color, Units=Centimeters
- [COLOR TABLE], [THREADING], [WARP COLORS], [WEFT COLORS]
- Ou [LIFTPLAN] e Treadles=0, ou [TIEUP] e [TREADLING] em conjunto
- Nenhuma secção TEXT, NOTES, de símbolos, de espaçamento, de espessura, privada ou de bitmap
11. Exemplos
Os exemplos seguintes são ficheiros WIF 1.1 completos. Contêm apenas a estrutura; não incluem tabela de cores.
11.1 Modo de risco
Oito fios, oito passagens, quatro liços, quatro pedais. Remetido seguido, um risco de sarja e uma pedalagem que repete a sequência dos quatro pedais.
[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 de ordem de levantamento dos liços
Quatro fios, quatro passagens. Treadles é 0 e [LIFTPLAN] está presente, por isso o ficheiro é lido como ordem de levantamento dos liços. Cada passagem indica diretamente os liços. Não há risco nem pedalagem.
[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. Programas relacionados
Um ficheiro .wif pode ser aberto no Visualizador de WIF gratuito, para examinar o debuxo num navegador, ou importado para o Bower, para o editar. O visualizador tem o botão “Abrir no Bower”.
13. Referências
Fontes da especificação. As notas assinaladas com Bower nesta página descrevem o comportamento do Bower na importação e na exportação; não fazem parte da especificação de 1997.
- Nielsen, Ravi, et al. Weaving Information File (WIF) Specification, Version 1.1. 20 de abril de 1997. Entre os colaboradores contavam-se Ravi Nielsen (Patternland / Maple Hill Software), Bob Keates (Fiberworks), Rob Sinkler (SwiftWeave) e membros da lista de e-mail WIF de 1997. Texto: http://www.tantradharma.com/maplehill/wif/wif1-1.txt.
- Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0. 3 de março de 1996. Substituída pela 1.1 no intercâmbio atual.
- Asunder – o Bower e o Visualizador de WIF gratuito.