WIF (Weaving Information File) 是逐行記錄的純文字格式,用來在不同程式之間交換織圖。目前交換織圖所用的是 1997 年 4 月 20 日的 1.1 版。

本文是附有註解的 WIF 1.1 參考資料。格式規則依照 1997 年的規格;標有 Bower 的說明,則記錄 Bower 與免費的 WIF 檢視器如何實作這些規則。Bower 說明屬於實作文件,並不是 1997 年規格的一部分。如需不屬於規格本身的概覽,請參閱什麼是 WIF 檔案?一文。

Bower 說明使用以下狀態用語:

  • 支援:會讀取、寫入該欄位或區段,或兩者兼具。
  • 忽略:該欄位或區段可以出現在檔案中,讀取時直接略過,不會只因為它而導致匯入失敗。
  • 不寫入:匯出時一律不會寫出該欄位或區段。
  • 1.1 版暫停使用:列在 1997 年的規格文字中,但不屬於目前的交換內容。

1. 設計目標

WIF 的設計目標是:保有擴充彈性、能用文字編輯器閱讀,而且任何能讀取純文字的系統都能處理。

結構資料以逗號分隔的綜片與踏木編號儲存,而不是壓縮成二進位的位元欄位。檔案的實際排列方式類似 Windows 的 .INI 檔案:以方括號標示區段標頭,其下是 Key=value 行。與傳統 Windows 3.1 的設定檔 (private-profile) 不同,WIF 沒有 64K 的大小限制,也無法用 Windows 讀取這類設定檔的 API 解析,必須使用專用的解析器。

2. 檔案類型

WIF 檔案是純文字,沒有二進位容器。慣用的副檔名是 .wif。檔案格式由 [WIF] 區段識別。

副檔名                .wif
字元編碼              ASCII(實務上也接受不含 BOM 的 UTF-8)
換行字元              LF 或 CRLF
順序                  區段與鍵的順序不具意義

Bower:匯入與匯出時,都將 .wif 視為純文字處理。

3. 基本語法

語法以行作為單位。每一行都是空白行、註解、區段標頭,或一組鍵與值。

  • 空白行一律忽略。
  • 如果一行的第一個非空白字元是 ;,整行都是註解。數字或布林值後面可以接行尾註解,通常寫在第二個 ; 之後。文字類的值不得在同一行加上行尾註解。
  • 區段標頭的格式為 [Section Name],比對時不區分大小寫。依慣例,名稱以大寫字母書寫。
  • 指派的格式為 Key=value,鍵的比對不區分大小寫。值是該行第一個 = 之後的其餘內容。
  • 同一區段內出現重複的鍵即不符合規格。讀取程式不得只因鍵重複就讓檔案讀取失敗;保留第一個值或最後一個值皆可。
  • 區段的順序,以及區段內鍵的順序,都不具意義。

以下片段示範這些寫法,並不是完整的織圖:

; this line is ignored
[WEAVING]
Shafts=4
Treadles=4

Bower:會略過空白行與整行的 ; 註解。名稱比對不區分大小寫。一般的鍵以最後一個值為準。結構資料列以編號作為鍵。值會去除前後空白。不會移除行尾註解。

4. 布林值與符號

可視為 true 的布林值有 true、on、yes 與 1。可視為 false 的布林值有 false、off、no 與 0。除非個別區段另有規定,省略的選用布林值一律視為 false。

Bower:true、yes 與 1 視為 true,其他任何非空的值都視為 false。on 與 off 不另作特殊處理。

符號類型以單一顯示字元代替已填滿的方格:

=1        數字
=X        單一字元
='X'      加引號的字元
=#219     字元碼 0..255

空格寫成 ' ' 或 #32。
井字號寫成 '#' 或 #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根經線不同,就由經線的預設值提供共用的顏色,再用一筆覆寫記下這個例外:

[WARP]
Threads=8
Color=1

[WARP COLORS]
3=2

第1根、第2根及第4根至第8根經線使用調色盤的第 1 號顏色;第3根經線使用第 2 號顏色。結構也適用同樣的規則:缺少某根經線的穿綜行,表示這根經線沒有穿入任何綜片,而不是沿用前一根經線。

Bower:會使用經緯線數量,以及結構表與顏色表。間距與粗細的預設值,以及稀疏的粗細表與間距表,都未實作。結構預設為空白;缺少的結構鍵維持空白。若有顏色表,[WARP] / [WEFT] 的 Color 預設值在索引大於零時套用,接著再套用逐根經線、逐根緯線的覆寫。

7. 私有區段

各家軟體可以在檔案中儲存私有資料,而不影響交換。區段名稱必須包含唯一的來源識別碼,以免不同廠商的區段互相衝突:

[PRIVATE <SourceID> <SectionName>]

區段內的每一行都不得以 '[' 開頭,讀取程式才能找到下一個區段。

Bower:會略過私有區段,也一律不寫入,並且沒有定義私有的 Source ID。

8. 區段一覽

本節列出 WIF 1.1 中每個具名的區段,以及 Bower 對各區段的實作狀態。能否與 Bower 交換織圖,取決於結構、顏色,以及第 10 節的匯出內容。

8.1 [WIF] — 必要

這是必要的識別區段。沒有 [WIF] 的檔案不是有效的 WIF 1.1 檔案。

鍵               規格要求     說明
----             --------     -----------
Version          必填         例如 1.1
Date             必填         格式不拘的日期字串
Developers       必填         聯絡方式/作者
Source Program   必填         建立檔案的程式名稱
Source Version   選填         建立檔案的程式版本

Bower:匯入時此區段為必要。匯出時寫入 Version=1.1、Date=April 20, 1997、[email protected]、Source Program=Bower 與 Source Version=1.0。[WIF] 內個別的鍵缺少時,不會讓匯入失敗。

8.2 [CONTENTS] — 1.1 版為必要

目錄:以區段名稱為鍵,值為 true 或 false。只有實際存在的區段需要列為 true。也可以列出每個已定義的區段並標示 true 或 false,但不強制。

讀取程式可以只依 CONTENTS 選擇要讀取的區段。

資訊類旗標:
  COLOR PALETTE, WARP SYMBOL PALETTE, WEFT SYMBOL PALETTE, TEXT,
  WEAVING, WARP, WEFT

資料類旗標:
  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>

暫停使用/保留:
  TRANSLATIONS
  BITMAP IMAGE, BITMAP FILE, BITMAP IMAGE DATA

Bower:匯入時不要求 CONTENTS,也不會依它決定要解析哪些區段。匯出時,每個實際寫出的區段都標為 true。

8.3 [COLOR PALETTE]

宣告調色盤大小與 RGB 值的數值範圍。較舊的檔案可能使用 0–999 而不是 0–255,讀取程式必須等比換算。

鍵        規格要求     說明
----      --------     -----------
Entries   必填         整數 > 0,調色盤大小
Range     必填         min,max,且 max > min
Form=RGB  已廢止       請勿寫入;若出現則忽略

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]

鍵        規格要求     說明
----      --------     -----------
Entries   必填         整數 > 0

Bower:忽略。不寫入。

8.5 [TEXT]

關於作品與製作者的選用資訊:標題、作者、聯絡資訊。這些鍵都不會影響織圖格線。

鍵          規格要求
----        --------
Title       選填
Author      選填
Address     選填
EMail       選填
Telephone   選填
FAX         選填

Bower:忽略。不寫入。

8.6 [WEAVING]

織布機的綜片數、踏木數與開口方式。如果結構區段用到的編號高於此處宣告的數量,綜片數與踏木數可能隨之增加。

鍵            規格要求     說明
----          --------     -----------
Shafts        必填         整數 > 0
Treadles      必填         整數 > 0
Rising Shed   選填         true = 列出的綜片會提起
Profile       已廢止       忽略;請勿寫入

依提綜的慣例 (rising shed),紋板圖中列出的綜片(或經由踏木與踏木綁法帶動的綜片)會提起;相反的慣例 (falling shed) 則是這些綜片會降下。檔案指定降下的慣例時,載入後會將紋板圖的方格(或踏木綁法的方格)反轉,讓程式內部的格線一律以提綜表示,織物也與檔案一致。

Bower:會讀取 Shafts 與 Treadles(缺少時預設為 4),必要時依結構資料調高。缺少 Rising Shed 時視為 true;值為 false 時,執行上文所述的反轉。匯出時一律寫入 Rising Shed=true,紋板圖模式下另寫入 Treadles=0。忽略 Profile。

8.7 [WARP] 與 [WEFT]

這兩個區段描述經線或緯線的整體設定,以及每根紗線的預設值。讀到 Threads 後,依該數量配置經線或緯線並套用預設值,再以逐根紗線的區段(只列出有值的項目)覆寫個別紗線(見第 6 節)。

鍵               規格要求              說明
----             --------              -----------
Threads          必填                  經線或緯線的根數
Color            選填                  調色盤編號,或編號 + R,G,B
Symbol           選填                  符號類型
Symbol Number    選填                  符號表中的編號
Units            使用 Spacing 或       Decipoints | Inches | Centimeters
                 Thickness 時必填
Spacing          選填                  實數 ≥ 0
Thickness        選填                  實數 ≥ 0
Spacing Zoom     選填                  整數 ≥ 0
Thickness Zoom   選填                  整數 ≥ 0

1.1 版已廢止(忽略;請勿寫入):
  Colors, Palette, ColorMix

在不同程式之間交換時,Color 最好只寫一個調色盤編號。有些檔案還會在編號後附上一組 RGB 值。

Color=2              ; 每根經線或緯線預設使用 COLOR TABLE 第 2 項
Color=2,255,0,0      ; 編號加上可省略的 RGB — 只保留編號

若程式只支援 Spacing 與 Thickness 其中之一,兩者同時存在時以 Spacing 為優先。只處理 Thickness 的程式,也應寫入 Spacing,或以相同數值同時寫入兩者。

Bower:讀取 Threads(缺少時,經線預設為32根、緯線預設為48根)。Color 大於零時,視為一個調色盤編號讀取。符號、間距、粗細、縮放,以及 Color 後多出的 RGB 值,都會忽略。匯出時寫入 Threads、Color 與 Units=Centimeters。

8.8 [NOTES]

任意文字,每個編號行存放一行。這些內容不屬於織圖本身。

1=First line of notes
2=Second line

Bower:忽略。不寫入。

8.9 [TIEUP]

每根踏木列出所提起的綜片(以提綜方向表示,即任何反轉之前的狀態)。檔案不是純紋板圖時,本區段與穿綜、踏序搭配使用。

鍵      = 踏木(1..n)
值      = 綜片,以逗號分隔
          只寫 0 表示未使用
缺少的行維持未使用

範例:1=1,2  → 第1根踏木提起第1綜與第2綜

Bower:踏木綁法模式下支援。值可以列出多片綜片。匯出時每根踏木寫一行。

8.10 [COLOR TABLE]

調色盤的各個項目。經線與緯線的 Color 鍵指向本表中的編號。R,G,B 數值依 [COLOR PALETTE] 的 Range 表示。

鍵      = 調色盤編號
值      = R,G,B,以調色盤的 Range 表示

以下範例包含調色盤與經線預設值,並個別指定兩根經線的顏色:

[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根經線預設使用調色盤的第 1 項;第2根與第4根經線使用第 2 項。

Bower:支援,並依上文所述換算 Range。匯出時每種紗線顏色各寫一個項目,並一律使用 Range=0,255。

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

鍵      = 符號編號
值      = WIF 符號類型(見第 4 節)

Bower:忽略。不寫入。

8.12 [THREADING]

每根經線所穿的綜片。一根經線可以穿入多片綜片。

鍵      = 經線(1..n)
值      = 綜片,多片時以逗號分隔
          1=1,5 表示第1根經線穿入第1綜與第5綜
          0 表示未使用
缺少的行維持未使用

Bower:支援,包括一根經線穿多片綜片的情形。匯出時每根經線寫一行。

8.13 逐根經線與逐根緯線的區段

這些區段為個別經線或緯線指定數值,分為三組:結構(踏序/紋板圖)、顏色,以及外觀(粗細、間距、符號)。

區段                    值            缺少時的預設值
-------                 -----         ------------------
[WARP THICKNESS]        實數 ≥ 0      [WARP].Thickness
[WARP THICKNESS ZOOM]   整數 ≥ 0      [WARP].Thickness Zoom
[WARP SPACING]          實數 ≥ 0      [WARP].Spacing
[WARP SPACING ZOOM]     整數 ≥ 0      [WARP].Spacing Zoom
[WARP COLORS]           調色盤編號    [WARP].Color
                        (單一整數;忽略舊式的 R,G,B 尾段)
[WARP SYMBOLS]          符號編號      [WARP].Symbol Number

[TREADLING]             踏木          未使用(零)
[LIFTPLAN]              綜片          未使用(零)

[WEFT THICKNESS]        實數 ≥ 0      [WEFT].Thickness
[WEFT THICKNESS ZOOM]   整數 ≥ 0      [WEFT].Thickness Zoom
[WEFT SPACING]          實數 ≥ 0      [WEFT].Spacing
[WEFT SPACING ZOOM]     整數 ≥ 0      [WEFT].Spacing Zoom
[WEFT COLORS]           調色盤編號    [WEFT].Color
[WEFT SYMBOLS]          符號編號      [WEFT].Symbol Number

踏序透過踏木綁法控制:鍵是緯線,值是踩下的踏木,例如 5=1,2。紋板圖則直接控制:鍵是緯線,值是提起的綜片,例如 5=1,3。一般檔案只採用其中一種方式,不會兩者並用(見第 8.14 節)。

Bower:支援踏序、紋板圖與經線/緯線顏色。粗細、間距、縮放與符號區段一律忽略,也不會寫入。

8.14 織布機模式、提綜與組織圖

檔案中沒有 mode= 鍵。織布機模式依檔案含有哪些結構區段推斷。

Bower 與免費的 WIF 檢視器採用以下規則:

若有 [LIFTPLAN]
   且(缺少 [TREADLING] 或 Treadles 為 0)
則視為紋板圖檔案
     (THREADING + LIFTPLAN)
否則視為踏木綁法檔案
     (THREADING + TIEUP + TREADLING)

紋板圖沿用多臂機的做法:每根緯線直接列出綜片。踏木綁法沿用落地型織布機的做法:每根踏木對應踏木綁法中的一欄,踏序則是踩踏木的順序。

Rising Shed 為 false 時,載入方格後會反轉紋板圖的每一格(紋板圖模式)或踏木綁法的每一格(踏木綁法模式)。穿綜與踏序則照檔案原樣保留。

Rising Shed=true,  緯線 1=1,2     → 第1綜與第2綜提起
Rising Shed=false, 同一行         → 這兩片綜片記為降下,
                                    其餘綜片改為提起

組織圖不儲存在檔案中。載入結構並套用提綜反轉後,若某根經線所穿的綜片中,有任一片在某根緯線也提起(依紋板圖,或依踩下的踏木及其踏木綁法),該格就是經紗在上;否則是經紗在下。程式會重新計算組織圖以供顯示;沒有可匯出的組織圖區段。

Bower:載入與顯示都依照上述程序。免費的 WIF 檢視器採用相同的結構與顏色規則。在紋板圖模式下,檢視器不顯示空白的踏木綁法區段,並在側邊面板中以 “-” 表示踏木數。

8.15 暫停與廢止的項目

1.1 版暫停使用:
  [TRANSLATIONS]
  [BITMAP FILE], [BITMAP IMAGE], [BITMAP IMAGE DATA]

1.1 版說明中已刪除/廢止:
  Design 區段、ColorMix、Colors 鍵、Palette 鍵、
  WARP/WEFT COLORS 中的 RGB 尾段

Bower:以上項目一律忽略,也不會寫入。未知的區段本身不會導致匯入失敗。

9. 實作的大小限制

這些限制不屬於 WIF 1.1。匯入時會將尺寸限制在範圍內,以免檔案要求無限大的方格。超出範圍的值會調整到範圍內,不會視為不符合 WIF 而遭拒。

經線、緯線       1 .. 4096
綜片、踏木       1 .. 64

10. 匯出內容

Bower 匯出完整的 WIF 1.1 檔案,Rising Shed 為 true,供能讀取下列核心區段的程式使用。匯入檔案中的備註、符號、間距與廠商私有資料,再匯出時不會保留。

  • [WIF]、[CONTENTS]、Range=0,255 的 [COLOR PALETTE]、Rising Shed=true 的 [WEAVING]
  • [WARP] 與 [WEFT],含 Threads、Color 編號、Units=Centimeters
  • [COLOR TABLE]、[THREADING]、[WARP COLORS]、[WEFT COLORS]
  • [LIFTPLAN] 加上 Treadles=0,或同時包含 [TIEUP] 與 [TREADLING]
  • 不含 TEXT、NOTES、符號、間距、粗細、私有或點陣圖區段

11. 範例

以下範例都是完整的 WIF 1.1 檔案。檔案只包含結構,沒有顏色表。

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 的說明,描述 Bower 的匯入與匯出行為,不屬於 1997 年的規格。

  1. Nielsen, Ravi, et al. Weaving Information File (WIF) Specification, Version 1.1. 1997年4月20日。參與者包括 Ravi Nielsen (Patternland / Maple Hill Software)、Bob Keates (Fiberworks)、Rob Sinkler (SwiftWeave),以及 1997 年 WIF 郵寄清單的成員。全文:http://www.tantradharma.com/maplehill/wif/wif1-1.txt。
  2. Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0. 1996 年 3 月 3 日。目前交換檔案時已由 1.1 版取代。
  3. Asunder — Bower 與免費的 WIF 檢視器。