~ubuntu-branches/ubuntu/trusty/bash/trusty-security

« back to all changes in this revision

Viewing changes to lib/intl/plural-exp.h

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-03-03 22:52:05 UTC
  • mfrom: (1.3.5) (2.2.6 experimental)
  • Revision ID: package-import@ubuntu.com-20140303225205-87ltrt5kspeq0g1b
Tags: 4.3-1ubuntu1
* Merge with Debian; remaining changes:
  - skel.bashrc:
    - Run lesspipe.
    - Enable ls aliases.
    - Set options in ll alias to -alF.
    - Define an alert alias.
    - Enabled colored grep aliases.
  - etc.bash.bashrc:
    - Add sudo hint.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* plural-exp.h - defines for expression parsing and evaluation for plural form selection. */
 
2
 
 
3
/* Copyright (C) 2000, 2001, 2002, 2005-2009 Free Software Foundation, Inc.
 
4
   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
5
 
 
6
   This file is part of GNU Bash.
 
7
 
 
8
   Bash is free software: you can redistribute it and/or modify
 
9
   it under the terms of the GNU General Public License as published by
 
10
   the Free Software Foundation, either version 3 of the License, or
 
11
   (at your option) any later version.
 
12
 
 
13
   Bash is distributed in the hope that it will be useful,
 
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
   GNU General Public License for more details.
 
17
 
 
18
   You should have received a copy of the GNU General Public License
 
19
   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
 
20
*/
 
21
 
 
22
#ifndef _PLURAL_EXP_H
 
23
#define _PLURAL_EXP_H
 
24
 
 
25
#ifndef PARAMS
 
26
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
 
27
#  define PARAMS(args) args
 
28
# else
 
29
#  define PARAMS(args) ()
 
30
# endif
 
31
#endif
 
32
 
 
33
#ifndef internal_function
 
34
# define internal_function
 
35
#endif
 
36
 
 
37
#ifndef attribute_hidden
 
38
# define attribute_hidden
 
39
#endif
 
40
 
 
41
 
 
42
/* This is the representation of the expressions to determine the
 
43
   plural form.  */
 
44
struct expression
 
45
{
 
46
  int nargs;                    /* Number of arguments.  */
 
47
  enum operator
 
48
  {
 
49
    /* Without arguments:  */
 
50
    var,                        /* The variable "n".  */
 
51
    num,                        /* Decimal number.  */
 
52
    /* Unary operators:  */
 
53
    lnot,                       /* Logical NOT.  */
 
54
    /* Binary operators:  */
 
55
    mult,                       /* Multiplication.  */
 
56
    divide,                     /* Division.  */
 
57
    module,                     /* Modulo operation.  */
 
58
    plus,                       /* Addition.  */
 
59
    minus,                      /* Subtraction.  */
 
60
    less_than,                  /* Comparison.  */
 
61
    greater_than,               /* Comparison.  */
 
62
    less_or_equal,              /* Comparison.  */
 
63
    greater_or_equal,           /* Comparison.  */
 
64
    equal,                      /* Comparison for equality.  */
 
65
    not_equal,                  /* Comparison for inequality.  */
 
66
    land,                       /* Logical AND.  */
 
67
    lor,                        /* Logical OR.  */
 
68
    /* Ternary operators:  */
 
69
    qmop                        /* Question mark operator.  */
 
70
  } operation;
 
71
  union
 
72
  {
 
73
    unsigned long int num;      /* Number value for `num'.  */
 
74
    struct expression *args[3]; /* Up to three arguments.  */
 
75
  } val;
 
76
};
 
77
 
 
78
/* This is the data structure to pass information to the parser and get
 
79
   the result in a thread-safe way.  */
 
80
struct parse_args
 
81
{
 
82
  const char *cp;
 
83
  struct expression *res;
 
84
};
 
85
 
 
86
 
 
87
/* Names for the libintl functions are a problem.  This source code is used
 
88
   1. in the GNU C Library library,
 
89
   2. in the GNU libintl library,
 
90
   3. in the GNU gettext tools.
 
91
   The function names in each situation must be different, to allow for
 
92
   binary incompatible changes in 'struct expression'.  Furthermore,
 
93
   1. in the GNU C Library library, the names have a __ prefix,
 
94
   2.+3. in the GNU libintl library and in the GNU gettext tools, the names
 
95
         must follow ANSI C and not start with __.
 
96
   So we have to distinguish the three cases.  */
 
97
#ifdef _LIBC
 
98
# define FREE_EXPRESSION __gettext_free_exp
 
99
# define PLURAL_PARSE __gettextparse
 
100
# define GERMANIC_PLURAL __gettext_germanic_plural
 
101
# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
 
102
#elif defined (IN_LIBINTL)
 
103
# define FREE_EXPRESSION libintl_gettext_free_exp
 
104
# define PLURAL_PARSE libintl_gettextparse
 
105
# define GERMANIC_PLURAL libintl_gettext_germanic_plural
 
106
# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
 
107
#else
 
108
# define FREE_EXPRESSION free_plural_expression
 
109
# define PLURAL_PARSE parse_plural_expression
 
110
# define GERMANIC_PLURAL germanic_plural
 
111
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
 
112
#endif
 
113
 
 
114
extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
 
115
     internal_function;
 
116
extern int PLURAL_PARSE PARAMS ((void *arg));
 
117
extern struct expression GERMANIC_PLURAL attribute_hidden;
 
118
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
 
119
                                               struct expression **pluralp,
 
120
                                               unsigned long int *npluralsp))
 
121
     internal_function;
 
122
 
 
123
#if !defined (_LIBC) && !defined (IN_LIBINTL)
 
124
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
 
125
                                              unsigned long int n));
 
126
#endif
 
127
 
 
128
#endif /* _PLURAL_EXP_H */