num2words2 0.1.0.dev1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. num2words2/README.md +69 -0
  2. num2words2/__init__.py +196 -0
  3. num2words2/_version.py +3 -0
  4. num2words2/base.py +377 -0
  5. num2words2/compat.py +29 -0
  6. num2words2/currency.py +60 -0
  7. num2words2/lang_AF.py +202 -0
  8. num2words2/lang_AM.py +193 -0
  9. num2words2/lang_AR.py +435 -0
  10. num2words2/lang_AS.py +119 -0
  11. num2words2/lang_AZ.py +208 -0
  12. num2words2/lang_BA.py +119 -0
  13. num2words2/lang_BE.py +356 -0
  14. num2words2/lang_BG.py +393 -0
  15. num2words2/lang_BN.py +242 -0
  16. num2words2/lang_BO.py +122 -0
  17. num2words2/lang_BR.py +135 -0
  18. num2words2/lang_BS.py +189 -0
  19. num2words2/lang_CA.py +476 -0
  20. num2words2/lang_CE.py +546 -0
  21. num2words2/lang_CS.py +260 -0
  22. num2words2/lang_CY.py +574 -0
  23. num2words2/lang_DA.py +170 -0
  24. num2words2/lang_DE.py +180 -0
  25. num2words2/lang_EL.py +338 -0
  26. num2words2/lang_EN.py +118 -0
  27. num2words2/lang_EN_IN.py +26 -0
  28. num2words2/lang_EN_NG.py +45 -0
  29. num2words2/lang_EO.py +130 -0
  30. num2words2/lang_ES.py +399 -0
  31. num2words2/lang_ES_CO.py +37 -0
  32. num2words2/lang_ES_CR.py +38 -0
  33. num2words2/lang_ES_GT.py +37 -0
  34. num2words2/lang_ES_NI.py +35 -0
  35. num2words2/lang_ES_VE.py +43 -0
  36. num2words2/lang_ET.py +393 -0
  37. num2words2/lang_EU.py +158 -0
  38. num2words2/lang_EUR.py +104 -0
  39. num2words2/lang_FA.py +187 -0
  40. num2words2/lang_FI.py +759 -0
  41. num2words2/lang_FO.py +136 -0
  42. num2words2/lang_FR.py +133 -0
  43. num2words2/lang_FR_BE.py +49 -0
  44. num2words2/lang_FR_CH.py +48 -0
  45. num2words2/lang_FR_DZ.py +35 -0
  46. num2words2/lang_GL.py +135 -0
  47. num2words2/lang_GU.py +172 -0
  48. num2words2/lang_HA.py +293 -0
  49. num2words2/lang_HAW.py +144 -0
  50. num2words2/lang_HE.py +314 -0
  51. num2words2/lang_HI.py +243 -0
  52. num2words2/lang_HR.py +304 -0
  53. num2words2/lang_HT.py +136 -0
  54. num2words2/lang_HU.py +189 -0
  55. num2words2/lang_HY.py +364 -0
  56. num2words2/lang_ID.py +242 -0
  57. num2words2/lang_IS.py +208 -0
  58. num2words2/lang_IT.py +265 -0
  59. num2words2/lang_JA.py +615 -0
  60. num2words2/lang_JW.py +136 -0
  61. num2words2/lang_KA.py +169 -0
  62. num2words2/lang_KK.py +136 -0
  63. num2words2/lang_KM.py +173 -0
  64. num2words2/lang_KN.py +182 -0
  65. num2words2/lang_KO.py +175 -0
  66. num2words2/lang_KZ.py +161 -0
  67. num2words2/lang_LA.py +135 -0
  68. num2words2/lang_LB.py +135 -0
  69. num2words2/lang_LN.py +136 -0
  70. num2words2/lang_LO.py +149 -0
  71. num2words2/lang_LT.py +283 -0
  72. num2words2/lang_LV.py +266 -0
  73. num2words2/lang_MG.py +143 -0
  74. num2words2/lang_MI.py +151 -0
  75. num2words2/lang_MK.py +136 -0
  76. num2words2/lang_ML.py +159 -0
  77. num2words2/lang_MN.py +319 -0
  78. num2words2/lang_MR.py +187 -0
  79. num2words2/lang_MS.py +293 -0
  80. num2words2/lang_MT.py +159 -0
  81. num2words2/lang_MY.py +152 -0
  82. num2words2/lang_NE.py +157 -0
  83. num2words2/lang_NL.py +204 -0
  84. num2words2/lang_NN.py +136 -0
  85. num2words2/lang_NO.py +143 -0
  86. num2words2/lang_OC.py +135 -0
  87. num2words2/lang_PA.py +159 -0
  88. num2words2/lang_PL.py +336 -0
  89. num2words2/lang_PS.py +136 -0
  90. num2words2/lang_PT.py +280 -0
  91. num2words2/lang_PT_BR.py +224 -0
  92. num2words2/lang_RO.py +183 -0
  93. num2words2/lang_RU.py +570 -0
  94. num2words2/lang_SA.py +136 -0
  95. num2words2/lang_SD.py +136 -0
  96. num2words2/lang_SI.py +152 -0
  97. num2words2/lang_SK.py +250 -0
  98. num2words2/lang_SL.py +306 -0
  99. num2words2/lang_SN.py +447 -0
  100. num2words2/lang_SO.py +136 -0
  101. num2words2/lang_SQ.py +252 -0
  102. num2words2/lang_SR.py +254 -0
  103. num2words2/lang_SU.py +136 -0
  104. num2words2/lang_SV.py +169 -0
  105. num2words2/lang_SW.py +219 -0
  106. num2words2/lang_TA.py +303 -0
  107. num2words2/lang_TE.py +169 -0
  108. num2words2/lang_TET.py +285 -0
  109. num2words2/lang_TG.py +149 -0
  110. num2words2/lang_TH.py +214 -0
  111. num2words2/lang_TK.py +136 -0
  112. num2words2/lang_TL.py +145 -0
  113. num2words2/lang_TR.py +882 -0
  114. num2words2/lang_TT.py +136 -0
  115. num2words2/lang_UK.py +1101 -0
  116. num2words2/lang_UR.py +168 -0
  117. num2words2/lang_UZ.py +136 -0
  118. num2words2/lang_VI.py +143 -0
  119. num2words2/lang_WO.py +136 -0
  120. num2words2/lang_YI.py +135 -0
  121. num2words2/lang_YO.py +136 -0
  122. num2words2/lang_ZH.py +296 -0
  123. num2words2/lang_ZH_CN.py +85 -0
  124. num2words2/lang_ZH_HK.py +48 -0
  125. num2words2/lang_ZH_TW.py +198 -0
  126. num2words2/utils.py +35 -0
  127. num2words2-0.1.0.dev1.data/scripts/num2words2 +98 -0
  128. num2words2-0.1.0.dev1.dist-info/METADATA +244 -0
  129. num2words2-0.1.0.dev1.dist-info/RECORD +133 -0
  130. num2words2-0.1.0.dev1.dist-info/WHEEL +5 -0
  131. num2words2-0.1.0.dev1.dist-info/entry_points.txt +2 -0
  132. num2words2-0.1.0.dev1.dist-info/licenses/COPYING +145 -0
  133. num2words2-0.1.0.dev1.dist-info/top_level.txt +1 -0
num2words2/lang_TR.py ADDED
@@ -0,0 +1,882 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
3
+ # Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
4
+ # Copyright (c) 2017, Tufan Kaynak, Framras. All Rights Reserved.
5
+
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License as published by the Free Software Foundation; either
9
+ # version 2.1 of the License, or (at your option) any later version.
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17
+ # MA 02110-1301 USA
18
+
19
+ from __future__ import unicode_literals
20
+
21
+ from .base import Num2Word_Base
22
+
23
+
24
+ class Num2Word_TR(Num2Word_Base):
25
+ def __init__(self):
26
+ self.precision = 2
27
+ self.negword = u"eksi"
28
+ self.pointword = u"virgül"
29
+ self.CURRENCY_UNIT = u"lira"
30
+ self.CURRENCY_SUBUNIT = u"kuruş"
31
+
32
+ self.CURRENCY_FORMS = {
33
+ 'TRY': (('lira', 'lira'), ('kuruş', 'kuruş')),
34
+ 'EUR': (('avro', 'avro'), ('sent', 'sent')),
35
+ 'USD': (('dolar', 'dolar'), ('sent', 'sent')),
36
+ }
37
+ self.errmsg_nonnum = u"Sadece sayılar yazıya çevrilebilir."
38
+ self.errmsg_floatord = u"Tam sayı olmayan {} sıralamada kullanılamaz."
39
+ self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz."
40
+ self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. " \
41
+ u"Yazıya çevrilebilecek en büyük rakam {}."
42
+ self.exclude_title = []
43
+ self.DECIMAL_SIGN = ","
44
+ self.ORDINAL_SIGN = "."
45
+ self.ZERO = u"sıfır"
46
+ self.CARDINAL_ONES = {
47
+ "1": u"bir",
48
+ "2": u"iki",
49
+ "3": u"üç",
50
+ "4": u"dört",
51
+ "5": u"beş",
52
+ "6": u"altı",
53
+ "7": u"yedi",
54
+ "8": u"sekiz",
55
+ "9": u"dokuz"
56
+ }
57
+ self.ORDINAL_ONES = {
58
+ "1": u"birinci",
59
+ "2": u"ikinci",
60
+ "3": u"üçüncü",
61
+ "4": u"dördüncü",
62
+ "5": u"beşinci",
63
+ "6": u"altıncı",
64
+ "7": u"yedinci",
65
+ "8": u"sekizinci",
66
+ "9": u"dokuzuncu"
67
+ }
68
+ self.CARDINAL_TENS = {
69
+ "1": u"on",
70
+ "2": u"yirmi",
71
+ "3": u"otuz",
72
+ "4": u"kırk",
73
+ "5": u"elli",
74
+ "6": u"altmış",
75
+ "7": u"yetmiş",
76
+ "8": u"seksen",
77
+ "9": u"doksan"
78
+ }
79
+ self.ORDINAL_TENS = {
80
+ "1": u"onuncu",
81
+ "2": u"yirminci",
82
+ "3": u"otuzuncu",
83
+ "4": u"kırkıncı",
84
+ "5": u"ellinci",
85
+ "6": u"altmışıncı",
86
+ "7": u"yetmişinci",
87
+ "8": u"sekseninci",
88
+ "9": u"doksanıncı"
89
+ }
90
+ self.HUNDREDS = {
91
+ "2": u"iki",
92
+ "3": u"üç",
93
+ "4": u"dört",
94
+ "5": u"beş",
95
+ "6": u"altı",
96
+ "7": u"yedi",
97
+ "8": u"sekiz",
98
+ "9": u"dokuz"
99
+ }
100
+ self.CARDINAL_HUNDRED = (u"yüz",)
101
+ self.ORDINAL_HUNDRED = (u"yüzüncü",)
102
+ self.CARDINAL_TRIPLETS = {
103
+ 1: u"bin",
104
+ 2: u"milyon",
105
+ 3: u"milyar",
106
+ 4: u"trilyon",
107
+ 5: u"katrilyon",
108
+ 6: u"kentilyon"
109
+ }
110
+ self.ORDINAL_TRIPLETS = {
111
+ 1: u"bininci",
112
+ 2: u"milyonuncu",
113
+ 3: u"milyarıncı",
114
+ 4: u"trilyonuncu",
115
+ 5: u"katrilyonuncu",
116
+ 6: u"kentilyon"
117
+ }
118
+ self.MAXVAL = (10 ** ((len(self.CARDINAL_TRIPLETS) + 1) * 3)) - 1
119
+
120
+ self.integers_to_read = []
121
+ self.total_triplets_to_read = 0
122
+ self.total_digits_outside_triplets = 0
123
+ self.order_of_last_zero_digit = 0
124
+
125
+ def to_cardinal(self, value):
126
+ wrd = ""
127
+ is_cardinal = self.verify_cardinal(value)
128
+ if not is_cardinal:
129
+ return wrd
130
+
131
+ if not int(value) == value:
132
+ return self.to_cardinal_float(value)
133
+
134
+ if str(value).startswith("-"):
135
+ pre_word, value = self.negword, float(str(value)[1:])
136
+ else:
137
+ pre_word, value = "", float(value)
138
+
139
+ self.to_splitnum(value)
140
+
141
+ if self.order_of_last_zero_digit >= len(self.integers_to_read[0]):
142
+ # number like 00 and all 0s and even more, raise error
143
+ return "%s%s" % (pre_word, wrd)
144
+
145
+ if self.total_triplets_to_read == 1:
146
+ if self.total_digits_outside_triplets == 2:
147
+ if self.order_of_last_zero_digit == 1:
148
+ # number like x0, read cardinal x0 and return
149
+ wrd += self.CARDINAL_TENS.get(
150
+ self.integers_to_read[0][0], ""
151
+ )
152
+ return "%s%s" % (pre_word, wrd)
153
+ if self.order_of_last_zero_digit == 0:
154
+ # number like xy, read cardinal xy and return
155
+ wrd += self.CARDINAL_TENS.get(
156
+ self.integers_to_read[0][0], ""
157
+ )
158
+ wrd += self.CARDINAL_ONES.get(
159
+ self.integers_to_read[0][1], ""
160
+ )
161
+ return "%s%s" % (pre_word, wrd)
162
+
163
+ if self.total_digits_outside_triplets == 1:
164
+ if self.order_of_last_zero_digit == 0:
165
+ # number like x, read cardinal x and return
166
+ wrd += self.CARDINAL_ONES.get(
167
+ self.integers_to_read[0][0], ""
168
+ )
169
+ if self.integers_to_read[0][0] == "0":
170
+ return self.ZERO
171
+ return "%s%s" % (pre_word, wrd)
172
+
173
+ if self.total_digits_outside_triplets == 0:
174
+ if self.order_of_last_zero_digit == 2:
175
+ # number like x00, read cardinal x00 and return
176
+ wrd += self.HUNDREDS.get(
177
+ self.integers_to_read[0][0], ""
178
+ )
179
+ wrd += self.CARDINAL_HUNDRED[0]
180
+ return "%s%s" % (pre_word, wrd)
181
+ if self.order_of_last_zero_digit == 1:
182
+ # number like xy0, read cardinal xy0 and return
183
+ wrd += self.HUNDREDS.get(
184
+ self.integers_to_read[0][0], ""
185
+ )
186
+ wrd += self.CARDINAL_HUNDRED[0]
187
+ wrd += self.CARDINAL_TENS.get(
188
+ self.integers_to_read[0][1], ""
189
+ )
190
+ return "%s%s" % (pre_word, wrd)
191
+ if self.order_of_last_zero_digit == 0:
192
+ # number like xyz, read cardinal xyz and return
193
+ wrd += self.HUNDREDS.get(
194
+ self.integers_to_read[0][0], ""
195
+ )
196
+ wrd += self.CARDINAL_HUNDRED[0]
197
+ wrd += self.CARDINAL_TENS.get(
198
+ self.integers_to_read[0][1], ""
199
+ )
200
+ wrd += self.CARDINAL_ONES.get(
201
+ self.integers_to_read[0][2], ""
202
+ )
203
+ return "%s%s" % (pre_word, wrd)
204
+
205
+ if self.total_triplets_to_read >= 2:
206
+ if self.total_digits_outside_triplets == 2:
207
+ if self.order_of_last_zero_digit == len(
208
+ self.integers_to_read[0]) - 1:
209
+ # number like x0 and all 0s, read cardinal x0 0..0
210
+ # and return
211
+ wrd += self.CARDINAL_TENS.get(
212
+ self.integers_to_read[0][0], ""
213
+ )
214
+ wrd += self.CARDINAL_TRIPLETS[
215
+ self.total_triplets_to_read - 1
216
+ ]
217
+ return "%s%s" % (pre_word, wrd)
218
+ if self.order_of_last_zero_digit == len(
219
+ self.integers_to_read[0]) - 2:
220
+ # number like xy and all 0s, read cardinal xy 0..0
221
+ # and return
222
+ wrd += self.CARDINAL_TENS.get(
223
+ self.integers_to_read[0][0], ""
224
+ )
225
+ wrd += self.CARDINAL_ONES.get(
226
+ self.integers_to_read[0][1], ""
227
+ )
228
+ wrd += self.CARDINAL_TRIPLETS[
229
+ self.total_triplets_to_read - 1
230
+ ]
231
+ return "%s%s" % (pre_word, wrd)
232
+ if self.order_of_last_zero_digit < len(
233
+ self.integers_to_read[0]) - 2:
234
+ # number like xy and others, read cardinal xy n..n
235
+ # and return
236
+ wrd += self.CARDINAL_TENS.get(
237
+ self.integers_to_read[0][0], ""
238
+ )
239
+ wrd += self.CARDINAL_ONES.get(
240
+ self.integers_to_read[0][1], ""
241
+ )
242
+ wrd += self.CARDINAL_TRIPLETS[
243
+ self.total_triplets_to_read - 1
244
+ ]
245
+
246
+ if self.total_digits_outside_triplets == 1:
247
+ if self.order_of_last_zero_digit == len(
248
+ self.integers_to_read[0]) - 1:
249
+ # number like x and all 0s, read cardinal x 0..0
250
+ # and return
251
+ if not (self.total_triplets_to_read == 2 and
252
+ self.integers_to_read[0][0] == "1"):
253
+ wrd += self.CARDINAL_ONES.get(
254
+ self.integers_to_read[0][0], ""
255
+ )
256
+ wrd += self.CARDINAL_TRIPLETS[
257
+ self.total_triplets_to_read - 1
258
+ ]
259
+ return "%s%s" % (pre_word, wrd)
260
+ if self.order_of_last_zero_digit < len(
261
+ self.integers_to_read[0]) - 1:
262
+ # number like x and others, read cardinal x n..n
263
+ # and return
264
+ if not (self.total_triplets_to_read == 2 and
265
+ self.integers_to_read[0][0] == "1"):
266
+ wrd += self.CARDINAL_ONES.get(
267
+ self.integers_to_read[0][0], ""
268
+ )
269
+ wrd += self.CARDINAL_TRIPLETS[
270
+ self.total_triplets_to_read - 1
271
+ ]
272
+
273
+ if self.total_digits_outside_triplets == 0:
274
+ if self.order_of_last_zero_digit == len(
275
+ self.integers_to_read[0]) - 1:
276
+ # number like x00 and all 0s, read cardinal x00 0..0
277
+ # and return
278
+ wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
279
+ wrd += self.CARDINAL_HUNDRED[0]
280
+ wrd += self.CARDINAL_TRIPLETS[
281
+ self.total_triplets_to_read - 1
282
+ ]
283
+ return "%s%s" % (pre_word, wrd)
284
+ if self.order_of_last_zero_digit == len(
285
+ self.integers_to_read[0]) - 2:
286
+ # number like xy0 and all 0s, read cardinal xy0 0..0
287
+ # and return
288
+ wrd += self.HUNDREDS.get(
289
+ self.integers_to_read[0][0], ""
290
+ )
291
+ wrd += self.CARDINAL_HUNDRED[0]
292
+ wrd += self.CARDINAL_TENS.get(
293
+ self.integers_to_read[0][1], ""
294
+ )
295
+ wrd += self.CARDINAL_TRIPLETS[
296
+ self.total_triplets_to_read - 1
297
+ ]
298
+ return "%s%s" % (pre_word, wrd)
299
+ if self.order_of_last_zero_digit == len(
300
+ self.integers_to_read[0]) - 3:
301
+ # number like xyz and all 0s, read cardinal xyz 0..0
302
+ # and return
303
+ wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
304
+ wrd += self.CARDINAL_HUNDRED[0]
305
+ wrd += self.CARDINAL_TENS.get(
306
+ self.integers_to_read[0][1], ""
307
+ )
308
+ wrd += self.CARDINAL_ONES.get(
309
+ self.integers_to_read[0][2], ""
310
+ )
311
+ wrd += self.CARDINAL_TRIPLETS[
312
+ self.total_triplets_to_read - 1
313
+ ]
314
+ return "%s%s" % (pre_word, wrd)
315
+ if self.order_of_last_zero_digit < len(
316
+ self.integers_to_read[0]) - 3:
317
+ # number like xyz and all others, read cardinal xyz n..n
318
+ wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
319
+ wrd += self.CARDINAL_HUNDRED[0]
320
+ wrd += self.CARDINAL_TENS.get(
321
+ self.integers_to_read[0][1], ""
322
+ )
323
+ if not (self.total_triplets_to_read == 2 and
324
+ self.integers_to_read[0][2] == "1"):
325
+ wrd += self.CARDINAL_ONES.get(
326
+ self.integers_to_read[0][2], ""
327
+ )
328
+ wrd += self.CARDINAL_TRIPLETS[
329
+ self.total_triplets_to_read - 1
330
+ ]
331
+
332
+ for i in list(range(self.total_triplets_to_read - 1, 0, -1)):
333
+ reading_triplet_order = self.total_triplets_to_read - i
334
+ if self.total_digits_outside_triplets == 0:
335
+ last_read_digit_order = reading_triplet_order * 3
336
+ else:
337
+ last_read_digit_order = (reading_triplet_order - 1) * 3 +\
338
+ self.total_digits_outside_triplets
339
+
340
+ if not self.integers_to_read[0][
341
+ last_read_digit_order: last_read_digit_order + 3
342
+ ] == "000":
343
+ if not self.integers_to_read[0][
344
+ last_read_digit_order
345
+ ] == "0":
346
+ wrd += self.HUNDREDS.get(
347
+ self.integers_to_read[0][last_read_digit_order], ""
348
+ )
349
+ if self.order_of_last_zero_digit == len(
350
+ self.integers_to_read[0]) - (
351
+ last_read_digit_order) - 1:
352
+ if i == 1:
353
+ wrd += self.CARDINAL_HUNDRED[0]
354
+ return "%s%s" % (pre_word, wrd)
355
+ elif i > 1:
356
+ wrd += self.CARDINAL_HUNDRED[0]
357
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
358
+ return "%s%s" % (pre_word, wrd)
359
+ else:
360
+ wrd += self.CARDINAL_HUNDRED[0]
361
+
362
+ if not self.integers_to_read[0][
363
+ last_read_digit_order + 1] == "0":
364
+ if self.order_of_last_zero_digit == len(
365
+ self.integers_to_read[0]) - (
366
+ last_read_digit_order) - 2:
367
+ if i == 1:
368
+ wrd += self.CARDINAL_TENS.get(
369
+ self.integers_to_read[0][
370
+ last_read_digit_order + 1], ""
371
+ )
372
+ return "%s%s" % (pre_word, wrd)
373
+ elif i > 1:
374
+ wrd += self.CARDINAL_TENS.get(
375
+ self.integers_to_read[0][
376
+ last_read_digit_order + 1], ""
377
+ )
378
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
379
+ return "%s%s" % (pre_word, wrd)
380
+ else:
381
+ wrd += self.CARDINAL_TENS.get(
382
+ self.integers_to_read[0][
383
+ last_read_digit_order + 1], ""
384
+ )
385
+
386
+ if not self.integers_to_read[0][
387
+ last_read_digit_order + 2] == "0":
388
+ if self.order_of_last_zero_digit == len(
389
+ self.integers_to_read[0]) - (
390
+ last_read_digit_order) - 3:
391
+ if i == 1:
392
+ wrd += self.CARDINAL_ONES.get(
393
+ self.integers_to_read[0][
394
+ last_read_digit_order + 2], ""
395
+ )
396
+ return "%s%s" % (pre_word, wrd)
397
+ if i == 2:
398
+ if not self.integers_to_read[0][
399
+ last_read_digit_order:
400
+ last_read_digit_order + 2
401
+ ] == "00":
402
+ wrd += self.CARDINAL_ONES.get(
403
+ self.integers_to_read[0][
404
+ last_read_digit_order + 2], ""
405
+ )
406
+ elif not self.integers_to_read[0][
407
+ last_read_digit_order + 2] == "1":
408
+ wrd += self.CARDINAL_ONES.get(
409
+ self.integers_to_read[0][
410
+ last_read_digit_order + 2], ""
411
+ )
412
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
413
+ return "%s%s" % (pre_word, wrd)
414
+ if i > 2:
415
+ wrd += self.CARDINAL_ONES.get(
416
+ self.integers_to_read[0][
417
+ last_read_digit_order + 2], ""
418
+ )
419
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
420
+ return "%s%s" % (pre_word, wrd)
421
+ else:
422
+ if not self.integers_to_read[0][
423
+ last_read_digit_order:
424
+ last_read_digit_order + 2
425
+ ] == "00":
426
+ wrd += self.CARDINAL_ONES.get(
427
+ self.integers_to_read[0][
428
+ last_read_digit_order + 2], ""
429
+ )
430
+ else:
431
+ if i == 2:
432
+ if not self.integers_to_read[0][
433
+ last_read_digit_order:
434
+ last_read_digit_order + 2
435
+ ] == "00":
436
+ wrd += self.CARDINAL_ONES.get(
437
+ self.integers_to_read[0][
438
+ last_read_digit_order + 2], ""
439
+ )
440
+ elif not self.integers_to_read[0][
441
+ last_read_digit_order + 2
442
+ ] == "1":
443
+ wrd += self.CARDINAL_ONES.get(
444
+ self.integers_to_read[0][
445
+ last_read_digit_order + 2], ""
446
+ )
447
+
448
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
449
+
450
+ return "%s%s" % (pre_word, wrd)
451
+
452
+ def to_cardinal_float(self, value):
453
+ # Handle negative floats
454
+ is_negative = value < 0
455
+ abs_value = abs(value)
456
+
457
+ self.to_splitnum(abs_value)
458
+ wrd = ""
459
+ wrd += self.pointword
460
+ if len(self.integers_to_read[1]) >= 1:
461
+ wrd += self.CARDINAL_TENS.get(self.integers_to_read[1][0], "")
462
+
463
+ if len(self.integers_to_read[1]) == 2:
464
+ wrd += self.CARDINAL_ONES.get(self.integers_to_read[1][1], "")
465
+
466
+ if self.integers_to_read[0] == "0":
467
+ wrd = self.ZERO + wrd
468
+ else:
469
+ wrd = self.to_cardinal(int(self.integers_to_read[0])) + wrd
470
+
471
+ if is_negative:
472
+ wrd = self.negword + " " + wrd
473
+ return wrd
474
+
475
+ def verify_cardinal(self, value):
476
+ iscardinal = True
477
+ try:
478
+ if not float(value) == value:
479
+ iscardinal = False
480
+ except (ValueError, TypeError):
481
+ raise TypeError(self.errmsg_nonnum)
482
+ if abs(value) >= self.MAXVAL:
483
+ raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL))
484
+ return iscardinal
485
+
486
+ def verify_ordinal(self, value):
487
+ isordinal = True
488
+ try:
489
+ if not int(value) == value:
490
+ isordinal = False
491
+ if not abs(value) == value:
492
+ raise TypeError(self.errmsg_negord.format(value))
493
+ except (ValueError, TypeError):
494
+ raise TypeError(self.errmsg_nonnum)
495
+ if abs(value) >= self.MAXVAL:
496
+ raise OverflowError(self.errmsg_toobig.format(value, self.MAXVAL))
497
+ return isordinal
498
+
499
+ def to_ordinal(self, value):
500
+ wrd = ""
501
+ isordinal = self.verify_ordinal(value)
502
+ if isordinal:
503
+ self.to_splitnum(value)
504
+
505
+ if self.order_of_last_zero_digit >= len(self.integers_to_read[0]):
506
+ # number like 00 and all 0s and even more, raise error
507
+ return wrd
508
+
509
+ if self.total_triplets_to_read == 1:
510
+ if self.total_digits_outside_triplets == 2:
511
+ if self.order_of_last_zero_digit == 1:
512
+ # number like x0, read ordinal x0 and return
513
+ wrd += self.ORDINAL_TENS.get(
514
+ self.integers_to_read[0][0], ""
515
+ )
516
+ return wrd
517
+ if self.order_of_last_zero_digit == 0:
518
+ # number like xy, read ordinal xy and return
519
+ wrd += self.CARDINAL_TENS.get(
520
+ self.integers_to_read[0][0], ""
521
+ )
522
+ wrd += self.ORDINAL_ONES.get(
523
+ self.integers_to_read[0][1], ""
524
+ )
525
+ return wrd
526
+
527
+ if self.total_digits_outside_triplets == 1:
528
+ if self.order_of_last_zero_digit == 0:
529
+ # number like x, read ordinal x and return
530
+ wrd += self.ORDINAL_ONES.get(
531
+ self.integers_to_read[0][0], ""
532
+ )
533
+ if self.integers_to_read[0][0] == "0":
534
+ return u"sıfırıncı"
535
+ return wrd
536
+
537
+ if self.total_digits_outside_triplets == 0:
538
+ if self.order_of_last_zero_digit == 2:
539
+ # number like x00, read ordinal x00 and return
540
+ wrd += self.HUNDREDS.get(
541
+ self.integers_to_read[0][0], ""
542
+ )
543
+ wrd += self.ORDINAL_HUNDRED[0]
544
+ return wrd
545
+ if self.order_of_last_zero_digit == 1:
546
+ # number like xy0, read ordinal xy0 and return
547
+ wrd += self.HUNDREDS.get(
548
+ self.integers_to_read[0][0], ""
549
+ )
550
+ wrd += self.CARDINAL_HUNDRED[0]
551
+ wrd += self.ORDINAL_TENS.get(
552
+ self.integers_to_read[0][1], ""
553
+ )
554
+ return wrd
555
+ if self.order_of_last_zero_digit == 0:
556
+ # number like xyz, read ordinal xyz and return
557
+ wrd += self.HUNDREDS.get(
558
+ self.integers_to_read[0][0], ""
559
+ )
560
+ wrd += self.CARDINAL_HUNDRED[0]
561
+ wrd += self.CARDINAL_TENS.get(
562
+ self.integers_to_read[0][1], ""
563
+ )
564
+ if not self.integers_to_read[0][2] == "0":
565
+ wrd += self.ORDINAL_ONES.get(
566
+ self.integers_to_read[0][2], ""
567
+ )
568
+ return wrd
569
+
570
+ if self.total_triplets_to_read >= 2:
571
+ if self.total_digits_outside_triplets == 2:
572
+ if self.order_of_last_zero_digit == len(
573
+ self.integers_to_read[0]) - 1:
574
+ # number like x0 and all 0s, read ordinal x0 0..0
575
+ # and return
576
+ wrd += self.CARDINAL_TENS.get(
577
+ self.integers_to_read[0][0], ""
578
+ )
579
+ wrd += self.ORDINAL_TRIPLETS[
580
+ self.total_triplets_to_read - 1
581
+ ]
582
+ return wrd
583
+ if self.order_of_last_zero_digit == len(
584
+ self.integers_to_read[0]) - 2:
585
+ # number like xy and all 0s, read ordinal xy 0..0
586
+ # and return
587
+ wrd += self.CARDINAL_TENS.get(
588
+ self.integers_to_read[0][0], ""
589
+ )
590
+ wrd += self.CARDINAL_ONES.get(
591
+ self.integers_to_read[0][1], ""
592
+ )
593
+ wrd += self.ORDINAL_TRIPLETS[
594
+ self.total_triplets_to_read - 1
595
+ ]
596
+ return wrd
597
+ if self.order_of_last_zero_digit < len(
598
+ self.integers_to_read[0]) - 2:
599
+ # number like xy and others, read cardinal xy n..n
600
+ # and return
601
+ wrd += self.CARDINAL_TENS.get(
602
+ self.integers_to_read[0][0], ""
603
+ )
604
+ wrd += self.CARDINAL_ONES.get(
605
+ self.integers_to_read[0][1], ""
606
+ )
607
+ wrd += self.CARDINAL_TRIPLETS[
608
+ self.total_triplets_to_read - 1
609
+ ]
610
+
611
+ if self.total_digits_outside_triplets == 1:
612
+ if self.order_of_last_zero_digit == len(
613
+ self.integers_to_read[0]) - 1:
614
+ # number like x and all 0s, read ordinal x 0..0
615
+ # and return
616
+ if not (self.total_triplets_to_read == 2 and
617
+ self.integers_to_read[0][0] == "1"):
618
+ wrd += self.CARDINAL_ONES.get(
619
+ self.integers_to_read[0][0], ""
620
+ )
621
+ wrd += self.ORDINAL_TRIPLETS[
622
+ self.total_triplets_to_read - 1
623
+ ]
624
+ return wrd
625
+ if self.order_of_last_zero_digit < len(
626
+ self.integers_to_read[0]) - 1:
627
+ # number like x and others, read cardinal x n..n
628
+ # and return
629
+ if not (self.total_triplets_to_read == 2 and
630
+ self.integers_to_read[0][0] == "1"):
631
+ wrd += self.CARDINAL_ONES.get(
632
+ self.integers_to_read[0][0], ""
633
+ )
634
+ wrd += self.CARDINAL_TRIPLETS[
635
+ self.total_triplets_to_read - 1
636
+ ]
637
+
638
+ if self.total_digits_outside_triplets == 0:
639
+ if self.order_of_last_zero_digit == len(
640
+ self.integers_to_read[0]) - 1:
641
+ # number like x00 and all 0s, read ordinal x00 0..0
642
+ # and return
643
+ wrd += self.HUNDREDS.get(
644
+ self.integers_to_read[0][0], ""
645
+ )
646
+ wrd += self.CARDINAL_HUNDRED[0]
647
+ wrd += self.ORDINAL_TRIPLETS[
648
+ self.total_triplets_to_read - 1
649
+ ]
650
+ return wrd
651
+ if self.order_of_last_zero_digit == len(
652
+ self.integers_to_read[0]) - 2:
653
+ # number like xy0 and all 0s, read ordinal xy0 0..0
654
+ # and return
655
+ wrd += self.HUNDREDS.get(
656
+ self.integers_to_read[0][0], ""
657
+ )
658
+ wrd += self.CARDINAL_HUNDRED[0]
659
+ wrd += self.CARDINAL_TENS.get(
660
+ self.integers_to_read[0][1], ""
661
+ )
662
+ wrd += self.ORDINAL_TRIPLETS[
663
+ self.total_triplets_to_read - 1
664
+ ]
665
+ return wrd
666
+ if self.order_of_last_zero_digit == len(
667
+ self.integers_to_read[0]) - 3:
668
+ # number like xyz and all 0s, read ordinal xyz 0..0
669
+ # and return
670
+ wrd += self.HUNDREDS.get(
671
+ self.integers_to_read[0][0], ""
672
+ )
673
+ wrd += self.CARDINAL_HUNDRED[0]
674
+ wrd += self.CARDINAL_TENS.get(
675
+ self.integers_to_read[0][1], ""
676
+ )
677
+ wrd += self.CARDINAL_ONES.get(
678
+ self.integers_to_read[0][2], ""
679
+ )
680
+ wrd += self.ORDINAL_TRIPLETS[
681
+ self.total_triplets_to_read - 1
682
+ ]
683
+ return wrd
684
+ if self.order_of_last_zero_digit < len(
685
+ self.integers_to_read[0]) - 3:
686
+ # number like xyz and all others, read cardinal
687
+ # xyz n..n
688
+ wrd += self.HUNDREDS.get(
689
+ self.integers_to_read[0][0], ""
690
+ )
691
+ wrd += self.CARDINAL_HUNDRED[0]
692
+ wrd += self.CARDINAL_TENS.get(
693
+ self.integers_to_read[0][1], ""
694
+ )
695
+ if not (self.total_triplets_to_read == 2 and
696
+ self.integers_to_read[0][2] == "1"):
697
+ wrd += self.CARDINAL_ONES.get(
698
+ self.integers_to_read[0][2], ""
699
+ )
700
+ wrd += self.CARDINAL_TRIPLETS[
701
+ self.total_triplets_to_read - 1
702
+ ]
703
+
704
+ for i in list(range(self.total_triplets_to_read - 1, 0, -1)):
705
+ reading_triplet_order = self.total_triplets_to_read - i
706
+ if self.total_digits_outside_triplets == 0:
707
+ last_read_digit_order = reading_triplet_order * 3
708
+ else:
709
+ last_read_digit_order = \
710
+ (reading_triplet_order - 1) * 3 + \
711
+ self.total_digits_outside_triplets
712
+
713
+ if not self.integers_to_read[0][
714
+ last_read_digit_order: last_read_digit_order + 3
715
+ ] == "000":
716
+ if not self.integers_to_read[0][
717
+ last_read_digit_order
718
+ ] == "0":
719
+ if not self.integers_to_read[0][
720
+ last_read_digit_order
721
+ ] == "1":
722
+ wrd += self.CARDINAL_ONES.get(
723
+ self.integers_to_read[0][
724
+ last_read_digit_order
725
+ ], ""
726
+ )
727
+ if self.order_of_last_zero_digit == len(
728
+ self.integers_to_read[0]) - (
729
+ last_read_digit_order) - 1:
730
+ if i == 1:
731
+ wrd += self.ORDINAL_HUNDRED[0]
732
+ return wrd
733
+ elif i > 1:
734
+ wrd += self.CARDINAL_HUNDRED[0]
735
+ wrd += self.ORDINAL_TRIPLETS[i - 1]
736
+ return wrd
737
+ else:
738
+ wrd += self.CARDINAL_HUNDRED[0]
739
+
740
+ if not self.integers_to_read[0][
741
+ last_read_digit_order + 1
742
+ ] == "0":
743
+ if self.order_of_last_zero_digit == len(
744
+ self.integers_to_read[0]) - (
745
+ last_read_digit_order) - 2:
746
+ if i == 1:
747
+ wrd += self.ORDINAL_TENS.get(
748
+ self.integers_to_read[0][
749
+ last_read_digit_order + 1], ""
750
+ )
751
+ return wrd
752
+ elif i > 1:
753
+ wrd += self.CARDINAL_TENS.get(
754
+ self.integers_to_read[0][
755
+ last_read_digit_order + 1], ""
756
+ )
757
+ wrd += self.ORDINAL_TRIPLETS[i - 1]
758
+ return wrd
759
+ else:
760
+ wrd += self.CARDINAL_TENS.get(
761
+ self.integers_to_read[0][
762
+ last_read_digit_order + 1], ""
763
+ )
764
+
765
+ if not self.integers_to_read[0][
766
+ last_read_digit_order + 2
767
+ ] == "0":
768
+ if self.order_of_last_zero_digit == len(
769
+ self.integers_to_read[0]) - (
770
+ last_read_digit_order) - 3:
771
+ if i == 1:
772
+ wrd += self.ORDINAL_ONES.get(
773
+ self.integers_to_read[0][
774
+ last_read_digit_order + 2], ""
775
+ )
776
+ return wrd
777
+ if i == 2:
778
+ if not self.integers_to_read[0][
779
+ last_read_digit_order:
780
+ last_read_digit_order + 2] == "00":
781
+ wrd += self.CARDINAL_ONES.get(
782
+ self.integers_to_read[0][
783
+ last_read_digit_order + 2], ""
784
+ )
785
+ elif not self.integers_to_read[0][
786
+ last_read_digit_order + 2
787
+ ] == "1":
788
+ wrd += self.CARDINAL_ONES.get(
789
+ self.integers_to_read[0][
790
+ last_read_digit_order + 2], ""
791
+ )
792
+ wrd += self.ORDINAL_TRIPLETS[i - 1]
793
+ return wrd
794
+ if i > 2:
795
+ wrd += self.CARDINAL_ONES.get(
796
+ self.integers_to_read[0][
797
+ last_read_digit_order + 2], ""
798
+ )
799
+ wrd += self.ORDINAL_TRIPLETS[i - 1]
800
+ return wrd
801
+ else:
802
+ if not self.integers_to_read[0][
803
+ last_read_digit_order:
804
+ last_read_digit_order + 2] == "00":
805
+ wrd += self.CARDINAL_ONES.get(
806
+ self.integers_to_read[0][
807
+ last_read_digit_order + 2], ""
808
+ )
809
+ else:
810
+ if not self.integers_to_read[0][
811
+ last_read_digit_order:
812
+ last_read_digit_order + 2] == "00":
813
+ wrd += self.CARDINAL_ONES.get(
814
+ self.integers_to_read[0][
815
+ last_read_digit_order + 2], ""
816
+ )
817
+ elif not self.integers_to_read[0][
818
+ last_read_digit_order + 2] == "1":
819
+ wrd += self.CARDINAL_ONES.get(
820
+ self.integers_to_read[0][
821
+ last_read_digit_order + 2], ""
822
+ )
823
+
824
+ wrd += self.CARDINAL_TRIPLETS[i - 1]
825
+
826
+ return wrd
827
+
828
+ def to_ordinal_num(self, value):
829
+ self.verify_ordinal(value)
830
+ return "%s%s" % (value, self.to_ordinal(value)[-4:])
831
+
832
+ def pluralize(self, number, forms):
833
+ """Return the appropriate plural form."""
834
+ # Turkish doesn't change the form for plurals in currency
835
+ # Both "1 lira" and "100 lira" use the same form
836
+ if isinstance(forms, tuple) and len(forms) >= 2:
837
+ # Use singular form for all numbers in Turkish
838
+ return forms[0] if number == 1 else forms[0]
839
+ return forms
840
+
841
+ def to_currency(self, val, currency='EUR', cents=True, separator=',',
842
+ adjective=False):
843
+ """Basic currency support for Turkish."""
844
+ # For integers, just add "lira"
845
+ if isinstance(val, int):
846
+ minus_str = self.negword if val < 0 else ""
847
+ money_str = self.to_cardinal(abs(val))
848
+ return "%s%s%s" % (minus_str, money_str, self.CURRENCY_UNIT)
849
+
850
+ # For floats, use parent class implementation
851
+ return super(Num2Word_TR, self).to_currency(
852
+ val, currency=currency, cents=cents, separator=separator,
853
+ adjective=adjective)
854
+
855
+ def to_splitnum(self, val):
856
+ float_digits = str(int(val * 10 ** self.precision))
857
+ if not int(val) == 0:
858
+ self.integers_to_read = [
859
+ str(int(val)),
860
+ float_digits[len(float_digits) - self.precision:]
861
+ ]
862
+ else:
863
+ self.integers_to_read = [
864
+ "0",
865
+ "0" * (self.precision - len(float_digits)) +
866
+ float_digits[len(float_digits) - self.precision:]
867
+ ]
868
+ if len(self.integers_to_read[0]) % 3 > 0:
869
+ self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3)\
870
+ + 1
871
+ elif len(self.integers_to_read[0]) % 3 == 0:
872
+ self.total_triplets_to_read = len(self.integers_to_read[0]) // 3
873
+ self.total_digits_outside_triplets = len(self.integers_to_read[0]) % 3
874
+
875
+ okunacak = list(self.integers_to_read[0][::-1])
876
+ self.order_of_last_zero_digit = 0
877
+ found = 0
878
+ for i in range(len(okunacak) - 1):
879
+ if int(okunacak[i]) == 0 and found == 0:
880
+ self.order_of_last_zero_digit = i + 1
881
+ else:
882
+ found = 1