年表が作りたい

年表が作りたくなった

というのも『月をめざした二人の科学者』を読んだのだが、 www.amazon.co.jp 同じ記述が複数回出てくるし、前後が行ったり来たりするし、 なによりコロリョフフォン・ブラウンの話、ドイツ、アメリカ、ソ連、の話が入り乱れるので、 どうにも「どれとどれが同時期か」いまいちわからない。

とはいえ手作りはつらい

ので、なんか方法を考えることにする。 手っ取り早いのは、何か定形のプレーンテキストを読ませたら、 それを適宜表に成型してくれるものだろう。

アウトプットは html で決定。最初 graphviz を考えたがあれは表組に向いていないようだ。 さらに markdown で考えたが以下のページを見る限り、イマイチなようである。 www.ay3s-room.com

かくなるうえは * ruby で * プレーンテキストを読ませると * 表を吐く* コードを書くことにしよう

HTML 出力ライブラリ

手ごろなのがなかなかぱっと見つからないが

qiita.com

まぁ Nokogiri で用は足りるだろう。 それと↑で見たページの CSS をいれればなんとかなりそうだ。

やりたいことをまとめる

  • ドイツ/ソ連アメリカ/コロリョフフォン・ブラウンみたいに列が分かれている
  • それぞれの出来事に年、年月、年月日が記されており、上から下に時系列で並ぶ
  • 年のみが最上、年月、年月日の順に並ぶ
  • 同じ月の出来事はほぼ左右がそろっていてほしい
  • 第二次世界大戦勃発」みたいなのはすべての列をぶち抜いてほしい
  • ほかにも独ソ戦の開始など 2 列ぶち抜きはほしい
  • 書くときはなるべく細かい列制御は意識したくない(ぶち抜きはあきらめる)

まぁつまり山川の年表みたいになってほしい

f:id:zpx:20201116011142p:plain
山川日本史年表より

実装上は以下のようにする

  • なんか区切り記号を決める。そこでカラムが分割される。
  • 区切り記号の次の行にカラムの記号とヘッダ表記を書く(ex: ussr ソヴィエト連邦 みたいに)
  • 一行空ける
  • 年, 年月, 年月日, を書き、スペースで区切って項目を書く
  • 行の順序は行頭の時刻指定だけで決めるため、順番が狂っていてもよい。ただし省略不可
  • 同一の日時で複数のイベントを書くことは許す。その場合、セルは一つで、中を/で区切る。

class Time それ自体を使うつもりだったけどそれだとだめなんだなぁ、というのに気づいた。 年だけだったとか年月までだったという情報が変換で失われる。

docs.ruby-lang.org