~ubuntu-branches/ubuntu/maverick/uim/maverick

« back to all changes in this revision

Viewing changes to uim/intl.c

  • Committer: Bazaar Package Importer
  • Author(s): Masahito Omote
  • Date: 2008-06-25 19:56:33 UTC
  • mfrom: (3.1.18 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080625195633-8jljph4rfq00l8o7
Tags: 1:1.5.1-2
* uim-tcode: provide tutcode-custom.scm, tutcode-bushudic.scm
  and tutcode-rule.scm (Closes: #482659)
* Fix FTBFS: segv during compile (Closes: #483078).
  I personally think this bug is not specific for uim but is a optimization
  problem on gcc-4.3.1. (https://bugs.freedesktop.org/show_bug.cgi?id=16477)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 
3
 
  Copyright (c) 2003-2006 uim Project http://uim.freedesktop.org/
 
3
  Copyright (c) 2003-2008 uim Project http://code.google.com/p/uim/
4
4
 
5
5
  All rights reserved.
6
6
 
40
40
 
41
41
#include <stdlib.h>
42
42
#include <string.h>
43
 
#ifdef ENABLE_NLS
 
43
#if ENABLE_NLS
44
44
#include <locale.h>
45
45
#endif
46
46
 
47
47
#include "gettext.h"
48
48
#include "uim-scm.h"
49
 
#include "uim-compat-scm.h"
 
49
#include "uim-scm-abbrev.h"
50
50
 
51
51
/* for uim_init_intl_subrs() */
52
52
#include "uim-internal.h"
54
54
static uim_lisp
55
55
intl_gettext_package()
56
56
{
57
 
  return uim_scm_make_str(GETTEXT_PACKAGE);
 
57
  return MAKE_STR(GETTEXT_PACKAGE);
58
58
}
59
59
 
60
60
 
63
63
{
64
64
  const char *new_domain;
65
65
 
66
 
  if (uim_scm_nullp(domainname)) {
 
66
  if (FALSEP(domainname)) {
67
67
    new_domain = textdomain(NULL);
68
68
  } else {
69
 
    new_domain = textdomain(uim_scm_refer_c_str(domainname));
 
69
    new_domain = textdomain(REFER_C_STR(domainname));
70
70
  }
71
71
 
72
 
  return uim_scm_make_str(new_domain);
 
72
  return MAKE_STR(new_domain);
73
73
}
74
74
 
75
75
static uim_lisp
77
77
{
78
78
  const char *domain, *new_dir;
79
79
 
80
 
  domain = uim_scm_refer_c_str(domainname);
 
80
  domain = REFER_C_STR(domainname);
81
81
 
82
 
  if (uim_scm_nullp(dirname)) {
 
82
  if (FALSEP(dirname)) {
83
83
    new_dir = bindtextdomain(domain, NULL);
84
84
  } else {
85
 
    new_dir = bindtextdomain(domain, uim_scm_refer_c_str(dirname));
 
85
    new_dir = bindtextdomain(domain, REFER_C_STR(dirname));
86
86
  }
87
87
 
88
 
  return uim_scm_make_str(new_dir);
 
88
  return MAKE_STR(new_dir);
89
89
}
90
90
 
91
91
static uim_lisp
94
94
  const char *c_current_codeset, *c_codeset;
95
95
  uim_lisp current_codeset;
96
96
 
97
 
  if (!uim_scm_stringp(domainname)
98
 
      || !(uim_scm_stringp(codeset) || UIM_SCM_FALSEP(codeset)))
 
97
  if (!STRP(domainname)
 
98
      || !(STRP(codeset) || FALSEP(codeset)))
99
99
    return uim_scm_f();
100
100
 
101
 
  c_codeset = (UIM_SCM_FALSEP(codeset)) ? NULL : uim_scm_refer_c_str(codeset);
102
 
  c_current_codeset = bind_textdomain_codeset(uim_scm_refer_c_str(domainname),
103
 
                                              c_codeset);
 
101
  c_codeset = (FALSEP(codeset)) ? NULL : REFER_C_STR(codeset);
 
102
  c_current_codeset
 
103
    = bind_textdomain_codeset(REFER_C_STR(domainname), c_codeset);
104
104
  if (c_current_codeset) {
105
 
    current_codeset = uim_scm_make_str(c_current_codeset);
 
105
    current_codeset = MAKE_STR(c_current_codeset);
106
106
  } else {
107
107
    current_codeset = uim_scm_f();
108
108
  }
113
113
static uim_lisp
114
114
intl_gettext(uim_lisp msgid)
115
115
{
116
 
  return uim_scm_make_str(gettext(uim_scm_refer_c_str(msgid)));
 
116
  return MAKE_STR(gettext(REFER_C_STR(msgid)));
117
117
}
118
118
 
119
119
static uim_lisp
121
121
{
122
122
  const char *translated;
123
123
 
124
 
  if (!uim_scm_stringp(domainname) || !uim_scm_stringp(msgid))
 
124
  if (!STRP(domainname) || !STRP(msgid))
125
125
    return uim_scm_f();
126
126
 
127
 
  translated = dgettext(uim_scm_refer_c_str(domainname),
128
 
                        uim_scm_refer_c_str(msgid));
 
127
  translated = dgettext(REFER_C_STR(domainname),
 
128
                        REFER_C_STR(msgid));
129
129
 
130
 
  return uim_scm_make_str(translated);
 
130
  return MAKE_STR(translated);
131
131
}
132
132
 
133
133
static uim_lisp
134
134
intl_dcgettext(uim_lisp domainname, uim_lisp msgid, uim_lisp category)
135
135
{
136
 
  return uim_scm_make_str(dcgettext(uim_scm_refer_c_str(domainname),
137
 
                                    uim_scm_refer_c_str(msgid),
138
 
                                    uim_scm_c_int(category)));
 
136
  return MAKE_STR(dcgettext(REFER_C_STR(domainname),
 
137
                            REFER_C_STR(msgid),
 
138
                            C_INT(category)));
139
139
}
140
140
 
141
141
static uim_lisp
142
142
intl_ngettext(uim_lisp msgid1, uim_lisp msgid2, uim_lisp n)
143
143
{
144
 
  return uim_scm_make_str(ngettext(uim_scm_refer_c_str(msgid1),
145
 
                                   uim_scm_refer_c_str(msgid2),
146
 
                                   uim_scm_c_int(n)));
 
144
  return MAKE_STR(ngettext(REFER_C_STR(msgid1),
 
145
                           REFER_C_STR(msgid2),
 
146
                           C_INT(n)));
147
147
}
148
148
 
149
149
static uim_lisp
150
150
intl_dngettext(uim_lisp domainname, uim_lisp msgid1, uim_lisp msgid2, uim_lisp n)
151
151
{
152
 
  return uim_scm_make_str(dngettext(uim_scm_refer_c_str(domainname),
153
 
                                    uim_scm_refer_c_str(msgid1),
154
 
                                    uim_scm_refer_c_str(msgid2),
155
 
                                    uim_scm_c_int(n)));
 
152
  return MAKE_STR(dngettext(REFER_C_STR(domainname),
 
153
                            REFER_C_STR(msgid1),
 
154
                            REFER_C_STR(msgid2),
 
155
                            C_INT(n)));
156
156
}
157
157
 
158
158
static uim_lisp
159
159
intl_dcngettext(uim_lisp domainname, uim_lisp msgid1, uim_lisp msgid2, uim_lisp n, uim_lisp category)
160
160
{
161
 
  return uim_scm_make_str(dcngettext(uim_scm_refer_c_str(domainname),
162
 
                                     uim_scm_refer_c_str(msgid1),
163
 
                                     uim_scm_refer_c_str(msgid2),
164
 
                                     uim_scm_c_int(n),
165
 
                                     uim_scm_c_int(category)));
 
161
  return MAKE_STR(dcngettext(REFER_C_STR(domainname),
 
162
                             REFER_C_STR(msgid1),
 
163
                             REFER_C_STR(msgid2),
 
164
                             C_INT(n),
 
165
                             C_INT(category)));
166
166
}
167
167
 
168
168
static void
169
169
intl_init_locale(void)
170
170
{
171
 
#ifdef ENABLE_NLS
 
171
#if ENABLE_NLS
172
172
  const char *current_locale;
173
173
 
174
174
  /* Perform setlocale() only if it maybe did not performed before. This  */
196
196
{
197
197
  intl_init_locale();
198
198
 
199
 
  uim_scm_init_subr_0("gettext-package", intl_gettext_package);
200
 
  uim_scm_init_subr_1("textdomain", intl_textdomain);
201
 
  uim_scm_init_subr_2("bindtextdomain", intl_bindtextdomain);
202
 
  uim_scm_init_subr_2("bind-textdomain-codeset", intl_bind_textdomain_codeset);
203
 
  uim_scm_init_subr_1("gettext", intl_gettext);
204
 
  uim_scm_init_subr_2("dgettext", intl_dgettext);
205
 
  uim_scm_init_subr_3("dcgettext", intl_dcgettext);
206
 
  uim_scm_init_subr_3("ngettext", intl_ngettext);
207
 
  uim_scm_init_subr_4("dngettext", intl_dngettext);
208
 
  uim_scm_init_subr_5("dcngettext", intl_dcngettext);
 
199
  uim_scm_init_proc0("gettext-package", intl_gettext_package);
 
200
  uim_scm_init_proc1("textdomain", intl_textdomain);
 
201
  uim_scm_init_proc2("bindtextdomain", intl_bindtextdomain);
 
202
  uim_scm_init_proc2("bind-textdomain-codeset", intl_bind_textdomain_codeset);
 
203
  uim_scm_init_proc1("gettext", intl_gettext);
 
204
  uim_scm_init_proc2("dgettext", intl_dgettext);
 
205
  uim_scm_init_proc3("dcgettext", intl_dcgettext);
 
206
  uim_scm_init_proc3("ngettext", intl_ngettext);
 
207
  uim_scm_init_proc4("dngettext", intl_dngettext);
 
208
  uim_scm_init_proc5("dcngettext", intl_dcngettext);
209
209
 
210
 
#ifdef ENABLE_NLS
211
 
  uim_scm_provide("nls");
 
210
#if ENABLE_NLS
 
211
  uim_scm_callf("provide", "s", "nls");
212
212
#endif
213
213
}