// a must be trimmed sS replaceLine_keepingPadding(S text, S a, S b) { LS lines = lines(text); bool change = false; for i over lines: { S s = lines.get(i); S trimmed = trim(s); if (eqic(trimmed, a)) { int idx = indexOf(s, trimmed); lines.set(i, replaceSubstring(s, idx, idx+l(trimmed), b)); set change; } } ret change ? lines_possiblyRTrim(text, lines) : text; }