static S replaceOrDropCodeTokensUsingMap(S s, SS map) { ret join(replaceOrDropCodeTokensUsingMap(javaTok(s), map); } static LS replaceOrDropCodeTokensUsingMap(LS tok, SS map) { LS out = emptyList(tok); for i over tok: { if (odd(i)) out.add(tok.get(i)); else { S val = lookupOrKeep(map, tok.get(i)); if (nempty(val)) out.add(val); else { out.add(ai_mergeWhitespace(last(out), tok.get(i+1))); i++; } } } ret out; } sS replaceOrDropCodeTokensUsingMap(SS map, S s) { ret replaceOrDropCodeTokensUsingMap(s, map); }