diff --git a/python/export_yaml_to_latex.py b/python/export_yaml_to_latex.py index baa0a15..76cf58c 100644 --- a/python/export_yaml_to_latex.py +++ b/python/export_yaml_to_latex.py @@ -1,5 +1,4 @@ - -import os +from ressource import Ressource from ressourcedocx import * import logging diff --git a/python/ressource.py b/python/ressource.py new file mode 100644 index 0000000..a4e7df3 --- /dev/null +++ b/python/ressource.py @@ -0,0 +1,99 @@ +import logging + +import pypandoc +import ruamel.yaml + +from modeles import get_modele, TemplateLatex +from officiel import DATA_ACS, get_officiel_sae_name_by_code, get_officiel_ressource_name_by_code +from ressourcedocx import caracteres_recalcitrants, remove_ligne_vide + + +class Ressource(): + """Modélise une ressource lorsqu'elle est extraite d'un yaml""" + __LOGGER = logging.getLogger(__name__) + + def __init__(self, fichieryaml): + with open(fichieryaml, "r", encoding="utf8") as fid: + yaml = ruamel.yaml.YAML() + try: + self.ressource = yaml.load(fid.read()) + except: + Ressource.__LOGGER.warning(f"Pb de chargement de {fichieryaml}") + + def str_to_latex(self, modele="pn/modele_ressource.tex"): + """Génère le code latex décrivant la ressource""" + modlatex = get_modele(modele) #"pn/modele_ressource.tex") + + + if self.ressource["code"] == "R107": + print("ici") + + # Préparation des ac + ajoutac = "\\ajoutac{%s}{%s}" + compRT = [] + for accomp in self.ressource["acs"]: + comps = [] + + for no_ac in range(len(self.ressource["acs"][accomp])): # les ac de la comp + code_ac = self.ressource["acs"][accomp][no_ac] + comps.append( ajoutac % (code_ac, DATA_ACS[accomp][code_ac]) ) + compRT.append("\n".join(comps)) + + # Préparation des sae + ajoutsaes = "\\ajoutsae{%s}{%s}" + saesRT = [] + for (i, sae) in enumerate(self.ressource["sae"]): # in range(len(self.apprentissages)): + saesRT.append(ajoutsaes % (sae, get_officiel_sae_name_by_code(sae))) + saes = "\n".join(saesRT) + + ajoutprerequis = "\\ajoutprerequis{%s}{%s}" + prerequis = "" + if self.ressource["prerequis"] == "Aucun": + prerequis = "" + else: + liste = [] + for (no, mod) in enumerate(self.ressource["prerequis"]): + liste.append(ajoutprerequis % (mod, get_officiel_ressource_name_by_code(mod))) + prerequis = "\n".join(liste) + + # préparation du contexte + contexte = self.ressource["contexte"] + contexte = contexte.replace("\n", "\n\n").replace("\n" * 4, + "\n") # corrige les suppressions de ligne à la relecture du yaml + + output = pypandoc.convert_text(contexte, 'tex', format='md', + extra_args=['--atx-headers']) + output = output.replace("\r\n", "\n") + contexte = caracteres_recalcitrants(output) + contexte = remove_ligne_vide(contexte) + + # contexte = remove_ligne_vide(contexte) + # préparation du contenu + + contenu = self.ressource["contenu"] #supprime les passages à la ligne + contenu = contenu.replace("\n", "\n\n").replace("\n"*4, "\n") # corrige les suppressions de ligne à la relecture du yaml + + output = pypandoc.convert_text(contenu, 'tex', format='md', + extra_args=['--atx-headers']) + output = output.replace("\r\n", "\n") + contenu = caracteres_recalcitrants(output) + contenu = remove_ligne_vide(contenu) + + chaine = "" + chaine = TemplateLatex(modlatex).substitute(code=self.ressource["code"], + nom=self.ressource["nom"], + heures_formation=self.ressource["heures_formation"], + heures_tp=self.ressource["heures_tp"], + compRT1=compRT[0], + compRT2=compRT[1], + compRT3=compRT[2], + saes=saes, + motscles=caracteres_recalcitrants(self.ressource["motscles"]), + prerequis=prerequis, + contexte=caracteres_recalcitrants(contexte), + contenu=contenu, + ) + # chaine = chaine.replace("&", "\&") + + chaine = chaine.replace("\\tightlist\n", "") + return chaine \ No newline at end of file diff --git a/python/ressourcedocx.py b/python/ressourcedocx.py index bbcdb8c..e1662c0 100644 --- a/python/ressourcedocx.py +++ b/python/ressourcedocx.py @@ -4,7 +4,6 @@ from modeles import * from officiel import supprime_accent_espace, get_code_from_nom import ruamel.yaml from ruamel.yaml.scalarstring import FoldedScalarString as folded -import pypandoc __LOGGER = logging.getLogger(__name__) @@ -339,95 +338,6 @@ def nettoie_contenus(r): r.contenu = contenu -class Ressource(): - """Modélise une ressource lorsqu'elle est extraite d'un yaml""" - __LOGGER = logging.getLogger(__name__) - - def __init__(self, fichieryaml): - with open(fichieryaml, "r", encoding="utf8") as fid: - yaml = ruamel.yaml.YAML() - try: - self.ressource = yaml.load(fid.read()) - except: - Ressource.__LOGGER.warning(f"Pb de chargement de {fichieryaml}") - - def str_to_latex(self, modele="pn/modele_ressource.tex"): - """Génère le code latex décrivant la ressource""" - modlatex = get_modele(modele) #"pn/modele_ressource.tex") - - - if self.ressource["code"] == "R107": - print("ici") - - # Préparation des ac - ajoutac = "\\ajoutac{%s}{%s}" - compRT = [] - for accomp in self.ressource["acs"]: - comps = [] - - for no_ac in range(len(self.ressource["acs"][accomp])): # les ac de la comp - code_ac = self.ressource["acs"][accomp][no_ac] - comps.append( ajoutac % (code_ac, DATA_ACS[accomp][code_ac]) ) - compRT.append("\n".join(comps)) - - # Préparation des sae - ajoutsaes = "\\ajoutsae{%s}{%s}" - saesRT = [] - for (i, sae) in enumerate(self.ressource["sae"]): # in range(len(self.apprentissages)): - saesRT.append(ajoutsaes % (sae, get_officiel_sae_name_by_code(sae))) - saes = "\n".join(saesRT) - - ajoutprerequis = "\\ajoutprerequis{%s}{%s}" - prerequis = "" - if self.ressource["prerequis"] == "Aucun": - prerequis = "" - else: - liste = [] - for (no, mod) in enumerate(self.ressource["prerequis"]): - liste.append(ajoutprerequis % (mod, get_officiel_ressource_name_by_code(mod))) - prerequis = "\n".join(liste) - - # préparation du contexte - contexte = self.ressource["contexte"] - contexte = contexte.replace("\n", "\n\n").replace("\n" * 4, - "\n") # corrige les suppressions de ligne à la relecture du yaml - - output = pypandoc.convert_text(contexte, 'tex', format='md', - extra_args=['--atx-headers']) - output = output.replace("\r\n", "\n") - contexte = caracteres_recalcitrants(output) - contexte = remove_ligne_vide(contexte) - - # contexte = remove_ligne_vide(contexte) - # préparation du contenu - - contenu = self.ressource["contenu"] #supprime les passages à la ligne - contenu = contenu.replace("\n", "\n\n").replace("\n"*4, "\n") # corrige les suppressions de ligne à la relecture du yaml - - output = pypandoc.convert_text(contenu, 'tex', format='md', - extra_args=['--atx-headers']) - output = output.replace("\r\n", "\n") - contenu = caracteres_recalcitrants(output) - contenu = remove_ligne_vide(contenu) - - chaine = "" - chaine = TemplateLatex(modlatex).substitute(code=self.ressource["code"], - nom=self.ressource["nom"], - heures_formation=self.ressource["heures_formation"], - heures_tp=self.ressource["heures_tp"], - compRT1=compRT[0], - compRT2=compRT[1], - compRT3=compRT[2], - saes=saes, - motscles=caracteres_recalcitrants(self.ressource["motscles"]), - prerequis=prerequis, - contexte=caracteres_recalcitrants(contexte), - contenu=contenu, - ) - # chaine = chaine.replace("&", "\&") - - chaine = chaine.replace("\\tightlist\n", "") - return chaine def caracteres_recalcitrants(contenu): contenu = contenu.replace("è", "è").replace("’", "'").replace("é", "é")