/* mp4h -- A macro processor for HTML documents
Copyright 2000-2002, Denis Barbier
All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is a work based on GNU m4 version 1.4n. Below is the
original copyright.
*/
/* GNU m4 -- A simple macro processor
Copyright (C) 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#define MP4H_MODULE
#include
#undef MP4H_MODULE
#include
#define mp4h_macro_table gettext_LTX_mp4h_macro_table
#define mp4h_init_module gettext_LTX_mp4h_init_module
#define mp4h_finish_module gettext_LTX_mp4h_finish_module
module_init_t mp4h_init_module; /* initialisation function */
module_finish_t mp4h_finish_module; /* cleanup function */
DECLARE(mp4m_intl_textdomain);
DECLARE(mp4m_intl_bindtextdomain);
DECLARE(mp4m_intl_bind_textdomain_codeset);
DECLARE(mp4m_intl_gettext);
#undef DECLARE
/* The table of builtins defined by this module - just one */
builtin mp4h_macro_table[] =
{
/* name container expand function
attributes */
{ "textdomain", FALSE, TRUE, mp4m_intl_textdomain },
{ "bindtextdomain", FALSE, TRUE, mp4m_intl_bindtextdomain },
{ "bind_textdomain_codeset",
FALSE, TRUE, mp4m_intl_bind_textdomain_codeset },
{ "gettext", TRUE, TRUE, mp4m_intl_gettext },
{ 0, FALSE, FALSE, 0 },
};
void
mp4h_init_module(struct obstack *obs)
{
}
void
mp4h_finish_module(void)
{
}
/* The functions for builtins can be static */
static void
mp4m_intl_textdomain (MP4H_BUILTIN_ARGS)
{
const char *domain;
domain = predefined_attribute ("domain", &argc, argv, FALSE);
if (!domain)
{
MP4HERROR ((warning_status, 0,
_("Warning:%s:%d: In <%s>, required attribute `%s' is not specified"),
CURRENT_FILE_LINE, ARG (0), "domain"));
return;
}
textdomain (domain);
}
static void
mp4m_intl_bindtextdomain (MP4H_BUILTIN_ARGS)
{
const char *domain, *path;
domain = predefined_attribute ("domain", &argc, argv, FALSE);
path = predefined_attribute ("path", &argc, argv, FALSE);
if (!domain)
{
MP4HERROR ((warning_status, 0,
_("Warning:%s:%d: In <%s>, required attribute `%s' is not specified"),
CURRENT_FILE_LINE, ARG (0), "domain"));
return;
}
if (!path)
{
MP4HERROR ((warning_status, 0,
_("Warning:%s:%d: In <%s>, required attribute `%s' is not specified"),
CURRENT_FILE_LINE, ARG (0), "path"));
return;
}
bindtextdomain (domain, path);
}
static void
mp4m_intl_bind_textdomain_codeset (MP4H_BUILTIN_ARGS)
{
const char *domain, *codeset;
domain = predefined_attribute ("domain", &argc, argv, FALSE);
codeset = predefined_attribute ("codeset", &argc, argv, FALSE);
if (!domain)
{
MP4HERROR ((warning_status, 0,
_("Warning:%s:%d: In <%s>, required attribute `%s' is not specified"),
CURRENT_FILE_LINE, ARG (0), "domain"));
return;
}
if (!codeset)
{
MP4HERROR ((warning_status, 0,
_("Warning:%s:%d: In <%s>, required attribute `%s' is not specified"),
CURRENT_FILE_LINE, ARG (0), "codeset"));
return;
}
bind_textdomain_codeset (domain, codeset);
}
static void
mp4m_intl_gettext (MP4H_BUILTIN_ARGS)
{
const char *domain;
char *cp, *msgstr;
domain = predefined_attribute ("domain", &argc, argv, FALSE);
for (cp = ARGBODY; *cp != '\0'; cp++)
if (CHAR_SLASH == *cp)
*cp = '/';
if (domain)
msgstr = dgettext(domain, ARGBODY);
else
msgstr = gettext(ARGBODY);
obstack_grow (obs, msgstr, strlen (msgstr));
}