n2words 1.24.0 → 2.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 (349) hide show
  1. package/README.md +285 -156
  2. package/dist/ArabicConverter.js +3 -0
  3. package/dist/ArabicConverter.js.map +1 -0
  4. package/dist/AzerbaijaniConverter.js +3 -0
  5. package/dist/AzerbaijaniConverter.js.map +1 -0
  6. package/dist/BanglaConverter.js +3 -0
  7. package/dist/BanglaConverter.js.map +1 -0
  8. package/dist/BiblicalHebrewConverter.js +3 -0
  9. package/dist/BiblicalHebrewConverter.js.map +1 -0
  10. package/dist/CroatianConverter.js +3 -0
  11. package/dist/CroatianConverter.js.map +1 -0
  12. package/dist/CzechConverter.js +3 -0
  13. package/dist/CzechConverter.js.map +1 -0
  14. package/dist/DanishConverter.js +3 -0
  15. package/dist/DanishConverter.js.map +1 -0
  16. package/dist/DutchConverter.js +3 -0
  17. package/dist/DutchConverter.js.map +1 -0
  18. package/dist/EnglishConverter.js +3 -0
  19. package/dist/EnglishConverter.js.map +1 -0
  20. package/dist/FilipinoConverter.js +3 -0
  21. package/dist/FilipinoConverter.js.map +1 -0
  22. package/dist/FrenchBelgiumConverter.js +3 -0
  23. package/dist/FrenchBelgiumConverter.js.map +1 -0
  24. package/dist/FrenchConverter.js +3 -0
  25. package/dist/FrenchConverter.js.map +1 -0
  26. package/dist/GermanConverter.js +3 -0
  27. package/dist/GermanConverter.js.map +1 -0
  28. package/dist/GreekConverter.js +3 -0
  29. package/dist/GreekConverter.js.map +1 -0
  30. package/dist/GujaratiConverter.js +3 -0
  31. package/dist/GujaratiConverter.js.map +1 -0
  32. package/dist/HebrewConverter.js +3 -0
  33. package/dist/HebrewConverter.js.map +1 -0
  34. package/dist/HindiConverter.js +3 -0
  35. package/dist/HindiConverter.js.map +1 -0
  36. package/dist/HungarianConverter.js +3 -0
  37. package/dist/HungarianConverter.js.map +1 -0
  38. package/dist/IndonesianConverter.js +3 -0
  39. package/dist/IndonesianConverter.js.map +1 -0
  40. package/dist/ItalianConverter.js +3 -0
  41. package/dist/ItalianConverter.js.map +1 -0
  42. package/dist/JapaneseConverter.js +3 -0
  43. package/dist/JapaneseConverter.js.map +1 -0
  44. package/dist/KannadaConverter.js +3 -0
  45. package/dist/KannadaConverter.js.map +1 -0
  46. package/dist/KoreanConverter.js +3 -0
  47. package/dist/KoreanConverter.js.map +1 -0
  48. package/dist/LatvianConverter.js +3 -0
  49. package/dist/LatvianConverter.js.map +1 -0
  50. package/dist/LithuanianConverter.js +3 -0
  51. package/dist/LithuanianConverter.js.map +1 -0
  52. package/dist/MalayConverter.js +3 -0
  53. package/dist/MalayConverter.js.map +1 -0
  54. package/dist/MarathiConverter.js +3 -0
  55. package/dist/MarathiConverter.js.map +1 -0
  56. package/dist/NorwegianBokmalConverter.js +3 -0
  57. package/dist/NorwegianBokmalConverter.js.map +1 -0
  58. package/dist/PersianConverter.js +3 -0
  59. package/dist/PersianConverter.js.map +1 -0
  60. package/dist/PolishConverter.js +3 -0
  61. package/dist/PolishConverter.js.map +1 -0
  62. package/dist/PortugueseConverter.js +3 -0
  63. package/dist/PortugueseConverter.js.map +1 -0
  64. package/dist/PunjabiConverter.js +3 -0
  65. package/dist/PunjabiConverter.js.map +1 -0
  66. package/dist/RomanianConverter.js +3 -0
  67. package/dist/RomanianConverter.js.map +1 -0
  68. package/dist/RussianConverter.js +3 -0
  69. package/dist/RussianConverter.js.map +1 -0
  70. package/dist/SerbianCyrillicConverter.js +3 -0
  71. package/dist/SerbianCyrillicConverter.js.map +1 -0
  72. package/dist/SerbianLatinConverter.js +3 -0
  73. package/dist/SerbianLatinConverter.js.map +1 -0
  74. package/dist/SimplifiedChineseConverter.js +3 -0
  75. package/dist/SimplifiedChineseConverter.js.map +1 -0
  76. package/dist/SpanishConverter.js +3 -0
  77. package/dist/SpanishConverter.js.map +1 -0
  78. package/dist/SwahiliConverter.js +3 -0
  79. package/dist/SwahiliConverter.js.map +1 -0
  80. package/dist/SwedishConverter.js +3 -0
  81. package/dist/SwedishConverter.js.map +1 -0
  82. package/dist/TamilConverter.js +3 -0
  83. package/dist/TamilConverter.js.map +1 -0
  84. package/dist/TeluguConverter.js +3 -0
  85. package/dist/TeluguConverter.js.map +1 -0
  86. package/dist/ThaiConverter.js +3 -0
  87. package/dist/ThaiConverter.js.map +1 -0
  88. package/dist/TraditionalChineseConverter.js +3 -0
  89. package/dist/TraditionalChineseConverter.js.map +1 -0
  90. package/dist/TurkishConverter.js +3 -0
  91. package/dist/TurkishConverter.js.map +1 -0
  92. package/dist/UkrainianConverter.js +3 -0
  93. package/dist/UkrainianConverter.js.map +1 -0
  94. package/dist/UrduConverter.js +3 -0
  95. package/dist/UrduConverter.js.map +1 -0
  96. package/dist/VietnameseConverter.js +3 -0
  97. package/dist/VietnameseConverter.js.map +1 -0
  98. package/dist/n2words.js +3 -2
  99. package/dist/n2words.js.map +1 -1
  100. package/lib/classes/abstract-language.d.ts +178 -0
  101. package/lib/classes/abstract-language.js +192 -185
  102. package/lib/classes/greedy-scale-language.d.ts +109 -0
  103. package/lib/classes/greedy-scale-language.js +96 -90
  104. package/lib/classes/slavic-language.d.ts +148 -0
  105. package/lib/classes/slavic-language.js +136 -106
  106. package/lib/classes/south-asian-language.d.ts +70 -0
  107. package/lib/classes/south-asian-language.js +58 -65
  108. package/lib/classes/turkic-language.d.ts +26 -0
  109. package/lib/classes/turkic-language.js +22 -26
  110. package/lib/languages/ar.d.ts +30 -0
  111. package/lib/languages/ar.js +49 -133
  112. package/lib/languages/az.d.ts +12 -0
  113. package/lib/languages/az.js +7 -23
  114. package/lib/languages/bn.d.ts +11 -0
  115. package/lib/languages/bn.js +12 -7
  116. package/lib/languages/cs.d.ts +88 -0
  117. package/lib/languages/cs.js +44 -113
  118. package/lib/languages/da.d.ts +15 -0
  119. package/lib/languages/da.js +40 -87
  120. package/lib/languages/de.d.ts +14 -0
  121. package/lib/languages/de.js +34 -68
  122. package/lib/languages/el.d.ts +14 -0
  123. package/lib/languages/el.js +22 -48
  124. package/lib/languages/en.d.ts +16 -0
  125. package/lib/languages/en.js +22 -59
  126. package/lib/languages/es.d.ts +15 -0
  127. package/lib/languages/es.js +49 -81
  128. package/lib/languages/fa.d.ts +47 -0
  129. package/lib/languages/fa.js +90 -73
  130. package/lib/languages/fil.d.ts +16 -0
  131. package/lib/languages/fil.js +35 -76
  132. package/lib/languages/fr-BE.d.ts +11 -0
  133. package/lib/languages/fr-BE.js +15 -51
  134. package/lib/languages/fr.d.ts +15 -0
  135. package/lib/languages/fr.js +33 -72
  136. package/lib/languages/gu.d.ts +11 -0
  137. package/lib/languages/gu.js +10 -34
  138. package/lib/languages/hbo.d.ts +113 -0
  139. package/lib/languages/hbo.js +251 -0
  140. package/lib/languages/he.d.ts +80 -0
  141. package/lib/languages/he.js +41 -164
  142. package/lib/languages/hi.d.ts +11 -0
  143. package/lib/languages/hi.js +12 -7
  144. package/lib/languages/hr.d.ts +80 -0
  145. package/lib/languages/hr.js +51 -95
  146. package/lib/languages/hu.d.ts +22 -0
  147. package/lib/languages/hu.js +35 -53
  148. package/lib/languages/id.d.ts +37 -0
  149. package/lib/languages/id.js +29 -44
  150. package/lib/languages/it.d.ts +37 -0
  151. package/lib/languages/it.js +36 -52
  152. package/lib/languages/ja.d.ts +17 -0
  153. package/lib/languages/ja.js +22 -75
  154. package/lib/languages/kn.d.ts +11 -0
  155. package/lib/languages/kn.js +10 -39
  156. package/lib/languages/ko.d.ts +14 -0
  157. package/lib/languages/ko.js +17 -45
  158. package/lib/languages/lt.d.ts +70 -0
  159. package/lib/languages/lt.js +28 -63
  160. package/lib/languages/lv.d.ts +70 -0
  161. package/lib/languages/lv.js +35 -58
  162. package/lib/languages/mr.d.ts +11 -0
  163. package/lib/languages/mr.js +10 -34
  164. package/lib/languages/ms.d.ts +31 -0
  165. package/lib/languages/ms.js +24 -20
  166. package/lib/languages/nb.d.ts +12 -0
  167. package/lib/languages/nb.js +36 -56
  168. package/lib/languages/nl.d.ts +16 -0
  169. package/lib/languages/nl.js +58 -109
  170. package/lib/languages/pa.d.ts +11 -0
  171. package/lib/languages/{pa-Guru.js → pa.js} +12 -7
  172. package/lib/languages/pl.d.ts +80 -0
  173. package/lib/languages/pl.js +26 -105
  174. package/lib/languages/pt.d.ts +29 -0
  175. package/lib/languages/pt.js +29 -64
  176. package/lib/languages/ro.d.ts +158 -0
  177. package/lib/languages/ro.js +60 -167
  178. package/lib/languages/ru.d.ts +85 -0
  179. package/lib/languages/ru.js +17 -37
  180. package/lib/languages/sr-Cyrl.d.ts +80 -0
  181. package/lib/languages/sr-Cyrl.js +113 -0
  182. package/lib/languages/sr-Latn.d.ts +80 -0
  183. package/lib/languages/sr-Latn.js +54 -98
  184. package/lib/languages/sv.d.ts +14 -0
  185. package/lib/languages/sv.js +26 -63
  186. package/lib/languages/sw.d.ts +39 -0
  187. package/lib/languages/sw.js +26 -21
  188. package/lib/languages/ta.d.ts +20 -0
  189. package/lib/languages/ta.js +26 -26
  190. package/lib/languages/te.d.ts +22 -0
  191. package/lib/languages/te.js +28 -38
  192. package/lib/languages/th.d.ts +17 -0
  193. package/lib/languages/th.js +25 -31
  194. package/lib/languages/tr.d.ts +12 -0
  195. package/lib/languages/tr.js +11 -38
  196. package/lib/languages/uk.d.ts +85 -0
  197. package/lib/languages/uk.js +18 -44
  198. package/lib/languages/ur.d.ts +11 -0
  199. package/lib/languages/ur.js +12 -7
  200. package/lib/languages/vi.d.ts +72 -0
  201. package/lib/languages/vi.js +25 -71
  202. package/lib/languages/zh-Hans.d.ts +21 -0
  203. package/lib/languages/zh-Hans.js +33 -87
  204. package/lib/languages/zh-Hant.d.ts +21 -0
  205. package/lib/languages/zh-Hant.js +111 -0
  206. package/lib/n2words.d.ts +209 -0
  207. package/lib/n2words.js +474 -191
  208. package/package.json +106 -67
  209. package/dist/languages/ar.js +0 -2
  210. package/dist/languages/ar.js.map +0 -1
  211. package/dist/languages/az.js +0 -2
  212. package/dist/languages/az.js.map +0 -1
  213. package/dist/languages/bn.js +0 -2
  214. package/dist/languages/bn.js.map +0 -1
  215. package/dist/languages/cs.js +0 -2
  216. package/dist/languages/cs.js.map +0 -1
  217. package/dist/languages/da.js +0 -2
  218. package/dist/languages/da.js.map +0 -1
  219. package/dist/languages/de.js +0 -2
  220. package/dist/languages/de.js.map +0 -1
  221. package/dist/languages/el.js +0 -2
  222. package/dist/languages/el.js.map +0 -1
  223. package/dist/languages/en.js +0 -2
  224. package/dist/languages/en.js.map +0 -1
  225. package/dist/languages/es.js +0 -2
  226. package/dist/languages/es.js.map +0 -1
  227. package/dist/languages/fa.js +0 -2
  228. package/dist/languages/fa.js.map +0 -1
  229. package/dist/languages/fil.js +0 -2
  230. package/dist/languages/fil.js.map +0 -1
  231. package/dist/languages/fr-BE.js +0 -2
  232. package/dist/languages/fr-BE.js.map +0 -1
  233. package/dist/languages/fr.js +0 -2
  234. package/dist/languages/fr.js.map +0 -1
  235. package/dist/languages/gu.js +0 -2
  236. package/dist/languages/gu.js.map +0 -1
  237. package/dist/languages/he.js +0 -2
  238. package/dist/languages/he.js.map +0 -1
  239. package/dist/languages/hi.js +0 -2
  240. package/dist/languages/hi.js.map +0 -1
  241. package/dist/languages/hr.js +0 -2
  242. package/dist/languages/hr.js.map +0 -1
  243. package/dist/languages/hu.js +0 -2
  244. package/dist/languages/hu.js.map +0 -1
  245. package/dist/languages/id.js +0 -2
  246. package/dist/languages/id.js.map +0 -1
  247. package/dist/languages/it.js +0 -2
  248. package/dist/languages/it.js.map +0 -1
  249. package/dist/languages/ja.js +0 -2
  250. package/dist/languages/ja.js.map +0 -1
  251. package/dist/languages/kn.js +0 -2
  252. package/dist/languages/kn.js.map +0 -1
  253. package/dist/languages/ko.js +0 -2
  254. package/dist/languages/ko.js.map +0 -1
  255. package/dist/languages/lt.js +0 -2
  256. package/dist/languages/lt.js.map +0 -1
  257. package/dist/languages/lv.js +0 -2
  258. package/dist/languages/lv.js.map +0 -1
  259. package/dist/languages/mr.js +0 -2
  260. package/dist/languages/mr.js.map +0 -1
  261. package/dist/languages/ms.js +0 -2
  262. package/dist/languages/ms.js.map +0 -1
  263. package/dist/languages/nb.js +0 -2
  264. package/dist/languages/nb.js.map +0 -1
  265. package/dist/languages/nl.js +0 -2
  266. package/dist/languages/nl.js.map +0 -1
  267. package/dist/languages/pa-Guru.js +0 -2
  268. package/dist/languages/pa-Guru.js.map +0 -1
  269. package/dist/languages/pl.js +0 -2
  270. package/dist/languages/pl.js.map +0 -1
  271. package/dist/languages/pt.js +0 -2
  272. package/dist/languages/pt.js.map +0 -1
  273. package/dist/languages/ro.js +0 -2
  274. package/dist/languages/ro.js.map +0 -1
  275. package/dist/languages/ru.js +0 -2
  276. package/dist/languages/ru.js.map +0 -1
  277. package/dist/languages/sr-Latn.js +0 -2
  278. package/dist/languages/sr-Latn.js.map +0 -1
  279. package/dist/languages/sv.js +0 -2
  280. package/dist/languages/sv.js.map +0 -1
  281. package/dist/languages/sw.js +0 -2
  282. package/dist/languages/sw.js.map +0 -1
  283. package/dist/languages/ta.js +0 -2
  284. package/dist/languages/ta.js.map +0 -1
  285. package/dist/languages/te.js +0 -2
  286. package/dist/languages/te.js.map +0 -1
  287. package/dist/languages/th.js +0 -2
  288. package/dist/languages/th.js.map +0 -1
  289. package/dist/languages/tr.js +0 -2
  290. package/dist/languages/tr.js.map +0 -1
  291. package/dist/languages/uk.js +0 -2
  292. package/dist/languages/uk.js.map +0 -1
  293. package/dist/languages/ur.js +0 -2
  294. package/dist/languages/ur.js.map +0 -1
  295. package/dist/languages/vi.js +0 -2
  296. package/dist/languages/vi.js.map +0 -1
  297. package/dist/languages/zh-Hans.js +0 -2
  298. package/dist/languages/zh-Hans.js.map +0 -1
  299. package/typings/classes/abstract-language.d.ts +0 -144
  300. package/typings/classes/greedy-scale-language.d.ts +0 -148
  301. package/typings/classes/slavic-language.d.ts +0 -145
  302. package/typings/classes/south-asian-language.d.ts +0 -101
  303. package/typings/classes/turkic-language.d.ts +0 -42
  304. package/typings/languages/ar.d.ts +0 -93
  305. package/typings/languages/az.d.ts +0 -25
  306. package/typings/languages/bn.d.ts +0 -1
  307. package/typings/languages/cs.d.ts +0 -120
  308. package/typings/languages/da.d.ts +0 -53
  309. package/typings/languages/de.d.ts +0 -26
  310. package/typings/languages/el.d.ts +0 -11
  311. package/typings/languages/en.d.ts +0 -30
  312. package/typings/languages/es.d.ts +0 -43
  313. package/typings/languages/fa.d.ts +0 -81
  314. package/typings/languages/fil.d.ts +0 -12
  315. package/typings/languages/fr-BE.d.ts +0 -41
  316. package/typings/languages/fr.d.ts +0 -43
  317. package/typings/languages/gu.d.ts +0 -12
  318. package/typings/languages/he.d.ts +0 -197
  319. package/typings/languages/hi.d.ts +0 -1
  320. package/typings/languages/hr.d.ts +0 -110
  321. package/typings/languages/hu.d.ts +0 -37
  322. package/typings/languages/id.d.ts +0 -69
  323. package/typings/languages/it.d.ts +0 -51
  324. package/typings/languages/ja.d.ts +0 -58
  325. package/typings/languages/kn.d.ts +0 -11
  326. package/typings/languages/ko.d.ts +0 -25
  327. package/typings/languages/lt.d.ts +0 -110
  328. package/typings/languages/lv.d.ts +0 -99
  329. package/typings/languages/mr.d.ts +0 -12
  330. package/typings/languages/ms.d.ts +0 -37
  331. package/typings/languages/nb.d.ts +0 -27
  332. package/typings/languages/nl.d.ts +0 -65
  333. package/typings/languages/pa-Guru.d.ts +0 -1
  334. package/typings/languages/pl.d.ts +0 -116
  335. package/typings/languages/pt.d.ts +0 -39
  336. package/typings/languages/ro.d.ts +0 -229
  337. package/typings/languages/ru.d.ts +0 -108
  338. package/typings/languages/sr-Latn.d.ts +0 -98
  339. package/typings/languages/sv.d.ts +0 -30
  340. package/typings/languages/sw.d.ts +0 -1
  341. package/typings/languages/ta.d.ts +0 -1
  342. package/typings/languages/te.d.ts +0 -1
  343. package/typings/languages/th.d.ts +0 -1
  344. package/typings/languages/tr.d.ts +0 -46
  345. package/typings/languages/uk.d.ts +0 -117
  346. package/typings/languages/ur.d.ts +0 -1
  347. package/typings/languages/vi.d.ts +0 -116
  348. package/typings/languages/zh-Hans.d.ts +0 -57
  349. package/typings/n2words.d.ts +0 -177
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Gujarati language converter.
3
+ *
4
+ * Supports:
5
+ * - Indian numbering system (હજાર, લાખ, કરોડ)
6
+ * - Gujarati script
7
+ * - Complete word forms for 0-99
8
+ */
9
+ export class Gujarati extends SouthAsianLanguage {
10
+ }
11
+ import { SouthAsianLanguage } from '../classes/south-asian-language.js';
@@ -1,30 +1,21 @@
1
- /**
2
- * Gujarati language implementation for n2words
3
- *
4
- * Gujarati uses Indian-style number grouping (3 digits, then 2-2 from right).
5
- * Numbers: શૂન્ય (0), એક (1), બે (2), ત્રણ (3), ચાર (4), પાંચ (5)...
6
- *
7
- * @module lib/languages/gu
8
- * @example
9
- * import gu from './lib/languages/gu.js'
10
- * gu(42) // 'બેતાળીસ'
11
- * gu(1000) // 'એક હજાર'
12
- */
13
-
14
- import SouthAsianLanguage from '../classes/south-asian-language.js'
1
+ import { SouthAsianLanguage } from '../classes/south-asian-language.js'
15
2
 
16
3
  /**
17
- * Gujarati language implementation
18
- * Extends SouthAsianLanguage for Indian-style grouping
4
+ * Gujarati language converter.
5
+ *
6
+ * Supports:
7
+ * - Indian numbering system (હજાર, લાખ, કરોડ)
8
+ * - Gujarati script
9
+ * - Complete word forms for 0-99
19
10
  */
20
- class GujaratiLanguage extends SouthAsianLanguage {
11
+ export class Gujarati extends SouthAsianLanguage {
21
12
  negativeWord = 'ઋણ'
22
13
  decimalSeparatorWord = 'દશાંશ'
23
14
  zeroWord = 'શૂન્ય'
24
15
  hundredWord = 'સો'
25
- convertDecimalsPerDigit = true
16
+ usePerDigitDecimals = true
26
17
 
27
- belowHundred = [
18
+ belowHundredWords = [
28
19
  'શૂન્ય',
29
20
  'એક',
30
21
  'બે',
@@ -139,18 +130,3 @@ class GujaratiLanguage extends SouthAsianLanguage {
139
130
  'શંખ'
140
131
  ]
141
132
  }
142
-
143
- /**
144
- * Convert a number to Gujarati words
145
- *
146
- * @param {number|string|bigint} value - The number to convert
147
- * @param {Object} [options={}] - Conversion options
148
- * @returns {string} The Gujarati word representation
149
- * @example
150
- * convertToWords(42) // 'બેતાળીસ'
151
- * convertToWords(1000) // 'એક હજાર'
152
- * convertToWords(100000) // 'એક લાખ'
153
- */
154
- export default function convertToWords (value, options = {}) {
155
- return new GujaratiLanguage(options).convertToWords(value)
156
- }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Biblical Hebrew language converter.
3
+ *
4
+ * Supports:
5
+ * - Three-form pluralization (one/few/many)
6
+ * - Gender agreement (masculine/feminine)
7
+ * - Optional "ו" (and) conjunction control
8
+ */
9
+ export class BiblicalHebrew 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
+ teensWords: {
23
+ 0: string;
24
+ 1: string;
25
+ 2: string;
26
+ 3: string;
27
+ 4: string;
28
+ 5: string;
29
+ 6: string;
30
+ 7: string;
31
+ 8: string;
32
+ 9: string;
33
+ };
34
+ twentiesWords: {
35
+ 2: string;
36
+ 3: string;
37
+ 4: string;
38
+ 5: string;
39
+ 6: string;
40
+ 7: string;
41
+ 8: string;
42
+ 9: string;
43
+ };
44
+ hundredsWords: {
45
+ 1: string;
46
+ 2: string;
47
+ 3: string;
48
+ };
49
+ pluralForms: {
50
+ 1: string;
51
+ 2: string;
52
+ 3: string;
53
+ 4: string;
54
+ 5: string;
55
+ 6: string;
56
+ 7: string;
57
+ 8: string;
58
+ 9: string;
59
+ };
60
+ femininePluralForms: {
61
+ 1: string;
62
+ 2: string;
63
+ 3: string;
64
+ 4: string;
65
+ 5: string;
66
+ 6: string;
67
+ 7: string;
68
+ 8: string;
69
+ 9: string;
70
+ };
71
+ scale: {
72
+ 1: string;
73
+ 2: string;
74
+ 3: string;
75
+ 4: string;
76
+ 5: string;
77
+ 6: string;
78
+ };
79
+ scalePlural: {
80
+ 1: string;
81
+ 2: string;
82
+ 3: string;
83
+ 4: string;
84
+ 5: string;
85
+ 6: string;
86
+ };
87
+ onesFeminineWords: {
88
+ 1: string;
89
+ 2: string;
90
+ 3: string;
91
+ 4: string;
92
+ 5: string;
93
+ 6: string;
94
+ 7: string;
95
+ 8: string;
96
+ 9: string;
97
+ };
98
+ teensFeminineWords: {
99
+ 0: string;
100
+ 1: string;
101
+ 2: string;
102
+ 3: string;
103
+ 4: string;
104
+ 5: string;
105
+ 6: string;
106
+ 7: string;
107
+ 8: string;
108
+ 9: string;
109
+ };
110
+ /** Converts integer part with Biblical Hebrew three-form pluralization. */
111
+ integerToWords(integerPart: any): string;
112
+ }
113
+ import { SlavicLanguage } from '../classes/slavic-language.js';
@@ -0,0 +1,251 @@
1
+ import { SlavicLanguage } from '../classes/slavic-language.js'
2
+
3
+ /**
4
+ * Biblical Hebrew language converter.
5
+ *
6
+ * Supports:
7
+ * - Three-form pluralization (one/few/many)
8
+ * - Gender agreement (masculine/feminine)
9
+ * - Optional "ו" (and) conjunction control
10
+ */
11
+ export class BiblicalHebrew extends SlavicLanguage {
12
+ negativeWord = 'מינוס'
13
+ decimalSeparatorWord = 'נקודה'
14
+ zeroWord = 'אפס'
15
+ usePerDigitDecimals = true
16
+
17
+ // Biblical Hebrew (masculine forms as default - historically accurate)
18
+ onesWords = {
19
+ 1: 'אחד',
20
+ 2: 'שניים',
21
+ 3: 'שלשה',
22
+ 4: 'ארבעה',
23
+ 5: 'חמשה',
24
+ 6: 'ששה',
25
+ 7: 'שבעה',
26
+ 8: 'שמונה',
27
+ 9: 'תשעה'
28
+ }
29
+
30
+ teensWords = {
31
+ 0: 'עשרה',
32
+ 1: 'אחד עשר',
33
+ 2: 'שנים עשר',
34
+ 3: 'שלשה עשר',
35
+ 4: 'ארבעה עשר',
36
+ 5: 'חמשה עשר',
37
+ 6: 'ששה עשר',
38
+ 7: 'שבעה עשר',
39
+ 8: 'שמונה עשר',
40
+ 9: 'תשעה עשר'
41
+ }
42
+
43
+ twentiesWords = {
44
+ 2: 'עשרים',
45
+ 3: 'שלשים',
46
+ 4: 'ארבעים',
47
+ 5: 'חמישים',
48
+ 6: 'ששים',
49
+ 7: 'שבעים',
50
+ 8: 'שמונים',
51
+ 9: 'תשעים'
52
+ }
53
+
54
+ hundredsWords = {
55
+ 1: 'מאה',
56
+ 2: 'מאתיים',
57
+ 3: 'מאות'
58
+ }
59
+
60
+ pluralForms = {
61
+ 1: 'אלף',
62
+ 2: 'אלפיים',
63
+ 3: 'שלשה אלפים',
64
+ 4: 'ארבעה אלפים',
65
+ 5: 'חמשה אלפים',
66
+ 6: 'ששה אלפים',
67
+ 7: 'שבעה אלפים',
68
+ 8: 'שמונה אלפים',
69
+ 9: 'תשעה אלפים'
70
+ }
71
+
72
+ // Feminine forms for thousands (when feminine=true is specified)
73
+ femininePluralForms = {
74
+ 1: 'אלף',
75
+ 2: 'אלפיים',
76
+ 3: 'שלשת אלפים',
77
+ 4: 'ארבעת אלפים',
78
+ 5: 'חמשת אלפים',
79
+ 6: 'ששת אלפים',
80
+ 7: 'שבעת אלפים',
81
+ 8: 'שמונת אלפים',
82
+ 9: 'תשעת אלפים'
83
+ }
84
+
85
+ scale = {
86
+ 1: 'אלף', // thousand (singular)
87
+ 2: 'מיליון', // million
88
+ 3: 'מיליארד', // billion
89
+ 4: 'טריליון', // trillion
90
+ 5: 'קוודרליון', // quadrillion
91
+ 6: 'קווינטיליון' // quintillion
92
+ }
93
+
94
+ scalePlural = {
95
+ 1: 'אלפים', // thousands
96
+ 2: 'מיליונים', // millions
97
+ 3: 'מיליארדים', // billions
98
+ 4: 'טריליונים', // trillions
99
+ 5: 'קוודרליונים', // quadrillions
100
+ 6: 'קווינטיליונים' // quintillions
101
+ }
102
+
103
+ // Feminine forms (for when gender='feminine' is specified)
104
+ onesFeminineWords = {
105
+ 1: 'אחת',
106
+ 2: 'שתים',
107
+ 3: 'שלש',
108
+ 4: 'ארבע',
109
+ 5: 'חמש',
110
+ 6: 'שש',
111
+ 7: 'שבע',
112
+ 8: 'שמונה',
113
+ 9: 'תשע'
114
+ }
115
+
116
+ teensFeminineWords = {
117
+ 0: 'עשר',
118
+ 1: 'אחת עשרה',
119
+ 2: 'שתים עשרה',
120
+ 3: 'שלש עשרה',
121
+ 4: 'ארבע עשרה',
122
+ 5: 'חמש עשרה',
123
+ 6: 'שש עשרה',
124
+ 7: 'שבע עשרה',
125
+ 8: 'שמונה עשרה',
126
+ 9: 'תשע עשרה'
127
+ }
128
+
129
+ constructor (options = {}) {
130
+ super(options)
131
+
132
+ this.setOptions({
133
+ andWord: 'ו',
134
+ gender: 'masculine'
135
+ }, options)
136
+
137
+ if (this.options.gender === 'feminine') {
138
+ this.onesWords = this.onesFeminineWords
139
+ this.teensWords = this.teensFeminineWords
140
+ this.pluralForms = this.femininePluralForms
141
+ }
142
+ }
143
+
144
+ /** Converts integer part with Biblical Hebrew three-form pluralization. */
145
+ integerToWords (integerPart) {
146
+ if (integerPart === 0n) {
147
+ return this.zeroWord
148
+ }
149
+ const words = []
150
+ const segments = this.splitToSegments(integerPart.toString(), 3)
151
+ let index = segments.length
152
+ for (const x of segments) {
153
+ index = index - 1
154
+ if (x === 0n) {
155
+ continue
156
+ }
157
+
158
+ const [n1, n2, n3] = this.extractDigits(x)
159
+
160
+ if (index > 0) {
161
+ // For thousands and above, handle the full chunk value
162
+ const chunkWords = []
163
+ let hasHundreds = false
164
+
165
+ // Process hundreds in this chunk
166
+ if (n3 > 0n) {
167
+ hasHundreds = true
168
+ if (n3 <= 2n) {
169
+ chunkWords.push(this.hundredsWords[n3])
170
+ } else {
171
+ chunkWords.push(this.onesWords[n3] + ' ' + this.hundredsWords[3])
172
+ }
173
+ }
174
+
175
+ // Process tens in this chunk
176
+ if (n2 > 1n) {
177
+ // Add conjunction if there were hundreds before
178
+ const tensWord = this.twentiesWords[n2]
179
+ chunkWords.push(hasHundreds ? this.options.andWord + tensWord : tensWord)
180
+ }
181
+
182
+ // Process ones in this chunk
183
+ if (n2 === 1n) {
184
+ // Add conjunction if there were hundreds before
185
+ const onesWord = this.teensWords[n1]
186
+ chunkWords.push(hasHundreds ? this.options.andWord + onesWord : onesWord)
187
+ } else if (n1 > 0n) {
188
+ // For "one million", "one billion", etc., don't add the word "one"
189
+ if (x === 1n && index > 1) {
190
+ // Skip adding "one" for millions/billions/etc.
191
+ } else if (x <= 9n && chunkWords.length === 0 && index === 1) {
192
+ // Use special forms for 1-9 thousand
193
+ chunkWords.push(this.pluralForms[n1])
194
+ } else {
195
+ const onesWord = this.onesWords[n1]
196
+ // Add conjunction if there were hundreds or tens before
197
+ chunkWords.push((hasHundreds || n2 > 0n) ? this.options.andWord + onesWord : onesWord)
198
+ }
199
+ }
200
+
201
+ // Add scale word (thousand, million, billion, etc.)
202
+ if (x > 9n || index > 1) {
203
+ // For numbers > 9 or higher scales, use appropriate scale word
204
+ if (x === 1n) {
205
+ // Singular form (e.g., "one thousand", "one million")
206
+ chunkWords.push(this.scale[index])
207
+ } else if (x === 2n && index === 1) {
208
+ // Special dual form for "two thousand" (already in thousands[2])
209
+ return [this.pluralForms[2], ...words].join(' ')
210
+ } else if (x === 2n) {
211
+ // For two million, two billion, etc. - use plural form
212
+ chunkWords.push(this.scalePlural[index])
213
+ } else if (index === 1) {
214
+ // For thousands (10+), always use singular "אלף"
215
+ chunkWords.push(this.scale[index])
216
+ } else {
217
+ // For millions/billions/etc. use plural form
218
+ chunkWords.push(this.scalePlural[index])
219
+ }
220
+ }
221
+
222
+ words.push(chunkWords.join(' '))
223
+ continue
224
+ }
225
+
226
+ if (n3 > 0n) {
227
+ if (n3 <= 2n) {
228
+ words.push(this.hundredsWords[n3])
229
+ } else {
230
+ words.push(this.onesWords[n3] + ' ' + this.hundredsWords[3])
231
+ }
232
+ }
233
+
234
+ if (n2 > 1n) {
235
+ words.push(this.twentiesWords[n2])
236
+ }
237
+
238
+ if (n2 === 1n) {
239
+ words.push(this.teensWords[n1])
240
+ } else if (n1 > 0n) {
241
+ words.push(this.onesWords[n1])
242
+ }
243
+ }
244
+
245
+ if (words.length > 1) {
246
+ words[words.length - 1] = this.options.andWord + words.at(-1)
247
+ }
248
+
249
+ return words.join(' ')
250
+ }
251
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Modern Hebrew language converter.
3
+ *
4
+ * Supports:
5
+ * - Right-to-left text orientation
6
+ * - Feminine grammatical forms (default in Modern Hebrew)
7
+ * - Three-form pluralization (singular/few/many)
8
+ * - Optional "ve" (ו) conjunction via options
9
+ */
10
+ export class Hebrew extends SlavicLanguage {
11
+ constructor(options?: {});
12
+ onesWords: {
13
+ 1: string;
14
+ 2: string;
15
+ 3: string;
16
+ 4: string;
17
+ 5: string;
18
+ 6: string;
19
+ 7: string;
20
+ 8: string;
21
+ 9: string;
22
+ };
23
+ teensWords: {
24
+ 0: string;
25
+ 1: string;
26
+ 2: string;
27
+ 3: string;
28
+ 4: string;
29
+ 5: string;
30
+ 6: string;
31
+ 7: string;
32
+ 8: string;
33
+ 9: string;
34
+ };
35
+ twentiesWords: {
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
+ hundredsWords: {
46
+ 1: string;
47
+ 2: string;
48
+ 3: string;
49
+ };
50
+ pluralForms: {
51
+ 1: string;
52
+ 2: string;
53
+ 3: string;
54
+ 4: string;
55
+ 5: string;
56
+ 6: string;
57
+ 7: string;
58
+ 8: string;
59
+ 9: string;
60
+ };
61
+ scale: {
62
+ 1: string;
63
+ 2: string;
64
+ 3: string;
65
+ 4: string;
66
+ 5: string;
67
+ 6: string;
68
+ };
69
+ scalePlural: {
70
+ 1: string;
71
+ 2: string;
72
+ 3: string;
73
+ 4: string;
74
+ 5: string;
75
+ 6: string;
76
+ };
77
+ /** Converts integer part to Hebrew words with special handling for thousands. */
78
+ integerToWords(integerPart: any): string;
79
+ }
80
+ import { SlavicLanguage } from '../classes/slavic-language.js';