#ifndef _MESSAGE_H
#define _MESSAGE_H
#include "str-list.h"
#include "pos.h"
#include "hash.h"
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define MESSAGE_DOMAIN_DEFAULT "messages"
enum format_type
{
format_c,
format_objc,
format_sh,
format_python,
format_lisp,
format_elisp,
format_librep,
format_smalltalk,
format_java,
format_awk,
format_pascal,
format_ycp,
format_tcl,
format_perl,
format_perl_brace,
format_php,
format_gcc_internal,
format_qt
};
#define NFORMATS 18
extern DLL_VARIABLE const char *const format_language[NFORMATS];
extern DLL_VARIABLE const char *const format_language_pretty[NFORMATS];
enum is_format
{
undecided,
yes,
no,
yes_according_to_context,
possible,
impossible
};
extern bool
possible_format_p (enum is_format);
#if 0
enum is_wrap
{
undecided,
yes,
no
};
#else
#define is_wrap is_format
#endif
typedef struct message_ty message_ty;
struct message_ty
{
const char *msgid;
const char *msgid_plural;
const char *msgstr;
size_t msgstr_len;
lex_pos_ty pos;
string_list_ty *comment;
string_list_ty *comment_dot;
size_t filepos_count;
lex_pos_ty *filepos;
bool is_fuzzy;
enum is_format is_format[NFORMATS];
enum is_wrap do_wrap;
bool obsolete;
int used;
message_ty *tmp;
int alternative_count;
struct altstr
{
const char *msgstr;
size_t msgstr_len;
const char *msgstr_end;
string_list_ty *comment;
string_list_ty *comment_dot;
char *id;
}
*alternative;
};
extern message_ty *
message_alloc (const char *msgid, const char *msgid_plural,
const char *msgstr, size_t msgstr_len,
const lex_pos_ty *pp);
extern void
message_free (message_ty *mp);
extern void
message_comment_append (message_ty *mp, const char *comment);
extern void
message_comment_dot_append (message_ty *mp, const char *comment);
extern void
message_comment_filepos (message_ty *mp, const char *name, size_t line);
extern message_ty *
message_copy (message_ty *mp);
typedef struct message_list_ty message_list_ty;
struct message_list_ty
{
message_ty **item;
size_t nitems;
size_t nitems_max;
bool use_hashtable;
hash_table htable;
};
extern message_list_ty *
message_list_alloc (bool use_hashtable);
extern void
message_list_free (message_list_ty *mlp);
extern void
message_list_append (message_list_ty *mlp, message_ty *mp);
extern void
message_list_prepend (message_list_ty *mlp, message_ty *mp);
extern void
message_list_delete_nth (message_list_ty *mlp, size_t n);
typedef bool message_predicate_ty (const message_ty *mp);
extern void
message_list_remove_if_not (message_list_ty *mlp,
message_predicate_ty *predicate);
extern bool
message_list_msgids_changed (message_list_ty *mlp);
extern message_ty *
message_list_search (message_list_ty *mlp, const char *msgid);
extern message_ty *
message_list_search_fuzzy (message_list_ty *mlp, const char *msgid);
typedef struct message_list_list_ty message_list_list_ty;
struct message_list_list_ty
{
message_list_ty **item;
size_t nitems;
size_t nitems_max;
};
extern message_list_list_ty *
message_list_list_alloc (void);
extern void
message_list_list_free (message_list_list_ty *mllp);
extern void
message_list_list_append (message_list_list_ty *mllp,
message_list_ty *mlp);
extern void
message_list_list_append_list (message_list_list_ty *mllp,
message_list_list_ty *mllp2);
extern message_ty *
message_list_list_search (message_list_list_ty *mllp,
const char *msgid);
extern message_ty *
message_list_list_search_fuzzy (message_list_list_ty *mllp,
const char *msgid);
typedef struct msgdomain_ty msgdomain_ty;
struct msgdomain_ty
{
const char *domain;
message_list_ty *messages;
};
extern msgdomain_ty *
msgdomain_alloc (const char *domain, bool use_hashtable);
extern void
msgdomain_free (msgdomain_ty *mdp);
typedef struct msgdomain_list_ty msgdomain_list_ty;
struct msgdomain_list_ty
{
msgdomain_ty **item;
size_t nitems;
size_t nitems_max;
bool use_hashtable;
const char *encoding;
};
extern msgdomain_list_ty *
msgdomain_list_alloc (bool use_hashtable);
extern void
msgdomain_list_free (msgdomain_list_ty *mdlp);
extern void
msgdomain_list_append (msgdomain_list_ty *mdlp, msgdomain_ty *mdp);
extern void
msgdomain_list_append_list (msgdomain_list_ty *mdlp,
msgdomain_list_ty *mdlp2);
extern message_list_ty *
msgdomain_list_sublist (msgdomain_list_ty *mdlp, const char *domain,
bool create);
extern message_ty *
msgdomain_list_search (msgdomain_list_ty *mdlp, const char *msgid);
extern message_ty *
msgdomain_list_search_fuzzy (msgdomain_list_ty *mdlp, const char *msgid);
#ifdef __cplusplus
}
#endif
#endif