mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-23 01:36:39 +08:00
Add translation support to wgetopt library
darcs-hash:20060128021740-ac50b-f670531d3d79cb8070756669f83f4e8b25233a0a.gz
This commit is contained in:
parent
1977d3beb3
commit
ea81321ccb
|
@ -165,6 +165,9 @@ AC_CHECK_FUNCS( wcsdup wcsndup wcslen wcscasecmp wcsncasecmp gettext fwprintf )
|
|||
AC_CHECK_FUNCS( futimes wcwidth wcswidth getopt_long wcstok fputwc fgetwc )
|
||||
AC_CHECK_FUNCS( wcstol dcgettext )
|
||||
|
||||
AC_DEFINE([HAVE_TRANSLATE_H], [1],
|
||||
[Define to 1 if the wgettext function should be used for translating strings.])
|
||||
|
||||
# Check again for gettext library, and insert results into the Makefile
|
||||
AC_CHECK_FUNC(gettext, AC_SUBST(HAVE_GETTEXT,1), AC_SUBST(HAVE_GETTEXT,0) )
|
||||
|
||||
|
|
126
wgetopt.c
126
wgetopt.c
|
@ -31,23 +31,23 @@
|
|||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
@ -139,32 +139,32 @@ int woptopt = '?';
|
|||
|
||||
/* Describe how to deal with options that follow non-option ARGV-elements.
|
||||
|
||||
If the caller did not specify anything,
|
||||
the default is REQUIRE_ORDER if the environment variable
|
||||
POSIXLY_CORRECT is defined, PERMUTE otherwise.
|
||||
If the caller did not specify anything,
|
||||
the default is REQUIRE_ORDER if the environment variable
|
||||
POSIXLY_CORRECT is defined, PERMUTE otherwise.
|
||||
|
||||
REQUIRE_ORDER means don't recognize them as options;
|
||||
stop option processing when the first non-option is seen.
|
||||
This is what Unix does.
|
||||
This mode of operation is selected by either setting the environment
|
||||
variable POSIXLY_CORRECT, or using `+' as the first character
|
||||
of the list of option characters.
|
||||
REQUIRE_ORDER means don't recognize them as options;
|
||||
stop option processing when the first non-option is seen.
|
||||
This is what Unix does.
|
||||
This mode of operation is selected by either setting the environment
|
||||
variable POSIXLY_CORRECT, or using `+' as the first character
|
||||
of the list of option characters.
|
||||
|
||||
PERMUTE is the default. We permute the contents of ARGV as we scan,
|
||||
so that eventually all the non-options are at the end. This allows options
|
||||
to be given in any order, even with programs that were not written to
|
||||
expect this.
|
||||
PERMUTE is the default. We permute the contents of ARGV as we scan,
|
||||
so that eventually all the non-options are at the end. This allows options
|
||||
to be given in any order, even with programs that were not written to
|
||||
expect this.
|
||||
|
||||
RETURN_IN_ORDER is an option available to programs that were written
|
||||
to expect options and other ARGV-elements in any order and that care about
|
||||
the ordering of the two. We describe each non-option ARGV-element
|
||||
as if it were the argument of an option with character code 1.
|
||||
Using `-' as the first character of the list of option characters
|
||||
selects this mode of operation.
|
||||
RETURN_IN_ORDER is an option available to programs that were written
|
||||
to expect options and other ARGV-elements in any order and that care about
|
||||
the ordering of the two. We describe each non-option ARGV-element
|
||||
as if it were the argument of an option with character code 1.
|
||||
Using `-' as the first character of the list of option characters
|
||||
selects this mode of operation.
|
||||
|
||||
The special argument `--' forces an end of option-scanning regardless
|
||||
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
|
||||
`--' can cause `getopt' to return EOF with `woptind' != ARGC. */
|
||||
The special argument `--' forces an end of option-scanning regardless
|
||||
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
|
||||
`--' can cause `getopt' to return EOF with `woptind' != ARGC. */
|
||||
|
||||
static enum
|
||||
{
|
||||
|
@ -174,6 +174,16 @@ static enum
|
|||
/* Value of POSIXLY_CORRECT environment variable. */
|
||||
static char *posixly_correct;
|
||||
|
||||
/**
|
||||
Use translation functions if available
|
||||
*/
|
||||
#ifdef HAVE_TRANSLATE_H
|
||||
#include "translate.h"
|
||||
#define _(wstr) wgettext(wstr)
|
||||
#else
|
||||
#define _(wstr) wstr
|
||||
#endif
|
||||
|
||||
#ifdef __GNU_LIBRARY__
|
||||
/* We want to avoid inclusion of string.h with non-GNU libraries
|
||||
because there are many ways it can cause trouble.
|
||||
|
@ -385,11 +395,11 @@ _wgetopt_initialize (optstring)
|
|||
int
|
||||
_wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
int argc;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *optstring;
|
||||
const struct woption *longopts;
|
||||
int *longind;
|
||||
int long_only;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *optstring;
|
||||
const struct woption *longopts;
|
||||
int *longind;
|
||||
int long_only;
|
||||
{
|
||||
woptarg = NULL;
|
||||
|
||||
|
@ -524,7 +534,7 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
if (ambig && !exact)
|
||||
{
|
||||
if (wopterr)
|
||||
fwprintf (stderr, L"%ls: option `%ls' is ambiguous\n",
|
||||
fwprintf (stderr, _(L"%ls: Option `%ls' is ambiguous\n"),
|
||||
argv[0], argv[woptind]);
|
||||
nextchar += wcslen (nextchar);
|
||||
woptind++;
|
||||
|
@ -548,12 +558,12 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
if (argv[woptind - 1][1] == '-')
|
||||
/* --option */
|
||||
fwprintf (stderr,
|
||||
L"%ls: option `--%ls' doesn't allow an argument\n",
|
||||
_(L"%ls: Option `--%ls' doesn't allow an argument\n"),
|
||||
argv[0], pfound->name);
|
||||
else
|
||||
/* +option or -option */
|
||||
fwprintf (stderr,
|
||||
L"%ls: option `%lc%ls' doesn't allow an argument\n",
|
||||
_(L"%ls: Option `%lc%ls' doesn't allow an argument\n"),
|
||||
argv[0], argv[woptind - 1][0], pfound->name);
|
||||
}
|
||||
nextchar += wcslen (nextchar);
|
||||
|
@ -567,7 +577,7 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
else
|
||||
{
|
||||
if (wopterr)
|
||||
fwprintf (stderr, L"%ls: option `%ls' requires an argument\n",
|
||||
fwprintf (stderr, _(L"%ls: Option `%ls' requires an argument\n"),
|
||||
argv[0], argv[woptind - 1]);
|
||||
nextchar += wcslen (nextchar);
|
||||
return optstring[0] == ':' ? ':' : '?';
|
||||
|
@ -595,11 +605,11 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
{
|
||||
if (argv[woptind][1] == '-')
|
||||
/* --option */
|
||||
fwprintf (stderr, L"%ls: unrecognized option `--%ls'\n",
|
||||
fwprintf (stderr, _(L"%ls: Unrecognized option `--%ls'\n"),
|
||||
argv[0], nextchar);
|
||||
else
|
||||
/* +option or -option */
|
||||
fwprintf (stderr, L"%ls: unrecognized option `%lc%ls'\n",
|
||||
fwprintf (stderr, _(L"%ls: Unrecognized option `%lc%ls'\n"),
|
||||
argv[0], argv[woptind][0], nextchar);
|
||||
}
|
||||
nextchar = (wchar_t *) L"";
|
||||
|
@ -624,9 +634,9 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
{
|
||||
if (posixly_correct)
|
||||
/* 1003.2 specifies the format of this message. */
|
||||
fwprintf (stderr, L"%ls: illegal option -- %lc\n", argv[0], c);
|
||||
fwprintf (stderr, _(L"%ls: Illegal option -- %lc\n"), argv[0], c);
|
||||
else
|
||||
fwprintf (stderr, L"%ls: invalid option -- %lc\n", argv[0], c);
|
||||
fwprintf (stderr, _(L"%ls: Invalid option -- %lc\n"), argv[0], c);
|
||||
}
|
||||
woptopt = c;
|
||||
return '?';
|
||||
|
@ -660,7 +670,7 @@ _wgetopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
|||
if (wopterr)
|
||||
{
|
||||
/* 1003.2 specifies the format of this message. */
|
||||
fwprintf (stderr, L"%ls: option requires an argument -- %lc\n",
|
||||
fwprintf (stderr, _(L"%ls: Option requires an argument -- %lc\n"),
|
||||
argv[0], c);
|
||||
}
|
||||
woptopt = c;
|
||||
|
@ -695,10 +705,10 @@ wgetopt (argc, argv, optstring)
|
|||
int
|
||||
wgetopt_long (argc, argv, options, long_options, opt_index)
|
||||
int argc;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *options;
|
||||
const struct woption *long_options;
|
||||
int *opt_index;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *options;
|
||||
const struct woption *long_options;
|
||||
int *opt_index;
|
||||
{
|
||||
return _wgetopt_internal (argc, argv, options, long_options, opt_index, 0);
|
||||
}
|
||||
|
@ -706,10 +716,10 @@ wgetopt_long (argc, argv, options, long_options, opt_index)
|
|||
int
|
||||
wgetopt_long_only (argc, argv, options, long_options, opt_index)
|
||||
int argc;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *options;
|
||||
const struct woption *long_options;
|
||||
int *opt_index;
|
||||
wchar_t *const *argv;
|
||||
const wchar_t *options;
|
||||
const struct woption *long_options;
|
||||
int *opt_index;
|
||||
{
|
||||
return _wgetopt_internal (argc, argv, options, long_options, opt_index, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user