myfファイルの仕様
トップページ 初級マニュアル 上級マニュアル アナウンスメント FAQはじめに
この記事では、myfファイルのフォーマット仕様について説明します.
目次
- クォーティング文字列の定義
- 行配列セクション(SectionLines)について
- 変数セクション(SectionVars)について
- プリミティブセクション(SectionPrims)について
- セクション外領域(OutOfSection)について
- 特殊空文字について
クォーティング文字列の定義
ファイルの一番初めの行に @def_quoteで始まる行を記述することでクォーティング文字列を宣言できる.この指定がない場合、以下が指定されたのと同等とみなす.
@def_quote [' ']
このとき引数としてホワイトスペースで区切られた文字列を2つ取り、これはユーザが自由に指定できる.
( ただしその長さはそれぞれ31文字以下でなければならない. これ以上長いものを指定した場合は途中で打ち切られる )
例えば、上記の @def_quote [' '] という記述は、クォーティングの開始記号として [' を以降の行で用い、
同様にクォーティングの終了記号として '] を以降の行で用いることを宣言する.
このクォーティングは複数行に跨るデータを囲うこともできる.
例
text = ['なるほど完璧な作戦っスねーーーっ
不可能だという点に目をつぶればよぉ~']
text = ['なるほど完璧な作戦っスねーーーっ
不可能だという点に目をつぶればよぉ~']
またこれで囲まれたデータはその中にたとえいかなる特殊文字が含まれていようとも、その文字がそのまま扱われる.
(正規表現などにみられるエスケープ文字などといった邪悪なものは存在しない).
従ってこの場合、' " \ などを使った典型パターンもそのまま記述でき、SJISコードの「表」や「ソ」などを含む日本語も安心して使える.
この宣言はファイルの最初の行において一度だけ行うことができる.
仮に2行目以降宣言してもそれは単に読み飛ばされる.
目次に戻る
行配列セクション(SectionLines)について
行頭の@@L nameは行配列セクションの開始を意味する.以降簡潔のため、これをSectionLinesと呼ぶ.
nameの部分には、このSectionLinesの名前を記述する.
nameの部分は非ホワイトスペース文字を使用可能である.
行頭の@@.のみの行に至ることでSectionLinesは終了となる.
SectionLinesの開始行と終了行の間に挟まれた行において文字列の配列データを記述できる.
このとき一行につき一つの要素が対応する. この値はクォーティング文字列で囲わないこと.
(囲ったとしてもそのクォーティング文字列はそのままデータとみなされる)
例
@@L starting_hosts
http://www.google.com
http://www.yahoo.co.jp
@@.
@@L starting_hosts
http://www.google.com
http://www.yahoo.co.jp
@@.
データ行の行頭に#を記述することでその部分をコメント化することもできる.
例
@@L starting_hosts
http://www.google.com
#http://www.yahoo.co.jp
http://www.youtube.com
@@.
@@L starting_hosts
http://www.google.com
#http://www.yahoo.co.jp
http://www.youtube.com
@@.
ただしこのようなコメントは transientである.
つまり一度myfをloadしてそれを同ファイルへsaveするようなプログラムでは跡形もなく消去される.
上の例ではsaveしたmyf内では # で始まる行は消えてしまうことだろう.
目次に戻る
変数セクション(SectionVars)について
行頭の@@V nameは変数セクションの開始を意味する.以降簡潔のため、これをSectionVarsと呼ぶ.
nameの部分にはSectionVarsの名前を記述する.
nameの部分は非ホワイトスペース文字を使用可能である.
行頭の@@.のみの行に至ることでSectionVarsは終了となる.
SectionVarsの開始行と終了行の間に挟まれた行を変数代入行と呼ぶ.
これは以下の形式となる.
var_name = quoted_value
または
var_name = { quoted_value ... }
または
var_name = { quoted_value ... }
quoted_valueにおいて値を記述するが、この値は必ずクォーティング文字列で囲う必要がある.
また { quoted_value ... } においては quoted_value の配列を記述できる.
例
@@V last_access
date = ['2016/03/25']
time = ['23:55:01']
@@.
@@V last_access
date = ['2016/03/25']
time = ['23:55:01']
@@.
例
@@V img_extensions
list = { ['jpg'] ['png'] ['gif'] }
@@.
@@V img_extensions
list = { ['jpg'] ['png'] ['gif'] }
@@.
変数代入行において行頭に#を記述することでその部分をコメント化することもできる.
例
@@V last_access
#date = ['2016/03/25']
date = ['2016/03/26']
#time = ['23:55:01']
time = ['01:03:04']
@@.
@@V last_access
#date = ['2016/03/25']
date = ['2016/03/26']
#time = ['23:55:01']
time = ['01:03:04']
@@.
ただしこのようなコメントは transientである.
つまり一度myfをloadしてそれを同ファイルへsaveするようなプログラムでは跡形もなく消去される.
上の例ではsaveしたmyf内では # で始まる行は消えてしまうことだろう.
目次に戻る
プリミティブセクション(SectionPrims)について
行頭の@@P nameはプリミティブセクションの開始を意味する.以降簡潔のため、これをSectionPrimsと呼ぶ.
nameの部分にはSectionPrimsの名前を記述する.
nameの部分は非ホワイトスペース文字を使用可能である.
行頭の@@.のみの行に至ることでSectionPrimsは終了となる.
SectionPrimsの開始行と終了行の間に挟まれた行をプリミティブ行と呼ぶ.
これは以下の形式となる.
quoted_value
または
{ quoted_value ... }
または
{ quoted_value ... }
quoted_valueにおいて値を記述するが、この値は必ずクォーティング文字列で囲う必要がある.
また { quoted_value ... } においては quoted_value の配列を記述できる.
例
@@P last_access
['Zenkaku']
['2016/03/25']
['23:55:01']
@@.
@@P last_access
['Zenkaku']
['2016/03/25']
['23:55:01']
@@.
例
@@P img_infos
{ ['jpg'] ['JPEGフォーマット'] }
{ ['png'] ['PNGフォーマット'] }
{ ['gif'] ['GIFアニメーション'] }
@@.
@@P img_infos
{ ['jpg'] ['JPEGフォーマット'] }
{ ['png'] ['PNGフォーマット'] }
{ ['gif'] ['GIFアニメーション'] }
@@.
プリミティブ行において行頭に#を記述することでその部分をコメント化することもできる.
例
@@P last_access
# ['Zenkaku']
['2016/03/25']
['23:55:01']
@@.
@@P last_access
# ['Zenkaku']
['2016/03/25']
['23:55:01']
@@.
ただしこのようなコメントは transientである.
つまり一度myfをloadしてそれを同ファイルへsaveするようなプログラムでは跡形もなく消去される.
上の例ではsaveしたmyf内では # で始まる行は消えてしまうことだろう.
目次に戻る
セクション外領域(OutOfSection)について
SectionLines、SectionVars、SectionPrims、これら3つ以外の領域においては、myfパーサは基本的に無視する.この部分をOutOfSectionと呼ぶ.
従って、この部分にはコメントなどを記述しておくこともできる.
このOutOfSectionについては、ZnkMyf_loadを行ったときに内容が記録され、
これをZnkMyf_saveで保存したときにその内容もそのまま書き出される.
(load => saveといった流れでこの部分の内容は失われない)
OutOfSection領域であっても、@def_quoteで始まる最初の行は特別な意味を持つ.
これについては、上で述べたとおりである.
目次に戻る
特殊空文字について
これは滅多に登場しない例外的な場合に備えた仕様である.行頭が@@^の場合、myfの字句解析器はクォーティングされている場合を除きこれを無条件に空文字とみなす.
myfではこれを特殊空文字と呼ぶ.
例えば、以下にある行頭の特殊記号列を本当にデータとしてそのまま扱いたい場合どうすればよいだろうか?
(そんなことは滅多にないだろうが)
# ...
@@L ...
@@V ...
@@.
@@^ ...
@@L ...
@@V ...
@@.
@@^ ...
特殊空文字を用いれば、上記を以下のように記述することでこれに対処できる.
@@^# ...
@@^@@L ...
@@^@@V ...
@@^@@.
@@^@@^ ...
@@^@@L ...
@@^@@V ...
@@^@@.
@@^@@^ ...
このあたりは仕様からエスケープシーケンスを排除した代償が間接的に現れているが
こんな記号列を実用上のデータで扱う機会は滅多にないということでよしとしよう.
尚、行頭以外に@@^が出現した場合は、空文字ではなくそのまま扱われる.
以上
目次に戻る
This article was written by:
Zenkaku
@znk project