意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

アイデア:日本の事務書類に見られる複雑な表組みをLispのS式で書く

日本の事務書類に見られる複雑な表組みを、論理的な構造を保ちつつテキストファイルで書きたい。 (参考:奥村 晴彦:「ネ申 Excel」問題 [PDF])

そう考えていたとき、LispのS式で書くことを思いついた。

このアイデアのポイントは、下記である:

  • 表組みを罫線で区切るのではなく、(左側に置く)ラベルと(右側に置く)コンテンツの2つで構成される「ブロック」として考える
    • プログラマの方には、keyとvalueに例えた方が分かりやすいかもしれない。
  • 1つの表組みは、垂直に並んだブロック(行ブロック)の集合である
  • 1つの行ブロックには、複数のブロック(列ブロック)を水平に並べることができる
  • ラベルとコンテンツを、S式を使って ("ラベル" "コンテンツ") の形で書く

これを、Lisp Tableと呼ぼう。

これだけでは分かりにくいので、例として、手元にある文書のうち表組み部分をLispで書きおこしてみた。 すると、これぐらいの複雑さであれば素直にS式で書けることが分かった。

見本

f:id:sky-y:20140218004925j:plain

Lisp Tableによる表現

;; Lisp Table

(("フリガナ" "")
 ("氏  名" "")
 ("所  属" "")
 ("職名・学年" ""))


(("申請者の区分\n(いずれかに○)" "教職員  大学院学生等  学部学生等  事務所職員  業  者  その他")
 (("学内内線番号" "") ("車  種\n(いずれかに○)" "四 輪  二 輪"))
 (("車両番号" "") ("申 請 期 間\n※ 和 暦" "    年    月 から\n    年    月末まで"))
 ("現 住 所" "〒    -    \n")
 (("自動車等を利用したときの自宅からの距離" "    km") ("公共交通機関を利用した場合の所要時間" "    時間   分"))
 (("申請理由" "") (("確認者氏名" "印")))
 ("通勤手当受給者欄" "□ 通勤届を自動車等(四輪車・原付を含む二輪車)で提出済み(予定)\n(該当する場合、□にチェックを入れてください)"))

(("入構・駐車整理料金" "")
 ("許可番号" "")
 ("駐車場所" ""))

将来について

まず、詳細な仕様については全然詰めてないので、決める必要がある。

この記法をHTMLのTableかLaTeXのtabular環境に直せたら、実用的になるかもしれない。 できれば、Pandocに流してWord文書とかExcel文書に直せるようになったら最高。

時間ができたら自分で実装したいが、誰か実装してくれるとうれしい。 その際、Haskellで実装してくれると、Pandocに組み込むときに楽なのでさらに嬉しい。