Browse Source

非解析块处在独立一行时,去除行尾的换行字符 \n

James 4 years ago
parent
commit
523e9e4048
1 changed files with 27 additions and 2 deletions
  1. 27 2
      src/main/java/com/jfinal/template/stat/Lexer.java

+ 27 - 2
src/main/java/com/jfinal/template/stat/Lexer.java

@@ -387,9 +387,17 @@ class Lexer {
 			case 301:
 				for (char c=next(); true; c=next()) {
 					if (c == ']' && buf[forward + 1] == ']' && buf[forward + 2] == '#') {
-						addTextToken(subBuf(lexemeBegin + 3, forward - 1));	// NoParse 块使用 TextToken
-						return prepareNextScan(3);
+						addTextToken(subBuf(getNoParseStart(), forward - 1));	// NoParse 块使用 TextToken
+						
+						// return prepareNextScan(3);
+						forward = forward + 3;
+						if (lookForwardLineFeedAndEof() && deletePreviousTextTokenBlankTails()) {
+							return prepareNextScan(peek() != EOF ? 1 : 0);
+						} else {
+							return prepareNextScan(0);
+						}
 					}
+					
 					if (c == EOF) {
 						throw new ParseException("The \"no parse\" start block \"#[[\" can not match the end block: \"]]#\"", new Location(fileName, beginRow));
 					}
@@ -400,6 +408,23 @@ class Lexer {
 		}
 	}
 	
+	// 非解析块头部 #[[ 处在独立一行时,要删除行尾的换行字符
+	int getNoParseStart() {
+		int fp = lexemeBegin + 3;
+		for (char c=buf[fp]; true; c=buf[++fp]) {
+			if (CharTable.isBlank(c)) {
+				continue ;
+			}
+			
+			// #[[ 处在独立一行
+			if (c == '\n' && deletePreviousTextTokenBlankTails()) {
+				return fp + 1;
+			} else {
+				return lexemeBegin + 3;
+			}
+		}
+	}
+	
 	boolean scanText() {
 		for (char c=peek(); true; c=next()) {
 			if (c == '#' || c == EOF) {