Added attribute function generator and more element defs

This commit is contained in:
2019-03-21 21:49:26 -06:00
parent 8517cab0f5
commit 328e865231
9 changed files with 284 additions and 178 deletions

View File

@ -1,25 +1,25 @@
package main
import (
"bufio"
"bytes"
"fmt"
"go/format"
"io/ioutil"
"log"
"os"
"strings"
"bufio"
"bytes"
"fmt"
"go/format"
"io/ioutil"
"log"
"os"
"strings"
)
const (
inputPath = "elements.txt"
outputPath = "elements.go"
packageName = "hatmill"
inputPath = "elements.txt"
outputPath = "elements.go"
packageName = "hatmill"
parentType = "parent"
emptyType = "empty"
parentType = "parent"
emptyType = "empty"
parentTemplate = `func %s(attribs ...Attrib) func(children ...Term) *ParentElement {
parentTemplate = `func %s(attribs ...Attrib) func(children ...Term) *ParentElement {
return func(children ...Term) *ParentElement {
return &ParentElement{
EmptyElement: EmptyElement{
@ -31,7 +31,7 @@ const (
}
}
`
emptyTemplate = `func %s(attribs ...Attrib) EmptyElement {
emptyTemplate = `func %s(attribs ...Attrib) EmptyElement {
return EmptyElement{
TagName: "%s",
Attribs: attribs,
@ -41,53 +41,53 @@ const (
)
func main() {
inputFile, err := os.Open(inputPath)
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()
inputFile, err := os.Open(inputPath)
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()
var output bytes.Buffer
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")
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
}
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 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)
}
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)
}
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)
}
err = ioutil.WriteFile(outputPath, formatted, 0644)
if err != nil {
log.Fatalf("error writing output: %s", err)
}
}