marathi-transliterate 1.5.0 → 1.7.1

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.5.0",
3
+ "version": "1.7.1",
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
@@ -1303,6 +1303,340 @@ export const MARATHI_DICTIONARY = {
1303
1303
  "khanyachadink": "खाण्याचा डिंक",
1304
1304
  "bavchi": "बावची",
1305
1305
  "nagarmotha": "नागरमोथा",
1306
- "pippali": "पिंपळी"
1306
+ "pippali": "पिंपळी",
1307
1307
 
1308
+ // Kranti (Famous Maharashtrian edible oil brand & name)
1309
+ "kranti": "क्रांती",
1310
+ "cranti": "क्रांती",
1311
+ "kraanti": "क्रांती",
1312
+ "krantee": "क्रांती",
1313
+ "krantioil": "क्रांती तेल",
1314
+ "krantitel": "क्रांती तेल",
1315
+ "krantisunfloweroil": "क्रांती सूर्यफूल तेल",
1316
+ "krantisoyabeanoil": "क्रांती सोयाबीन तेल",
1317
+ "krantigroundnutoil": "क्रांती शेंगदाणा तेल",
1318
+
1319
+ // Electricals, Lighting & General Store terms (Watt, Bulb, LED, etc.)
1320
+ "watt": "वॉट",
1321
+ "watts": "वॉट",
1322
+ "wat": "वाट",
1323
+ "waat": "वाट",
1324
+ "vat": "वात",
1325
+ "bulb": "बल्ब",
1326
+ "bulbs": "बल्ब",
1327
+ "balb": "बल्ब",
1328
+ "led": "एलईडी",
1329
+ "cfl": "सीएफएल",
1330
+ "switch": "स्विच",
1331
+ "switches": "स्विचेस",
1332
+ "socket": "सॉकेट",
1333
+ "wire": "वायर",
1334
+ "wires": "वायर",
1335
+ "plug": "प्लग",
1336
+ "holder": "होल्डर",
1337
+ "tester": "टेस्टर",
1338
+ "tubelight": "ट्युबलाईट",
1339
+ "tube": "ट्यूब",
1340
+ "cell": "सेल",
1341
+ "adaptor": "अ‍ॅडॉप्टर",
1342
+ "adapter": "अ‍ॅडॉप्टर",
1343
+ "cable": "केबल",
1344
+ "fuse": "फ्युज",
1345
+ "mcb": "एमसीबी",
1346
+ "choke": "चोक",
1347
+ "starter": "स्टार्टर",
1348
+ "tape": "टेप",
1349
+ "insulationtape": "इन्स्युलेशन टेप",
1350
+ "regulator": "रेग्युलेटर",
1351
+ "board": "बोर्ड",
1352
+ "extensionboard": "एक्स्टेंशन बोर्ड",
1353
+
1354
+ // Common Marathi vocabulary & items
1355
+ "shanti": "शांती",
1356
+ "shaanti": "शांती",
1357
+ "shantee": "शांती",
1358
+ "kanti": "कांती",
1359
+ "vati": "वाटी",
1360
+ "vatya": "वाट्या",
1361
+ "watti": "वाटी",
1362
+ "wattya": "वाट्या",
1363
+
1364
+ // Anand & names
1365
+ "anand": "आनंद",
1366
+ "aanand": "आनंद",
1367
+
1368
+ // Common customer honorifics, titles, relations and grocery staples
1369
+ "bhaiyya": "भैय्या",
1370
+ "bhaiya": "भैया",
1371
+ "bhayya": "भय्या",
1372
+ "bhaiyys": "भैय्या",
1373
+ "bhaiyas": "भैया",
1374
+ "bhai": "भाई",
1375
+ "bhau": "भाऊ",
1376
+ "mama": "मामा",
1377
+ "kaka": "काका",
1378
+ "nana": "नाना",
1379
+ "bapu": "बापू",
1380
+ "babu": "बाबू",
1381
+ "tai": "ताई",
1382
+ "aai": "आई",
1383
+ "didi": "दीदी",
1384
+ "aaba": "आबा",
1385
+ "aba": "आबा",
1386
+ "saheb": "साहेब",
1387
+ "sahab": "साहेब",
1388
+ "sheth": "शेठ",
1389
+ "seth": "शेठ",
1390
+ "shethji": "शेठजी",
1391
+ "anna": "अण्णा",
1392
+ "appa": "आप्पा",
1393
+ "rao": "राव",
1394
+ "chaha": "चहा",
1395
+ "bhaji": "भाजी",
1396
+ "poha": "पोहे",
1397
+ "pohe": "पोहे",
1398
+ "khari": "खारी",
1399
+ "toast": "टोस्ट",
1400
+
1401
+ // Fast typing & plural slips (ending in s / ys)
1402
+ "bhais": "भाई",
1403
+ "bhaus": "भाऊ",
1404
+ "bhaiyyas": "भैय्या",
1405
+ "bhaiyas": "भैया",
1406
+ "bhayyas": "भय्या",
1407
+ "kakas": "काका",
1408
+ "kakis": "काकी",
1409
+ "mamas": "मामा",
1410
+ "mamis": "मामी",
1411
+ "dadas": "दादा",
1412
+ "nanas": "नाना",
1413
+ "nanis": "नानी",
1414
+ "tais": "ताई",
1415
+ "taais": "ताई",
1416
+ "didis": "दीदी",
1417
+ "sahebs": "साहेब",
1418
+ "sheths": "शेठ",
1419
+ "seths": "शेठ",
1420
+ "annas": "अण्णा",
1421
+ "appas": "आप्पा",
1422
+ "patils": "पाटील",
1423
+ "deshmukhs": "देशमुख",
1424
+ "pawars": "पवार",
1425
+ "shindes": "शिंदे",
1426
+ "jadhavs": "जाधव",
1427
+
1428
+ // Family & Kinship terms
1429
+ "taai": "ताई",
1430
+ "kaki": "काकी",
1431
+ "mami": "मामी",
1432
+ "nani": "नानी",
1433
+ "aaji": "आजी",
1434
+ "aji": "आजी",
1435
+ "aajoba": "आजोबा",
1436
+ "ajoba": "आजोबा",
1437
+ "mavshi": "मावशी",
1438
+ "maushi": "मावशी",
1439
+ "moushi": "मावशी",
1440
+ "vahini": "वहिनी",
1441
+ "wahini": "वहिनी",
1442
+ "bhavji": "भावजी",
1443
+ "bhaoji": "भावजी",
1444
+ "aatya": "आत्या",
1445
+ "atya": "आत्या",
1446
+ "sasre": "सासरे",
1447
+ "sasu": "सासू",
1448
+ "sasubai": "सासूबाई",
1449
+ "javai": "जावई",
1450
+ "dir": "दीर",
1451
+ "tatya": "तात्या",
1452
+ "tatyas": "तात्या",
1453
+ "pant": "पंत",
1454
+ "chota": "छोटा",
1455
+ "chhota": "छोटा",
1456
+ "motha": "मोठा",
1457
+
1458
+ // Titles, prefixes & respectful forms
1459
+ "sau": "सौ.",
1460
+ "smt": "श्रीमती",
1461
+ "shri": "श्री",
1462
+ "shree": "श्री",
1463
+ "chiranjiv": "चिरंजीव",
1464
+ "chi": "चि.",
1465
+ "kumari": "कुमारी",
1466
+ "ku": "कु.",
1467
+ "sir": "सर",
1468
+ "madam": "मॅडम",
1469
+ "sethji": "शेठजी",
1470
+ "bapuji": "बापूजी",
1471
+ "babuji": "बाबूजी",
1472
+
1473
+ // Compound -saheb names
1474
+ "bhausaheb": "भाऊसाहेब",
1475
+ "bhausahebs": "भाऊसाहेब",
1476
+ "dadasaheb": "दादासाहेब",
1477
+ "dadasahebs": "दादासाहेब",
1478
+ "kakasaheb": "काकासाहेब",
1479
+ "kakasahebs": "काकासाहेब",
1480
+ "mamasaheb": "मामासाहेब",
1481
+ "mamasahebs": "मामासाहेब",
1482
+ "nanasaheb": "नानासाहेब",
1483
+ "nanasahebs": "नानासाहेब",
1484
+ "appasaheb": "आप्पासाहेब",
1485
+ "appasahebs": "आप्पासाहेब",
1486
+ "annasaheb": "अण्णासाहेब",
1487
+ "annasahebs": "अण्णासाहेब",
1488
+ "babasaheb": "बाबासाहेब",
1489
+ "babasahebs": "बाबासाहेब",
1490
+ "balasaheb": "बाळासाहेब",
1491
+ "tatyasaheb": "तात्यासाहेब",
1492
+ "patilsaheb": "पाटीलसाहेब",
1493
+ "shethsaheb": "शेठसाहेब",
1494
+ "doctorsaheb": "डॉक्टरसाहेब",
1495
+
1496
+ // Compound -rao names
1497
+ "baburao": "बाबूराव",
1498
+ "anandrao": "आनंदराव",
1499
+ "anandarao": "आनंदराव",
1500
+ "shankarrao": "शंकरराव",
1501
+ "govindrao": "गोविंदराव",
1502
+ "ganpatrao": "गणपतराव",
1503
+ "subhashrao": "सुभाषराव",
1504
+ "madhavrao": "माधवराव",
1505
+ "yashwantrao": "यशवंतराव",
1506
+ "vilasrao": "विलासराव",
1507
+ "chandrakantrao": "चंद्रकांतराव",
1508
+ "ashokrao": "अशोकराव",
1509
+ "rameshrao": "रमेशराव",
1510
+ "sureshrao": "सुरेशराव",
1511
+ "diliprao": "दिलीपराव",
1512
+ "dadarao": "दादाराव",
1513
+ "patilrao": "पाटीलराव",
1514
+ "shinderao": "शिंदेराव",
1515
+ "deshmukhrao": "देशमुखराव",
1516
+
1517
+ // Common Maharashtra Surnames
1518
+ "patil": "पाटील",
1519
+ "deshmukh": "देशमुख",
1520
+ "pawar": "पवार",
1521
+ "shinde": "शिंदे",
1522
+ "jadhav": "जाधव",
1523
+ "jadhao": "जाधव",
1524
+ "more": "मोरे",
1525
+ "kadam": "कदम",
1526
+ "chavan": "चव्हाण",
1527
+ "gaikwad": "गायकवाड",
1528
+ "joshi": "जोशी",
1529
+ "kulkarni": "कुलकर्णी",
1530
+ "ghadge": "घाडगे",
1531
+ "bhosale": "भोसले",
1532
+ "bhosle": "भोसले",
1533
+ "raut": "राऊत",
1534
+ "kale": "काळे",
1535
+ "salunkhe": "साळुंखे",
1536
+ "thakur": "ठाकूर",
1537
+ "sawant": "सावंत",
1538
+ "mane": "माने",
1539
+ "shelke": "शेळके",
1540
+ "jagtap": "जगताप",
1541
+ "wagh": "वाघ",
1542
+ "shete": "शेटे",
1543
+ "khot": "खोत",
1544
+ "nikam": "निकम",
1545
+ "koli": "कोळी",
1546
+ "sonawane": "सोनवणे",
1547
+ "tamboli": "तांबोळी",
1548
+ "magar": "मगर",
1549
+ "ghorpade": "घोरपडे",
1550
+ "darekar": "दरेकर",
1551
+ "gavande": "गवंडे",
1552
+ "gawande": "गवंडे",
1553
+ "katore": "कटोरे",
1554
+ "borade": "बोराडे",
1555
+ "ghule": "घुले",
1556
+ "landge": "लांडगे",
1557
+ "khule": "खुळे",
1558
+ "bidkar": "बीडकर",
1559
+ "sharma": "शर्मा",
1560
+ "verma": "वर्मा",
1561
+ "gupta": "गुप्ता",
1562
+ "shah": "शाह",
1563
+ "jain": "जैन",
1564
+ "agarwal": "अगरवाल",
1565
+ "singh": "सिंग",
1566
+
1567
+ // Common Given Names
1568
+ "sachin": "सचिन",
1569
+ "rahul": "राहुल",
1570
+ "amit": "अमित",
1571
+ "amol": "अमोल",
1572
+ "atul": "अतुल",
1573
+ "ajay": "अजय",
1574
+ "vijay": "विजय",
1575
+ "sanjay": "संजय",
1576
+ "sunil": "सुनील",
1577
+ "anil": "अनिल",
1578
+ "ramesh": "रमेश",
1579
+ "suresh": "सुरेश",
1580
+ "ganesh": "गणेश",
1581
+ "mahesh": "महेश",
1582
+ "dinesh": "दिनेश",
1583
+ "santosh": "संतोष",
1584
+ "vikas": "विकास",
1585
+ "prakash": "प्रकाश",
1586
+ "pradeep": "प्रदीप",
1587
+ "pradip": "प्रदीप",
1588
+ "sandip": "संदीप",
1589
+ "sandeep": "संदीप",
1590
+ "deepak": "दीपक",
1591
+ "dipak": "दीपक",
1592
+ "rohit": "रोहित",
1593
+ "nitin": "नितीन",
1594
+ "kiran": "किरण",
1595
+ "ashok": "अशोक",
1596
+ "swapnil": "स्वप्निल",
1597
+ "mangesh": "मंगेश",
1598
+ "yogesh": "योगेश",
1599
+ "nilesh": "निलेश",
1600
+ "pravin": "प्रवीण",
1601
+ "prashant": "प्रशांत",
1602
+ "sudhir": "सुधीर",
1603
+ "subhash": "सुभाष",
1604
+ "bhagwan": "भगवान",
1605
+ "vishnu": "विष्णू",
1606
+ "pandurang": "पांडुरंग",
1607
+ "tukaram": "तुकाराम",
1608
+ "dnyaneshwar": "ज्ञानेश्वर",
1609
+ "namdev": "नामदेव",
1610
+ "eknath": "एकनाथ",
1611
+ "maruti": "मारुती",
1612
+ "mahadev": "महादेव",
1613
+ "khandu": "खंडू",
1614
+ "chhabu": "छाबू",
1615
+
1616
+ // Dairy & Grocery Staples
1617
+ "doodh": "दूध",
1618
+ "dudh": "दूध",
1619
+ "toop": "तूप",
1620
+ "tup": "तूप",
1621
+ "taak": "ताक",
1622
+ "tak": "ताक",
1623
+ "dahi": "दही",
1624
+ "lonche": "लोणचे",
1625
+ "loncha": "लोणचे",
1626
+ "papad": "पापड",
1627
+ "kurdaya": "कुरडया",
1628
+ "kurdai": "कुरडई",
1629
+ "sandge": "सांडगे",
1630
+ "shev": "शेव",
1631
+ "farsan": "फरसाण",
1632
+ "chivda": "चिवडा",
1633
+ "ladu": "लाडू",
1634
+ "ladoo": "लाडू",
1635
+ "pedha": "पेढा",
1636
+ "peda": "पेढा",
1637
+ "barfi": "बर्फी",
1638
+ "jalebi": "जिलेबी",
1639
+ "gulabjamun": "गुलाबजाम",
1640
+ "biscuit": "बिस्कीट",
1308
1641
  };
1642
+
package/src/dom.js CHANGED
@@ -218,7 +218,7 @@ export function attachDevanagari(target, options = {}) {
218
218
  selectCandidate(selectedIndex, e.key === 'Enter' ? '' : ' ');
219
219
  return;
220
220
  }
221
- if (e.key === ' ') {
221
+ if (e.key === ' ' || e.key === 'Spacebar' || e.code === 'Space') {
222
222
  e.preventDefault();
223
223
  selectCandidate(selectedIndex, ' ');
224
224
  return;
package/src/index.js CHANGED
@@ -53,6 +53,37 @@ export function transliterateWord(word) {
53
53
  return MARATHI_DICTIONARY[clean];
54
54
  }
55
55
 
56
+ // 1b. Check trailing "s" fast-typing slip (e.g. bhais -> भाई, bhaus -> भाऊ, kakas -> काका)
57
+ if (clean.endsWith("s") && clean.length > 2) {
58
+ const base = clean.replace(/s+$/, "");
59
+ if (MARATHI_DICTIONARY[base]) {
60
+ return MARATHI_DICTIONARY[base];
61
+ }
62
+ }
63
+
64
+ // 1c. Check compound honorific suffixes (-saheb, -sahab, -rao, -sheth, -seth, -ji, -bai)
65
+ if (clean.endsWith("saheb") && clean.length > 5) {
66
+ return transliterateWord(clean.slice(0, -5)) + "साहेब";
67
+ }
68
+ if (clean.endsWith("sahab") && clean.length > 5) {
69
+ return transliterateWord(clean.slice(0, -5)) + "साहेब";
70
+ }
71
+ if (clean.endsWith("rao") && clean.length > 3) {
72
+ return transliterateWord(clean.slice(0, -3)) + "राव";
73
+ }
74
+ if (clean.endsWith("sheth") && clean.length > 5) {
75
+ return transliterateWord(clean.slice(0, -5)) + "शेठ";
76
+ }
77
+ if (clean.endsWith("seth") && clean.length > 4) {
78
+ return transliterateWord(clean.slice(0, -4)) + "शेठ";
79
+ }
80
+ if (clean.endsWith("ji") && clean.length > 3) {
81
+ return transliterateWord(clean.slice(0, -2)) + "जी";
82
+ }
83
+ if (clean.endsWith("bai") && clean.length > 4) {
84
+ return transliterateWord(clean.slice(0, -3)) + "बाई";
85
+ }
86
+
56
87
  // 2. Check local/memory cache
57
88
  const cached = getCachedWord(clean);
58
89
  if (cached && cached.length > 0) {
@@ -100,6 +131,12 @@ export const toDevanagari = transliterate;
100
131
  * @param {boolean} [options.includeOriginal=true]
101
132
  * @returns {string[]}
102
133
  */
134
+ function transiterateCompound(prefix, suffix) {
135
+ if (!prefix) return suffix;
136
+ const p = MARATHI_DICTIONARY[prefix] || phoneticTransliterateWord(prefix);
137
+ return p + suffix;
138
+ }
139
+
103
140
  export function getSuggestions(word, options = {}) {
104
141
  if (!word || !word.trim()) return [];
105
142
  const clean = word.toLowerCase().trim();
@@ -223,11 +260,13 @@ export function getSuggestions(word, options = {}) {
223
260
 
224
261
  // 4l. Chandra "ॉ" (Candra O, \u0949) and "ो" (O, \u094B)
225
262
  // Essential for English loanwords in grocery & everyday shop items
226
- // e.g. polish -> पॉलिश, coil -> कॉईल, coffee -> कॉफी, doctor -> डॉक्टर, sauce -> सॉस, box -> बॉक्स, ball -> बॉल, stock -> स्टॉक
263
+ // e.g. watt -> वॉट / वॅट / वाट, polish -> पॉलिश, coil -> कॉईल, coffee -> कॉफी, doctor -> डॉक्टर, sauce -> सॉस, box -> बॉक्स, ball -> बॉल, stock -> स्टॉक
227
264
  if (s.includes("ो")) {
228
265
  add(s.replace(/ो/g, "ॉ"));
229
266
  } else if (s.includes("ॉ")) {
230
267
  add(s.replace(/ॉ/g, "ो"));
268
+ add(s.replace(/ॉ/g, "ॅ"));
269
+ add(s.replace(/ॉ/g, "ा"));
231
270
  }
232
271
  if (s.startsWith("ओ")) {
233
272
  add("ऑ" + s.slice(1));
@@ -241,6 +280,7 @@ export function getSuggestions(word, options = {}) {
241
280
  add(s.replace(/े/g, "ॅ"));
242
281
  } else if (s.includes("ॅ")) {
243
282
  add(s.replace(/ॅ/g, "े"));
283
+ add(s.replace(/ॅ/g, "ॉ"));
244
284
  }
245
285
 
246
286
  // 4n. Smart Anusvara on "su" prefixes and "sunth"
@@ -254,6 +294,49 @@ export function getSuggestions(word, options = {}) {
254
294
  if (clean.startsWith("rajh")) {
255
295
  add("राजहंस");
256
296
  }
297
+
298
+ // 4p. Smart Kana + Anusvara (ां) expansion (मराठी शुद्धलेखन)
299
+ // e.g. "kranti" -> "क्रांती" / "क्रांति", "shanti" -> "शांती", "kanti" -> "कांती", "kanda" -> "कांदा", "gandhi" -> "गांधी"
300
+ if (s.includes("ं")) {
301
+ const withKanaAnusvar = s.replace(/([^ािीुूेैोौॉॅ्\s])ं/g, "$1ां");
302
+ if (withKanaAnusvar !== s) {
303
+ add(withKanaAnusvar);
304
+ if (withKanaAnusvar.endsWith("ि")) add(withKanaAnusvar.slice(0, -1) + "ी");
305
+ if (withKanaAnusvar.endsWith("ी")) add(withKanaAnusvar.slice(0, -1) + "ि");
306
+ }
307
+ }
308
+
309
+ // 4q. Customer honorifics & bhai/bhau expansions
310
+ if (clean.startsWith("bhai") || clean.startsWith("bhay")) {
311
+ add("भैय्या");
312
+ add("भैया");
313
+ add("भय्या");
314
+ add("भाई");
315
+ }
316
+ if (clean.startsWith("bhau")) {
317
+ add("भाऊ");
318
+ }
319
+ if (clean.endsWith("s") && clean.length > 2) {
320
+ const base = clean.replace(/s+$/, "");
321
+ if (MARATHI_DICTIONARY[base]) {
322
+ add(MARATHI_DICTIONARY[base]);
323
+ }
324
+ }
325
+ if (clean.endsWith("saheb") && clean.length > 5) {
326
+ add(transiterateCompound(clean.slice(0, -5), "साहेब"));
327
+ }
328
+ if (clean.endsWith("rao") && clean.length > 3) {
329
+ add(transiterateCompound(clean.slice(0, -3), "राव"));
330
+ }
331
+ if (clean.endsWith("sheth") && clean.length > 5) {
332
+ add(transiterateCompound(clean.slice(0, -5), "शेठ"));
333
+ }
334
+
335
+ }
336
+
337
+ // Background fetch to enrich cache if online (non-blocking)
338
+ if (typeof fetch !== "undefined" && !getCachedWord(clean)) {
339
+ fetchOnlineMarathi(clean).catch(() => {});
257
340
  }
258
341
 
259
342
  // 5. Prefix matches from dictionary (if clean.length >= 2)
package/src/phonetics.js CHANGED
@@ -63,7 +63,12 @@ const CONSONANTS = [
63
63
 
64
64
  const INDEPENDENT_VOWELS = [
65
65
  { en: "aa", mr: "आ" },
66
- { en: "A", mr: "आ" },
66
+ { en: "A", mr: "आ", caseSensitive: true },
67
+ { en: "ai", mr: "ऐ" },
68
+ { en: "ay", mr: "ऐ" },
69
+ { en: "au", mr: "औ" },
70
+ { en: "ou", mr: "औ" },
71
+ { en: "ow", mr: "औ" },
67
72
  { en: "a", mr: "अ" },
68
73
  { en: "ee", mr: "ई" },
69
74
  { en: "ii", mr: "ई" },
@@ -71,11 +76,6 @@ const INDEPENDENT_VOWELS = [
71
76
  { en: "oo", mr: "ऊ" },
72
77
  { en: "uu", mr: "ऊ" },
73
78
  { en: "u", mr: "उ" },
74
- { en: "ai", mr: "ऐ" },
75
- { en: "ay", mr: "ऐ" },
76
- { en: "au", mr: "औ" },
77
- { en: "ou", mr: "औ" },
78
- { en: "ow", mr: "औ" },
79
79
  { en: "e", mr: "ए" },
80
80
  { en: "o", mr: "ओ" },
81
81
  { en: "am", mr: "अं" },
@@ -86,8 +86,14 @@ const INDEPENDENT_VOWELS = [
86
86
  ];
87
87
 
88
88
  const MATRAS = [
89
+ { en: "ao", mr: "ाव" },
89
90
  { en: "aa", mr: "ा" },
90
- { en: "A", mr: "ा" },
91
+ { en: "A", mr: "ा", caseSensitive: true },
92
+ { en: "ai", mr: "ै" },
93
+ { en: "ay", mr: "ै" },
94
+ { en: "au", mr: "ौ" },
95
+ { en: "ou", mr: "ौ" },
96
+ { en: "ow", mr: "ौ" },
91
97
  { en: "a", mr: "" }, // Inherent vowel: cancels halant; at word end becomes kana
92
98
  { en: "ee", mr: "ी" },
93
99
  { en: "ii", mr: "ी" },
@@ -95,11 +101,6 @@ const MATRAS = [
95
101
  { en: "oo", mr: "ू" },
96
102
  { en: "uu", mr: "ू" },
97
103
  { en: "u", mr: "ु" },
98
- { en: "ai", mr: "ै" },
99
- { en: "ay", mr: "ै" },
100
- { en: "au", mr: "ौ" },
101
- { en: "ou", mr: "ौ" },
102
- { en: "ow", mr: "ौ" },
103
104
  { en: "e", mr: "े" },
104
105
  { en: "o", mr: "ो" },
105
106
  { en: "am", mr: "ं" },
@@ -153,6 +154,10 @@ export function phoneticTransliterateWord(text) {
153
154
  res += "ऊ";
154
155
  i += 1;
155
156
  matchedVowel = true;
157
+ } else if (clean[i].toLowerCase() === "o" && prevChar.toLowerCase() === "a") {
158
+ res += "व";
159
+ i += 1;
160
+ matchedVowel = true;
156
161
  } else if (clean[i].toLowerCase() === "a") {
157
162
  i += 1;
158
163
  matchedVowel = true;