Je suis en train de faire un travail avec d'autres. Nous avonc décider de travailler sur un wiki ... c'est chouette.
Où c'et moins chouette, c'est lorsqu'ils m'ont proposé pour faire le rapport final ... et beau. J'ai l'habitude de faire ça sous LaTeX.
Comme j'ai pas spécialement envie de changer systématiquement les !!! blabla en \section{blabal}
... et tout le reste je me suis dis que le systématiquement devait me mettre sur la piste d'un script.
Ahma un p'tit script perl devrait trrès bien faire l'affaire. Malheureusement, je ne connais pas perl (j'ai bouquiner un peu mais pas assez) et c'est pour hier ...
Ok, vous me voyez venir.
Y aurait-il une âme charitable qui connait bien perl et qui saurait m'écrire un p'tit script qui convertit
__brol__ --> \textbf{brol}
''brol'' --> \textit{brol}
!!! brol --> \section{brol}
!! brol --> \subsection{brol}
* puce1 --> \begin{itemize} \item
* puce2 --> \item
* puce3 --> \item \end{itemize}
# puce1 --> \begin{enumerate} \item
# puce2 --> \item
# puce3 --> \item \end{enumerate}
Merci cher journal.
# Re: wiki2latex
Posté par Yann Hirou . Évalué à 5.
cat tonfichier.txt | sed -e "s/__brol__/\\\textbf\{brol\}/g" | \
sed -e "s/''brol''/\\\textit\{brol\}/g" | \
sed -e "s/\!\!\! brol/\\\section\{brol\}/g" | \
sed -e "s/\!\! brol /\\\subsection\{brol\}/g" | \
sed -e "s/\* puce1/\\\begin\{itemize\} \\\item/g" | \
sed -e "s/\* puce2/\\\item/g" | \
sed -e "s/\* puce3/\\\item \\\end\{itemize\}/g" | \
sed -e "s/# puce1/\\\begin\{enumerate\} \\\item/g" | \
sed -e "s/# puce2/\\\item/g" | \
sed -e "s/# puce3/\\\item \\\end\{enumerate\}/g" \
> tonfichier.tex
# Re: wiki2latex
Posté par LaBienPensanceMaTuer . Évalué à 1.
cat fichier | perl -pe 's/REGEXP1/REGEXP_DEST1/g; \
s/REGEXP2/REGEXP_DEST2/g;' > fichier
avec autant de s/../../ que tu veut.
Le 'g' dans s/../../g demande à Perl de substituer toutes les occurences dans la ligne courantes (et non la première qu'il rencontre).
Pour finir les arguments de Perl:
-e le script est spécifiée sur la ligne de commande (les fameux one line).
-p boucle jusqu'à la fin de ton fichier et affiche le résultat sur la sortie standard. (sans le -p tu te retrouverais avec un fichier vide).
[^] # Re: wiki2latex
Posté par Yann Hirou . Évalué à 1.
moi j'appelle ça bouffer de la ressource pour le plaisir ;)
[^] # Re: wiki2latex
Posté par PachaFonk . Évalué à 3.
#!/bin/perl
use strict ;
while (<>) {
s/__([^_]*)__/\\textbf{$1}/g ;
s/\'\'([^\']*)\'\'/\\textit{$1}/g ;
s/!!! ([^\s]*)/\\section{$1}/g ;
s/!! ([^\s]*)/\\subsection{$1}/g ;
s/\* puce1/\\begin{itemize} \\item/g ;
s/\* puce2/\\item/g ;
s/\* puce3/\\item \\end{itemize}/g ;
s/\# puce1/\\begin{enumerate} \\item/g ;
s/\# puce2/\\item/g ;
s/\# puce1/\\item \\end{enumerate}/g ;
print ;
}
print "\n" ;
Tu peux mettre ca dans le fichier wiki2latex et ensuite appeler
wiki2latex monfichier.wiki > monfichier.latex
PS en passant :
sed -e "s/''brol''/\\\textit\{brol\}/g"
ca remplace
"brol" par \textit{brol}
mais ne faudrait-il pas que ca remplace aussi ?
"Titi" par \textit{Titi}
PPS en passant :
Pour le troll sed vs. perl .... Oh et puis non... trop facile !!!
[^] # Re: wiki2latex
Posté par PiT (site web personnel) . Évalué à 1.
Merci aussi de préciser qu'il fallait prendre brol comme élément générique et que le but c'est de traduire une page.
Par contre pour le pucei c'est aussi générique, il faut comprendre ceci
* Ce que je veux
* Une peuce qui n'est ni la première ni la dernière
* Elles peuvent être plusiseurs
* Et la dernière
devient
\begin{itemize}
\item Ce que je veux
\item Une peuce qui n'est ni la première ni la dernière
\item Elles peuvent être plusiseurs
\item Et la dernière
\end{itemize}
Ca c'est un peu plus compliquer sans doute.
[^] # Re: wiki2latex
Posté par PachaFonk . Évalué à 1.
c'est effectivement. plus compliqué... et du coup ca demande plus de temps...
désolé
[^] # Re: wiki2latex
Posté par schyzomarijks . Évalué à 0.
[^] # Re: wiki2latex
Posté par PiT (site web personnel) . Évalué à 1.
[^] # Re: wiki2latex
Posté par PachaFonk . Évalué à 1.
[^] # Re: wiki2latex
Posté par schyzomarijks . Évalué à 2.
BEGIN { list_it = 0 }
/^\*.+$/ {
if (list_it==0) { print "\\begin{enumerate}"; list_it=1;}
printf("%s%s\n","\\item",$0);
}
/^!!!/ { printf("%s%s%s\n","\\section{",$2,"}"); list_it=0; }
/^!!! / { printf("%s%s%s\n","\\subsection{",$2,"}"); list_it=0; }
/^[a-z]/ { if (list_it==1) {
print "\\end{enumerate}"; }
printf("%s\n",$0);
}
--
cat fichier | awk -f prg.awk > fichier 2
reste à compléter et a vérifier les expressions rationnelles
[^] # Re: wiki2latex
Posté par schyzomarijks . Évalué à 1.
remplacer
/^!!! / { printf("%s%s%s\n","\\subsection{",$2,"}"); list_it=0; }
par
/^!! / { printf("%s%s%s\n","\\subsection{",$2,"}"); list_it=0; }
# Re: wiki2latex
Posté par PiT (site web personnel) . Évalué à 1.
#! /usr/bin/perl
#
$inItem1 = 0; # boolean pour la gestion de *
$inItem2 = 0; # boolean pour la gestion de #
print "Essai \n";
while (<>) {
s/__([^\_]*)__/\\textbf{$1}/g ;
s/\'\'([^\']*)\'\'/\\textit{$1}/g ;
s/!!!(.*)/\\section{$1}/g ;
s/!!(.*)/\\subsection{$1}/g ;
s/!(.*)/\\subsubsection{$1}/g;
#
# Les puces
#
# Il faut traiter séparément la première et la dernière
# j'utilise un boolean
if (/\*/) {
if(!$inItem1) {$inItem1=1; print "\\begin{itemize} \n";}
print " \\item ";
s/^\*//g;
}
else {
if ($inItem1) {
$inItem1=0;
print "\\end{itemize} \n";
}
}
# fin if
# Idem pour les puces numérotées
if (/\#/) {
if(!$inItem2) {$inItem2=1; print "\\begin{enumerate} \n";}
print " \\item ";
s/^\#//g;
}
else {
if ($inItem2) {
$inItem2=0;
print "\\end{enumerate} \n";
}
}
# fin if
print;
}
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.