tpls

Extendable, Fast Template Engine for Go
git clone git://git.lair.cx/tpls
Log | Files | Refs | README | LICENSE

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 }