diff --git a/latex/insertoverlay.py b/latex/insertoverlay.py new file mode 100644 index 0000000..d4f527c --- /dev/null +++ b/latex/insertoverlay.py @@ -0,0 +1,41 @@ +import re +import sys + +p = re.compile("<(?:article:0\|)?((?:[0-9]|\.|,|-)*)>") + +def extract(s): + res = set() + for spec in p.findall(s) : + for comma in spec.split(",") : + res |= set(float(x) for x in comma.split("-") if x) + return res + +def sub(s, newi): + m = p.search(s) + if m is None : + return s + else : + return s[:m.start(1)] + ",".join("-".join(str(newi[float(x)]) if x else "" for x in comma.split("-")) for comma in m.group(1).split(",")) + sub(s[m.end(1):], newi) + return s + +def do_file(fn, start=0) : + ls = open(fn, "r+").readlines()[start:] + for k in range(len(ls)) : + if r"\end{frame}" in ls[k] : + ls = ls[:k] + break + xs = set.union(*[extract(l) for l in ls]) + # some integer overlays may not be referred to (especially 1), so we add them + xs |= set(range(1, int(max(xs)))) + newi = dict(zip(sorted(xs), range(len(xs)+1)[1:])) + print(newi) + for l in ls: + sys.stdout.write(sub(l, newi)) + +if __name__ == "__main__" : + if len(sys.argv) > 1 : + do_file(sys.argv[1], int(sys.argv[2]) if len(sys.argv) > 2 else 0) + else : + print("""Give filename as 1st parameter and, optionaly, starting line number as 2nd. + Program will stop when encountering \\end{frame}. + Based on https://tex.stackexchange.com/a/139498""") \ No newline at end of file