Journal wiki2latex

Posté par  (site web personnel) .
Étiquettes : aucune
0
19
fév.
2004
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  . Évalué à 5.

    bah, pour de la substitution comme ça, sed fait l'affaire...

    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  . Évalué à 1.

    si tu préfères la solution du Perl:

    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  . Évalué à 1.

      ouais, enfin lancer du perl pour faire du sed...
      moi j'appelle ça bouffer de la ressource pour le plaisir ;)
      • [^] # Re: wiki2latex

        Posté par  . Évalué à 3.

        J'ai la solution complete en perl :

        #!/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  (site web personnel) . Évalué à 1.

          Merci pour la réponse, je vais tester ça.
          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  . Évalué à 1.

            Pour ce cas là... je n'ai pas de solution simple...

            c'est effectivement. plus compliqué... et du coup ca demande plus de temps...

            désolé
            • [^] # Re: wiki2latex

              Posté par  . Évalué à 0.

              un petit programme en awk (ou en python) serait plus simple a mon avis
              • [^] # Re: wiki2latex

                Posté par  (site web personnel) . Évalué à 1.

                Perl je connais un tout tout petit peu. Awk et python vraiment pas ... mais si tu proposes une solution, tu peux bien sur choisir ton langage :-))
              • [^] # Re: wiki2latex

                Posté par  . Évalué à 1.

                Une preuve ?
                • [^] # Re: wiki2latex

                  Posté par  . Évalué à 2.

                  # prg.awk
                  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  . Évalué à 1.

                    oups

                    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  (site web personnel) . Évalué à 1.

    Pour l'instant j'en suis là. Grace à jag et un collègue.


    #! /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.