2013-02-02 18 views
14

私は有向グラフを印刷しようとしています。色や形などのさまざまなノード属性を変更し続けます。一度定義され、複数のノードに使用される変数を使用する方法はありますか?理想的には、次のようなものが欲しいです:DOT言語は変数/エイリアスをサポートしていますか?

digraph g { 

building_color = "red" 
land_color = "green" 

farm [ fillcolor=land_color] 
barn [ fillcolor=building_color] 
house [ fillcolor=building_color] 

} 

私は各ノードに行くことなく一度建物の色を変更できます。これは可能ですか?

答えて

14

あなたは重複を避けるためにデフォルト値を定義することができます。

digraph g{ 
    node[fillcolor=red]; 
    barn; 
    house; 
    ... 
    node[fillcolor=green]; 
    farm; 
    ... 

    edge[color=red]; 
    barn -> house; 
    edge[color=green]; 
    barn --> farm; 
    house --> farm; 
} 

変数がサポートされていません。 グラフパターン走査と処理言語 -


より複雑な問題を回避するには、gvprを使用することであろう。

gvprグラフを読み取り、出力し、グラフ、ノード、属性を追加および変更することができます。

たとえば、カスタム情報をcomment属性に格納し、この属性の内容に基づいてスクリプトを動作させることができます。

Thisおよびthis SO回答には、gvprスクリプトの例が含まれています。

8

最も簡単な解決策は、m4 - generic text-to-text preprocessorです。

SampleGraph.dot.m4

digraph g { 




    farm [label="Farm", style=filled, fillcolor = "green"] 
    barn [style=filled, fillcolor = "red"] 
    house [label="House", style=filled, fillcolor = "red"] 
} 
SampleGraph.dot結果として得られる

digraph g { 

    define(`building_style',`style=filled, fillcolor = "red"') 
    define(`land_style',`style=filled, fillcolor = "green"') 

    farm [label="Farm", land_style] 
    barn [building_style] 
    house [label="House", building_style] 
} 

実行m4 SampleGraph.dot.m4 > SampleGraph.dot

関連する問題