n2words 2.0.0 → 3.0.0

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 (327) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +86 -188
  3. package/dist/languages/am-Latn.js +3 -0
  4. package/dist/languages/am-Latn.js.map +1 -0
  5. package/dist/languages/am.js +3 -0
  6. package/dist/languages/am.js.map +1 -0
  7. package/dist/languages/ar.js +3 -0
  8. package/dist/languages/ar.js.map +1 -0
  9. package/dist/languages/az.js +3 -0
  10. package/dist/languages/az.js.map +1 -0
  11. package/dist/languages/bn.js +3 -0
  12. package/dist/languages/bn.js.map +1 -0
  13. package/dist/languages/cs.js +3 -0
  14. package/dist/languages/cs.js.map +1 -0
  15. package/dist/languages/da.js +3 -0
  16. package/dist/languages/da.js.map +1 -0
  17. package/dist/languages/de.js +3 -0
  18. package/dist/languages/de.js.map +1 -0
  19. package/dist/languages/el.js +3 -0
  20. package/dist/languages/el.js.map +1 -0
  21. package/dist/languages/en.js +3 -0
  22. package/dist/languages/en.js.map +1 -0
  23. package/dist/languages/es.js +3 -0
  24. package/dist/languages/es.js.map +1 -0
  25. package/dist/languages/fa.js +3 -0
  26. package/dist/languages/fa.js.map +1 -0
  27. package/dist/languages/fi.js +3 -0
  28. package/dist/languages/fi.js.map +1 -0
  29. package/dist/languages/fil.js +3 -0
  30. package/dist/languages/fil.js.map +1 -0
  31. package/dist/languages/fr-BE.js +3 -0
  32. package/dist/languages/fr-BE.js.map +1 -0
  33. package/dist/languages/fr.js +3 -0
  34. package/dist/languages/fr.js.map +1 -0
  35. package/dist/languages/gu.js +3 -0
  36. package/dist/languages/gu.js.map +1 -0
  37. package/dist/languages/ha.js +3 -0
  38. package/dist/languages/ha.js.map +1 -0
  39. package/dist/languages/hbo.js +3 -0
  40. package/dist/languages/hbo.js.map +1 -0
  41. package/dist/languages/he.js +3 -0
  42. package/dist/languages/he.js.map +1 -0
  43. package/dist/languages/hi.js +3 -0
  44. package/dist/languages/hi.js.map +1 -0
  45. package/dist/languages/hr.js +3 -0
  46. package/dist/languages/hr.js.map +1 -0
  47. package/dist/languages/hu.js +3 -0
  48. package/dist/languages/hu.js.map +1 -0
  49. package/dist/languages/id.js +3 -0
  50. package/dist/languages/id.js.map +1 -0
  51. package/dist/languages/it.js +3 -0
  52. package/dist/languages/it.js.map +1 -0
  53. package/dist/languages/ja.js +3 -0
  54. package/dist/languages/ja.js.map +1 -0
  55. package/dist/languages/kn.js +3 -0
  56. package/dist/languages/kn.js.map +1 -0
  57. package/dist/languages/ko.js +3 -0
  58. package/dist/languages/ko.js.map +1 -0
  59. package/dist/languages/lt.js +3 -0
  60. package/dist/languages/lt.js.map +1 -0
  61. package/dist/languages/lv.js +3 -0
  62. package/dist/languages/lv.js.map +1 -0
  63. package/dist/languages/mr.js +3 -0
  64. package/dist/languages/mr.js.map +1 -0
  65. package/dist/languages/ms.js +3 -0
  66. package/dist/languages/ms.js.map +1 -0
  67. package/dist/languages/nb.js +3 -0
  68. package/dist/languages/nb.js.map +1 -0
  69. package/dist/languages/nl.js +3 -0
  70. package/dist/languages/nl.js.map +1 -0
  71. package/dist/languages/pa.js +3 -0
  72. package/dist/languages/pa.js.map +1 -0
  73. package/dist/languages/pl.js +3 -0
  74. package/dist/languages/pl.js.map +1 -0
  75. package/dist/languages/pt.js +3 -0
  76. package/dist/languages/pt.js.map +1 -0
  77. package/dist/languages/ro.js +3 -0
  78. package/dist/languages/ro.js.map +1 -0
  79. package/dist/languages/ru.js +3 -0
  80. package/dist/languages/ru.js.map +1 -0
  81. package/dist/languages/sr-Cyrl.js +3 -0
  82. package/dist/languages/sr-Cyrl.js.map +1 -0
  83. package/dist/languages/sr-Latn.js +3 -0
  84. package/dist/languages/sr-Latn.js.map +1 -0
  85. package/dist/languages/sv.js +3 -0
  86. package/dist/languages/sv.js.map +1 -0
  87. package/dist/languages/sw.js +3 -0
  88. package/dist/languages/sw.js.map +1 -0
  89. package/dist/languages/ta.js +3 -0
  90. package/dist/languages/ta.js.map +1 -0
  91. package/dist/languages/te.js +3 -0
  92. package/dist/languages/te.js.map +1 -0
  93. package/dist/languages/th.js +3 -0
  94. package/dist/languages/th.js.map +1 -0
  95. package/dist/languages/tr.js +3 -0
  96. package/dist/languages/tr.js.map +1 -0
  97. package/dist/languages/uk.js +3 -0
  98. package/dist/languages/uk.js.map +1 -0
  99. package/dist/languages/ur.js +3 -0
  100. package/dist/languages/ur.js.map +1 -0
  101. package/dist/languages/vi.js +3 -0
  102. package/dist/languages/vi.js.map +1 -0
  103. package/dist/languages/zh-Hans.js +3 -0
  104. package/dist/languages/zh-Hans.js.map +1 -0
  105. package/dist/languages/zh-Hant.js +3 -0
  106. package/dist/languages/zh-Hant.js.map +1 -0
  107. package/dist/n2words.js +2 -2
  108. package/dist/n2words.js.map +1 -1
  109. package/lib/languages/am-Latn.d.ts +7 -0
  110. package/lib/languages/am-Latn.js +164 -0
  111. package/lib/languages/am.d.ts +7 -0
  112. package/lib/languages/am.js +164 -0
  113. package/lib/languages/ar.d.ts +14 -27
  114. package/lib/languages/ar.js +175 -129
  115. package/lib/languages/az.d.ts +4 -9
  116. package/lib/languages/az.js +171 -37
  117. package/lib/languages/bn.d.ts +4 -8
  118. package/lib/languages/bn.js +138 -124
  119. package/lib/languages/cs.d.ts +15 -85
  120. package/lib/languages/cs.js +310 -114
  121. package/lib/languages/da.d.ts +11 -12
  122. package/lib/languages/da.js +276 -101
  123. package/lib/languages/de.d.ts +14 -11
  124. package/lib/languages/de.js +317 -86
  125. package/lib/languages/el.d.ts +11 -11
  126. package/lib/languages/el.js +231 -78
  127. package/lib/languages/en.d.ts +14 -13
  128. package/lib/languages/en.js +242 -72
  129. package/lib/languages/es.d.ts +18 -12
  130. package/lib/languages/es.js +317 -103
  131. package/lib/languages/fa.d.ts +4 -44
  132. package/lib/languages/fa.js +112 -122
  133. package/lib/languages/fi.d.ts +14 -0
  134. package/lib/languages/fi.js +245 -0
  135. package/lib/languages/fil.d.ts +4 -13
  136. package/lib/languages/fil.js +207 -106
  137. package/lib/languages/fr-BE.d.ts +8 -8
  138. package/lib/languages/fr-BE.js +294 -19
  139. package/lib/languages/fr.d.ts +18 -12
  140. package/lib/languages/fr.js +352 -89
  141. package/lib/languages/gu.d.ts +4 -8
  142. package/lib/languages/gu.js +130 -125
  143. package/lib/languages/ha.d.ts +7 -0
  144. package/lib/languages/ha.js +230 -0
  145. package/lib/languages/hbo.d.ts +10 -110
  146. package/lib/languages/hbo.js +263 -214
  147. package/lib/languages/he.d.ts +10 -77
  148. package/lib/languages/he.js +242 -172
  149. package/lib/languages/hi.d.ts +4 -8
  150. package/lib/languages/hi.js +138 -124
  151. package/lib/languages/hr.d.ts +8 -77
  152. package/lib/languages/hr.js +194 -89
  153. package/lib/languages/hu.d.ts +4 -19
  154. package/lib/languages/hu.js +198 -119
  155. package/lib/languages/id.d.ts +4 -34
  156. package/lib/languages/id.js +171 -129
  157. package/lib/languages/it.d.ts +16 -34
  158. package/lib/languages/it.js +339 -94
  159. package/lib/languages/ja.d.ts +14 -14
  160. package/lib/languages/ja.js +233 -111
  161. package/lib/languages/kn.d.ts +4 -8
  162. package/lib/languages/kn.js +130 -35
  163. package/lib/languages/ko.d.ts +11 -11
  164. package/lib/languages/ko.js +257 -49
  165. package/lib/languages/lt.d.ts +15 -67
  166. package/lib/languages/lt.js +296 -122
  167. package/lib/languages/lv.d.ts +15 -67
  168. package/lib/languages/lv.js +297 -106
  169. package/lib/languages/mr.d.ts +4 -8
  170. package/lib/languages/mr.js +130 -125
  171. package/lib/languages/ms.d.ts +4 -28
  172. package/lib/languages/ms.js +171 -116
  173. package/lib/languages/nb.d.ts +11 -9
  174. package/lib/languages/nb.js +282 -87
  175. package/lib/languages/nl.d.ts +23 -13
  176. package/lib/languages/nl.js +317 -133
  177. package/lib/languages/pa.d.ts +4 -8
  178. package/lib/languages/pa.js +156 -124
  179. package/lib/languages/pl.d.ts +19 -77
  180. package/lib/languages/pl.js +307 -87
  181. package/lib/languages/pt.d.ts +14 -26
  182. package/lib/languages/pt.js +286 -92
  183. package/lib/languages/ro.d.ts +15 -155
  184. package/lib/languages/ro.js +219 -235
  185. package/lib/languages/ru.d.ts +8 -82
  186. package/lib/languages/ru.js +222 -78
  187. package/lib/languages/sr-Cyrl.d.ts +8 -77
  188. package/lib/languages/sr-Cyrl.js +191 -89
  189. package/lib/languages/sr-Latn.d.ts +8 -77
  190. package/lib/languages/sr-Latn.js +191 -89
  191. package/lib/languages/sv.d.ts +11 -11
  192. package/lib/languages/sv.js +288 -74
  193. package/lib/languages/sw.d.ts +4 -36
  194. package/lib/languages/sw.js +133 -106
  195. package/lib/languages/ta.d.ts +4 -17
  196. package/lib/languages/ta.js +129 -201
  197. package/lib/languages/te.d.ts +4 -19
  198. package/lib/languages/te.js +141 -196
  199. package/lib/languages/th.d.ts +4 -14
  200. package/lib/languages/th.js +135 -91
  201. package/lib/languages/tr.d.ts +15 -9
  202. package/lib/languages/tr.js +256 -49
  203. package/lib/languages/uk.d.ts +8 -82
  204. package/lib/languages/uk.js +200 -78
  205. package/lib/languages/ur.d.ts +4 -8
  206. package/lib/languages/ur.js +156 -124
  207. package/lib/languages/vi.d.ts +14 -69
  208. package/lib/languages/vi.js +294 -125
  209. package/lib/languages/zh-Hans.d.ts +8 -18
  210. package/lib/languages/zh-Hans.js +163 -92
  211. package/lib/languages/zh-Hant.d.ts +8 -18
  212. package/lib/languages/zh-Hant.js +181 -90
  213. package/lib/n2words.d.ts +53 -209
  214. package/lib/n2words.js +111 -530
  215. package/lib/utils/is-plain-object.d.ts +13 -0
  216. package/lib/utils/is-plain-object.js +17 -0
  217. package/lib/utils/parse-numeric.d.ts +17 -0
  218. package/lib/utils/parse-numeric.js +108 -0
  219. package/lib/utils/validate-options.d.ts +8 -0
  220. package/lib/utils/validate-options.js +16 -0
  221. package/package.json +26 -14
  222. package/dist/ArabicConverter.js +0 -3
  223. package/dist/ArabicConverter.js.map +0 -1
  224. package/dist/AzerbaijaniConverter.js +0 -3
  225. package/dist/AzerbaijaniConverter.js.map +0 -1
  226. package/dist/BanglaConverter.js +0 -3
  227. package/dist/BanglaConverter.js.map +0 -1
  228. package/dist/BiblicalHebrewConverter.js +0 -3
  229. package/dist/BiblicalHebrewConverter.js.map +0 -1
  230. package/dist/CroatianConverter.js +0 -3
  231. package/dist/CroatianConverter.js.map +0 -1
  232. package/dist/CzechConverter.js +0 -3
  233. package/dist/CzechConverter.js.map +0 -1
  234. package/dist/DanishConverter.js +0 -3
  235. package/dist/DanishConverter.js.map +0 -1
  236. package/dist/DutchConverter.js +0 -3
  237. package/dist/DutchConverter.js.map +0 -1
  238. package/dist/EnglishConverter.js +0 -3
  239. package/dist/EnglishConverter.js.map +0 -1
  240. package/dist/FilipinoConverter.js +0 -3
  241. package/dist/FilipinoConverter.js.map +0 -1
  242. package/dist/FrenchBelgiumConverter.js +0 -3
  243. package/dist/FrenchBelgiumConverter.js.map +0 -1
  244. package/dist/FrenchConverter.js +0 -3
  245. package/dist/FrenchConverter.js.map +0 -1
  246. package/dist/GermanConverter.js +0 -3
  247. package/dist/GermanConverter.js.map +0 -1
  248. package/dist/GreekConverter.js +0 -3
  249. package/dist/GreekConverter.js.map +0 -1
  250. package/dist/GujaratiConverter.js +0 -3
  251. package/dist/GujaratiConverter.js.map +0 -1
  252. package/dist/HebrewConverter.js +0 -3
  253. package/dist/HebrewConverter.js.map +0 -1
  254. package/dist/HindiConverter.js +0 -3
  255. package/dist/HindiConverter.js.map +0 -1
  256. package/dist/HungarianConverter.js +0 -3
  257. package/dist/HungarianConverter.js.map +0 -1
  258. package/dist/IndonesianConverter.js +0 -3
  259. package/dist/IndonesianConverter.js.map +0 -1
  260. package/dist/ItalianConverter.js +0 -3
  261. package/dist/ItalianConverter.js.map +0 -1
  262. package/dist/JapaneseConverter.js +0 -3
  263. package/dist/JapaneseConverter.js.map +0 -1
  264. package/dist/KannadaConverter.js +0 -3
  265. package/dist/KannadaConverter.js.map +0 -1
  266. package/dist/KoreanConverter.js +0 -3
  267. package/dist/KoreanConverter.js.map +0 -1
  268. package/dist/LatvianConverter.js +0 -3
  269. package/dist/LatvianConverter.js.map +0 -1
  270. package/dist/LithuanianConverter.js +0 -3
  271. package/dist/LithuanianConverter.js.map +0 -1
  272. package/dist/MalayConverter.js +0 -3
  273. package/dist/MalayConverter.js.map +0 -1
  274. package/dist/MarathiConverter.js +0 -3
  275. package/dist/MarathiConverter.js.map +0 -1
  276. package/dist/NorwegianBokmalConverter.js +0 -3
  277. package/dist/NorwegianBokmalConverter.js.map +0 -1
  278. package/dist/PersianConverter.js +0 -3
  279. package/dist/PersianConverter.js.map +0 -1
  280. package/dist/PolishConverter.js +0 -3
  281. package/dist/PolishConverter.js.map +0 -1
  282. package/dist/PortugueseConverter.js +0 -3
  283. package/dist/PortugueseConverter.js.map +0 -1
  284. package/dist/PunjabiConverter.js +0 -3
  285. package/dist/PunjabiConverter.js.map +0 -1
  286. package/dist/RomanianConverter.js +0 -3
  287. package/dist/RomanianConverter.js.map +0 -1
  288. package/dist/RussianConverter.js +0 -3
  289. package/dist/RussianConverter.js.map +0 -1
  290. package/dist/SerbianCyrillicConverter.js +0 -3
  291. package/dist/SerbianCyrillicConverter.js.map +0 -1
  292. package/dist/SerbianLatinConverter.js +0 -3
  293. package/dist/SerbianLatinConverter.js.map +0 -1
  294. package/dist/SimplifiedChineseConverter.js +0 -3
  295. package/dist/SimplifiedChineseConverter.js.map +0 -1
  296. package/dist/SpanishConverter.js +0 -3
  297. package/dist/SpanishConverter.js.map +0 -1
  298. package/dist/SwahiliConverter.js +0 -3
  299. package/dist/SwahiliConverter.js.map +0 -1
  300. package/dist/SwedishConverter.js +0 -3
  301. package/dist/SwedishConverter.js.map +0 -1
  302. package/dist/TamilConverter.js +0 -3
  303. package/dist/TamilConverter.js.map +0 -1
  304. package/dist/TeluguConverter.js +0 -3
  305. package/dist/TeluguConverter.js.map +0 -1
  306. package/dist/ThaiConverter.js +0 -3
  307. package/dist/ThaiConverter.js.map +0 -1
  308. package/dist/TraditionalChineseConverter.js +0 -3
  309. package/dist/TraditionalChineseConverter.js.map +0 -1
  310. package/dist/TurkishConverter.js +0 -3
  311. package/dist/TurkishConverter.js.map +0 -1
  312. package/dist/UkrainianConverter.js +0 -3
  313. package/dist/UkrainianConverter.js.map +0 -1
  314. package/dist/UrduConverter.js +0 -3
  315. package/dist/UrduConverter.js.map +0 -1
  316. package/dist/VietnameseConverter.js +0 -3
  317. package/dist/VietnameseConverter.js.map +0 -1
  318. package/lib/classes/abstract-language.d.ts +0 -178
  319. package/lib/classes/abstract-language.js +0 -268
  320. package/lib/classes/greedy-scale-language.d.ts +0 -109
  321. package/lib/classes/greedy-scale-language.js +0 -201
  322. package/lib/classes/slavic-language.d.ts +0 -148
  323. package/lib/classes/slavic-language.js +0 -281
  324. package/lib/classes/south-asian-language.d.ts +0 -70
  325. package/lib/classes/south-asian-language.js +0 -154
  326. package/lib/classes/turkic-language.d.ts +0 -26
  327. package/lib/classes/turkic-language.js +0 -59
@@ -1,131 +1,145 @@
1
- import { SouthAsianLanguage } from '../classes/south-asian-language.js'
2
-
3
1
  /**
4
- * Bangla language converter.
2
+ * Bangla language converter - Functional Implementation
3
+ *
4
+ * Self-contained converter for South Asian numbering.
5
5
  *
6
- * Supports:
6
+ * Key features:
7
7
  * - Indian numbering system (হাজার, লাখ, কোটি)
8
8
  * - Bangla script (Bengali)
9
+ * - 3-2-2 grouping pattern (last 3 digits, then groups of 2)
9
10
  * - Complete word forms for 0-99
10
11
  */
11
- export class Bangla extends SouthAsianLanguage {
12
- negativeWord = 'মাইনাস'
13
- decimalSeparatorWord = 'দশমিক'
14
- zeroWord = 'শূন্য'
15
- hundredWord = 'শত'
16
-
17
- belowHundredWords = [
18
- 'শূন্য',
19
- 'এক',
20
- 'দুই',
21
- 'তিন',
22
- 'চার',
23
- 'পাঁচ',
24
- 'ছয়',
25
- 'সাত',
26
- 'আট',
27
- 'নয়',
28
- 'দশ',
29
- 'এগারো',
30
- 'বারো',
31
- 'তেরো',
32
- 'চৌদ্দ',
33
- 'পনেরো',
34
- 'ষোল',
35
- 'সতেরো',
36
- 'আঠারো',
37
- 'উনিশ',
38
- 'বিশ',
39
- 'একুশ',
40
- 'বাইশ',
41
- 'তেইশ',
42
- 'চব্বিশ',
43
- 'পঁচিশ',
44
- 'ছাব্বিশ',
45
- 'সাতাশ',
46
- 'আঠাশ',
47
- 'উনত্রিশ',
48
- 'ত্রিশ',
49
- 'একত্রিশ',
50
- 'বত্রিশ',
51
- 'তেত্রিশ',
52
- 'চৌত্রিশ',
53
- 'পঁয়ত্রিশ',
54
- 'ছত্রিশ',
55
- 'সাঁইত্রিশ',
56
- 'আটত্রিশ',
57
- 'উনচল্লিশ',
58
- 'চল্লিশ',
59
- 'একচল্লিশ',
60
- 'বেয়াল্লিশ',
61
- 'তেতাল্লিশ',
62
- 'চুয়াল্লিশ',
63
- 'পঁয়তাল্লিশ',
64
- 'ছেচল্লিশ',
65
- 'সাতচল্লিশ',
66
- 'আটচল্লিশ',
67
- 'উনপঞ্চাশ',
68
- 'পঞ্চাশ',
69
- 'একান্ন',
70
- 'বাহান্ন',
71
- 'তিপ্পান্ন',
72
- 'চুয়ান্ন',
73
- 'পঞ্চান্ন',
74
- 'ছাপ্পান্ন',
75
- 'সাতান্ন',
76
- 'আটান্ন',
77
- 'উনষাট',
78
- 'ষাট',
79
- 'একষট্টি',
80
- 'বাষট্টি',
81
- 'তেষট্টি',
82
- 'চৌষট্টি',
83
- 'পঁয়ষট্টি',
84
- 'ছেষট্টি',
85
- 'সাতষট্টি',
86
- 'আটষট্টি',
87
- 'ঊনসত্তর',
88
- 'সত্তর',
89
- 'একাত্তর',
90
- 'বাহাত্তর',
91
- 'তেহাত্তর',
92
- 'চুয়াত্তর',
93
- 'পঁচাত্তর',
94
- 'ছিয়াত্তর',
95
- 'সাতাত্তর',
96
- 'আটাত্তর',
97
- 'উনআশি',
98
- 'আশি',
99
- 'একাশি',
100
- 'বিরাশি',
101
- 'তিরাশি',
102
- 'চুরাশি',
103
- 'পঁচাশি',
104
- 'ছিয়াশি',
105
- 'সাতাশি',
106
- 'আটাশি',
107
- 'উননব্বই',
108
- 'নব্বই',
109
- 'একানব্বই',
110
- 'বিরানব্বই',
111
- 'তিরানব্বই',
112
- 'চুরানব্বই',
113
- 'পঁচানব্বই',
114
- 'ছিয়ানব্বই',
115
- 'সাতানব্বই',
116
- 'আটানব্বই',
117
- 'নিরানব্বই'
118
- ]
119
-
120
- scaleWords = [
121
- '',
122
- 'হাজার',
123
- 'লাখ',
124
- 'কোটি',
125
- 'আরব',
126
- 'খরব',
127
- 'নীল',
128
- 'পদ্ম',
129
- 'শঙ্খ'
130
- ]
12
+
13
+ import { parseNumericValue } from '../utils/parse-numeric.js'
14
+
15
+ // ============================================================================
16
+ // Vocabulary
17
+ // ============================================================================
18
+
19
+ const ZERO = 'শূন্য'
20
+ const NEGATIVE = 'মাইনাস'
21
+ const DECIMAL_SEP = 'দশমিক'
22
+ const HUNDRED = 'শত'
23
+
24
+ const BELOW_HUNDRED = [
25
+ 'শূন্য', 'এক', 'দুই', 'তিন', 'চার', 'পাঁচ', 'ছয়', 'সাত', 'আট', 'নয়',
26
+ 'দশ', 'এগারো', 'বারো', 'তেরো', 'চৌদ্দ', 'পনেরো', 'ষোল', 'সতেরো', 'আঠারো', 'উনিশ',
27
+ 'বিশ', 'একুশ', 'বাইশ', 'তেইশ', 'চব্বিশ', 'পঁচিশ', 'ছাব্বিশ', 'সাতাশ', 'আঠাশ', 'উনত্রিশ',
28
+ 'ত্রিশ', 'একত্রিশ', 'বত্রিশ', 'তেত্রিশ', 'চৌত্রিশ', 'পঁয়ত্রিশ', 'ছত্রিশ', 'সাঁইত্রিশ', 'আটত্রিশ', 'উনচল্লিশ',
29
+ 'চল্লিশ', 'একচল্লিশ', 'বেয়াল্লিশ', 'তেতাল্লিশ', 'চুয়াল্লিশ', 'পঁয়তাল্লিশ', 'ছেচল্লিশ', 'সাতচল্লিশ', 'আটচল্লিশ', 'উনপঞ্চাশ',
30
+ 'পঞ্চাশ', 'একান্ন', 'বাহান্ন', 'তিপ্পান্ন', 'চুয়ান্ন', 'পঞ্চান্ন', 'ছাপ্পান্ন', 'সাতান্ন', 'আটান্ন', 'উনষাট',
31
+ 'ষাট', 'একষট্টি', 'বাষট্টি', 'তেষট্টি', 'চৌষট্টি', 'পঁয়ষট্টি', 'ছেষট্টি', 'সাতষট্টি', 'আটষট্টি', 'ঊনসত্তর',
32
+ 'সত্তর', 'একাত্তর', 'বাহাত্তর', 'তেহাত্তর', 'চুয়াত্তর', 'পঁচাত্তর', 'ছিয়াত্তর', 'সাতাত্তর', 'আটাত্তর', 'উনআশি',
33
+ 'আশি', 'একাশি', 'বিরাশি', 'তিরাশি', 'চুরাশি', 'পঁচাশি', 'ছিয়াশি', 'সাতাশি', 'আটাশি', 'উননব্বই',
34
+ 'নব্বই', 'একানব্বই', 'বিরানব্বই', 'তিরানব্বই', 'চুরানব্বই', 'পঁচানব্বই', 'ছিয়ানব্বই', 'সাতানব্বই', 'আটানব্বই', 'নিরানব্বই'
35
+ ]
36
+
37
+ // Scale words: index 0 = units (empty), 1 = thousand, 2 = lakh, 3 = crore, etc.
38
+ const SCALE_WORDS = ['', 'হাজার', 'লাখ', 'কোটি', 'আরব', 'খরব', 'নীল', 'পদ্ম', 'শঙ্খ']
39
+
40
+ // ============================================================================
41
+ // Segment Splitting (inlined for performance)
42
+ // ============================================================================
43
+
44
+ function groupByThreeThenTwos (n) {
45
+ const numStr = n.toString()
46
+ if (numStr.length <= 3) return [Number(numStr)]
47
+
48
+ const segments = []
49
+ segments.unshift(Number(numStr.slice(-3)))
50
+
51
+ let remaining = numStr.slice(0, -3)
52
+ while (remaining.length > 0) {
53
+ segments.unshift(Number(remaining.slice(-2)))
54
+ remaining = remaining.slice(0, -2)
55
+ }
56
+
57
+ return segments
58
+ }
59
+
60
+ function segmentToWords (n) {
61
+ if (n === 0) return ''
62
+ if (n < 100) return BELOW_HUNDRED[n]
63
+
64
+ const hundreds = Math.trunc(n / 100)
65
+ const remainder = n % 100
66
+
67
+ if (remainder === 0) {
68
+ return BELOW_HUNDRED[hundreds] + ' ' + HUNDRED
69
+ }
70
+ return BELOW_HUNDRED[hundreds] + ' ' + HUNDRED + ' ' + BELOW_HUNDRED[remainder]
71
+ }
72
+
73
+ // ============================================================================
74
+ // Conversion Functions
75
+ // ============================================================================
76
+
77
+ function integerToWords (n) {
78
+ if (n === 0n) return ZERO
79
+
80
+ const segments = groupByThreeThenTwos(n)
81
+ const segmentCount = segments.length
82
+ const words = []
83
+
84
+ for (let i = 0; i < segmentCount; i++) {
85
+ const segmentValue = segments[i]
86
+ if (segmentValue === 0) continue
87
+
88
+ const scaleIndex = segmentCount - i - 1
89
+ words.push(segmentToWords(segmentValue))
90
+ if (scaleIndex > 0 && SCALE_WORDS[scaleIndex]) {
91
+ words.push(SCALE_WORDS[scaleIndex])
92
+ }
93
+ }
94
+
95
+ return words.join(' ').trim()
96
+ }
97
+
98
+ function decimalPartToWords (decimalPart) {
99
+ let result = ''
100
+ let i = 0
101
+
102
+ while (i < decimalPart.length && decimalPart[i] === '0') {
103
+ if (result) result += ' '
104
+ result += ZERO
105
+ i++
106
+ }
107
+
108
+ const remainder = decimalPart.slice(i)
109
+ if (remainder) {
110
+ if (result) result += ' '
111
+ result += integerToWords(BigInt(remainder))
112
+ }
113
+
114
+ return result
115
+ }
116
+
117
+ /**
118
+ * Converts a numeric value to Bengali words.
119
+ *
120
+ * @param {number | string | bigint} value - The numeric value to convert
121
+ * @returns {string} The number in Bengali words
122
+ */
123
+ function toWords (value) {
124
+ const { isNegative, integerPart, decimalPart } = parseNumericValue(value)
125
+
126
+ let result = ''
127
+
128
+ if (isNegative) {
129
+ result = NEGATIVE + ' '
130
+ }
131
+
132
+ result += integerToWords(integerPart)
133
+
134
+ if (decimalPart) {
135
+ result += ' ' + DECIMAL_SEP + ' ' + decimalPartToWords(decimalPart)
136
+ }
137
+
138
+ return result
131
139
  }
140
+
141
+ // ============================================================================
142
+ // Exports
143
+ // ============================================================================
144
+
145
+ export { toWords }
@@ -1,88 +1,18 @@
1
1
  /**
2
- * Czech language converter.
2
+ * Converts a numeric value to Czech words.
3
3
  *
4
- * Supports:
5
- * - Three-form pluralization (one/few/many)
6
- * - Dynamic decimal separator (celá/celé/celých)
7
- * - Gender agreement in number words
4
+ * This is the main public API. It accepts any valid numeric input
5
+ * (number, string, or bigint) and handles parsing internally.
6
+ *
7
+ * @param {number | string | bigint} value - The numeric value to convert
8
+ * @returns {string} The number in Czech words
9
+ * @throws {TypeError} If value is not a valid numeric type
10
+ * @throws {Error} If value is not a valid number format
11
+ *
12
+ * @example
13
+ * toWords(21) // 'dvacet jedna'
14
+ * toWords(1000) // 'tisíc'
15
+ * toWords(2000) // 'dva tisíce'
16
+ * toWords(5000) // 'pět tisíc'
8
17
  */
9
- export class Czech extends SlavicLanguage {
10
- constructor(options?: {});
11
- onesWords: {
12
- 1: string;
13
- 2: string;
14
- 3: string;
15
- 4: string;
16
- 5: string;
17
- 6: string;
18
- 7: string;
19
- 8: string;
20
- 9: string;
21
- };
22
- onesFeminineWords: {
23
- 1: string;
24
- 2: string;
25
- 3: string;
26
- 4: string;
27
- 5: string;
28
- 6: string;
29
- 7: string;
30
- 8: string;
31
- 9: string;
32
- };
33
- teensWords: {
34
- 0: string;
35
- 1: string;
36
- 2: string;
37
- 3: string;
38
- 4: string;
39
- 5: string;
40
- 6: string;
41
- 7: string;
42
- 8: string;
43
- 9: string;
44
- };
45
- twentiesWords: {
46
- 2: string;
47
- 3: string;
48
- 4: string;
49
- 5: string;
50
- 6: string;
51
- 7: string;
52
- 8: string;
53
- 9: string;
54
- };
55
- hundredsWords: {
56
- 1: string;
57
- 2: string;
58
- 3: string;
59
- 4: string;
60
- 5: string;
61
- 6: string;
62
- 7: string;
63
- 8: string;
64
- 9: string;
65
- };
66
- pluralForms: {
67
- 1: string[];
68
- 2: string[];
69
- 3: string[];
70
- 4: string[];
71
- 5: string[];
72
- 6: string[];
73
- 7: string[];
74
- 8: string[];
75
- 9: string[];
76
- 10: string[];
77
- };
78
- /** Returns decimal separator word based on integer part (celá/celé/celých). */
79
- get decimalSeparatorWord(): "celá" | "celé" | "celých";
80
- /**
81
- * Override toWords to cache integer part before decimal separator is accessed.
82
- */
83
- toWords(isNegative: any, integerPart: any, decimalPart: any): string;
84
- /** Selects Czech plural form: 1 = singular, 2-4 = few, else = many. */
85
- pluralize(n: any, forms: any): any;
86
- #private;
87
- }
88
- import { SlavicLanguage } from '../classes/slavic-language.js';
18
+ export function toWords(value: number | string | bigint): string;