Améliore le traitement des lignes vides dans le markdown
This commit is contained in:
parent
92099755a2
commit
da84905424
@ -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}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -45,6 +45,7 @@ fonctionnel et structuré.
|
||||
|
||||
% Livrable
|
||||
\ajoutSlivrables{
|
||||
\vspace{-5pt}
|
||||
\begin{itemize}
|
||||
\item
|
||||
Maquette du projet
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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]:
|
||||
|
||||
|
@ -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
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user