Markdown 界の新星、Markdown for SSW とは

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">気がついたら IANA の markdown variants に項目が増えてる。皆さん知ってましたか。 / Markdown Variants <a href="https://t.co/Hf2UNFlnIm">https://t.co/Hf2UNFlnIm</a></p>&mdash; tk0miya (@tk0miya) <a href="https://twitter.com/tk0miya/status/1224142847512739840?ref_src=twsrc%5Etfw">February 3, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

週末に Markdown の記事を書いた流れなのか、普段まったく見向きもしない IANA の [Markdown variants リスト](https://www.iana.org/assignments/markdown-variants/markdown-variants.xhtml)をふと開いてみました。記憶では最後にこのページにやってきたのは RFC が採用された頃ですから、4年ぶりの再訪です。
すると、なんということでしょう。つい半月ほど前の1月13日に、あたらしい variants として Markdown for SSW がリストに追加されていたのです。

## Markdown variants とは

3年前に [Markdown in 2016](https://tk0miya.hatenablog.com/entry/2016/12/30/205418) という記事で紹介したものを引用します。

>以前から Markdown を RFC に登録しようという動きはあったのですが、ついにそれが実を結びました。
>[RFC7763 The text/markdown Media Type](https://tools.ietf.org/html/rfc7763) と [RFC7764 Guidance on Markdown: Design Philosophies, Stability Strategies, and Select Registrations](https://tools.ietf.org/html/rfc7764) がそれです。
>
>これまで説明してきたとおり、処理系によって解釈がまちまちだったり、さまざまな方言が存在する状況で、Markdown はどのように標準化されたのでしょうか?
>
>ふたつの RFC では、Markdown に関するパラメータが次のように定義されました。
>
>* IANA で markdown の方言を Markdown variants として登録管理することになった
>* media type には text/markdown を使うことになった
>* このふたつを組み合わせて Content-Type ヘッダで text/markdown; variant=Original と指定できる
>
>つまり、RFC は Markdown の “文法” を標準化したのではなく、
>
>1. Markdown の文法が分断されていることを追認した上で、
>2. どの文法を使っているのか(使うのか)を variant として media type で示すことができる
>
>という標準化だったのです。

Markdown の種類を media type 上で表現するためのラベルということですね。
ここまで読んだ皆さんは `Content-type: text/markdown; variant=SSW` というヘッダで Markdown for SSW をレスポンスできるようになったわけです。

## Markdown for SSW ってなんなの?

[Mandragorat Wandystanu](https://wandystan.eu/w/) というポーランドの Wiki サイトで利用されている Markdown の一種のようです。SSW というキーワードについては一切説明を見つけられなかったので、何を示しているのがわかりませんでした [^1]。

[^1]: [サイト内で見つけた](https://skok.wandystan.eu/index.php?s=bierut) "System Słupów Propagandy" (プロパガンダコラムシステム) というキーワードから、 "System Słupów for Wandystanu" (Wandystanu コラムシステム)の略ではないかと推測しています (Wandystanu はサイト名の一部)

文法に関しては [Pomoc](https://wandystan.eu/w/Main::Pomoc) (ヘルプページ)に解説があります。ポーランド語は読めないので Google 翻訳経由で読んでみました。
特徴としては以下のものが挙げられます。

* 打ち消し線文法がある `~~jakiś tekst~~`
* ページ参照文法がある `[[SAL::Strona główna]]`
    * パイプ(`|`)を使ってリンクタイトルを指定できる `[[SAL::Strona główna|Sarmacką Armię Ludową]]` 
    * 同じスペースのページを参照する場合はスペース名を省略して `[[::Strona główna]]` と書いても良い模様
        * Wiki システムにスペースという概念があるようで、`::` の前にはスペース名、後ろにはページ名を指定できる
* ヘッダーレベル3 が最高という記述がある
    * レベル4以降はサブディビジョン(?)として扱われるように読めるが、意味はわかりませんでした


また、[IANA に登録されている定義](https://www.iana.org/assignments/markdown-variants/SSW)では以下のような特徴も挙げられています。

* Markdown Extra 派生である
* MediaWiki 風のテンプレート文法がある `{{template}}`
    * おそらく[この機能](https://www.mediawiki.org/wiki/Help:Templates/ja)を指しているものと思われる
    * 指定したページのコンテンツを(書き換えながら)取り込む、include 的な機能
* 各要素に ID や CSS クラスを適用するための属性ブロック文法がある `{#<id> .class ...}`
    * 属性ブロック文法は ヘッダー、fenced code blocks、リンク、画像に適用可能


どうやら Markdown Extra に MediaWiki 風のページ参照、テンプレート記法を足したというもののようですね。
そっと追加されている打ち消し文法も味わい深いです。

## まとめ

* IANA に Markdown for SSW という variant が追加された
* Markdown Extra に Wiki サイトに適合するために MediaWiki 風の文法が追加されたもの
* 処理系は見当たらないので、今のところ[Mandragorat Wandystanu](https://wandystan.eu/w/) に登録しないと使えないように見える

特定のサイトでだけ使われている、マイナーなマークダウン亜種であっても IANA に登録できるものだという学びがありました。みなさんも自分の拡張マークダウン文法を IANA に登録していきましょう！