+/*
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * Copyright © 2006 Pierre Habouzit
+ */
/*
* Copyright notice from original mutt:
* Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
# define EILSEQ EINVAL
#endif
-char *Charset = NULL;
+char *Charset;
int Charset_is_utf8 = 0;
+wchar_t CharsetReplacement = '?';
void charset_initialize(void)
{
char buff2[LONG_STRING];
m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET));
- mutt_canonical_charset(buff2, sizeof(buff2), buff);
+ charset_canonicalize(buff2, sizeof(buff2), buff);
/* finally, set $charset */
if (!m_strisempty(buff2)) {
m_strreplace(&Charset, buff2);
} else
#endif
+ {
m_strreplace(&Charset, "iso-8859-1");
+ }
+
+ Charset_is_utf8 = !strcmp(Charset, "utf-8");
+ CharsetReplacement = Charset_is_utf8 ? 0xfffd : '?';
- Charset_is_utf8 = !strcmp(Charset, "utf-8");
#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
bind_textdomain_codeset(PACKAGE, Charset);
#endif
}
-
#include "charset.gperf"
-
-void mutt_canonical_charset(char *dest, ssize_t dlen, const char *name)
+void charset_canonicalize(char *dest, ssize_t dlen, const char *name)
{
const struct cset_pair *cp;
char scratch[LONG_STRING];
}
scratch[i] = '\0';
- cp = mutt_canonical_charset_aux(scratch, strlen(scratch));
+ cp = charset_canonicalize_aux(scratch, strlen(scratch));
if (cp) {
m_strcpy(dest, dlen, cp->pref);
} else {
if (!s)
return 0;
- mutt_canonical_charset(buffer, sizeof(buffer), s);
+ charset_canonicalize(buffer, sizeof(buffer), s);
return !strcmp(buffer, chs);
}
iconv_t cd;
- mutt_canonical_charset (tocode1, sizeof (tocode1), tocode);
+ charset_canonicalize (tocode1, sizeof (tocode1), tocode);
#ifdef M_ICONV_HOOK_TO
/* Not used. */
if ((flags & M_ICONV_HOOK_TO) && (tmp = mutt_charset_hook (tocode1)))
- mutt_canonical_charset (tocode1, sizeof (tocode1), tmp);
+ charset_canonicalize (tocode1, sizeof (tocode1), tmp);
#endif
- mutt_canonical_charset (fromcode1, sizeof (fromcode1), fromcode);
+ charset_canonicalize (fromcode1, sizeof (fromcode1), fromcode);
if ((flags & M_ICONV_HOOK_FROM) && (tmp = mutt_charset_hook (fromcode1)))
- mutt_canonical_charset (fromcode1, sizeof (fromcode1), tmp);
+ charset_canonicalize (fromcode1, sizeof (fromcode1), tmp);
if ((cd = iconv_open (tocode1, fromcode1)) != (iconv_t) - 1)
return cd;
}
return -1;
}
-
-wchar_t replacement_char(void)
-{
- return Charset_is_utf8 ? 0xfffd : '?';
-}
-cat <<EOF | gperf -Nmutt_canonical_charset_aux -m16 -l -t -C -F", NULL"
+cat <<EOF | gperf -Ncharset_canonicalize_aux -m16 -l -t -C -F", NULL"
%{
/*
* This program is free software; you can redistribute it and/or modify
+/*
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * Copyright © 2006 Pierre Habouzit
+ */
/*
* Copyright notice from original mutt:
* Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
# include "config.h"
#endif
-
-#define M_ICONV_HOOK_FROM 1
-#define M_ICONV_HOOK_TO 2
+/****************************************************************************/
+/* charset functions */
+/****************************************************************************/
extern char *Charset;
extern int Charset_is_utf8;
+extern wchar_t CharsetReplacement;
void charset_initialize(void);
-void mutt_canonical_charset(char *, ssize_t, const char *);
-
+void charset_canonicalize(char *, ssize_t, const char *);
int charset_is_utf8(const char *s);
int charset_is_us_ascii(const char *s);
+
+/****************************************************************************/
+/* iconv-line functions */
+/****************************************************************************/
+
#ifdef HAVE_ICONV_H
# include <iconv.h>
# define iconv_close(a) 0
#endif
+#define M_ICONV_HOOK_FROM 1
+#define M_ICONV_HOOK_TO 2
+
int mutt_convert_string (char **, const char *, const char *, int);
const char *mutt_get_first_charset (const char *);
int mutt_convert_nonmime_string (char **);
ssize_t mutt_iconv (iconv_t, const char **, ssize_t *, char **, ssize_t *,
const char **, const char *);
+
+/****************************************************************************/
+/* fgetconv functions */
+/****************************************************************************/
+
typedef void *FGETCONV;
FGETCONV *fgetconv_open (FILE *, const char *, const char *, int);
char *fgetconvs (char *, ssize_t, FGETCONV *);
void fgetconv_close (FGETCONV **);
-wchar_t replacement_char(void);
-
#endif /* _CHARSET_H */
fputs ("MIME-Version: 1.0\n", out);
fputs ("Content-Transfer-Encoding: 8bit\n", out);
fputs ("Content-Type: text/plain; charset=", out);
- mutt_canonical_charset (chsbuf, sizeof (chsbuf),
+ charset_canonicalize (chsbuf, sizeof (chsbuf),
Charset ? Charset : "us-ascii");
rfc822_strcpy(buffer, sizeof(buffer), chsbuf, MimeSpecials);
fputs (buffer, out);
*macro += k, len -= k) {
if (k == -1 || k == -2) {
k = (k == -1) ? 1 : len;
- wc = replacement_char ();
+ wc = CharsetReplacement;
}
/* glibc-2.1.3's wcwidth() returns 1 for unprintable chars! */
if (IsWPrint (wc) && (w = wcwidth (wc)) >= 0) {
p_delete(&res);
}
- mutt_canonical_charset(buf, sizeof(buf), tocode);
+ charset_canonicalize(buf, sizeof(buf), tocode);
m_strreplace(&tocode, buf);
}
for (; n && (k = mbrtowc (&wc, s, n, &mbstate1)); s += k, n -= k) {
if (k == -1 || k == -2) {
k = (k == -1) ? 1 : n;
- wc = replacement_char ();
+ wc = CharsetReplacement;
}
if (arboreal && wc < M_TREE_MAX)
w = 1; /* hack */
for (; len && (k = mbrtowc (&wc, s, len, &mbstate)); s += k, len -= k) {
if (k == -1 || k == -2) {
k = (k == -1) ? 1 : len;
- wc = replacement_char ();
+ wc = CharsetReplacement;
}
if (!IsWPrint (wc))
wc = '?';
for (w = 0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k) {
if (k == -1 || k == -2) {
k = (k == -1) ? 1 : n;
- wc = replacement_char ();
+ wc = CharsetReplacement;
}
if (!IsWPrint (wc))
wc = '?';
break;
++col;
if (pa)
- addch (replacement_char ());
+ addch (CharsetReplacement);
}
}
*pspace = space;
convert_file_from_to (fp, fchs, chs ? chs : SendCharset,
&fromcode, &tocode, info) != -1) {
if (!chs) {
- mutt_canonical_charset (chsbuf, sizeof (chsbuf), tocode);
+ charset_canonicalize (chsbuf, sizeof (chsbuf), tocode);
mutt_set_parameter ("charset", chsbuf, &b->parameter);
}
b->file_charset = fromcode;
p = mutt_get_parameter ("charset", b->parameter);
if (p)
- mutt_canonical_charset (d, dlen, NONULL (p));
+ charset_canonicalize (d, dlen, NONULL (p));
else
m_strcpy(d, dlen, "us-ascii");