/* GNU Mailutils -- a suite of utilities for electronic mail
Copyright (C) 1999-2021 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library. If not, see
. */
#ifndef _MAILUTILS_MAILCAP_H
#define _MAILUTILS_MAILCAP_H
#include
#include
#include
#include
/* See RFC1524 (A User Agent Configuration Mechanism). */
#ifdef __cplusplus
extern "C" {
#endif
#if 0
}
#endif
struct mu_mailcap_selector_closure
{
int (*selector) (mu_mailcap_entry_t, void *);
void *data;
void (*data_free) (void *);
};
struct mu_mailcap_error_closure
{
void (*error) (void *, struct mu_locus_range const *, char const *);
void *data;
void (*data_free) (void *);
};
extern struct mu_mailcap_error_closure mu_mailcap_default_error_closure;
#define MU_MAILCAP_FLAG_DEFAULT 0
#define MU_MAILCAP_FLAG_LOCUS 0x1
int mu_mailcap_create (mu_mailcap_t *pmailcap);
void mu_mailcap_destroy (mu_mailcap_t *pmailcap);
int mu_mailcap_set_flags (mu_mailcap_t mailcap, int flags);
int mu_mailcap_get_flags (mu_mailcap_t mailcap, int *flags);
int mu_mailcap_set_error (mu_mailcap_t mailcap,
struct mu_mailcap_error_closure const *err);
int mu_mailcap_get_error (mu_mailcap_t mailcap,
struct mu_mailcap_error_closure *err);
int mu_mailcap_set_selector (mu_mailcap_t mailcap,
struct mu_mailcap_selector_closure const *sel);
int mu_mailcap_get_selector (mu_mailcap_t mailcap,
struct mu_mailcap_selector_closure *sel);
int mu_mailcap_get_count (mu_mailcap_t mailcap, size_t *pcount);
int mu_mailcap_get_iterator (mu_mailcap_t mailcap, mu_iterator_t *pitr);
int mu_mailcap_foreach (mu_mailcap_t mailcap,
int (*action) (mu_mailcap_entry_t, void *),
void *data);
int mu_mailcap_get_entry (mu_mailcap_t mailcap, size_t n,
mu_mailcap_entry_t *entry);
int mu_mailcap_find_entry (mu_mailcap_t mailcap, char const *type,
mu_mailcap_entry_t *entry);
int mu_mailcap_parse (mu_mailcap_t mailcap, mu_stream_t input,
struct mu_locus_point const *pt);
int mu_mailcap_parse_file (mu_mailcap_t mailcap, char const *file_name);
int mu_mailcap_entry_create (mu_mailcap_entry_t *ret_entry,
char *type, char *command);
void mu_mailcap_entry_destroy (mu_mailcap_entry_t *pent);
void mu_mailcap_entry_destroy_item (void *ptr);
int mu_mailcap_entry_sget_type (mu_mailcap_entry_t ent, char const **ptype);
int mu_mailcap_entry_aget_type (mu_mailcap_entry_t ent, char **ptype);
int mu_mailcap_entry_get_type (mu_mailcap_entry_t ent,
char *buffer, size_t buflen,
size_t *pn);
int mu_mailcap_entry_sget_command (mu_mailcap_entry_t ent, char const **pcommand);
int mu_mailcap_entry_aget_command (mu_mailcap_entry_t ent, char **pcommand);
int mu_mailcap_entry_get_command (mu_mailcap_entry_t ent,
char *buffer, size_t buflen,
size_t *pn);
int mu_mailcap_entry_get_locus (mu_mailcap_entry_t ent,
struct mu_locus_range *loc);
void mu_mailcap_entry_field_deallocate (void *ptr);
int mu_mailcap_entry_set_bool (mu_mailcap_entry_t ent, char const *name);
int mu_mailcap_entry_set_string (mu_mailcap_entry_t ent, char const *name,
char const *value);
int mu_mailcap_entry_field_unset (mu_mailcap_entry_t ent, char const *name);
int mu_mailcap_entry_fields_count (mu_mailcap_entry_t ent, size_t *pcount);
int mu_mailcap_entry_fields_foreach (mu_mailcap_entry_t ent,
int (*action) (char const *, char const *, void *),
void *data);
int mu_mailcap_entry_fields_get_iterator (mu_mailcap_entry_t ent,
mu_iterator_t *pitr);
int mu_mailcap_entry_sget_field (mu_mailcap_entry_t ent, char const *name,
char const **pval);
int mu_mailcap_entry_aget_field (mu_mailcap_entry_t ent, char const *name,
char **pval);
int mu_mailcap_entry_get_field (mu_mailcap_entry_t ent,
char const *name,
char *buffer, size_t buflen,
size_t *pn);
#define MU_MAILCAP_NEEDSTERMINAL "needsterminal"
#define MU_MAILCAP_COPIOUSOUTPUT "copiousoutput"
#define MU_MAILCAP_COMPOSE "compose"
#define MU_MAILCAP_COMPOSETYPED "composetyped"
#define MU_MAILCAP_PRINT "print"
#define MU_MAILCAP_EDIT "edit"
#define MU_MAILCAP_TEST "test"
#define MU_MAILCAP_X11_BITMAP "x11-bitmap"
#define MU_MAILCAP_TEXTUALNEWLINES "textualnewlines"
#define MU_MAILCAP_DESCRIPTION "description"
int mu_mailcap_string_match (char const *pattern, int delim, char const *type);
int mu_mailcap_content_type_match (const char *pattern, int delim,
mu_content_type_t ct);
typedef struct _mu_mailcap_finder *mu_mailcap_finder_t;
int mu_mailcap_finder_create (mu_mailcap_finder_t *, int,
struct mu_mailcap_selector_closure *,
struct mu_mailcap_error_closure *,
char **file_names);
int mu_mailcap_finder_next_match (mu_mailcap_finder_t, mu_mailcap_entry_t *);
void mu_mailcap_finder_destroy (mu_mailcap_finder_t *);
#ifdef __cplusplus
}
#endif
#endif