SuikaWiki/0.9

SuikaWiki/0.9

[1] SuikaWiki/0.9 は、 SuikaWiki2 で主として使われている WikiPage の記法です。

[2] YukiWiki/WalWiki の記法を基本に、種々の修正を加えている。 (もはや別物か。)

[4] 本仕様書は古い版です。最新版は: SuikaWiki Markup Language (SWML) ( 版) <https://suikawiki.github.io/spec-swml/spec/> です。

SuikaWiki/0.9 文書マーク付け書式 : 構文仕様書

構造

引数:

default-name
既定の入力者名。 WikiForm で入力者の名前を求める場合、既定値として使用する。引数値は1つだけ指定できる。この引数の既定値は実装依存。
import
実体定義の輸入。引数値は、 WikiName として解釈する。既定値は、「なし」。
interactive
対話的内容かどうか。値は yes または no (既定値)。 実際の処理は実装依存。動的に変化する WikiForm を含んでいるような場合に都合よくキャッシュ制御することを想定している。
obsolete
その WikiPage は既に廃止されているかどうか。 yes または no (既定値)。
page-icon
WikiPage として表示した時に favicon として使う画像を定義する WikiName。その WikiName の WikiPage に存在する画像かもしれないし、その WikiPage の favicon かもしれないし、その辺は実装依存。引数値は1つだけ指定できる。既定値は実装依存。

ブロック水準要素

段落の最初の行の一番最初に実体参照またはフォームがあるときは、互換性のため特別扱いします。 実体参照を置換した内容やフォームを HTML などで出力する時に本来なら行内要素のみである必要がありますが、 この位置にある場合はその制限が課せられません。 (ブロック水準に置換されるならブロックとして、そうでないなら行内として振舞います。)

空ブロックは、それがなければ前のブロックに含まれてしまうがそれを望まない時に自由に挿入できます。

見出しの水準は星一つが一番大きく、任意個の深さにできます。 途中で水準が飛んでも構いませんが、その時はその位置で暗黙のうちに section が複数個同時に始まると解釈されます。 一般的には文書構造として異常です。

最初の記号連続の、最後が "-" なら順序なし、最後が "=" なら順序付きとします。 最後以外は個数だけが重要で、種類は意味を持ちません。

- 順序なし A
- 順序なし B
-= 順序付き B.1
-= 順序付き B.2
-- 順序なし B.A
=- 順序なし B.B
- 順序なし C

水準が飛んでいてはいけませんが、実装は飛んでいても適当に扱わないといけません。

引用符で始まる行は、引用部内のブロック境界として作用します。

> 段落1
段落1の続きの文
> 段落2
段落2の続きの文

引用符2つに数字が続くものは引用ではなく内部リンク始点とみなします。

空白で始まる行から始まるブロックは整形済みブロックとしていましたが、 非推奨とします。タグ指定方式を使ってください。 なお、最初の空白もデータの一部とします。

[16] 編集ブロック内にあるときは、直近の編集ブロックを終わらせる終了タグがあればその編集ブロックもろとも閉じます。

たとえば、

  [INS[
    整形済み
    ブロック
  ]INS]

  [INS[
  [PRE[
    整形済み
    ブロック
  ]PRE]
  ]INS]

は同義です。

[17] 廃止でない整形済み文は、 最初に ']PRE]' *WSP 改行 を見つけたところで終了します。

対して編集は、入れ子に出来ます。

前のこまの続きです。だけがこまの内容である時には、 直前のこまと結合します。直前のこまが連結したこまであっても構いません。 一番最初のこまが前のこまの続きです。であるときの扱いは実装依存とします。

行内要素

0 が正しく扱われることは保証されません。 先導零は使用しないことが望ましいですが、実装は対応しなければなりません。 しかしそれが始点・終点で正しく一致することは保証されません。

定義されている参照方式:

参照方式名参照引数の形式意味
IW(識別子 / 引用文字列) ":" (識別子 / 引用文字列) (拡張検討中)InterWiki による参照 (最初の引数が InterWikiName, 2つ目の引数がそれへの引数)
MAIL<<RFC 2822 addr-spec> ‐<RFC 2822 obs-addr-spec> (但し最初と最後に FWS を使ってはいけない。図形文字以外も使ってはいけない。)>電子メイルの宛先
URI<URI 参照>URI 参照。
URL<URI 参照 (意味的に URL でなければならない。)>URL。URL 仕様書の <URL:http://foo.example/> に対応。

[53] 参照方式名 URL は、非推奨とします。代わりに URI または無指定とするべきです

[54] 参考: SuikaWiki/0.10 では開始タグ中間タグが拡張され、 言語札を指定することができます。

要素型:

要素型名級指定中間タグ個数内部参照リンク始点外部参照リンク始点意味
ABBR0〜1××略語
CODE0××符号
DEL0削除
DFN0××被定義語
INS0挿入
KBD0××鍵盤入力・鍵名
Q0引用句
RUBY1〜2××ルビ
RUBYB1××従属的ルビ
SAMP0××例示
SUP0××上付き
SUB0××下付き
VAR0××変数・変化量
WEAK0××弱調
括弧名×語集団化

は指定可能、×0 は指定に現時点で意味がないことを表します。

INS および PRE は、行のはじめにあるとブロック水準要素としてのそれらと紛らわしくなるので、そうしてはいけません。

[55] SuikaWiki/0.10 や他の版では、 SuikaWiki/0.9 で定義されていない要素型名が定義されているかもしれません。 SuikaWiki/0.9 構文解析におけるその解釈は、 実装依存とします。

汎用フォームフォーム欄はそれぞれ入力, 雛形, 選択肢指定です。 それぞれ WikiForm の定義により解釈します。

[56] フォーム名

[57] 参考: フォーム名は、技術訂正2 (>>41) により修正されています。

[21] フォーム名は、そのフォームの名前です。 この名前は文書内で固有でなければなりません。 フォーム名として実際に使える構文 (文字の種類など) は、 WikiForm の定義によります。

現在定義されている特定フォーム:

特定フォーム名識別子部分の構文意味
comment(使用しない)注釈入力欄
form(使用しない)(予約) 汎用フォーム

既に廃止された特定フォーム:

特定フォーム名識別子部分の構文意味
embed['IMG:'] 識別子引数を WikiName とみなし、 HTML 出力時にその WikiPage を埋め込む。 IMG: がついているときには、画像として埋め込む。
rcomment(使用しない)注釈入力欄 (逆順)
searched識別子HTML 出力時、引数を検索した結果をその位置に挿入

[22] 特定フォーム名 form は、汎用フォームであることを表す名前として予約しますが、 実際に特定フォームで使用してはなりません

引用符は2つよりも3つの方が強い強調とします。

実体参照は、その名前で表される、 輸入されている実体の内容を行内要素の文脈で構文解析した結果で置換します。 (ただし、ブロックとして扱われる特別な位置の実体参照は、ブロック水準の文脈で構文解析します。) 実体の構文はその中で完結していなければなりません。例えば、開始タグは実体内、 終了タグは本文内のような曲芸はできません。

指定された実体が見つからない時の処理は実装依存です。

[59] 実体参照は、非推奨とします。 実装は、実体参照に対応しなくても構いません。 対応しない場合に実体参照をどう処理するかは、 実装依存とします。

[47] 文字データ

他のマーク付けとみなされない文字列は、そのままの文字列として解釈します。 ただし、マークとよく似ているもののそうではない文字列の処理は実装依存とします。 たとえば、対応する終了タグのない終了タグや、 開始タグの最後の ] が欠けたものなどの処理は不定です。

なお、 SuikaWiki/0.9 で今後新たな構文が導入されることはありません。

[47] 参考: 従って、特に文字 [, ], ', <, および >文字データとして使用する時には注意が必要である。

基本字句

[37] 引用文字列

[40] 参考: 引用文字列改行を含めることはできない。

CRLF を外部正規形, LF を内部正規形とします。

[60] システム間の情報交換 (MIMEHTTP での転送を含むが、 ファイル・システムや内部データベースへの保存は含まない。) の際には外部正規形を使います。 内部処理では内部正規形の使用を推奨します。

[61] SuikaWiki/0.9 構文解析器が DOM またはそれに類するを構築する場合、 改行は内部正規形に統一するべきです

[63] 級指定の中身は XML 的名前字句並びになっていないといけません。 但し、 0 だけ (つまり級指定 (0)) は不可とします。

[64] 級指定は、HTMLclass 属性に相当します。

[65] 級並びは、互換性のため、XML 1.0名前字句並び (NMTOKENS) であるべきです

符号化文字集合

[5] SuikaWiki/0.9 文書の表現に使用する符号化文字集合は特に規定しません。 ただし、最低限 ISO/IEC 646国際基準版の文字集合を含んでいないと非実用的でしょう。

転送プロトコル等ではそのプロトコルによって使用している符号化方式を識別します。

書式識別子

インターネット媒体型

[6] MIMEHTTP などで使用する媒体型としては、 text/x-suikawiki を使います。 (text/* を使っていい程度に人間可読でしょう。)

[7] 媒体型引数:

引数名引数値既定値説明
charsetMIME.charset(必須)Charset。
versionHTTP.token(必須)版。 0.9 でなければならない

[8] なお、 MIME で使うときには本文が正規化の対象になります。

[27] charset 引数は、 内部データベースでの蓄積や他のマーク付け言語の文書内の埋め込み、 あるいは Accept 欄などで必要がないか、あると有害な時には省略しても構いません。 そうでない場合 (MIMEHTTP 一般) では必須です。

[67] 実装は、version 引数頭部で指定された版が異なる場合、 version 引数の指定を優先しなければなりません

[68] 実装は、処理しようとする実体version 引数の値が 0.9 の時、その実体本体を処理しなければなりません。 それ以外の値の時、その実体本体を処理しても構いません

拡張子

[9] Windoze などでファイル名に使用する拡張子は、特に決まっていません。 SuikaWiki の実装では、 YukiWiki 以来の伝統 (or 惰性) で .txt になっています。

技術訂正

技術訂正1

[28] 生成規則頭部 (>>29) を、次のとおり置き換える。

[34] 参考: マーク付け言語の版および引数として記述されていた情報は、 外部のメタ情報として記述するべきであり、 文書内には含めないのがよい。
[35] 参考: SuikaWiki/0.9 に画像埋込み機能を追加した SuikaWikiImage/0.9 では、頭部'#?SuikaWiki/0.9' の部分を '#?SuikaWikiImage/0.9' とし、 引数を記述する必要がある。 従って、 SuikaWikiImage/0.9 では頭部を空にできない。
[36] 参考: SuikaWiki/0.10 では、頭部は空でなければならない。

技術訂正2

[57] フォーム名 (>>20) を、 次の通り置き換えます。

[58] 参考: この変更は、構文解析を容易にするためのものです。

修正履歴

[10] 2003-12-12 14:24:32 +00:00 わかば: 今更ですが、構文を ABNF でちゃんと書いてみました。新しい実装がほぼできたので、それを元に整理しました。

[11] 拡張可能部分のうち、頭部引数と、要素型の種類については確定で、今後追加しません。要素型の引数の解釈 (外部参照リンク始点とかに意味を持たせるか) や参照方式特定フォームの種類はまだ検討の余地があります。

[13] >>10-11 頭部引数 interactive が抜けていたので追加しました。 新たに外部参照リンク始点参照方式URI を追加しました。

[14] 2004年1月1日: こまの定義に誤りが見つかったので訂正しました。

引用文字列ではないこまには二重引用符 (<">) を含められないように定義していましたが、 従来の実装や文書ではこれを認めていました。

そこで、二重引用符を認めないのは最初の1文字だけとしました。

[17] 2004年1月1日: 注記 >>16 を追加。

なお、廃止整形済み文の閉じられる場所の実装は SuikaWiki 1 以来安定していません。 一文字目に非空白文字がくる行の直前で終わることにしていたときもありました。

>>16 の規定は、 (たぶん) SuikaWiki 2 の最新の実装と一致します。 SuikaWiki 3 の最新版もそう実装しています。

[25] 2004年1月30日: >>20-26 を追加・修正しました。

[31] 2004年6月13日: 技術訂正 >>28。 この修正は、 #?SuikaWiki/0.9 の魔法行を必須ではないことにします。

SuikaWiki2 以来、旧来の文書との互換性のために、 魔法行がなくても SuikaWiki/0.9 形式と認めてきました。 また、 SuikaWiki3 の新しい実装では媒体型を魔法行ではなく外部情報で判断するので、 魔法行を含める必然性がなくなりました。 これらの理由から、 #?SuikaWiki/0.9 は省略してよいこととします。

[32] 2004年8月8日: >>16 の例示の一部が SuikaWiki/0.9 のタグと認識されてしまうので修正しました。

[70] 2006年5月5日: >>34-69 を削除とマーク付けまたは追加しました。

変更点は:

メモ

[3] >>2 もはや非互換だけど、構文解析の基本方針は概ね同じ。大体上位互換だから、 SuikaWiki から YukiWiki にもってけば (ごみは出るけど) それなりにつかいもんになる程度には互換性はあるはず。

[12] 2003-12-12 14:35:39 +00:00 >>3: なんて書いていましたけど、 SuikaWiki 3 の新しい実装では完全に書き直してしまいました。とはいっても以前とほとんど互換性があります。誤り処理の仕方は違います。 SuikaWiki/0.9 と YukiWiki の書式の互換性は、確かに >>3 の通りですけど、情報劣化を考えると非現実的です。 YukiWiki→SuikaWiki/0.9 はそのままでほとんどの場合 OK でしょうが、最新の YukiWiki で導入された plugin の仕組みは互換性がありませんから駄目です。

[15] 古い文書では頭部が存在しませんから、実装は存在しない文書も扱えるとよいかもしれません。また、内部処理形式等としては本体部だけを処理することとしてもいいでしょう。頭部SuikaWiki/0.9 だけ (先頭に #? がない。) の形式が一時期使われていましたが、実装はこの形式に対応する必要はありません。 (SuikaWiki 2 も、かなり昔に切り捨てています。 SuikaWiki 3 はそもそも未対応。最初の段落とみなします。)

[18] 編集ブロック内に見出しが入ると、実装によってはうまく扱えないことがあります。

たとえば、

* 第2章
** 2.1
あいうえお。
[INS[
** 2.2
かきくけこ。
]INS]
]PRE]
は、 SuikaWiki 2 では思った通りの結果が得られますが、 SuikaWiki 3 では

* 第2章
** 2.1
あいうえお。
[INS[
]INS]
*** 2.2
かきくけこ。

となってしまいます。

これは、 SuikaWiki 3 で内部的に行っている節の処理との相性が悪いために起こります。 SuikaWiki 3 は内部的に

[section[
[heading[
第2章
]heading]
[section[
[heading[
2.1
]heading]
あいうえお。
[INS[
]INS]
[section[
[heading[
2.2
]heading]
かきくけこ。
]section]
]section]
]section]

と扱うからです。 [INS[ の直前で節を閉じることが出来れば思った通りの結果が得られるはずですが、 SuikaWiki/0.9 では陽に閉じる方法がありません。

SuikaWiki/0.9 仕様の立場としては、 この例のような文書の書き方は望ましくなく、 (SuikaWiki/0.9 で表現できる範囲を超えており、) どう処理されるかは実装依存としておきます。

[33] 仕様書の構文にいくつか間違いが見つかっているので修正を検討中です。。。 (名無しさん 2005-02-03 22:46:34 +00:00)