builtin_typedef.go (922B)
1 package tplc 2 3 import ( 4 "fmt" 5 6 "go.lair.cx/go-core/net/htmlx" 7 ) 8 9 func TagStruct(_ *Builder, w *Writer, t *htmlx.Tokenizer) error { 10 return handleTypeTag(w, t, "struct") 11 } 12 13 func TagInterface(_ *Builder, w *Writer, t *htmlx.Tokenizer) error { 14 return handleTypeTag(w, t, "interface") 15 } 16 17 func handleTypeTag(w *Writer, t *htmlx.Tokenizer, name string) error { 18 attrs := getAttrs(t) 19 className, ok := attrs["class"] 20 if !ok { 21 return fmt.Errorf("class is required for %s tag", name) 22 } 23 24 w.WriteGoCode("type ", className, " ", name, " {") 25 26 if t.CurrentType() == htmlx.SelfClosingTagToken { 27 w.WriteGoCode("}\n\n") 28 return nil 29 } 30 31 t.SetRawTag(name) 32 for { 33 switch t.Next() { 34 case htmlx.TextToken: 35 w.WriteGoCodeBytes(t.Text()) 36 37 case htmlx.EndTagToken: 38 if tagName, _ := t.TagName(); string(tagName) != name { 39 return fmt.Errorf("invalid %s syntax", name) 40 } 41 42 w.WriteGoCode("}\n\n") 43 return nil 44 } 45 } 46 }