// 待移除的空的 Text Node (主要是 Text Node 不允许为空的内容,只能在循环外把它delete了)
List<Integer> empty_text_index_list = new ArrayList<Integer>();
for (int i = 0; i < nodes.size(); i++) {
Statement node = nodes.get(i);
if (isTrimableDirective(node)) {
if (i > 0) {
int prev_index = i - 1;
Statement prev = nodes.get(prev_index);
if (isNoLiteralText(prev)
&& !empty_text_index_list.contains(prev_index)) {
// 删除上一个文本节点最后一个\n之后的所有空白符
String text = ((Text) prev).getContent();
int pos = text.lastIndexOf('\n');
if (pos >= 0) {
String tail = text.substring(pos + 1);
if (tail.length() > 0 && tail.trim().length() == 0) {
text = text.substring(0, pos + 1);
if (text.length() == 0) {
empty_text_index_list.add(prev_index); // 将会是空节点,加入到待删除队列
} else {
nodes.set(prev_index, new Text(text, false,
prev.getOffset())); // 修改
}
}
}
}
} // prev text node
if (i + 1 < nodes.size()) {
int next_index = i + 1;
Statement next = nodes.get(next_index);
if (isNoLiteralText(next)) {
// 删除下一个文本节点地一个\n之前的所有空白符
String text = ((Text) next).getContent();
int pos = text.indexOf('\n');
if (pos >= 0) {
String head = text.substring(0, pos);
if (head.trim().length() == 0) {
text = text.substring(pos + 1);
boolean isEmptyNode = false;
if (text.length() == 0) {
empty_text_index_list.add(next_index); // 将会是空节点,加入到待删除队列
isEmptyNode = true;
} else if (text.indexOf('\n') == -1
&& text.trim().length() == 0) {
// 看看下面是不是还是个指令,是不是可以全部丢掉
if (next_index + 1 < nodes.size()) {
Statement next_next = nodes
.get(next_index + 1);
if (isTrimableDirective(next_next)) {
empty_text_index_list
.add(next_index); // 将会是空节点,加入到待删除队列
isEmptyNode = true;