From 6cb2c11fd7585038badbf9b305958c1d00317a5b Mon Sep 17 00:00:00 2001 From: gobwas Date: Mon, 22 Feb 2016 23:12:29 +0300 Subject: [PATCH] debug --- cmd/globdraw/main.go | 66 +++++++------------------------------------- 1 file changed, 10 insertions(+), 56 deletions(-) diff --git a/cmd/globdraw/main.go b/cmd/globdraw/main.go index 8ba91f1..585880d 100644 --- a/cmd/globdraw/main.go +++ b/cmd/globdraw/main.go @@ -1,64 +1,16 @@ package main import ( - "bytes" "flag" "fmt" "github.com/gobwas/glob" "github.com/gobwas/glob/match" - "math/rand" + "github.com/gobwas/glob/match/debug" "os" "strings" "unicode/utf8" ) -func draw(pattern string, m match.Matcher) string { - return fmt.Sprintf(`digraph G {graph[label="%s"];%s}`, pattern, graphviz(m, fmt.Sprintf("%x", rand.Int63()))) -} - -func graphviz(m match.Matcher, id string) string { - buf := &bytes.Buffer{} - - switch matcher := m.(type) { - case match.BTree: - fmt.Fprintf(buf, `"%s"[label="%s"];`, id, matcher.Value.String()) - for _, m := range []match.Matcher{matcher.Left, matcher.Right} { - switch n := m.(type) { - case nil: - rnd := rand.Int63() - fmt.Fprintf(buf, `"%x"[label=""];`, rnd) - fmt.Fprintf(buf, `"%s"->"%x";`, id, rnd) - - default: - sub := fmt.Sprintf("%x", rand.Int63()) - fmt.Fprintf(buf, `"%s"->"%s";`, id, sub) - fmt.Fprintf(buf, graphviz(n, sub)) - } - } - - case match.AnyOf: - fmt.Fprintf(buf, `"%s"[label="AnyOf"];`, id) - for _, m := range matcher.Matchers { - rnd := rand.Int63() - fmt.Fprintf(buf, graphviz(m, fmt.Sprintf("%x", rnd))) - fmt.Fprintf(buf, `"%s"->"%x";`, id, rnd) - } - - case match.EveryOf: - fmt.Fprintf(buf, `"%s"[label="EveryOf"];`, id) - for _, m := range matcher.Matchers { - rnd := rand.Int63() - fmt.Fprintf(buf, graphviz(m, fmt.Sprintf("%x", rnd))) - fmt.Fprintf(buf, `"%s"->"%x";`, id, rnd) - } - - default: - fmt.Fprintf(buf, `"%s"[label="%s"];`, id, m.String()) - } - - return buf.String() -} - func main() { pattern := flag.String("p", "", "pattern to draw") sep := flag.String("s", "", "comma separated list of separators characters") @@ -70,12 +22,14 @@ func main() { } var separators []rune - for _, c := range strings.Split(*sep, ",") { - if r, w := utf8.DecodeRuneInString(c); len(c) > w { - fmt.Println("only single charactered separators are allowed") - os.Exit(1) - } else { - separators = append(separators, r) + if len(*sep) > 0 { + for _, c := range strings.Split(*sep, ",") { + if r, w := utf8.DecodeRuneInString(c); len(c) > w { + fmt.Println("only single charactered separators are allowed") + os.Exit(1) + } else { + separators = append(separators, r) + } } } @@ -86,5 +40,5 @@ func main() { } matcher := glob.(match.Matcher) - fmt.Fprint(os.Stdout, draw(*pattern, matcher)) + fmt.Fprint(os.Stdout, debug.Graphviz(*pattern, matcher)) }