WIF(Weaving Information File,织布信息文件)是一种以行为单位的纯文本格式,用于在不同程序之间交换上机图。目前用于交换的是 1.1 版,版本日期为 1997年4月20日。
本文是附有注释的 WIF 1.1 参考文档。格式规则以 1997年的规范为准。标为 Bower 的说明记录了 Bower 和免费的 WIF 查看器如何实现这些规则。Bower 说明属于实现文档,不是 1997年规范的一部分。如需不涉及规范细节的入门介绍,请参阅《什么是 WIF 文件?》。
Bower 说明使用以下状态术语:
- 支持:读取或写入该字段或节,或两者兼有。
- 忽略:文件中可以出现该字段或节;读取时会跳过它,单凭这一点不会导致导入失败。
- 不写入:导出时从不写出该字段或节。
- 1.1 中已弃用:1997年的规范文本中列出,但不在当前的交换范围内。
1. 设计目标
WIF 的设计目标是:可扩展,能用文本编辑器阅读,任何能读取纯文本的系统都能处理。
结构数据以逗号分隔的综框编号和踏板编号保存,而不是打包成二进制位域。文件的写法类似 Windows 的 .INI 文件:方括号括起的节标题,加上 Key=value 形式的行。与经典的 Windows 3.1 私有配置文件不同,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、on、yes 和 1。可视为假的布尔值有 false、off、no 和 0。除非某个节另有规定,省略的可选布尔值一律为假。
Bower:true、yes 和 1 视为真。其他任何非空值都视为假。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 已废弃 忽略;不要写入
所谓提综开口,就是纹板图中列出的综框(或经由踏板与综框的连接提起的综框)向上提起。下压开口则正好相反,列出的综框向下压。文件指定为下压开口时,载入后要把纹板图的方格(或踏板与综框的连接中的方格)反转,这样内部保存的方格仍以提综开口为准,织出的布也与文件一致。
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。只处理粗细的程序应写入 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] 踏板 未使用(0)
[LIFTPLAN] 综框 未使用(0)
[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=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 文件,面向能读懂下列核心节的程序。之前导入时带来的备注、符号、间距和厂商私有数据,在一次导入导出往返后不会保留。
- [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 年的规范。
- 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。
- Nielsen, Ravi; Keates, Bob; Sinkler, Rob. Weaving Information File (WIF) Specification, Version 1.0。1996年3月3日。在当前的文件交换中已被 1.1 取代。
- Asunder:Bower 和免费的 WIF 查看器。