diff options
-rw-r--r-- | ext/gettext/Makefile.am | 6 | ||||
-rw-r--r-- | ext/gettext/config.h.stub | 3 | ||||
-rw-r--r-- | ext/gettext/config.m4 | 45 | ||||
-rw-r--r-- | ext/gettext/gettext.c | 170 | ||||
-rw-r--r-- | ext/gettext/setup.stub | 6 |
5 files changed, 230 insertions, 0 deletions
diff --git a/ext/gettext/Makefile.am b/ext/gettext/Makefile.am new file mode 100644 index 0000000000..295ca2c889 --- /dev/null +++ b/ext/gettext/Makefile.am @@ -0,0 +1,6 @@ +# $Id$ + +INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend +noinst_LIBRARIES=libphpext_gettext.a +libphpext_gettext_a_SOURCES=gettext.c + diff --git a/ext/gettext/config.h.stub b/ext/gettext/config.h.stub new file mode 100644 index 0000000000..54fe1349ce --- /dev/null +++ b/ext/gettext/config.h.stub @@ -0,0 +1,3 @@ +/* define if you want to use the gettext extension */ + +#define HAVE_LIBINTL 0 diff --git a/ext/gettext/config.m4 b/ext/gettext/config.m4 new file mode 100644 index 0000000000..7a55dfb388 --- /dev/null +++ b/ext/gettext/config.m4 @@ -0,0 +1,45 @@ +dnl $Id$ +dnl config.m4 for extension gettext +dnl don't forget to call PHP_EXTENSION(gettext) + +AC_MSG_CHECKING(whether to include GNU gettext support) +AC_ARG_WITH(gettext, +[ --with-gettext[=DIR] Include GNU gettext support. DIR is the gettext + install directory, defaults to /usr/local], +[ + if test "$withval" != "no"; then + if test "$withval" = "yes"; then + GETTEXT_INCDIR=/usr/local/include + test -f /usr/local/include/libintl.h && GETTEXT_INCDIR=/usr/local/include/ + GETTEXT_LIBDIR=/usr/local/lib + else + GETTEXT_INCDIR=$withval/include + test -f $withval/include/libintl.h && GETTEXT_INCDIR=$withval/include + GETTEXT_LIBDIR=$withval/lib + fi + GETTEXT_INCLUDE=-I$GETTEXT_INCDIR + GETTEXT_LFLAGS=-L$GETTEXT_LIBDIR + O_CPPFLAGS="$CPPFLAGS" + O_LDFLAGS=$LDFLAGS + CPPFLAGS="$CPPFLAGS -I$GETTEXT_INCDIR" + LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR" + GETTEXT_LIBS= + AC_MSG_RESULT(yes) + AC_CHECK_LIB(intl, bindtextdomain, GETTEXT_LIBS="-lintl",[ + AC_CHECK_LIB(c, bindtextdomain, GETTEXT_LIBS=,[ + AC_MSG_ERROR(Unable to find required gettext library) + ],) + ],) + + AC_DEFINE(HAVE_LIBINTL) + PHP_EXTENSION(gettext) + + EXTRA_LIBS="$EXTRA_LIBS $GETTEXT_LFLAGS $GETTEXT_LIBS" + INCLUDES="$INCLUDES $GETTEXT_INCLUDE" + + else + AC_MSG_RESULT(no) + fi +],[ + AC_MSG_RESULT(no) +]) diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c new file mode 100644 index 0000000000..69166d18df --- /dev/null +++ b/ext/gettext/gettext.c @@ -0,0 +1,170 @@ +/* + +----------------------------------------------------------------------+ + | PHP HTML Embedded Scripting Language Version 3.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-1999 PHP Development Team (See Credits file) | + +----------------------------------------------------------------------+ + | This program is free software; you can redistribute it and/or modify | + | it under the terms of one of the following licenses: | + | | + | A) the GNU General Public License as published by the Free Software | + | Foundation; either version 2 of the License, or (at your option) | + | any later version. | + | | + | B) the PHP License as published by the PHP Development Team and | + | included in the distribution in the file: LICENSE | + | | + | 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 both licenses referred to here. | + | If you did not, or have any questions about PHP licensing, please | + | contact core@php.net. | + +----------------------------------------------------------------------+ + | Author: Alex Plotnick <alex@wgate.com> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#include <stdio.h> +#include "php.h" +#include "internal_functions.h" +#include "php3_gettext.h" + +#if HAVE_LIBINTL + +#include <libintl.h> + +function_entry php3_gettext_functions[] = { + {"textdomain", php3_textdomain, NULL}, + {"gettext", php3_gettext, NULL}, + {"_", php3_gettext, NULL}, + {"dgettext", php3_dgettext, NULL}, + {"dcgettext", php3_dcgettext, NULL}, + {"bindtextdomain", php3_bindtextdomain, NULL}, + {NULL, NULL, NULL} +}; + +php3_module_entry php3_gettext_module_entry = { + "gettext", php3_gettext_functions, NULL, NULL, NULL, NULL, php3_info_gettext, STANDARD_MODULE_PROPERTIES +}; + +void php3_info_gettext(void) +{ + php3_printf("GNU gettext support active."); +} + +void php3_textdomain(INTERNAL_FUNCTION_PARAMETERS) +{ + pval *domain; + char *domain_name, *retval; + + if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &domain) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string(domain); + + if (strcmp(domain->value.str.val, "") + && strcmp(domain->value.str.val, "0")) + { + domain_name = domain->value.str.val; + } else { + domain_name = NULL; + } + + retval = textdomain(domain_name); + + RETURN_STRING(retval, 1); +} + +void php3_gettext(INTERNAL_FUNCTION_PARAMETERS) +{ + pval *msgid; + char *msgstr; + + if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &msgid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string(msgid); + + msgstr = gettext(msgid->value.str.val); + + RETURN_STRING(msgstr, 1); +} + +void php3_dgettext(INTERNAL_FUNCTION_PARAMETERS) +{ + pval *domain_name, *msgid; + char *msgstr; + + if (ARG_COUNT(ht) != 2 + || getParameters(ht, 2, &domain_name, &msgid) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string(domain_name); + convert_to_string(msgid); + + msgstr = dgettext(domain_name->value.str.val, msgid->value.str.val); + + RETURN_STRING(msgstr, 1); +} + +void php3_dcgettext(INTERNAL_FUNCTION_PARAMETERS) +{ + pval *domain_name, *msgid, *category; + char *msgstr; + + if (ARG_COUNT(ht) != 3 + || getParameters(ht, 3, &domain_name, &msgid, &category) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string(domain_name); + convert_to_string(msgid); + convert_to_long(category); + + msgstr = dcgettext(domain_name->value.str.val, + msgid->value.str.val, + category->value.lval); + + RETURN_STRING(msgstr, 1); +} + +void php3_bindtextdomain(INTERNAL_FUNCTION_PARAMETERS) +{ + pval *domain_name, *dir; + char *retval, *dir_name; + + if (ARG_COUNT(ht) != 2 + || getParameters(ht, 2, &domain_name, &dir) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string(domain_name); + convert_to_string(dir); + + if (strcmp(dir->value.str.val, "") + && strcmp(dir->value.str.val, "0")) + { + dir_name = dir->value.str.val; + } else { + dir_name = NULL; + } + + retval = bindtextdomain(domain_name->value.str.val, dir_name); + + RETURN_STRING(retval, 1); +} + +#endif /* HAVE_LIBINTL */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/gettext/setup.stub b/ext/gettext/setup.stub new file mode 100644 index 0000000000..cc9fdd43c8 --- /dev/null +++ b/ext/gettext/setup.stub @@ -0,0 +1,6 @@ +# $Id$ + +define_option with-gettext 'gettext support?' yesnodir \ + "yes /usr/local" \ +' Whether to include gettext support.' + |