1
0
mirror of https://github.com/golang/go synced 2024-09-30 14:28:33 -06:00
go/present/html.go
Russ Cox 657575a564 present: record info in AST for reproducing present inputs
Commands like .code now have a TemplateCmd method
that returns the original command.

The Text struct now has a Raw field set when Pre==true.
It contains the original indented text, without the tab "fixing".

This helps building tooling that reformats or rewrites present files.

For golang/go#33955.

Change-Id: Ieb036e8b509a4531d120c597b19f2158306a5352
Reviewed-on: https://go-review.googlesource.com/c/tools/+/222845
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
2020-03-13 20:55:18 +00:00

34 lines
674 B
Go

package present
import (
"errors"
"html/template"
"path/filepath"
"strings"
)
func init() {
Register("html", parseHTML)
}
func parseHTML(ctx *Context, fileName string, lineno int, text string) (Elem, error) {
p := strings.Fields(text)
if len(p) != 2 {
return nil, errors.New("invalid .html args")
}
name := filepath.Join(filepath.Dir(fileName), p[1])
b, err := ctx.ReadFile(name)
if err != nil {
return nil, err
}
return HTML{text, template.HTML(b)}, nil
}
type HTML struct {
Cmd string // original command from present source
template.HTML
}
func (s HTML) PresentCmd() string { return s.Cmd }
func (s HTML) TemplateName() string { return "html" }