* please see the file GPL in the top level source directory.
*/
-#include <lib-lib/lib-lib.h>
+#include <lib-ui/lib-ui.h>
#include <lib-mime/mime.h>
-#include <lib-ui/curses.h>
#include <lib-mx/mx.h>
#include "mutt.h"
#include "alias.h"
+#include "crypt.h"
#include "sort.h"
#include "thread.h"
#include "charset.h"
-#include <lib-crypt/crypt.h>
#include "mutt_idna.h"
int mutt_is_mail_list (address_t * addr)
HEADER *hdr;
};
-static const char *hdr_format_str (char *dest,
- ssize_t destlen,
- char op,
- const char *src,
- const char *prefix,
- const char *ifstring,
- const char *elsestring,
- unsigned long data, format_flag flags)
+static const char *
+hdr_format_str(char *dest, ssize_t destlen,
+ char op, const char *src, const char *prefix,
+ const char *ifstr, const char *elstr,
+ anytype data, format_flag flags)
{
- struct hdr_format_info *hfi = (struct hdr_format_info *) data;
+ struct hdr_format_info *hfi = data.ptr;
HEADER *hdr, *htmp;
CONTEXT *ctx;
- char fmt[SHORT_STRING], buf2[SHORT_STRING], ch, *p;
- int do_locales, i;
+ char fmt[STRING], buf2[STRING], ch, *p;
+ int do_locales, i, c;
int optional = (flags & M_FORMAT_OPTIONAL);
int threads = ((Sort & SORT_MASK) == SORT_THREADS);
int is_index = (flags & M_FORMAT_INDEX);
optional = 0;
break;
-#ifdef USE_NNTP
- case 'g':
- mutt_format_s (dest, destlen, prefix,
- hdr->env->newsgroups ? hdr->env->newsgroups : "");
- break;
-#endif
-
case 'H':
/* (Hormel) spam score */
if (optional)
int j = 0;
for (i = 0; hdr->env->from && hdr->env->from->personal &&
- hdr->env->from->personal[i] && j < SHORT_STRING - 1; i++) {
+ hdr->env->from->personal[i] && j < STRING - 1; i++) {
if (isalpha ((int) hdr->env->from->personal[i])) {
if (!iflag) {
buf2[j++] = hdr->env->from->personal[i];
case 'O':
if (!optional) {
make_from_addr (hdr->env, buf2, sizeof (buf2), 1);
- if (!option (OPTSAVEADDRESS) && (p = strpbrk (buf2, "%@")))
+ if ((p = strpbrk (buf2, "%@")))
*p = 0;
mutt_format_s (dest, destlen, prefix, buf2);
}
break;
case 'T':
- snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
- snprintf (dest, destlen, fmt,
- (Tochars
- && ((i = mutt_user_is_recipient (hdr))) <
- m_strlen(Tochars)) ? Tochars[i] : ' ');
+ i = mutt_user_is_recipient(hdr);
+ assert (i >= 0); /* help compiler to see c is initialized */
+
+ if (Charset_is_utf8) {
+ const char *s = Tochars;
+
+ snprintf (fmt, sizeof (fmt), "%%%slc", prefix);
+ while (i-- >= 0) {
+ c = m_ustrgetc(s, &s);
+ if (c <= 0) {
+ c = ' ';
+ break;
+ }
+ }
+
+ snprintf(dest, destlen, fmt, c);
+ } else {
+ snprintf(fmt, sizeof (fmt), "%%%sc", prefix);
+ snprintf(dest, destlen, fmt, i < m_strlen(Tochars) ? Tochars[i] : ' ');
+ }
break;
case 'u':
else if (hdr->security & PGPKEY)
ch = 'K';
- snprintf(buf2, sizeof (buf2), "%c%c%c",
+ if (hdr->tagged) {
+ c = '*';
+ } else
+ if (hdr->flagged) {
+ c = '!';
+ } else {
+ i = mutt_user_is_recipient(hdr);
+ assert (i >= 0); /* help compiler to see c is initialized */
+
+ if (Charset_is_utf8) {
+ const char *s = Tochars;
+
+ snprintf (fmt, sizeof (fmt), "%%%slc", prefix);
+ while (i-- >= 0) {
+ c = m_ustrgetc(s, &s);
+ if (c <= 0) {
+ c = ' ';
+ break;
+ }
+ }
+ } else {
+ c = i < m_strlen(Tochars) ? Tochars[i] : ' ';
+ }
+ }
+ snprintf(buf2, sizeof (buf2), Charset_is_utf8 ? "%c%c%lc" : "%c%c%c",
(THREAD_NEW ? 'n'
: (THREAD_OLD
? 'o'
: ((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno))
? (hdr->replied ? 'r' : ' ')
: (hdr->old ? 'O' : 'N')))),
- hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch),
- hdr->tagged ? '*'
- : (hdr->flagged ? '!'
- : (Tochars && ((i = mutt_user_is_recipient(hdr)) < m_strlen(Tochars))
- ? Tochars[i] : ' ')));
+ hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch), c);
mutt_format_s (dest, destlen, prefix, buf2);
break;
break;
default:
- snprintf (dest, destlen, "%%%s%c", prefix, op);
+ *dest = 0;
break;
}
- if (optional)
- mutt_FormatString (dest, destlen, ifstring, hdr_format_str,
- (unsigned long) hfi, flags);
- else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, hdr_format_str,
- (unsigned long) hfi, flags);
+ if (flags & M_FORMAT_OPTIONAL)
+ m_strformat(dest, destlen, 0, optional ? ifstr: elstr,
+ hdr_format_str, data, flags);
- return (src);
+ return src;
#undef THREAD_NEW
#undef THREAD_OLD
}
hfi.hdr = hdr;
hfi.ctx = ctx;
- mutt_FormatString (dest, destlen, s, hdr_format_str, (unsigned long) &hfi,
- flags);
+ m_strformat(dest, destlen, getmaxx(main_w), s, hdr_format_str, &hfi, flags);
}