!7 static JLabel l; static Map consequentsMap = synchroCIMap(), precedentsMap = synchroCIMap(); static Set ignoreSet = asCISet(splitAtVerticalBar("english|englisch|german|deutsch")); p-noconsole-autoupdate { final JFrame frame = showMaximizedFrame(jscroll_verticalExtend_trackWidth(jTiledBackground(#1007195, setForeground(Color.white, setFontSize(120, l = jcenteredlabel_noToolTip()))))); final L> receivers = ll( consequentsMap_receiver(consequentsMap), precedentsMap_receiver(precedentsMap)); time "Loading" { loading { mapVoidMulti(receivers, notNulls(map prepLine(dropLast(linesOfFile(speechRecognitionLog()))))); } } tailFileLinewisePlusLastLine(speechRecognitionLog(), 100, voidfunc(S utterance) { if (empty(utterance = prepLine(trimLastLine(utterance)))) ret; print(">> " + utterance); mapVoidMulti(receivers, ll(utterance)); S answer = consequentsMap.get(utterance); if (empty(answer)) answer = precedentsMap.get(utterance); if (nempty(answer)) { utterance += "\n\n" + answer; logQuotedWithTime("guessLog", utterance); } setTitle(frame, utterance.replaceAll("\n+", " > "); setText(l, jlabel_textAsHTML_center(utterance)); printIndentUnlessEmpty(">> ", pcallAnswerMethod(utterance)); }); } sS prepLine(S s) { ret nullIfInSet(ignoreSet, unquoteAndDropAngleBracketStuff(s)); } answer { if "font size *" ret "OK" with revalidate(setFontSize(parseInt($1), l)); }