add argument for setting weight attribute
This commit is contained in:
parent
39dd8d901e
commit
fd26e49734
|
@ -28,17 +28,18 @@ import (
|
||||||
// DOTDirectedGraph is a graph to unmarshal DOT graphs.
|
// DOTDirectedGraph is a graph to unmarshal DOT graphs.
|
||||||
type DOTDirectedGraph struct {
|
type DOTDirectedGraph struct {
|
||||||
*igraph.DirectedGraph
|
*igraph.DirectedGraph
|
||||||
|
WeightAttribute string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDOTDirectedGraph returns a graph with no nodes or edges.
|
// NewDOTDirectedGraph returns a graph with no nodes or edges.
|
||||||
func NewDOTDirectedGraph() *DOTDirectedGraph {
|
func NewDOTDirectedGraph(weightAttr string) *DOTDirectedGraph {
|
||||||
return &DOTDirectedGraph{DirectedGraph: igraph.NewDirectedGraph()}
|
return &DOTDirectedGraph{DirectedGraph: igraph.NewDirectedGraph(), WeightAttribute: weightAttr}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLine returns a DOT-aware weighted line.
|
// NewLine returns a DOT-aware weighted line.
|
||||||
func (g *DOTDirectedGraph) NewLine(from, to graph.Node) graph.Line {
|
func (g *DOTDirectedGraph) NewLine(from, to graph.Node) graph.Line {
|
||||||
e := g.DirectedGraph.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine)
|
e := g.DirectedGraph.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine)
|
||||||
return &weightedLine{WeightedLine: e}
|
return &weightedLine{WeightedLine: e, weightAttribute: g.WeightAttribute}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNode returns a DOT-aware Node.
|
// NewNode returns a DOT-aware Node.
|
||||||
|
|
|
@ -46,6 +46,7 @@ func (n *Node) DOTID() string {
|
||||||
// multi.WeightedLine, it allows for self-loops.
|
// multi.WeightedLine, it allows for self-loops.
|
||||||
type weightedLine struct {
|
type weightedLine struct {
|
||||||
multi.WeightedLine
|
multi.WeightedLine
|
||||||
|
weightAttribute string
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetAttribute enables storing the weight read from a DOT file. It errors if
|
// SetAttribute enables storing the weight read from a DOT file. It errors if
|
||||||
|
@ -54,7 +55,7 @@ func (e *weightedLine) SetAttribute(attr encoding.Attribute) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
switch attr.Key {
|
switch attr.Key {
|
||||||
case "len":
|
case e.weightAttribute:
|
||||||
e.W, err = strconv.ParseFloat(attr.Value, 64)
|
e.W, err = strconv.ParseFloat(attr.Value, 64)
|
||||||
default:
|
default:
|
||||||
err = errors.New("unknown key:" + attr.Key)
|
err = errors.New("unknown key:" + attr.Key)
|
||||||
|
|
|
@ -35,6 +35,8 @@ var pythonFmt bool
|
||||||
|
|
||||||
var oneline bool
|
var oneline bool
|
||||||
|
|
||||||
|
var weightAttr string
|
||||||
|
|
||||||
var nodeOrder []string
|
var nodeOrder []string
|
||||||
|
|
||||||
// rootCmd represents the base command when called without any subcommands
|
// rootCmd represents the base command when called without any subcommands
|
||||||
|
@ -58,7 +60,7 @@ func parse(cmd *cobra.Command, args []string) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
graph := idot.NewDOTDirectedGraph()
|
graph := idot.NewDOTDirectedGraph(weightAttr)
|
||||||
err = dot.UnmarshalMulti(data, graph)
|
err = dot.UnmarshalMulti(data, graph)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -148,5 +150,7 @@ func init() {
|
||||||
|
|
||||||
rootCmd.Flags().BoolVar(&oneline, "oneline", false, "output on one line")
|
rootCmd.Flags().BoolVar(&oneline, "oneline", false, "output on one line")
|
||||||
|
|
||||||
|
rootCmd.Flags().StringVar(&weightAttr, "weight-attr", "len", "edge attribute to use as weight")
|
||||||
|
|
||||||
rootCmd.Flags().StringSliceVarP(&nodeOrder, "order", "o", nil, "order of nodes in rows/columns of output")
|
rootCmd.Flags().StringSliceVarP(&nodeOrder, "order", "o", nil, "order of nodes in rows/columns of output")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue