From 5e1e95852821e138caf20c3f8ee23e3941e42bbc Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 15 Nov 2016 00:16:06 -0500 Subject: better progressive enhancement of editor --- src/edit/enhancers.go | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/edit/enhancers.go (limited to 'src/edit/enhancers.go') diff --git a/src/edit/enhancers.go b/src/edit/enhancers.go new file mode 100644 index 0000000..b732ab2 --- /dev/null +++ b/src/edit/enhancers.go @@ -0,0 +1,79 @@ +package main + +import ( + "io" + "io/ioutil" + "os" + "mime/multipart" + "strings" + "path" + + "fmt" +) + +type enhancer struct { + pattern []string + head string + tail string +} + +func loadEnhancers(filename string) []enhancer { + file, err := os.Open(filename) + errcheck(err) + + reader := multipart.NewReader(file, "boundary") + + var s uint8 = 0 + var e enhancer + var ret []enhancer + for { + part, err := reader.NextPart() + if err == io.EOF { + return ret + } + errcheck(err) + + k := part.Header.Get("X-Thing") + v, err := ioutil.ReadAll(part) + errcheck(err) + + switch k { + case "Pattern": + patterns := strings.Split(string(v), ";") + for i := range patterns { + patterns[i] = strings.TrimSpace(patterns[i]) + } + s |= 1<<0 + e.pattern = patterns + case "Head": + s |= 1<<1 + e.head = string(v) + case "Tail": + s |= 1<<2 + e.tail = string(v) + default: + panic("unknown X-Thing: "+k) + } + if s == 1<<0 | 1<<1 | 1<<2 { + ret = append(ret, e) + s = 0 + } + } +} + +var enhancers = loadEnhancers("enhancers.txt") + +func getEnhancer(ctype string) (head, tail string) { + fmt.Fprintf(os.Stderr, "enhancers = %q\n", enhancers) + for _, enhancer := range enhancers { + for _, pattern := range enhancer.pattern { + matched, err := path.Match(pattern, ctype) + errcheck(err) + fmt.Fprintf(os.Stderr, "Match(%q, %q) => %q\n", pattern, ctype, matched) + if matched { + return enhancer.head, enhancer.tail + } + } + } + return "", "" +} -- cgit v1.2.3