Skip to content

Commit

Permalink
Support filled beziercurve rendering (#92)
Browse files Browse the repository at this point in the history
* support filled beziercurve rendering
* fix testdata
* fix threshold
  • Loading branch information
goccy authored Oct 18, 2024
1 parent 698a12c commit e4e4dd3
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 14 deletions.
2 changes: 1 addition & 1 deletion alias.go
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ const (
DiagonalsNodeStyle = cgraph.DiagonalsNodeStyle
FilledNodeStyle = cgraph.FilledNodeStyle
StripedNodeStyle = cgraph.StripedNodeStyle
WedgesNodeStyle = cgraph.WedgesNodeStyle
WedgedNodeStyle = cgraph.WedgedNodeStyle
)

const (
Expand Down
2 changes: 1 addition & 1 deletion cgraph/attribute.go
Original file line number Diff line number Diff line change
Expand Up @@ -2523,7 +2523,7 @@ const (
DiagonalsNodeStyle NodeStyle = "diagonals"
FilledNodeStyle NodeStyle = "filled"
StripedNodeStyle NodeStyle = "striped"
WedgesNodeStyle NodeStyle = "wedged"
WedgedNodeStyle NodeStyle = "wedged"
)

type EdgeStyle string
Expand Down
8 changes: 4 additions & 4 deletions compatible_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var (
)

const (
imageThreshold = 30
imageThreshold = 40
)

func generateTestData() error {
Expand Down Expand Up @@ -73,9 +73,9 @@ func generateTestData() error {

func TestGraphviz_Compatible(t *testing.T) {
// generate testdata/imagehash.json
// if err := generateTestData(); err != nil {
// t.Fatal(err)
// }
//if err := generateTestData(); err != nil {
// t.Fatal(err)
//}
var pathToHashDump map[string]string
file, err := os.ReadFile(imageHashJSON)
if err != nil {
Expand Down
17 changes: 14 additions & 3 deletions gvc/image_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,18 @@ func (r *ImageRenderer) Polyline(ctx context.Context, job *Job, a []*PointFloat)
return nil
}

func (r *ImageRenderer) BezierCurve(ctx context.Context, job *Job, a []*PointFloat) error {
func (r *ImageRenderer) BezierCurve(ctx context.Context, job *Job, a []*PointFloat, filled bool) error {
r.ctx.Push()
defer r.ctx.Pop()
r.setPenStyle(job)
rgba := job.Object().PenColor().RGBAUint()
var c *Color
if filled {
c = job.Object().FillColor()
r.ctx.FillPreserve()
} else {
c = job.Object().PenColor()
}
rgba := c.RGBAUint()
r.ctx.SetRGB(float64(rgba[0])/255.0, float64(rgba[1])/255.0, float64(rgba[2])/255.0)
r.ctx.MoveTo(r.toX(job, a[0].X()), r.toY(job, -a[0].Y()))
for i := 1; i < len(a); i += 3 {
Expand All @@ -212,7 +219,11 @@ func (r *ImageRenderer) BezierCurve(ctx context.Context, job *Job, a []*PointFlo
r.toY(job, -a[i+2].Y()),
)
}
r.ctx.Stroke()
if filled {
r.ctx.Fill()
} else {
r.ctx.Stroke()
}
return nil
}

Expand Down
16 changes: 12 additions & 4 deletions gvc/render_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type RenderEngine interface {
ResolveColor(ctx context.Context, job *Job, color *Color) error
Ellipse(ctx context.Context, job *Job, points []*PointFloat, filled bool) error
Polygon(ctx context.Context, job *Job, points []*PointFloat, filled bool) error
BezierCurve(ctx context.Context, job *Job, points []*PointFloat) error
BezierCurve(ctx context.Context, job *Job, points []*PointFloat, filled bool) error
Polyline(ctx context.Context, job *Job, points []*PointFloat) error
Comment(ctx context.Context, job *Job, comment string) error
LibraryShape(ctx context.Context, job *Job, s string, points []*PointFloat, filled bool) error
Expand Down Expand Up @@ -154,7 +154,7 @@ func (e *DefaultRenderEngine) Polygon(_ context.Context, _ *Job, _ []*PointFloat
return nil
}

func (e *DefaultRenderEngine) BezierCurve(_ context.Context, _ *Job, _ []*PointFloat) error {
func (e *DefaultRenderEngine) BezierCurve(_ context.Context, _ *Job, _ []*PointFloat, _ bool) error {
return nil
}

Expand Down Expand Up @@ -471,12 +471,12 @@ func newRenderEngine(ctx context.Context, engine RenderEngine) (*wasm.RenderEngi
}, ptr)); err != nil {
return nil, err
}
if err := e.SetBeziercurve(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, _ uint32, _ int) error {
if err := e.SetBeziercurve(ctx, wasm.CreateCallbackFunc(func(ctx context.Context, job *wasm.Job, p []*wasm.PointFloat, _ uint32, filled int) error {
points := make([]*PointFloat, len(p))
for i := range p {
points[i] = toPointFloat(p[i])
}
return engine.BezierCurve(ctx, toJob(job), points)
return engine.BezierCurve(ctx, toJob(job), points, filled > 0)
}, ptr)); err != nil {
return nil, err
}
Expand Down Expand Up @@ -939,6 +939,14 @@ func (s *ObjectState) SetFillColor(v *Color) {
s.wasm.SetFillcolor(v.getWasm())
}

func (s *ObjectState) StopColor() *Color {
return toColor(s.wasm.GetStopcolor())
}

func (s *ObjectState) RawStyle() []string {
return s.wasm.GetRawstyle()
}

type Color struct {
wasm *wasm.Color
}
Expand Down
2 changes: 1 addition & 1 deletion testdata/imagehash.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"testdata/directed/KW91.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4ByYqKSwkJgcBBgA=","testdata/directed/Latin1.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DnHIDyvgcQ4BBgA=","testdata/directed/NaN.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAAX/ggIGAA==","testdata/directed/abstract.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4EhZPHUnJTQgBBgA=","testdata/directed/alf.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4OBgWNxELBwYBBgA=","testdata/directed/arrows.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4clJyUlJyUlIBBgA=","testdata/directed/awilliams.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4AgIADBg4XFwBBgA=","testdata/directed/biological.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH42NlZOSkpEhIBBgA=","testdata/directed/clust.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4OiYnFxZXVVUBBgA=","testdata/directed/clust1.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4B4uXlaU3lZcBBgA=","testdata/directed/clust2.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4Hj6jqqqqKgMBBgA=","testdata/directed/clust3.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DjNxcTFhMzMBBgA=","testdata/directed/clust4.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4D1Nzc3FzUw8BBgA=","testdata/directed/clust5.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4BAcnJxNTCQMBBgA=","testdata/directed/crazy.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DyEx0RsbQw4BBgA=","testdata/directed/ctext.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4bGxsVhYXVRUBBgA=","testdata/directed/dfa.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4Dg4OMjIODg4BBgA=","testdata/directed/fig6.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4ShsXGRuZuW4BBgA=","testdata/directed/fsm.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4GBgYHgTDWxkBBgA=","testdata/directed/grammar.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4GxulJyeVAQIBBgA=","testdata/directed/hashtable.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4HBAYnJgQGJwBBgA=","testdata/directed/honda-tokoro.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4JzPUUklbe2ABBgA=","testdata/directed/japanese.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4HA9JLQcnJw8BBgA=","testdata/directed/jcctree.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4GCwmZ2dtbWUBBgA=","testdata/directed/jsort.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4AwsNVTM3JVEBBgA=","testdata/directed/ldbxtried.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4HxYbLw8HH44BBgA=","testdata/directed/longflat.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4AwQBAWExxTMBBgA=","testdata/directed/mike.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4ASE1xmdmLjwBBgA=","testdata/directed/nhg.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4ExM4bi54HwcBBgA=","testdata/directed/oldarrows.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4Ux8PDw8PB1EBBgA=","testdata/directed/pgram.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4zGwpmqvg4OABBgA=","testdata/directed/pm2way.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4GBgeJgwNBgYBBgA=","testdata/directed/pmpipe.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4BgcLGw8NS08BBgA=","testdata/directed/polypoly.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4LiwsJm5MECsBBgA=","testdata/directed/proc3d.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAAX/ggIGAA==","testdata/directed/psfonttest.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4FlXV1RUVVVUBBgA=","testdata/directed/record2.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4KhgeBpoOmh4BBgA=","testdata/directed/records.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA7/ggH5CUtlfA5ODgEGAA==","testdata/directed/rowe.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4BpI0ZkWmtDEBBgA=","testdata/directed/russian.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4U1tTUtJSEhIBBgA=","testdata/directed/sdh.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4i5uamLSkxEoBBgA=","testdata/directed/shells.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4x42T5aStj80BBgA=","testdata/directed/states.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4BwcFGREozugBBgA=","testdata/directed/structs.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4HCwsbMRGSgABBgA=","testdata/directed/switch.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4O3UbUWslG3MBBgA=","testdata/directed/table.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DAwOJmbn5sYBBgA=","testdata/directed/train11.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA7/ggH5AQMHCB7kgwEGAA==","testdata/directed/trapeziumlr.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4YHExDw8xcWABBgA=","testdata/directed/tree.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4BgcTEzEyMLgBBgA=","testdata/directed/triedds.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4OCZkLgYWFhYBBgA=","testdata/directed/try.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4jY1LTYwPLSsBBgA=","testdata/directed/unix.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DhszFdHbWwsBBgA=","testdata/directed/unix2.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4DhsxldNbSwsBBgA=","testdata/directed/viewfile.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4HLb2c8fJyRkBBgA=","testdata/directed/world.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4MjUXHYWVNScBBgA=","testdata/undirected/ER.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4AQMDBxcHFRcBBgA=","testdata/undirected/Heawood.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4CYiUU1ZWFgcBBgA=","testdata/undirected/Petersen.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4TG2rKjrKxkEBBgA=","testdata/undirected/ngk10_4.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4gCosKiI4WCABBgA=","testdata/undirected/process.gv":"If+BAwEBAUQB/4IAAQIBBEhhc2gBBgABBEtpbmQBBAAAAA//ggH4PWdLQgIDAwMBBgA="}
{"testdata/directed/KW91.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgHJiooLCYmBwEGAA==","testdata/directed/Latin1.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgOccAPK9BxDgEGAA==","testdata/directed/NaN.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgBARFlIZiYGQEGAA==","testdata/directed/abstract.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgSFksZSUlNDAEGAA==","testdata/directed/alf.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfg4GBY2GwsHBgEGAA==","testdata/directed/arrows.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfhSUlJSUnFSUgEGAA==","testdata/directed/awilliams.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgCAgIMCBhcXAEGAA==","testdata/directed/biological.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfjY2dkxKSkSEgEGAA==","testdata/directed/clust.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfg6JicXFldVVQEGAA==","testdata/directed/clust1.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgGipaUpDSWlAEGAA==","testdata/directed/clust2.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgeHqOqqqoqAwEGAA==","testdata/directed/clust3.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgOMnBwMmAyMgEGAA==","testdata/directed/clust4.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgOU3NRcXNTDgEGAA==","testdata/directed/clust5.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgGBycnU1ELAwEGAA==","testdata/directed/crazy.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgPITHRGxtDDgEGAA==","testdata/directed/ctext.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfh8bGx2FhZVFQEGAA==","testdata/directed/dfa.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgPDw8zMw4ODgEGAA==","testdata/directed/fig6.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfhKGxcdG5m5bgEGAA==","testdata/directed/fsm.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgYGBoeBMNbGQEGAA==","testdata/directed/grammar.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgaGiQmJpQAAgEGAA==","testdata/directed/hashtable.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgcERmcmVEdnAEGAA==","testdata/directed/honda-tokoro.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgnM9RCSVt5QAEGAA==","testdata/directed/japanese.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgcDkhMBiYmDgEGAA==","testdata/directed/jcctree.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgYLCZmZmxkZAEGAA==","testdata/directed/jsort.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgDCw1RMzclUQEGAA==","testdata/directed/ldbxtried.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgeFhsvDycfjgEGAA==","testdata/directed/longflat.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgDBAEBYTHEMQEGAA==","testdata/directed/mike.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgBITVGZ2YuPAEGAA==","testdata/directed/nhg.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgTEzhuLngfBwEGAA==","testdata/directed/oldarrows.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfhSHg4ODg4GUAEGAA==","testdata/directed/pgram.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfjMbCkai+jg4AEGAA==","testdata/directed/pm2way.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgYGB4mDg0GBgEGAA==","testdata/directed/pmpipe.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgGBgIaDgRSRgEGAA==","testdata/directed/polypoly.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfguLCwubkwQCwEGAA==","testdata/directed/proc3d.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgICRkZCRkZCQEGAA==","testdata/directed/psfonttest.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfiWlJSUlJSUhAEGAA==","testdata/directed/record2.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgqCB4mmiq6HgEGAA==","testdata/directed/records.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAADv+AAfkJW2l8Hg4eAQYA","testdata/directed/rowe.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgGkzRnxaa0MQEGAA==","testdata/directed/russian.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfhTU1NS0lISEgEGAA==","testdata/directed/sdh.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfiLm5qYtKTESgEGAA==","testdata/directed/shells.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfjPjZPnpK2PzQEGAA==","testdata/directed/states.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgDBwUZESne4AEGAA==","testdata/directed/structs.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgcLCxMxkZKAAEGAA==","testdata/directed/switch.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfg5JRtRa2dLdQEGAA==","testdata/directed/table.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgMDAcn5+fHxgEGAA==","testdata/directed/train11.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAADv+AAfkBAwcIHmSHAQYA","testdata/directed/trapeziumlr.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfjgcTMPDzNxwAEGAA==","testdata/directed/tree.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgGBhISMHI4uAEGAA==","testdata/directed/triedds.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfg4JGQuBhYWFgEGAA==","testdata/directed/try.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfiNqUtNjA8tKwEGAA==","testdata/directed/unix.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgPGzEV0dtbAwEGAA==","testdata/directed/unix2.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgPCzHR0xtLCwEGAA==","testdata/directed/viewfile.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgc9vZzx8nJGAEGAA==","testdata/directed/world.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgyNRUdhZU1JwEGAA==","testdata/undirected/ER.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgCAwIGFAYUFgEGAA==","testdata/undirected/Heawood.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfgIiJRSVlYWFgEGAA==","testdata/undirected/Petersen.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfhObSsqKs7GQQEGAA==","testdata/undirected/ngk10_4.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfiBKi0qIzlYAQEGAA==","testdata/undirected/process.gv":"IH8DAQEBRAH/gAABAgEESGFzaAEGAAEES2luZAEEAAAAD/+AAfg9Z0tCAwMDAwEGAA=="}

0 comments on commit e4e4dd3

Please sign in to comment.