IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Convertir du text/enriched en Html


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut Convertir du text/enriched en Html
    Bonjour à tous,

    J'ai fais un programme de messagerie où l'objectif est d'afficher le contenu des e-mails .

    Dans la plupart des cas le contenu est soit au format texte brute, soit en Html. Là pas de problème.
    Dans des cas plus rares mais pourtant nombreux, le contenu est au format text/enriched. L'e-mail contient la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Type: text/enriched
    Je ne connais pas d'outils permettant d'afficher ce type de contenu.
    Question 1 : Quelqu'un connait-il un outil affichant le text/enriched ? (comme le fait le RichTextBox avec le RTF) ?




    Après plusieurs recherche sur le net, je n'ai trouvé qu'un source (issu de la spécification du text/enriched) permettant de convertir du text/enriched en Html. Super , sauf que ce source est en C et que je n'y connais rien en C .

    Question 2 : Quelqu'un connait-il l'équivalent VB du source C suivant ?
    En gros, Y a-t-il quelqu'un ayant un minimum de compétences en C & VB et ayant la gentillesse de traduire le source suivant ? Ou au moins de m'expliquer les grandes lignes.

    Je ne pense pas que cela soit un gros travail pour quelqu'un connaissant le C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    main() {
        int c, i, paramct=0, nofill=0;
     
        char token[62], *p;
     
        while((c=getc(stdin)) != EOF) {
            if(c == '<') {
                c = getc(stdin);
                if(c == '<') {
                    fputs("&lt;", stdout);
                } else {
                    ungetc(c, stdin);
                    for (i=0, p=token;
                        (c=getc(stdin)) != EOF && c != '>'; i++) {
                        if (i < sizeof(token)-1)
                            *p++ = isupper(c) ? tolower(c) : c;
                    }
                    *p = '\0';
                    if(c == EOF) break;
                    if(strcmp(token, "/param") == 0) {
                        paramct--;
                        putc('>', stdout);
                    } else if(paramct > 0) {
                        fputs("&lt;", stdout);
                        fputs(token, stdout);
                        fputs("&gt;", stdout);
                    } else {
                        putc('<', stdout);
                        if(strcmp(token, "nofill") == 0) {
                            nofill++;
                            fputs("pre", stdout);
                        } else if(strcmp(token, "/nofill") == 0) {
                            nofill--;
                            fputs("/pre", stdout);
                        } else if(strcmp(token, "bold") == 0) {
                            fputs("b", stdout);
                        } else if(strcmp(token, "/bold") == 0) {
                            fputs("/b", stdout);
                        } else if(strcmp(token, "italic") == 0) {
                            fputs("i", stdout);
                        } else if(strcmp(token, "/italic") == 0) {
                            fputs("/i", stdout);
                        } else if(strcmp(token, "fixed") == 0) {
                            fputs("tt", stdout);
                        } else if(strcmp(token, "/fixed") == 0) {
                            fputs("/tt", stdout);
                        } else if(strcmp(token, "excerpt") == 0) {
                            fputs("blockquote", stdout);
                        } else if(strcmp(token, "/excerpt") == 0) {
                            fputs("/blockquote", stdout);
                        } else {
     
                            putc('?', stdout);
                            fputs(token, stdout);
                            if(strcmp(token, "param") == 0) {
                                paramct++;
                                putc(' ', stdout);
                                continue;
                            }
                        }
                        putc('>', stdout);
                    }
                }
            } else if(c == '>') {
                fputs("&gt;", stdout);
            } else if (c == '&') {
                fputs("&amp;", stdout);
            } else {
                if(c == '\n' && nofill <= 0 && paramct <= 0) {
                    while((i=getc(stdin)) == '\n') fputs("<br>", stdout);
                    ungetc(i, stdin);
                }
                putc(c, stdout);
            }
        }
        /* The following line is only needed with line-buffering */
        putc('\n', stdout);
        exit(0);
    }

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le corps du message au format text/enriched , c'est du rtf !
    Un richtextbox va pouvoir te l'afficher sans problème.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Bonjour Delbeke,

    J'étais bien de ton avis, mais en réalité ce n'est pas du RTF.
    D'après mes recherches text/enriched est un format différent du RTF et se serait Microsoft qui aurait décidé de ne pas suivre la norme (RFC1896) en imposant le RTF.

    Le problème est que certainne messagerie (sur Mac dans mon cas) respecte la norme et voila ce que l'on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    Return-Path: <info@ivl.fr>
    Delivered-To: laurence@0
    Received: from b0.ovh.net (HELO queue) (213.186.33.50)
    	by b0.ovh.net with SMTP; 17 Mar 2008 08:52:42 -0000
    Received: from smtp27.orange.fr (80.12.242.95)
      by mx1.ovh.net with SMTP; 17 Mar 2008 08:52:30 -0000
    Received: from me-wanadoo.net (localhost [127.0.0.1])
    	by mwinf2712.orange.fr (SMTP Server) with ESMTP id 7FE871C000D1
    	for <laurence@ivl.fr>; Mon, 17 Mar 2008 09:52:17 +0100 (CET)
    Received: from [172.25.1.102] (ANantes-151-1-39-224.w83-195.abo.wanadoo.fr [83.195.209.224])
    	by mwinf2712.orange.fr (SMTP Server) with ESMTP id 2ADF91C00077
    	for <laurence@ivl.fr>; Mon, 17 Mar 2008 09:51:35 +0100 (CET)
    X-ME-UUID: 20080317085135175.2ADF91C00077@mwinf2712.orange.fr
    Mime-Version: 1.0 (Apple Message framework v624)
    To: Laurence BELLIER <laurence@ivl.fr>
    Message-Id: <536e26c551c0c39d172d4c3faa8fb9d3@ivl.fr>
    Content-Type: multipart/mixed; boundary=Apple-Mail-1--196571832
    From: INFO-IVL <info@ivl.fr>
    Subject: Fwd: notre prospectus
    Date: Mon, 17 Mar 2008 09:51:34 +0100
    X-Mailer: Apple Mail (2.624)
    X-Ovh-Remote: 80.12.242.95 (smtp27.orange.fr)
    X-Ovh-Local: 213.186.33.29 (mx1.ovh.net)
    X-Spam-Check: DONE|H 0.5/N
     
     
    --Apple-Mail-1--196571832
    Content-Type: multipart/alternative;
    	boundary=Apple-Mail-2--196571831
     
     
    --Apple-Mail-2--196571831
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain;
    	charset=ISO-8859-1;
    	format=flowed
     
     
     
    D=E9but du message r=E9exp=E9di=E9 :
     
    > De: "CIO SAUMUR" <0491020@ac-nantes.fr>
    > Date: 17 mars 2008 09:46:22 GMT+01:00
    > =C0: <info@ivl.fr>
    > Objet: notre prospectus
    >
    > A l'attention de MME BELIER
    > Bonjour,
    > Vous trouverez ci-joint en pi=E8ces jointes
    > les documents envoy=E9s par courrier pr=E9c=E9demment
    > Bonne r=E9ception
    > cordialement
    > I MENUAULT Secr=E9taire CIO SAUMUR=
     
    --Apple-Mail-2--196571831
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/enriched;
    	charset=ISO-8859-1
     
     
     
     
    D=E9but du message r=E9exp=E9di=E9 :
     
     
    =
    <excerpt><bold><fontfamily><param>Helvetica</param><color><param>0000,0000=
    ,0000</param>De:
    </color></fontfamily></bold><fontfamily><param>Helvetica</param>"CIO
    SAUMUR" <<0491020@ac-nantes.fr>
     
    <bold><color><param>0000,0000,0000</param>Date: </color></bold>17 mars
    2008 09:46:22 GMT+01:00
     
    <bold><color><param>0000,0000,0000</param>=C0:
    </color></bold><<info@ivl.fr>
     
    <bold><color><param>0000,0000,0000</param>Objet: </color>notre
    prospectus
     
    </bold></fontfamily>
     
    <fontfamily><param>Arial</param><smaller>A l'attention de MME =
    BELIER</smaller></fontfamily>
     
    <fontfamily><param>Arial</param><smaller>Bonjour,</smaller></fontfamily>
     
    <fontfamily><param>Arial</param><smaller>Vous trouverez ci-joint en
    pi=E8ces jointes</smaller></fontfamily>
     
    <fontfamily><param>Arial</param><smaller>les documents envoy=E9s par
    courrier pr=E9c=E9demment</smaller></fontfamily>
     
    <fontfamily><param>Arial</param><smaller>Bonne =
    r=E9ception</smaller></fontfamily>
     
    =
    <fontfamily><param>Arial</param><smaller>cordialement</smaller></fontfamil=
    y>
     
    <fontfamily><param>Arial</param><smaller>I MENUAULT Secr=E9taire CIO
    SAUMUR</smaller></fontfamily></excerpt>=
     
    --Apple-Mail-2--196571831--
    Pour info Outlook Express c'est très bien lire cela, mais pas Internet Explorer.

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par Najdar Voir le message
    Bonjour à tous,

    J'ai fais un programme de messagerie où l'objectif est d'afficher le contenu des e-mails .

    Dans la plupart des cas le contenu est soit au format texte brute, soit en Html. Là pas de problème.
    Dans des cas plus rares mais pourtant nombreux, le contenu est au format text/enriched. L'e-mail contient la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Type: text/enriched
    Je ne connais pas d'outils permettant d'afficher ce type de contenu.
    Question 1 : Quelqu'un connait-il un outil affichant le text/enriched ? (comme le fait le RichTextBox avec le RTF) ?




    Après plusieurs recherche sur le net, je n'ai trouvé qu'un source (issu de la spécification du text/enriched) permettant de convertir du text/enriched en Html. Super , sauf que ce source est en C et que je n'y connais rien en C .

    Question 2 : Quelqu'un connait-il l'équivalent VB du source C suivant ?
    En gros, Y a-t-il quelqu'un ayant un minimum de compétences en C & VB et ayant la gentillesse de traduire le source suivant ? Ou au moins de m'expliquer les grandes lignes.

    Je ne pense pas que cela soit un gros travail pour quelqu'un connaissant le C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    main() {
        int c, i, paramct=0, nofill=0;
     
        char token[62], *p;
     
        while((c=getc(stdin)) != EOF) {
            if(c == '<') {
                c = getc(stdin);
                if(c == '<') {
                    fputs("&lt;", stdout);
                } else {
                    ungetc(c, stdin);
                    for (i=0, p=token;
                        (c=getc(stdin)) != EOF && c != '>'; i++) {
                        if (i < sizeof(token)-1)
                            *p++ = isupper(c) ? tolower(c) : c;
                    }
                    *p = '\0';
                    if(c == EOF) break;
                    if(strcmp(token, "/param") == 0) {
                        paramct--;
                        putc('>', stdout);
                    } else if(paramct > 0) {
                        fputs("&lt;", stdout);
                        fputs(token, stdout);
                        fputs("&gt;", stdout);
                    } else {
                        putc('<', stdout);
                        if(strcmp(token, "nofill") == 0) {
                            nofill++;
                            fputs("pre", stdout);
                        } else if(strcmp(token, "/nofill") == 0) {
                            nofill--;
                            fputs("/pre", stdout);
                        } else if(strcmp(token, "bold") == 0) {
                            fputs("b", stdout);
                        } else if(strcmp(token, "/bold") == 0) {
                            fputs("/b", stdout);
                        } else if(strcmp(token, "italic") == 0) {
                            fputs("i", stdout);
                        } else if(strcmp(token, "/italic") == 0) {
                            fputs("/i", stdout);
                        } else if(strcmp(token, "fixed") == 0) {
                            fputs("tt", stdout);
                        } else if(strcmp(token, "/fixed") == 0) {
                            fputs("/tt", stdout);
                        } else if(strcmp(token, "excerpt") == 0) {
                            fputs("blockquote", stdout);
                        } else if(strcmp(token, "/excerpt") == 0) {
                            fputs("/blockquote", stdout);
                        } else {
     
                            putc('?', stdout);
                            fputs(token, stdout);
                            if(strcmp(token, "param") == 0) {
                                paramct++;
                                putc(' ', stdout);
                                continue;
                            }
                        }
                        putc('>', stdout);
                    }
                }
            } else if(c == '>') {
                fputs("&gt;", stdout);
            } else if (c == '&') {
                fputs("&amp;", stdout);
            } else {
                if(c == '\n' && nofill <= 0 && paramct <= 0) {
                    while((i=getc(stdin)) == '\n') fputs("<br>", stdout);
                    ungetc(i, stdin);
                }
                putc(c, stdout);
            }
        }
        /* The following line is only needed with line-buffering */
        putc('\n', stdout);
        exit(0);
    }
    A 1ère vue rien de sorcier à convertir : énumération d'une suite de replace à effectuer.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Merci à tous pour votre aide

    Pour ceux que ça intéresse, voici ma traduction en VB.
    Pour l'instant ce code semble fonctionner, mais comme je n'ai aucune compétence en C, je ne le garantie pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Public Function EnrichedToHtml(ByVal Texte As String) As String
      'Ce code est une traduction VB du code C indiqué dans la spécification RFC1896
     
      Dim Cpt                           As Long
      Dim Out                           As String
      Dim c                             As String
      Dim ParamCT                       As Long
      Dim NoFill                        As Long
      Dim Pos                           As Long
      Dim Balise                        As String
     
      ParamCT = 0
      NoFill = 0
     
      For Cpt = 1 To Len(Texte)
    DebutFor:
        c = mId(Texte, Cpt, 1)
        If c = "<" Then
          Cpt = Cpt + 1
          c = mId(Texte, Cpt, 1)
          If c = "<" Then
            Out = Out & "&lt"
          Else
     
            'Recherche le ">" suivant
            Pos = InStr(Cpt + 1, Texte, ">")
            If Pos <> 0 Then
              Balise = LCase(mId(Texte, Cpt, (Pos - Cpt)))
              Cpt = Pos
     
              If Balise = "/param" Then
                ParamCT = ParamCT - 1
                Out = Out & ">"
              ElseIf ParamCT > 0 Then
                Out = Out & "&lt"
                Out = Out & Balise
                Out = Out & "&gt"
              Else
                Out = Out & "<"
                If Balise = "nofill" Then
                  NoFill = NoFill + 1
                  Out = Out & "pre"
     
                ElseIf Balise = "/nofill" Then
                  NoFill = NoFill - 1
                  Out = Out & "/pre"
     
                ElseIf Balise = "bold" Then
                  Out = Out & "b"
     
                ElseIf Balise = "/bold" Then
                  Out = Out & "/b"
     
                ElseIf Balise = "italic" Then
                  Out = Out & "i"
     
                ElseIf Balise = "/italic" Then
                  Out = Out & "/i"
     
                ElseIf Balise = "fixed" Then
                  Out = Out & "tt"
     
                ElseIf Balise = "/fixed" Then
                  Out = Out & "/tt"
     
                ElseIf Balise = "excerpt" Then
                  Out = Out & "blockquote"
     
                ElseIf Balise = "excerpt" Then
                  Out = Out & "/blockquote"
     
                Else
                  Out = Out & "?"
                  Out = Out & Balise
                  If Balise = "param" Then
                    ParamCT = ParamCT + 1
                    Out = Out & " "
                    GoTo DebutFor
                  End If
                End If
                Out = Out & ">"
              End If
            End If
          End If
     
        ElseIf c = ">" Then
          Out = Out & "&gt"
        ElseIf c = "&" Then
          Out = Out & "&amp"
        Else
          If NoFill <= 0 And ParamCT <= 0 And mId(Texte, Cpt, 2) = vbCrLf Then
            If mId(Texte, Cpt + 2, 2) = vbCrLf Then
              Out = Out & "<br>"
            End If
          End If
            Out = Out & c
        End If
      Next Cpt
     
      EnrichedToHtml = Out
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML 4.0] Sript UNIX Convertir un fichier TEXT à un fichier HTML
    Par whisper dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/03/2013, 10h10
  2. Réponses: 0
    Dernier message: 08/09/2011, 10h16
  3. Convertir un texte HTML en image
    Par sami_c dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/06/2010, 10h42
  4. convertir un text en code html
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 20/07/2008, 13h34
  5. Réponses: 3
    Dernier message: 09/03/2006, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo