!7 sclass Letter { char c; Rect r; *() {} *(char *c, Rect *r) {} } p { S code = text2floatingLetters([[sclass Letter { char c; Rect r; *() {} *(char *c, Rect *r) {} }]]); new L letters; for (S line : tlft(code)) { L tok = tok_mergeInts(javaTok(line)); if (jmatch2("Char at ( \\* )", tok)) { tok = codeTokens(tok); char c = toChar(unquote(tok.get(1))); Rect r = new Rect(getInt(tok, 4), getInt(tok, 5), getInt(tok, 7), getInt(tok, 8)); print("Char " + quote(c) + " at " + r); r = translateRect(r, -10, -50); // just for fun letters.add(Letter(c, r)); } else print("Non-match? " + line); } showImage(renderLetters(letters)); } static BufferedImage renderLetters(L letters) { Rect big = mergeRects(collect(letters, 'r)); BufferedImage canvas = newBufferedImage(big.w*2, big.h*2, Color.white); for (Letter l : letters) petRender(canvas, (l.r.x-big.x)*2, (l.r.y-big.y)*2, l.c); ret canvas; }