Peter Otten wrote: > Changing numbers to make room for a new footnote is not much harder (but > less convenient as you have to repeat it for every new footnote): > >>>> def replace(match, n=2): > ... index = int(match.group(1)) > ... if index >= n: > ... index += 1 > ... return "[{}]".format(index) > ... >>>> print(re.compile(r"\[(\d+)\]").sub(replace, text)) > blah blah blah [1]_ and blah blah blah [3]_. > blah blah [4]_ blah ... blah blah > blah blah [1000]_. > > .. [1] fe > .. [3] fi > .. [4] fo > ... > .. [1000] fum
Those who remember the old basic dialects might [1]_ like $ cat insert_footnote_basic.py #!/usr/bin/env python3 import re import sys def step(start, delta): n = start while True: yield n n += delta def insert_footnote(text): lookup = {} steps = step(10, 10) def replace(match): index = int(match.group(1)) try: new_index = lookup[index] except KeyError: new_index = lookup[index] = next(steps) return "[{}]".format(new_index) return re.compile(r"\[(\d+)\]").sub(replace, text) if __name__ == "__main__": sys.stdout.write( insert_footnote(sys.stdin.read()) ) $ cat sample.rst blah blah blah [10]_ and blah blah blah [20]_. [21] this is new blah blah [30]_ blah ... blah blah blah blah [9990]_. .. [10] fe .. [20] fi .. [21] yes it is .. [30] fo ... .. [9990] fum $ ./insert_footnote_basic.py < sample.rst blah blah blah [10]_ and blah blah blah [20]_. [30] this is new blah blah [40]_ blah ... blah blah blah blah [50]_. .. [10] fe .. [20] fi .. [30] yes it is .. [40] fo ... .. [50] fum $ .. [1] or run away screaming ;) -- https://mail.python.org/mailman/listinfo/python-list