/* Copyright (C) 2003, 2004
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO112
See the end for copying conditions. */
/***ja
@page mdbGeneral 一般的なフォーマット
@section general-description 説明
関数 mdatabase_load () は、第一タグが @c Mchartable か @c Mcharset で
ない限り、タグで指定されたデータをプロパティリストの形で返す。返される
プロパティリストのキーはMinteger, Msymbol,
Mtext, Mplist に限る。値の型はキーによって曖昧性なく
決定される。キーが Minteger ならば値は整数値であり、キーが
Msymbol なら値はシンボル、Mtext ならば M-text、
Mplist ならばプロパティリストである。
プロパティリストを示すためにはさまざまな表現形式が可能である。たとえば
(K1:V1, K2:V2, ..., Kn:Vn) という形で、最初のK1 と V1、二つ目
のキーと値がK2 と V2 といったプロパティリストを表現することもできる。
しかし、m17n データベースで用いられるプロパティリストのタイプはかなり
限定されているので、もっと単純な表現形式を用いることができる。
これ以降、プロパティリストの示すためには S 式に類似した表現を用いる。
(実際 m17n ライブラリのデフォルトのデータベースローダはこの表現で書か
れたデータファイルを読むように設計されている。)
この表現形式は 1 ないしそれ以上の 要素 (element) からなる。個々
の要素はプロパティすなわちプロパティリストの一つの要素を表す。
要素間は 1 ないしそれ以上の 空白 (whitespace) すなわちスペース
(code 32)、タブ (code 9)、改行 (code 10) のいずれかで区切られる。セミ
コロン(;) で始まる行はコメントである。
各プロパティのキーと値は、要素のタイプに基づいて以下のように決定される。
- 整数
正規表現-?[0-9]+ または0[xX][0-9A-Fa-f]+ に合致する
要素は、キーがMintegerであるプロパティを示す。最初の正規表現
と合致するものは 10 進の整数、後の正規表現と合致するものは 16 進の整数
と解釈し、その解釈の結果がプロパティの値である。
たとえば、要素 0xA0 は10 進で 160 を値とするプロパティである。
- シンボル
正規表現[^-0-9(]([^\\()]|\\.)+ に合致する要素は、キーが
Msymbolであるプロパティを示す。要素中の \\t,
\\n, \\r, \\e はそれぞれ、タブ (code 9)、改
行 (code 10)、復帰(code 13)、エスケープ (code 27) に置き換えられる。バッ
クスラッシュに続く他の文字はそれ自身と解釈される。プロパティの値は、結
果として得られる文字列を名前として持つシンボルである。
たとえば、要素 abc\ def は "abc def" を名前として持つシンボル
を値とするプロパティである。
- MTEXT
正規表現 "([^"]|\\")*" に合致する要素は、キー Mtext
であるプロパティを示す。上記のバックスラッシュによるエスケープはここで
も有効である。さらに、要素中の正規表現
\\[xX][0-9A-Fa-f][0-9A-Fa-f] に合致する部分は、16進で解釈した
結果に置き換えられる。
バックスラッシュエスケープを処理した上で、ダブルクオートにはさまれたバ
イト列をUTF-8 列として解釈し、M-text にデコードする。この M-text がプ
ロパティの値である。
- PLIST
対応する括弧にはさまれた 0 個以上の要素はMplist をキーとする
プロパティを示す。括弧の前後の空白は取り除かれる。プロパティの値は、プ
ロパティリストであり、その括弧内の各要素を再帰的に解釈した結果である。
@section general-syntax 文法の表記
データのプロパティリストフォーマットの説明では、BNF風の記法が用いられ
る。この記法では、非終端は大文字(間に'-'が入ってもよい) で、終端は "
で囲って表される。特別な非終端 INTEGER, SYMBOL,
MTEXT, PLIST はそれぞれ対応するプロパティを意味する。
@section general-example 例
次の単純な形式のプロパティリストに読み込まれる、データベースのデータの
一例を示す:
@verbatim
DATA-FORMAT ::=
[ INTEGER | SYMBOL | MTEXT | FUNC ] *
FUNC ::=
'(' FUNC-NAME FUNC-ARG * ')'
FUNC-NAME ::=
SYMBOL
FUNC-ARG ::=
INTEGER | SYMBOL | MTEXT | '(' FUNC-ARG ')'
@endverbatim
たとえば、次のテキストを含むデータファイルは上の文法に合致する:
@verbatim
abc 123 (pqr 0xff) "m\"text" (_\\_ ("string" xyz) -456)
@endverbatim
そして次のようなプロパティリストとして読み込まれる:
@verbatim
第1要素: キー: Msymbol, 値: abc
第2要素: キー: Minteger, 値: 123
第3要素: キー: Mplist, 値: 次の要素からなるプロパティリスト
第1要素: キー Msymbol, 値: pgr
第2要素: キー Minteger, 値: 255
第4要素: キー: Mtext, 値: m"text
第5要素: キー: Mplist, 値: 次の要素からなるプロパティリスト
第1要素: キー: Msymbol, 値: _\_
第2要素: キー: Mplist, 値: 次の要素からなるプロパティリスト
第1要素: キー: Mtext, 値: string
第2要素: キー: Msymbol, 値: xyz
第3要素: キー: Minteger, 値: -456
@endverbatim
*/
/*
Copyright (C) 2003, 2004
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO112
This file is part of the m17n database; a sub-part of the m17n
library.
The m17n library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
The m17n library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the m17n library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307, USA.
*/