From d4160a843c38a15eea9097aad069d2110dc89eae Mon Sep 17 00:00:00 2001 From: neoe Date: Tue, 25 Jun 2019 13:23:24 +0800 Subject: [PATCH] bugfixs --- dist/luaformatter.jar | Bin 16381 -> 17020 bytes mybuild | 2 +- src/neoe/tools/LuaFormatter.java | 382 ------------------------------- src/neoe/tools/LuaTokenType.java | 5 - src/neoe/tools/LuaTokens.java | 178 -------------- src/neoe/util/FileIterator.java | 37 --- 6 files changed, 1 insertion(+), 603 deletions(-) delete mode 100644 src/neoe/tools/LuaFormatter.java delete mode 100644 src/neoe/tools/LuaTokenType.java delete mode 100644 src/neoe/tools/LuaTokens.java diff --git a/dist/luaformatter.jar b/dist/luaformatter.jar index ef7f21b778f27cff83988b1908f6843709552ee1..28cd9118b9e222f3889102c5794ffb147400e4d6 100644 GIT binary patch literal 17020 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 UkAxWz5W>d?@?+U=asR&if6O9=4gdfE diff --git a/mybuild b/mybuild index 8c23a48..3012c5b 100644 --- a/mybuild +++ b/mybuild @@ -1,6 +1,6 @@ { /* neoebuild script */ prjs:[ -[luaformatter, "." , { main: "neoe.tools.LuaFormatter" }] +[luaformatter, "." , { main: "neoe.formatter.lua.LuaFormatter" }] ] } diff --git a/src/neoe/tools/LuaFormatter.java b/src/neoe/tools/LuaFormatter.java deleted file mode 100644 index c120056..0000000 --- a/src/neoe/tools/LuaFormatter.java +++ /dev/null @@ -1,382 +0,0 @@ -package neoe.tools; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; - -import neoe.util.FileIterator; -import neoe.util.FileUtil; - -public class LuaFormatter { - - private static boolean TESTING_LEVEL = false; - private static boolean DEBUG = false; - - public static void main(String[] args) throws Exception { - if (args.length == 0) { - usage(); - } else { - new LuaFormatter().run(args); - } - - } - - private static void usage() { - System.out.println( - "luaformatter: args:\n -o -- overwrite source\n -e -- use ENCODING\n -d -- debug\n input-files\n"); - - } - - List fs = new ArrayList<>(); - private String encoding = "utf8"; - private boolean overwritesource = false; - - public void run(String[] args) throws Exception { - - for (String s : args) { - if (s.startsWith("-")) { - doOpt(s); - } else { - addFile(s); - } - } - if (fs.isEmpty()) { - System.out.println("no input files"); - } else { - for (String fn : fs) { - formatFile(fn); - } - } - - } - - private void addFile(String fn) { - File f = new File(fn); - if (f.isDirectory()) { - for (File f1 : new FileIterator(fn)) { - String name = f1.getName(); - if (name.endsWith(".lua") && !name.endsWith(".fmt.lua") && !name.endsWith(".fmt-err.lua")) { - fs.add(f1.getAbsolutePath()); - } - } - } else if (f.isFile()) { - fs.add(fn); - } - } - - private void doOpt(String s) { - if (s.startsWith("-e")) { - encoding = s.substring(2); - } else if (s.startsWith("-o")) { - overwritesource = true; - } else if (s.startsWith("-d")) { - DEBUG = true; - TESTING_LEVEL = true; - overwritesource = false; - } - - } - - private Writer debug; - - public void formatFile(String fn) { - try { - Env env = new Env(); - if (DEBUG) - debug = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("debug.log"), "utf8")); - if (DEBUG) - debug.write("read " + fn + "\n"); - String txt = FileUtil.readString(new FileInputStream(fn), encoding); - try { - String res = format(txt, env); - if (env.indent != 0) { - env.indent = 0; - throw new RuntimeException("indent not correct:" + fn); - } - File f2 = new File(fn + (overwritesource ? "" : ".fmt.lua")); - FileUtil.save(res.getBytes(encoding), f2.getAbsolutePath()); - System.out.println("wrote to " + f2.getAbsolutePath()); - } catch (Exception e) { - e.printStackTrace(); - File f2 = new File(fn + ".fmt-err.lua"); - FileUtil.save(sb.toString().getBytes(encoding), f2.getAbsolutePath()); - System.out.println("wrote to " + f2.getAbsolutePath()); - } - - if (DEBUG) - debug.close(); - } catch (Exception e) { - e.printStackTrace(); - System.err.printf("when formatting [%s]\n", fn); - } - } - - StringBuilder sb; - LuaTokens tokens; - - public String format(String txt, Env env) throws Exception { - sb = new StringBuilder(); - tokens = new LuaTokens(txt); - loop(LuaTokenType.SPACE, null, null, env); - return sb.toString(); - } - - private void loop(LuaTokenType preType, String until, LuaTokenType operator, Env env) throws Exception { - env.lastType = preType; - addSpaceOnNeed(env); - while (true) { - Object[] tt = tokens.next(); - if (tt == null) - break; - LuaTokenType type = (LuaTokenType) tt[0]; - String token = (String) tt[1]; - if (token == null) - break; - - if (DEBUG) { - debug.write(String.format("t:%s,v:%s\n", type, token)); - debug.flush(); - } - - addToken(type, token, env); - - if (LuaTokenType.OPERATOR.equals(operator) && token.indexOf(until) >= 0) { - break; - } - if (until != null && token.equals(until)) { - break; - } - } - - } - - static class Env { - LuaTokenType lastType = LuaTokenType.SPACE; - int indent; - int changedLine; - String lastToken; - boolean forcedChangeLine; - Stack stack = new Stack(); - } - - private void addToken(LuaTokenType type, String token, Env env) throws Exception { - env.forcedChangeLine = false; - if (type.equals(LuaTokenType.COMMENT)) { - pre(env); - if (isMultiLineToken(token)) { - sb.append(token); - } else { - sb.append(normalComment(token.trim())); - } - - } else if (type.equals(LuaTokenType.SPACE)) { - // sb.append(""); - int cnt = printSpaceLines(env, token); - - if (cnt <= 0) { - addSpaceOnNeed(env); - } else { - env.changedLine = cnt; - } - // sb.append(""); - - } else if (type.equals(LuaTokenType.IDENTIFIER)) { - - if ("end".equals(token)) { - String key = decIndent(env); - changeLineOnNeed(env); - printToken(env, token); - changeLineOnNeed(env); - if ("function".equals(key)) { - sb.append("\n"); - env.changedLine++; - } - } else if ("else".equals(token)) { - String key = decIndent(env); - changeLineOnNeed(env); - printToken(env, token); - incIndent(env, key); - changeLineOnNeed(env); - } else if ("elseif".equals(token)) { - changeLineOnNeed(env); - String key = decIndent(env); - printToken(env, token); - } else if ("until".equals(token)) { - decIndent(env); - printToken(env, token); - } else if ("do".equals(token)) { - printToken(env, token); - incIndent(env, token); - changeLineOnNeed(env); - } else if ("local".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - } else if ("if".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - } else if ("then".equals(token)) { - printToken(env, token); - forceChangeLine(env); - incIndent(env, token); - } else if ("function".equals(token)) { - printToken(env, token); - env.changedLine = 0; - loop(type, ")", LuaTokenType.OPERATOR, env); - forceChangeLine(env); - incIndent(env, token); - } else if ("while".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - } else if ("for".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - } else if ("print".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - } else if ("repeat".equals(token)) { - changeLineOnNeed(env); - printToken(env, token); - forceChangeLine(env); - incIndent(env, token); - loop(type, "until", null, env); - } else { - printToken(env, token); - } - - } else if (type.equals(LuaTokenType.OPERATOR)) { - if (token.equals(".")) { - sb.append(token); - } else if ("}])".indexOf(token) >= 0) { - decIndent(env); - printToken(env, token); - } else if ("{[(".indexOf(token) >= 0) { - printToken(env, token); - incIndent(env, token); - } else { - printToken(env, token); - } - } else { - printToken(env, token); - } - env.lastType = type; - env.lastToken = token; - - } - - private void printToken(Env env, String token) { - pre(env); - sb.append(token); - } - - private int printSpaceLines(Env env, String token) { - int cnt = 0; - for (char c : token.toCharArray()) { - if (c == '\n') { - if (cnt >= env.changedLine) { - newline(); - } - cnt++; - } - } - return cnt; - } - - /** print indent if in newline or add a space */ - private void pre(Env env) { - // sb.append("[cl=" + env.changedLine + "]"); - if (env.changedLine > 0) { - printIndent(env); - env.changedLine = 0; - } else { - addSpaceOnNeed(env); - } - - } - - private String normalComment(String s) { - - if (s.startsWith("--") && s.length() > 2 && s.charAt(2) != ' ' && s.charAt(2) != '-') { - s = "-- " + s.substring(2); - - } - return s; - } - - private boolean isMultiLineToken(String token) { - return token.startsWith("--[") && token.endsWith("]");// && token.contains("\n"); - } - - private void printIndent(Env env) { - if (TESTING_LEVEL) - sb.append("[" + env.indent + "]"); - for (int i = 0; i < env.indent; i++) { - sb.append("\t"); - } - } - - private void incIndent(Env env, String key) { - // sb.append("[i++]"); - env.indent++; - env.stack.push(key); - } - - private void changeLineOnNeed(Env env) { - if (env.changedLine <= 0) { - newline(); - env.forcedChangeLine = true; - env.changedLine = 1; - } - - } - - private void newline() { - int p = sb.length(); - while (true) { - if (p <= 0) - break; - char c = sb.charAt(p - 1); - if (c == ' ' || c == '\t') { - p--; - sb.setLength(p); - } else - break; - } - sb.append("\n"); - } - - private void forceChangeLine(Env env) { - newline(); - env.forcedChangeLine = true; - env.changedLine = 1; - } - - private String decIndent(Env env) { - env.indent--; - // if (stack.isEmpty()) return ""; - return (String) env.stack.pop(); - } - - private void addSpaceOnNeed(Env env) { - if (!env.lastType.equals(LuaTokenType.SPACE) && !".".equals(env.lastToken) && env.changedLine <= 0) { - sb.append(" "); - env.lastType = LuaTokenType.SPACE; - env.changedLine = 0; - } - } - -} -/*- - * stat ::= while exp do block end - stat ::= repeat block until exp - stat ::= if exp then block {elseif exp then block} [else block] end - stat ::= for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end - stat ::= for namelist in explist do block end - function f () body end - * - */ diff --git a/src/neoe/tools/LuaTokenType.java b/src/neoe/tools/LuaTokenType.java deleted file mode 100644 index 6a93277..0000000 --- a/src/neoe/tools/LuaTokenType.java +++ /dev/null @@ -1,5 +0,0 @@ -package neoe.tools; - -public enum LuaTokenType { - COMMENT, SPACE, IDENTIFIER, STRING, OPERATOR, -} diff --git a/src/neoe/tools/LuaTokens.java b/src/neoe/tools/LuaTokens.java deleted file mode 100644 index c1b0ef1..0000000 --- a/src/neoe/tools/LuaTokens.java +++ /dev/null @@ -1,178 +0,0 @@ -package neoe.tools; - -import java.util.Arrays; -import java.util.List; - -public class LuaTokens { - - private String txt; - private int p; - private LuaTokenType type; - - public LuaTokens(String txt) { - this.txt = txt; - this.p = 0; - } - - StringBuilder sb = new StringBuilder(); - - public Object[] next() { - if (p >= txt.length()) - return null; - - sb.setLength(0); - char c = txt.charAt(p); - if (isSpace(c)) { - type = LuaTokenType.SPACE; - sb.append(c); - p++; - char c2; - while (p < txt.length()) { - if (isSpace(c2 = txt.charAt(p))) { - sb.append(c2); - p++; - } else { - break; - } - } - return submit(type, sb.toString()); - } else if (isIdentifier(c) || (/* negtive number */c == '-' && Character.isDigit(peek(1)))) { - type = LuaTokenType.IDENTIFIER; - sb.append(c); - p++; - char c2; - while (p < txt.length()) { - if (isIdentifier(c2 = txt.charAt(p))) { - sb.append(c2); - p++; - } else { - break; - } - } - return submit(type, sb.toString()); - } else if (c == '-' && peek(1) == '-') { - type = LuaTokenType.COMMENT; - sb.append("--"); - p += 2; - int level = peekLongBrackets(); - if (level < 0) { - readUntil("\n"); - if (p < txt.length()) { - sb.setLength(sb.length() - 1); - p--; - } - } else { - readUntilLongBrackets(level); - } - - return submit(type, sb.toString()); - } else if (c == '\'' || c == '"') { - type = LuaTokenType.STRING; - sb.append(c); - p++; - while (true) { - if (p >= txt.length()) - break; - char c2 = txt.charAt(p++); - sb.append(c2); - if (c2 == c) { - break; - } else if (c2 == '\\') { - sb.append(txt.charAt(p++)); - } - } - // readUntil("" + (char) c); - return submit(type, sb.toString()); - } else { - int level = peekLongBrackets(); - if (level < 0) { - type = LuaTokenType.OPERATOR; - sb.append(c); - p++; - - while (true) { - String t = sb.toString() + (char) peek(0); - - if (longOperaters.contains(t)) { - sb.append(txt.charAt(p++)); - } else { - break; - } - } - - return submit(type, sb.toString()); - } else { - type = LuaTokenType.STRING; - readUntilLongBrackets(level); - return submit(type, sb.toString()); - } - } - } - - final static List longOperaters = Arrays.asList(new String[] { "<=", ">=", "==", "~=", "//", ">>", "<<" }); - - // private boolean isOp1(char c) { - // return "[]{}()".indexOf(c) >= 0; - // } - - private Object[] submit(LuaTokenType type, String s) { - return new Object[] { type, s }; - } - - // private boolean isOperator(char c) { - // return !isIdentifier(c) && !isSpace(c) && c != '"' && c != '\'' && !isOp1(c); - // } - - private void readUntilLongBrackets(int level) { - // sb.append(""); - - StringBuilder sb = new StringBuilder("]"); - for (int i = 0; i < level; i++) { - sb.append('='); - } - - sb.append(']'); - - readUntil(sb.toString()); - } - - private int peekLongBrackets() { - if (peek(0) == '[') { - int lv = 0; - while (peek(lv + 1) == '=') { - lv++; - } - if (peek(1 + lv) == '[') { - return lv; - } - } - return -1; - } - - private void readUntil(String s) { - int p1 = txt.indexOf(s, p); - if (p1 < 0) { - sb.append(txt.substring(p)); - p = txt.length(); - } else { - sb.append(txt.substring(p, p1 + s.length())); - p = p1 + s.length(); - } - - } - - private char peek(int i) { - if (p + i >= txt.length()) - return 0; - return txt.charAt(p + i); - } - - private boolean isIdentifier(char c) { - return Character.isDigit(c) || Character.isLetter(c) || c == '_'; - } - - private boolean isSpace(char c) { - return Character.isWhitespace(c); - } - -} diff --git a/src/neoe/util/FileIterator.java b/src/neoe/util/FileIterator.java index 5816c2e..17b6601 100644 --- a/src/neoe/util/FileIterator.java +++ b/src/neoe/util/FileIterator.java @@ -28,43 +28,6 @@ public class FileIterator implements Iterable { this.sortByName = sortByName; } - /** - * @param args - * @throws Exception - */ - public static void main(String[] args) throws Exception { - Iterable it = new FileIterator("C:/xxx"); - int total = 0; - int dircnt = 0; - int[] linecnt = new int[2]; - Map cnt = new HashMap(); - for (File f : it) { - if (f.isDirectory()) { - dircnt++; - continue; - } - total++; - String fn = f.getName(); - int p1 = fn.indexOf("."); - if (p1 > 0) { - String ext = fn.substring(p1); - Integer i = cnt.get(ext); - if (i == null) { - cnt.put(ext, 1); - } else { - cnt.put(ext, i + 1); - } - if (ext.equalsIgnoreCase(".xxx")) { - getLineCnt(f, linecnt); - } - } - - System.out.println(f.getAbsolutePath()); - - } - System.out.println(cnt); - System.out.println(linecnt[0] + "," + linecnt[1] + "," + (linecnt[1] * 100 / linecnt[0]) + "%"); - } private static int getLineCnt(File f, int[] linecnt) throws Exception { int cnt = 0;