Импорт .dot файла в качестве подграфа

Есть ли - через функцию языка или через препроцессор - возможность включить внешние .dot файлы в качестве подграфов в другой?

Я работаю над относительно большим графиком, хотя поддерживается вручную, а не сгенерирован.

Было бы удобно определить некоторые

subgraph01.dot:

digraph subgraph01 {
 /* lot of nodes and edges */
}

subgraph02.dot:

digraph subgraph02 {
 /* lot of nodes and edges */
}

И затем сделайте что-то вроде graph.dot:

digraph BigGraph {
    import subgraph01;
    import subgraph02;
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph01.Node10 -> subgraph02.Node99
    /* etc. */
}

Есть ли способ?

Ответ 1

Мне сразу приходят два варианта. Можно было бы использовать макропроцессор, например. m4. С учетом BigGraph.m4:

digraph BigGraph {
    define(`digraph',`subgraph')
    include(`subgraph01.dot')
    include(`subgraph02.dot')
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

... running:

$ m4 BigGraph.m4 

... производит:

digraph BigGraph {
    subgraph subgraph01 {
 /* lot of nodes and edges */
}


    subgraph subgraph02 {
 /* lot of nodes and edges */
}


    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

Другим вариантом, который может позволить более сложный подход, является использование gvpr от GraphViz. Я попытался создать пример, чтобы сделать это с помощью gvpr, однако я был неудачным, поэтому я предлагаю только попробовать его, если требуется подход, основанный на графе, а не простой подход с использованием m4.