Skip to content

Instantly share code, notes, and snippets.

View steveroush's full-sized avatar

steveroush

  • nope
  • colorado, usa
View GitHub Profile
@steveroush
steveroush / swimlane.gvpr
Last active July 17, 2024 21:38
a GVPR program that adds a swimlane feature to Graphviz (dot)
/*************************************************************************
swimlanes
- for more info on swim lanes: https://en.wikipedia.org/wiki/Swim_lane
- new attributes, all at the parent cluster-level:
- swimlanePool=true/false/[0-9]+ - turns on swimlane algorithm
- if having nested swimlanes is desirable, true/false is
insufficient. Instead, use swimlane=someuniquename
- swimlaneequalSize=true/false all lanes given same width, or width determined "naturally" by dot
@steveroush
steveroush / swapTailHead.gvpr
Created May 31, 2024 19:32
Graphviz - a program to swap head & tail of edges
/****************************************************************
swapHeadTail.gvpr - swap tail & head of edge(s)
(only seems to have "real" effect when using dot)
replaces edges with tail & head swapped
and (unless using -a0 option) "fixes" all the attribures that are associated with head or tail
to swap ALL edges, either add
- edge [swap=1] to your myFile.gv, then
@steveroush
steveroush / gvlint.gvpr
Last active June 1, 2024 00:44
gvlint - a "lint" program for Graphviz files
/********************************************************************
gvlint.gvpr - lint program for Graphviz input
USAGE:
gvpr -f gvlint.gvpr # just produces a "report" (assumes dot)
gvpr -cf gvlint.gvpr # report & reformatted input
gvpr -a neato -f gvlint.gvpr # report assuming neato attributes
gvpr -a S -f gvlint.gvpr myfile.gv # skip "pos not defined ..."
gvpr -a "neato A" -f gvlint.gvpr # report assuming neato attributes
# and show all attributes used
@steveroush
steveroush / gvstats.gvpr
Created February 17, 2024 02:10
A GVPR program that reports information about Graphviz files
BEGIN{
int clusterCnt, cHtmlCnt;
graph_t aGraph;
string printBuf;
//////////////// help /////////////////////////////////////////////
string help="
gvstats.gvpr :
a GVPR program that provides information about Graphviz input files
- the file name
- the layout engine (if set)
@steveroush
steveroush / fixOrtho.gvpr
Last active June 1, 2025 20:47
Graphviz: fixOrtho - a work-around to allow ortho edges to connect to ports
/*****************************************************
Name: fixOrtho.gvpr
As of Date: 2024-08-25 20:42:37
Description: a gvpr program that attempts to allow ortho edges connectiongports on nodes
(currently the splines=ortho code does NOT correctlt draw edges to/from ports)
Usage: dot -Gsplines=true myFile.gv |gvpr -cf fixOrtho.gvpr | neato -n2 -Gsplines=ortho -T...
@steveroush
steveroush / alterSimpleEdge.gvpr
Last active October 7, 2024 16:13
Graphviz post-processor to customize edges
/***********************************************************************
replace edge spline
"edgeType" (required):
- "curve" - "regular", symmetric, curve
- "straight" - two points define a line
- "ortho2" (2 connected sides of a rectangle == one horizontal segment and one vertical segment ) (newer feature)
- "ortho3" (3 sides of a rectangle) (was called "ortho")
"edgeOffset" (optional):
- offset from straight line (does not apply to "straight" or "ortho2")
- default: 50% of port-to-port distance
@steveroush
steveroush / socioGram.d_archive.sh
Created July 21, 2023 01:50
a radial sociogram shell archive - 3 sociogram creators
#!/bin/sh
cat <<QUitquIT
# This is a shell archive.
#
# to execute this file, type: sh socioGram.d_archive.sh
#
# On Linux/UNIX/MacOS(?) systems it is an executable program that will create
# a subdirectory (named socioGram.d) in the currect directory and then
# install multiple (text) files in that directory.
# This shell archive and all contents are humanly readable - no binary files.
@steveroush
steveroush / addRingLabels.gvpr
Created July 19, 2023 20:19
addRingLabels.gvpr - a companion to twopiCircles.gvpr
/**********************************************************
addRingLabels.gvpr -
a very specialized gvpr program that adds labels to the output of
twopiCircles.gvpr
**********************************************************/
N[name=="____Circle____*"&&ringNo>0]{
$.xlabel=(string)(1 + (int)$.rank);
$.xlp=(string)($.X+(72*($.width/2))) +"," +(string)$.Y;
}
@steveroush
steveroush / setTwopiRanks.gvpr
Last active July 19, 2023 20:07
setTwopiRanks.gvpr - A Graphviz / gvpr script to assign ranks to nodes for the twopi program
/*************************************************************************
setTwopiRanks: explicitly set ranks for nodes in twopi graphs
Though the twopi does not use the term rank (except for the ranksep attribute),
it essentially does (radial) ranking from the root node.
However, while *dot* ranking is (by default) based on longest distance,
twopi ranking is based on soortest (spanning tree) distance.
setTwopiRanks accomplishes the goal in two ways:
- nodes that would have a distance greater than the desired rank will cause invisible nodes and edges added to the graph to "pull" the node in to the desired rank.
- nodes that would have a distance shorter than the desired rank will cause the short edges to be ignored in the rank calculation by appling weight=0 to those edges (see https://graphviz.org/docs/attrs/weight/)
@steveroush
steveroush / twopiCircles.gvpr
Last active July 19, 2023 19:59
A Graphviz gvpr program to add concentric circles to a twopi graph
/*************************************************************************
twopiCircles: add circles to twopi graph
similar to the "addrings" gvpr program that comes with Graphviz source
New Attributes, only used by twopiCircles.gvpr:
- maxRank - set a maximum number of concentric circles (ranks).
Ranks counted from the center, Root is not counted as a rank
- noOffset - if true, draw circles through the center of nodes
otherwise, draw circles between the ranks
(i.e half-way from one rank to the next)