aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-format-html.h
blob: bbd0132017891be0ed3281d431f4d753a8f33e9a (plain) (blame)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 *  Authors: Michael Zucchi <notzed@ximian.com>
 *
 *  Copyright 2003 Ximian, Inc. (www.ximian.com)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
 *
 */

/*
  Concrete class for formatting mails to html
*/

#ifndef _EM_FORMAT_HTML_H
#define _EM_FORMAT_HTML_H

#include "em-format.h"

typedef struct _EMFormatHTML EMFormatHTML;
typedef struct _EMFormatHTMLClass EMFormatHTMLClass;

#if 0
struct _EMFormatHTMLHandler {
    EFrormatHandler base;
};
#endif

struct _GtkHTMLEmbedded;
struct _CamelMimePart;
struct _CamelMedium;
struct _CamelStream;

/* A HTMLJob will be executed in another thread, in sequence,
   It's job is to write to its stream, close it if successful,
   then exit */

typedef struct _EMFormatHTMLJob EMFormatHTMLJob;

struct _EMFormatHTMLJob {
    struct _EMFormatHTMLJob *next, *prev;

    EMFormatHTML *format;
    struct _CamelStream *stream;

    /* We need to track the state of the visibility tree at
       the point this uri was generated */
    struct _EMFormatPURITree *puri_level;
    struct _CamelURL *base;

    void (*callback)(struct _EMFormatHTMLJob *job, int cancelled);
    union {
        char *uri;
        struct _CamelMedium *msg;
        EMFormatPURI *puri;
        struct _EMFormatPURITree *puri_level;
        void *data;
    } u;
};

/* Pending object (classid: url) */
typedef struct _EMFormatHTMLPObject EMFormatHTMLPObject;

typedef gboolean (*EMFormatHTMLPObjectFunc)(EMFormatHTML *md, struct _GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject);

struct _EMFormatHTMLPObject {
    struct _EMFormatHTMLPObject *next, *prev;

    void (*free)(struct _EMFormatHTMLPObject *);
    struct _EMFormatHTML *format;

    char *classid;

    EMFormatHTMLPObjectFunc func;
    struct _CamelMimePart *part;
};

#define EM_FORMAT_HTML_HEADER_NOCOLUMNS (EM_FORMAT_HEADER_LAST)
#define EM_FORMAT_HTML_HEADER_HTML (EM_FORMAT_HEADER_LAST<<1) /* header already in html format */
#define EM_FORMAT_HTML_HEADER_LAST (EM_FORMAT_HEADER_LAST<<8)

#define EM_FORMAT_HTML_VPAD "<table cellspacing=0 cellpadding=3><tr><td><a name=\"padding\"></a></td></tr></table>\n"

struct _EMFormatHTML {
    EMFormat format;

    struct _EMFormatHTMLPrivate *priv;

    struct _GtkHTML *html;

    EDList pending_object_list;

    GSList *headers;

    guint32 text_html_flags; /* default flags for text to html conversion */
    guint32 body_colour;    /* header box colour */
    guint32 text_colour;
    guint32 frame_colour;
    guint32 content_colour;
    guint32 citation_colour;
    unsigned int load_http:2;
    unsigned int load_http_now:1;
    unsigned int mark_citations:1;
    unsigned int simple_headers:1; /* simple header format, no box/table */
    unsigned int hide_headers:1; /* no headers at all */
};

struct _EMFormatHTMLClass {
    EMFormatClass format_class;
    
};

GType em_format_html_get_type(void);
EMFormatHTML *em_format_html_new(void);

void em_format_html_load_http(EMFormatHTML *emf);

void em_format_html_set_load_http(EMFormatHTML *emf, int style);
void em_format_html_set_mark_citations(EMFormatHTML *emf, int state, guint32 citation_colour);

/* retrieves a pseudo-part icon wrapper for a file */
struct _CamelMimePart *em_format_html_file_part(EMFormatHTML *efh, const char *mime_type, const char *filename);

/* for implementers */
EMFormatHTMLPObject *em_format_html_add_pobject(EMFormatHTML *efh, size_t size, const char *classid, struct _CamelMimePart *part, EMFormatHTMLPObjectFunc func);
EMFormatHTMLPObject *em_format_html_find_pobject(EMFormatHTML *emf, const char *classid);
EMFormatHTMLPObject *em_format_html_find_pobject_func(EMFormatHTML *emf, struct _CamelMimePart *part, EMFormatHTMLPObjectFunc func);
void em_format_html_remove_pobject(EMFormatHTML *emf, EMFormatHTMLPObject *pobject);
void em_format_html_clear_pobject(EMFormatHTML *emf);

EMFormatHTMLJob *em_format_html_job_new(EMFormatHTML *emfh, void (*callback)(struct _EMFormatHTMLJob *job, int cancelled), void *data)
;
void em_format_html_job_queue(EMFormatHTML *emfh, struct _EMFormatHTMLJob *job);

#endif /* ! EM_FORMAT_HTML_H */