def code(s) : try : debut = s.index(r"\begin{tabbing}") fin = s.index(r"\end{tabbing}") pos_let = s.index("let", debut) if s[pos_let+3:].startswith(" rec") : pos_let = pos_let + 4 pos_nom = s.index(" ", pos_let) + 1 fin_nom = s.index(" ", pos_nom) nom = s[pos_nom:fin_nom] repl = r"\lstinputcaml[linerange="+nom+"-"+nom+"_fin]{ccp2004.ml}\n" news = s[:debut] + repl + s[fin + len(r"\end{tabbing}"):] return code(news) except ValueError : return s 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