12345678910111213141516171819202122232425262728293031323334353637383940 |
- /* Collapse all nodes with group = X into a single node */
- BEG_G {
- node_t metaN;
- graph_t g = graph ("metagraph", "S");
- $tvtype = TV_ne;
- $O = g;
- }
- /* create only one node with given name/value */
- N[group == "X"] {
- if (!metaN) {
- metaN = node (g, $.name);
- }
- }
- /* duplicate all others */
- N[group != "X"] { node (g, $.name); }
- /* Create an edge only if at least one of the nodes
- * is not a collapsed node */
- E {
- node_t t;
- node_t h;
- if ($.tail.group == "X") {
- if ($.head.group == "X") return;
- t = metaN;
- h = node (g, $.head.name);
- }
- else if ($.head.group == "X") {
- t = node (g, $.tail.name);
- h = metaN;
- }
- else {
- t = node (g, $.tail.name);
- h = node (g, $.head.name);
- }
- edge (t, h, "");
- }
- /* set g to be output graph */
|