func (u *extern) attr(start *xml.StartElement, name string, value interface{}) { str := func(value string) { assert.For(value != "", 20) a := xml.Attr{} a.Name.Local = name a.Value = value start.Attr = append(start.Attr, a) } switch v := value.(type) { case string: str(v) case bool: if v { str("true") } else { str("false") } case int: str(strconv.Itoa(v)) case types.Type: str(v.String()) default: halt.As(100, reflect.TypeOf(v), v) } }
func renderHtml(o otm.Object, log *testing.T) { buf := bytes.NewBufferString("<!DOCTYPE HTML>") e := xml.NewEncoder(buf) var obj func(otm.Object) obj = func(o otm.Object) { clazz := o.InstanceOf().Qualident() if clazz.Template == "html" { start := xml.StartElement{} start.Name.Local = clazz.Class if id := o.Qualident().Identifier; id != "" { attr := xml.Attr{} attr.Name.Local = "id" attr.Value = id start.Attr = append(start.Attr, attr) } e.EncodeToken(start) for _x := range o.Children() { switch x := _x.(type) { case otm.Object: obj(x) case string: e.EncodeToken(xml.CharData([]byte(x))) default: halt.As(100, reflect.TypeOf(x)) } } e.EncodeToken(start.End()) } } for x := range o.ChildrenObjects() { if x.InstanceOf().Qualident().Template == "html" && x.InstanceOf().Qualident().Class == "html" { obj(x) } } e.Flush() log.Log(buf.String()) }
func setAttr(start *xml.StartElement, name, value string) { a := xml.Attr{} a.Name.Local = name a.Value = value start.Attr = append(start.Attr, a) }