From 8663014bbe9d7d5fdead5167bbcdf79c2545f880 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Sat, 28 Dec 2019 18:53:51 -0500 Subject: [PATCH] Add support for syntax headers and update tcell --- .gitignore | 1 + Makefile | 5 +++ go.mod | 2 +- go.sum | 2 + internal/config/rtfiles.go | 12 +++--- runtime/syntax/make_headers.go | 74 ++++++++++++++++++++++++++++++++++ 6 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 runtime/syntax/make_headers.go diff --git a/.gitignore b/.gitignore index cf96d12a..32302828 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ tools/build-version tools/build-date tools/info-plist tools/bindata +*.hdr diff --git a/Makefile b/Makefile index d59695c5..ac1fb45c 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,9 @@ build: build-dbg: go build -mod=readonly -ldflags "-s -w $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro +build-mod: + go build -ldflags "-s -w $(ADDITIONAL_GO_LINKER_FLAGS)" ./cmd/micro + # Builds micro after building the runtime and checking dependencies build-all: runtime build @@ -39,6 +42,7 @@ install-quick: # Builds the runtime runtime: git submodule update --init + go run runtime/syntax/make_headers.go runtime/syntax go build -o tools/bindata ./tools/go-bindata tools/bindata -pkg config -nomemcopy -nometadata -o runtime.go runtime/... mv runtime.go internal/config @@ -49,3 +53,4 @@ test: clean: rm -f micro + rm -f runtime/syntax/*.hdr diff --git a/go.mod b/go.mod index c55b02b1..8d1b4fa9 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/zyedidia/glob v0.0.0-20170209203856-dd4023a66dc3 github.com/zyedidia/poller v0.0.0-20170616160828-ab09682913b7 // indirect github.com/zyedidia/pty v2.0.0+incompatible // indirect - github.com/zyedidia/tcell v0.0.0-20191227234059-2c574ec1b972 + github.com/zyedidia/tcell v0.0.0-20191228235154-5b9bbc0d56c7 github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415 golang.org/x/text v0.3.2 gopkg.in/yaml.v2 v2.2.7 diff --git a/go.sum b/go.sum index d0bdad2a..f8a69fce 100644 --- a/go.sum +++ b/go.sum @@ -48,6 +48,8 @@ github.com/zyedidia/tcell v0.0.0-20191219170756-59b50b23fa9b h1:cryFENlMxJJrkimV github.com/zyedidia/tcell v0.0.0-20191219170756-59b50b23fa9b/go.mod h1:yXgdp23+aW8OMENYVBvpKoeiBtjaVWJ9HhpPDu6LBfM= github.com/zyedidia/tcell v0.0.0-20191227234059-2c574ec1b972 h1:tqsPH3tvIF9LQMWQODln09mJEV1ZlwC1qc5dTplj+eI= github.com/zyedidia/tcell v0.0.0-20191227234059-2c574ec1b972/go.mod h1:yXgdp23+aW8OMENYVBvpKoeiBtjaVWJ9HhpPDu6LBfM= +github.com/zyedidia/tcell v0.0.0-20191228235154-5b9bbc0d56c7 h1:Qw5255OIirY741L/Kt5KLitfzfhpk29x+A193zByTS0= +github.com/zyedidia/tcell v0.0.0-20191228235154-5b9bbc0d56c7/go.mod h1:yXgdp23+aW8OMENYVBvpKoeiBtjaVWJ9HhpPDu6LBfM= github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415 h1:752dTQ5OatJ9M5ULK2+9lor+nzyZz+LYDo3WGngg3Rc= github.com/zyedidia/terminal v0.0.0-20180726154117-533c623e2415/go.mod h1:8leT8G0Cm8NoJHdrrKHyR9MirWoF4YW7pZh06B6H+1E= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/internal/config/rtfiles.go b/internal/config/rtfiles.go index 6c1d6103..ab55eeed 100644 --- a/internal/config/rtfiles.go +++ b/internal/config/rtfiles.go @@ -12,11 +12,12 @@ import ( ) const ( - RTColorscheme = 0 - RTSyntax = 1 - RTHelp = 2 - RTPlugin = 3 - NumTypes = 4 // How many filetypes are there + RTColorscheme = 0 + RTSyntax = 1 + RTHelp = 2 + RTPlugin = 3 + RTSyntaxHeader = 4 + NumTypes = 5 // How many filetypes are there ) type RTFiletype byte @@ -135,6 +136,7 @@ func InitRuntimeFiles() { add(RTColorscheme, "colorschemes", "*.micro") add(RTSyntax, "syntax", "*.yaml") + add(RTSyntaxHeader, "header", "*.hdr") add(RTHelp, "help", "*.md") initlua := filepath.Join(ConfigDir, "init.lua") diff --git a/runtime/syntax/make_headers.go b/runtime/syntax/make_headers.go new file mode 100644 index 00000000..4717a32b --- /dev/null +++ b/runtime/syntax/make_headers.go @@ -0,0 +1,74 @@ +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "strings" + "time" + + yaml "gopkg.in/yaml.v2" +) + +type HeaderYaml struct { + FileType string `yaml:"filetype"` + Detect struct { + FNameRgx string `yaml:"filename"` + HeaderRgx string `yaml:"header"` + } `yaml:"detect"` +} + +type Header struct { + FileType string + FNameRgx string + HeaderRgx string +} + +func main() { + if len(os.Args) > 1 { + os.Chdir(os.Args[1]) + } + files, _ := ioutil.ReadDir(".") + for _, f := range files { + fname := f.Name() + if strings.HasSuffix(fname, ".yaml") { + convert(fname[:len(fname)-5]) + } + } +} + +func convert(name string) { + filename := name + ".yaml" + var hdr HeaderYaml + source, err := ioutil.ReadFile(filename) + if err != nil { + panic(err) + } + err = yaml.Unmarshal(source, &hdr) + if err != nil { + panic(err) + } + encode(name, hdr) +} + +func encode(name string, c HeaderYaml) { + f, _ := os.Create(name + ".hdr") + f.WriteString(c.FileType + "\n") + f.WriteString(c.Detect.FNameRgx + "\n") + f.WriteString(c.Detect.HeaderRgx + "\n") + f.Close() +} + +func decode(name string) Header { + start := time.Now() + data, _ := ioutil.ReadFile(name + ".hdr") + strs := bytes.Split(data, []byte{'\n'}) + var hdr Header + hdr.FileType = string(strs[0]) + hdr.FNameRgx = string(strs[1]) + hdr.HeaderRgx = string(strs[2]) + fmt.Printf("took %v\n", time.Since(start)) + + return hdr +}