n2words 3.0.0 → 4.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.
- package/CHANGELOG.md +59 -0
- package/LICENSE +1 -1
- package/README.md +64 -184
- package/dist/am-ET.js +2 -0
- package/dist/am-ET.umd.js +2 -0
- package/dist/am-Latn-ET.js +2 -0
- package/dist/am-Latn-ET.umd.js +2 -0
- package/dist/ar-SA.js +2 -0
- package/dist/ar-SA.umd.js +2 -0
- package/dist/az-AZ.js +2 -0
- package/dist/az-AZ.umd.js +2 -0
- package/dist/bn-BD.js +2 -0
- package/dist/bn-BD.umd.js +2 -0
- package/dist/cs-CZ.js +2 -0
- package/dist/cs-CZ.umd.js +2 -0
- package/dist/da-DK.js +2 -0
- package/dist/da-DK.umd.js +2 -0
- package/dist/de-DE.js +2 -0
- package/dist/de-DE.umd.js +2 -0
- package/dist/el-GR.js +2 -0
- package/dist/el-GR.umd.js +2 -0
- package/dist/en-AU.js +2 -0
- package/dist/en-AU.umd.js +2 -0
- package/dist/en-BD.js +2 -0
- package/dist/en-BD.umd.js +2 -0
- package/dist/en-CA.js +2 -0
- package/dist/en-CA.umd.js +2 -0
- package/dist/en-GB.js +2 -0
- package/dist/en-GB.umd.js +2 -0
- package/dist/en-GH.js +2 -0
- package/dist/en-GH.umd.js +2 -0
- package/dist/en-IE.js +2 -0
- package/dist/en-IE.umd.js +2 -0
- package/dist/en-IN.js +2 -0
- package/dist/en-IN.umd.js +2 -0
- package/dist/en-KE.js +2 -0
- package/dist/en-KE.umd.js +2 -0
- package/dist/en-MY.js +2 -0
- package/dist/en-MY.umd.js +2 -0
- package/dist/en-NG.js +2 -0
- package/dist/en-NG.umd.js +2 -0
- package/dist/en-NZ.js +2 -0
- package/dist/en-NZ.umd.js +2 -0
- package/dist/en-PH.js +2 -0
- package/dist/en-PH.umd.js +2 -0
- package/dist/en-PK.js +2 -0
- package/dist/en-PK.umd.js +2 -0
- package/dist/en-SG.js +2 -0
- package/dist/en-SG.umd.js +2 -0
- package/dist/en-US.js +2 -0
- package/dist/en-US.umd.js +2 -0
- package/dist/en-ZA.js +2 -0
- package/dist/en-ZA.umd.js +2 -0
- package/dist/es-ES.js +2 -0
- package/dist/es-ES.umd.js +2 -0
- package/dist/es-MX.js +2 -0
- package/dist/es-MX.umd.js +2 -0
- package/dist/es-US.js +2 -0
- package/dist/es-US.umd.js +2 -0
- package/dist/fa-IR.js +2 -0
- package/dist/fa-IR.umd.js +2 -0
- package/dist/fi-FI.js +2 -0
- package/dist/fi-FI.umd.js +2 -0
- package/dist/fil-PH.js +2 -0
- package/dist/fil-PH.umd.js +2 -0
- package/dist/fr-BE.js +2 -0
- package/dist/fr-BE.umd.js +2 -0
- package/dist/fr-FR.js +2 -0
- package/dist/fr-FR.umd.js +2 -0
- package/dist/gu-IN.js +2 -0
- package/dist/gu-IN.umd.js +2 -0
- package/dist/ha-NG.js +2 -0
- package/dist/ha-NG.umd.js +2 -0
- package/dist/hbo-IL.js +2 -0
- package/dist/hbo-IL.umd.js +2 -0
- package/dist/he-IL.js +2 -0
- package/dist/he-IL.umd.js +2 -0
- package/dist/hi-IN.js +2 -0
- package/dist/hi-IN.umd.js +2 -0
- package/dist/hr-HR.js +2 -0
- package/dist/hr-HR.umd.js +2 -0
- package/dist/hu-HU.js +2 -0
- package/dist/hu-HU.umd.js +2 -0
- package/dist/id-ID.js +2 -0
- package/dist/id-ID.umd.js +2 -0
- package/dist/it-IT.js +2 -0
- package/dist/it-IT.umd.js +2 -0
- package/dist/ja-JP.js +2 -0
- package/dist/ja-JP.umd.js +2 -0
- package/dist/ka-GE.js +2 -0
- package/dist/ka-GE.umd.js +2 -0
- package/dist/kn-IN.js +2 -0
- package/dist/kn-IN.umd.js +2 -0
- package/dist/ko-KR.js +2 -0
- package/dist/ko-KR.umd.js +2 -0
- package/dist/lt-LT.js +2 -0
- package/dist/lt-LT.umd.js +2 -0
- package/dist/lv-LV.js +2 -0
- package/dist/lv-LV.umd.js +2 -0
- package/dist/mr-IN.js +2 -0
- package/dist/mr-IN.umd.js +2 -0
- package/dist/ms-MY.js +2 -0
- package/dist/ms-MY.umd.js +2 -0
- package/dist/nb-NO.js +2 -0
- package/dist/nb-NO.umd.js +2 -0
- package/dist/nl-NL.js +2 -0
- package/dist/nl-NL.umd.js +2 -0
- package/dist/pa-IN.js +2 -0
- package/dist/pa-IN.umd.js +2 -0
- package/dist/pl-PL.js +2 -0
- package/dist/pl-PL.umd.js +2 -0
- package/dist/pt-PT.js +2 -0
- package/dist/pt-PT.umd.js +2 -0
- package/dist/ro-RO.js +2 -0
- package/dist/ro-RO.umd.js +2 -0
- package/dist/ru-RU.js +2 -0
- package/dist/ru-RU.umd.js +2 -0
- package/dist/sr-Cyrl-RS.js +2 -0
- package/dist/sr-Cyrl-RS.umd.js +2 -0
- package/dist/sr-Latn-RS.js +2 -0
- package/dist/sr-Latn-RS.umd.js +2 -0
- package/dist/sv-SE.js +2 -0
- package/dist/sv-SE.umd.js +2 -0
- package/dist/sw-KE.js +2 -0
- package/dist/sw-KE.umd.js +2 -0
- package/dist/ta-IN.js +2 -0
- package/dist/ta-IN.umd.js +2 -0
- package/dist/te-IN.js +2 -0
- package/dist/te-IN.umd.js +2 -0
- package/dist/th-TH.js +2 -0
- package/dist/th-TH.umd.js +2 -0
- package/dist/tr-TR.js +2 -0
- package/dist/tr-TR.umd.js +2 -0
- package/dist/uk-UA.js +2 -0
- package/dist/uk-UA.umd.js +2 -0
- package/dist/ur-PK.js +2 -0
- package/dist/ur-PK.umd.js +2 -0
- package/dist/vi-VN.js +2 -0
- package/dist/vi-VN.umd.js +2 -0
- package/dist/yo-NG.js +2 -0
- package/dist/yo-NG.umd.js +2 -0
- package/dist/zh-Hans-CN.js +2 -0
- package/dist/zh-Hans-CN.umd.js +2 -0
- package/dist/zh-Hant-TW.js +2 -0
- package/dist/zh-Hant-TW.umd.js +2 -0
- package/package.json +47 -82
- package/src/am-ET.d.ts +40 -0
- package/src/am-ET.js +269 -0
- package/src/am-Latn-ET.d.ts +35 -0
- package/src/am-Latn-ET.js +264 -0
- package/src/ar-SA.d.ts +49 -0
- package/{lib/languages/ar.js → src/ar-SA.js} +177 -15
- package/src/az-AZ.d.ts +37 -0
- package/src/az-AZ.js +312 -0
- package/src/bn-BD.d.ts +36 -0
- package/src/bn-BD.js +270 -0
- package/src/cs-CZ.d.ts +49 -0
- package/{lib/languages/cs.js → src/cs-CZ.js} +249 -40
- package/src/da-DK.d.ts +44 -0
- package/{lib/languages/da.js → src/da-DK.js} +136 -23
- package/src/de-DE.d.ts +57 -0
- package/src/de-DE.js +603 -0
- package/src/el-GR.d.ts +40 -0
- package/src/el-GR.js +418 -0
- package/src/en-AU.d.ts +47 -0
- package/src/en-AU.js +423 -0
- package/src/en-BD.d.ts +49 -0
- package/src/en-BD.js +415 -0
- package/src/en-CA.d.ts +63 -0
- package/src/en-CA.js +518 -0
- package/src/en-GB.d.ts +56 -0
- package/src/en-GB.js +469 -0
- package/src/en-GH.d.ts +11 -0
- package/src/en-GH.js +345 -0
- package/src/en-IE.d.ts +56 -0
- package/src/en-IE.js +479 -0
- package/src/en-IN.d.ts +49 -0
- package/src/en-IN.js +415 -0
- package/src/en-KE.d.ts +11 -0
- package/src/en-KE.js +345 -0
- package/src/en-MY.d.ts +11 -0
- package/src/en-MY.js +347 -0
- package/src/en-NG.d.ts +56 -0
- package/src/en-NG.js +479 -0
- package/src/en-NZ.d.ts +11 -0
- package/src/en-NZ.js +375 -0
- package/src/en-PH.d.ts +11 -0
- package/src/en-PH.js +345 -0
- package/src/en-PK.d.ts +49 -0
- package/src/en-PK.js +415 -0
- package/src/en-SG.d.ts +11 -0
- package/src/en-SG.js +345 -0
- package/src/en-US.d.ts +63 -0
- package/src/en-US.js +516 -0
- package/src/en-ZA.d.ts +56 -0
- package/src/en-ZA.js +478 -0
- package/src/es-ES.d.ts +65 -0
- package/src/es-ES.js +541 -0
- package/src/es-MX.d.ts +58 -0
- package/{lib/languages/es.js → src/es-MX.js} +237 -47
- package/src/es-US.d.ts +58 -0
- package/src/es-US.js +446 -0
- package/src/fa-IR.d.ts +38 -0
- package/src/fa-IR.js +246 -0
- package/src/fi-FI.d.ts +46 -0
- package/src/fi-FI.js +379 -0
- package/src/fil-PH.d.ts +37 -0
- package/{lib/languages/fil.js → src/fil-PH.js} +149 -24
- package/src/fr-BE.d.ts +49 -0
- package/src/fr-BE.js +453 -0
- package/src/fr-FR.d.ts +63 -0
- package/{lib/languages/fr.js → src/fr-FR.js} +200 -47
- package/src/gu-IN.d.ts +35 -0
- package/src/gu-IN.js +259 -0
- package/src/ha-NG.d.ts +37 -0
- package/{lib/languages/ha.js → src/ha-NG.js} +110 -16
- package/src/hbo-IL.d.ts +39 -0
- package/{lib/languages/hbo.js → src/hbo-IL.js} +217 -43
- package/src/he-IL.d.ts +37 -0
- package/src/he-IL.js +537 -0
- package/src/hi-IN.d.ts +36 -0
- package/src/hi-IN.js +280 -0
- package/src/hr-HR.d.ts +42 -0
- package/src/hr-HR.js +463 -0
- package/src/hu-HU.d.ts +38 -0
- package/{lib/languages/hu.js → src/hu-HU.js} +164 -6
- package/src/id-ID.d.ts +38 -0
- package/{lib/languages/id.js → src/id-ID.js} +106 -20
- package/src/it-IT.d.ts +59 -0
- package/src/it-IT.js +506 -0
- package/src/ja-JP.d.ts +49 -0
- package/{lib/languages/ja.js → src/ja-JP.js} +119 -32
- package/src/ka-GE.d.ts +44 -0
- package/src/ka-GE.js +393 -0
- package/src/kn-IN.d.ts +35 -0
- package/{lib/languages/kn.js → src/kn-IN.js} +156 -34
- package/src/ko-KR.d.ts +45 -0
- package/{lib/languages/ko.js → src/ko-KR.js} +99 -24
- package/src/lt-LT.d.ts +49 -0
- package/src/lt-LT.js +543 -0
- package/src/lv-LV.d.ts +49 -0
- package/src/lv-LV.js +595 -0
- package/src/mr-IN.d.ts +36 -0
- package/src/mr-IN.js +260 -0
- package/src/ms-MY.d.ts +37 -0
- package/{lib/languages/ms.js → src/ms-MY.js} +118 -20
- package/src/nb-NO.d.ts +44 -0
- package/{lib/languages/nb.js → src/nb-NO.js} +165 -33
- package/src/nl-NL.d.ts +54 -0
- package/{lib/languages/nl.js → src/nl-NL.js} +271 -47
- package/src/pa-IN.d.ts +36 -0
- package/src/pa-IN.js +268 -0
- package/src/pl-PL.d.ts +55 -0
- package/src/pl-PL.js +585 -0
- package/src/pt-PT.d.ts +45 -0
- package/src/pt-PT.js +514 -0
- package/src/ro-RO.d.ts +44 -0
- package/{lib/languages/ro.js → src/ro-RO.js} +212 -18
- package/src/ru-RU.d.ts +50 -0
- package/src/ru-RU.js +535 -0
- package/src/sr-Cyrl-RS.d.ts +49 -0
- package/src/sr-Cyrl-RS.js +503 -0
- package/src/sr-Latn-RS.d.ts +49 -0
- package/src/sr-Latn-RS.js +503 -0
- package/src/sv-SE.d.ts +44 -0
- package/{lib/languages/sv.js → src/sv-SE.js} +149 -34
- package/src/sw-KE.d.ts +37 -0
- package/{lib/languages/sw.js → src/sw-KE.js} +117 -6
- package/src/ta-IN.d.ts +35 -0
- package/{lib/languages/ta.js → src/ta-IN.js} +163 -47
- package/src/te-IN.d.ts +35 -0
- package/{lib/languages/te.js → src/te-IN.js} +147 -46
- package/src/th-TH.d.ts +38 -0
- package/{lib/languages/th.js → src/th-TH.js} +99 -6
- package/src/tr-TR.d.ts +48 -0
- package/src/tr-TR.js +397 -0
- package/src/uk-UA.d.ts +42 -0
- package/src/uk-UA.js +463 -0
- package/src/ur-PK.d.ts +36 -0
- package/src/ur-PK.js +268 -0
- package/src/utils/expand-scientific.d.ts +32 -0
- package/src/utils/expand-scientific.js +65 -0
- package/src/utils/parse-cardinal.d.ts +14 -0
- package/{lib/utils/parse-numeric.js → src/utils/parse-cardinal.js} +14 -44
- package/src/utils/parse-currency.d.ts +14 -0
- package/src/utils/parse-currency.js +91 -0
- package/src/utils/parse-ordinal.d.ts +10 -0
- package/src/utils/parse-ordinal.js +103 -0
- package/src/vi-VN.d.ts +48 -0
- package/{lib/languages/vi.js → src/vi-VN.js} +124 -53
- package/src/yo-NG.d.ts +37 -0
- package/src/yo-NG.js +403 -0
- package/src/zh-Hans-CN.d.ts +48 -0
- package/{lib/languages/zh-Hans.js → src/zh-Hans-CN.js} +140 -8
- package/src/zh-Hant-TW.d.ts +50 -0
- package/{lib/languages/zh-Hant.js → src/zh-Hant-TW.js} +139 -8
- package/dist/languages/am-Latn.js +0 -3
- package/dist/languages/am-Latn.js.map +0 -1
- package/dist/languages/am.js +0 -3
- package/dist/languages/am.js.map +0 -1
- package/dist/languages/ar.js +0 -3
- package/dist/languages/ar.js.map +0 -1
- package/dist/languages/az.js +0 -3
- package/dist/languages/az.js.map +0 -1
- package/dist/languages/bn.js +0 -3
- package/dist/languages/bn.js.map +0 -1
- package/dist/languages/cs.js +0 -3
- package/dist/languages/cs.js.map +0 -1
- package/dist/languages/da.js +0 -3
- package/dist/languages/da.js.map +0 -1
- package/dist/languages/de.js +0 -3
- package/dist/languages/de.js.map +0 -1
- package/dist/languages/el.js +0 -3
- package/dist/languages/el.js.map +0 -1
- package/dist/languages/en.js +0 -3
- package/dist/languages/en.js.map +0 -1
- package/dist/languages/es.js +0 -3
- package/dist/languages/es.js.map +0 -1
- package/dist/languages/fa.js +0 -3
- package/dist/languages/fa.js.map +0 -1
- package/dist/languages/fi.js +0 -3
- package/dist/languages/fi.js.map +0 -1
- package/dist/languages/fil.js +0 -3
- package/dist/languages/fil.js.map +0 -1
- package/dist/languages/fr-BE.js +0 -3
- package/dist/languages/fr-BE.js.map +0 -1
- package/dist/languages/fr.js +0 -3
- package/dist/languages/fr.js.map +0 -1
- package/dist/languages/gu.js +0 -3
- package/dist/languages/gu.js.map +0 -1
- package/dist/languages/ha.js +0 -3
- package/dist/languages/ha.js.map +0 -1
- package/dist/languages/hbo.js +0 -3
- package/dist/languages/hbo.js.map +0 -1
- package/dist/languages/he.js +0 -3
- package/dist/languages/he.js.map +0 -1
- package/dist/languages/hi.js +0 -3
- package/dist/languages/hi.js.map +0 -1
- package/dist/languages/hr.js +0 -3
- package/dist/languages/hr.js.map +0 -1
- package/dist/languages/hu.js +0 -3
- package/dist/languages/hu.js.map +0 -1
- package/dist/languages/id.js +0 -3
- package/dist/languages/id.js.map +0 -1
- package/dist/languages/it.js +0 -3
- package/dist/languages/it.js.map +0 -1
- package/dist/languages/ja.js +0 -3
- package/dist/languages/ja.js.map +0 -1
- package/dist/languages/kn.js +0 -3
- package/dist/languages/kn.js.map +0 -1
- package/dist/languages/ko.js +0 -3
- package/dist/languages/ko.js.map +0 -1
- package/dist/languages/lt.js +0 -3
- package/dist/languages/lt.js.map +0 -1
- package/dist/languages/lv.js +0 -3
- package/dist/languages/lv.js.map +0 -1
- package/dist/languages/mr.js +0 -3
- package/dist/languages/mr.js.map +0 -1
- package/dist/languages/ms.js +0 -3
- package/dist/languages/ms.js.map +0 -1
- package/dist/languages/nb.js +0 -3
- package/dist/languages/nb.js.map +0 -1
- package/dist/languages/nl.js +0 -3
- package/dist/languages/nl.js.map +0 -1
- package/dist/languages/pa.js +0 -3
- package/dist/languages/pa.js.map +0 -1
- package/dist/languages/pl.js +0 -3
- package/dist/languages/pl.js.map +0 -1
- package/dist/languages/pt.js +0 -3
- package/dist/languages/pt.js.map +0 -1
- package/dist/languages/ro.js +0 -3
- package/dist/languages/ro.js.map +0 -1
- package/dist/languages/ru.js +0 -3
- package/dist/languages/ru.js.map +0 -1
- package/dist/languages/sr-Cyrl.js +0 -3
- package/dist/languages/sr-Cyrl.js.map +0 -1
- package/dist/languages/sr-Latn.js +0 -3
- package/dist/languages/sr-Latn.js.map +0 -1
- package/dist/languages/sv.js +0 -3
- package/dist/languages/sv.js.map +0 -1
- package/dist/languages/sw.js +0 -3
- package/dist/languages/sw.js.map +0 -1
- package/dist/languages/ta.js +0 -3
- package/dist/languages/ta.js.map +0 -1
- package/dist/languages/te.js +0 -3
- package/dist/languages/te.js.map +0 -1
- package/dist/languages/th.js +0 -3
- package/dist/languages/th.js.map +0 -1
- package/dist/languages/tr.js +0 -3
- package/dist/languages/tr.js.map +0 -1
- package/dist/languages/uk.js +0 -3
- package/dist/languages/uk.js.map +0 -1
- package/dist/languages/ur.js +0 -3
- package/dist/languages/ur.js.map +0 -1
- package/dist/languages/vi.js +0 -3
- package/dist/languages/vi.js.map +0 -1
- package/dist/languages/zh-Hans.js +0 -3
- package/dist/languages/zh-Hans.js.map +0 -1
- package/dist/languages/zh-Hant.js +0 -3
- package/dist/languages/zh-Hant.js.map +0 -1
- package/dist/n2words.js +0 -3
- package/dist/n2words.js.map +0 -1
- package/lib/languages/am-Latn.d.ts +0 -7
- package/lib/languages/am-Latn.js +0 -164
- package/lib/languages/am.d.ts +0 -7
- package/lib/languages/am.js +0 -164
- package/lib/languages/ar.d.ts +0 -17
- package/lib/languages/az.d.ts +0 -7
- package/lib/languages/az.js +0 -176
- package/lib/languages/bn.d.ts +0 -7
- package/lib/languages/bn.js +0 -145
- package/lib/languages/cs.d.ts +0 -18
- package/lib/languages/da.d.ts +0 -14
- package/lib/languages/de.d.ts +0 -17
- package/lib/languages/de.js +0 -332
- package/lib/languages/el.d.ts +0 -14
- package/lib/languages/el.js +0 -243
- package/lib/languages/en.d.ts +0 -17
- package/lib/languages/en.js +0 -256
- package/lib/languages/es.d.ts +0 -21
- package/lib/languages/fa.d.ts +0 -7
- package/lib/languages/fa.js +0 -134
- package/lib/languages/fi.d.ts +0 -14
- package/lib/languages/fi.js +0 -245
- package/lib/languages/fil.d.ts +0 -7
- package/lib/languages/fr-BE.d.ts +0 -11
- package/lib/languages/fr-BE.js +0 -300
- package/lib/languages/fr.d.ts +0 -21
- package/lib/languages/gu.d.ts +0 -7
- package/lib/languages/gu.js +0 -137
- package/lib/languages/ha.d.ts +0 -7
- package/lib/languages/hbo.d.ts +0 -13
- package/lib/languages/he.d.ts +0 -13
- package/lib/languages/he.js +0 -276
- package/lib/languages/hi.d.ts +0 -7
- package/lib/languages/hi.js +0 -145
- package/lib/languages/hr.d.ts +0 -11
- package/lib/languages/hr.js +0 -218
- package/lib/languages/hu.d.ts +0 -7
- package/lib/languages/id.d.ts +0 -7
- package/lib/languages/it.d.ts +0 -19
- package/lib/languages/it.js +0 -377
- package/lib/languages/ja.d.ts +0 -17
- package/lib/languages/kn.d.ts +0 -7
- package/lib/languages/ko.d.ts +0 -14
- package/lib/languages/lt.d.ts +0 -18
- package/lib/languages/lt.js +0 -310
- package/lib/languages/lv.d.ts +0 -18
- package/lib/languages/lv.js +0 -321
- package/lib/languages/mr.d.ts +0 -7
- package/lib/languages/mr.js +0 -137
- package/lib/languages/ms.d.ts +0 -7
- package/lib/languages/nb.d.ts +0 -14
- package/lib/languages/nl.d.ts +0 -26
- package/lib/languages/pa.d.ts +0 -7
- package/lib/languages/pa.js +0 -163
- package/lib/languages/pl.d.ts +0 -22
- package/lib/languages/pl.js +0 -330
- package/lib/languages/pt.d.ts +0 -17
- package/lib/languages/pt.js +0 -306
- package/lib/languages/ro.d.ts +0 -18
- package/lib/languages/ru.d.ts +0 -11
- package/lib/languages/ru.js +0 -240
- package/lib/languages/sr-Cyrl.d.ts +0 -11
- package/lib/languages/sr-Cyrl.js +0 -215
- package/lib/languages/sr-Latn.d.ts +0 -11
- package/lib/languages/sr-Latn.js +0 -215
- package/lib/languages/sv.d.ts +0 -14
- package/lib/languages/sw.d.ts +0 -7
- package/lib/languages/ta.d.ts +0 -7
- package/lib/languages/te.d.ts +0 -7
- package/lib/languages/th.d.ts +0 -7
- package/lib/languages/tr.d.ts +0 -18
- package/lib/languages/tr.js +0 -263
- package/lib/languages/uk.d.ts +0 -11
- package/lib/languages/uk.js +0 -218
- package/lib/languages/ur.d.ts +0 -7
- package/lib/languages/ur.js +0 -163
- package/lib/languages/vi.d.ts +0 -17
- package/lib/languages/zh-Hans.d.ts +0 -11
- package/lib/languages/zh-Hant.d.ts +0 -11
- package/lib/n2words.d.ts +0 -53
- package/lib/n2words.js +0 -122
- package/lib/utils/parse-numeric.d.ts +0 -17
- /package/{lib → src}/utils/is-plain-object.d.ts +0 -0
- /package/{lib → src}/utils/is-plain-object.js +0 -0
- /package/{lib → src}/utils/validate-options.d.ts +0 -0
- /package/{lib → src}/utils/validate-options.js +0 -0
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tamil language converter
|
|
2
|
+
* Tamil (India) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: ta-IN | Tamil as used in India
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Indian numbering system (ஆயிரம், லட்சம், கோடி)
|
|
8
8
|
* - Tamil script
|
|
9
9
|
* - 3-2-2 grouping pattern
|
|
10
10
|
* - Complete word forms for 0-99
|
|
11
|
-
* - Special hundred word transformations
|
|
11
|
+
* - Special hundred word transformations (connected vs standalone)
|
|
12
12
|
* - Per-digit decimal reading
|
|
13
|
+
* - BigInt modulo for efficient segment extraction
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
|
-
import {
|
|
16
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
17
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
18
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
16
19
|
|
|
17
20
|
// ============================================================================
|
|
18
21
|
// Vocabulary
|
|
@@ -22,6 +25,26 @@ const ZERO = 'பூஜ்ஜியம்'
|
|
|
22
25
|
const NEGATIVE = 'மைனஸ்'
|
|
23
26
|
const DECIMAL_SEP = 'புள்ளி'
|
|
24
27
|
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Ordinal Vocabulary
|
|
30
|
+
// ============================================================================
|
|
31
|
+
|
|
32
|
+
// Ordinal suffix
|
|
33
|
+
const ORDINAL_SUFFIX = 'ஆவது'
|
|
34
|
+
|
|
35
|
+
// Special ordinals for first few numbers
|
|
36
|
+
const ORDINAL_SPECIAL = ['', 'முதல்', 'இரண்டாவது', 'மூன்றாவது', 'நான்காவது', 'ஐந்தாவது', 'ஆறாவது']
|
|
37
|
+
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Currency Vocabulary (Indian Rupee)
|
|
40
|
+
// ============================================================================
|
|
41
|
+
|
|
42
|
+
// Rupee (singular/plural same in Tamil)
|
|
43
|
+
const RUPEE = 'ரூபாய்'
|
|
44
|
+
|
|
45
|
+
// Paisa (singular/plural same in Tamil)
|
|
46
|
+
const PAISA = 'பைசா'
|
|
47
|
+
|
|
25
48
|
const BELOW_HUNDRED = [
|
|
26
49
|
'பூஜ்ஜியம்', 'ஒன்று', 'இரண்டு', 'மூன்று', 'நான்கு', 'ஐந்து', 'ஆறு', 'ஏழு', 'எட்டு', 'ஒன்பது',
|
|
27
50
|
'பத்து', 'பதினொன்று', 'பன்னிரண்டு', 'பதிமூன்று', 'பதினான்கு', 'பதினைந்து', 'பதினாறு', 'பதினேழு', 'பதினெட்டு', 'பத்தொன்பது',
|
|
@@ -48,35 +71,16 @@ const ONES = ['ஒன்று', 'இரண்டு', 'மூன்று', '
|
|
|
48
71
|
const SCALE_WORDS = ['', 'ஆயிரம்', 'லட்சம்', 'கோடி', 'அரபு', 'கராபு', 'நீல்', 'பத்ம', 'சங்கு']
|
|
49
72
|
|
|
50
73
|
// ============================================================================
|
|
51
|
-
// Segment
|
|
52
|
-
// ============================================================================
|
|
53
|
-
|
|
54
|
-
function groupByThreeThenTwos (n) {
|
|
55
|
-
const numStr = n.toString()
|
|
56
|
-
|
|
57
|
-
if (numStr.length <= 3) {
|
|
58
|
-
return [Number(numStr)]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const segments = []
|
|
62
|
-
const last3 = numStr.slice(-3)
|
|
63
|
-
segments.unshift(Number(last3))
|
|
64
|
-
|
|
65
|
-
let remaining = numStr.slice(0, -3)
|
|
66
|
-
while (remaining.length > 0) {
|
|
67
|
-
const segment = remaining.slice(-2)
|
|
68
|
-
segments.unshift(Number(segment))
|
|
69
|
-
remaining = remaining.slice(0, -2)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return segments
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// ============================================================================
|
|
76
|
-
// Conversion Functions
|
|
74
|
+
// Segment Building
|
|
77
75
|
// ============================================================================
|
|
78
76
|
|
|
79
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Builds words for a 0-999 segment.
|
|
79
|
+
*
|
|
80
|
+
* @param {number} n - Number 0-999
|
|
81
|
+
* @returns {string} Tamil words for the segment
|
|
82
|
+
*/
|
|
83
|
+
function buildSegment (n) {
|
|
80
84
|
if (n === 0) return ''
|
|
81
85
|
if (n < 100) return BELOW_HUNDRED[n]
|
|
82
86
|
|
|
@@ -87,30 +91,61 @@ function convertBelowThousand (n) {
|
|
|
87
91
|
return HUNDREDS[hundreds]
|
|
88
92
|
}
|
|
89
93
|
|
|
90
|
-
// Use
|
|
94
|
+
// Use connected form when followed by remainder
|
|
91
95
|
return HUNDREDS_CONNECTED[hundreds] + ' ' + BELOW_HUNDRED[remainder]
|
|
92
96
|
}
|
|
93
97
|
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Conversion Functions
|
|
100
|
+
// ============================================================================
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Converts a non-negative integer to Tamil words.
|
|
104
|
+
*
|
|
105
|
+
* Uses BigInt modulo for segment extraction (faster than string slicing).
|
|
106
|
+
* South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
|
|
107
|
+
*
|
|
108
|
+
* @param {bigint} n - Non-negative integer to convert
|
|
109
|
+
* @returns {string} Tamil words
|
|
110
|
+
*/
|
|
94
111
|
function integerToWords (n) {
|
|
95
112
|
if (n === 0n) return ZERO
|
|
96
113
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
114
|
+
// Fast path: numbers < 1000
|
|
115
|
+
if (n < 1000n) {
|
|
116
|
+
return buildSegment(Number(n))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Extract segments using BigInt modulo
|
|
120
|
+
const segments = []
|
|
121
|
+
segments.push(Number(n % 1000n))
|
|
122
|
+
let temp = n / 1000n
|
|
123
|
+
|
|
124
|
+
while (temp > 0n) {
|
|
125
|
+
segments.push(Number(temp % 100n))
|
|
126
|
+
temp = temp / 100n
|
|
127
|
+
}
|
|
100
128
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
129
|
+
// Build result string (process from most-significant to least)
|
|
130
|
+
const words = []
|
|
131
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
132
|
+
const segment = segments[i]
|
|
133
|
+
if (segment === 0) continue
|
|
134
|
+
|
|
135
|
+
if (i === 0) {
|
|
136
|
+
words.push(buildSegment(segment))
|
|
137
|
+
} else {
|
|
138
|
+
// Use 'ஒரு' for 1 at scale positions
|
|
139
|
+
const groupWords = (segment === 1) ? 'ஒரு' : BELOW_HUNDRED[segment]
|
|
140
|
+
words.push(groupWords)
|
|
141
|
+
}
|
|
104
142
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
words.push(groupWords)
|
|
108
|
-
if (scaleIndex > 0 && SCALE_WORDS[scaleIndex]) {
|
|
109
|
-
words.push(SCALE_WORDS[scaleIndex])
|
|
143
|
+
if (i > 0 && SCALE_WORDS[i]) {
|
|
144
|
+
words.push(SCALE_WORDS[i])
|
|
110
145
|
}
|
|
111
146
|
}
|
|
112
147
|
|
|
113
|
-
return words.join(' ')
|
|
148
|
+
return words.join(' ')
|
|
114
149
|
}
|
|
115
150
|
|
|
116
151
|
function decimalPartToWords (decimalPart) {
|
|
@@ -129,8 +164,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
129
164
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
130
165
|
* @returns {string} The number in Tamil words
|
|
131
166
|
*/
|
|
132
|
-
function
|
|
133
|
-
const { isNegative, integerPart, decimalPart } =
|
|
167
|
+
function toCardinal (value) {
|
|
168
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
134
169
|
|
|
135
170
|
let result = ''
|
|
136
171
|
|
|
@@ -147,8 +182,89 @@ function toWords (value) {
|
|
|
147
182
|
return result
|
|
148
183
|
}
|
|
149
184
|
|
|
185
|
+
// ============================================================================
|
|
186
|
+
// ORDINAL: toOrdinal(value)
|
|
187
|
+
// ============================================================================
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Converts a positive integer to Tamil ordinal words.
|
|
191
|
+
*
|
|
192
|
+
* Tamil ordinals: First has special form, 2-6 have special suffixes, then -ஆவது suffix.
|
|
193
|
+
*
|
|
194
|
+
* @param {bigint} n - Positive integer to convert
|
|
195
|
+
* @returns {string} Tamil ordinal words
|
|
196
|
+
*/
|
|
197
|
+
function integerToOrdinal (n) {
|
|
198
|
+
// Special ordinals for 1-6
|
|
199
|
+
if (n >= 1n && n <= 6n) {
|
|
200
|
+
return ORDINAL_SPECIAL[Number(n)]
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// For 7 and above, add suffix to cardinal
|
|
204
|
+
const cardinal = integerToWords(n)
|
|
205
|
+
return cardinal + ORDINAL_SUFFIX
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Converts a numeric value to Tamil ordinal words.
|
|
210
|
+
*
|
|
211
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
212
|
+
* @returns {string} The number as ordinal words
|
|
213
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
214
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* toOrdinal(1) // 'முதல்'
|
|
218
|
+
* toOrdinal(2) // 'இரண்டாவது'
|
|
219
|
+
* toOrdinal(10) // 'பத்துஆவது'
|
|
220
|
+
*/
|
|
221
|
+
function toOrdinal (value) {
|
|
222
|
+
const integerPart = parseOrdinalValue(value)
|
|
223
|
+
return integerToOrdinal(integerPart)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// CURRENCY: toCurrency(value, options?)
|
|
228
|
+
// ============================================================================
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Converts a numeric value to Tamil currency words (Indian Rupee).
|
|
232
|
+
*
|
|
233
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
234
|
+
* @returns {string} The amount in Tamil currency words
|
|
235
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
236
|
+
* @throws {Error} If value is not a valid number format
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* toCurrency(42.50) // 'நாற்பத்திரண்டு ரூபாய் ஐம்பது பைசா'
|
|
240
|
+
* toCurrency(1) // 'ஒன்று ரூபாய்'
|
|
241
|
+
* toCurrency(0.01) // 'ஒன்று பைசா'
|
|
242
|
+
*/
|
|
243
|
+
function toCurrency (value) {
|
|
244
|
+
const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
|
|
245
|
+
|
|
246
|
+
// Build result
|
|
247
|
+
let result = ''
|
|
248
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
249
|
+
|
|
250
|
+
// Rupees part - show if non-zero, or if no paise
|
|
251
|
+
if (rupees > 0n || paise === 0n) {
|
|
252
|
+
result += integerToWords(rupees) + ' ' + RUPEE
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Paise part
|
|
256
|
+
if (paise > 0n) {
|
|
257
|
+
if (rupees > 0n) {
|
|
258
|
+
result += ' '
|
|
259
|
+
}
|
|
260
|
+
result += integerToWords(paise) + ' ' + PAISA
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return result
|
|
264
|
+
}
|
|
265
|
+
|
|
150
266
|
// ============================================================================
|
|
151
267
|
// Exports
|
|
152
268
|
// ============================================================================
|
|
153
269
|
|
|
154
|
-
export {
|
|
270
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/te-IN.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Telugu words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @returns {string} The number in Telugu words
|
|
6
|
+
*/
|
|
7
|
+
export function toCardinal(value: number | string | bigint): string;
|
|
8
|
+
/**
|
|
9
|
+
* Converts a numeric value to Telugu ordinal words.
|
|
10
|
+
*
|
|
11
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
12
|
+
* @returns {string} The number as ordinal words
|
|
13
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
14
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* toOrdinal(1) // 'మొదటి'
|
|
18
|
+
* toOrdinal(2) // 'రెండవ'
|
|
19
|
+
* toOrdinal(10) // 'పదివ'
|
|
20
|
+
*/
|
|
21
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
22
|
+
/**
|
|
23
|
+
* Converts a numeric value to Telugu currency words (Indian Rupee).
|
|
24
|
+
*
|
|
25
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
26
|
+
* @returns {string} The amount in Telugu currency words
|
|
27
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
28
|
+
* @throws {Error} If value is not a valid number format
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* toCurrency(42.50) // 'నలభై రెండు రూపాయలు యాభై పైసలు'
|
|
32
|
+
* toCurrency(1) // 'ఒకటి రూపాయి'
|
|
33
|
+
* toCurrency(0.01) // 'ఒకటి పైసా'
|
|
34
|
+
*/
|
|
35
|
+
export function toCurrency(value: number | string | bigint): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Telugu language converter
|
|
2
|
+
* Telugu (India) language converter
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* CLDR: te-IN | Telugu as used in India
|
|
5
5
|
*
|
|
6
6
|
* Key features:
|
|
7
7
|
* - Indian numbering system (వెయ్యి, లక్ష, కోటి)
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* - Per-digit decimal reading
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { parseCardinalValue } from './utils/parse-cardinal.js'
|
|
15
|
+
import { parseCurrencyValue } from './utils/parse-currency.js'
|
|
16
|
+
import { parseOrdinalValue } from './utils/parse-ordinal.js'
|
|
15
17
|
|
|
16
18
|
// ============================================================================
|
|
17
19
|
// Vocabulary
|
|
@@ -21,6 +23,28 @@ const ZERO = 'సున్నా'
|
|
|
21
23
|
const NEGATIVE = 'మైనస్'
|
|
22
24
|
const DECIMAL_SEP = 'పాయింట్'
|
|
23
25
|
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Ordinal Vocabulary
|
|
28
|
+
// ============================================================================
|
|
29
|
+
|
|
30
|
+
// Ordinal suffix (adds to cardinal for numbers >= 7)
|
|
31
|
+
const ORDINAL_SUFFIX = 'వ'
|
|
32
|
+
|
|
33
|
+
// Special ordinals for first few numbers
|
|
34
|
+
const ORDINAL_SPECIAL = ['', 'మొదటి', 'రెండవ', 'మూడవ', 'నాలుగవ', 'ఐదవ', 'ఆరవ']
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Currency Vocabulary (Indian Rupee)
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
// Rupee (singular/plural same in Telugu)
|
|
41
|
+
const RUPEE = 'రూపాయి'
|
|
42
|
+
const RUPEES = 'రూపాయలు'
|
|
43
|
+
|
|
44
|
+
// Paisa (singular/plural same in Telugu)
|
|
45
|
+
const PAISA = 'పైసా'
|
|
46
|
+
const PAISE = 'పైసలు'
|
|
47
|
+
|
|
24
48
|
const BELOW_HUNDRED = [
|
|
25
49
|
'సున్నా', 'ఒకటి', 'రెండు', 'మూడు', 'నాలుగు', 'ఐదు', 'ఆరు', 'ఏడు', 'ఎనిమిది', 'తొమ్మిది',
|
|
26
50
|
'పది', 'పదకొండు', 'పన్నెండు', 'పదమూడు', 'పద్నాలుగు', 'పదిహేను', 'పదహారు', 'పదిహేడు', 'పద్దెనిమిది', 'పంతొమ్మిది',
|
|
@@ -34,10 +58,6 @@ const BELOW_HUNDRED = [
|
|
|
34
58
|
'తొంభై', 'తొంభై ఒకటి', 'తొంభై రెండు', 'తొంభై మూడు', 'తొంభై నాలుగు', 'తొంభై ఐదు', 'తొంభై ఆరు', 'తొంభై ఏడు', 'తొంభై ఎనిమిది', 'తొంభై తొమ్మిది'
|
|
35
59
|
]
|
|
36
60
|
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Vocabulary (continued)
|
|
39
|
-
// ============================================================================
|
|
40
|
-
|
|
41
61
|
const HUNDREDS = ['', 'వంద', 'రెండు వందలు', 'మూడు వందలు', 'నాలుగు వందలు', 'ఐదు వందలు', 'ఆరు వందలు', 'ఏడు వందలు', 'ఎనిమిది వందలు', 'తొమ్మిది వందలు']
|
|
42
62
|
|
|
43
63
|
// Ones for decimal reading
|
|
@@ -47,13 +67,13 @@ const ONES = ['ఒకటి', 'రెండు', 'మూడు', 'నాలు
|
|
|
47
67
|
const SCALE_WORDS = ['', 'వెయ్యి', 'లక్ష', 'కోటి', 'అరబ్', 'ఖరబ్', 'నిల్', 'పడ్మ', 'శంకు']
|
|
48
68
|
|
|
49
69
|
// ============================================================================
|
|
50
|
-
//
|
|
70
|
+
// Segment Building
|
|
51
71
|
// ============================================================================
|
|
52
72
|
|
|
53
73
|
/**
|
|
54
|
-
*
|
|
74
|
+
* Builds words for a 0-999 segment.
|
|
55
75
|
*/
|
|
56
|
-
function
|
|
76
|
+
function buildSegment (n) {
|
|
57
77
|
if (n === 0) return ''
|
|
58
78
|
if (n < 100) return BELOW_HUNDRED[n]
|
|
59
79
|
|
|
@@ -66,9 +86,15 @@ function convertBelowThousand (n) {
|
|
|
66
86
|
return HUNDREDS[hundreds] + ' ' + BELOW_HUNDRED[remainder]
|
|
67
87
|
}
|
|
68
88
|
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Conversion Functions
|
|
91
|
+
// ============================================================================
|
|
92
|
+
|
|
69
93
|
/**
|
|
70
94
|
* Converts a non-negative integer to Telugu words.
|
|
71
|
-
*
|
|
95
|
+
*
|
|
96
|
+
* Uses BigInt modulo for segment extraction (faster than string slicing).
|
|
97
|
+
* South Asian 3-2-2 grouping: first 3 digits, then groups of 2.
|
|
72
98
|
*
|
|
73
99
|
* @param {bigint} n - Non-negative integer to convert
|
|
74
100
|
* @returns {string} Telugu words
|
|
@@ -78,49 +104,39 @@ function integerToWords (n) {
|
|
|
78
104
|
|
|
79
105
|
// Fast path: numbers < 1000 (direct lookup)
|
|
80
106
|
if (n < 1000n) {
|
|
81
|
-
return
|
|
107
|
+
return buildSegment(Number(n))
|
|
82
108
|
}
|
|
83
109
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* Recursively builds words for numbers >= 1000.
|
|
89
|
-
* Indian grouping: first 3 digits, then 2-digit groups.
|
|
90
|
-
*
|
|
91
|
-
* @param {bigint} n - Number to convert
|
|
92
|
-
* @param {number} scale - Current scale index (0=units, 1=thousands, etc.)
|
|
93
|
-
* @returns {string} Telugu words
|
|
94
|
-
*/
|
|
95
|
-
function buildLargeNumberWords (n, scale) {
|
|
96
|
-
if (n === 0n) return ''
|
|
97
|
-
|
|
98
|
-
// Determine divisor: 1000 for first split, 100 for rest
|
|
99
|
-
const divisor = scale === 0 ? 1000n : 100n
|
|
100
|
-
const segment = Number(n % divisor)
|
|
101
|
-
const rest = n / divisor
|
|
110
|
+
// Extract segments using BigInt modulo
|
|
111
|
+
const segments = []
|
|
112
|
+
segments.push(Number(n % 1000n))
|
|
113
|
+
let temp = n / 1000n
|
|
102
114
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
result = buildLargeNumberWords(rest, scale + 1)
|
|
115
|
+
while (temp > 0n) {
|
|
116
|
+
segments.push(Number(temp % 100n))
|
|
117
|
+
temp = temp / 100n
|
|
107
118
|
}
|
|
108
119
|
|
|
109
|
-
//
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
// Build result string (process from most-significant to least)
|
|
121
|
+
const words = []
|
|
122
|
+
for (let i = segments.length - 1; i >= 0; i--) {
|
|
123
|
+
const segment = segments[i]
|
|
124
|
+
if (segment === 0) continue
|
|
112
125
|
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
result += convertBelowThousand(segment)
|
|
126
|
+
if (i === 0) {
|
|
127
|
+
words.push(buildSegment(segment))
|
|
116
128
|
} else {
|
|
117
|
-
//
|
|
129
|
+
// Use 'ఒక' for 1 at scale positions
|
|
118
130
|
const groupWords = (segment === 1) ? 'ఒక' : BELOW_HUNDRED[segment]
|
|
119
|
-
|
|
131
|
+
words.push(groupWords)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (i > 0 && SCALE_WORDS[i]) {
|
|
135
|
+
words.push(SCALE_WORDS[i])
|
|
120
136
|
}
|
|
121
137
|
}
|
|
122
138
|
|
|
123
|
-
return
|
|
139
|
+
return words.join(' ')
|
|
124
140
|
}
|
|
125
141
|
|
|
126
142
|
function decimalPartToWords (decimalPart) {
|
|
@@ -139,8 +155,8 @@ function decimalPartToWords (decimalPart) {
|
|
|
139
155
|
* @param {number | string | bigint} value - The numeric value to convert
|
|
140
156
|
* @returns {string} The number in Telugu words
|
|
141
157
|
*/
|
|
142
|
-
function
|
|
143
|
-
const { isNegative, integerPart, decimalPart } =
|
|
158
|
+
function toCardinal (value) {
|
|
159
|
+
const { isNegative, integerPart, decimalPart } = parseCardinalValue(value)
|
|
144
160
|
|
|
145
161
|
let result = ''
|
|
146
162
|
|
|
@@ -157,8 +173,93 @@ function toWords (value) {
|
|
|
157
173
|
return result
|
|
158
174
|
}
|
|
159
175
|
|
|
176
|
+
// ============================================================================
|
|
177
|
+
// ORDINAL: toOrdinal(value)
|
|
178
|
+
// ============================================================================
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Converts a positive integer to Telugu ordinal words.
|
|
182
|
+
*
|
|
183
|
+
* Telugu ordinals: First 6 are irregular, then add -వ suffix.
|
|
184
|
+
*
|
|
185
|
+
* @param {bigint} n - Positive integer to convert
|
|
186
|
+
* @returns {string} Telugu ordinal words
|
|
187
|
+
*/
|
|
188
|
+
function integerToOrdinal (n) {
|
|
189
|
+
// Special ordinals for 1-6
|
|
190
|
+
if (n >= 1n && n <= 6n) {
|
|
191
|
+
return ORDINAL_SPECIAL[Number(n)]
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// For 7 and above, add suffix to cardinal
|
|
195
|
+
const cardinal = integerToWords(n)
|
|
196
|
+
return cardinal + ORDINAL_SUFFIX
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Converts a numeric value to Telugu ordinal words.
|
|
201
|
+
*
|
|
202
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
203
|
+
* @returns {string} The number as ordinal words
|
|
204
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
205
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* toOrdinal(1) // 'మొదటి'
|
|
209
|
+
* toOrdinal(2) // 'రెండవ'
|
|
210
|
+
* toOrdinal(10) // 'పదివ'
|
|
211
|
+
*/
|
|
212
|
+
function toOrdinal (value) {
|
|
213
|
+
const integerPart = parseOrdinalValue(value)
|
|
214
|
+
return integerToOrdinal(integerPart)
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// CURRENCY: toCurrency(value, options?)
|
|
219
|
+
// ============================================================================
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Converts a numeric value to Telugu currency words (Indian Rupee).
|
|
223
|
+
*
|
|
224
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
225
|
+
* @returns {string} The amount in Telugu currency words
|
|
226
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
227
|
+
* @throws {Error} If value is not a valid number format
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* toCurrency(42.50) // 'నలభై రెండు రూపాయలు యాభై పైసలు'
|
|
231
|
+
* toCurrency(1) // 'ఒకటి రూపాయి'
|
|
232
|
+
* toCurrency(0.01) // 'ఒకటి పైసా'
|
|
233
|
+
*/
|
|
234
|
+
function toCurrency (value) {
|
|
235
|
+
const { isNegative, dollars: rupees, cents: paise } = parseCurrencyValue(value)
|
|
236
|
+
|
|
237
|
+
// Build result
|
|
238
|
+
let result = ''
|
|
239
|
+
if (isNegative) result = NEGATIVE + ' '
|
|
240
|
+
|
|
241
|
+
// Rupees part - show if non-zero, or if no paise
|
|
242
|
+
if (rupees > 0n || paise === 0n) {
|
|
243
|
+
result += integerToWords(rupees)
|
|
244
|
+
// Singular for 1 rupee, plural otherwise
|
|
245
|
+
result += ' ' + (rupees === 1n ? RUPEE : RUPEES)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Paise part
|
|
249
|
+
if (paise > 0n) {
|
|
250
|
+
if (rupees > 0n) {
|
|
251
|
+
result += ' '
|
|
252
|
+
}
|
|
253
|
+
result += integerToWords(paise)
|
|
254
|
+
// Singular for 1 paisa, plural otherwise
|
|
255
|
+
result += ' ' + (paise === 1n ? PAISA : PAISE)
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return result
|
|
259
|
+
}
|
|
260
|
+
|
|
160
261
|
// ============================================================================
|
|
161
262
|
// Exports
|
|
162
263
|
// ============================================================================
|
|
163
264
|
|
|
164
|
-
export {
|
|
265
|
+
export { toCardinal, toOrdinal, toCurrency }
|
package/src/th-TH.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a numeric value to Thai words.
|
|
3
|
+
*
|
|
4
|
+
* @param {number | string | bigint} value - The numeric value to convert
|
|
5
|
+
* @returns {string} The number in Thai words
|
|
6
|
+
*/
|
|
7
|
+
export function toCardinal(value: number | string | bigint): string;
|
|
8
|
+
/**
|
|
9
|
+
* Converts a numeric value to Thai ordinal words.
|
|
10
|
+
*
|
|
11
|
+
* @param {number | string | bigint} value - The numeric value to convert (positive integer)
|
|
12
|
+
* @returns {string} The number as ordinal words
|
|
13
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
14
|
+
* @throws {RangeError} If value is negative, zero, or has a decimal part
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* toOrdinal(1) // 'ที่หนึ่ง'
|
|
18
|
+
* toOrdinal(2) // 'ที่สอง'
|
|
19
|
+
* toOrdinal(10) // 'ที่สิบ'
|
|
20
|
+
*/
|
|
21
|
+
export function toOrdinal(value: number | string | bigint): string;
|
|
22
|
+
/**
|
|
23
|
+
* Converts a numeric value to Thai currency words (Baht).
|
|
24
|
+
*
|
|
25
|
+
* Thai Baht uses satang as subunit (100 satang = 1 baht).
|
|
26
|
+
* When whole amounts, adds "ถ้วน" (exactly) suffix.
|
|
27
|
+
*
|
|
28
|
+
* @param {number | string | bigint} value - The currency amount to convert
|
|
29
|
+
* @returns {string} The amount in Thai currency words
|
|
30
|
+
* @throws {TypeError} If value is not a valid numeric type
|
|
31
|
+
* @throws {Error} If value is not a valid number format
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* toCurrency(42) // 'สี่สิบสองบาทถ้วน'
|
|
35
|
+
* toCurrency(1.50) // 'หนึ่งบาทห้าสิบสตางค์'
|
|
36
|
+
* toCurrency(-5) // 'ลบห้าบาทถ้วน'
|
|
37
|
+
*/
|
|
38
|
+
export function toCurrency(value: number | string | bigint): string;
|