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 +1 -1
- package/src/dictionary.js +335 -1
- package/src/dom.js +1 -1
- package/src/index.js +84 -1
- package/src/phonetics.js +17 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "marathi-transliterate",
|
|
3
|
-
"version": "1.
|
|
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;
|