Libraryless. Click here for Pure Java version (3878L/26K/71K).
!636 !sf !multi-line strings !1000635 // stringfunc { !723 // S, O etc. !1000636 // compare strings with == !1000482 // quick cast !JavaTok !class _javax 19 interface StringFunc { S get(S s); } main { static O in; psvm { if (in == null) // may have been set by hotwire client in = [[CREATE TABLE `demotable2` ( `dt2_a` int(11) NOT NULL, `dt2_b` date NOT NULL);]]; if (args.length != 0) in = loadSnippet(args[0]); S s = [[ example output: "a, b" mysqltok input find backquoted drop first fix duplicates fix output ]]; L<S> ll = toLinesFullTrim(s); //System.out.println(ll); ll = map(ll, stringfunc { s.replaceAll("//.*$", "").trim() }); //System.out.println(ll); O expectedOut = null; for (S c : ll) { if (c.startsWith("example output:")) expectedOut = unquote(c.substring("example output:".length()).trim()); else if (c == "mysqltok input") in = mysqlTok((String) in); else if (c == "find backquoted") { L<S> inp = cast in; new L<S> l; for (int i = 1; i < inp.size(); i += 2) if (inp.get(i).startsWith("`")) l.add(mysqlUnquote(inp.get(i))); in = l; //System.out.println("Result: " + in); } else if (c == "fix output") { if (in instanceof List && expectedOut instanceof String) in = join(", ", in); } else if (c == "drop first") { if (in instanceof List) in = ((List) in).subList(1, ((List) in).size()); } else if (c == "fix duplicates") { new L<S> list; new (Tree)Set<S> set; L<S> l = cast in; for (int i = 0; i < l.size(); i++) if (!set.contains(l.get(i))) { set.add(l.get(i)); list.add(l.get(i)); } in = list; } } if (expectedOut != null) System.out.println("Expected: " + expectedOut); System.out.println("Got: " + in); if (expectedOut != null && expectedOut.equals(in)) print "OK!" } static S join(S glue, O o) { return join(glue, (L<S>) o); } !include #2000507 // original join function // returns a list of the matched tokens static L<S> matchTokensList(L<S> inp, L<S> pat) { new L<S> list; for (int i = 1; i+pat.size()-3 < inp.size(); i += 2) { S result = matchTokens_step(inp, pat, i); if (result != null) list.add(result); } return list; } // returns // -token matched for * // -"" on match without * // -null on non-match static String matchTokens(L<S> inp, L<S> pat) { for (int i = 1; i+pat.size()-3 < inp.size(); i += 2) { S result = matchTokens_step(inp, pat, i); if (result != null) return result; } return null; } static String matchTokens_step(L<S> inp, L<S> pat, int i) { S result = ""; for (int j = 1; j < pat.size(); j += 2) if (pat.get(j).equals("*")) result = inp.get(i+j-1); else { String found = inp.get(i + j - 1); String expected = pat.get(j); if (!found.equals(expected)) return null; } return result; } static L<S> map(L<S> l, StringFunc f) { new L<S> l2; for (S s : l) l2.add(f.get(s)); return l2; } static S mysqlUnquote(S s) { return unquote("\"" + s.substring(1, s.length()-1) + "\""); } }
Began life as a copy of #1000634
download show line numbers debug dex old transpilations
Travelled to 17 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, jtubtzbbkimh, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, teubizvjbppd, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1000648 |
Snippet name: | Find field names in MySQL "create table" |
Eternal ID of this version: | #1000648/1 |
Text MD5: | 6e854ff070dd1489e468a999bc2011af |
Transpilation MD5: | 51b2f0bd838eae270eff6b8aa2713620 |
Author: | stefan |
Category: | |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2015-08-21 01:05:19 |
Source code size: | 3564 bytes / 134 lines |
Pitched / IR pitched: | No / Yes |
Views / Downloads: | 787 / 1336 |
Referenced in: | [show references] |