def before_after(string, start = 0): source = peekable(iter(string.split("\n"))) before = 0 after = 0 for line in shift_iter(source, start): before += 1 for line in source: after += 1 return (before, after)
def shift(source, depth = tab_length): initial = 0 start = 0 source = peekable(lines(source)) result = "\n".join(shift_iter(source, initial, start, tab_length, depth)) return result