@@ -52,6 +52,7 @@ func (p scriptElementParser) Parse(pi *parse.Input) (n Node, ok bool, err error)
52
52
// Parse the contents, we should get script text or Go expressions up until the closing tag.
53
53
var sb strings.Builder
54
54
var isInsideStringLiteral bool
55
+
55
56
loop:
56
57
for {
57
58
// Read and decide whether we're we've hit a:
70
71
break loop
71
72
}
72
73
74
+ if _ , ok , err = endTagStart .Parse (pi ); err != nil || ok {
75
+ // We've reached the end of the script, but the end tag is probably invalid.
76
+ break loop
77
+ }
78
+
73
79
var code Node
74
80
code , ok , err = goCodeInJavaScript .Parse (pi )
75
81
if err != nil {
91
97
continue loop
92
98
}
93
99
100
+ // Read JavaScript chracaters.
94
101
for {
95
102
before := pi .Index ()
96
103
var c string
@@ -105,7 +112,11 @@ loop:
105
112
}
106
113
peeked , _ := pi .Peek (1 )
107
114
peeked = c + peeked
108
- if isEOF || peeked == "{{" || peeked == "</" || peeked == "//" || peeked == "/*" {
115
+
116
+ breakForGo := peeked == "{{"
117
+ breakForHTML := ! isInsideStringLiteral && (peeked == "</" || peeked == "//" || peeked == "/*" )
118
+
119
+ if isEOF || breakForGo || breakForHTML {
109
120
if sb .Len () > 0 {
110
121
e .Contents = append (e .Contents , NewScriptContentsJS (sb .String ()))
111
122
sb .Reset ()
@@ -128,6 +139,7 @@ loop:
128
139
}
129
140
130
141
var jsEndTag = parse .String ("</script>" )
142
+ var endTagStart = parse .String ("</" )
131
143
132
144
var jsCharacter = parse .Any (jsEscapedCharacter , parse .AnyRune )
133
145
@@ -136,7 +148,9 @@ var jsEscapedCharacter = parse.StringFrom(parse.String("\\"), parse.AnyRune)
136
148
var jsComment = parse .Any (jsSingleLineComment , jsMultiLineComment )
137
149
138
150
var jsStartSingleLineComment = parse .String ("//" )
139
- var jsSingleLineComment = parse .StringFrom (jsStartSingleLineComment , parse .StringUntil (parse .NewLine ), parse .NewLine )
151
+ var jsEndOfSingleLineComment = parse .StringFrom (parse .Or (parse .NewLine , parse .EOF [string ]()))
152
+ var jsSingleLineComment = parse .StringFrom (jsStartSingleLineComment , parse .StringUntil (jsEndOfSingleLineComment ), jsEndOfSingleLineComment )
140
153
141
154
var jsStartMultiLineComment = parse .String ("/*" )
142
- var jsMultiLineComment = parse .StringFrom (jsStartMultiLineComment , parse .StringUntil (parse .String ("*/" )), parse .String ("*/" ), parse .OptionalWhitespace )
155
+ var jsEndOfMultiLineComment = parse .StringFrom (parse .Or (parse .String ("*/" ), parse .EOF [string ]()))
156
+ var jsMultiLineComment = parse .StringFrom (jsStartMultiLineComment , parse .StringUntil (jsEndOfMultiLineComment ), jsEndOfMultiLineComment , parse .OptionalWhitespace )
0 commit comments