Uses 3874K of libraries. Click here for Pure Java version (14479L/103K/343K).
1 | !752 |
2 | |
3 | sS text = [[ |
4 | Yo Spain! I said: |
5 | |
6 | "Let's do that." |
7 | |
8 | And he said |
9 | |
10 | "Yeah sure" |
11 | |
12 | And they said |
13 | |
14 | "Yeah nice" |
15 | |
16 | And we said |
17 | |
18 | "That's cool!" |
19 | ]]; |
20 | |
21 | static Color markedColor = Color.green; |
22 | static Color unmarkedColor = Color.white; |
23 | |
24 | concepts. |
25 | |
26 | concept Marking {
|
27 | S text; |
28 | new BitSet marking; |
29 | } |
30 | |
31 | static JTextPane pane, guessPane; |
32 | static Marking marking; |
33 | static Guesser guesser = new MarkLineByFirstChar; |
34 | |
35 | sinterface Guesser {
|
36 | BitSet guess(S text, BitSet initial); |
37 | } |
38 | |
39 | p-substance {
|
40 | loadAndAutoSaveConcepts(); |
41 | text = text.trim(); |
42 | marking = uniqueConcept(Marking.class, "text", text); |
43 | pane = new JTextPane; |
44 | guessPane = new JTextPane; |
45 | showFrame(hgrid( |
46 | withTitle("Your marking", pane),
|
47 | withTitle("My guess", guessPane)));
|
48 | update(); |
49 | addButtonsToWindow(pane, |
50 | textComponentDependButton(pane, jbutton("Mark quote", "mark")),
|
51 | textComponentDependButton(pane, jbutton("Unmark quote", "unmark")));
|
52 | } |
53 | |
54 | svoid mark { mark(true); }
|
55 | svoid unmark { mark(false); }
|
56 | |
57 | svoid mark(bool b) {
|
58 | int from = pane.getSelectionStart(), to = pane.getSelectionEnd(); |
59 | if (from < 0) ret; |
60 | for (int i = from; i < to; i++) |
61 | marking.marking.set(i, b); |
62 | change(); |
63 | update(); |
64 | } |
65 | |
66 | svoid update {
|
67 | showMarkedText(pane, marking.marking); |
68 | BitSet guess = guess(); |
69 | showMarkedText(guessPane, guess); |
70 | } |
71 | |
72 | static BitSet guess() {
|
73 | try {
|
74 | if (guesser != null) |
75 | ret unnull(guesser.guess(text, marking.marking)); |
76 | } catch e {
|
77 | print(e); |
78 | } |
79 | ret new BitSet; |
80 | } |
81 | |
82 | svoid showMarkedText(JTextPane pane, BitSet marking) {
|
83 | new L mtext; |
84 | Color c = unmarkedColor; |
85 | new StringBuilder buf; |
86 | for i over text: {
|
87 | Color cc = marking.get(i) ? markedColor : unmarkedColor; |
88 | if (neq(cc, c)) {
|
89 | if (nempty(buf)) |
90 | mtext.addAll(ll(c, str(buf))); |
91 | buf.setLength(0); |
92 | c = cc; |
93 | } |
94 | buf.append(text.charAt(i)); |
95 | } |
96 | if (nempty(buf)) |
97 | mtext.addAll(ll(c, str(buf))); |
98 | |
99 | // Update JTextPane with new colors, preserve selection |
100 | int from = pane.getSelectionStart(), to = pane.getSelectionEnd(); |
101 | showColoredText(pane, mtext); |
102 | pane.setSelectionStart(from); |
103 | pane.setSelectionEnd(to); |
104 | } |
105 | |
106 | sclass DummyGuesser implements Guesser {
|
107 | public BitSet guess(S text, BitSet initial) {
|
108 | BitSet bs = cloneBitSet(initial); |
109 | for (int i = 0; i < l(text); i += 2) |
110 | bs.set(i); |
111 | ret bs; |
112 | } |
113 | } |
114 | |
115 | sclass LineStartsTest implements Guesser {
|
116 | public BitSet guess(S text, BitSet initial) {
|
117 | L<Int> l = lineStartIndexes(text); |
118 | ret bitSet(l); |
119 | } |
120 | } |
121 | |
122 | sclass MarkLineByFirstChar implements Guesser {
|
123 | public BitSet guess(S text, BitSet initial) {
|
124 | L<S> lines = filterNempty(extractMarkedLines(text, initial)); |
125 | S pref = commonPrefixMulti(lines); |
126 | if (empty(pref)) ret null; |
127 | pref = substring(pref, 0, 1); |
128 | print("Prefix: " + pref);
|
129 | new BitSet bs; |
130 | for (int i : lineStartIndexes(text)) {
|
131 | S line = extractLine(text, i); |
132 | if (startsWith(line, pref)) |
133 | setBitRange(bs, i, min(l(text), smartIndexOf(text, "\n", i)+1)); |
134 | } |
135 | ret bs; |
136 | } |
137 | } |
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: | 819 / 1012 |
| Referenced in: | [show references] |