Fichiers
typo-cpge/latex/conversion.py

70 lignes
2.5 KiB
Python
Brut Vue normale Historique

import os, shutil
2021-02-07 21:24:57 +01:00
def extraire_caml(nf_tex, mlref, nf_texo, tag) :
2022-02-20 12:51:14 +01:00
nf_tex = nf_tex.replace("file://", "")
nf_ml = os.path.join(os.path.dirname(nf_tex), mlref)
2022-02-20 12:51:14 +01:00
nf_texo = nf_texo.replace("file://", "")
2021-02-07 21:24:57 +01:00
output_tex = open(nf_texo, "w")
output_ml = open(nf_ml, "w")
incode = False
nomfonc = ""
2022-02-20 12:51:14 +01:00
complement = None
compteursNoms = {}
def setNom(s) :
if s not in compteursNoms :
compteursNoms[s] = 0
return s
else :
compteursNoms[s] += 1
return "{}__{}".format(s, compteursNoms[s])
2021-02-07 21:24:57 +01:00
for l in open(nf_tex) :
lstrip = l.strip()
2022-02-20 12:51:14 +01:00
if lstrip.startswith(r"\begin{"+tag+"}") :
2021-02-07 21:24:57 +01:00
incode = True
nomfonc = ""
2022-02-20 12:51:14 +01:00
complement = None
if "[" in lstrip :
complement = lstrip.split("[")[1].split("]")[0]
2021-02-07 21:24:57 +01:00
continue
if incode :
2022-02-20 12:51:14 +01:00
if nomfonc == "" :
if lstrip == "" :
continue
if "let" in lstrip :
nomfonc = l[4:]
if nomfonc.startswith("rec ") :
nomfonc = nomfonc[4:]
nomfonc = nomfonc.split()[0]
nomfonc = setNom(nomfonc)
2022-02-20 12:51:14 +01:00
else :
nomfonc = setNom("anon")
2021-02-07 21:24:57 +01:00
output_ml.write("(*** " + nomfonc + " ***)\n")
if lstrip == r"\end{"+tag+"}" :
output_ml.write("(*** " + nomfonc + "_fin ***)\n\n")
2022-02-20 12:51:14 +01:00
if complement is not None :
output_tex.write(r"\inputcaml["+nomfonc+"]{"+ mlref + "}["+complement+"]\n")
else :
output_tex.write(r"\inputcaml["+nomfonc+"]{"+ mlref + "}\n")
2021-02-07 21:24:57 +01:00
incode = False
continue
output_ml.write(l)
else :
output_tex.write(l)
2018-02-21 19:12:43 +01:00
def caml(s, start=0) :
try :
pos_let = s.index("\nlet", start)
fin = s.index(r";;", pos_let)
print(s[pos_let:fin+3])
if s[pos_let+4:].startswith(" rec") :
delta = 5
else :
delta = 0
pos_nom = s.index(" ", pos_let + delta) + 1
fin_nom = s.index(" ", pos_nom)
nom = s[pos_nom:fin_nom]
print(nom)
news = s[:pos_let] + "(*** " + nom + " ***)" + s[pos_let:fin+3] + "(*** " + nom + "_fin ***)\n" + s[fin+3:]
return caml(news, fin + 3 + len("(*** " + nom + " ***)")+ len("(*** " + nom + "_fin ***)\n"))
except ValueError :
return s