extr.py 3.0 KB

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