Импорт файла.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. */
}

... Бег:

$ 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,

Другие вопросы по тегам