Markdown, wiki markup, html5そしてWINI: 簡易マークアップ言語書法の比較早見表（チートシート）

# はじめに

**この記事で取り上げたWini.pmはVersion 1.0にアップデートされ、大きく機能拡張しています。
最新の情報についてはマニュアル記事『[ウェブサイトらくらく作成 軽量マークアップ言語markgaab/Wini](https://zenn.dev/kojidoi/books/6831494c86db9b)』をご覧ください。**

WINIは、いわゆる簡易マークアップ言語の一つである。「できるだけ手間暇かけずに高品質なHTMLコンテンツを構築する」ために、markdownやwiki markupを参考に開発された。

WINIは、markdownなみにシンプルな文法体系を維持しつつ、高度な表現力をもつ。HTML5のプリプロセッサであることを前提とすることにより、「きれいな文書」を手早く完成させるという目的をかなえるべく高機能性と平易性を両立させることに成功したのが、WINIというマークアップ言語なのである。

本記事の目的は、WINIと既存マークアップ言語の簡単な比較を通して、WINIの概略を把握していただくことにある。WINIの詳細については総合的紹介記事『[WINI ━ WIKIやMARKDOWNを超えた新しいマークアップ言語](https://qiita.com/doikoji/items/f6139b7d91b48e50dcef#%E3%83%95%E3%83%AD%E3%83%BC%E3%83%88%E5%B1%9E%E6%80%A7)』に譲るので、参照いただければ幸いである。

え？ そんなどこの馬の骨とも分からぬ言語に興味はない？ えっと、markdownとwikiの文法早見表としても本記事を活用してください。

# WINIではこんな表現ができる

まずWINI文法の概略を説明し、そのあとで、HTML5・Markdown・Wiki Markupの比較対照表を示す。

## 文章構造

### 大見出し・中見出し・小見出しあるいは部・章・節

文頭が`!`である行は、「見出し」である。`!`が最上位で、`!!`、`!!!`と感嘆符が増えるごとに下位のレベルとなる。HTML5の`<h?>`タグに対応している。

```
! 大見出し
!! 中見出し
!!! 小見出し
```


### 箇条書き

文頭が`#`である行は、番号付きリストとして扱われる。同様に文頭が`*`である行は、番号なしリストとして扱われる。`;`で始まる行と`:`で始まる行は、対となって「定義リスト」を構成する。それぞれ、HTML5の`<ol>...</ol>`、`<ul>...</ul>`、`<dl>...</dl>`に対応する。

```
# 番号付きリスト項目１
# 番号付きリスト項目２
## 入れ子になった番号付きリスト項目２－１
## 入れ子になった番号付きリスト項目２－２

* 番号なしリスト項目１
* 番号なしリスト項目２

; 定義リスト項目１
: 定義リスト項目１説明
; 定義リスト項目２
: 定義リスト項目２説明
```

## テキスト装飾

上付き文字・下付き文字は、それぞれ`^^`と`_`で表現できる。


```
水の化学式は、H__2Oである。
1辺10cmの正方形の面積は、100cm^^2である。
ウラン235（^^{235}U）はウランの同位体の一つである。
```

各種の文字飾りに対応したマクロが用意されている。

```
{{b|太字}}, {{i|斜体}}, {{u|下線}}, {{s|打ち消し線}}
```


## リンク

`[リンク先URL 説明文]`でハイパーリンクが作れる。

また、`[リンク先URL|@@ 説明文`で「リンク先を別窓で開く」リンクが作れる。つまり、`[http://example.com|@@ 別窓で開く]`は、`<a href="http://example.com" target="_blank">別窓で開く</a>`というhtmlコードに変換される。

## インラインイメージ

`[! イメージ画像のURL 説明文]`でインラインイメージが作れる。また、`[!! イメージ画像のURL 説明文]`と感嘆符を重ねることで、さらにfigureタグを組み合わせることが出来る。

```
[!! image.png|>200x100 sample image]
```
対象画像がimage.pngで、それを高さx幅=200x100pxで表示、さらに右寄せフロート属性を指定し、画像の左側に本文が回り込むことを許す。imgタグはfigureタグの中に配置され、`sample image`がfigureのキャプションとして使われる。

更に、インラインイメージとリンクを組み合わせたコードがWINIでは簡単に書ける。

```
[? image.png|100x100@@ でかい画像]
```
この`[?`書式は次のようなhtmlコードに変換される。

```
<a href="image.png" target="_blank"><img src="http://image.png" alt="でかい画像" id="image1" width="100" height="100"></a>
```

つまり、image.pngという画像について、本文中に幅100px、高さ100pxのサムネイルを置き、クリックすることでオリジナルサイズの画像表示に飛ぶリンクが設定される。

## 引用
```
{{q}}
引用テキスト
{{end}}
```

のように、マクロを使うことで任意のテキストを引用できる。引用テキスト中ではWINI書法は無効となり、書いたとおりのテキストが`blockquote`タグ[^1]に囲まれる形で出力される。

またpythonなどで使われる`"""`で挟む形式にも対応している。

```
"""
引用テキスト
"""
```

[^1]: qタグではないことに注意。インライン要素ではなくブロック要素を対象とする意図である。

`{{q}}`の仲間に`{{pre}}`と`{{code}}`がある。これらのマクロを使うと、対象テキストは`blockquote`の代わりにそれぞれ`pre`あるいは`pre+code`タグで囲まれて出力される。これらは「整形済みテキスト」と位置付けられ、さらに``{{code}}``は対象テキストが「プログラムコード」の引用であることを示す。

## 表

表関係のマークアップは、これでもかとばかり、著しく、非常に、たくさん用意されている。詳細は別記事に譲り、ここではごく単純なサンプルだけ示しておく。

```
|- 表のタイトル |                             |
|  見出し0   | 列見出しA | 列見出しB | 列見出しC |
|  行見出し1 |    セル1A | セル1B   | セル1C    |
|  行見出し2 |    セル2A | セル2B   | セル2C    |
```

# チートシート

お待たせした。いよいよ書法対照表を示そう。存分に検分いただきたい。

なお、markdownやwiki markupを実装したソフトは数多くあり、それらの間で、サポートされている文法が少しづつ異なっている。そうしたバリエーション全部をフォローするのは困難なので、ここでは以下の方針を採用する。

* markupについては、ここはqiitaなので原則的にqiita準拠の文法を示す。
* wiki markupについては[MediaWikiのヘルプ文書](https://www.mediawiki.org/wiki/Help:Formatting/ja#%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E6%95%B4%E5%BD%A2)の記述に準拠する。

ここに記した記法は上記以外のツールでも多くの場合通用するとは思うが、正確なところはそれぞれのマニュアルを確認してほしい。

<table style="height:32rem; background:white;">
<tfoot style="border:0px;">
<tr><td colspan="5"><sup>*1)</sup> 厳密にはHTML5におけるb,i,u,sタグは論理タグであって見た目を決める物理タグではない。しかしwikiもmarkdownもHTML4以前の定義に準拠して、これらを物理タグとして扱い、WINIのように論理タグと区別していない。これらを同列に並べるのは本来の意味を考えるとおかしいのだが、各ツールの現状を考え、やむを得ずこのような形にまとめている。</td></tr>
</tfoot>
<tbody style="border:2px solid;">
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">見出し </th></tr>
<tr><th style="width:60em;">機能 </th><th style="width:60em;">WINI </th><th style="width:60em;">wiki </th><th style="width:60em;">markdown </th><th style="width:60em;">HTML5 </th></tr>
<tr><th>大見出し</th><th style="background-color:white;">!xxx</td><td>= xxx =</td><td># xxx</td><td>&lt;h1>xxx&lt;/h1></td></tr>
<tr><th>中見出し</th><th style="background-color:white;">!!xxx</td><td>== xxx ==</td><td>## xxx</td><td>&lt;h2>xxx&lt;/h2></td></tr>
<tr><th>小見出し</th><th style="background-color:white;">!!!xxx</td><td>=== xxx ===</td><td>### xxx</td><td>&lt;h3>xxx&lt;/h3></td></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">リスト／箇条書き </th></tr>
<tr><th style="width:60em;">機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>番号なしリスト</th><th style="background-color:white;">* xxx</td><td>* xxx</td><td>* xxx</td><td>&lt;ul>&lt;li>xxx&lt;/li>&lt;/ul></td></tr>
<tr><th>番号つきリスト</th><th style="background-color:white;"># xxx</td><td># xxx</td><td>0. xxx</td><td>&lt;ul>&lt;li>xxx&lt;/li> &lt;/ul></td></tr>

<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">文字スタイル<sup>*1</sup> </th></tr>
<tr><th style="width:60em;">機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>上付</th><th style="background-color:white;">^^{XX}</th><td>&lt;sup> XX& lt;/sup></td><td>&lt;sup> XX &lt;/sup></td><td>&lt;sup> XX& lt;/sup></td></tr>
<tr><th>下付</th><th style="background-color:white;">__{XX}</th><td>&lt;sub> XX &lt;/sub></td><td>&lt;sub> XX &lt;/sub></td><td>&lt;sub> XX &lt;/sub></td></tr>
<tr><th rowspan="2">太字 </th><th style="background-color:white;">{{b&#x7c;太字}} </th><td rowspan="2">&apos;&apos;&apos; 太字 &apos;&apos;&apos; </td><td rowspan="2">&#x2a;&#x2a; 太字 ** </td><td rowspan="2">&lt;span style="font-weight:bold;"> 太字 &lt;/span> </td></tr>
<tr><th>{{*&#x7c;太字}} </th></tr>
<tr><th rowspan="2">斜体 </th><th>{{i&#x7c;斜体}} </th><td rowspan="2">&apos;&apos;斜体&apos;&apos; </td><td rowspan="2">&#x2a; 斜体 * </td><td rowspan="2">&lt;span style="font-style:italic;"> 斜体 &lt;/span> </td></tr>
<tr><th>{{/&#x7c;斜体}} </th></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">文字修飾<sup>*1</sup> </th></tr>
<tr><th style="width:60em;">機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th rowspan="2">下線</th><th>{{u&#x7c;下線}} </th><td rowspan="2">&lt; u>下線 &lt;/u> </td><td rowspan="2">&lt;u> 下線 &lt;/u> </td><td rowspan="2">&lt;span style="border-bottom: solid 1px;"> 下線 &lt;/span> </td></tr>
<tr><th>{{_&#x7c;下線}} </th></tr>
<tr><th rowspan="2">打消線</th><th>{{s&#x7c;打消線}} </th><td rowspan="2">&lt;s> 打消線 &lt;/s> </td><td rowspan="2">~~打消線~~ </td><td rowspan="2">&lt;span style="text-decoration: line-through;"> 打消線 &lt;/span> </td></tr>
<tr><th>{{-&#x7c;打消線}} </th></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">意味付け<sup>*1</sup> </th></tr>
<tr><th>機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>b </th><th>{{B&#x7c;キーワード}} </th><td>&lt;b> キーワード &lt;/b> </td><td>&lt;b> キーワード &lt;/b> </td><td>&lt;b> キーワード &lt;/b> </td></tr>
<tr><th>i </th><th>{{I&#x7c;心の声}} </th><td>&lt;i> 心の声 &lt;/i> </td><td>&lt;i> 心の声 &lt;/i> </td><td>&lt;i> 心の声 &lt;/i> </td></tr>
<tr><th>s </th><th>{{S&#x7c;不正確・無関係}} </th><td>&lt;s> 不正確・無関係 &lt;/s> </td><td>&lt;s> 不正確・無関係 &lt;/s> </td><td>&lt;s> 不正確・無関係 &lt;/s> </td></tr>
<tr><th>strong </th><th>{{&#x2a;&#x2a;&#x7c;重要}} </th><td>&lt;strong> 重要 &lt;/strong> </td><td>&lt;strong> 重要 &lt;/strong> </td><td>&lt;strong> 重要 &lt;/strong> </td></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">画像の挿入 </th></tr>
<tr><th>機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>単純なインラインイメージ </th><th>[!x.png] </th><td>[[file:x.png]] </td><td>![](x.png) </td><td>&lt;img src="x.png"></td></tr>
<tr><th>代替テキストつきインラインイメージ </th><th> [!x.png テキスト] </th><td> [[file:x.png | alt=テキスト]] </td><td>![テキスト](x.png) </td><td>&lt;img src="x.png" alt="テキスト"></td></tr>
<tr><th>代替テキスト・リンクつきインラインイメージ </th><th>[?x.png テキスト] </th><td>[[file:x.png |alt=テキスト | link=x.png]] </td><td>[![テキスト](x.png)](x.png) </td><td>&lt;a href="x.png"> &lt;img src="x.png" alt="テキスト"> &lt;/a></td></tr>
<tr><th>with size</th><th>[!x.png| 640x480]</th><td>[[file:x.png| 640x480px]</td><td>&lt;img src="x.png" width="640" height="480"></td><td>&lt;img src="x.png" width="640" height="480"></td></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">リンク </th></tr>
<tr><th>機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>他ページへのリンク</th><th>[http://x.test/index.html テキスト] </th><td>[http://x.test/index.html テキスト] </td><td>[テキスト](http://x.test/index.html) </td><td>&lt;a href="http://x.test/index.html">テキスト &lt;/a></td></tr>
<tr><th colspan="5" style="text-align:center;border-right:solid 0px;border-left:solid 0px;">引用など</th></tr>
<tr><th>機能 </th><th>WINI </th><th>wiki </th><th>markdown </th><th>HTML5 </th></tr>
<tr><th>普通の引用</th><th>{{q}}<br>text<br>{{end}}</th><td>&lt;blockquote>text &lt;/blockquote></td><td>&gt; text</td><td>&lt;blockquote>text &lt;/blockquote></td></tr>
<tr><th>改行を保全した引用</th><th>{{pre}}<br>text<br>{{end}}</th><td>&lt;pre>text&lt;/pre></td><td>&gt; text</td><td>&lt;pre>text &lt;/pre></td></tr>
<tr><th>プログラムコード</th><th>{{code}}<br>text<br>{{end}}</th><td>&lt;pre><br>&lt;code>text&lt;/code><br>&lt;/pre></td><td>```<br>text<br>```</td><td>&lt;pre><br>&lt;code>text&lt;/code><br>&lt;/pre></td></tr>
</tbody>
</table>

# 終わりに

デファクトスタンダードともいえるWiki markupやMarkdownを向こうに回して、なぜ作者がわざわざ「車輪の再発名」たる新しいマークアップ言語を開発したのか、ここまで読み進めてくださった方は理解されたことと思う。

本記事では文法体系のことしか触れなかったが、システムのインストールに余計な手間がかからないことも付け加え強調しておきたい。端的に言えば、**perlさえ使えれば他は要らない**システムであり、linuxだろうとMacOSだろうとFreeBSDだろうとWindows10だろうと、問題なく導入できる。

さあ、皆さん。

これ以上WINIのユーザとなることを躊躇する理由があるだろうか?　いや、ない！　いますぐ[公式ダウンロード元](https://github.com/Koji-Doi/wini)にアクセスして、一式ダウンロードしましょう！


[^b]: html5における`<b>`は、ボールドフォントを指定する物理マークアップではなく、テキストの重要性を示す論理マークアップである。しかし今のところwiki markupは両者の区別をしていないようである。`<i>`, `<u>`, `
`などでも状況は同じである。