code: func (te Expander) ExpandHTML(templateFiles []string) (result string, resultErr error) {
  	defer func() {
  		if r := recover(); r != nil {
  			var ok bool
  			resultErr, ok = r.(error)
  			if !ok {
  				resultErr = errors.Errorf("panic expanding template %s: %v", te.name, r)
  			}
  		}
  	}()
  
  	tmpl := html_template.New(te.name).Funcs(html_template.FuncMap(te.funcMap))
  	tmpl.Option("missingkey=zero")
  	tmpl.Funcs(html_template.FuncMap{
  		"tmpl": func(name string, data interface{}) (html_template.HTML, error) {
  			var buffer bytes.Buffer
  			err := tmpl.ExecuteTemplate(&buffer, name, data)
  			return html_template.HTML(buffer.String()), err
  		},
  	})
  	tmpl, err := tmpl.Parse(te.text)
  	if err != nil {
  		return "", errors.Wrapf(err, "error parsing template %v", te.name)
  	}
  	if len(templateFiles) > 0 {
  		_, err = tmpl.ParseFiles(templateFiles...)
  		if err != nil {
  			return "", errors.Wrapf(err, "error parsing template files for %v", te.name)
  		}
  	}
  	var buffer bytes.Buffer
  	err = tmpl.Execute(&buffer, te.data)
  	if err != nil {
  		return "", errors.Wrapf(err, "error executing template %v", te.name)
  	}
  	return buffer.String(), nil
  }
docs: // ExpandHTML expands a template with HTML escaping, with templates read from the given files.