~barcc/ubuntu/saucy/pyicu/lp1200419

1.1.2 by Bernd Zeimetz
Import upstream version 0.9
1
/* ====================================================================
2
 * Copyright (c) 2009-2010 Open Source Applications Foundation.
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions: 
10
 *
11
 * The above copyright notice and this permission notice shall be included
12
 * in all copies or substantial portions of the Software. 
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
 * DEALINGS IN THE SOFTWARE.
21
 * ====================================================================
22
 */
23
24
#include "common.h"
25
#include "structmember.h"
26
27
#include "bases.h"
28
#include "transliterator.h"
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
29
#include "unicodeset.h"
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
30
#include "macros.h"
31
32
DECLARE_CONSTANTS_TYPE(UTransDirection);
33
34
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
35
/* UTransPosition */
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
36
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
37
class t_utransposition : public _wrapper {
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
38
public:
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
39
    UTransPosition *object;
40
};
41
42
static int t_utransposition_init(t_utransposition *self,
43
                                 PyObject *args, PyObject *kwds);
44
45
static PyMethodDef t_utransposition_methods[] = {
46
    { NULL, NULL, 0, NULL }
47
};
48
49
static void t_utransposition_dealloc(t_utransposition *self)
50
{
51
    if (self->object)
52
    {
53
        if (self->flags & T_OWNED)
54
            delete self->object;
55
            
56
        self->object = NULL;
57
    }
58
59
    self->ob_type->tp_free((PyObject *) self);
60
}
61
62
DECLARE_STRUCT(UTransPosition, t_utransposition, UTransPosition,
63
               t_utransposition_init, t_utransposition_dealloc);
64
65
66
/* Transliterator */
67
68
static int t_transliterator_init(t_transliterator *self,
69
                                 PyObject *args, PyObject *kwds);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
70
static PyObject *t_transliterator_getMaximumContextLength(t_transliterator *self);
71
static PyObject *t_transliterator_countElements(t_transliterator *self);
72
static PyObject *t_transliterator_getElement(t_transliterator *self, PyObject *arg);
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
73
static PyObject *t_transliterator_getSourceSet(t_transliterator *self);
74
static PyObject *t_transliterator_getTargetSet(t_transliterator *self);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
75
static PyObject *t_transliterator_createInverse(t_transliterator *self);
76
static PyObject *t_transliterator_transliterate(t_transliterator *self, PyObject *args);
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
77
static PyObject *t_transliterator_finishTransliteration(t_transliterator *self, PyObject *args);
78
static PyObject *t_transliterator_filteredTransliterate(t_transliterator *self, PyObject *args);
79
static PyObject *t_transliterator_getFilter(t_transliterator *self);
80
static PyObject *t_transliterator_orphanFilter(t_transliterator *self);
81
static PyObject *t_transliterator_adoptFilter(t_transliterator *self, PyObject *arg);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
82
static PyObject *t_transliterator_getAvailableIDs(PyTypeObject *type);
83
static PyObject *t_transliterator_createInstance(PyTypeObject *type, PyObject *args);
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
84
static PyObject *t_transliterator_createFromRules(PyTypeObject *type, PyObject *args);
85
static PyObject *t_transliterator_registerInstance(PyTypeObject *type, PyObject *args);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
86
87
static PyMethodDef t_transliterator_methods[] = {
88
    DECLARE_METHOD(t_transliterator, transliterate, METH_VARARGS),
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
89
    DECLARE_METHOD(t_transliterator, finishTransliteration, METH_VARARGS),
90
    DECLARE_METHOD(t_transliterator, filteredTransliterate, METH_VARARGS),
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
91
    DECLARE_METHOD(t_transliterator, getMaximumContextLength, METH_NOARGS),
92
    DECLARE_METHOD(t_transliterator, countElements, METH_NOARGS),
93
    DECLARE_METHOD(t_transliterator, getElement, METH_O),
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
94
    DECLARE_METHOD(t_transliterator, getSourceSet, METH_NOARGS),
95
    DECLARE_METHOD(t_transliterator, getTargetSet, METH_NOARGS),
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
96
    DECLARE_METHOD(t_transliterator, createInverse, METH_NOARGS),
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
97
    DECLARE_METHOD(t_transliterator, getFilter, METH_NOARGS),
98
    DECLARE_METHOD(t_transliterator, orphanFilter, METH_NOARGS),
99
    DECLARE_METHOD(t_transliterator, adoptFilter, METH_O),
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
100
    DECLARE_METHOD(t_transliterator, getAvailableIDs, METH_NOARGS | METH_CLASS),
101
    DECLARE_METHOD(t_transliterator, createInstance, METH_VARARGS | METH_CLASS),
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
102
    DECLARE_METHOD(t_transliterator, createFromRules, METH_VARARGS | METH_CLASS),
103
    DECLARE_METHOD(t_transliterator, registerInstance, METH_VARARGS | METH_CLASS),
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
104
    { NULL, NULL, 0, NULL }
105
};
106
107
DECLARE_TYPE(Transliterator, t_transliterator, UObject,
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
108
             Transliterator, t_transliterator_init, NULL);
109
110
111
/* PythonTransliterator */
112
113
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(PythonTransliterator)
114
115
PythonTransliterator::PythonTransliterator(t_transliterator *self,
116
                                           UnicodeString& id) :
117
    Transliterator(id, NULL)
118
{
119
    this->self = self;
120
    Py_XINCREF(this->self);
121
}
122
123
PythonTransliterator::PythonTransliterator(t_transliterator *self,
124
                                           UnicodeString& id,
125
                                           UnicodeFilter *adoptedFilter) :
126
    Transliterator(id, adoptedFilter)
127
{
128
    this->self = self;
129
    Py_XINCREF(this->self);
130
}
131
132
/**
133
 * Copy constructor.
134
 */
135
PythonTransliterator::PythonTransliterator(const PythonTransliterator& p) :
136
    Transliterator(p)
137
{
138
    this->self = p.self;
139
    Py_XINCREF(this->self);
140
}
141
142
PythonTransliterator::~PythonTransliterator()
143
{
144
    Py_XDECREF(this->self);
145
    this->self = NULL;
146
}
147
148
Transliterator* PythonTransliterator::clone(void) const
149
{
150
    return new PythonTransliterator(*this);
151
}
152
153
void PythonTransliterator::handleTransliterate(Replaceable& text,
154
                                               UTransPosition& pos,
155
                                               UBool incremental) const
156
{
157
    if (text.getDynamicClassID() == UnicodeString::getStaticClassID())
158
    {
159
        PyObject *name = PyString_FromString("handleTransliterate");
160
        PyObject *p_text = wrap_UnicodeString((UnicodeString *) &text, 0);
161
        PyObject *p_pos = wrap_UTransPosition(&pos, 0);
162
        PyObject *result =
163
            PyObject_CallMethodObjArgs((PyObject *) self, name, p_text, p_pos,
164
                                       incremental ? Py_True : Py_False, NULL);
165
166
        Py_DECREF(name);
167
        Py_DECREF(p_text);
168
        Py_DECREF(p_pos);
169
        Py_XDECREF(result);
170
    }
171
}
172
173
174
/* UTransPosition */
175
176
static int t_utransposition_init(t_utransposition *self,
177
                                 PyObject *args, PyObject *kwds)
178
{
179
    static char *kwnames[] = {
180
        "contextStart", "contextLimit", "start", "limit", NULL
181
    };
182
    int contextStart = 0, contextLimit = 0, start = 0, limit = 0;
183
184
    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iiii", kwnames,
185
                                     &contextStart, &contextLimit,
186
                                     &start, &limit))
187
        return -1;
188
189
    self->object = new UTransPosition();
190
    if (!self->object)
191
    {
192
        PyErr_NoMemory();
193
        return -1;
194
    }
195
196
    self->object->contextStart = contextStart;
197
    self->object->contextLimit = contextLimit;
198
    self->object->start = start;
199
    self->object->limit = limit;
200
201
    self->flags = T_OWNED;
202
203
    return 0;
204
}
205
206
static int t_utransposition_setter(int32_t *slot, PyObject *value)
207
{
208
    int32_t n;
209
210
    if (value == NULL)
211
    {
212
        PyErr_SetString(PyExc_TypeError, "Cannot delete attribute");
213
        return -1;
214
    }
215
216
    n = PyInt_AsLong(value);
217
    if (PyErr_Occurred())
218
        return -1;
219
220
    *slot = n;
221
222
    return 0;
223
}
224
225
static PyObject *t_utransposition_getContextLimit(t_utransposition *self,
226
                                                  void *closure)
227
{
228
    return PyInt_FromLong(self->object->contextLimit);
229
}
230
231
static int t_utransposition_setContextLimit(t_utransposition *self,
232
                                            PyObject *value, void *closure)
233
{
234
    return t_utransposition_setter(&self->object->contextLimit, value);
235
}
236
237
static PyObject *t_utransposition_getContextStart(t_utransposition *self,
238
                                                  void *closure)
239
{
240
    return PyInt_FromLong(self->object->contextStart);
241
}
242
243
static int t_utransposition_setContextStart(t_utransposition *self,
244
                                            PyObject *value, void *closure)
245
{
246
    return t_utransposition_setter(&self->object->contextStart, value);
247
}
248
249
static PyObject *t_utransposition_getLimit(t_utransposition *self,
250
                                           void *closure)
251
{
252
    return PyInt_FromLong(self->object->limit);
253
}
254
255
static int t_utransposition_setLimit(t_utransposition *self,
256
                                     PyObject *value, void *closure)
257
{
258
    return t_utransposition_setter(&self->object->limit, value);
259
}
260
261
static PyObject *t_utransposition_getStart(t_utransposition *self,
262
                                           void *closure)
263
{
264
    return PyInt_FromLong(self->object->start);
265
}
266
267
static int t_utransposition_setStart(t_utransposition *self,
268
                                     PyObject *value, void *closure)
269
{
270
    return t_utransposition_setter(&self->object->start, value);
271
}
272
273
static PyGetSetDef t_utransposition_properties[] = {
274
    {"contextLimit",
275
     (getter) t_utransposition_getContextLimit,
276
     (setter) t_utransposition_setContextLimit,
277
     "Ending index, exclusive, of the context to be considered for a transliteration operation.",
278
     NULL},
279
    {"contextStart",
280
     (getter) t_utransposition_getContextStart,
281
     (setter) t_utransposition_setContextStart,
282
     "Beginning index, inclusive, of the context to be considered for a transliteration operation.",
283
     NULL},
284
    {"limit",
285
     (getter) t_utransposition_getLimit,
286
     (setter) t_utransposition_setLimit,
287
     "Ending index, exclusive, of the text to be transliterated.",
288
     NULL},
289
    {"start",
290
     (getter) t_utransposition_getStart,
291
     (setter) t_utransposition_setStart,
292
     "Beginning index, inclusive, of the text to be transliterated.",
293
     NULL},
294
    {NULL}  /* Sentinel */
295
};
296
297
298
/* Transliterator */
299
300
static int t_transliterator_init(t_transliterator *self,
301
                                 PyObject *args, PyObject *kwds)
302
{
303
    UnicodeString *u, _u;
304
    UnicodeFilter *adoptedFilter;
305
306
    switch (PyTuple_Size(args)) {
307
      case 1:
308
        if (!parseArgs(args, "S", &u, &_u))
309
        {
310
            self->object = new PythonTransliterator(self, *u);
311
            self->flags = T_OWNED;
312
            break;
313
        }
314
        PyErr_SetArgsError((PyObject *) self, "__init__", args);
315
        return -1;
316
      case 2:
317
        if (!parseArgs(args, "SP", &u, &_u, TYPE_CLASSID(UnicodeFilter),
318
                       &adoptedFilter))
319
        {
320
            self->object = new PythonTransliterator(self, *u, (UnicodeFilter *) adoptedFilter->clone());
321
            self->flags = T_OWNED;
322
            break;
323
        }
324
        PyErr_SetArgsError((PyObject *) self, "__init__", args);
325
        return -1;
326
      default:
327
        PyErr_SetArgsError((PyObject *) self, "__init__", args);
328
        return -1;
329
    }
330
331
    if (self->object)
332
        return 0;
333
334
    return -1;
335
}
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
336
337
PyObject *wrap_Transliterator(Transliterator *transliterator)
338
{
339
    return wrap_Transliterator(transliterator, T_OWNED);
340
}
341
342
PyObject *wrap_Transliterator(const Transliterator &transliterator)
343
{
344
    return wrap_Transliterator(transliterator.clone(), T_OWNED);
345
}
346
347
348
static PyObject *t_transliterator_transliterate(t_transliterator *self,
349
                                                PyObject *args)
350
{
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
351
    UnicodeString *u0, _u0;
352
    UnicodeString *u1, _u1;
353
    t_utransposition *utransposition;
354
    int32_t start, limit, len;
355
    UChar32 c;
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
356
357
    switch (PyTuple_Size(args)) {
358
      case 1:
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
359
        if (!parseArgs(args, "U", &u0))
360
        {
361
            PYTHON_CALL(self->object->transliterate(*u0));
362
            Py_RETURN_ARG(args, 0);
363
        }
364
        if (!parseArgs(args, "s", &_u0))
365
        {
366
            PYTHON_CALL(self->object->transliterate(_u0));
367
            return PyUnicode_FromUnicodeString(&_u0);
368
        }
369
        break;
370
      case 2:
371
        if (!parseArgs(args, "UO", &UTransPositionType, &u0, &utransposition))
372
        {
373
            STATUS_PYTHON_CALL(self->object->transliterate(*u0, *utransposition->object, status));
374
            Py_RETURN_ARG(args, 0);
375
        }
376
        if (!parseArgs(args, "sO", &UTransPositionType, &_u0, &utransposition))
377
        {
378
            STATUS_PYTHON_CALL(self->object->transliterate(_u0, *utransposition->object, status));
379
            return PyUnicode_FromUnicodeString(&_u0);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
380
        }
381
        break;
382
      case 3:
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
383
        if (!parseArgs(args, "Uii", &u0, &start, &limit))
384
        {
385
            PYTHON_CALL(limit = self->object->transliterate(*u0, start, limit));
386
            return PyInt_FromLong(limit);
387
        }
388
        if (!parseArgs(args, "sii", &_u0, &start, &limit))
389
        {
390
            PYTHON_CALL(self->object->transliterate(_u0, start, limit));
391
            return PyUnicode_FromUnicodeString(&_u0);
392
        }
393
        if (!parseArgs(args, "UOS", &UTransPositionType,
394
                       &u0, &utransposition, &u1, &_u1))
395
        {
396
            STATUS_CALL(len = toUChar32(*u1, &c, status));
397
            if (len == 1)
398
            {
399
                STATUS_PYTHON_CALL(self->object->transliterate(*u0, *utransposition->object, c, status));
400
            }
401
            else
402
            {
403
                STATUS_PYTHON_CALL(self->object->transliterate(*u0, *utransposition->object, _u1, status));
404
            }
405
            Py_RETURN_ARG(args, 0);
406
        }
407
        if (!parseArgs(args, "sOS", &UTransPositionType, 
408
                       &_u0, &utransposition, &u1, &_u1))
409
        {
410
            STATUS_CALL(len = toUChar32(*u1, &c, status));
411
            if (len == 1)
412
            {
413
                STATUS_PYTHON_CALL(self->object->transliterate(_u0, *utransposition->object, c, status));
414
            }
415
            else
416
            {
417
                STATUS_PYTHON_CALL(self->object->transliterate(_u0, *utransposition->object, _u1, status));
418
            }
419
            return PyUnicode_FromUnicodeString(&_u0);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
420
        }
421
        break;
422
    }
423
424
    return PyErr_SetArgsError((PyObject *) self, "transliterate", args);
425
}
426
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
427
static PyObject *t_transliterator_finishTransliteration(t_transliterator *self,
428
                                                        PyObject *args)
429
{
430
    UnicodeString *u, _u;
431
    t_utransposition *utransposition;
432
433
    if (!parseArgs(args, "UO", &UTransPositionType, &u, &utransposition))
434
    {
435
        self->object->finishTransliteration(*u, *utransposition->object);
436
        Py_RETURN_ARG(args, 0);
437
    }
438
    if (!parseArgs(args, "sO", &UTransPositionType, &_u, &utransposition))
439
    {
440
        self->object->finishTransliteration(_u, *utransposition->object);
441
        return PyUnicode_FromUnicodeString(&_u);
442
    }
443
444
    return PyErr_SetArgsError((PyObject *) self, "finishTransliteration", args);
445
}
446
447
static PyObject *t_transliterator_filteredTransliterate(t_transliterator *self,
448
                                                        PyObject *args)
449
{
450
    UnicodeString *u, _u;
451
    t_utransposition *utransposition;
452
    UBool incremental;
453
454
    if (!parseArgs(args, "UOB", &UTransPositionType, &u, &utransposition,
455
                   &incremental))
456
    {
457
        self->object->filteredTransliterate(*u, *utransposition->object,
458
                                            incremental);
459
        Py_RETURN_ARG(args, 0);
460
    }
461
    if (!parseArgs(args, "sOB", &UTransPositionType, &_u, &utransposition,
462
                   &incremental))
463
    {
464
        self->object->filteredTransliterate(_u, *utransposition->object,
465
                                            incremental);
466
        return PyUnicode_FromUnicodeString(&_u);
467
    }
468
469
    return PyErr_SetArgsError((PyObject *) self, "filteredTransliterate", args);
470
}
471
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
472
static PyObject *t_transliterator_getMaximumContextLength(t_transliterator *self)
473
{
474
    return PyInt_FromLong(self->object->getMaximumContextLength());
475
}
476
477
static PyObject *t_transliterator_countElements(t_transliterator *self)
478
{
479
    return PyInt_FromLong(self->object->countElements());
480
}
481
482
static PyObject *t_transliterator_getElement(t_transliterator *self,
483
                                             PyObject *arg)
484
{
485
    int32_t i = PyInt_AsLong(arg);
486
    const Transliterator *transliterator;
487
488
    if (PyErr_Occurred())
489
        return NULL;
490
491
    STATUS_CALL(transliterator = &self->object->getElement(i, status));
492
493
    return wrap_Transliterator(*transliterator);
494
}
495
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
496
static PyObject *t_transliterator_getSourceSet(t_transliterator *self)
497
{
498
    UnicodeSet set;
499
500
    self->object->getSourceSet(set);
501
    return wrap_UnicodeSet(new UnicodeSet(set), T_OWNED);
502
}
503
504
static PyObject *t_transliterator_getTargetSet(t_transliterator *self)
505
{
506
    UnicodeSet set;
507
508
    self->object->getTargetSet(set);
509
    return wrap_UnicodeSet(new UnicodeSet(set), T_OWNED);
510
}
511
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
512
static PyObject *t_transliterator_createInverse(t_transliterator *self)
513
{
514
    Transliterator *transliterator;
515
    
516
    STATUS_CALL(transliterator = self->object->createInverse(status));
517
    return wrap_Transliterator(transliterator);
518
}
519
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
520
static PyObject *t_transliterator_getFilter(t_transliterator *self)
521
{
522
    const UnicodeFilter *filter = self->object->getFilter();
523
524
    if (filter == NULL)
525
        Py_RETURN_NONE;
526
527
    return wrap_UnicodeFilter((UnicodeFilter *) filter->clone(), T_OWNED);
528
}
529
530
static PyObject *t_transliterator_orphanFilter(t_transliterator *self)
531
{
532
    UnicodeFilter *filter = self->object->orphanFilter();
533
534
    if (filter == NULL)
535
        Py_RETURN_NONE;
536
537
    return wrap_UnicodeFilter(filter, T_OWNED);
538
}
539
540
static PyObject *t_transliterator_adoptFilter(t_transliterator *self,
541
                                              PyObject *arg)
542
{
543
    UnicodeFilter *filter;
544
545
    if (arg == Py_None)
546
        self->object->adoptFilter(NULL);
547
    else if (!parseArg(arg, "P", TYPE_CLASSID(UnicodeFilter), &filter))
548
        self->object->adoptFilter((UnicodeFilter *) filter->clone());
549
    else
550
        return PyErr_SetArgsError((PyObject *) self, "adoptFilter", arg);
551
552
    Py_RETURN_NONE;
553
}
554
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
555
static PyObject *t_transliterator_getAvailableIDs(PyTypeObject *type)
556
{
557
    StringEnumeration *se;
558
559
    STATUS_CALL(se = Transliterator::getAvailableIDs(status));
560
    return wrap_StringEnumeration(se, T_OWNED);
561
}
562
563
static PyObject *t_transliterator_createInstance(PyTypeObject *type,
564
                                                 PyObject *args)
565
{
566
    Transliterator *transliterator;
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
567
    UnicodeString *u, _u;
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
568
    UTransDirection direction;
569
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
570
    if (!parseArgs(args, "Si", &u, &_u, &direction))
571
    {
572
        STATUS_CALL(transliterator = Transliterator::createInstance(*u, direction, status));
573
        return wrap_Transliterator(transliterator);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
574
    }
575
576
    return PyErr_SetArgsError(type, "createInstance", args);
577
}
578
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
579
static PyObject *t_transliterator_createFromRules(PyTypeObject *type,
580
                                                  PyObject *args)
581
{
582
    Transliterator *transliterator;
583
    UnicodeString *u0, _u0;
584
    UnicodeString *u1, _u1;
585
    UTransDirection direction;
586
587
    if (!parseArgs(args, "SSi", &u0, &_u0, &u1, &_u1, &direction))
588
    {
589
        STATUS_PARSER_CALL(transliterator = Transliterator::createFromRules(*u0, *u1, direction, parseError, status));
590
        return wrap_Transliterator(transliterator);
591
    }
592
593
    return PyErr_SetArgsError(type, "createFromRules", args);
594
}
595
596
static PyObject *t_transliterator_registerInstance(PyTypeObject *type,
597
                                                   PyObject *args)
598
{
599
    Transliterator *transliterator;
600
601
    if (!parseArgs(args, "P", TYPE_CLASSID(Transliterator), &transliterator))
602
    {
603
        Transliterator::registerInstance(transliterator);
604
        Py_RETURN_NONE;
605
    }
606
607
    return PyErr_SetArgsError(type, "registerInstance", args);
608
}
609
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
610
static PyObject *t_transliterator_str(t_transliterator *self)
611
{
612
    UnicodeString _u = self->object->getID();
613
    return PyUnicode_FromUnicodeString(&_u);
614
}
615
616
617
void _init_transliterator(PyObject *m)
618
{
619
    TransliteratorType.tp_str = (reprfunc) t_transliterator_str;
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
620
    UTransPositionType.tp_getset = t_utransposition_properties;
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
621
622
    INSTALL_CONSTANTS_TYPE(UTransDirection, m);
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
623
    INSTALL_STRUCT(UTransPosition, m);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
624
    REGISTER_TYPE(Transliterator, m);
625
1.1.3 by Bernd Zeimetz
Import upstream version 1.0
626
    INSTALL_ENUM(UTransDirection, "FORWARD", UTRANS_FORWARD);
627
    INSTALL_ENUM(UTransDirection, "REVERSE", UTRANS_REVERSE);
1.1.2 by Bernd Zeimetz
Import upstream version 0.9
628
}