5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

軽量マークアップ言語にまつわるあれこれAdvent Calendar 2021

Day 3

超複雑な表を超簡単に書く:マークアップ言語markgaabの紹介(1)

Last updated at Posted at 2020-12-23

要約

複雑な表作成が簡単にできるマークアップ言語が出来たよ。markgaabというんだ。html5に特化したマークアップ言語で、perlとWini.pmというツールを通して使えるよ。

しばしば求められる「複雑な表」

ウィキペディア日本語版のとある記事には、こんな表が掲載されている。

ouisen.png

元ネタ:
Wikipedia 王位戦_(将棋)#方式の遍歴

巷で日々生産される報告書のたぐいの中では、こういうノリで作られた表はそれほど珍しくはないだろう。
こうしたセンスが罷り通っているところに筆者としては思うところがないではないが、罷り通っているという現実を否定することは出来ないのである。

作表対応ツールはいろいろあるが……

こういった表を皆さんはどのように書いているだろうか。ワード? エクセル? まさかパワーポイント? 理工系の人ならLaTeXと答える人も居るだろうか。

どのツールを使っても面倒なはずだ。

さて、素のhtmlよりはお手軽に編集できるのがwikiマークアップの売りである。そのwikiマークアップで当該の表はどのように表現されているのだろうか。ウィキペディアの編集画面を覗いてみよう。

うーん。素敵に複雑。これを素手で入力していくのは勘弁してほしいと思うところだろう。

どれもこれも面倒だ。本当にもっと簡単に編集する手段はないのだろうか?

遥かにお手軽に作表できるツールが誕生した!

あるのである! というか、ないから作ったのである!

拙作Wini.pmが、そのソリューションとなる。

筆者は、複雑な表の表現にも対応した簡易マークアップ言語であるmarkgaabと、そのサポートツールのWini.pmを開発して公開している。

上で掲げたのと同じ表をmarkgaabで表現すると、こうなる。
ouisen2.png

どうですお客さん。上で示したウィキペディアのマークアップともう一度見比べてみて欲しい。ずいぶん直感的で見やすいでしょう?

その上、markgaabは表現力が強力無比である。セル結合・セル内箇条書き・注釈・罫線表示切り替え・行幅列幅調節・字配りの変更などなど、自由自在に実現できる。ソースコードの可読性を全く損なわずにだ。

易しさと強さを兼ね備えた最新のマークアップ言語。それがmarkgaabなのである。

markgaab/Wini.pmを導入しよう

今まさに作表案件を抱えている皆さん。きょうもエクセルで消耗しますか? Wini.pmに乗り換えましょう、今日!

ほんの10分だけ準備に使えばいいから!

perl

Wini.pmを利用するには、まずperlというものを使えるようにしなければならない。

残念ながらwindows10においてperlは標準装備ではない。もしWSL2が導入されているなら問題はない。本格的にやりたいなら他の様々な有用なテキスト操作ツールも使えるWSL2上のperlを使い倒すのが良い。そこまで深入りしたくないという人は、とりあえずportable版strawberry perlをもってくるのが手っ取り早いだろう。

参考:
自宅でも職場でもネカフェでもperl - Qiita

linux, MacOSなどを使っている人は、すでにperlが使える状況にあるだろう。次のステップに進んでほしい。

導入 (Wini.pm)

perlが使える様になったら、次にgithubにアクセスしてzipファイルを展開、あるいはgit clone git@github.com:Koji-Doi/wini.gitする。

取得したアーカイブの中に入っているWini.pmをPATHの引かれたディレクトリにコピーすれば、セットアップ完了である。

クイックスタート! 超カンタンな表を書いてみよう

前述のとおり、超絶複雑な表を簡単に書けるのがmarkgaabのウリではあるが、まあ最初は至極簡単な表を取り上げ、基本について説明したい。

元ネタ: 公立の小学1.2.3年生の時間割はこんな感じ! : himag

|- じかんわり 1ねん2くみ | border="1" |
|!!    | 月                 | 火       | 水       | 木       | 金       |
|!!! 1 | こくご             | こくご   | こくご   | こくご   | こくご   |
| 2    | さんすう           | たいいく | こくご   | こくご   | さんすう |
| 3    | ずこう             | こくご   | たいいく | たいいく | さんすう |
| 4    | ずこう             | せいかつ | せいかつ | せいかつ | こくご   |
| 5    | がっきゅうかつどう | どうとく | おんがく | さんすう | おんがく |

上のようなコードを書いてこれを例えばinput.txtとしてセーブする。そして、コマンドラインから以下のような感じにコマンドを打ち込む(パス設定とかカレントディレクトリの違いとか適当に考慮して変更してほしい)。

perl Wini.pm < input.wini > output.html

すると、次のような内容のoutput.htmlが得られる。

<table id="winitable1" class="winitable" border="1" style="border-collapse: collapse; border: solid 1px; ">
<caption> じかんわり 1ねん2くみ</caption>
<tbody>
<tr><th></th><th>月 </th><th>火 </th><th>水 </th><th>木 </th><th>金 </th></tr>
<tr><th>1 </th><td>こくご </td><td>こくご </td><td>こくご </td><td>こくご </td><td>こくご </td></tr>
<tr><th>2 </th><td>さんすう </td><td>たいいく </td><td>こくご </td><td>こくご </td><td>さんすう </td></tr>
<tr><th>3 </th><td>ずこう </td><td>こくご </td><td>たいいく </td><td>たいいく </td><td>さんすう </td></tr>
<tr><th>4 </th><td>ずこう </td><td>せいかつ </td><td>せいかつ </td><td>せいかつ </td><td>こくご </td></tr>
<tr><th>5 </th><td>がっきゅうかつどう </td><td>どうとく </td><td>おんがく </td><td>さんすう </td><td>おんがく </td></tr>
</tbody>
</table>

markgaab tableの超カンタンな文法入門! 以下を理解すればとりあえずOK

上で取り上げた小学校の時間割の例をざっとみていただければ、markgaabがどういう指向性のものか大体の見当はつくだろう。これを踏まえて改めて基本事項を整理しよう。

用語の整理

  • 表は「セル」が縦横に配置されたテキストである。
  • セルをヨコに並べたものが「列」である。
  • セルをタテに並べたものが「行」である。

表データの基本構造

  • それぞれの行はセパレータとセル内容が交互に並んだテキストとして表現される。
  • |で始まり1つ以上のスペースで終わる文字列が、「セパレータ」である。
  • |で始まらずスペースで挟まれた文字列が、「セル内容」である。

次回予告

詳細は次回記事に書くことにしよう。もう少しだけ複雑な表を書き、さらに超複雑な表の作成に話を進めていく。

おわりに

なお、当然だがmarkgaabは作表専用言語ではない。markdownやwiki記法、LaTeXなど、先行システムをいろいろ研究した上で、究極にして至高で高機能なマークアップ言語たらんとして開発を続けている。それでいてperlとたった1つのスクリプトファイル(Wini.pm)のみあれば利用でき、スタートアップの敷居は至極低い。詳細については公式マニュアルを参照して欲しい。そして、とにかく使ってみていただきたい。

参考リンク

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?