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);
}