!7 sinterface StringFunc { S get(S s); } static O in; static L markedStrings; p { if (in == null) // may have been set by hotwire client in = "create table `bla`(hello int);"; if (args.length != 0) in = loadSnippet(args[0]); S s = [[ mysqltok input find "insert" ... ";" ]]; L ll = toLinesFullTrim(s); //System.out.println(ll); // remove comments ll = map(ll, func(S s) -> S { s.replaceAll("//.*$", "").trim() }); L tok = null; for (S c : ll) { if (eq(c, "mysqltok input")) in = tok = mysqlTok((String) in); else if (c.startsWith("find")) { L pat = javaTok(c); pat.remove(0); pat.remove(0); L inp = cast in; //System.out.println("inp: " + inp); //System.out.println("pat: " + pat); in = matchTokensList(inp, pat); //System.out.println("Result: " + structure(in)); } } if (in instanceof List) { List list = cast in; markedStrings = getMarkedStrings(tok, list); markTokens(tok, list); in = join(tok); System.out.println("Markings found: " + size(list)); for (int[] ij : list) { S bla = join(tok.subList(ij[0], ij[1]+1)); System.out.println("Got: " + bla); } } } static List getMarkedStrings(L tok, L markings) { new L result; for (int i = 0; i < markings.size(); i++) result.add(join(tok.subList(markings.get(i)[0], markings.get(i)[1]))); return result; } static int size(Object o) { return ((List) o).size(); } static void markTokens(L tok, L marks) { System.out.println(tok.size()); for (int i = 0; i < tok.size(); i++) { String t = tok.get(i); if (isStartMark(i, marks)) t = "[[" + t; if (isEndMark(i, marks)) t += "]]"; tok.set(i, t); } } static boolean isStartMark(int i, L marks) { for (int[] ij : marks) if (ij[0] == i) return true; return false; } static boolean isEndMark(int i, L marks) { for (int[] ij : marks) if (ij[1] == i+1) return true; return false; }