File: misc.h

package info (click to toggle)
balsa 2.6.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,576 kB
  • sloc: ansic: 99,871; xml: 4,934; makefile: 769; sh: 185; awk: 60; python: 34
file content (191 lines) | stat: -rw-r--r-- 7,522 bytes parent folder | download
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/* -*-mode:c; c-style:k&r; c-basic-offset:4; -*- */
/* Balsa E-Mail Client
 *
 * Copyright (C) 1997-2016 Stuart Parmenter and others,
 *                         See the file AUTHORS for a list.
 *
 * 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, 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, see <https://www.gnu.org/licenses/>.
 */

#ifndef __LIBBALSA_MISC_H__
#define __LIBBALSA_MISC_H__

#ifndef BALSA_VERSION
# error "Include config.h before this file."
#endif

#include <stdio.h>
#include <gtk/gtk.h>
#include <gmime/gmime.h>

typedef enum _LibBalsaCodeset LibBalsaCodeset;

enum _LibBalsaCodeset {
    WEST_EUROPE,        /* iso-8859-1 or windows-1252 */
    EAST_EUROPE,        /* iso-8859-2 or windows-1250 */
    SOUTH_EUROPE,       /* iso-8859-3 */
    NORTH_EUROPE,       /* iso-8859-4 */
    CYRILLIC,           /* iso-8859-5 or windows-1251 */
    ARABIC,             /* iso-8859-6 or windows-1256 */
    GREEK,              /* iso-8859-7 or windows-1253 */
    HEBREW,             /* iso-8859-8 or windows-1255 */
    TURKISH,            /* iso-8859-9 or windows-1254 */
    NORDIC,             /* iso-8859-10 */
    THAI,               /* iso-8859-11 */
    BALTIC,             /* iso-8859-13 or windows-1257 */
    CELTIC,             /* iso-8859-14 */
    WEST_EUROPE_EURO,   /* iso-8859-15 */
    RUSSIAN,            /* koi-8r */
    UKRAINE,            /* koi-8u */
    JAPAN,              /* iso-2022-jp */
    KOREA,              /* euc-kr */
    EAST_EUROPE_WIN,    /* windows-1250 */
    CYRILLIC_WIN,       /* windows-1251 */
    GREEK_WIN,          /* windows-1253 */
    HEBREW_WIN,         /* windows-1255 */
    ARABIC_WIN,         /* windows-1256 */
    BALTIC_WIN,         /* windows-1257 */
    LIBBALSA_NUM_CODESETS
};

typedef enum _LibBalsaTextAttribute LibBalsaTextAttribute;
enum _LibBalsaTextAttribute {
    LIBBALSA_TEXT_ESC     = 1 << 0,     /* ESC char(s)     */
    LIBBALSA_TEXT_HI_BIT  = 1 << 1,     /* 8-bit char(s)   */
    LIBBALSA_TEXT_HI_CTRL = 1 << 2,     /* 0x80 - 0x9f     */
    LIBBALSA_TEXT_HI_UTF8 = 1 << 3      /* 8-bit utf-8     */
};

typedef struct _LibBalsaCodesetInfo LibBalsaCodesetInfo;
struct _LibBalsaCodesetInfo {
    const gchar *label;
    const gchar *std;
    const gchar *win;
};

typedef void (*libbalsa_url_cb_t) (GtkTextBuffer *, GtkTextIter *,
				   const gchar *, guint, gpointer);
typedef struct _LibBalsaUrlInsertInfo LibBalsaUrlInsertInfo;
struct _LibBalsaUrlInsertInfo {
    libbalsa_url_cb_t callback;
    gpointer callback_data;
    gboolean buffer_is_flowed;
    GString *ml_url_buffer;
};

#define LIBBALSA_ERROR_QUARK (g_quark_from_static_string("libbalsa"))

extern LibBalsaCodesetInfo libbalsa_codeset_info[];
GtkWidget *libbalsa_charset_button_new(void);
LibBalsaTextAttribute libbalsa_text_attr_string(const gchar * string);
LibBalsaTextAttribute libbalsa_text_attr_file(const gchar * filename);

gchar *libbalsa_get_domainname(void);
#define libbalsa_urlencode(str) (g_uri_escape_string((str), NULL, FALSE))
#define libbalsa_urldecode(str) (g_uri_unescape_string((str), NULL))

gboolean libbalsa_find_word(const gchar * word, const gchar * str);
void libbalsa_wrap_string(gchar * str, int width);
char *libbalsa_wrap_quoted_string(const char *str,
                                  unsigned    width,
                                  GRegex     *quote_regex);
GString *libbalsa_process_text_rfc2646(gchar * par, gint width,
				       gboolean from_screen,
				       gboolean to_screen, gboolean quote,
				       gboolean delsp);
gchar *libbalsa_wrap_rfc2646(gchar * par, gint width,
                             gboolean from_screen, gboolean to_screen,
			     gboolean delsp);
void libbalsa_unwrap_buffer(GtkTextBuffer * buffer, GtkTextIter * iter,
                            gint lines);

gboolean libbalsa_delete_directory(const gchar *path, GError **error);
gchar *libbalsa_expand_path(const gchar *path);
gboolean libbalsa_mktempdir(gchar ** name);
LibBalsaCodeset libbalsa_set_fallback_codeset(LibBalsaCodeset codeset);
gboolean libbalsa_utf8_sanitize(gchar ** text, gboolean fallback,
                                gchar const **target);
gboolean libbalsa_utf8_strstr(const gchar *s1,const gchar *s2);
gboolean libbalsa_insert_with_url(GtkTextBuffer * buffer,
				  const char *chars,
				  guint len,
				  GtkTextTag * tag,
				  LibBalsaUrlInsertInfo *url_info);
void libbalsa_unwrap_selection(GtkTextBuffer * buffer, GRegex * rex);
gboolean libbalsa_match_regex(const gchar * line, GRegex * rex,
			      guint * count, guint * index);

int libbalsa_lock_file (const char *path, int fd, int excl, int dot, int timeout);
int libbalsa_unlock_file (const char *path, int fd, int dot);
int libbalsa_safe_rename (const char *src, const char *target);

gboolean libbalsa_ia_rfc2821_equal(const InternetAddress * a,
				   const InternetAddress * b);

GtkWidget *libbalsa_create_grid(void);
GtkWidget *libbalsa_create_grid_label(const gchar * label, GtkWidget * grid,
                                      gint row);
GtkWidget *libbalsa_create_grid_entry(GtkWidget * grid, GCallback func,
                                      gpointer data, gint row,
                                      const gchar * initval,
                                      GtkWidget * hotlabel);
GtkWidget *libbalsa_create_grid_check(const gchar * label, GtkWidget * grid,
                                      gint row, gboolean initval);
GtkSizeGroup *libbalsa_create_size_group(GtkWidget * chooser);
GtkWidget *libbalsa_create_wrap_label(const gchar *text,
									  gboolean     markup);
void libbalsa_entry_config_passwd(GtkEntry *entry);

void libbalsa_assure_balsa_dirs(void);
gchar *libbalsa_guess_ldap_base(void);
gchar *libbalsa_guess_ldap_name(void);

gboolean libbalsa_path_is_below_dir(const gchar * path, const gchar * dir);

gchar *libbalsa_size_to_gchar(guint64 length);

gchar * libbalsa_text_to_html(const gchar * title, const gchar * body, const gchar * lang);
GString * libbalsa_html_encode_hyperlinks(GString * paragraph);
gchar *libbalsa_font_string_to_css(const gchar * font_string, const gchar * name);

GMimeParserOptions *libbalsa_parser_options(void);

/* Some margin helpers */
#define HIG_PADDING 6
static inline void
libbalsa_set_hmargins(GtkWidget *widget, int margin)
{
    gtk_widget_set_margin_start(widget, margin);
    gtk_widget_set_margin_end(widget, margin);
}
static inline void
libbalsa_set_vmargins(GtkWidget *widget, int margin)
{
    gtk_widget_set_margin_top(widget, margin);
    gtk_widget_set_margin_bottom(widget, margin);
}
static inline void
libbalsa_set_margins(GtkWidget *widget, int margin)
{
    libbalsa_set_hmargins(widget, margin);
    libbalsa_set_vmargins(widget, margin);
}

GtkWidget * libbalsa_add_mnemonic_button_to_box(const gchar *markup,
                                                GtkWidget   *box,
                                                GtkAlign     align);

gchar * libbalsa_pixmap_finder(const gchar * filename);

#endif				/* __LIBBALSA_MISC_H__ */