From da8490542465904fd37717a438af61f7ffdec346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20Baras?= Date: Sun, 4 Apr 2021 09:34:03 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20le=20traitement=20des=20lignes?= =?UTF-8?q?=20vides=20dans=20le=20markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- latex/modeles/tableau_ressource.tex | 30 ++++++++++--------- latex/saes/SAE12.tex | 1 + latex/saes/SAE14.tex | 1 + latex/saes/SAE21.tex | 1 + latex/saes/SAE22.tex | 1 + latex/saes/SAE23.tex | 1 + python/export_yaml_to_latex.py | 4 +-- python/ressource.py | 12 ++++---- python/ressourcedocx.py | 45 ++++++++++++++++++++--------- 9 files changed, 60 insertions(+), 36 deletions(-) diff --git a/latex/modeles/tableau_ressource.tex b/latex/modeles/tableau_ressource.tex index f6da34a..cd45e4b 100644 --- a/latex/modeles/tableau_ressource.tex +++ b/latex/modeles/tableau_ressource.tex @@ -10,28 +10,30 @@ \setlength{\extrarowheight}{2pt} % Marge des lignes % 1er tableau : Nom/Code/Heures -\begin{tabular}[t]{|P|Q|P|Q|} +\begin{tabular}[t]{|P|Q|V|} \hline % 1ère ligne - {\bfseries Ressource} - & \multicolumn{3}{l|}{ - \xdef\rescode{\csname Rcode\CODE\endcsname} - \hypertarget{res:\rescode}{\bfseries \csname Rname\CODE\endcsname} - } \\ + \xdef\rescode{\csname Rcode\CODE\endcsname} + {\bfseries Ressource \rescode} + & \multicolumn{2}{l|}{\hypertarget{res:\rescode}{\bfseries \csname Rname\CODE\endcsname}} + \\ \hline % 2ème ligne - {\bfseries Code} - & \csname Rcode\CODE\endcsname - & {\bfseries Semestre} - & \csname Rsem\CODE\endcsname \\ + %{\bfseries Code} + %& \csname Rcode\CODE\endcsname + %& + {\bfseries Semestre} + & \multicolumn{2}{l|}{\csname Rsem\CODE\endcsname} \\ \hline % 3ème ligne Heures %{ \setlength{\extrarowheight}{0pt} % \begin{tabular}[t]{@{}Q@{}} \bfseries Heures de formation \\ \bfseries encadrées \end{tabular} %} \hline +{\bfseries Heures} +& {\bfseries Formation encadrée} -& {\csname Rtraining\CODE\endcsname}h -& % {\bfseries dont heures de TP} - {\bfseries dont TP} -& {\csname Rtp\CODE\endcsname}h \\ +& {\csname Rtraining\CODE\endcsname}h, dont {\csname Rtp\CODE\endcsname}h de TP \\ +%& % {\bfseries dont heures de TP} +% {\bfseries dont TP} +%& {\csname Rtp\CODE\endcsname}h \\ \hline \end{tabular} diff --git a/latex/saes/SAE12.tex b/latex/saes/SAE12.tex index f841ec1..8663563 100644 --- a/latex/saes/SAE12.tex +++ b/latex/saes/SAE12.tex @@ -47,6 +47,7 @@ stable. % Livrable \ajoutSlivrables{ +\vspace{-5pt} \begin{itemize} \item Schéma réseau annoté avec le plan d'adressage et les services; diff --git a/latex/saes/SAE14.tex b/latex/saes/SAE14.tex index 74e50d3..173a438 100644 --- a/latex/saes/SAE14.tex +++ b/latex/saes/SAE14.tex @@ -47,6 +47,7 @@ en mesurant l'importance et la portée des contenus qu'il diffuse % Livrable \ajoutSlivrables{ +\vspace{-5pt} \begin{itemize} \item dossier ou rapport d'étude diff --git a/latex/saes/SAE21.tex b/latex/saes/SAE21.tex index 072c8b7..23f4e60 100644 --- a/latex/saes/SAE21.tex +++ b/latex/saes/SAE21.tex @@ -45,6 +45,7 @@ fonctionnel et structuré. % Livrable \ajoutSlivrables{ +\vspace{-5pt} \begin{itemize} \item Maquette du projet diff --git a/latex/saes/SAE22.tex b/latex/saes/SAE22.tex index 6f3e9c2..5622526 100644 --- a/latex/saes/SAE22.tex +++ b/latex/saes/SAE22.tex @@ -41,6 +41,7 @@ présenter sous forme d'un bilan à un client ou un collaborateur. % Livrable \ajoutSlivrables{ +\vspace{-5pt} \begin{itemize} \item Rapport écrit diff --git a/latex/saes/SAE23.tex b/latex/saes/SAE23.tex index bbb11c2..de6270e 100644 --- a/latex/saes/SAE23.tex +++ b/latex/saes/SAE23.tex @@ -55,6 +55,7 @@ informatique pour le compte de son entreprise. % Livrable \ajoutSlivrables{ +\vspace{-5pt} \begin{itemize} \item Codes informatiques du site Web fonctionnel et dynamique diff --git a/python/export_yaml_to_latex.py b/python/export_yaml_to_latex.py index 50f36f7..9be42a6 100644 --- a/python/export_yaml_to_latex.py +++ b/python/export_yaml_to_latex.py @@ -53,7 +53,7 @@ output1 = pypandoc.convert_text(temp1, 'tex', format='md', print("ici") # Export latex des ressources -if False: +if True: for sem in ressources: for r in ressources[sem]: @@ -64,7 +64,7 @@ if False: print(f"Export de {fichierlatex} ") # Export latex des sae -if False: +if True: for sem in saes: for s in saes[sem]: diff --git a/python/ressource.py b/python/ressource.py index 2224b1b..6d3978d 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -145,7 +145,6 @@ class SAE(): descriptif = "" SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de description") else: - descriptif = descriptif.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml descriptif = md_to_latex(descriptif) # préparation des livrables @@ -154,7 +153,6 @@ class SAE(): livrables = "" SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de livrables") else: - livrables = livrables.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml livrables = md_to_latex(livrables) chaine = "" @@ -198,7 +196,6 @@ class ExempleSAE(): description = "" ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de description") else: - description = description.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml description = md_to_latex(description) # préparation de la forme @@ -207,7 +204,6 @@ class ExempleSAE(): formes = "" ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de formes") else: - formes = formes.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml formes = md_to_latex(formes) # préparation de la problématique @@ -216,7 +212,6 @@ class ExempleSAE(): problematique = "" ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de problematique") else: - problematique = problematique.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml problematique = md_to_latex(problematique) # préparation des modalites @@ -225,7 +220,6 @@ class ExempleSAE(): modalite = "" ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de modalite") else: - modalite = modalite.replace("\n", "\n\n").replace("\n" * 4, "\n") # corrige les suppressions de ligne à la relecture du yaml modalite = md_to_latex(modalite) chaine = "" @@ -242,9 +236,15 @@ class ExempleSAE(): def md_to_latex(contenu): """Réalise la conversion markdown to latex avec pypandoc""" + contenu = contenu.replace("\n", "\n\n") # corrige les suppressions de ligne à la relecture du yaml + contenu = pypandoc.convert_text(contenu, 'tex', format='md', extra_args=['--atx-headers']) contenu = contenu.replace("\r\n", "\n") contenu = caracteres_recalcitrants(contenu) contenu = remove_ligne_vide(contenu) + lignes = contenu.split("\n") # pour debug + + if contenu.startswith("\\begin{itemize}"): + contenu = "\\vspace{-5pt}\n" + contenu # ajout d'un offset en cas de liste à puces return contenu \ No newline at end of file diff --git a/python/ressourcedocx.py b/python/ressourcedocx.py index 17b4162..9dabdd4 100644 --- a/python/ressourcedocx.py +++ b/python/ressourcedocx.py @@ -9,12 +9,38 @@ from tools import caracteres_recalcitrants __LOGGER = logging.getLogger(__name__) - -class RessourceDocx(): - """Classe modélisant les ressources, lorsqu'elles sont extraites du docx""" +class Docx(): + """Classe de base pour les ressources/saé/exemples du docx""" def __init__(self, nom, brut): self.nom = nom - self.brut = brut # les données brutes de la ressource + self.brut = brut # les données brutes de la ressource + + def charge_ac(self, apprentissages): + self.apprentissages = apprentissages + + def __str__(self): + print(self.nom + " " + self.code) + + def dico_to_yaml(self, dico): + if self.code == "R108": + print("ici") + output = ruamel.yaml.dump(dico, Dumper=ruamel.yaml.RoundTripDumper, + allow_unicode=True, width=100) + # Purge les lignes vides en trop + lignes = output.split("\n") + lignes_finales = [] + for (i, ligne) in enumerate(lignes): + if ligne.rstrip() == "": + if i != len(lignes)-1 and lignes[i+1].rstrip() == "": + lignes_finales.append(ligne) # ajoute la ligne si la suivante n'est pas vide + else: + lignes_finales.append(ligne) + output = "\n".join(lignes_finales) + lignes = output.split("\n") # pour vérif + return output + +class RessourceDocx(Docx): + """Classe modélisant les ressources, lorsqu'elles sont extraites du docx""" def charge_informations(self, code, semestre, heures_encadrees, tp, sae, prerequis, description, mots): self.code = code @@ -28,12 +54,6 @@ class RessourceDocx(): self.contenu = None self.mots = mots - def charge_ac(self, apprentissages): - self.apprentissages = apprentissages - - def __str__(self): - print(self.nom + " " + self.code) - def to_yaml(self): """Exporte la ressource en yaml""" dico = {"nom": self.nom, @@ -48,10 +68,7 @@ class RessourceDocx(): "contenu": folded(self.contenu), "motscles": self.mots if self.mots else "" } - output = ruamel.yaml.dump(dico, Dumper=ruamel.yaml.RoundTripDumper, - allow_unicode=True, width=100) - output = output.replace("\n\n\n", "\n\n") - return output + return self.dico_to_yaml(dico) def nettoie_champ_heure(champ): try: # champ contenant uniquement un nbre d'heure