@@ -25,11 +25,13 @@ component extends="AbstractParser" {
2525 var currentStatement = " " ;
2626 var currentStatementStart = 1 ;
2727 var commentStatement = " " ;
28+ var lowerCaseContent = arguments .file .getFileContentLowerCase ();
2829 var sb = createObject (" java" , " java.lang.StringBuilder" );
2930
3031 // parsing a cfscript tag uses startPosition and endPosition
3132 if (arguments .startPosition ! = 0 && arguments .endPosition ! = 0 ) {
3233 pos = arguments .startPosition ;
34+ scriptTagContent = mid (content , pos , contentLength - arguments .endPosition + 1 );
3335 contentLength = arguments .endPosition ;
3436 }
3537
@@ -181,7 +183,7 @@ component extends="AbstractParser" {
181183 pos = pos + 9 ;
182184 currentState = this .STATE .COMPONENT_STATEMENT ;
183185 continue ;
184- } else if (lowerC == " f" && reFindNoCase (" function[\t\r\n a-zA-Z_]" , mid (content , pos , 9 )) ) {
186+ } else if (lowerC == " f" && reFind (" function[\t\r\n a-zA-Z_]" , mid (lowerCaseContent , pos , 9 )) ) {
185187 // a function without access modifier or return type
186188 sb .append (mid (content , pos , 8 ));
187189 currentState = this .STATE .FUNCTION_STATEMENT ;
@@ -192,7 +194,7 @@ component extends="AbstractParser" {
192194 }
193195 pos = pos + 8 ;
194196 continue ;
195- } else if (lowerC == " i" && reFindNoCase (" if[\t\r\n (]" , mid (content , pos , 3 ))) {
197+ } else if (lowerC == " i" && reFind (" if[\t\r\n (]" , mid (lowerCaseContent , pos , 3 ))) {
196198 currentStatementStart = pos ;
197199 currentStatement = new ScriptStatement (name = " if" , startPosition = pos , file = arguments .file , parent = parent );
198200 parent = currentStatement ;
@@ -205,7 +207,7 @@ component extends="AbstractParser" {
205207 sb .append (mid (content , pos , 2 ));
206208 pos = pos + 2 ;
207209 continue ;
208- } else if (lowerC == " e" && reFindNoCase (" else[ \t\r\n]+if[\t\r\n (]" , content , pos ) == pos ) {
210+ } else if (lowerC == " e" && reFind (" else[ \t\r\n]+if[\t\r\n (]" , lowerCaseContent , pos ) == pos ) {
209211 currentStatementStart = pos ;
210212 currentStatement = new ScriptStatement (name = " else if" , startPosition = pos , file = arguments .file , parent = parent );
211213 currentState = this .STATE .ELSE_IF_STATEMENT ;
@@ -218,7 +220,7 @@ component extends="AbstractParser" {
218220 sb .append (mid (content , pos , paren - pos ));
219221 pos = paren ;
220222 continue ;
221- } else if (lowerC == " e" && reFindNoCase (" else[\t\r\n (]" , content , pos ) == pos ) {
223+ } else if (lowerC == " e" && reFind (" else[\t\r\n (]" , lowerCaseContent , pos ) == pos ) {
222224 currentStatementStart = pos ;
223225 currentStatement = new ScriptStatement (name = " else" , startPosition = pos , file = arguments .file , parent = parent );
224226 parent = currentStatement ;
@@ -241,7 +243,7 @@ component extends="AbstractParser" {
241243 sb .append (" var " );
242244 pos = pos + 4 ;
243245 continue ;
244- } else if (lowerC == " r" && reFindNoCase (" return[\t\r\n ;]" , mid (content , pos , 7 )) == pos ) {
246+ } else if (lowerC == " r" && reFind (" return[\t\r\n ;]" , mid (lowerCaseContent , pos , 7 )) == pos ) {
245247 currentStatement = new ScriptStatement (name = " return" , startPosition = pos , file = arguments .file , parent = parent );
246248 currentState = this .STATE .RETURN_STATEMENT ;
247249 addStatement (currentStatement );
@@ -251,7 +253,7 @@ component extends="AbstractParser" {
251253 sb .append (mid (content , pos , 6 ));
252254 pos = pos + 6 ;
253255 continue ;
254- } else if (lowerC == " f" && reFindNoCase (" for\s*\(" , content , pos ) == pos ) {
256+ } else if (lowerC == " f" && reFind (" for\s*\(" , lowerCaseContent , pos ) == pos ) {
255257 currentStatementStart = pos ;
256258 currentStatement = new ScriptStatement (name = " for" , startPosition = pos , file = arguments .file , parent = parent );
257259 parent = currentStatement ;
@@ -263,7 +265,7 @@ component extends="AbstractParser" {
263265 sb .append (mid (content , pos , 3 ));
264266 pos = pos + 3 ;
265267 continue ;
266- } else if (lowerC == " w" && reFindNoCase (" while\s*\(" , content , pos ) == pos ) {
268+ } else if (lowerC == " w" && reFind (" while\s*\(" , lowerCaseContent , pos ) == pos ) {
267269 currentStatementStart = pos ;
268270 currentStatement = new ScriptStatement (name = " while" , startPosition = pos , file = arguments .file , parent = parent );
269271 parent = currentStatement ;
@@ -275,7 +277,7 @@ component extends="AbstractParser" {
275277 sb .append (mid (content , pos , 5 ));
276278 pos = pos + 5 ;
277279 continue ;
278- } else if (lowerC == " d" && reFindNoCase (" do\s*{" , content , pos ) == pos ) {
280+ } else if (lowerC == " d" && reFind (" do\s*{" , lowerCaseContent , pos ) == pos ) {
279281 currentStatementStart = pos ;
280282 currentStatement = new ScriptStatement (name = " do" , startPosition = pos , file = arguments .file , parent = parent );
281283 parent = currentStatement ;
@@ -287,7 +289,7 @@ component extends="AbstractParser" {
287289 sb .append (mid (content , pos , 2 ));
288290 pos = pos + 2 ;
289291 continue ;
290- } else if (lowerC == " t" && reFindNoCase (" try\s*{" , content , pos ) == pos ) {
292+ } else if (lowerC == " t" && reFind (" try\s*{" , lowerCaseContent , pos ) == pos ) {
291293 currentStatementStart = pos ;
292294 currentStatement = new ScriptStatement (name = " try" , startPosition = pos , file = arguments .file , parent = parent );
293295 parent = currentStatement ;
@@ -299,7 +301,7 @@ component extends="AbstractParser" {
299301 sb .append (mid (content , pos , 3 ));
300302 pos = pos + 3 ;
301303 continue ;
302- } else if (lowerC == " c" && reFindNoCase (" catch\s*\(" , content , pos ) == pos ) {
304+ } else if (lowerC == " c" && reFind (" catch\s*\(" , lowerCaseContent , pos ) == pos ) {
303305 currentStatementStart = pos ;
304306 currentStatement = new ScriptStatement (name = " catch" , startPosition = pos , file = arguments .file , parent = parent );
305307 parent = currentStatement ;
@@ -311,7 +313,7 @@ component extends="AbstractParser" {
311313 sb .append (mid (content , pos , 5 ));
312314 pos = pos + 5 ;
313315 continue ;
314- } else if (lowerC == " f" && reFindNoCase (" finally\s*\{" , content , pos ) == pos ) {
316+ } else if (lowerC == " f" && reFind (" finally\s*\{" , lowerCaseContent , pos ) == pos ) {
315317 currentStatementStart = pos ;
316318 currentStatement = new ScriptStatement (name = " finally" , startPosition = pos , file = arguments .file , parent = parent );
317319 parent = currentStatement ;
@@ -339,8 +341,33 @@ component extends="AbstractParser" {
339341 braceOpen = find (" {" , content , pos + 1 );
340342 semi = find (" ;" , content , pos + 1 );
341343 paren = find (" (" , content , pos + 1 );
342- quotePos = reFind (" ['"" ]" , content , pos + 1 );
343- temp = reFindNoCase (" [^a-zA-Z0-9_.]*function[\t\r\n ]+[a-zA-Z_]" , content , pos );
344+
345+ // quotePos = reFind("['""]", content, pos+1);
346+ quotePos = find (" "" " , content , pos + 1 );
347+ temp = find (" '" , content , pos + 1 );
348+ if (temp < quotePos ) {
349+ quotePos = temp ;
350+ }
351+ temp = find (" function" , lowerCaseContent , pos );
352+ if (arguments .endPosition ! = 0 ) {
353+ // account for cfscript blocks
354+ if (temp > arguments .endPosition ) {
355+ temp = 0 ;
356+ }
357+ if (braceOpen > arguments .endPosition ) {
358+ braceOpen = 0 ;
359+ }
360+ if (semi > arguments .endPosition ) {
361+ semi = 0 ;
362+ }
363+ if (quotePos > arguments .endPosition ) {
364+ semi = 0 ;
365+ }
366+ }
367+
368+ if (temp ! = 0 ) {
369+ temp = reFind (" [^a-zA-Z0-9_.]*function[\t\r\n ]+[a-zA-Z_]" , lowerCaseContent , pos );
370+ }
344371
345372
346373 if (temp == 0 ) {
0 commit comments