#include "mutt.h"
#include "charset.h"
-
#ifndef EILSEQ
# define EILSEQ EINVAL
#endif
+char *Charset;
int Charset_is_utf8 = 0;
/*
*/
static struct {
- const char *key;
- const char *pref;
+ const char *key;
+ const char *pref;
} PreferredMIMENames[] = {
- {
- "ansi_x3.4-1968", "us-ascii"}, {
- "iso-ir-6", "us-ascii"}, {
- "iso_646.irv:1991", "us-ascii"}, {
- "ascii", "us-ascii"}, {
- "iso646-us", "us-ascii"}, {
- "us", "us-ascii"}, {
- "ibm367", "us-ascii"}, {
- "cp367", "us-ascii"}, {
- "csASCII", "us-ascii"}, {
- "csISO2022KR", "iso-2022-kr"}, {
- "csEUCKR", "euc-kr"}, {
- "csISO2022JP", "iso-2022-jp"}, {
- "csISO2022JP2", "iso-2022-jp-2"}, {
- "ISO_8859-1:1987", "iso-8859-1"}, {
- "iso-ir-100", "iso-8859-1"}, {
- "iso_8859-1", "iso-8859-1"}, {
- "latin1", "iso-8859-1"}, {
- "l1", "iso-8859-1"}, {
- "IBM819", "iso-8859-1"}, {
- "CP819", "iso-8859-1"}, {
- "csISOLatin1", "iso-8859-1"}, {
- "ISO_8859-2:1987", "iso-8859-2"}, {
- "iso-ir-101", "iso-8859-2"}, {
- "iso_8859-2", "iso-8859-2"}, {
- "latin2", "iso-8859-2"}, {
- "l2", "iso-8859-2"}, {
- "csISOLatin2", "iso-8859-2"}, {
- "ISO_8859-3:1988", "iso-8859-3"}, {
- "iso-ir-109", "iso-8859-3"}, {
- "ISO_8859-3", "iso-8859-3"}, {
- "latin3", "iso-8859-3"}, {
- "l3", "iso-8859-3"}, {
- "csISOLatin3", "iso-8859-3"}, {
- "ISO_8859-4:1988", "iso-8859-4"}, {
- "iso-ir-110", "iso-8859-4"}, {
- "ISO_8859-4", "iso-8859-4"}, {
- "latin4", "iso-8859-4"}, {
- "l4", "iso-8859-4"}, {
- "csISOLatin4", "iso-8859-4"}, {
- "ISO_8859-6:1987", "iso-8859-6"}, {
- "iso-ir-127", "iso-8859-6"}, {
- "iso_8859-6", "iso-8859-6"}, {
- "ECMA-114", "iso-8859-6"}, {
- "ASMO-708", "iso-8859-6"}, {
- "arabic", "iso-8859-6"}, {
- "csISOLatinArabic", "iso-8859-6"}, {
- "ISO_8859-7:1987", "iso-8859-7"}, {
- "iso-ir-126", "iso-8859-7"}, {
- "ISO_8859-7", "iso-8859-7"}, {
- "ELOT_928", "iso-8859-7"}, {
- "ECMA-118", "iso-8859-7"}, {
- "greek", "iso-8859-7"}, {
- "greek8", "iso-8859-7"}, {
- "csISOLatinGreek", "iso-8859-7"}, {
- "ISO_8859-8:1988", "iso-8859-8"}, {
- "iso-ir-138", "iso-8859-8"}, {
- "ISO_8859-8", "iso-8859-8"}, {
- "hebrew", "iso-8859-8"}, {
- "csISOLatinHebrew", "iso-8859-8"}, {
- "ISO_8859-5:1988", "iso-8859-5"}, {
- "iso-ir-144", "iso-8859-5"}, {
- "ISO_8859-5", "iso-8859-5"}, {
- "cyrillic", "iso-8859-5"}, {
- "csISOLatinCyrillic", "iso8859-5"}, {
- "ISO_8859-9:1989", "iso-8859-9"}, {
- "iso-ir-148", "iso-8859-9"}, {
- "ISO_8859-9", "iso-8859-9"}, {
- "latin5", "iso-8859-9"}, /* this is not a bug */
- {
- "l5", "iso-8859-9"}, {
- "csISOLatin5", "iso-8859-9"}, {
- "ISO_8859-10:1992", "iso-8859-10"}, {
- "iso-ir-157", "iso-8859-10"}, {
- "latin6", "iso-8859-10"}, /* this is not a bug */
- {
- "l6", "iso-8859-10"}, {
- "csISOLatin6", "iso-8859-10"}, {
- "csKOI8r", "koi8-r"}, {
- "MS_Kanji", "Shift_JIS"}, /* Note the underscore! */
- {
- "csShiftJis", "Shift_JIS"}, {
- "Extended_UNIX_Code_Packed_Format_for_Japanese", "EUC-JP"}, {
- "csEUCPkdFmtJapanese", "EUC-JP"}, {
- "csGB2312", "gb2312"}, {
- "csbig5", "big5"},
- /*
- * End of official brain damage. What follows has been taken
- * from glibc's localedata files.
- */
- {
- "iso_8859-13", "iso-8859-13"}, {
- "iso-ir-179", "iso-8859-13"}, {
- "latin7", "iso-8859-13"}, /* this is not a bug */
- {
- "l7", "iso-8859-13"}, {
- "iso_8859-14", "iso-8859-14"}, {
- "latin8", "iso-8859-14"}, /* this is not a bug */
- {
- "l8", "iso-8859-14"}, {
- "iso_8859-15", "iso-8859-15"}, {
- "latin9", "iso-8859-15"}, /* this is not a bug */
- /* Suggested by Ionel Mugurel Ciobica <tgakic@sg10.chem.tue.nl> */
- {
- "latin0", "iso-8859-15"}, /* this is not a bug */
- {
- "iso_8859-16", "iso-8859-16"}, {
- "latin10", "iso-8859-16"}, /* this is not a bug */
- /*
- * David Champion <dgc@uchicago.edu> has observed this with
- * nl_langinfo under SunOS 5.8.
- */
- {
- "646", "us-ascii"},
- /*
- * http://www.sun.com/software/white-papers/wp-unicode/
- */
- {
- "eucJP", "euc-jp"}, {
- "PCK", "Shift_JIS"}, {
- "ko_KR-euc", "euc-kr"}, {
- "zh_TW-big5", "big5"},
- /* seems to be common on some systems */
- {
- "sjis", "Shift_JIS"}, {
- "euc-jp-ms", "eucJP-ms"},
- /*
- * If you happen to encounter system-specific brain-damage with
- * respect to character set naming, please add it above this
- * comment, and submit a patch to <mutt-dev@mutt.org>.
- */
- /* End of aliases. Please keep this line last. */
- {
- NULL, NULL}
+ {"ansi_x3.4-1968", "us-ascii"},
+ {"iso-ir-6", "us-ascii"},
+ {"iso_646.irv:1991", "us-ascii"},
+ {"ascii", "us-ascii"},
+ {"iso646-us", "us-ascii"},
+ {"us", "us-ascii"},
+ {"ibm367", "us-ascii"},
+ {"cp367", "us-ascii"},
+ {"csASCII", "us-ascii"},
+ {"csISO2022KR", "iso-2022-kr"},
+ {"csEUCKR", "euc-kr"},
+ {"csISO2022JP", "iso-2022-jp"},
+ {"csISO2022JP2", "iso-2022-jp-2"},
+ {"ISO_8859-1:1987", "iso-8859-1"},
+ {"iso-ir-100", "iso-8859-1"},
+ {"iso_8859-1", "iso-8859-1"},
+ {"latin1", "iso-8859-1"},
+ {"l1", "iso-8859-1"},
+ {"IBM819", "iso-8859-1"},
+ {"CP819", "iso-8859-1"},
+ {"csISOLatin1", "iso-8859-1"},
+ {"ISO_8859-2:1987", "iso-8859-2"},
+ {"iso-ir-101", "iso-8859-2"},
+ {"iso_8859-2", "iso-8859-2"},
+ {"latin2", "iso-8859-2"},
+ {"l2", "iso-8859-2"},
+ {"csISOLatin2", "iso-8859-2"},
+ {"ISO_8859-3:1988", "iso-8859-3"},
+ {"iso-ir-109", "iso-8859-3"},
+ {"ISO_8859-3", "iso-8859-3"},
+ {"latin3", "iso-8859-3"},
+ {"l3", "iso-8859-3"},
+ {"csISOLatin3", "iso-8859-3"},
+ {"ISO_8859-4:1988", "iso-8859-4"},
+ {"iso-ir-110", "iso-8859-4"},
+ {"ISO_8859-4", "iso-8859-4"},
+ {"latin4", "iso-8859-4"},
+ {"l4", "iso-8859-4"},
+ {"csISOLatin4", "iso-8859-4"},
+ {"ISO_8859-6:1987", "iso-8859-6"},
+ {"iso-ir-127", "iso-8859-6"},
+ {"iso_8859-6", "iso-8859-6"},
+ {"ECMA-114", "iso-8859-6"},
+ {"ASMO-708", "iso-8859-6"},
+ {"arabic", "iso-8859-6"},
+ {"csISOLatinArabic", "iso-8859-6"},
+ {"ISO_8859-7:1987", "iso-8859-7"},
+ {"iso-ir-126", "iso-8859-7"},
+ {"ISO_8859-7", "iso-8859-7"},
+ {"ELOT_928", "iso-8859-7"},
+ {"ECMA-118", "iso-8859-7"},
+ {"greek", "iso-8859-7"},
+ {"greek8", "iso-8859-7"},
+ {"csISOLatinGreek", "iso-8859-7"},
+ {"ISO_8859-8:1988", "iso-8859-8"},
+ {"iso-ir-138", "iso-8859-8"},
+ {"ISO_8859-8", "iso-8859-8"},
+ {"hebrew", "iso-8859-8"},
+ {"csISOLatinHebrew", "iso-8859-8"},
+ {"ISO_8859-5:1988", "iso-8859-5"},
+ {"iso-ir-144", "iso-8859-5"},
+ {"ISO_8859-5", "iso-8859-5"},
+ {"cyrillic", "iso-8859-5"},
+ {"csISOLatinCyrillic", "iso8859-5"},
+ {"ISO_8859-9:1989", "iso-8859-9"},
+ {"iso-ir-148", "iso-8859-9"},
+ {"ISO_8859-9", "iso-8859-9"},
+ {"latin5", "iso-8859-9"},
+ {"l5", "iso-8859-9"},
+ {"csISOLatin5", "iso-8859-9"},
+ {"ISO_8859-10:1992", "iso-8859-10"},
+ {"iso-ir-157", "iso-8859-10"},
+ {"latin6", "iso-8859-10"},
+ {"l6", "iso-8859-10"},
+ {"csISOLatin6", "iso-8859-10"},
+ {"csKOI8r", "koi8-r"},
+ {"MS_Kanji", "Shift_JIS"},
+ {"csShiftJis", "Shift_JIS"},
+ {"Extended_UNIX_Code_Packed_Format_for_Japanese", "EUC-JP"},
+ {"csEUCPkdFmtJapanese", "EUC-JP"},
+ {"csGB2312", "gb2312"},
+ {"csbig5", "big5"},
+ /* End of official brain damage.
+ What follows has been taken * from glibc's localedata files. */
+ {"iso_8859-13", "iso-8859-13"},
+ {"iso-ir-179", "iso-8859-13"},
+ {"latin7", "iso-8859-13"},
+ {"l7", "iso-8859-13"},
+ {"iso_8859-14", "iso-8859-14"},
+ {"latin8", "iso-8859-14"},
+ {"l8", "iso-8859-14"},
+ {"iso_8859-15", "iso-8859-15"},
+ {"latin9", "iso-8859-15"},
+ {"latin0", "iso-8859-15"},
+ {"iso_8859-16", "iso-8859-16"},
+ {"latin10", "iso-8859-16"},
+ {"646", "us-ascii"},
+ {"eucJP", "euc-jp"},
+ {"PCK", "Shift_JIS"},
+ {"ko_KR-euc", "euc-kr"},
+ {"zh_TW-big5", "big5"},
+ {"sjis", "Shift_JIS"},
+ {"euc-jp-ms", "eucJP-ms"},
+ {NULL, NULL}
};
#ifdef HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-
+# include <langinfo.h>
+#endif
void mutt_set_langinfo_charset (void)
{
- char buff[LONG_STRING];
- char buff2[LONG_STRING];
-
- m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET));
- mutt_canonical_charset (buff2, sizeof (buff2), buff);
-
- /* finally, set $charset */
- if (!(Charset = m_strdup(buff2)))
- Charset = m_strdup("iso-8859-1");
-}
+#ifdef HAVE_LANGINFO_CODESET
+ char buff[LONG_STRING];
+ char buff2[LONG_STRING];
-#else
+ m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET));
+ mutt_canonical_charset (buff2, sizeof (buff2), buff);
-void mutt_set_langinfo_charset (void)
-{
- Charset = m_strdup("iso-8859-1");
+ /* finally, set $charset */
+ if (!(Charset = m_strdup(buff2)))
+#endif
+ Charset = m_strdup("iso-8859-1");
}
-#endif
-void mutt_canonical_charset (char *dest, ssize_t dlen, const char *name)
+void mutt_canonical_charset(char *dest, ssize_t dlen, const char *name)
{
ssize_t i;
char *p;
#endif
}
-wchar_t replacement_char (void)
+wchar_t replacement_char(void)
{
return Charset_is_utf8 ? 0xfffd : '?';
}
# include "config.h"
#endif
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdarg.h>
+
#include <lib-lib/mem.h>
#include <lib-lib/ascii.h>
#include <lib-lib/str.h>
#include <lib-ui/enter.h>
#include "mutt.h"
+#include "alias.h"
#include "handler.h"
#include "mx.h"
#include "keymap.h"
#include <imap/imap.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdarg.h>
-
#include <lib-crypt/crypt.h>
static int eat_regexp (pattern_t * pat, BUFFER *, BUFFER *);
int tag; /* character used to represent this op */
int op; /* operation to perform */
int class;
- int (*eat_arg) (pattern_t *, BUFFER *, BUFFER *);
+ int (*eat_arg)(pattern_t *, BUFFER *, BUFFER *);
} Flags[] = {
- {
- 'A', M_ALL, 0, NULL}, {
- 'b', M_BODY, M_FULL_MSG, eat_regexp}, {
- 'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp}, {
- 'c', M_CC, 0, eat_regexp}, {
- 'C', M_RECIPIENT, 0, eat_regexp}, {
- 'd', M_DATE, 0, eat_date}, {
- 'D', M_DELETED, 0, NULL}, {
- 'e', M_SENDER, 0, eat_regexp}, {
- 'E', M_EXPIRED, 0, NULL}, {
- 'f', M_FROM, 0, eat_regexp}, {
- 'F', M_FLAG, 0, NULL}, {
- 'g', M_CRYPT_SIGN, 0, NULL}, {
- 'G', M_CRYPT_ENCRYPT, 0, NULL}, {
- 'h', M_HEADER, M_FULL_MSG, eat_regexp}, {
- 'H', M_HORMEL, 0, eat_regexp}, {
- 'i', M_ID, 0, eat_regexp}, {
- 'k', M_PGP_KEY, 0, NULL}, {
- 'L', M_ADDRESS, 0, eat_regexp}, {
- 'l', M_LIST, 0, NULL}, {
- 'm', M_MESSAGE, 0, eat_range}, {
- 'M', M_MULTIPART, 0, NULL}, {
- 'n', M_SCORE, 0, eat_range}, {
- 'N', M_NEW, 0, NULL}, {
- 'O', M_OLD, 0, NULL}, {
- 'p', M_PERSONAL_RECIP, 0, NULL}, {
- 'P', M_PERSONAL_FROM, 0, NULL}, {
- 'Q', M_REPLIED, 0, NULL}, {
- 'R', M_READ, 0, NULL}, {
- 'r', M_DATE_RECEIVED, 0, eat_date}, {
- 's', M_SUBJECT, 0, eat_regexp}, {
- 'S', M_SUPERSEDED, 0, NULL}, {
- 'T', M_TAG, 0, NULL}, {
- 't', M_TO, 0, eat_regexp}, {
- 'U', M_UNREAD, 0, NULL}, {
- 'u', M_SUBSCRIBED_LIST, 0, NULL}, {
- 'v', M_COLLAPSED, 0, NULL}, {
- 'V', M_CRYPT_VERIFIED, 0, NULL},
+ {'A', M_ALL, 0, NULL},
+ {'b', M_BODY, M_FULL_MSG, eat_regexp},
+ {'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp},
+ {'c', M_CC, 0, eat_regexp},
+ {'C', M_RECIPIENT, 0, eat_regexp},
+ {'d', M_DATE, 0, eat_date},
+ {'D', M_DELETED, 0, NULL},
+ {'e', M_SENDER, 0, eat_regexp},
+ {'E', M_EXPIRED, 0, NULL},
+ {'f', M_FROM, 0, eat_regexp},
+ {'F', M_FLAG, 0, NULL},
+ {'g', M_CRYPT_SIGN, 0, NULL},
+ {'G', M_CRYPT_ENCRYPT, 0, NULL},
+ {'h', M_HEADER, M_FULL_MSG, eat_regexp},
+ {'H', M_HORMEL, 0, eat_regexp},
+ {'i', M_ID, 0, eat_regexp},
+ {'k', M_PGP_KEY, 0, NULL},
+ {'L', M_ADDRESS, 0, eat_regexp},
+ {'l', M_LIST, 0, NULL},
+ {'m', M_MESSAGE, 0, eat_range},
+ {'M', M_MULTIPART, 0, NULL},
+ {'n', M_SCORE, 0, eat_range},
+ {'N', M_NEW, 0, NULL},
+ {'O', M_OLD, 0, NULL},
+ {'p', M_PERSONAL_RECIP, 0, NULL},
+ {'P', M_PERSONAL_FROM, 0, NULL},
+ {'Q', M_REPLIED, 0, NULL},
+ {'R', M_READ, 0, NULL},
+ {'r', M_DATE_RECEIVED, 0, eat_date},
+ {'s', M_SUBJECT, 0, eat_regexp},
+ {'S', M_SUPERSEDED, 0, NULL},
+ {'T', M_TAG, 0, NULL},
+ {'t', M_TO, 0, eat_regexp},
+ {'U', M_UNREAD, 0, NULL},
+ {'u', M_SUBSCRIBED_LIST, 0, NULL},
+ {'v', M_COLLAPSED, 0, NULL},
+ {'V', M_CRYPT_VERIFIED, 0, NULL},
#ifdef USE_NNTP
- {
- 'w', M_NEWSGROUPS, 0, eat_regexp},
+ {'w', M_NEWSGROUPS, 0, eat_regexp},
#endif
- {
- 'x', M_REFERENCE, 0, eat_regexp}, {
- 'X', M_MIMEATTACH, 0, eat_range}, {
- 'y', M_XLABEL, 0, eat_regexp}, {
- 'z', M_SIZE, 0, eat_range}, {
- '=', M_DUPLICATED, 0, NULL}, {
- '$', M_UNREFERENCED, 0, NULL}, {
- '*', M_REALNAME, 0, NULL}, {
- 0, 0, 0, NULL}
+ {'x', M_REFERENCE, 0, eat_regexp},
+ {'X', M_MIMEATTACH, 0, eat_range},
+ {'y', M_XLABEL, 0, eat_regexp},
+ {'z', M_SIZE, 0, eat_range},
+ {'=', M_DUPLICATED, 0, NULL},
+ {'$', M_UNREFERENCED, 0, NULL},
+ {'*', M_REALNAME, 0, NULL},
+ {0, 0, 0, NULL}
};
static pattern_t *SearchPattern = NULL; /* current search pattern */