+/* These prefix values are specifically chosen to be compatible
+ * with sup, (http://sup.rubyforge.org), written by
+ * William Morgan <wmorgan-sup@masanjin.net>, and released
+ * under the GNU GPL v2.
+ */
+
+typedef struct {
+ const char *name;
+ const char *prefix;
+} prefix_t;
+
+prefix_t NORMAL_PREFIX[] = {
+ { "subject", "S" },
+ { "body", "B" },
+ { "from_name", "FN" },
+ { "to_name", "TN" },
+ { "name", "N" },
+ { "attachment", "A" }
+};
+
+prefix_t BOOLEAN_PREFIX[] = {
+ { "type", "K" },
+ { "from_email", "FE" },
+ { "to_email", "TE" },
+ { "email", "E" },
+ { "date", "D" },
+ { "label", "L" },
+ { "source_id", "I" },
+ { "attachment_extension", "O" },
+ { "msgid", "Q" },
+ { "thread", "H" },
+ { "ref", "R" }
+};
+
+static const char *
+find_prefix (const char *name)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE (NORMAL_PREFIX); i++)
+ if (strcmp (name, NORMAL_PREFIX[i].name) == 0)
+ return NORMAL_PREFIX[i].prefix;
+
+ for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX); i++)
+ if (strcmp (name, BOOLEAN_PREFIX[i].name) == 0)
+ return BOOLEAN_PREFIX[i].prefix;
+
+ return "";
+}
+
+int TERM_COMBINED = 0;
+
+static void
+print_term (const char *prefix_name, const char *value)
+{
+ const char *prefix;
+
+ if (value == NULL)
+ return;
+
+ prefix = find_prefix (prefix_name);
+
+ if (TERM_COMBINED)
+ printf ("\"%s%s\", ", prefix, value);
+ else
+ printf ("[\"%s\", \"%s\"], ", value, prefix);
+}
+
+static void
+add_address_name (InternetAddress *address, const char *prefix_name)
+{
+ const char *name;
+
+ name = internet_address_get_name (address);
+
+ if (name)
+ print_term (prefix_name, name);
+}
+