-
Notifications
You must be signed in to change notification settings - Fork 4
/
645.txt
126 lines (93 loc) · 5.54 KB
/
645.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[[Windows]] の世界でよく使われているファイル形式です。
悪名高い [[WIN.INI]] や [[SYSTEM.INI]] を筆頭に、
各種[[応用]]の設定を保存するのが主な用途です。
[[Win32]] の治世になってからは INI ファイルの代わりに
[[レジストリ]]に設定情報を保存することが推奨されてます。
しかし [[Win32API]] でも INI ファイルを扱う関数は依然として
用意されています (古い時代のものゆえ結構制限があるけど
(けち臭いことせずなおせよ))。で、レジストリ・データベースは
汚くなるのが嫌われる(笑)ので、[[無料ソフトウェア]]を中心に
根強い人気(謎)があります。
また、その他の [[INFファイル]]や[[インターネット・ショートカット]]
の形式にも用いられているなど、 Windoze の逝きもとい生き続ける限り
不滅のデータ形式かもしれません(藁)。
正式な仕様はしりません。 [[M$]] の [[SDK]] にでもついてるんでしょうか?
最近は無料で見れるらしいですが (いい時代になったもんです。)
とても見る気になりませんな・・・。
以下で使う用語は、 Win32API の関数名の定義なんかに出てくる
よーなのとか、それを使った実装とかから推定した名称に、
必要に応じてでっちあげた用語を補っております。
どーせ M$ のことだから、用語に一貫性なんてないでしょうし、
別にいいでしょ? (その内ネガチブなんとかとかなんとか♭って名前で
復活するかもよ?)
もちろん、 [[BNF]] もでっち上げです。
*構造
=ini-document = [preamble] *section
=comment = *WSP [ ";" *ctext ]
=ctext = %x00-09 / %x0B-0C / %x0E-FF
基本的には、節 section と呼ばれる領域が連なった構造に
なってます。一番最初に、どの節にも属さないデータが
入ることがあります。「レジストリの項目 (*.reg)」という
形式では、「REGEDIT4」みたいに、版情報が入ったりします。
[[文字コード]]はてきとーです。その動いている Windoze
が使っているもの。つまり可搬性が無い・・。
昔昔のそういう時代に設計されたんですからしゃーないですが。
注釈 comment は、大体どこでも書けます。ただ、処理系によっては
注釈をちゃんと処理せず、値の一部にするかもしれません。
行末の WSP はたぶん無視されます。
*前書き preamble
=preamble = section-content
どの節にも属さない最初の部分を、(正式な名前があるのか
知りませんが) 前書きと呼ぶことにします。
前書きの中身は、他の節とかわりありません。
前書きはばっさり省略可能です。
*節 section
=section = section-name section-content *empty-line
=section-name = "[" stext "]" [comment] CRLF
=stext = %x00-5B / %x5D-FF / obs-stext
=obs-stext = "[" / "]"
=section-content = entry-list / line-list
=empty-line = [comment] CRLF
INI ファイルの主となる部分です。各ファイルに任意の個数
入れられます。 (Win32API 的には個数制限があったかも。
それから、中身の大きさ制限とかもあったな・・・。)
節名には、 "[" や "]" を入れると、 Win32API はいかれた
かもしれません。とはいえその辺触ってたのは昔の話なんで、
よく覚えてません。なんせ、使わないほうがよさげ。
節は入れ子に出来ません。どうしても必要なら節名を工夫して擬似的に
するとか。
節の中身は、通常は行ごとに名前=値なんですけど、
INF ファイルとかで、そうでないこともしばしばあります。
節の中身の形式を知る方法はありません。
実装(用途)ごとに決めうちでしょう。
節の終わりには、任意個の空行を入れられます。これは
人間編集者のみやすさのためで、実装は節の内容一部の空行
として扱うものもあるみたいです。
*項目達 entry-list
=entry-list = *(entry / empty-line)
=entry = entry-name "=" entry-value [comment] CRLF / obs-entry
=obs-entry = entry-name *WSP "=" *WSP entry-value [comment] CRLF
=entry-name = *etext / quoted-string
=entry-value = *etext / quoted-string
=etext = %x00-08 / %x0B-0C / %x0E-1F / %x21 / %x23-3A / %x3C / %x3E-5A / %x5C-FF ;; OCTET except CR, LF, WSP, ";", "=", "["
=quoted-string = <"> qtext <">
=qtext = %x00-08 / %x0B-0C / %x0E-1F / %x21 / %x23-%x5B / %x5D-FF / quoted-pair
=quoted-pair = "\" <">
正統的(?)な節の中身です。
quoted-pair は、「レジストリの項目」で使われてます。
<"> 以外の文字にも使えるのかは不明です。
*行達 line-list
=line-list = *(line / empty-line)
=line = *(lcontent / quoted-string) [comment] CRLF
=lcontent = *ltext
=ltext = %x00-%x09 / %x0B-0C / %x0E-21 / %x23-3A / %x3C-5B / %x5D-FF ;; OCTET except CR, LF, ";", "["
構造の無い行の連続です。まあ構造は無いとは言っても、
実際には命令の集合だったり、 [[CSV]] だったり、
その場その場で色々です。下手に構造を仮定して構文解析すると
危険かも。
実装によっては注釈[行]を認めていなかったりだし。
*応用
-[[INFファイル]]
-[[インターネット・ショートカット]]
-[[WindowsExplorerCommand]]
他にも沢山ある。