marathi-transliterate 1.5.0 → 1.6.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.5.0",
3
+ "version": "1.6.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
@@ -1303,6 +1303,62 @@ export const MARATHI_DICTIONARY = {
1303
1303
  "khanyachadink": "खाण्याचा डिंक",
1304
1304
  "bavchi": "बावची",
1305
1305
  "nagarmotha": "नागरमोथा",
1306
- "pippali": "पिंपळी"
1306
+ "pippali": "पिंपळी",
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": "वाट्या"
1307
1363
 
1308
1364
  };
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
@@ -223,11 +223,13 @@ export function getSuggestions(word, options = {}) {
223
223
 
224
224
  // 4l. Chandra "ॉ" (Candra O, \u0949) and "ो" (O, \u094B)
225
225
  // Essential for English loanwords in grocery & everyday shop items
226
- // e.g. polish -> पॉलिश, coil -> कॉईल, coffee -> कॉफी, doctor -> डॉक्टर, sauce -> सॉस, box -> बॉक्स, ball -> बॉल, stock -> स्टॉक
226
+ // e.g. watt -> वॉट / वॅट / वाट, polish -> पॉलिश, coil -> कॉईल, coffee -> कॉफी, doctor -> डॉक्टर, sauce -> सॉस, box -> बॉक्स, ball -> बॉल, stock -> स्टॉक
227
227
  if (s.includes("ो")) {
228
228
  add(s.replace(/ो/g, "ॉ"));
229
229
  } else if (s.includes("ॉ")) {
230
230
  add(s.replace(/ॉ/g, "ो"));
231
+ add(s.replace(/ॉ/g, "ॅ"));
232
+ add(s.replace(/ॉ/g, "ा"));
231
233
  }
232
234
  if (s.startsWith("ओ")) {
233
235
  add("ऑ" + s.slice(1));
@@ -241,6 +243,7 @@ export function getSuggestions(word, options = {}) {
241
243
  add(s.replace(/े/g, "ॅ"));
242
244
  } else if (s.includes("ॅ")) {
243
245
  add(s.replace(/ॅ/g, "े"));
246
+ add(s.replace(/ॅ/g, "ॉ"));
244
247
  }
245
248
 
246
249
  // 4n. Smart Anusvara on "su" prefixes and "sunth"
@@ -254,6 +257,22 @@ export function getSuggestions(word, options = {}) {
254
257
  if (clean.startsWith("rajh")) {
255
258
  add("राजहंस");
256
259
  }
260
+
261
+ // 4p. Smart Kana + Anusvara (ां) expansion (मराठी शुद्धलेखन)
262
+ // e.g. "kranti" -> "क्रांती" / "क्रांति", "shanti" -> "शांती", "kanti" -> "कांती", "kanda" -> "कांदा", "gandhi" -> "गांधी"
263
+ if (s.includes("ं")) {
264
+ const withKanaAnusvar = s.replace(/([^ािीुूेैोौॉॅ्\s])ं/g, "$1ां");
265
+ if (withKanaAnusvar !== s) {
266
+ add(withKanaAnusvar);
267
+ if (withKanaAnusvar.endsWith("ि")) add(withKanaAnusvar.slice(0, -1) + "ी");
268
+ if (withKanaAnusvar.endsWith("ी")) add(withKanaAnusvar.slice(0, -1) + "ि");
269
+ }
270
+ }
271
+ }
272
+
273
+ // Background fetch to enrich cache if online (non-blocking)
274
+ if (typeof fetch !== "undefined" && !getCachedWord(clean)) {
275
+ fetchOnlineMarathi(clean).catch(() => {});
257
276
  }
258
277
 
259
278
  // 5. Prefix matches from dictionary (if clean.length >= 2)