Skip to content

Commit 6e728f8

Browse files
authored
Merge pull request #469 from googlecodelabs/escape-code-jingsa
Escape all Code blocks for jingsa templates
2 parents ed940ea + 9d7986b commit 6e728f8

File tree

13 files changed

+211
-194
lines changed

13 files changed

+211
-194
lines changed

claat/cmd/export.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ func writeCodelabWriter(w io.Writer, clab *types.Codelab, extraVars map[string]s
167167
}{Context: render.Context{
168168
Env: ctx.Env,
169169
Prefix: ctx.Prefix,
170+
Format: ctx.Format,
170171
GlobalGA: ctx.MainGA,
171172
Updated: time.Time(*ctx.Updated).Format(time.RFC3339),
172173
Meta: &clab.Meta,
@@ -209,6 +210,7 @@ func writeCodelab(dir string, clab *types.Codelab, extraVars map[string]string,
209210
}{Context: render.Context{
210211
Env: ctx.Env,
211212
Prefix: ctx.Prefix,
213+
Format: ctx.Format,
212214
GlobalGA: ctx.MainGA,
213215
Updated: time.Time(*ctx.Updated).Format(time.RFC3339),
214216
Meta: &clab.Meta,

claat/parser/gdoc/parse_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func TestParseTopCodeBlock(t *testing.T) {
110110
code := "start func() {\n}\n\nfunc2() {\n} // comment"
111111
term := "adb shell am start -a VIEW \\\n-d \"http://host\" app"
112112
content := types.NewListNode()
113-
var lang string;
113+
var lang string
114114
content.Append(types.NewCodeNode(code, false, lang))
115115
content.Append(types.NewCodeNode(term, true, lang))
116116

@@ -127,9 +127,9 @@ func TestParseTopCodeBlock(t *testing.T) {
127127
cur: doc.FirstChild,
128128
}
129129
parseTop(ds)
130-
131-
html1, _ := render.HTML("", ds.step.Content)
132-
html2, _ := render.HTML("", content)
130+
var ctx render.Context
131+
html1, _ := render.HTML(ctx, ds.step.Content)
132+
html2, _ := render.HTML(ctx, content)
133133
s1 := strings.TrimSpace(string(html1))
134134
s2 := strings.TrimSpace(string(html2))
135135
if s1 != s2 {
@@ -492,7 +492,7 @@ func TestParseDoc(t *testing.T) {
492492
"http://host/file.java", types.NewTextNode("a file")))
493493
content.Append(h)
494494

495-
var lang string;
495+
var lang string
496496
code := "start func() {\n}\n\nfunc2() {\n} // comment"
497497
cn := types.NewCodeNode(code, false, lang)
498498
cn.MutateBlock(1)
@@ -523,8 +523,9 @@ func TestParseDoc(t *testing.T) {
523523
})
524524
content.Append(sv)
525525

526-
html1, _ := render.HTML("", step.Content)
527-
html2, _ := render.HTML("", content)
526+
var ctx render.Context
527+
html1, _ := render.HTML(ctx, step.Content)
528+
html2, _ := render.HTML(ctx, content)
528529
if html1 != html2 {
529530
t.Errorf("step.Content:\n\n%s\nwant:\n\n%s", html1, html2)
530531
}
@@ -578,8 +579,9 @@ func TestParseFragment(t *testing.T) {
578579
para.MutateBlock(true)
579580
want = append(want, para)
580581

581-
html1, _ := render.HTML("", nodes...)
582-
html2, _ := render.HTML("", want...)
582+
var ctx render.Context
583+
html1, _ := render.HTML(ctx, nodes...)
584+
html2, _ := render.HTML(ctx, want...)
583585
if html1 != html2 {
584586
t.Errorf("nodes:\n\n%s\nwant:\n\n%s", html1, html2)
585587
}

claat/render/html.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@ var (
3636
)
3737

3838
// HTML renders nodes as the markup for the target env.
39-
func HTML(env string, nodes ...types.Node) (htmlTemplate.HTML, error) {
39+
func HTML(ctx Context, nodes ...types.Node) (htmlTemplate.HTML, error) {
4040
var buf bytes.Buffer
41-
if err := WriteHTML(&buf, env, nodes...); err != nil {
41+
if err := WriteHTML(&buf, ctx.Env, ctx.Format, nodes...); err != nil {
4242
return "", err
4343
}
4444
return htmlTemplate.HTML(buf.String()), nil
4545
}
4646

4747
// WriteHTML does the same as HTML but outputs rendered markup to w.
48-
func WriteHTML(w io.Writer, env string, nodes ...types.Node) error {
49-
hw := htmlWriter{w: w, env: env}
48+
func WriteHTML(w io.Writer, env string, fmt string, nodes ...types.Node) error {
49+
hw := htmlWriter{w: w, env: env, format: fmt}
5050
return hw.write(nodes...)
5151
}
5252

@@ -64,9 +64,10 @@ func ReplaceAmpersand(s string) string {
6464
}
6565

6666
type htmlWriter struct {
67-
w io.Writer // output writer
68-
env string // target environment
69-
err error // error during any writeXxx methods
67+
w io.Writer // output writer
68+
env string // target environment
69+
format string // target template
70+
err error // error during any writeXxx methods
7071
}
7172

7273
func (hw *htmlWriter) matchEnv(v []string) bool {
@@ -241,7 +242,13 @@ func (hw *htmlWriter) code(n *types.CodeNode) {
241242
}
242243
hw.writeBytes(greaterThan)
243244
}
245+
if hw.format == "devsite" {
246+
hw.writeString("{% verbatim %}")
247+
}
244248
hw.writeEscape(n.Value)
249+
if hw.format == "devsite" {
250+
hw.writeString("{% endverbatim %}")
251+
}
245252
if !n.Term {
246253
hw.writeString("</code>")
247254
}

claat/render/html_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ func TestHTMLEnv(t *testing.T) {
3939
{"four", ""},
4040
}
4141
for i, test := range tests {
42-
h, err := HTML(test.env, one, two, three)
42+
var ctx Context
43+
ctx.Env = test.env
44+
h, err := HTML(ctx, one, two, three)
4345
if err != nil {
4446
t.Errorf("%d: %v", i, err)
4547
continue

claat/render/lite.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
)
3131

3232
// Lite renders nodes as a standard HTML markup, without Custom Elements.
33-
func Lite(env string, nodes ...types.Node) (htmlTemplate.HTML, error) {
33+
func Lite(ctx Context, nodes ...types.Node) (htmlTemplate.HTML, error) {
3434
var buf bytes.Buffer
35-
if err := WriteLite(&buf, env, nodes...); err != nil {
35+
if err := WriteLite(&buf, ctx.Env, nodes...); err != nil {
3636
return "", err
3737
}
3838
return htmlTemplate.HTML(buf.String()), nil

claat/render/md.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ import (
2727
)
2828

2929
// MD renders nodes as markdown for the target env.
30-
func MD(env string, nodes ...types.Node) (string, error) {
30+
func MD(ctx Context, nodes ...types.Node) (string, error) {
3131
var buf bytes.Buffer
32-
if err := WriteMD(&buf, env, nodes...); err != nil {
32+
if err := WriteMD(&buf, ctx.Env, nodes...); err != nil {
3333
return "", err
3434
}
3535
return buf.String(), nil

claat/render/template-devsite.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
{{if $.Meta.BadgePath}}badge-path="{{$.Meta.BadgePath}}"{{end}}>
6363
</google-codelab-about>
6464
{{end}}
65-
{{.Content | renderHTML $.Env}}
65+
{{.Content | renderHTML $.Context}}
6666
</google-codelab-step>
6767
{{end}}{{end}}
6868
</google-codelab>

claat/render/template-offline.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ <h1>{{.Meta.Title}}</h1>
7070
<div class="step__body">
7171
<h1>{{.Meta.Title}}</h1>
7272
<h2>{{.StepNum}}. {{.Current.Title}}</h2>
73-
{{.Current.Content | renderLite .Env}}
73+
{{.Current.Content | renderLite $.Context}}
7474
</div>
7575

7676
</div><!-- codelab__toc -->

claat/render/template.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type Context struct {
3636
Env string
3737
Prefix string
3838
GlobalGA string
39+
Format string
3940
Meta *types.Meta
4041
Steps []*types.Step
4142
Updated string

claat/render/template.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
feedback-link="{{.Meta.Feedback}}">
4343
{{range $i, $e := .Steps}}{{if matchEnv .Tags $.Env}}
4444
<google-codelab-step label="{{.Title}}" duration="{{.Duration.Minutes}}">
45-
{{.Content | renderHTML $.Env}}
45+
{{.Content | renderHTML $.Context}}
4646
</google-codelab-step>
4747
{{end}}{{end}}
4848
</google-codelab>

0 commit comments

Comments
 (0)