Update insertoverlay.py

Cette révision appartient à :
Yann Salmon
2020-10-26 22:37:48 +01:00
Parent 528e8c85fa
révision dca84457c3

41
latex/insertoverlay.py Fichier normal
Voir le fichier

@@ -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""")