com.jfinal.template.stat.TextToken Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of enjoy-sql Show documentation
Show all versions of enjoy-sql Show documentation
the jfinal enjoy plugin for normal java program to use sql management function.
/**
* Copyright (c) 2011-2017, James Zhan 詹波 ([email protected]).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jfinal.template.stat;
/**
* TextToken
* 词法分析时,合并相邻 TextToken
*/
class TextToken extends Token {
// 接管父类的 value
private StringBuilder text;
public TextToken(StringBuilder value, int row) {
super(Symbol.TEXT, row);
this.text = value;
}
public void append(StringBuilder content) {
if (content != null) {
text.append(content); // 不要使用 toString(),性能不如直接这样快
}
}
/**
* 1:当前指令"后方"全是空白字符并且以 '\n' 或 EOF 结尾,当前指令"前方"为 TextToken 时调用此方法
* 2:当前指令本行内前方为空白字符(必须遭遇 '\n'),则删掉前方的空白字符
* 3:当前指令前方全为空白字符(不含 '\n'),表明是两个指令之间全为空白字符的情况,
* 或者两指令不在同一行且第二个指令前方全是空白字符的情况,则删掉这两指令之间的全部空白字符
* 4:返回 true,告知调用方需要吃掉本指令行尾的 '\n'
*
* 简单描述:
* 1:当前指令独占一行,删除当前指令前方空白字符,并告知调用方吃掉行尾 '\n'
* 2:当前指令前方仍然是指令,两指令之间有空白字符,吃掉前方(即所有)的空白字符,并告知调用方吃掉行尾 '\n'
* 3:情况 2 时,相当于本 TextToken 内容变成了空字符串,后续的 Parser 将过滤掉这类节点
*/
public boolean deleteBlankTails() {
for (int i = text.length() - 1; i >= 0; i--) {
if (CharTable.isBlank(text.charAt(i))) {
continue ;
}
if (text.charAt(i) == '\n') {
text.delete(i+1, text.length());
return true;
} else {
return false;
}
}
// 两个指令之间全是空白字符, 设置其长度为 0,为 Parser 过滤内容为空的 Text 节点做准备
text.setLength(0);
return true; // 当两指令之间全为空白字符时,告知调用方需要吃掉行尾的 '\n'
}
public String value() {
return text.toString();
}
public StringBuilder getContent() {
return text;
}
public String toString() {
return text.toString();
}
public void print() {
System.out.print("[");
System.out.print(row);
System.out.print(", TEXT, ");
System.out.print(text.toString());
System.out.println("]");
}
}