やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

AsciiDocでテーブルのセルにコードブロックを含めてみた

Markdownにはできない。

成果物

GitHubAsciiDoctor.Table.Cell.CodeBlock.201705100845

開発環境

前回まで

テーブルにコード

f:id:ytyaru:20170510092909p:plain

python2と3のコードを比較しやすい。

inline版

test.asc

[cols="2", options="header, autowidth"]
|====
^|python2
^|python3

a|
[source, python]
----
import datetime
print "%s" %(datetime.datetime.now())
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
----

a|
[source, python]
----
import datetime
print("{0}".format(datetime.datetime.now()))
print("{0:%Y-%m-%d %H:%M:%S}".format(datetime.datetime.now()))
----
|====

include版

test.asc

[cols="2", options="header, autowidth"]
|====
^|python2
^|python3

a|
[source, python]
----
include::python2.py[lines=5..7]
----

a|
[source, python]
----
include::python3.py[lines=5..7]
----
|====

python2.py

#!python2
# -*- coding: utf-8 -*-
import datetime
print "%s" %(datetime.datetime.now())
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print datetime.datetime.strptime("2000-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")

python3.py

#!python3
# -*- coding: utf-8 -*-
import datetime
print("{0}".format(datetime.datetime.now()))
print("{0:%Y-%m-%d %H:%M:%S}".format(datetime.datetime.now()))
print(datetime.datetime.strptime("2000-01-01 00:00:00", "%Y-%m-%d %H:%M:%S"))

ファイル構成

  • ./test.asc
  • ./python2.py
  • ./python3.py

良い点

こういうコードの比較形式を書きたかった。しかしMarkdownでテーブルのセル内で改行するには<br>記入が必要なため実用性がなかった。include機能などないため修正があるとHTML内から探さねばならず面倒になる。AsciiDocのおかげで楽になる。

  • セル内改行に<br>記述不要
  • includeなのでファイル分離できて修正しやすい

悪い点

かなり冗長なソース。もはや手で書きたくないレベルだし読みづらい。

  • 冗長なので書きづらく読みづらい
  • 暗号じみて読みづらく編集しづらい

もっとスマートに表現できないものか。とくにinclude版はファイル拡張子で察して欲しい。コードブロックを書かずにそうして欲しい。a|も同じく。たとえば以下くらい簡単に書けると嬉しいのだが。

|====
|python2|python3

|include::python2.py|include::python3.py
|====

所感

表現の幅が広がる。ただし手で書くのはまだ辛い。もういっそ独自の文法や形式を定義できるようになればいいかもしれない。方法はあるのかもしれないが知らない。