extr.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!./venv/bin/python
  2. import sys,pypandoc,os,re,subprocess
  3. #
  4. def star_sec(l):
  5. it=iter(L)
  6. ret=[]
  7. passed= False
  8. for x in it:
  9. if "begin{document" in x:
  10. passed= True
  11. if passed and "section[" in x:
  12. s=x
  13. while "label" not in x:
  14. x=next(it)
  15. s=s+" "+x
  16. if not "}" in s:
  17. x=next(it)
  18. s=s+x
  19. k=s.find("]")
  20. r=(s[:k]+"}").replace("[","*{")+" "
  21. ret.append(r)
  22. ret.append("\n")
  23. else:
  24. ret.append(x)
  25. return ret
  26. #
  27. #-----------------------------------------------------------------------
  28. with open("data_titre") as f:
  29. lt=f.readlines()
  30. if (llt:=len(lt))!=6:
  31. m=f"\nle fichier data-titre a {llt} lignes (il en faut 6)"
  32. raise Exception(m)
  33. fich=lt[0].strip()
  34. le_titre="\\titre{"+"}{".join([x.replace("\n","") for x in lt[1:]])+"}"+"\n"
  35. print(le_titre)
  36. #
  37. template="../tpl.tex"
  38. #
  39. exten=fich.split(".")[-1]
  40. if exten=="docx" or exten=="odt":
  41. futurTex= fich.replace(exten,"tex")
  42. else:
  43. s=f"\n{fich} : extension incorrecte"
  44. raise Exception(s)
  45. #répertoire pour les images
  46. images= fich.split(".")[0]+"-media"
  47. print("Répertoire des images : ",images)
  48. if not os.path.isdir(images):
  49. os.mkdir(images)
  50. # conversion en latex
  51. #extra_args= ["-s",f"--extract-media={images}"]
  52. extra_args= ["-s",f"--template={template}",f"--extract-media={images}"]
  53. #extra_args= ["-s",f"--template={template}",f"--extract-media={images}",
  54. # f"--lof=true"]
  55. L = pypandoc.convert_file(fich, 'tex',
  56. extra_args=extra_args).splitlines()
  57. #-----------------------------------------------------------------------
  58. # section -> section*
  59. rechsec= r"section[{\[]"
  60. rechsecc=re.compile(rechsec)
  61. # pour modifier le latex en changeant le chemin vers les images.
  62. if exten=="docx":
  63. rechgra=r"includegraphics\[.*\]{media.*}"
  64. repPath=("media",f"{images}/word/media")
  65. elif exten=="odt":
  66. rechgra=r"includegraphics\[.*\]{Pictures.*}"
  67. repPath=("Pictures",f"{images}/Pictures")
  68. rechgrac=re.compile(rechgra)
  69. with open(futurTex,"w") as f:
  70. L1=star_sec(L)
  71. rp0,rp1= repPath
  72. for l in L1:
  73. while (q:=rechgrac.search(l)) != None:
  74. l=l.replace(rp0,rp1)
  75. l=l.replace("\\begin{quote}","")
  76. l=l.replace("\\end{quote}","")
  77. f.write(l)
  78. f.write("\n")
  79. if "pagestyle" in l:
  80. f.write(le_titre)
  81. #---fin d'éciture du fichier tex
  82. #
  83. # lualatex, 2 fois:
  84. for i in {1,2}:
  85. subprocess.run(["/usr/bin/lualatex", futurTex])
  86. #--- fin