for i != len(s) {
c1, nread := contextAfterText(c, s[i:])
i1 := i + nread
- if c.state == c1.state && (c.state == stateText || c.state == stateRCDATA) {
- for j := i; j < i1; j++ {
+ if c.state == stateText || c.state == stateRCDATA {
+ end := i1
+ if c1.state != c.state {
+ for j := end - 1; j >= i; j-- {
+ if s[j] == '<' {
+ end = j
+ break
+ }
+ }
+ }
+ for j := i; j < end; j++ {
if s[j] == '<' {
b.Write(s[written:j])
b.WriteString("<")
// TODO: Elide comment.
"<b>Hello, <!-- name of world --><Cincinatti></b>",
},
+ {
+ "HTML comment not first < in text node.",
+ "<<!-- -->!--",
+ "<<!-- -->!--",
+ },
+ {
+ "HTML normalization 1",
+ "a < b",
+ "a < b",
+ },
+ {
+ "HTML normalization 2",
+ "a << b",
+ "a << b",
+ },
+ {
+ "HTML normalization 3",
+ "a<<!-- --><!-- -->b",
+ "a<<!-- --><!-- -->b",
+ },
{
"Split HTML comment",
"<b>Hello, <!-- name of {{if .T}}city -->{{.C}}{{else}}world -->{{.W}}{{end}}</b>",