velocity中常常会写出#foreach #if #else #end等语句,
但由于模板文件中html本身就带有缩进,所以最终的缩进,并不符合velocity语句的含义。当主要针对velocity逻辑阅读时,很不方便。
本文提供一个25行的java程序,用来针对以上关键velocity关键词,进行缩进格式化,效果:
代码:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("input.html"));
FileWriter fw = new FileWriter("output.html");
int nextSpaceNum = 0;
for (String s = br.readLine(); null != s; s = br.readLine()) {
s = s.trim();
int spaceNum = nextSpaceNum;
if (s.contains("#if") || s.contains("#foreach")) {
nextSpaceNum++;
}
if (s.contains("#end") || s.startsWith("#else")) {
nextSpaceNum--;
nextSpaceNum &= (~nextSpaceNum >> 31);
spaceNum = nextSpaceNum;
}
for (int i = 0; i < spaceNum; i++) {
fw.write("\t");
}
if (!s.contains("#end") && s.startsWith("#else")) {
fw.write(" ");
nextSpaceNum++;
}
fw.write(s + "\n");
}
br.close();
fw.close();
}