marathi-transliterate 1.3.0 → 1.5.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marathi-transliterate",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Zero-dependency, offline-first Marathi / Devanagari phonetic transliteration library. Converts English typing to Marathi (e.g. sakhar -> साखर) seamlessly in plain JS, Node.js, and frontend frameworks.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/dictionary.js CHANGED
@@ -3,6 +3,276 @@
3
3
  * Kirana/grocery items, customer names, units, and shop terms.
4
4
  */
5
5
  export const MARATHI_DICTIONARY = {
6
+ // --- Popular Marathi Kirana Brands, Masale & Staples with Anusvara ---
7
+ 'rambandhu': 'रामबंधू',
8
+ 'rambandhoo': 'रामबंधू',
9
+ 'rambandhuu': 'रामबंधू',
10
+ 'bandhu': 'बंधू',
11
+ 'bandhuu': 'बंधू',
12
+ 'bandhoo': 'बंधू',
13
+ 'pravin': 'प्रवीण',
14
+ 'suhana': 'सुहाना',
15
+ 'everest': 'एव्हरेस्ट',
16
+ 'badshah': 'बादशाह',
17
+ 'rambandhupapad': 'रामबंधू पापड',
18
+ 'shingada': 'शिंगाडा',
19
+ 'bhendi': 'भेंडी',
20
+ 'bundi': 'बुंदी',
21
+ 'tambaku': 'तंबाखू',
22
+ 'gulabjam': 'गुलाबजाम',
23
+ 'gulabjamun': 'गुलाबजामून',
24
+
25
+ // --- Comprehensive Maharashtrian FMCG, Brands & Staples ---
26
+ 'everestmasale': 'एव्हरेस्ट मसाले',
27
+ 'tikhalal': 'तिखाललाल',
28
+ 'badshahmasala': 'बादशाह मसाला',
29
+ 'suhanamasale': 'सुहाना मसाले',
30
+ 'pravinmasale': 'प्रवीण मसाले',
31
+ 'bedekar': 'बेडेकर',
32
+ 'bedekarmasale': 'बेडेकर मसाले',
33
+ 'katdare': 'काटदरे',
34
+ 'kpra': 'के-प्र',
35
+ 'suruchi': 'सुरुची',
36
+ 'khamkar': 'खामकर',
37
+ 'mdh': 'एमडीएच',
38
+ 'mdhmasala': 'एमडीएच मसाला',
39
+ 'catch': 'कॅच',
40
+ 'catchmasala': 'कॅच मसाला',
41
+ 'goldie': 'गोल्डी',
42
+ 'chitalebandhu': 'चितळे बंधू',
43
+ 'gokul': 'गोकुळ',
44
+ 'warana': 'वारणा',
45
+ 'katraj': 'कात्रज',
46
+ 'amul': 'अमुल',
47
+ 'amuldudh': 'अमुल दूध',
48
+ 'amulbutter': 'अमुल बटर',
49
+ 'amulghee': 'अमुल तूप',
50
+ 'gowardhan': 'गोवर्धन',
51
+ 'gowardhanghee': 'गोवर्धन तूप',
52
+ 'motherdairy': 'मदर डेअरी',
53
+ 'patanjali': 'पतंजली',
54
+ 'haldiram': 'हल्दीराम',
55
+ 'balajiwafers': 'बालाजी वेफर्स',
56
+ 'lijjat': 'लिज्जत',
57
+ 'lijjatpapad': 'लिज्जत पापड',
58
+ 'tata': 'टाटा',
59
+ 'tatatea': 'टाटा चहा',
60
+ 'tatapremium': 'टाटा प्रीमियम',
61
+ 'tatagold': 'टाटा गोल्ड',
62
+ 'tatani': 'टाटा मीठ',
63
+ 'tatamith': 'टाटा मीठ',
64
+ 'tatansalt': 'टाटा सॉल्ट',
65
+ 'redlabel': 'रेड लेबल',
66
+ 'tajmahal': 'ताजमहाल',
67
+ 'waghbakri': 'वाघ बकरी',
68
+ 'society': 'सोसायटी',
69
+ 'societytea': 'सोसायटी चहा',
70
+ 'girnar': 'गिरनार',
71
+ 'gemini': 'जेमिनी',
72
+ 'geminioil': 'जेमिनी तेल',
73
+ 'fortune': 'फॉर्च्युन',
74
+ 'fortuneoil': 'फॉर्च्युन तेल',
75
+ 'saffola': 'सॅफोला',
76
+ 'saffolaoil': 'सॅफोला तेल',
77
+ 'dhara': 'धारा',
78
+ 'dharaoil': 'धारा तेल',
79
+ 'aashirvaad': 'आशीर्वाद',
80
+ 'aashirvaadatta': 'आशीर्वाद आटा',
81
+ 'pillsbury': 'पिल्सबरी',
82
+ 'surfexcel': 'सर्फ एक्सेल',
83
+ 'vimbar': 'विम बार',
84
+ 'vimliquid': 'विम लिक्विड',
85
+ 'pril': 'प्रिल',
86
+ 'lifebuoy': 'लाइफबॉय',
87
+ 'lux': 'लक्स',
88
+ 'santoor': 'संतूर',
89
+ 'medimix': 'मेडिमिक्स',
90
+ 'godrejno1': 'गोदरेज नं. १',
91
+ 'cinthol': 'सिंथॉल',
92
+ 'pears': 'पिअर्स',
93
+ 'dove': 'डव्ह',
94
+ 'vicco': 'व्हिको',
95
+ 'viccovajradanti': 'व्हिको वज्रदंती',
96
+ 'goodknight': 'गुड नाइट',
97
+ 'allout': 'ऑल आउट',
98
+ 'mortein': 'मॉर्टिन',
99
+ 'hit': 'हिट',
100
+ 'parleg': 'पारले-जी',
101
+ 'monaco': 'मोनाको',
102
+ 'krackjack': 'क्रॅकजॅक',
103
+ 'yippee': 'यिप्पी',
104
+ 'cadbury': 'कॅडबरी',
105
+ 'dairymilk': 'डेअरी मिल्क',
106
+ 'bournvita': 'बोर्नव्हिटा',
107
+ 'horlicks': 'हॉर्लिक्स',
108
+ 'boost': 'बूस्ट',
109
+ 'complan': 'कॉम्प्लॅन',
110
+ 'nescafe': 'नेस्कॅफे',
111
+ 'bru': 'ब्रू कॉफी',
112
+ 'godamasala': 'गोडा मसाला',
113
+ 'kandalasun': 'कांदा लसूण',
114
+ 'kandalasunmasala': 'कांदा लसूण मसाला',
115
+ 'misalmasala': 'मिसळ मसाला',
116
+ 'pavbhaji': 'पाव भाजी',
117
+ 'pavbhajimasala': 'पाव भाजी मसाला',
118
+ 'garammasala': 'गरम मसाला',
119
+ 'chanamasala': 'चना मसाला',
120
+ 'cholemasala': 'छोले मसाला',
121
+ 'chaatmasala': 'चाट मसाला',
122
+ 'sambharmasala': 'सांभार मसाला',
123
+ 'rasammasala': 'रसम मसाला',
124
+ 'biryanimasala': 'बिर्याणी मसाला',
125
+ 'pulaomasala': 'पुलाव मसाला',
126
+ 'chickenmasala': 'चिकन मसाला',
127
+ 'muttonmasala': 'मटन मसाला',
128
+ 'fishmasala': 'फिश मसाला',
129
+ 'kitchenking': 'किचन किंग',
130
+ 'maggimasala': 'मॅगी मसाला',
131
+ 'panipuri': 'पाणीपुरी',
132
+ 'panipurimasala': 'पाणीपुरी मसाला',
133
+ 'jaljira': 'जलजिरा',
134
+ 'dhanapowder': 'धने पावडर',
135
+ 'jeerapowder': 'जिरे पावडर',
136
+ 'haldipowder': 'हळद पावडर',
137
+ 'mirchipowder': 'मिरची पावडर',
138
+ 'kashmirimirchi': 'काश्मिरी मिरची',
139
+ 'chakrifool': 'चक्रीफूल',
140
+ 'shahjeera': 'शहाजिरे',
141
+ 'jaiphal': 'जायफळ',
142
+ 'jaipatri': 'जायपत्री',
143
+ 'kasurimethi': 'कसुरी मेथी',
144
+ 'methidana': 'मेथी दाणा',
145
+ 'ajwain': 'ओवा',
146
+ 'ova': 'ओवा',
147
+ 'khadamasala': 'खडा मसाला',
148
+ 'kalimirch': 'काळी मिरी',
149
+ 'mira': 'मिरे',
150
+ 'varai': 'वरई',
151
+ 'rajgiraatta': 'राजगिरा पीठ',
152
+ 'rajgiraladu': 'राजगिरा लाडू',
153
+ 'upwasbhajani': 'उपवास भाजणी',
154
+ 'thalipeeth': 'थालिपीठ',
155
+ 'thalipeethbhajani': 'थालिपीठ भाजणी',
156
+ 'batatakees': 'बटाटा कीस',
157
+ 'upwaspapad': 'उपवास पापड',
158
+ 'sendhanamak': 'सेंधव मीठ',
159
+ 'saindhav': 'सैंधव मीठ',
160
+ 'singhadapith': 'शिंगाडा पीठ',
161
+ 'moongdal': 'मूग डाळ',
162
+ 'chanadal': 'चना डाळ',
163
+ 'uraddal': 'उडीद डाळ',
164
+ 'masoordal': 'मसूर डाळ',
165
+ 'kabulichana': 'काबुली चना',
166
+ 'kalachana': 'काळा चना',
167
+ 'harbara': 'हरभरा',
168
+ 'harbaradal': 'हरभरा डाळ',
169
+ 'safedvatana': 'पांढरा वटाणा',
170
+ 'hirvavatana': 'हिरवा वटाणा',
171
+ 'chawli': 'चवळी',
172
+ 'singdana': 'शेंगदाणा',
173
+ 'singdane': 'शेंगदाणे',
174
+ 'soyabean': 'सोयाबीन',
175
+ 'wheatflour': 'गहू पीठ',
176
+ 'jowarflour': 'ज्वारी पीठ',
177
+ 'bajraflour': 'बाजरी पीठ',
178
+ 'nachaniflour': 'नाचणी पीठ',
179
+ 'riceflour': 'तांदूळ पीठ',
180
+ 'wadakolam': 'वाडा कोलम',
181
+ 'sonamasoori': 'सोना मसुरी',
182
+ 'indrayani': 'इंद्रायणी',
183
+ 'tukda': 'तुकडा बासमती',
184
+ 'jadapohe': 'जाड पोहे',
185
+ 'patalpohe': 'पातळ पोहे',
186
+ 'makkapoha': 'मका पोहे',
187
+ 'kurmure': 'कुरमुरे',
188
+ 'chirmure': 'चिरमुरे',
189
+ 'sandge': 'सांडगे',
190
+ 'sandage': 'सांडगे',
191
+ 'batatapapad': 'बटाटा पापड',
192
+ 'pohapapad': 'पोहे पापड',
193
+ 'udadpapad': 'उडीद पापड',
194
+ 'moongpapad': 'मूग पापड',
195
+ 'ambalonche': 'आंबा लोणचे',
196
+ 'limbulonche': 'लिंबू लोणचे',
197
+ 'mirchilonche': 'मिरची लोणचे',
198
+ 'mixlonche': 'मिक्स्ड लोणचे',
199
+ 'kolhapurigul': 'कोल्हापुरी गूळ',
200
+ 'organicgul': 'सेंद्रिय गूळ',
201
+ 'khadisakhar': 'खडीसाखर',
202
+ 'shengdanatel': 'शेंगदाणा तेल',
203
+ 'groundnutoil': 'शेंगदाणा तेल',
204
+ 'soyabeanoil': 'सोयाबीन तेल',
205
+ 'sunfloweroil': 'सूर्यफूल तेल',
206
+ 'tiltel': 'तीळ तेल',
207
+ 'khobrel': 'खोबरेल तेल',
208
+ 'coconutoil': 'खोबरेल तेल',
209
+ 'sarson': 'मोहरी तेल',
210
+ 'mustardoil': 'मोहरी तेल',
211
+ 'gaayghee': 'गाय तूप',
212
+ 'mhaisghee': 'म्हैस तूप',
213
+ 'vanaspati': 'वनस्पती तूप',
214
+ 'dalda': 'डालडा',
215
+ 'khoya': 'खोया',
216
+ 'mawa': 'मावा',
217
+ 'kande': 'कांदे',
218
+ 'tomato': 'टोमॅटो',
219
+ 'tamatar': 'टोमॅटो',
220
+ 'aalelasun': 'आले लसूण पेस्ट',
221
+ 'gingergarlic': 'आले लसूण पेस्ट',
222
+ 'pudina': 'पुदिना',
223
+ 'karipatta': 'कढीपत्ता',
224
+ 'kadipatta': 'कढीपत्ता',
225
+ 'hirvimirchi': 'हिरवी मिरची',
226
+ 'lalmirchi': 'लाल मिरची',
227
+ 'shevga': 'शेवगा शेंगा',
228
+ 'shevgasheng': 'शेवगा शेंग',
229
+ 'vangi': 'वांगी',
230
+ 'dudhi': 'दुधी भोपळा',
231
+ 'lalbhopla': 'लाल भोपळा',
232
+ 'gavar': 'गवार',
233
+ 'tondli': 'तोंडली',
234
+ 'ghosale': 'घोसाळे',
235
+ 'flower': 'फ्लॉवर',
236
+ 'cabbage': 'कोबी',
237
+ 'kobi': 'कोबी',
238
+ 'shimlamirchi': 'शिमला मिरची',
239
+ 'gajar': 'गाजर',
240
+ 'beet': 'बीट',
241
+ 'kakdi': 'काकडी',
242
+ 'palak': 'पालक',
243
+ 'shepu': 'शेपू',
244
+ 'amba': 'आंबा',
245
+ 'aamba': 'आंबा',
246
+ 'kairi': 'कैरी',
247
+ 'safarchand': 'सफरचंद',
248
+ 'draksha': 'द्राक्षे',
249
+ 'santre': 'संत्री',
250
+ 'mosambi': 'मोसंबी',
251
+ 'dalimb': 'डाळिंब',
252
+ 'chikoo': 'चिकू',
253
+ 'peru': 'पेरू',
254
+ 'ananas': 'अननस',
255
+ 'papayi': 'पपई',
256
+ 'kalingad': 'कलिंगड',
257
+ 'kharbuj': 'खरबूज',
258
+ 'sitaphal': 'सीताफळ',
259
+ 'ramphal': 'रामफळ',
260
+ 'jambhul': 'जांभूळ',
261
+ 'dhoopbatti': 'धूप बत्ती',
262
+ 'bhimsenikapoor': 'भीमसेनी कापूर',
263
+ 'kunku': 'कुंकू',
264
+ 'chandan': 'चंदन',
265
+ 'chandantika': 'चंदन टिका',
266
+ 'poojasupari': 'पूजा सुपारी',
267
+ 'olanaral': 'ओला नारळ',
268
+ 'sukhanaral': 'सुका नारळ',
269
+ 'sukhekhobre': 'सुके खोबरे',
270
+ 'kaapsachivat': 'कापसाची वात',
271
+ 'golvat': 'गोल वात',
272
+ 'laambvat': 'लांब वात',
273
+ 'samaitel': 'सई तेल',
274
+ 'poojatel': 'पूजा तेल',
275
+
6
276
  // --- Grocery & Kirana Staples ---
7
277
  'sakhar': 'साखर',
8
278
  'saakhar': 'साखर',
@@ -759,5 +1029,280 @@ export const MARATHI_DICTIONARY = {
759
1029
  "bana": "बाण",
760
1030
  "dane": "दाणे",
761
1031
  "dana": "दाणा",
762
- };
763
1032
 
1033
+ // --- Modern English Loanwords with Chandra ॉ / ॅ & Kirana Problem Words ---
1034
+ "polish": "पॉलिश",
1035
+ "polysh": "पॉलिश",
1036
+ "pawlish": "पॉलिश",
1037
+ "shoepolish": "शू पॉलिश",
1038
+ "cherrypolish": "चेरी पॉलिश",
1039
+ "cherryblossom": "चेरी ब्लॉसम",
1040
+ "nailpolish": "नेल पॉलिश",
1041
+ "furniturepolish": "फर्निचर पॉलिश",
1042
+
1043
+ "coil": "कॉईल",
1044
+ "koyalcoil": "कॉईल",
1045
+ "machharcoil": "मच्छर कॉईल",
1046
+ "machhardani": "मच्छरदाणी",
1047
+ "goodnightcoil": "गुडनाईट कॉईल",
1048
+ "alloutcoil": "ऑलआऊट कॉईल",
1049
+ "morteincoil": "मॉर्टिन कॉईल",
1050
+ "kasavchhap": "कासव छाप",
1051
+ "kasavchhapcoil": "कासव छाप कॉईल",
1052
+ "maxocoil": "मॅक्सो कॉईल",
1053
+
1054
+ "rajhans": "राजहंस",
1055
+ "rajhansh": "राजहंस",
1056
+ "rajhansdudh": "राजहंस दूध",
1057
+ "rajhanstup": "राजहंस तूप",
1058
+ "rajhansmilk": "राजहंस दूध",
1059
+ "rajhanspashukhadya": "राजहंस पशुखाद्य",
1060
+
1061
+ "sunth": "सुंठ",
1062
+ "soonth": "सुंठ",
1063
+ "suntha": "सुंठ",
1064
+ "sunthavda": "सुंठवडा",
1065
+ "sunthpowder": "सुंठ पावडर",
1066
+ "sunthpud": "सुंठ पूड",
1067
+
1068
+ "coffee": "कॉफी",
1069
+ "coldcoffee": "कोल्ड कॉफी",
1070
+ "sauce": "सॉस",
1071
+ "sos": "सॉस",
1072
+ "redchillisauce": "रेड चिली सॉस",
1073
+ "greenchillisauce": "ग्रीन चिली सॉस",
1074
+ "soyasauce": "सोया सॉस",
1075
+ "schezwansauce": "शेजवान सॉस",
1076
+ "stock": "स्टॉक",
1077
+ "bottle": "बॉटल",
1078
+ "ball": "बॉल",
1079
+ "towel": "टॉवेल",
1080
+ "torch": "टॉर्च",
1081
+ "top": "टॉप",
1082
+ "drop": "ड्रॉप",
1083
+ "drops": "ड्रॉप्स",
1084
+ "doctor": "डॉक्टर",
1085
+ "dr": "डॉक्टर",
1086
+ "chocolate": "चॉकलेट",
1087
+ "toffee": "टॉफी",
1088
+ "popcorn": "पॉपकॉर्न",
1089
+ "cornflour": "कॉर्नफ्लोर",
1090
+ "cornflakes": "कॉर्नफ्लेक्स",
1091
+ "cotton": "कॉटन",
1092
+ "mop": "मॉप",
1093
+ "lock": "लॉक",
1094
+ "office": "ऑफिस",
1095
+ "shop": "शॉप",
1096
+ "mall": "मॉल",
1097
+ "hall": "हॉल",
1098
+ "call": "कॉल",
1099
+ "toll": "टोल",
1100
+ "horlicks": "हॉर्लिक्स",
1101
+ "bournvita": "बॉर्नव्हिटा",
1102
+ "complan": "कॉम्प्लॅन",
1103
+ "boost": "बूस्ट",
1104
+ "dettol": "डेटॉल",
1105
+ "allout": "ऑलआऊट",
1106
+ "mortein": "मॉर्टिन",
1107
+ "baygon": "बायगॉन",
1108
+ "odonil": "ओडोनिल",
1109
+ "lizol": "लायझोल",
1110
+ "harpic": "हार्पिक",
1111
+ "pril": "प्रिल",
1112
+ "exo": "एक्सो",
1113
+ "exobar": "एक्सो बार",
1114
+ "vanish": "व्हॅनिश",
1115
+ "hit": "हिट",
1116
+ "hitspray": "हिट स्प्रे",
1117
+ "goodnight": "गुडनाईट",
1118
+ "goodknight": "गुडनाईट",
1119
+ "colgate": "कोलगेट",
1120
+ "closeup": "क्लोज अप",
1121
+ "closup": "क्लोज अप",
1122
+ "pepsodent": "पेप्सोडेंट",
1123
+ "sensodyne": "सेन्सोडाइन",
1124
+ "battery": "बॅटरी",
1125
+ "packet": "पॅकेट",
1126
+ "snack": "स्नॅक्स",
1127
+ "snacks": "स्नॅक्स",
1128
+ "wafers": "वेफर्स",
1129
+ "shampoo": "शॅम्पू",
1130
+ "conditioner": "कंडिशनर",
1131
+ "talcumpowder": "टॅल्कम पावडर",
1132
+ "oil": "ऑईल",
1133
+ "coconutoil": "खोबरेल तेल",
1134
+ "hairoil": "केसांचे तेल",
1135
+
1136
+ // --- Regional Brands & FMCG Products ---
1137
+ "amul": "अमुल",
1138
+ "amuldudh": "अमुल दूध",
1139
+ "amulghee": "अमुल तूप",
1140
+ "amulbutter": "अमुल बटर",
1141
+ "amulpaneer": "अमुल पनीर",
1142
+ "amulcheese": "अमुल चीज",
1143
+ "gokul": "गोकुळ",
1144
+ "gokuldudh": "गोकुळ दूध",
1145
+ "warana": "वारणा",
1146
+ "katdaremasale": "काटदरे मसाले",
1147
+ "katdaregodamasala": "काटदरे गोडा मसाला",
1148
+ "kpramasale": "के-प्र मसाले",
1149
+ "bedekarachaar": "बेडेकर लोणचे",
1150
+ "bakarwadi": "बाकरवडी",
1151
+ "patanjali": "पतंजली",
1152
+ "patanjalighee": "पतंजली तूप",
1153
+ "patanjalihoney": "पतंजली मध",
1154
+ "dantkanti": "दंतकांती",
1155
+ "fortune": "फॉर्च्युन",
1156
+ "gemini": "जेमिनी",
1157
+ "geminioil": "जेमिनी तेल",
1158
+ "dhara": "धारा",
1159
+ "saffola": "सॅफोला",
1160
+ "quaker": "क्वेकर",
1161
+ "quakeroats": "क्वेकर ओट्स",
1162
+ "kissan": "किसान",
1163
+ "kissanjam": "किसान जॅम",
1164
+ "dabur": "दाबर",
1165
+ "daburhoney": "दाबर मध",
1166
+ "chyawanprash": "च्यवनप्राश",
1167
+ "hajmola": "हजमोला",
1168
+ "zandu": "झांडू",
1169
+ "zandubalm": "झांडू बाम",
1170
+ "tigerbalm": "टायगर बाम",
1171
+ "amrutanjan": "अमृतांजन",
1172
+ "moov": "मूव्ह",
1173
+ "volini": "व्होलिनी",
1174
+ "iodex": "आयोडॅक्स",
1175
+ "vicks": "व्हिक्स",
1176
+ "bourbon": "बर्बन",
1177
+ "hideandseek": "हाईड अँड सीक",
1178
+ "krackjack": "क्रॅकजॅक",
1179
+ "monaco": "मोनेको",
1180
+ "goodday": "गुड डे",
1181
+ "mariegold": "मेरी गोल्ड",
1182
+ "parleg": "पारले-जी",
1183
+ "oreo": "ओरियो",
1184
+ "darkfantasy": "डार्क फँटसी",
1185
+ "maggi": "मॅगी",
1186
+ "maggie": "मॅगी",
1187
+ "yippee": "यिप्पी",
1188
+ "chings": "चिंग्स",
1189
+ "tatasalt": "टाटा मीठ",
1190
+ "tatatea": "टाटा चहा",
1191
+ "tatapremium": "टाटा प्रीमियम",
1192
+ "redlabel": "रेड लेबल",
1193
+ "taazatea": "ताझा चहा",
1194
+ "waghbakritea": "वाघ बकरी चहा",
1195
+ "societytea": "सोसायटी चहा",
1196
+ "dhoop": "धूप",
1197
+ "dhoopbatti": "धूपबत्ती",
1198
+ "kapoor": "कापूर",
1199
+ "bhimsenikapoor": "भीमसेनी कापूर",
1200
+ "fulvaat": "फुलवात",
1201
+ "telvaat": "तेलवात",
1202
+ "haladikunku": "हळदीकुंकू",
1203
+ "gulal": "गुलाल",
1204
+ "bukka": "बुक्का",
1205
+ "rangoli": "रांगोळी",
1206
+ "velchipowder": "वेलची पूड",
1207
+ "jaiphal": "जायफळ",
1208
+ "javantri": "जायपत्री",
1209
+ "dalchini": "दालचिनी",
1210
+ "lavang": "लवंग",
1211
+ "kalimiri": "काळी मिरी",
1212
+ "shahjeere": "शहाजिरे",
1213
+ "badihop": "बडीशेप",
1214
+ "badishep": "बडीशेप",
1215
+ "ovaladana": "ओवा",
1216
+ "singhadatta": "शिंगाडा पीठ",
1217
+ "rajgiraladdu": "राजगिरा लाडू",
1218
+ "rajgiraatta": "राजगिरा पीठ",
1219
+ "manuka": "मनुका",
1220
+ "bedana": "बेदाणे",
1221
+ "charoli": "चारोळी",
1222
+ "khaskhas": "खसखस",
1223
+
1224
+
1225
+ // --- Extended English Loanwords with ॲ / ऑ & Ayurvedic/Herbals from Internet ---
1226
+ "apple": "ॲपल",
1227
+ "applecidervinegar": "ॲपल सायडर व्हिनेगर",
1228
+ "vinegar": "व्हिनेगर",
1229
+ "oats": "ओट्स",
1230
+ "oliveoil": "ऑलिव्ह ऑईल",
1231
+ "action": "ॲक्शन",
1232
+ "active": "ॲक्टिव्ह",
1233
+ "app": "ॲप",
1234
+ "advance": "ॲडव्हान्स",
1235
+ "address": "ॲड्रेस",
1236
+ "acid": "ॲसिड",
1237
+ "bat": "बॅट",
1238
+ "cat": "कॅट",
1239
+ "map": "मॅप",
1240
+ "hat": "हॅट",
1241
+ "bag": "बॅग",
1242
+ "bank": "बँक",
1243
+ "tanker": "टँकर",
1244
+ "gas": "गॅस",
1245
+ "fan": "फॅन",
1246
+ "lighter": "लायटर",
1247
+ "gaslighter": "गॅस लायटर",
1248
+ "foilpaper": "फॉईल पेपर",
1249
+ "tissue": "टिशू",
1250
+ "tissuepaper": "टिशू पेपर",
1251
+ "napkin": "नॅपकिन",
1252
+ "plasticbag": "प्लास्टिक पिशवी",
1253
+ "carrybag": "कॅरीबॅग",
1254
+ "order": "ऑर्डर",
1255
+ "orange": "ऑरेंज",
1256
+ "all": "ऑल",
1257
+ "already": "ऑलरेडी",
1258
+ "august": "ऑगस्ट",
1259
+ "auto": "ऑटो",
1260
+ "option": "ऑप्शन",
1261
+ "toilet": "टॉयलेट",
1262
+ "foil": "फॉईल",
1263
+ "boil": "बॉईल",
1264
+ "soil": "सॉईल",
1265
+ "dog": "डॉग",
1266
+ "cock": "कॉक",
1267
+ "brush": "ब्रश",
1268
+ "toothpaste": "टूथपेस्ट",
1269
+ "toothbrush": "टूथब्रश",
1270
+ "detergent": "डिटर्जंट",
1271
+ "washingpowder": "वॉशिंग पावडर",
1272
+ "phenyl": "फिनाईल",
1273
+
1274
+ // Ayurvedic, Medicinal & Special Grains
1275
+ "saindhav": "सैंधव मीठ",
1276
+ "sendhanamak": "सैंधव मीठ",
1277
+ "kalameeth": "काळे मीठ",
1278
+ "gavrantup": "गावरान तूप",
1279
+ "sajuktup": "साजूक तूप",
1280
+ "tilachetel": "तिळाचे तेल",
1281
+ "kulith": "कुळीथ",
1282
+ "kulithdal": "कुळीथ डाळ",
1283
+ "salichatandul": "साळीचा तांदूळ",
1284
+ "brownrice": "ब्राऊन राईस",
1285
+ "nachanipith": "नाचणी पीठ",
1286
+ "jawas": "जवस",
1287
+ "alshi": "अळशी",
1288
+ "triphala": "त्रिफळा चूर्ण",
1289
+ "ashwagandha": "अश्वगंधा पावडर",
1290
+ "bramhi": "ब्राह्मी",
1291
+ "shankhpushpi": "शंखपुष्पी",
1292
+ "jyeshthamadh": "ज्येष्ठमध",
1293
+ "jethimadh": "ज्येष्ठमध",
1294
+ "giloy": "गुळवेल",
1295
+ "gulvel": "गुळवेल",
1296
+ "tulsi": "तुळस",
1297
+ "tulsipane": "तुळशीची पाने",
1298
+ "arjunsaal": "अर्जुनसाल",
1299
+ "shatavari": "शतावरी",
1300
+ "hirda": "हिरडा",
1301
+ "behada": "बेहडा",
1302
+ "dink": "डिंक",
1303
+ "khanyachadink": "खाण्याचा डिंक",
1304
+ "bavchi": "बावची",
1305
+ "nagarmotha": "नागरमोथा",
1306
+ "pippali": "पिंपळी"
1307
+
1308
+ };
package/src/index.js CHANGED
@@ -207,10 +207,57 @@ export function getSuggestions(word, options = {}) {
207
207
  if (clean.endsWith("a") && s.endsWith("ा")) {
208
208
  add(s.slice(0, -1));
209
209
  }
210
+
211
+ // 4k. Smart Anusvara (टिंब) variants expansion (मराठी शुद्धलेखन)
212
+ // Automatically generates standard Marathi Anusvara spellings for conjunct nasals
213
+ // e.g. "बन्धु" -> "बंधू" / "बंधु", "सम्पत" -> "संपत", "आनन्द" -> "आनंद"
214
+ const anusvarRegex = /(?:न्|म्|ङ्|ञ्|ण्)(?=[क-ह])/g;
215
+ if (anusvarRegex.test(s)) {
216
+ const withAnusvar = s.replace(anusvarRegex, "ं");
217
+ add(withAnusvar);
218
+ if (withAnusvar.endsWith("ु")) add(withAnusvar.slice(0, -1) + "ू");
219
+ if (withAnusvar.endsWith("ू")) add(withAnusvar.slice(0, -1) + "ु");
220
+ if (withAnusvar.endsWith("ि")) add(withAnusvar.slice(0, -1) + "ी");
221
+ if (withAnusvar.endsWith("ी")) add(withAnusvar.slice(0, -1) + "ि");
222
+ }
223
+
224
+ // 4l. Chandra "ॉ" (Candra O, \u0949) and "ो" (O, \u094B)
225
+ // Essential for English loanwords in grocery & everyday shop items
226
+ // e.g. polish -> पॉलिश, coil -> कॉईल, coffee -> कॉफी, doctor -> डॉक्टर, sauce -> सॉस, box -> बॉक्स, ball -> बॉल, stock -> स्टॉक
227
+ if (s.includes("ो")) {
228
+ add(s.replace(/ो/g, "ॉ"));
229
+ } else if (s.includes("ॉ")) {
230
+ add(s.replace(/ॉ/g, "ो"));
231
+ }
232
+ if (s.startsWith("ओ")) {
233
+ add("ऑ" + s.slice(1));
234
+ } else if (s.startsWith("ऑ")) {
235
+ add("ओ" + s.slice(1));
236
+ }
237
+
238
+ // 4m. Chandra "ॅ" (Candra E, \u0945) and "े" (E) / "ै" (AI)
239
+ // For English loanwords: battery -> बॅटरी, packet -> पॅकेट, snack -> स्नॅक्स, bat -> बॅट, match -> मॅच
240
+ if (s.includes("े")) {
241
+ add(s.replace(/े/g, "ॅ"));
242
+ } else if (s.includes("ॅ")) {
243
+ add(s.replace(/ॅ/g, "े"));
244
+ }
245
+
246
+ // 4n. Smart Anusvara on "su" prefixes and "sunth"
247
+ // e.g. typing "sun" offers "सुं" (with anusvara) and "सुंठ"
248
+ if (clean.startsWith("sun")) {
249
+ add("सुं");
250
+ add("सुंठ");
251
+ }
252
+
253
+ // 4o. Smart "rajhans" and compound words
254
+ if (clean.startsWith("rajh")) {
255
+ add("राजहंस");
256
+ }
210
257
  }
211
258
 
212
- // 5. Prefix matches from dictionary (if clean.length >= 3)
213
- if (clean.length >= 3 && suggestions.length < max) {
259
+ // 5. Prefix matches from dictionary (if clean.length >= 2)
260
+ if (clean.length >= 2 && suggestions.length < max) {
214
261
  for (const [key, val] of Object.entries(MARATHI_DICTIONARY)) {
215
262
  if (key.startsWith(clean) && key !== clean) {
216
263
  add(val);
package/src/phonetics.js CHANGED
@@ -29,7 +29,8 @@ const CONSONANTS = [
29
29
  { en: "SH", mr: "ष", caseSensitive: true },
30
30
  { en: "sh", mr: "श" },
31
31
  { en: "ck", mr: "क" },
32
- { en: "ng", mr: "ङ" },
32
+ { en: "NG", mr: "ङ", caseSensitive: true },
33
+ { en: "ng", mr: "ंग" },
33
34
  { en: "c", mr: "क" },
34
35
 
35
36
  // Single consonants - case-sensitive retroflex & special Marathi sounds FIRST
@@ -128,9 +129,47 @@ export function phoneticTransliterateWord(text) {
128
129
  continue;
129
130
  }
130
131
 
131
- // Check independent vowel at the beginning of a word or after non-alpha
132
+ // Check independent vowel at the beginning of a word, after non-alpha, or after another vowel
132
133
  let matchedVowel = false;
133
- if (i === 0 || !/[a-zA-Z]/.test(clean[i - 1])) {
134
+ const prevChar = i > 0 ? clean[i - 1] : "";
135
+ const isAfterVowel = prevChar && /[aeiou]/i.test(prevChar);
136
+
137
+ if (i === 0 || !/[a-zA-Z]/.test(prevChar) || isAfterVowel) {
138
+ if (isAfterVowel) {
139
+ const nextTwo = clean.substring(i, i + 2).toLowerCase();
140
+ if (nextTwo === "ee" || nextTwo === "ii") {
141
+ res += "ई";
142
+ i += 2;
143
+ matchedVowel = true;
144
+ } else if (nextTwo === "oo" || nextTwo === "uu") {
145
+ res += "ऊ";
146
+ i += 2;
147
+ matchedVowel = true;
148
+ } else if (clean[i].toLowerCase() === "i") {
149
+ res += "ई";
150
+ i += 1;
151
+ matchedVowel = true;
152
+ } else if (clean[i].toLowerCase() === "u") {
153
+ res += "ऊ";
154
+ i += 1;
155
+ matchedVowel = true;
156
+ } else if (clean[i].toLowerCase() === "a") {
157
+ i += 1;
158
+ matchedVowel = true;
159
+ }
160
+ }
161
+
162
+ if (!matchedVowel) {
163
+ const initialNasal = clean.substring(i, i + 2).toLowerCase();
164
+ if (initialNasal === 'am' || initialNasal === 'an') {
165
+ const charAfter = clean[i + 2];
166
+ const isFollowedByVowel = charAfter && /[aeiouA]/i.test(charAfter);
167
+ if (!isFollowedByVowel) {
168
+ res += 'अं';
169
+ i += 2;
170
+ matchedVowel = true;
171
+ }
172
+ }
134
173
  for (const v of INDEPENDENT_VOWELS) {
135
174
  const sub = clean.substring(i, i + v.en.length);
136
175
  const isMatch = v.caseSensitive ? sub === v.en : sub.toLowerCase() === v.en.toLowerCase();
@@ -141,6 +180,7 @@ export function phoneticTransliterateWord(text) {
141
180
  break;
142
181
  }
143
182
  }
183
+ }
144
184
  if (matchedVowel) continue;
145
185
  }
146
186
 
@@ -157,7 +197,23 @@ export function phoneticTransliterateWord(text) {
157
197
 
158
198
  // Check for attached vowel matra
159
199
  let matchedMatra = false;
160
- for (const m of MATRAS) {
200
+
201
+ // Check 2-letter nasal matras (am, an) representing Marathi Anusvara (ं)
202
+ // when followed by a consonant or at end of word.
203
+ // e.g. 'bandhu' -> 'ब' + 'ं' + 'धु' = 'बंधु', 'sampat' -> 'संपत', 'pankaj' -> 'पंकज'
204
+ const nextTwo = clean.substring(i, i + 2).toLowerCase();
205
+ if (nextTwo === 'am' || nextTwo === 'an') {
206
+ const charAfter = clean[i + 2];
207
+ const isFollowedByVowel = charAfter && /[aeiouA]/i.test(charAfter);
208
+ if (!isFollowedByVowel) {
209
+ res += 'ं';
210
+ i += 2;
211
+ matchedMatra = true;
212
+ }
213
+ }
214
+
215
+ if (!matchedMatra) {
216
+ for (const m of MATRAS) {
161
217
  const nextSub = clean.substring(i, i + m.en.length);
162
218
  const mCaseSensitive = m.caseSensitive || m.en === "A";
163
219
  const mMatch = mCaseSensitive ? nextSub === m.en : nextSub.toLowerCase() === m.en.toLowerCase();
@@ -175,6 +231,7 @@ export function phoneticTransliterateWord(text) {
175
231
  break;
176
232
  }
177
233
  }
234
+ }
178
235
 
179
236
  // If no vowel followed and next character is also a consonant, apply halant (virama ्)
180
237
  // In Marathi/Hindi phonetics, word-final consonants do NOT get halant
@@ -195,5 +252,8 @@ export function phoneticTransliterateWord(text) {
195
252
  }
196
253
  }
197
254
 
255
+ // Standard Marathi Shuddhalekhan Rule: nasal conjuncts before consonants become Anusvara
256
+ res = res.replace(/(?:न्|म्|ङ्|ञ्|ण्)(?=[क-ह])/g, "ं");
257
+
198
258
  return res;
199
259
  }