aboutsummaryrefslogtreecommitdiff
path: root/driver/template.go
diff options
context:
space:
mode:
Diffstat (limited to 'driver/template.go')
-rw-r--r--driver/template.go72
1 files changed, 66 insertions, 6 deletions
diff --git a/driver/template.go b/driver/template.go
index ab95167..a3d2726 100644
--- a/driver/template.go
+++ b/driver/template.go
@@ -67,6 +67,33 @@ func GenLexer(clspec *spec.CompiledLexSpec, pkgName string) ([]byte, error) {
modeNamesSrc = b.String()
}
+ var modeIDToNameSrc string
+ {
+ var b strings.Builder
+ fmt.Fprintf(&b, `
+func ModeIDToName(id ModeID) string {
+ switch id {`)
+ for i, k := range clspec.ModeNames {
+ if i == spec.LexModeIDNil.Int() {
+ fmt.Fprintf(&b, `
+ case ModeIDNil:
+ return ModeNameNil`)
+ continue
+ }
+ name := spec.SnakeCaseToUpperCamelCase(k.String())
+ fmt.Fprintf(&b, `
+ case ModeID%v:
+ return ModeName%v`, name, name)
+ }
+ fmt.Fprintf(&b, `
+ }
+ return ""
+}
+`)
+
+ modeIDToNameSrc = b.String()
+ }
+
var kindIDsSrc string
{
var b strings.Builder
@@ -96,6 +123,33 @@ func GenLexer(clspec *spec.CompiledLexSpec, pkgName string) ([]byte, error) {
kindNamesSrc = b.String()
}
+ var kindIDToNameSrc string
+ {
+ var b strings.Builder
+ fmt.Fprintf(&b, `
+func KindIDToName(id KindID) string {
+ switch id {`)
+ for i, k := range clspec.KindNames {
+ if i == spec.LexModeIDNil.Int() {
+ fmt.Fprintf(&b, `
+ case KindIDNil:
+ return KindNameNil`)
+ continue
+ }
+ name := spec.SnakeCaseToUpperCamelCase(k.String())
+ fmt.Fprintf(&b, `
+ case KindID%v:
+ return KindName%v`, name, name)
+ }
+ fmt.Fprintf(&b, `
+ }
+ return ""
+}
+`)
+
+ kindIDToNameSrc = b.String()
+ }
+
var specSrc string
{
t, err := template.New("").Funcs(genTemplateFuncs(clspec)).Parse(lexSpecTemplate)
@@ -127,10 +181,14 @@ func GenLexer(clspec *spec.CompiledLexSpec, pkgName string) ([]byte, error) {
{{ .modeNamesSrc }}
+{{ .modeIDToNameSrc }}
+
{{ .kindIDsSrc }}
{{ .kindNamesSrc }}
+{{ .kindIDToNameSrc }}
+
{{ .specSrc }}
`
@@ -141,12 +199,14 @@ func GenLexer(clspec *spec.CompiledLexSpec, pkgName string) ([]byte, error) {
var b strings.Builder
err = t.Execute(&b, map[string]string{
- "lexerSrc": lexerSrc,
- "modeIDsSrc": modeIDsSrc,
- "modeNamesSrc": modeNamesSrc,
- "kindIDsSrc": kindIDsSrc,
- "kindNamesSrc": kindNamesSrc,
- "specSrc": specSrc,
+ "lexerSrc": lexerSrc,
+ "modeIDsSrc": modeIDsSrc,
+ "modeNamesSrc": modeNamesSrc,
+ "modeIDToNameSrc": modeIDToNameSrc,
+ "kindIDsSrc": kindIDsSrc,
+ "kindNamesSrc": kindNamesSrc,
+ "kindIDToNameSrc": kindIDToNameSrc,
+ "specSrc": specSrc,
})
if err != nil {
return nil, err