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
|
\setlength{\extrarowheight}{2pt} % Marge des lignes
|
||||||
|
|
||||||
% 1er tableau : Nom/Code/Heures
|
% 1er tableau : Nom/Code/Heures
|
||||||
\begin{tabular}[t]{|P|Q|P|Q|}
|
\begin{tabular}[t]{|P|Q|V|}
|
||||||
\hline % 1ère ligne
|
\hline % 1ère ligne
|
||||||
{\bfseries Ressource}
|
|
||||||
& \multicolumn{3}{l|}{
|
|
||||||
\xdef\rescode{\csname Rcode\CODE\endcsname}
|
\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
|
\hline % 2ème ligne
|
||||||
{\bfseries Code}
|
%{\bfseries Code}
|
||||||
& \csname Rcode\CODE\endcsname
|
%& \csname Rcode\CODE\endcsname
|
||||||
& {\bfseries Semestre}
|
%&
|
||||||
& \csname Rsem\CODE\endcsname \\
|
{\bfseries Semestre}
|
||||||
|
& \multicolumn{2}{l|}{\csname Rsem\CODE\endcsname} \\
|
||||||
\hline % 3ème ligne Heures
|
\hline % 3ème ligne Heures
|
||||||
%{ \setlength{\extrarowheight}{0pt}
|
%{ \setlength{\extrarowheight}{0pt}
|
||||||
% \begin{tabular}[t]{@{}Q@{}} \bfseries Heures de formation \\ \bfseries encadrées \end{tabular}
|
% \begin{tabular}[t]{@{}Q@{}} \bfseries Heures de formation \\ \bfseries encadrées \end{tabular}
|
||||||
%}
|
%}
|
||||||
\hline
|
\hline
|
||||||
|
{\bfseries Heures}
|
||||||
|
&
|
||||||
{\bfseries Formation encadrée}
|
{\bfseries Formation encadrée}
|
||||||
& {\csname Rtraining\CODE\endcsname}h
|
& {\csname Rtraining\CODE\endcsname}h, dont {\csname Rtp\CODE\endcsname}h de TP \\
|
||||||
& % {\bfseries dont heures de TP}
|
%& % {\bfseries dont heures de TP}
|
||||||
{\bfseries dont TP}
|
% {\bfseries dont TP}
|
||||||
& {\csname Rtp\CODE\endcsname}h \\
|
%& {\csname Rtp\CODE\endcsname}h \\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ stable.
|
|||||||
|
|
||||||
% Livrable
|
% Livrable
|
||||||
\ajoutSlivrables{
|
\ajoutSlivrables{
|
||||||
|
\vspace{-5pt}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Schéma réseau annoté avec le plan d'adressage et les services;
|
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
|
% Livrable
|
||||||
\ajoutSlivrables{
|
\ajoutSlivrables{
|
||||||
|
\vspace{-5pt}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
dossier ou rapport d'étude
|
dossier ou rapport d'étude
|
||||||
|
@ -45,6 +45,7 @@ fonctionnel et structuré.
|
|||||||
|
|
||||||
% Livrable
|
% Livrable
|
||||||
\ajoutSlivrables{
|
\ajoutSlivrables{
|
||||||
|
\vspace{-5pt}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Maquette du projet
|
Maquette du projet
|
||||||
|
@ -41,6 +41,7 @@ présenter sous forme d'un bilan à un client ou un collaborateur.
|
|||||||
|
|
||||||
% Livrable
|
% Livrable
|
||||||
\ajoutSlivrables{
|
\ajoutSlivrables{
|
||||||
|
\vspace{-5pt}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Rapport écrit
|
Rapport écrit
|
||||||
|
@ -55,6 +55,7 @@ informatique pour le compte de son entreprise.
|
|||||||
|
|
||||||
% Livrable
|
% Livrable
|
||||||
\ajoutSlivrables{
|
\ajoutSlivrables{
|
||||||
|
\vspace{-5pt}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Codes informatiques du site Web fonctionnel et dynamique
|
Codes informatiques du site Web fonctionnel et dynamique
|
||||||
|
@ -53,7 +53,7 @@ output1 = pypandoc.convert_text(temp1, 'tex', format='md',
|
|||||||
|
|
||||||
print("ici")
|
print("ici")
|
||||||
# Export latex des ressources
|
# Export latex des ressources
|
||||||
if False:
|
if True:
|
||||||
for sem in ressources:
|
for sem in ressources:
|
||||||
for r in ressources[sem]:
|
for r in ressources[sem]:
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ if False:
|
|||||||
print(f"Export de {fichierlatex} ")
|
print(f"Export de {fichierlatex} ")
|
||||||
|
|
||||||
# Export latex des sae
|
# Export latex des sae
|
||||||
if False:
|
if True:
|
||||||
for sem in saes:
|
for sem in saes:
|
||||||
for s in saes[sem]:
|
for s in saes[sem]:
|
||||||
|
|
||||||
|
@ -145,7 +145,6 @@ class SAE():
|
|||||||
descriptif = ""
|
descriptif = ""
|
||||||
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de description")
|
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de description")
|
||||||
else:
|
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)
|
descriptif = md_to_latex(descriptif)
|
||||||
|
|
||||||
# préparation des livrables
|
# préparation des livrables
|
||||||
@ -154,7 +153,6 @@ class SAE():
|
|||||||
livrables = ""
|
livrables = ""
|
||||||
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de livrables")
|
SAE.__LOGGER.warning(f"{self.sae['titre']} n'a pas de livrables")
|
||||||
else:
|
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)
|
livrables = md_to_latex(livrables)
|
||||||
|
|
||||||
chaine = ""
|
chaine = ""
|
||||||
@ -198,7 +196,6 @@ class ExempleSAE():
|
|||||||
description = ""
|
description = ""
|
||||||
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de description")
|
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de description")
|
||||||
else:
|
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)
|
description = md_to_latex(description)
|
||||||
|
|
||||||
# préparation de la forme
|
# préparation de la forme
|
||||||
@ -207,7 +204,6 @@ class ExempleSAE():
|
|||||||
formes = ""
|
formes = ""
|
||||||
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de formes")
|
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de formes")
|
||||||
else:
|
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)
|
formes = md_to_latex(formes)
|
||||||
|
|
||||||
# préparation de la problématique
|
# préparation de la problématique
|
||||||
@ -216,7 +212,6 @@ class ExempleSAE():
|
|||||||
problematique = ""
|
problematique = ""
|
||||||
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de problematique")
|
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de problematique")
|
||||||
else:
|
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)
|
problematique = md_to_latex(problematique)
|
||||||
|
|
||||||
# préparation des modalites
|
# préparation des modalites
|
||||||
@ -225,7 +220,6 @@ class ExempleSAE():
|
|||||||
modalite = ""
|
modalite = ""
|
||||||
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de modalite")
|
ExempleSAE.__LOGGER.warning(f"{self.exemple['titre']} n'a pas de modalite")
|
||||||
else:
|
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)
|
modalite = md_to_latex(modalite)
|
||||||
|
|
||||||
chaine = ""
|
chaine = ""
|
||||||
@ -242,9 +236,15 @@ class ExempleSAE():
|
|||||||
|
|
||||||
def md_to_latex(contenu):
|
def md_to_latex(contenu):
|
||||||
"""Réalise la conversion markdown to latex avec pypandoc"""
|
"""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',
|
contenu = pypandoc.convert_text(contenu, 'tex', format='md',
|
||||||
extra_args=['--atx-headers'])
|
extra_args=['--atx-headers'])
|
||||||
contenu = contenu.replace("\r\n", "\n")
|
contenu = contenu.replace("\r\n", "\n")
|
||||||
contenu = caracteres_recalcitrants(contenu)
|
contenu = caracteres_recalcitrants(contenu)
|
||||||
contenu = remove_ligne_vide(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
|
return contenu
|
@ -9,13 +9,39 @@ from tools import caracteres_recalcitrants
|
|||||||
|
|
||||||
__LOGGER = logging.getLogger(__name__)
|
__LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class Docx():
|
||||||
class RessourceDocx():
|
"""Classe de base pour les ressources/saé/exemples du docx"""
|
||||||
"""Classe modélisant les ressources, lorsqu'elles sont extraites du docx"""
|
|
||||||
def __init__(self, nom, brut):
|
def __init__(self, nom, brut):
|
||||||
self.nom = nom
|
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):
|
def charge_informations(self, code, semestre, heures_encadrees, tp, sae, prerequis, description, mots):
|
||||||
self.code = code
|
self.code = code
|
||||||
self.semestre = semestre # <--
|
self.semestre = semestre # <--
|
||||||
@ -28,12 +54,6 @@ class RessourceDocx():
|
|||||||
self.contenu = None
|
self.contenu = None
|
||||||
self.mots = mots
|
self.mots = mots
|
||||||
|
|
||||||
def charge_ac(self, apprentissages):
|
|
||||||
self.apprentissages = apprentissages
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
print(self.nom + " " + self.code)
|
|
||||||
|
|
||||||
def to_yaml(self):
|
def to_yaml(self):
|
||||||
"""Exporte la ressource en yaml"""
|
"""Exporte la ressource en yaml"""
|
||||||
dico = {"nom": self.nom,
|
dico = {"nom": self.nom,
|
||||||
@ -48,10 +68,7 @@ class RessourceDocx():
|
|||||||
"contenu": folded(self.contenu),
|
"contenu": folded(self.contenu),
|
||||||
"motscles": self.mots if self.mots else ""
|
"motscles": self.mots if self.mots else ""
|
||||||
}
|
}
|
||||||
output = ruamel.yaml.dump(dico, Dumper=ruamel.yaml.RoundTripDumper,
|
return self.dico_to_yaml(dico)
|
||||||
allow_unicode=True, width=100)
|
|
||||||
output = output.replace("\n\n\n", "\n\n")
|
|
||||||
return output
|
|
||||||
|
|
||||||
def nettoie_champ_heure(champ):
|
def nettoie_champ_heure(champ):
|
||||||
try: # champ contenant uniquement un nbre d'heure
|
try: # champ contenant uniquement un nbre d'heure
|
||||||
|
Loading…
Reference in New Issue
Block a user