2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
5 * This file is part of mutt-ng, see http://www.muttng.org/.
6 * It's licensed under the GNU General Public License,
7 * please see the file GPL in the top level source directory.
17 #include <lib-lib/debug.h>
23 static void state_prefix_put (const char *d, ssize_t dlen, STATE * s)
27 state_prefix_putc (*d++, s);
29 fwrite (d, dlen, 1, s->fpout);
32 void mutt_convert_to_state (iconv_t cd, char *bufi, ssize_t * l, STATE * s)
40 if (cd != (iconv_t) (-1)) {
41 ob = bufo, obl = sizeof (bufo);
42 my_iconv(cd, 0, 0, &ob, &obl);
44 state_prefix_put (bufo, ob - bufo, s);
46 if (Quotebuf[0] != '\0')
47 state_prefix_putc ('\n', s);
51 if (cd == (iconv_t) (-1)) {
52 state_prefix_put (bufi, *l, s);
59 ob = bufo, obl = sizeof (bufo);
60 mutt_iconv (cd, &ib, &ibl, &ob, &obl, 0, "?");
63 state_prefix_put (bufo, ob - bufo, s);
65 memmove (bufi, ib, ibl);
69 void state_prefix_putc (char c, STATE * s)
71 if (s->flags & M_PENDINGPREFIX) {
74 i = m_strlen(Quotebuf);
77 if (i == sizeof (Quotebuf) - 1 || c == '\n') {
78 char buf[2 * SHORT_STRING];
79 int j = 0, offset = 0;
82 unsigned char save = '\0';
85 state_reset_prefix (s);
87 ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch,
89 offset += pmatch->rm_eo;
91 if (!option (OPTQUOTEEMPTY) && Quotebuf[offset] == '\n') {
95 else if (!option (OPTTEXTFLOWED) && option (OPTQUOTEQUOTED) && offset) {
96 for (i = 0; i < offset; i++)
97 if (Quotebuf[i] != ' ')
99 strncpy (buf, Quotebuf, j + 1);
100 strcpy (buf + j + 1, Quotebuf + j);
103 snprintf (buf, sizeof (buf), "%s%s", NONULL (s->prefix), Quotebuf);
106 if (m_strlen(buf) >= 2) {
107 save = buf[m_strlen(buf) - 1];
108 buf[m_strlen(buf) - 1] = '\0';
109 debug_print (2, ("buf = '%s'\n", buf));
110 buf[m_strlen(buf)] = save;
121 state_set_prefix (s);
126 int state_printf (STATE * s, const char *fmt, ...)
132 rv = vfprintf (s->fpout, fmt, ap);
138 void state_mark_attach (STATE * s)
140 if ((s->flags & M_DISPLAY) && !m_strcmp(Pager, "builtin"))
141 state_puts (AttachmentMarker, s);
144 void state_attach_puts (const char *t, STATE * s)
147 state_mark_attach (s);
150 if (*t++ == '\n' && *t)
152 state_mark_attach (s);