Update insertoverlay.py
Cette révision appartient à :
41
latex/insertoverlay.py
Fichier normal
41
latex/insertoverlay.py
Fichier normal
@@ -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""")
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur