54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
// +build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"log"
|
|
"regexp"
|
|
"strconv"
|
|
)
|
|
|
|
var tengoModFileRE = regexp.MustCompile(`^srcmod_(\w+).tengo$`)
|
|
|
|
func main() {
|
|
modules := make(map[string]string)
|
|
|
|
// enumerate all Tengo module files
|
|
files, err := ioutil.ReadDir(".")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
for _, file := range files {
|
|
m := tengoModFileRE.FindStringSubmatch(file.Name())
|
|
if m != nil {
|
|
modName := m[1]
|
|
|
|
src, err := ioutil.ReadFile(file.Name())
|
|
if err != nil {
|
|
log.Fatalf("file '%s' read error: %s", file.Name(), err.Error())
|
|
}
|
|
|
|
modules[modName] = string(src)
|
|
}
|
|
}
|
|
|
|
var out bytes.Buffer
|
|
out.WriteString(`// Code generated using gensrcmods.go; DO NOT EDIT.
|
|
|
|
package stdlib
|
|
|
|
// SourceModules are source type standard library modules.
|
|
var SourceModules = map[string]string{` + "\n")
|
|
for modName, modSrc := range modules {
|
|
out.WriteString("\t\"" + modName + "\": " + strconv.Quote(modSrc) + ",\n")
|
|
}
|
|
out.WriteString("}\n")
|
|
|
|
const target = "source_modules.go"
|
|
if err := ioutil.WriteFile(target, out.Bytes(), 0644); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|