Added element function generator
This commit is contained in:
93
internal/elementgen/main.go
Normal file
93
internal/elementgen/main.go
Normal file
@ -0,0 +1,93 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
inputPath = "elements.txt"
|
||||
outputPath = "elements.go"
|
||||
packageName = "hatmill"
|
||||
|
||||
parentType = "parent"
|
||||
emptyType = "empty"
|
||||
|
||||
parentTemplate = `func %s(attribs ...Attrib) func(children ...Term) *ParentElement {
|
||||
return func(children ...Term) *ParentElement {
|
||||
return &ParentElement{
|
||||
EmptyElement: EmptyElement{
|
||||
TagName: "%s",
|
||||
Attribs: attribs,
|
||||
},
|
||||
Children: children,
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
emptyTemplate = `func %s(attribs ...Attrib) EmptyElement {
|
||||
return EmptyElement{
|
||||
TagName: "%s",
|
||||
Attribs: attribs,
|
||||
}
|
||||
}
|
||||
`
|
||||
)
|
||||
|
||||
func main() {
|
||||
inputFile, err := os.Open(inputPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer inputFile.Close()
|
||||
|
||||
var output bytes.Buffer
|
||||
|
||||
fmt.Fprintln(&output, "// GENERATED BY gitlab.codemonkeysoftware.net/b/hatmill/internal/elementgen")
|
||||
fmt.Fprintln(&output, "// DO NOT EDIT!\n")
|
||||
fmt.Fprintln(&output, "package ", packageName, "\n")
|
||||
|
||||
scanner := bufio.NewScanner(inputFile)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
var tagName, elemType string
|
||||
_, err = fmt.Sscanf(line, "%s %s", &tagName, &elemType)
|
||||
if err != nil {
|
||||
log.Fatalf("error parsing input line: %s", err)
|
||||
}
|
||||
|
||||
var template string
|
||||
switch elemType {
|
||||
case parentType:
|
||||
template = parentTemplate
|
||||
case emptyType:
|
||||
template = emptyTemplate
|
||||
default:
|
||||
log.Fatal("unknown element type: ", elemType)
|
||||
}
|
||||
fmt.Fprintf(&output, template, strings.Title(tagName), tagName)
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
log.Fatalf("error scanning input: %s", err)
|
||||
}
|
||||
|
||||
formatted, err := format.Source(output.Bytes())
|
||||
if err != nil {
|
||||
log.Fatalf("error formatting output: %s", err)
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(outputPath, formatted, 0644)
|
||||
if err != nil {
|
||||
log.Fatalf("error writing output: %s", err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user