@indic-tools/hindi-transliterate
Version:
Transliterates text from devanagiri script to latin script
269 lines (254 loc) • 4.6 kB
JavaScript
function transliterate(text, sanskritMode = false) {
const words = text.split(" ");
const result = [];
for (const word of words) {
const hunterianWord = _devanagariToHunterian(word, sanskritMode);
result.push(hunterianWord);
}
return result.join(" ");
}
function _devanagariToHunterian(text, sanskritMode) {
const casualMap = {
अ: "a",
आ: "aa",
इ: "i",
ई: "ii",
उ: "u",
ऊ: "uu",
ऋ: "ṛ",
ॠ: "ṝ",
ऌ: "ḷ",
ॡ: "ḹ",
ए: "e",
ऐ: "ai",
ओ: "o",
औ: "au",
क: "k",
ख: "kh",
ग: "g",
घ: "gh",
ङ: "ṅ",
च: "ch",
छ: "chh",
ज: "j",
झ: "jh",
ञ: "ñ",
ट: "ṭ",
ठ: "ṭh",
ड: "ḍ",
ढ: "ḍh",
ण: "ṇ",
त: "t",
थ: "th",
द: "d",
ध: "dh",
न: "n",
प: "p",
फ: "ph",
ब: "b",
भ: "bh",
म: "m",
य: "y",
र: "r",
ल: "l",
व: "v",
श: "sh",
ष: "sh",
स: "s",
ह: "h",
क्ष: "ksh",
त्र: "tr",
ज्ञ: "jñ",
"ा": "aa",
"ि": "i",
"ी": "ii",
"ु": "u",
"ू": "uu",
"ृ": "ṛ",
"ॄ": "ṝ",
"ॢ": "ḷ",
"ॣ": "ḹ",
"े": "e",
"ै": "ai",
"ो": "o",
"ौ": "au",
"ं": "n",
"ः": "ḥ",
"ँ": "n",
"्": "",
};
const sanskritMap = {
अ: "a",
आ: "ā",
इ: "i",
ई: "ī",
उ: "u",
ऊ: "ū",
ऋ: "ṛ",
ॠ: "ṝ",
ऌ: "ḷ",
ॡ: "ḹ",
ए: "e",
ऐ: "ai",
ओ: "o",
औ: "au",
क: "k",
ख: "kh",
ग: "g",
घ: "gh",
ङ: "ṅ",
च: "ch",
छ: "chh",
ज: "j",
झ: "jh",
ञ: "ñ",
ट: "ṭ",
ठ: "ṭh",
ड: "ḍ",
ढ: "ḍh",
ण: "ṇ",
त: "t",
थ: "th",
द: "d",
ध: "dh",
न: "n",
प: "p",
फ: "ph",
ब: "b",
भ: "bh",
म: "m",
य: "y",
र: "r",
ल: "l",
व: "v",
श: "ś",
ष: "ṣ",
स: "s",
ह: "h",
क्ष: "kṣ",
त्र: "tr",
ज्ञ: "jñ",
"ा": "ā",
"ि": "i",
"ी": "ī",
"ु": "u",
"ू": "ū",
"ृ": "ṛ",
"ॄ": "ṝ",
"ॢ": "ḷ",
"ॣ": "ḹ",
"े": "e",
"ै": "ai",
"ो": "o",
"ौ": "au",
"ं": "ṁ",
"ः": "ḥ",
"ँ": "n",
"्": "",
};
var devanagariMap = sanskritMode ? sanskritMap : casualMap;
let result = "";
let i = 0;
while (i < text.length) {
const currentChar = text[i];
let nextChar = text[i + 1] || "";
if (i + 1 < text.length && devanagariMap[currentChar + nextChar]) {
result += devanagariMap[currentChar + nextChar];
i += 2;
continue;
}
if (currentChar === "्") {
i++;
continue;
}
if (devanagariMap[currentChar]) {
if (
isConsonant(currentChar) &&
!isVowelSign(nextChar) &&
nextChar !== "्"
) {
if (!sanskritMode) {
if (
nextChar != "" &&
nextChar != "." &&
nextChar != "," &&
nextChar != "?"
) {
result += devanagariMap[currentChar] + "a";
} else {
if (currentChar != "य") {
result += devanagariMap[currentChar];
} else {
result += devanagariMap[currentChar] + "a";
}
}
} else {
result += devanagariMap[currentChar] + "a";
}
} else {
result += devanagariMap[currentChar];
}
} else {
result += currentChar;
}
i++;
}
function isConsonant(char) {
const consonants = [
"क",
"ख",
"ग",
"घ",
"ङ",
"च",
"छ",
"ज",
"झ",
"ञ",
"ट",
"ठ",
"ड",
"ढ",
"ण",
"त",
"थ",
"द",
"ध",
"न",
"प",
"फ",
"ब",
"भ",
"म",
"य",
"र",
"ल",
"व",
"श",
"ष",
"स",
"ह",
];
return consonants.includes(char);
}
function isVowelSign(char) {
const vowelSigns = [
"ा",
"ि",
"ी",
"ु",
"ू",
"ृ",
"ॄ",
"ॢ",
"ॣ",
"े",
"ै",
"ो",
"ौ",
];
return vowelSigns.includes(char);
}
return result;
}
module.exports = { transliterate };