blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

下駄配列の派生図を作成し直してみた

S式をdot形式に変換し、graphvizで画像を生成する。以前の試みと比較すれば*1、今回は見栄えを改善できたと言って良いだろう。

以下のS式をまず入力する。

(defparameter *subgraphs* '(
                            (
                             (:style filled)
                             (:fontname "APJapanesefont")
                             (:label blechmusik)
                             ((node) (:style filled)
                              (:fontname "APJapanesefont"))
                             (:color blue)
                             ((nuri kuro kiri))
                             )
                            (
                             (:style filled)
                             (:fontname  "APJapanesefont")
                             (:label kouy)
                             ((node) (:style filled)
                              (:fontname "APJapanesefont"))
                             (:color red)
                             ((geta new))
                             ((geta jis))
                             )
                            (
                             (:style filled)
                             (:fontname  "APJapanesefont")
                             (:label mogy)
                             ((node) (:style filled)
                              (:fontname "APJapanesefont"))
                             (:color brown)
                             ((hiyori))
                             )
                            ))

(defparameter *options* '(
                          (graph
                           (:label "下駄配列の派生図")
                           (:fontname  "APJapanesefont")
                           (:labelloc t)
                           (:rankdir "LR")
                           )
                          (node
                           (:fontname  "APJapanesefont")
                           )
                          ((kuro hiyori))
                          ))

(defparameter *nodes* '(
                        (geta ("下駄配列"))
                        (nuri ("塗り下駄配列"))
                        (jis ("新JIS下駄配列"))
                        (hiyori ("日和下駄配列"))
                        (new ("新下駄配列"))
                        (kuro ("黒塗り下駄配列"))
                        (kiri ("黒塗り桐下駄配列"))
                        ))

(defparameter *edges* '(
                        (geta
                         ;; (new)
                         (nuri)
                         ;; (jis)
                         (hiyori)
                         )
                        (nuri
                         ;; (kuro)
                         )
                        (kuro
                         (hiyori)
                         ;; (kiri)
                         )
                        (kiri
                         (kuro)
                         )
                        ))

これをもとにdot形式の文字列を出力する。

(digraph->dot *nodes* *edges* *options* *subgraphs*)

これによって出力されるdot形式の内容はつぎのとおりである。

digraph G {
    subgraph cluster_0 {
        fontname="APJapanesefont";
        label=blechmusik;
        node [style=filled, fontname="APJapanesefont"];
        color=blue;
        nuri -> kuro -> kiri;
    }
    subgraph cluster_1 {
        fontname="APJapanesefont";
        label=kouy;
        node [style=filled, fontname="APJapanesefont"];
        color=red;
        geta -> new;
        geta -> jis;
    }
    subgraph cluster_2 {
        fontname="APJapanesefont";
        label=mogy;
        node [style=filled, fontname="APJapanesefont"];
        color=brown;
        hiyori;
    }
    graph [label="下駄配列の派生図", fontname="APJapanesefont", labelloc=t, rankdir="LR"];
    node [fontname="APJapanesefont"];
    kuro -> hiyori [label=""];
    geta [label="下駄配列"];
    nuri [label="塗り下駄配列"];
    jis [label="新JIS下駄配列"];
    hiyori [label="日和下駄配列"];
    new [label="新下駄配列"];
    kuro [label="黒塗り下駄配列"];
    kiri [label="黒塗り桐下駄配列"];
    geta -> nuri [label=""];
    geta -> hiyori [label=""];
    kiri -> kuro [label=""];
}

S式をdot形式に変換する処理のソースはsoftware:sbcl:example:graphvizを参照のこと。