Libraryless. Click here for Pure Java version (2282L/15K).
static Producer<S> javaTokC_onReader(final Reader r) { final class X implements Producer<S> { new StringBuilder buf; // stores from "i" char c, d, e = 'x'; // just not '\0' *() { // fill c, d and e nc(); nc(); nc(); } // get next character(s) into c, d and e void nc() ctex { c = d; d = e; if (e == '\0') ret; int i = r.read(); e = i < 0 ? '\0' : (char) i; } void ncSave() { if (c != '\0') { buf.append(c); nc(); } } public S next() { // scan for whitespace while (c != '\0') { if (c == ' ' || c == '\t' || c == '\r' || c == '\n') nc(); else if (c == '/' && d == '*') { do nc(); while (c != '\0' && !(c == '*' && d == '/')); nc(); nc(); } else if (c == '/' && d == '/') { do nc(); while (c != '\0' && "\r\n".indexOf(c) < 0); } else break; } if (c == '\0') ret null; // scan for non-whitespace if (c == '\'' || c == '"') { char opener = c; ncSave(); while (c != '\0') { if (c == opener || c == '\n') { // end at \n to not propagate unclosed string literal errors ncSave(); break; } else if (c == '\\') { ncSave(); ncSave(); } else ncSave(); } } else if (Character.isJavaIdentifierStart(c)) do ncSave(); while (Character.isJavaIdentifierPart(c) || c == '\''); // for stuff like "don't" else if (Character.isDigit(c)) { do ncSave(); while (Character.isDigit(c)); if (c == 'L') ncSave(); // Long constants like 1L } else if (c == '[' && d == '[') { do ncSave(); while (c != '\0' && !(c == ']' && d == ']')); ncSave(); ncSave(); } else if (c == '[' && d == '=' && e == '[') { do ncSave(); while (c != '\0' && !(c == ']' && d == '=' && e == ']')); ncSave(); ncSave(); ncSave(); } else ncSave(); S t = buf.toString(); buf.setLength(0); ret t; } } ret new X; }
Began life as a copy of #1005977
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, sawdedvomwva, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1005981 |
Snippet name: | javaTokC_onReader - javaTokC as Producer on BufferedReader |
Eternal ID of this version: | #1005981/2 |
Text MD5: | 6e5c4fd8f60f1f97060ed886de21c8fd |
Transpilation MD5: | 747cb39971630313eb280a7268bf890e |
Author: | stefan |
Category: | javax / parsing |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-03-15 14:42:34 |
Source code size: | 2257 bytes / 80 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 574 / 648 |
Version history: | 1 change(s) |
Referenced in: | #1006654 - Standard functions list 2 (LIVE, continuation of #761) #1008762 - javaTokC_noMLS_onReader - javaTokC as Producer on BufferedReader, no multi-line strings #1027365 - javaTok_onReader - javaTok as Producer on BufferedReader |