#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "message.h"
#include "xgettext.h"
#include "x-po.h"
#include "x-properties.h"
#include "x-stringtable.h"
#include "xalloc.h"
#include "read-po.h"
#include "po-lex.h"
#include "gettext.h"
#define _(str) gettext (str)
static void
extract_add_message (default_po_reader_ty *this,
char *msgid,
lex_pos_ty *msgid_pos,
char *msgid_plural,
char *msgstr, size_t msgstr_len,
lex_pos_ty *msgstr_pos,
bool force_fuzzy, bool obsolete)
{
if (exclude != NULL && message_list_search (exclude, msgid) != NULL)
goto discard;
if (*msgid == '\0' && !xgettext_omit_header)
{
discard:
free (msgid);
free (msgstr);
return;
}
default_add_message (this, msgid, msgid_pos, msgid_plural,
msgstr, msgstr_len, msgstr_pos, force_fuzzy, obsolete);
}
static default_po_reader_class_ty extract_methods =
{
{
sizeof (default_po_reader_ty),
default_constructor,
default_destructor,
default_parse_brief,
default_parse_debrief,
default_directive_domain,
default_directive_message,
default_comment,
default_comment_dot,
default_comment_filepos,
default_comment_special
},
default_set_domain,
extract_add_message,
NULL
};
static void
extract (FILE *fp,
const char *real_filename, const char *logical_filename,
input_syntax_ty syntax,
msgdomain_list_ty *mdlp)
{
default_po_reader_ty *pop;
pop = default_po_reader_alloc (&extract_methods);
pop->handle_comments = true;
pop->handle_filepos_comments = (line_comment != 0);
pop->allow_domain_directives = false;
pop->allow_duplicates = false;
pop->allow_duplicates_if_same_msgstr = true;
pop->mdlp = NULL;
pop->mlp = mdlp->item[0]->messages;
po_scan ((abstract_po_reader_ty *) pop, fp, real_filename, logical_filename,
syntax);
po_reader_free ((abstract_po_reader_ty *) pop);
}
void
extract_po (FILE *fp,
const char *real_filename, const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp)
{
extract (fp, real_filename, logical_filename, syntax_po, mdlp);
}
void
extract_properties (FILE *fp,
const char *real_filename, const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp)
{
extract (fp, real_filename, logical_filename, syntax_properties, mdlp);
}
void
extract_stringtable (FILE *fp,
const char *real_filename, const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp)
{
extract (fp, real_filename, logical_filename, syntax_stringtable, mdlp);
}