Uses 3874K of libraries. Click here for Pure Java version (14479L/103K/343K).
!752 sS text = [[ Yo Spain! I said: "Let's do that." And he said "Yeah sure" And they said "Yeah nice" And we said "That's cool!" ]]; static Color markedColor = Color.green; static Color unmarkedColor = Color.white; concepts. concept Marking { S text; new BitSet marking; } static JTextPane pane, guessPane; static Marking marking; static Guesser guesser = new MarkLineByFirstChar; sinterface Guesser { BitSet guess(S text, BitSet initial); } p-substance { loadAndAutoSaveConcepts(); text = text.trim(); marking = uniqueConcept(Marking.class, "text", text); pane = new JTextPane; guessPane = new JTextPane; showFrame(hgrid( withTitle("Your marking", pane), withTitle("My guess", guessPane))); update(); addButtonsToWindow(pane, textComponentDependButton(pane, jbutton("Mark quote", "mark")), textComponentDependButton(pane, jbutton("Unmark quote", "unmark"))); } svoid mark { mark(true); } svoid unmark { mark(false); } svoid mark(bool b) { int from = pane.getSelectionStart(), to = pane.getSelectionEnd(); if (from < 0) ret; for (int i = from; i < to; i++) marking.marking.set(i, b); change(); update(); } svoid update { showMarkedText(pane, marking.marking); BitSet guess = guess(); showMarkedText(guessPane, guess); } static BitSet guess() { try { if (guesser != null) ret unnull(guesser.guess(text, marking.marking)); } catch e { print(e); } ret new BitSet; } svoid showMarkedText(JTextPane pane, BitSet marking) { new L mtext; Color c = unmarkedColor; new StringBuilder buf; for i over text: { Color cc = marking.get(i) ? markedColor : unmarkedColor; if (neq(cc, c)) { if (nempty(buf)) mtext.addAll(ll(c, str(buf))); buf.setLength(0); c = cc; } buf.append(text.charAt(i)); } if (nempty(buf)) mtext.addAll(ll(c, str(buf))); // Update JTextPane with new colors, preserve selection int from = pane.getSelectionStart(), to = pane.getSelectionEnd(); showColoredText(pane, mtext); pane.setSelectionStart(from); pane.setSelectionEnd(to); } sclass DummyGuesser implements Guesser { public BitSet guess(S text, BitSet initial) { BitSet bs = cloneBitSet(initial); for (int i = 0; i < l(text); i += 2) bs.set(i); ret bs; } } sclass LineStartsTest implements Guesser { public BitSet guess(S text, BitSet initial) { L<Int> l = lineStartIndexes(text); ret bitSet(l); } } sclass MarkLineByFirstChar implements Guesser { public BitSet guess(S text, BitSet initial) { L<S> lines = filterNempty(extractMarkedLines(text, initial)); S pref = commonPrefixMulti(lines); if (empty(pref)) ret null; pref = substring(pref, 0, 1); print("Prefix: " + pref); new BitSet bs; for (int i : lineStartIndexes(text)) { S line = extractLine(text, i); if (startsWith(line, pref)) setBitRange(bs, i, min(l(text), smartIndexOf(text, "\n", i)+1)); } ret bs; } }
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1005043 |
Snippet name: | Marking Stuff [save works, working on guessing] |
Eternal ID of this version: | #1005043/1 |
Text MD5: | d233f4a7b20944a435659cf7adc3566e |
Transpilation MD5: | 0270212e92142a9572da0b27f83268f5 |
Author: | stefan |
Category: | javax / a.i. |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-10-03 20:56:17 |
Source code size: | 3132 bytes / 137 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 584 / 729 |
Referenced in: | [show references] |