Améliore le traitement des lignes vides dans le markdown

This commit is contained in:
Cléo Baras 2021-04-04 09:34:03 +02:00
parent 92099755a2
commit da84905424
9 changed files with 60 additions and 36 deletions

View File

@ -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}
} \\
{\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}

View File

@ -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;

View File

@ -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

View File

@ -45,6 +45,7 @@ fonctionnel et structuré.
% Livrable
\ajoutSlivrables{
\vspace{-5pt}
\begin{itemize}
\item
Maquette du projet

View File

@ -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

View File

@ -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

View File

@ -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]:

View File

@ -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

View File

@ -9,13 +9,39 @@ 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
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
self.semestre = semestre # <--
@ -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