WIF は Weaving Information File(織物情報ファイル)の略です。ほとんどの織物ソフトが開いて保存できるプレーンテキスト形式で、下絵を手で描き直さずにアプリ間で移せます。広く使われている版は 1.1(1997年4月20日)です。
以下では .wif ファイルの組み立てをセクションごとに追い、Bower と無料の WIF ビューア が各部分を実際にどう扱うかを記します。ツールを書くときや、きれいに開かないファイルを直すときに役立つはずです。まず平易な入門は WIF ファイルとは? をご覧ください。
Bower について述べるとき、次のラベルを使います。
- 対応 — 読み取り、書き出し、またはその両方。
- 部分対応 — 扱いますが、1.1 本文のすべての端ケースまでは扱いません。
- 無視 — ファイルに含まれていても構いません。飛ばし、それだけでインポートを失敗させません。
- 非出力 — エクスポートでは決して出力しません。
- 1.1 で保留 — 古い形式文書にはまだ載っていますが、今日の通常利用には含まれません。
1. 設計目標
WIF の設計者は、読めなくならずに成長できる形式、人がテキストエディタで開いても意味が取れる形式、プレーンテキストを読めるコンピュータなら処理できる形式を望んでいました。
彼らはパックされたバイナリのビットフィールドではなく、綜絖と踏み木の番号をカンマで並べた人間向けのリストを選びました。レイアウトは古い Windows の .INI ファイルによく似ています — 角括弧のセクション、Key=value 行 — が、クラシックな Windows 3.1 の ini の 64K 制限はありません。古い Windows の private-profile API は使えません。テキストを自分でパースする必要があります。
2. ファイル種別
.wif ファイルはただのテキストです。バイナリの包みはありません。拡張子は .wif が期待されますが、大切なのは中身です。
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: .wif を通常のテキストとして読み書きします。
3. 字句規則
すべて行ベースです。行は空行、コメント、セクション見出し、キー/値の組のいずれかです。
- 空行は無視されます。
- 最初の空白以外の文字が「;」なら、その行全体がコメントです。数値や真偽のあとにコメントを付けることもできます(多くの場合もう一つの「;」のあと)。自由テキストのキーは同じ行に末尾コメントを付けないでください。
- セクション見出しは [Section Name] の形です。照合は大文字小文字を区別しません。慣例として名前は大文字で書きます。
- 代入は Key=value の形です。キーの照合は大文字小文字を区別しません。値はその行の最初の「=」のあとに続くものすべてです。
- 同一セクション内の重複キーは好ましくありません。リーダーはクラッシュしてはいけません。最初または最後の値を残して構いません。
- セクションの順序やセクション内のキーの順序は、正しいリーダーでは問題になりません。
ごく小さな断片です(完全な下絵ではありません)。
; this line is ignored [WEAVING] Shafts=4 Treadles=4
Bower: 空行と行頭の ; コメントを飛ばし、名前は大文字小文字を区別せず照合し、通常キーでは最後の値が勝ちます。構造の行は番号でキー付けします。値の前後空白は切りますが、行末のインラインコメントは特別には取り除きません。
4. 真偽値とシンボル
真/偽について、形式は真側に true、on、yes、1、偽側に false、off、no、0 を許します。省略可能な真偽が欠けている場合、特定のセクションが別途定めない限り偽として扱います。
Bower: true、yes、1 を真とします。それ以外の非空は偽とみなします。on や off は特別扱いしません。
一部のプログラムは下絵の「シンボル」(塗りつぶしマスの代わりの文字)を格納します。小さなシンボル型を使います。
=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: シンボルは実装していません。見た目は色のみです。シンボルセクションはインポートで無視し、エクスポートでは決して書きません。
5. 最小要件
正しい 1.1 ファイルには常に [WIF] と [CONTENTS] があります。ファイルに実際に現れるその他のセクションは、[CONTENTS] の下に true で列挙すべきです。使わないセクションは省略するか false で列挙できます。セクションがあるなら、その必須キーも揃っているべきです。
したがって通糸だけがあり [WIF] ブロックがないファイルは、有効な WIF 1.1 文書ではありません — 一部ツールがそれでも読もうとしてもです。
Bower: [WIF] がないとインポートは失敗します。入口で [CONTENTS] は要求も検証もしません。エクスポートでは常に両方を書き、出すセクションにはすべて true を付けます。
6. 情報セクション、データセクション、疎データ
一部のセクションは背景情報(タイトル、パレットサイズ、機の本数)で、一部は下絵の実データ行(通糸、端ごとの色など)です。[CONTENTS] は含まれるものの一覧です。[WIF] 自身は列挙しません。
形式は疎データを想定します。Threads から経糸・緯糸をすべて作り、[WARP] と [WEFT] から既定を入れ、構造セルをゼロ(未使用)にし、既定と違うキー行だけを書きます。リーダーはその逆を行います。
例えば経糸 8 本が同じ赤で 3 番だけ青なら、経の既定を赤にして 1 行だけ上書きできます。
[WARP] Threads=8 Color=1 [WARP COLORS] 3=2
端 1・2・4–8 はパレット色 1 のまま、端 3 はパレット色 2 です。構造も同じ考えです。通糸行が無いことは「その端に綜絖なし」であり、「前の端をコピー」ではありません。
Bower: 糸本数と構造/色テーブルを使います。間隔/太さの既定や疎な thickness/spacing は実装していません。構造の既定は空で、欠けた構造キーは空のままです。色テーブルがある場合、インデックスが 0 より大きいとき [WARP] / [WEFT] の Color 既定を適用し、その後端ごと・緯ごとの上書きを適用します。
7. プライベートセクション
アプリは他を壊さずに自前のデータをしまえます。名前には一意のソース ID を含め、ベンダー同士が衝突しないようにします。
[PRIVATE <SourceID> <SectionName>] Lines inside must not start with '[' so a reader can find the next section.
Bower: プライベートセクションは飛ばし、決して書きません。プライベート Source ID は定義していません。
8. セクション一覧
WIF 1.1 の名前付きセクションそれぞれと、我々の扱いです。Bower で下絵を開くことだけが目的なら、「無視」の項目は流し読みし、構造・色・セクション 10 のエクスポート一覧に集中して構いません。
8.1 [WIF] — 必須
これが識別ブロックです。これが無いと、ファイルを 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: セクション自体はインポート時に必須です。エクスポートでは Version=1.1、Date、Developers、Source Program=Bower、Source Version を書きます。[WIF] 内の個別キーが欠けても、インポートを厳しく失敗させません。
8.2 [CONTENTS] — 1.1 では必須
目次です。キーがセクション名、値が true または false。存在するセクションだけを true で列挙すれば足ります。可能なすべてのセクションを true/false で列挙する書き手もいます。それは許可されていますが必須ではありません。
理論上は CONTENTS だけで何を読み込むか決められます。実務では多くのツール(我々も含む)がファイル全体を走査します。
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: インポートで CONTENTS は要求せず、パース対象の選択にも使いません。エクスポートでは実際に出すセクションごとに true を書きます。
8.3 [COLOR PALETTE]
パレットの大きさと RGB 値の数値範囲を示します。古いファイルは 0–255 ではなく 0–999 を使うことがあり、リーダーはスケールする必要があります。
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
例: Range=0,999 と表エントリ 1=999,0,0 は赤チャンネルを 8 ビットでおおよそ 255 に写します。Range=0,255 と 1=255,0,0 ならスケールは不要です。
Bower: Range を読み(欠けていれば既定 0,255)、各チャンネルを round((c − min) / (max − min) * 255) で変換し、0–255 にクランプします。max−min がゼロ以下ならインポートは失敗します。Entries は強制しません。エクスポートは常に Range=0,255 です。
8.4 [WARP SYMBOL PALETTE] / [WEFT SYMBOL PALETTE]
Key Official Description ---- -------- ----------- Entries required integer > 0
Bower: 無視。非出力。
8.5 [TEXT]
作品と作者についての任意のメモ — タイトル、作者、連絡先。下絵グリッドは変えません。
Key Official ---- -------- Title optional Author optional Address optional EMail optional Telephone optional FAX optional
Bower: 無視。非出力。
8.6 [WEAVING]
機の大きさと開口の慣例です。ここで宣言したより高い番号が構造セクションにあれば、綜絖数と踏み木数は増えます。
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
ライジングシェッドとは、リフトプランに列挙された綜絖(または踏み木/タイアップ経路で上げられた綜絖)が上がるという意味です。フォーリングシェッドはもう一方の物理慣例です。ファイルがフォーリングなら、読み込み後にリフトプランのセル — またはタイアップのセル — を反転し、内部グリッドはライジングのまま、布はファイルの意図と一致するようにします。
Bower: Shafts と Treadles を読み(欠けていれば既定 4)、必要なら構造から伸ばします。Rising Shed が無い場合は true とみなします。false は上記の反転を起こします。エクスポートは常に Rising Shed=true、リフトプランモードでは Treadles=0 です。Profile は無視します。
8.7 [WARP] と [WEFT]
経または緯の全体と、各糸の既定を述べます。Threads が分かったらその本数の端または緯を確保し、既定を適用し、疎セクションで個別を上書きします(セクション 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
Color では、交換用に単純なパレット索引を優先してください。RGB 三つ組を付けるファイルもありますが、我々は索引だけ使います。
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
プログラムが間隔と太さの一方しか扱わない場合、形式は両方があれば Spacing を優先するよう定めます。「太さ」だけで考えるなら Spacing を書くか、同じ数で両方を書いてください。
Bower: Threads を読み(欠けていれば経 32・緯 48)、Color は 0 より大きいときパレット索引 1 つとして扱います。シンボル、間隔、太さ、ズーム、Color の余分な RGB は無視します。エクスポートは Threads、Color、Units=Centimeters を書きます。
8.8 [NOTES]
自由テキストで、番号付き行ごとに 1 文字列。下絵グリッドの一部ではありません。
1=First line of notes 2=Second line
Bower: 無視。非出力。
8.9 [TIEUP]
各踏み木が上げる綜絖を列挙します(反転前のライジングシェッドの意味)。純リフトプランでないとき、通糸と踏み木順とともに使います。
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: タイアップモードで対応。複数綜絖の値も問題ありません。エクスポートは踏み木ごとに 1 行書きます。
8.10 [COLOR TABLE]
これがパレットです。ここでの索引が経/緯の Color キーが指す先です。R,G,B の数は [COLOR PALETTE] の Range に入ります。
Key = palette index Value = R,G,B in the palette Range
パレット、経の既定、2 つの上書きの小さな例です。
[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
端 1 と 3 は赤系のパレット項目が既定、端 2 と 4 は青系を使います。
Bower: 上記の Range 写像付きで対応。エクスポートは一意の糸色ごとに 1 表項目を書き、常に Range=0,255 を使います。
8.11 [WARP SYMBOL TABLE] / [WEFT SYMBOL TABLE]
Key = symbol index Value = WIF symbol type (see section 4)
Bower: 無視。非出力。
8.12 [THREADING]
各経糸端が通る綜絖です。1 端に複数綜絖も許されます。
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: 複数綜絖の端も含めて対応。エクスポートは端ごとに 1 行書きます。
8.13 端ごと・緯ごとのセクション
個々の端や緯に値を付けます。三つの群があります。構造(踏み木順 / リフトプラン)、色、見た目(太さ、間隔、シンボル)。
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
踏み木順はタイアップモード用: キーが緯、値が踏む踏み木、例 5=1,2。リフトプランは直接: キーが緯、値が上がる綜絖、例 5=1,3。通常のファイルはどちらか一方の制御経路を使い、同時には使いません(次のセクション参照)。
Bower: 踏み木順、リフトプラン、経/緯の色に対応します。太さ、間隔、ズーム、シンボルセクションは無視し、決して書きません。
8.14 機モード、ライジングシェッド、ドローダウン
ファイルに単一の「mode=」キーはありません。何が有るかに基づいて構造の読み方を決めます。
Bower と無料 WIF ビューアで使う規則です。
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)
リフトプランはドビー式の「各緯が綜絖を列挙する」モデルです。タイアップはクラシックな綜絖機のモデルで、踏み木がタイアップの列を選び、踏み木順が踏み木の列です。
Rising Shed が false のとき、グリッドを読み込んだあとリフトプランの各セル(リフトプランモード)またはタイアップの各セル(タイアップモード)を反転します。通糸と踏み木順は書いたままです。
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
ドローダウンはファイルに格納されません。構造を読み込み(開口の反転があればそれも行った)あと、その端に通っている綜絖がその緯でも上がっているなら布の各セルは経上 — リフトプランからか、有効な踏み木とそのタイアップから — です。そうでなければ緯上です。表示用にプログラムが再計算します。エクスポート用のドローダウンセクションはありません。
Bower: 読み込みと表示はこうします。無料 WIF ビューアも同じ構造・色の規則に従います。リフトプランモードではビューアは空のタイアップブロックを省き、横パネルの踏み木は「-」と表示します。
8.15 保留と廃止の部分
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: これらはすべて無視し、書きません。未知のセクションだけではインポートは失敗しません。
9. Bower のサイズ制限
これは WIF 1.1 の一部ではありません。インポート時に寸法をクランプし、荒いファイルが無制限のグリッドを確保できないようにします。範囲外の値は「WIF ではない」と拒否するのではなく範囲内に寄せます。
Warps, wefts 1 .. 4096 Shafts, treadles 1 .. 64
10. Bower が書くもの
我々のエクスポートは、同じ核セクションを理解する他の 1.1 リーダーで開くための、完全なライジングシェッドファイルです。以前のインポートのメモ、シンボル、間隔、ベンダー固有の私有データは保持しません — 我々経由で往復すると落ちます。
- [WIF]、[CONTENTS]、Range=0,255 の [COLOR PALETTE]、Rising Shed=true の [WEAVING]
- Threads、Color 索引、Units=Centimeters 付きの [WARP] と [WEFT]
- [COLOR TABLE]、[THREADING]、[WARP COLORS]、[WEFT COLORS]
- [LIFTPLAN] と Treadles=0、または [TIEUP] と [TREADLING] の両方
- TEXT、NOTES、シンボル、間隔、太さ、プライベート、ビットマップの各セクションは無し
11. 例
小さな完全なファイルが二つ。色テーブルなし — 構造だけです。
11.1 タイアップモード
8 端、8 緯、4 綜絖、4 踏み木。ストレート通糸、簡単な綾風タイアップ、4 本の踏み木を二周する踏み木順。
[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 リフトプランモード
4 端、4 緯。Treadles が 0 で [LIFTPLAN] があるのでリフトプランとして読みます。各緯が綜絖を直接列挙 — タイアップも踏み木順もありません。
[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. 関連ツール
無料の WIF ビューア で .wif を開きブラウザで下絵を確認するか、編集したいときは Bower にインポートできます(ビューアからの Bower で開くを含む)。
13. 出典
形式本文の出典です。このページの「Bower:」注記は我々のインポート/エクスポートの振る舞いを述べたもので、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 と無料 WIF ビューア。