From d985161037007873aa14f64c06ec5bb12442ce62 Mon Sep 17 00:00:00 2001 From: psvenk <45520974+psvenk@users.noreply.github.com> Date: Wed, 5 Aug 2020 18:05:51 -0400 Subject: [PATCH] Move schemes into separate JSON files (#13) This has the benefits of separating data from code and of having a language-agnostic specification of schemes (for implementations of Sanscript in other programming languages). This also adds a build step integrating the scheme data into the JS file -- the file that now contains only the code has been moved to a subdirectory and the build step (npm run dist) outputs to sanscript.js (so this causes no breaking changes). --- .gitignore | 1 + dist.js | 54 ++ package.json | 3 +- sanscript.js | 1396 ---------------------------------------------- src/sanscript.js | 492 ++++++++++++++++ 5 files changed, 549 insertions(+), 1397 deletions(-) create mode 100644 dist.js delete mode 100644 sanscript.js create mode 100644 src/sanscript.js diff --git a/.gitignore b/.gitignore index 7ca3f24..bb6569f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.*~ node_modules +/sanscript.js diff --git a/dist.js b/dist.js new file mode 100644 index 0000000..2c7ef73 --- /dev/null +++ b/dist.js @@ -0,0 +1,54 @@ +const fsp = require("fs").promises; +const path = require("path"); + +async function main() { + // Get lists of Brahmic and roman schemes + // Each of bschemes and rschemes is an array of which each element is of + // the form [filename, filepath] + const [bschemes, rschemes] = await Promise.all( + ["brahmic", "roman"].map(async x => { + const dirpath = path.join(__dirname, "src", "schemes", x) + let paths = []; + for (const filename of await fsp.readdir(dirpath)) { + paths.push([filename, path.join(dirpath, filename)]); + } + return paths; + }) + ); + + // Get arrays of Brahmic and roman scheme file contents + // Each of bfiles and rfiles is an array of which each element is of the + // form [schemeName, fileContents] + const [bfiles, rfiles] = await Promise.all([bschemes, rschemes].map(x => + Promise.all(x.map(async ([filename, filepath]) => { + let schemeName = filename.split("."); + schemeName.pop(); + const fileContents = await fsp.readFile(filepath); + return [schemeName, fileContents]; + })) + )); + + // Get file handle for sanscript.js + let out; + try { + out = await fsp.open( + path.join(__dirname, "sanscript.js"), "w" + ); + out.write("var schemes = {};\n"); + for (const [scheme, contents] of bfiles) { + out.write(`schemes.${scheme} = ${contents};\n`); + } + for (const [scheme, contents] of rfiles) { + out.write(`schemes.${scheme} = ${contents};\n`); + } + // Write the code to the output file + out.write(await fsp.readFile( + path.join(__dirname, "src", "sanscript.js") + )); + } finally { + if (out !== undefined) + await out.close(); + } +} + +main().catch(console.error); diff --git a/package.json b/package.json index 68a44fc..4dcf402 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "test": "test" }, "scripts": { - "test": "qunit" + "test": "qunit", + "dist": "node dist.js" }, "repository": { "type": "git", diff --git a/sanscript.js b/sanscript.js deleted file mode 100644 index 42c0d7b..0000000 --- a/sanscript.js +++ /dev/null @@ -1,1396 +0,0 @@ -/** - * Sanscript - * - * Sanscript is a Sanskrit transliteration library. Currently, it supports - * other Indian languages only incidentally. - * - * License: MIT - */ - -function exportSanscriptSingleton(global) { - "use strict"; - - var Sanscript = {}; - // First, we define the Sanscript singleton, with its variables and methods. - Sanscript.defaults = { - "skip_sgml": false, - "syncope": false - }; - - /* Schemes - * ======= - * Schemes are of two kinds: "Brahmic" and "roman." "Brahmic" schemes - * describe abugida scripts found in India. "Roman" schemes describe - * manufactured alphabets that are meant to describe or encode Brahmi - * scripts. Abugidas and alphabets are processed by separate algorithms - * because of the unique difficulties involved with each. - * - * Brahmic consonants are stated without a virama. Roman consonants are - * stated without the vowel 'a'. - * - * (Since "abugida" is not a well-known term, Sanscript uses "Brahmic" - * and "roman" for clarity.) - */ - var schemes = Sanscript.schemes = { - "assamese": { - "vowels": ["অ", "আ", "ই", "ঈ", "উ", "ঊ", "ঋ", "ৠ", "ঌ", "ৡ", "এ", "এ", "ঐ", "ও", "ও", "ঔ"], - "vowel_marks": ["া", "ি", "ী", "ু", "ূ", "ৃ", "ৄ", "ৢ", "ৣ", "ে", "ে", "ৈ", "ো", "ো", "ৌ"], - "other_marks": ["ং", "ঃ", "ঁ"], - "virama": ["্"], - "consonants": ["ক", "খ", "গ", "ঘ", "ঙ", "চ", "ছ", "জ", "ঝ", "ঞ", "ট", "ঠ", "ড", "ঢ", "ণ", "ত", "থ", "দ", "ধ", "ন", "প", "ফ", "ব", "ভ", "ম", "য", "ৰ", "ল", "ৱ", "শ", "ষ", "স", "হ", "ল়", "ক্ষ", "জ্ঞ"], - "symbols": ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯", "ওঁ", "ঽ", "।", "॥"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["ঃ॑", "ঃ॒", "ং॑", "ং॒"], - "candra": ["ে"], - "other": ["ক়", "খ়", "গ়", "জ়", "ড়", "ঢ়", "ফ়", "য়", "ৰ়"] - }, - "ahom": { - "vowels": ["𑜒", "𑜒𑜡", "𑜒𑜢", "𑜒𑜣", "𑜒𑜤", "𑜒𑜥", "𑜍𑜤", "𑜍𑜥", "𑜎𑜤", "𑜎𑜥", "𑜒𑜦", "𑜒𑜦", "𑜒𑜩", "𑜒𑜨", "𑜒𑜨", "𑜒𑜧"], - "vowel_marks": ["𑜡", "𑜢", "𑜣", "𑜤", "𑜥", "𑜞𑜤", "𑜞𑜥", "𑜝𑜤", "𑜝𑜥", "𑜦", "𑜦", "𑜩", "𑜨", "𑜨", "𑜧"], - "other_marks": ["𑜪", "𑜑𑜫", "𑜪"], - "virama": ["𑜫"], - "consonants": ["𑜀", "𑜁", "𑜕", "𑜗", "𑜂", "𑜋", "𑜋", "𑜊", "𑜙", "𑜐", "𑜄", "𑜌", "𑜓", "𑜔", "𑜃", "𑜄", "𑜌", "𑜓", "𑜔", "𑜃", "𑜆", "𑜇", "𑜈", "𑜘", "𑜉", "𑜊", "𑜍", "𑜎", "𑜈", "𑜏", "𑜏", "𑜏", "𑜑", "𑜎", "𑜀𑜫𑜏", "𑜊𑜫𑜐"], - "symbols": ["𑜰", "𑜱", "𑜲", "𑜳", "𑜴", "𑜵", "𑜶", "𑜷", "𑜸", "𑜹", "𑜒𑜪𑜨", "'", "𑜼", "𑜽"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑜑𑜫॑", "𑜑𑜫॒", "𑜪॑", "𑜪॒"], - "candra": ["𑜦"], - "other": ["𑜀", "𑜁", "𑜕", "𑜊", "𑜓", "𑜔", "𑜇", "𑜊", "𑜍"] - }, - "avestan": { - "vowels": ["𐬀", "𐬁", "𐬌", "𐬍", "𐬎", "𐬏", "𐬆𐬭𐬆", "𐬇𐬭𐬇", "𐬆𐬮𐬆", "𐬇𐬮𐬇", "𐬈", "𐬉", "𐬀𐬌", "𐬊", "𐬋", "𐬀𐬎"], - "vowel_marks": ["𐬁", "𐬌", "𐬍", "𐬎", "𐬏", "𐬆𐬭𐬆", "𐬇𐬭𐬇", "𐬆𐬮𐬆", "𐬇𐬮𐬇", "𐬈", "𐬉", "𐬀𐬌", "𐬊", "𐬋", "𐬀𐬎"], - "other_marks": ["𐬩", "𐬵", "𐬩"], - "virama": [""], - "consonants": ["𐬐𐬀", "𐬑𐬀", "𐬔𐬀", "𐬖𐬀", "𐬢𐬀", "𐬗𐬀", "𐬗𐬀", "𐬘𐬀", "𐬘𐬀", "𐬦𐬀", "𐬙𐬀", "𐬚𐬀", "𐬛𐬀", "𐬛𐬀", "𐬧𐬀", "𐬙𐬀", "𐬚𐬀", "𐬛𐬀", "𐬜𐬀", "𐬥𐬀", "𐬞𐬀", "𐬞𐬀", "𐬠𐬀", "𐬠𐬀", "𐬨𐬀", "𐬫𐬀", "𐬭𐬀", "𐬮𐬀", "𐬬𐬀", "𐬱𐬀", "𐬴𐬀", "𐬯𐬀", "𐬵𐬀", "𐬮𐬀", "𐬐𐬴𐬀", "𐬘𐬦𐬀"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "𐬋𐬨", "", "𐬼‏", "𐬽‏"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𐬵\'", "𐬵\_", "𐬩\'", "𐬩\_"], - "candra": ["𐬉"], - "other": ["𐬐𐬀", "𐬓𐬀", "𐬕𐬀", "𐬰𐬀", "𐬛𐬀", "𐬜𐬀", "𐬟𐬀", "𐬪𐬀", "𐬭𐬀"] - }, - "balinese": { - "vowels": ["ᬅ", "ᬆ", "ᬇ", "ᬈ", "ᬉ", "ᬊ", "ᬋ", "ᬌ", "ᬍ", "ᬎ", "ᬏ", "ᬏ", "ᬐ", "ᬑ", "ᬑ", "ᬒ"], - "vowel_marks": ["ᬵ", "ᬶ", "ᬷ", "ᬸ", "ᬹ", "ᬺ", "ᬻ", "ᬼ", "ᬽ", "ᬾ", "ᬾ", "ᬿ", "ᭀ", "ᭀ", "ᭁ"], - "other_marks": ["ᬂ", "ᬄ", "ᬁ"], - "virama": ["᭄"], - "consonants": ["ᬓ", "ᬔ", "ᬕ", "ᬖ", "ᬗ", "ᬘ", "ᬙ", "ᬚ", "ᬛ", "ᬜ", "ᬝ", "ᬞ", "ᬟ", "ᬠ", "ᬡ", "ᬢ", "ᬣ", "ᬤ", "ᬥ", "ᬦ", "ᬧ", "ᬨ", "ᬩ", "ᬪ", "ᬫ", "ᬬ", "ᬭ", "ᬮ", "ᬯ", "ᬰ", "ᬱ", "ᬲ", "ᬳ", "ᬮ᬴", "ᬓ᭄ᬱ", "ᬚ᭄ᬜ"], - "symbols": ["᭐", "᭑", "᭒", "᭓", "᭔", "᭕", "᭖", "᭗", "᭘", "᭙", "ᬑᬁ", "'", "᭞", "᭟"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["ᬄ॑", "ᬄ॒", "ᬂ॑", "ᬂ॒"], - "candra": ["ᬾ"], - "other": ["ᬓ᬴", "ᬔ᬴", "ᬕ᬴", "ᬚ᬴", "ᬟ᬴", "ᬠ᬴", "ᬧ᬴", "ᬬ᬴", "ᬭ᬴"] - }, - /* Bengali - * ------- - * 'va' and 'ba' are both rendered as ব. - */ - "bengali": { - "vowels": ["অ", "আ", "ই", "ঈ", "উ", "ঊ", "ঋ", "ৠ", "ঌ", "ৡ", "", "এ", "ঐ", "", "ও", "ঔ"], - "vowel_marks": ["া", "ি", "ী", "ু", "ূ", "ৃ", "ৄ", "ৢ", "ৣ", "", "ে", "ৈ", "", "ো", "ৌ"], - "other_marks": ["ং", "ঃ", "ঁ"], - "virama": ["্"], - "consonants": ["ক", "খ", "গ", "ঘ", "ঙ", "চ", "ছ", "জ", "ঝ", "ঞ", "ট", "ঠ", "ড", "ঢ", "ণ", "ত", "থ", "দ", "ধ", "ন", "প", "ফ", "ব", "ভ", "ম", "য", "র", "ল", "ব", "শ", "ষ", "স", "হ", "ळ", "ক্ষ", "জ্ঞ"], - "symbols": ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯", "ॐ", "ঽ", "।", "॥"], - "other": ["", "", "", "", "ড", "ঢ", "", "য", ""] - }, - - "brahmi": { - "vowels": ["𑀅", "𑀆", "𑀇", "𑀈", "𑀉", "𑀊", "𑀋", "𑀌", "𑀍", "𑀎", "𑀏𑁆", "𑀏", "𑀐", "𑀑𑁆", "𑀑", "𑀒"], - "vowel_marks": ["𑀸", "𑀺", "𑀻", "𑀼", "𑀽", "𑀾", "𑀿", "𑁀", "𑁁", "𑁂", "𑁂", "𑁃", "𑁄", "𑁄", "𑁅"], - "other_marks": ["𑀁", "𑀂", "𑀀"], - "virama": ["𑁆"], - "consonants": ["𑀓", "𑀔", "𑀕", "𑀖", "𑀗", "𑀘", "𑀙", "𑀚", "𑀛", "𑀜", "𑀝", "𑀞", "𑀟", "𑀠", "𑀡", "𑀢", "𑀣", "𑀤", "𑀥", "𑀦", "𑀧", "𑀨", "𑀩", "𑀪", "𑀫", "𑀬", "𑀭", "𑀮", "𑀯", "𑀰", "𑀱", "𑀲", "𑀳", "𑀴", "𑀓𑁆𑀱", "𑀚𑁆𑀜"], - "symbols": ["𑁦", "𑁧", "𑁨", "𑁩", "𑁪", "𑁫", "𑁬", "𑁭", "𑁮", "𑁯", "𑀑𑀁", "", "𑁇", "𑁈"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑀂॑", "𑀂॒", "𑀁॑", "𑀁॒"], - "candra": ["𑁂"], - "other": ["𑀓", "𑀔", "𑀕", "𑀚", "𑀟", "𑀠", "𑀨", "𑀬", "𑀭"] - }, - "brahmi_tamil": { - "vowels": ["𑀅", "𑀆", "𑀇", "𑀈", "𑀉", "𑀊", "𑀭𑀼", "𑀭𑀽", "𑀮𑀼", "𑀮𑀽", "𑀏𑁆", "𑀏", "𑀐", "𑀑𑁆", "𑀑", "𑀒"], - "vowel_marks": ["𑀸", "𑀺", "𑀻", "𑀼", "𑀽", "𑁆𑀭𑀼", "𑁆𑀭𑀽", "𑁆𑀮𑀼", "𑁆𑀮𑀽", "𑁂𑁆", "𑁂", "𑁃", "𑁄𑁆", "𑁄", "𑁅"], - "other_marks": ["𑀫𑁆", "𑀂", "𑀫𑁆"], - "virama": ["𑁆"], - "consonants": ["𑀓", "𑀓", "𑀓", "𑀓", "𑀗", "𑀘", "𑀘", "𑀚", "𑀚", "𑀜", "𑀝", "𑀝", "𑀝", "𑀝", "𑀡", "𑀢", "𑀢", "𑀢", "𑀥", "𑀦", "𑀧", "𑀧", "𑀧", "𑀧", "𑀫", "𑀬", "𑀭", "𑀮", "𑀯", "𑀰", "𑀱", "𑀲", "𑀳", "𑀴", "𑀓𑁆𑀱", "𑀚𑁆𑀜"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "𑀑𑀫𑁆", "'", ".", ".."], - "candra": ["𑁂𑁆"], - "other": ["𑀓", "𑀓", "𑀓", "𑀚", "𑀝", "𑀝", "𑀧", "𑀬", "𑀶"] - }, - "bhaisuki": { - "vowels": ["𑰀", "𑰁", "𑰂", "𑰃", "𑰄", "𑰅", "𑰆", "𑰇", "𑰈", "𑰈", "𑰊", "𑰊", "𑰋", "𑰌", "𑰌", "𑰍"], - "vowel_marks": ["𑰯", "𑰰", "𑰱", "𑰲", "𑰳", "𑰴", "𑰵", "𑰶", "𑰶", "𑰸", "𑰸", "𑰹", "𑰺", "𑰺", "𑰻"], - "other_marks": ["𑰽", "𑰾", "𑰼"], - "virama": ["𑰿"], - "consonants": ["𑰎", "𑰏", "𑰐", "𑰑", "𑰒", "𑰓", "𑰔", "𑰕", "𑰖", "𑰗", "𑰘", "𑰙", "𑰚", "𑰛", "𑰜", "𑰝", "𑰞", "𑰟", "𑰠", "𑰡", "𑰢", "𑰣", "𑰤", "𑰥", "𑰦", "𑰧", "𑰨", "𑰩", "𑰪", "𑰫", "𑰬", "𑰭", "𑰮", "𑰩", "𑰎𑰿𑰬", "𑰕𑰿𑰗"], - "symbols": ["𑱐", "𑱑", "𑱒", "𑱓", "𑱔", "𑱕", "𑱖", "𑱗", "𑱘", "𑱙", "𑰌𑰼", "𑱀", "𑱁", "𑱂"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑰾॑", "𑰾॒", "𑰽॑", "𑰽॒"], - "candra": ["𑰸"], - "other": ["𑰎", "𑰏", "𑰐", "𑰕", "𑰚", "𑰛", "𑰣", "𑰧", "𑰨"] - }, - - "burmese": { - "vowels": ["အ", "အာ", "ဣ", "ဤ", "ဥ", "ဦ", "ၒ", "ၓ", "ၔ", "ၕ", "ဧ", "ဧ", "အဲ", "ဩ", "ဩ", "ဪ"], - "vowel_marks": ["ာ", "ိ", "ီ", "ု", "ူ", "ၖ", "ၗ", "ၘ", "ၙ", "ေ", "ေ", "ဲ", "ော", "ော", "ော်"], - "other_marks": ["ံ", "း", "ံ"], - "virama": ["်"], - "consonants": ["က", "ခ", "ဂ", "ဃ", "င", "စ", "ဆ", "ဇ", "ဈ", "ဉ", "ဋ", "ဌ", "ဍ", "ဎ", "ဏ", "တ", "ထ", "ဒ", "ဓ", "န", "ပ", "ဖ", "ဗ", "ဘ", "မ", "ယ", "ရ", "လ", "ဝ", "ၐ", "ၑ", "သ", "ဟ", "ဠ", "က္ၑ", "ဇ္ဉ"], - "symbols": ["၀", "၁", "၂", "၃", "၄", "၅", "၆", "၇", "၈", "၉", "ဩံ", "'", "၊", "။"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["း॑", "း॒", "ံ॑", "ံ॒"], - "candra": ["ေ"], - "other": ["က", "ခ", "ဂ", "ဇ", "ဍ", "ဎ", "ဖ", "ယ", "ရ"] - }, - "chakma": { - "vowels": ["𑄃𑄧", "𑄃", "𑄃𑄨", "𑄃𑄩", "𑄃𑄪", "𑄃𑄫", "𑄢𑄪", "𑄢𑄫", "𑄣𑄪", "𑄣𑄫", "𑄃𑄬", "𑄃𑄬", "𑄃𑄭", "𑄃𑄮", "𑄃𑄮", "𑄃𑄯"], - "vowel_marks": ["", "𑄨", "𑄩", "𑄪", "𑄫", "𑄳𑄢𑄪", "𑄳𑄢𑄫", "𑄳𑄣𑄪", "𑄳𑄣𑄫", "𑄬", "𑄬", "𑄭", "𑄮", "𑄮", "𑄯"], - "other_marks": ["𑄁", "𑄂", "𑄀"], - "virama": ["𑄴"], - "consonants": ["𑄇𑄧", "𑄈𑄧", "𑄉𑄧", "𑄊𑄧", "𑄋𑄧", "𑄌𑄧", "𑄍𑄧", "𑄎𑄧", "𑄏𑄧", "𑄐𑄧", "𑄑𑄧", "𑄒𑄧", "𑄓𑄧", "𑄔𑄧", "𑄕𑄧", "𑄖𑄧", "𑄗𑄧", "𑄘𑄧", "𑄙𑄧", "𑄚𑄧", "𑄛𑄧", "𑄜𑄧", "𑄝𑄧", "𑄞𑄧", "𑄟𑄧", "𑄡𑄧", "𑄢𑄧", "𑄣𑄧", "𑄤𑄧", "𑄥𑄧", "𑄥𑄧", "𑄥𑄧", "𑄦𑄧", "𑄣𑄧", "𑄇𑄴𑄥𑄧", "𑄎𑄴𑄐𑄧"], - "symbols": ["𑄶", "𑄷", "𑄸", "𑄹", "𑄺", "𑄻", "𑄼", "𑄽", "𑄾", "𑄿", "𑄃𑄮𑄀", "'", "𑅁", "𑅂"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑄂॑", "॒𑄂", "𑄁॑", "॒𑄁"], - "candra": ["𑄬"], - "other": ["𑄇𑄧", "𑄈𑄧", "𑄉𑄧", "𑄎𑄧", "𑄓𑄧", "𑄔𑄧", "𑄜𑄧", "𑄠𑄧", "𑄢𑄧"] - }, - "cham": { - "vowels": ["ꨀ", "ꨀꨩ", "ꨁ", "ꨁꨩ", "ꨂ", "ꨂꨩ", "ꨣꨮ", "ꨣꨮꨩ", "ꨤꨮ", "ꨤꨮꨩ", "ꨃ", "ꨃ", "ꨄ", "ꨅ", "ꨅ", "ꨀꨯꨱ"], - "vowel_marks": ["ꨩ", "ꨪ", "ꨫ", "ꨭ", "ꨭꨩ", "ꨴꨮ", "ꨴꨮꨩ", "ꨵꨮ", "ꨵꨮꨩ", "ꨯꨮ", "ꨯꨮ", "ꨰ", "ꨮ", "ꨯ", "ꨯꨱ"], - "other_marks": ["ꩌ", "ꩍ", "ꩃ"], - "virama": ["ʾ"], - "consonants": ["ꨆ", "ꨇ", "ꨈ", "ꨉ", "ꨋ", "ꨌ", "ꨍ", "ꨎ", "ꨏ", "ꨑ", "ꨓ", "ꨔ", "ꨕ", "ꨖ", "ꨘ", "ꨓ", "ꨔ", "ꨕ", "ꨖ", "ꨘ", "ꨚ", "ꨜ", "ꨝ", "ꨞ", "ꨠ", "ꨢ", "ꨣ", "ꨤ", "ꨥ", "ꨦ", "ꨦ", "ꨧ", "ꨨ", "ꨤ", "ꩀꨦ", "ꩄꨑ"], - "symbols": ["꩐", "꩑", "꩒", "꩓", "꩔", "꩕", "꩖", "꩗", "꩘", "꩙", "ꨅꩌ", "'", "꩝", "꩞"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["ꩍ॑", "ꩍ॒", "ꩌ॑", "ꩌ॒"], - "candra": ["ꨯꨮ"], - "other": ["ꨆ", "ꨇ", "ꨈ", "ꨎ", "ꨕ", "ꨖ", "ꨜ", "ꨥ", "ꨣ"] - }, - - "cyrillic": { - "vowels": ["а", "а̄", "и", "ӣ", "у", "ӯ", "р̣", "р̣̄", "л̣", "л̣̄", "э̆", "э", "аи", "о̆", "о", "ау"], - "other_marks": ["м̣", "х̣", "м̐"], - "virama": [""], - "consonants": ["к", "кх", "г", "гх", "н̇", "ч", "чх", "дж", "джх", "н̃", "т̣", "т̣х", "д̣", "д̣х", "н̣", "т", "тх", "д", "дх", "н", "п", "пх", "б", "бх", "м", "й", "р", "л", "в", "ш́", "ш", "с", "х", "л̤", "кш", "джн̃"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ом̣", "'", "।", "॥"], - "candra": ["ӕ"], - "other": ["ԛ", "к͟х", "г̇", "з", "р̤", "р̤х", "ф", "й̣", "р̱"] - }, - /* Devanagari - * ---------- - * The most comprehensive and unambiguous Brahmic script listed. - */ - "devanagari": { - // "Independent" forms of the vowels. These are used whenever the - // vowel does not immediately follow a consonant. - "vowels": ["अ", "आ", "इ", "ई", "उ", "ऊ", "ऋ", "ॠ", "ऌ", "ॡ", "ऎ", "ए", "ऐ", "ऒ", "ओ", "औ"], - - // "Dependent" forms of the vowels. These are used whenever the - // vowel immediately follows a consonant. If a letter is not - // listed in `vowels`, it should not be listed here. - "vowel_marks": ["ा", "ि", "ी", "ु", "ू", "ृ", "ॄ", "ॢ", "ॣ", "ॆ", "े", "ै", "ॊ", "ो", "ौ"], - - // Miscellaneous marks, all of which are used in Sanskrit. - "other_marks": ["ं", "ः", "ँ"], - - // In syllabic scripts like Devanagari, consonants have an inherent - // vowel that must be suppressed explicitly. We do so by putting a - // virama after the consonant. - "virama": ["्"], - - // Various Sanskrit consonants and consonant clusters. Every token - // here has an explicit vowel. Thus "क" is "ka" instead of "k". - "consonants": ["क", "ख", "ग", "घ", "ङ", "च", "छ", "ज", "झ", "ञ", "ट", "ठ", "ड", "ढ", "ण", "त", "थ", "द", "ध", "न", "प", "फ", "ब", "भ", "म", "य", "र", "ल", "व", "श", "ष", "स", "ह", "ळ", "क्ष", "ज्ञ"], - - // Numbers and punctuation - "symbols": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "ॐ", "ऽ", "।", "॥"], - - // Zero-width joiner. This is used to separate a consonant cluster - // and avoid a complex ligature. - "zwj": ["\u200D"], - - // Dummy consonant. This is used in ITRANS to prevert certain types - // of parser ambiguity. Thus "barau" -> बरौ but "bara_u" -> बरउ. - "skip": [""], - - // Vedic accent. Udatta and anudatta. - "accent": ["\u0951", "\u0952"], - - // Accent combined with anusvara and and visarga. For compatibility - // with ITRANS, which allows the reverse of these four. - "combo_accent": ["ः॑", "ः॒", "ं॑", "ं॒"], - - "candra": ["ॅ"], - - // Non-Sanskrit consonants - "other": ["क़", "ख़", "ग़", "ज़", "ड़", "ढ़", "फ़", "य़", "ऱ"] - }, - "dogra": { - "vowels": ["𑠀", "𑠁", "𑠂", "𑠃", "𑠄", "𑠅", "𑠤𑠭", "𑠤𑠮", "𑠥𑠭", "𑠥𑠮", "𑠆", "𑠆", "𑠇", "𑠈", "𑠈", "𑠉"], - "vowel_marks": ["𑠬", "𑠭", "𑠮", "𑠯", "𑠰", "𑠱", "𑠲", "𑠹𑠥𑠭", "𑠹𑠥𑠮", "𑠳", "𑠳", "𑠴", "𑠵", "𑠵", "𑠶"], - "other_marks": ["𑠷", "𑠸", "𑠷"], - "virama": ["𑠹"], - "consonants": ["𑠊", "𑠋", "𑠌", "𑠍", "𑠎", "𑠏", "𑠐", "𑠑", "𑠒", "𑠓", "𑠔", "𑠕", "𑠖", "𑠗", "𑠘", "𑠙", "𑠚", "𑠛", "𑠜", "𑠝", "𑠞", "𑠟", "𑠠", "𑠡", "𑠢", "𑠣", "𑠤", "𑠥", "𑠦", "𑠧", "𑠨", "𑠩", "𑠪", "𑠥𑠺", "𑠊𑠹𑠨", "𑠑𑠹𑠓"], - "symbols": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "𑠈𑠷", "ऽ", "।", "॥"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑠸॑", "𑠸॒", "𑠷॑", "𑠷॒"], - "candra": ["𑠳"], - "other": ["𑠊𑠺", "𑠋𑠺", "𑠌𑠺", "𑠑𑠺", "𑠫", "𑠗𑠺", "𑠟𑠺", "𑠣𑠺", "𑠤𑠺"] - }, - "gondi_gunjala": { - "vowels": ["𑵠", "𑵡", "𑵢", "𑵣", "𑵤", "𑵥", "𑶈𑶍", "𑶈𑶎", "𑵵𑶍", "𑵵𑶎", "𑵧", "𑵧", "𑵨", "𑵪", "𑵪", "𑵫"], - "vowel_marks": ["𑶊", "𑶋", "𑶌", "𑶍", "𑶎", "𑶗𑶈𑶍", "𑶗𑶈𑶎", "𑶗𑵵𑶍", "𑶗𑵵𑶎", "𑶐", "𑶐", "𑶑", "𑶓", "𑶓", "𑶔"], - "other_marks": ["𑶕", "𑶖", "𑶕"], - "virama": [""], - "consonants": ["𑵱", "𑵲", "𑵶", "𑵷", "𑶄", "𑵻", "𑵼", "𑶀", "𑶁", "𑵺", "𑵽", "𑵾", "𑶂", "𑶃", "𑵺", "𑵳", "𑵴", "𑵸", "𑵹", "𑵺", "𑶅", "𑶆", "𑵮", "𑵯", "𑵰", "𑵬", "𑶈", "𑵵", "𑵭", "𑶉", "𑶉", "𑶉", "𑶇", "𑵿", "𑵱𑶗𑶉", "𑶀𑶗𑵺"], - "symbols": ["𑶠", "𑶡", "𑶢", "𑶣", "𑶤", "𑶥", "𑶦", "𑶧", "𑶨", "𑶩", "𑶘", "", ".", ".."], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑶖॑", "𑶖॒", "𑶕॑", "𑶕॒"], - "candra": ["𑶐"], - "other": ["𑵱", "𑵲", "𑵶", "𑶀", "𑶂", "𑶃", "𑶆", "𑵬", "𑶈"] - }, - "gondi_masaram": { - "vowels": ["𑴀", "𑴁", "𑴂", "𑴃", "𑴄", "𑴅", "𑴦𑴶", "𑴦𑴵", "𑴧𑴴", "𑴧𑴵", "𑴆", "𑴆", "𑴈", "𑴉", "𑴉", "𑴋"], - "vowel_marks": ["𑴱", "𑴲", "𑴳", "𑴴", "𑴵", "𑴶", "𑵅𑴦𑴵", "𑵅𑴧𑴴", "𑵅𑴧𑴵", "𑴺", "𑴺", "𑴼", "𑴽", "𑴽", "𑴿"], - "other_marks": ["𑵀", "𑵁", "𑵀"], - "virama": ["𑵄"], - "consonants": ["𑴌", "𑴍", "𑴎", "𑴏", "𑴐", "𑴑", "𑴒", "𑴓", "𑴔", "𑴕", "𑴖", "𑴗", "𑴘", "𑴙", "𑴚", "𑴛", "𑴜", "𑴝", "𑴞", "𑴟", "𑴠", "𑴡", "𑴢", "𑴣", "𑴤", "𑴥", "𑴦", "𑴧", "𑴨", "𑴩", "𑴪", "𑴫", "𑴬", "𑴭", "𑴮", "𑴯"], - "symbols": ["𑵐", "𑵑", "𑵒", "𑵓", "𑵔", "𑵕", "𑵖", "𑵗", "𑵘", "𑵙", "𑴉𑵀", "", "।", "॥"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑵁॑", "𑵁॒", "𑵀॑", "𑵀॒"], - "candra": ["𑴺"], - "other": ["𑴌𑵂", "𑴍𑵂", "𑴎𑵂", "𑴓𑵂", "𑴘𑵂", "𑴙𑵂", "𑴡𑵂", "𑴥𑵂", "𑴦𑵂"] - }, - "grantha": { - "vowels": ["𑌅", "𑌆", "𑌇", "𑌈", "𑌉", "𑌊", "𑌋", "𑍠", "𑌌", "𑍡", "𑌏𑌀", "𑌏", "𑌐", "𑌓𑌀", "𑌓", "𑌔"], - "vowel_marks": ["𑌾", "𑌿", "𑍀", "𑍁", "𑍂", "𑍃", "𑍄", "𑍢", "𑍣", "𑍇𑌀", "𑍇", "𑍈", "𑍋𑌀", "𑍋", "𑍗"], - "other_marks": ["𑌂", "𑌃", "𑌁"], - "virama": ["𑍍"], - "consonants": ["𑌕", "𑌖", "𑌗", "𑌘", "𑌙", "𑌚", "𑌛", "𑌜", "𑌝", "𑌞", "𑌟", "𑌠", "𑌡", "𑌢", "𑌣", "𑌤", "𑌥", "𑌦", "𑌧", "𑌨", "𑌪", "𑌫", "𑌬", "𑌭", "𑌮", "𑌯", "𑌰", "𑌲", "𑌵", "𑌶", "𑌷", "𑌸", "𑌹", "𑌳", "𑌕𑍍𑌷", "𑌜𑍍𑌞"], - "symbols": ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯", "𑍐", "𑌽", "।", "॥"], - "candra": ["𑍇"], - "other": ["𑌕𑌼", "𑌖𑌼", "𑌗𑌼", "𑌜𑌼", "𑌡𑌼", "𑌢𑌼", "𑌫𑌼", "𑌯𑌼", "𑌰𑌼"] - }, - - "grantha_pandya": { - "vowels": ["അ", "ആ", "ഇ", "ഈ", "ഉ", "ഊ", "ഋ", "ൠ", "ഌ", "ൡ", "ഏ", "ഏ", "ഐ", "ഓ", "ഓ", "ഔ"], - "vowel_marks": ["ാ", "ി", "ീ", "ു", "ൂ", "ൃ", "ൄ", "ൢ", "ൣ", "േ", "േ", "ൈ", "ോ", "ോ", "ൗ"], - "other_marks": ["ം", "ഃ", "ം"], - "virama": ["്"], - "consonants": ["ക", "ഖ", "ഗ", "ഘ", "ങ", "ച", "ഛ", "ജ", "ഝ", "ഞ", "ട", "ഠ", "ഡ", "ഢ", "ണ", "ത", "ഥ", "ദ", "ധ", "ന", "പ", "ഫ", "ബ", "ഭ", "മ", "യ", "ര", "ല", "വ", "ശ", "ഷ", "സ", "ഹ", "ള", "ക്ഷ", "ജ്ഞ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ഓം", "ഽ", "।", "॥"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["ഃ॑", "ഃ॒", "ം॑", "ം॒"], - "candra": ["േ"], - "other": ["ക", "ഖ", "ഗ", "ജ", "ഡ", "ഢ", "ഫ", "യ", "ര"] - }, - /* Gujarati - * -------- - * Sanskrit-complete. - */ - "gujarati": { - "vowels": ["અ", "આ", "ઇ", "ઈ", "ઉ", "ઊ", "ઋ", "ૠ", "ઌ", "ૡ", "", "એ", "ઐ", "", "ઓ", "ઔ"], - "vowel_marks": ["ા", "િ", "ી", "ુ", "ૂ", "ૃ", "ૄ", "ૢ", "ૣ", "", "ે", "ૈ", "", "ો", "ૌ"], - "other_marks": ["ં", "ઃ", "ઁ"], - "virama": ["્"], - "consonants": ["ક", "ખ", "ગ", "ઘ", "ઙ", "ચ", "છ", "જ", "ઝ", "ઞ", "ટ", "ઠ", "ડ", "ઢ", "ણ", "ત", "થ", "દ", "ધ", "ન", "પ", "ફ", "બ", "ભ", "મ", "ય", "ર", "લ", "વ", "શ", "ષ", "સ", "હ", "ળ", "ક્ષ", "જ્ઞ"], - "symbols": ["૦", "૧", "૨", "૩", "૪", "૫", "૬", "૭", "૮", "૯", "ૐ", "ઽ", "।", "॥"], - "candra": ["ૅ"] - }, - - /* Gurmukhi - * -------- - * Missing R/RR/lR/lRR - */ - "gurmukhi": { - "vowels": ["ਅ", "ਆ", "ਇ", "ਈ", "ਉ", "ਊ", "", "", "", "", "", "ਏ", "ਐ", "", "ਓ", "ਔ"], - "vowel_marks": ["ਾ", "ਿ", "ੀ", "ੁ", "ੂ", "", "", "", "", "", "ੇ", "ੈ", "", "ੋ", "ੌ"], - "other_marks": ["ਂ", "ਃ", "ਁ"], - "virama": ["੍"], - "consonants": ["ਕ", "ਖ", "ਗ", "ਘ", "ਙ", "ਚ", "ਛ", "ਜ", "ਝ", "ਞ", "ਟ", "ਠ", "ਡ", "ਢ", "ਣ", "ਤ", "ਥ", "ਦ", "ਧ", "ਨ", "ਪ", "ਫ", "ਬ", "ਭ", "ਮ", "ਯ", "ਰ", "ਲ", "ਵ", "ਸ਼", "ਸ਼", "ਸ", "ਹ", "ਲ਼", "ਕ੍ਸ਼", "ਜ੍ਞ"], - "symbols": ["੦", "੧", "੨", "੩", "੪", "੫", "੬", "੭", "੮", "੯", "ॐ", "ऽ", "।", "॥"], - "other": ["", "ਖ", "ਗ", "ਜ", "ਡ", "", "ਫ", "", ""] - }, - "javanese": { - "vowels": ["ꦄ", "ꦄꦴ", "ꦆ", "ꦇ", "ꦈ", "ꦈꦴ", "ꦉ", "ꦉꦴ", "ꦊ", "ꦋ", "", "ꦌ", "ꦍ", "", "ꦎ", "ꦎꦴ"], - "vowel_marks": ["ꦴ", "ꦶ", "ꦷ", "ꦸ", "ꦹ", "ꦽ", "꧀ꦉꦴ", "꧀ꦊ", "꧀ꦋ", "", "ꦺ", "ꦻ", "", "ꦺꦴ", "ꦻꦴ"], - "other_marks": ["ꦁ", "ꦃ", "ꦀ"], - "virama": ["꧀"], - "consonants": ["ꦏ", "ꦑ", "ꦒ", "ꦓ", "ꦔ", "ꦕ", "ꦖ", "ꦗ", "ꦙ", "ꦚ", "ꦛ", "ꦜ", "ꦝ", "ꦞ", "ꦟ", "ꦠ", "ꦡ", "ꦢ", "ꦣ", "ꦤ", "ꦥ", "ꦦ", "ꦧ", "ꦨ", "ꦩ", "ꦪ", "ꦫ", "ꦭ", "ꦮ", "ꦯ", "ꦰ", "ꦱ", "ꦲ", "ꦭ꦳", "ꦏ꧀ꦰ", "ꦗ꧀ꦚ"], - "symbols": ["꧐", "꧑", "꧒", "꧓", "꧔", "꧕", "꧖", "꧗", "꧘", "꧙", "ꦎꦀ", "'", "।", "॥"], - "candra": ["ꦼ"] - }, - - /* Kannada - * ------- - * Sanskrit-complete. - */ - "kannada": { - "vowels": ["ಅ", "ಆ", "ಇ", "ಈ", "ಉ", "ಊ", "ಋ", "ೠ", "ಌ", "ೡ", "ಎ", "ಏ", "ಐ", "ಒ", "ಓ", "ಔ"], - "vowel_marks": ["ಾ", "ಿ", "ೀ", "ು", "ೂ", "ೃ", "ೄ", "ೢ", "ೣ", "ೆ", "ೇ", "ೈ", "ೊ", "ೋ", "ೌ"], - "other_marks": ["ಂ", "ಃ", "ँ"], - "virama": ["್"], - "consonants": ["ಕ", "ಖ", "ಗ", "ಘ", "ಙ", "ಚ", "ಛ", "ಜ", "ಝ", "ಞ", "ಟ", "ಠ", "ಡ", "ಢ", "ಣ", "ತ", "ಥ", "ದ", "ಧ", "ನ", "ಪ", "ಫ", "ಬ", "ಭ", "ಮ", "ಯ", "ರ", "ಲ", "ವ", "ಶ", "ಷ", "ಸ", "ಹ", "ಳ", "ಕ್ಷ", "ಜ್ಞ"], - "symbols": ["೦", "೧", "೨", "೩", "೪", "೫", "೬", "೭", "೮", "೯", "ಓಂ", "ಽ", "।", "॥"], - "other": ["", "", "", "", "", "", "ಫ", "", "ಱ"] - }, - "khamti_shan": { - "vowels": ["အ", "အႃ", "အိ", "အီ", "အု", "အူ", "ရိ", "ရီ", "လိ", "လီ", "", "အေ", "အႆ", "", "အူဝ်", "အဝ်"], - "vowel_marks": ["ႃ", "ိ", "ီ", "ု", "ူ", "်ရိ", "်ရီ", "်လိ", "်လီ", "", "ေ", "ႆ", "", "ူဝ်", "ဝ်"], - "other_marks": ["ံ", "း", "ံ"], - "virama": ["်"], - "consonants": ["က", "ၵ", "ꩠ", "ၷ", "င", "ꩡ", "ꩢ", "ꩣ", "ꩤ", "ꩥ", "ꩦ", "ꩧ", "ꩨ", "ꩩ", "ꧣ", "တ", "ထ", "ၻ", "ꩪ", "ꩫ", "ပ", "ၸ", "ၿ", "ၹ", "မ", "ယ", "ꩳ", "လ", "ဝ", "ꩬ", "ꩬ", "ꩬ", "ꩭ", "ꩮ", "က်ꩬ", "ꩣ်ꩥ"], - "symbols": ["႐", "႑", "႒", "႓", "႔", "႕", "႖", "႗", "႘", "႙", "အေႃံ", "'", "।", "॥"], - "candra": ["ႄ"] - }, - "kharoshti": { - "vowels": ["𐨀", "𐨀𐨌", "𐨀𐨁", "𐨀𐨁𐨌", "𐨀𐨂", "𐨀𐨂𐨌", "𐨀𐨃", "𐨀𐨃𐨌", "𐨫𐨂", "𐨫𐨂𐨌", "", "𐨀𐨅", "𐨀𐨅𐨌", "", "𐨀𐨆", "𐨀𐨆𐨌"], - "vowel_marks": ["𐨌", "𐨁", "𐨁𐨌", "𐨂", "𐨂𐨌", "𐨃", "𐨃𐨌", "𐨿𐨫𐨂", "𐨿𐨫𐨂𐨌", "", "𐨅", "𐨅𐨌", "", "𐨆", "𐨆𐨌"], - "other_marks": ["𐨎", "𐨏", "𐨎"], - "virama": ["𐨿"], - "consonants": ["𐨐", "𐨑", "𐨒", "𐨓", "𐨣", "𐨕", "𐨖", "𐨗", "𐨗", "𐨙", "𐨚", "𐨛", "𐨜", "𐨝", "𐨞", "𐨟", "𐨠", "𐨡", "𐨢", "𐨣", "𐨤", "𐨥", "𐨦", "𐨧", "𐨨", "𐨩", "𐨪", "𐨫", "𐨬", "𐨭", "𐨮", "𐨯", "𐨱", "𐨫", "𐨐𐨿𐨮", "𐨗𐨿𐨙"], - "symbols": ["", "𐩀", "𐩁", "𐩂", "𐩃", "𐩃𐩀", "𐩃𐩁", "𐩃𐩂", "𐩃𐩃", "𐩃𐩃𐩀", "𐨀𐨅𐨎", "", "।", "॥"], - "candra": ["𐨅"] - }, - "khmer": { - "vowels": ["អ", "អា", "ឥ", "ឦ", "ឧ", "ឩ", "ឫ", "ឬ", "ឭ", "ឮ", "", "ឯ", "ឰ", "", "ឱ", "ឳ"], - "vowel_marks": ["ា", "ិ", "ី", "ុ", "ូ", "្ឫ", "្ឬ", "្ឭ", "្ឮ", "", "េ", "ៃ", "", "ោ", "ៅ"], - "other_marks": ["ំ", "ះ", "ំ"], - "virama": ["៑"], - "consonants": ["ក", "ខ", "គ", "ឃ", "ង", "ច", "ឆ", "ជ", "ឈ", "ញ", "ដ", "ឋ", "ឌ", "ឍ", "ណ", "ត", "ថ", "ទ", "ធ", "ន", "ប", "ផ", "ព", "ភ", "ម", "យ", "រ", "ល", "វ", "ឝ", "ឞ", "ស", "ហ", "ឡ", "ក្ឞ", "ជ្ញ"], - "symbols": ["០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩", "ឱំ", "ៜ", "।", "॥"], - "candra": ["េ"] - }, - "khom_thai": { - "vowels": ["อ", "อา", "อิ", "อี", "อุ", "อู", "รุ", "รู", "ลุ", "ลู", "", "เอ", "อยฺ", "", "โอ", "อวฺ"], - "vowel_marks": ["า", "ิ", "ี", "ุ", "ู", "ฺฤ", "ฺฤๅ", "ฺลุ", "ฺลู", "", "เ", "ใ", "", "โ", "วฺ"], - "other_marks": ["ํ", "หฺ", "ํ"], - "virama": ["ฺ"], - "consonants": ["ก", "ข", "ค", "ฆ", "ง", "จ", "ฉ", "ช", "ฌ", "ญ", "ฏ", "ฐ", "ฑ", "ฒ", "ณ", "ต", "ถ", "ท", "ธ", "น", "ป", "ผ", "พ", "ภ", "ม", "ย", "ร", "ล", "ว", "ส", "ส", "ส", "ห", "ฬ", "กฺส", "ชฺญ"], - "symbols": ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "โอํ", "", "।", "॥"], - "candra": ["แ"] - }, - "khudawadi": { - "vowels": ["𑊰", "𑊱", "𑊲", "𑊳", "𑊴", "𑊵", "𑋙𑋡", "𑋙𑋢", "𑋚𑋡", "𑋚𑋢", "", "𑊶", "𑊷", "", "𑊸", "𑊹"], - "vowel_marks": ["𑋠", "𑋡", "𑋢", "𑋣", "𑋤", "𑋪𑋙𑋡", "𑋪𑋙𑋢", "𑋪𑋚𑋡", "𑋪𑋚𑋢", "", "𑋥", "𑋦", "", "𑋧", "𑋨"], - "other_marks": ["𑋟", "𑋞𑋪", "𑋟"], - "virama": ["𑋪"], - "consonants": ["𑊺", "𑊻", "𑊼", "𑊾", "𑊿", "𑋀", "𑋁", "𑋂", "𑋄", "𑋅", "𑋆", "𑋇", "𑋈", "𑋋", "𑋌", "𑋍", "𑋎", "𑋏", "𑋐", "𑋑", "𑋒", "𑋓", "𑋔", "𑋖", "𑋗", "𑋘", "𑋙", "𑋚", "𑋛", "𑋜", "𑋜𑋩", "𑋝", "𑋞", "𑋚𑋩", "𑊺𑋪𑋜𑋩", "𑋂𑋪𑋅"], - "symbols": ["𑋰", "𑋱", "𑋲", "𑋳", "𑋴", "𑋵", "𑋶", "𑋷", "𑋸", "𑋹", "𑊸𑋟", "ऽ", "।", "॥"], - "candra": ["𑋥"] - }, - "lao": { - "vowels": ["ອະ", "ອາ", "ອິ", "ອີ", "ອຸ", "ອູ", "ຣຸ", "ຣູ", "ລຸ", "ລູ", "", "ເອ", "ໄອ", "", "ໂອ", "ເອົາ"], - "vowel_marks": ["າ", "ິ", "ີ", "ຸ", "ູ", "ຣຸ", "ຣູ", "ລຸ", "ລູ", "", "ເ", "ໄ", "", "ໂ", "ເົາ"], - "other_marks": ["ງ", "ຫ", "ງ"], - "virama": [""], - "consonants": ["ກະ", "ຂະ", "ຄະ", "ຄະ", "ງະ", "ຈະ", "ຈະ", "ຊະ", "ຊະ", "ຍະ", "ຕະ", "ຖະ", "ທະ", "ທະ", "ນະ", "ຕະ", "ຖະ", "ທະ", "ທະ", "ນະ", "ປະ", "ຜະ", "ພະ", "ພະ", "ມະ", "ຢະ", "ຣະ", "ລະ", "ວະ", "ສະ", "ສະ", "ສະ", "ຫະ", "ລະ", "ກສະ", "ຊຍະ"], - "symbols": ["໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙", "ໂອງ", "'", "।", "॥"], - "candra": ["ແະ"] - }, - "lao_pali": { - "vowels": ["ອ", "ອາ", "ອິ", "ອີ", "ອຸ", "ອູ", "ຣຸ", "ຣູ", "ລຸ", "ລູ", "", "ເອ", "ໄອ", "", "ໂອ", "ເອົາ"], - "vowel_marks": ["າ", "ິ", "ີ", "ຸ", "ູ", "຺ຣຸ", "຺ຣູ", "຺ລຸ", "຺ລູ", "", "ເ", "ໄ", "", "ໂ", "ເົາ"], - "other_marks": ["ໍ", "ຫ໌", "ໍ"], - "virama": ["຺"], - "consonants": ["ກ", "ຂ", "ຄ", "ຆ", "ງ", "ຈ", "ຉ", "ຊ", "ຌ", "ຎ", "ຏ", "ຐ", "ຑ", "ຒ", "ຓ", "ຕ", "ຖ", "ທ", "ຘ", "ນ", "ປ", "ຜ", "ພ", "ຠ", "ມ", "ຍ", "ຣ", "ລ", "ວ", "ຨ", "ຩ", "ສ", "ຫ", "ຬ", "ກ຺ຩ", "ຊ຺ຎ"], - "symbols": ["໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙", "ໂອໍ", "'", "।", "॥"], - "candra": ["ແະ"] - }, - "lepcha": { - "vowels": ["ᰣ", "ᰣᰦ", "ᰣᰧ", "ᰣᰧᰶ", "ᰣᰪ", "ᰣᰫ", "ᰛᰪ", "ᰛᰫ", "ᰜᰪ", "ᰜᰫ", "", "ᰣᰬ", "ᰣᰬ", "", "ᰣᰨ", "ᰣᰩ"], - "vowel_marks": ["ᰦ", "ᰧ", "ᰧᰶ", "ᰪ", "ᰫ", "ᰥᰪ", "ᰥᰫ", "ᰜᰪ", "ᰜᰫ", "", "ᰬ", "ᰬ", "", "ᰨ", "ᰩ"], - "other_marks": ["ᰴ", "ᰝ", "ᰴ"], - "virama": [""], - "consonants": ["ᰀ", "ᰂ", "ᰃ", "ᰃ", "ᰅ", "ᰆ", "ᰇ", "ᰈ", "ᰈ", "ᰉ", "ᱍ", "ᱎ", "ᱏ", "ᱏ", "ᰍ", "ᰊ", "ᰋ", "ᰌ", "ᰌ", "ᰍ", "ᰎ", "ᰐ", "ᰓ", "ᰓ", "ᰕ", "ᰚ", "ᰛ", "ᰜ", "ᰟ", "ᰡ", "ᰡ᰷", "ᰠ", "ᰝ", "ᰜ᰷", "ᰀᰡ᰷", "ᰈᰉ"], - "symbols": ["᱀", "᱁", "᱂", "᱃", "᱄", "᱅", "᱆", "᱇", "᱈", "᱉", "ᰣᰨᰵ", "'", "।", "॥"], - "candra": ["ᰬ"] - }, - "limbu": { - "vowels": ["ᤀ", "ᤀᤠ", "ᤀᤡ", "ᤀᤡ᤺", "ᤀᤢ", "ᤀ᤺ᤢ", "ᤖᤢ", "ᤖ᤺ᤢ", "ᤗᤢ", "ᤗ᤺ᤢ", "", "ᤀᤣ", "ᤀᤤ", "", "ᤀᤥ", "ᤀᤦ"], - "vowel_marks": ["ᤠ", "ᤡ", "ᤡ᤺", "ᤢ", "᤺ᤢ", "ᤪᤢ", "ᤪ᤺ᤢ", "᤻ᤗᤢ", "᤻ᤗ᤺ᤢ", "", "ᤣ", "ᤤ", "", "ᤥ", "ᤦ"], - "other_marks": ["ᤱ", "ᤜ᤻", "ᤱ"], - "virama": ["᤻"], - "consonants": ["ᤁ", "ᤂ", "ᤃ", "ᤄ", "ᤅ", "ᤆ", "ᤇ", "ᤈ", "ᤈ", "ᤏ", "ᤋ", "ᤌ", "ᤍ", "ᤎ", "ᤏ", "ᤋ", "ᤌ", "ᤍ", "ᤎ", "ᤏ", "ᤐ", "ᤑ", "ᤒ", "ᤓ", "ᤔ", "ᤕ", "ᤖ", "ᤗ", "ᤘ", "ᤙ", "ᤙ", "ᤛ", "ᤜ", "ᤗ", "ᤁ᤻ᤙ", "ᤈ᤻ᤏ"], - "symbols": ["᥆", "᥇", "᥈", "᥉", "᥊", "᥋", "᥌", "᥍", "᥎", "᥏", "ᤀᤥᤱ", "'", "।", "॥"], - "candra": ["ᤧ"] - }, - "mahajani": { - "vowels": ["𑅐", "𑅐", "𑅑", "𑅑", "𑅒", "𑅒", "𑅭𑅒", "𑅭𑅒", "𑅮𑅒", "𑅮𑅒", "𑅓", "𑅓", "𑅑", "𑅔", "𑅔", "𑅒"], - "vowel_marks": ["𑅐", "𑅑", "𑅑", "𑅒", "𑅒", "𑅭𑅒", "𑅭𑅒", "𑅮𑅒", "𑅮𑅒", "𑅓", "𑅓", "𑅑", "𑅔", "𑅔", "𑅒"], - "other_marks": ["𑅧", "𑅱", "𑅧"], - "virama": [""], - "consonants": ["𑅕", "𑅖", "𑅗", "𑅘", "𑅧", "𑅙", "𑅚", "𑅛", "𑅜", "𑅝", "𑅞", "𑅟", "𑅠", "𑅡", "𑅢", "𑅣", "𑅤", "𑅥", "𑅦", "𑅧", "𑅨", "𑅩", "𑅪", "𑅫", "𑅬", "𑅛", "𑅭", "𑅮", "𑅯", "𑅰𑅳", "𑅖𑅳", "𑅰", "𑅱", "𑅮𑅳", "𑅕𑅖𑅳", "𑅛𑅝"], - "symbols": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "𑅔𑅬", "", "।", "॥"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑅱॑", "𑅱॒", "𑅧॑", "𑅧॒"], - "candra": ["𑅓"], - "other": ["𑅕𑅳", "𑅖𑅳", "𑅗𑅳", "𑅛𑅳", "𑅲", "𑅡𑅳", "𑅩𑅳", "𑅛", "𑅭𑅳"] - }, - "marchen": { - "vowels": ["𑲏", "𑲏𑲰", "𑲏𑲱", "𑲏𑲱𑲰", "𑲏𑲲", "𑲏𑲲𑲰", "𑲊𑲱", "𑲊𑲱𑲰", "𑲋𑲱", "𑲋𑲱𑲰", "", "𑲏𑲳", "𑲏𑲳𑲰", "", "𑲏𑲴", "𑲏𑲰𑲴"], - "vowel_marks": ["𑲰", "𑲱", "𑲱𑲰", "𑲲", "𑲲𑲰", "𑲪𑲱", "𑲪𑲱𑲰", "𑲫𑲱", "𑲫𑲱𑲰", "", "𑲳", "𑲳𑲰", "", "𑲴", "𑲰𑲴"], - "other_marks": ["𑲵", "𑲎", "𑲶"], - "virama": [""], - "consonants": ["𑱲", "𑱳", "𑱴", "𑱴𑲮", "𑱵", "𑲂", "𑲃", "𑲄", "𑲄𑲮", "𑱹", "𑱺", "𑱻", "𑱼", "𑱼𑲮", "𑱽", "𑱺", "𑱻", "𑱼", "𑱼𑲮", "𑱽", "𑱾", "𑱿", "𑲀", "𑲀𑲮", "𑲁", "𑲉", "𑲊", "𑲋", "𑲅", "𑲌", "𑲌", "𑲍", "𑲎", "𑲋", "𑱲𑲬", "𑲄𑲙"], - "symbols": ["༠", "༡", "༢", "༣", "༤", "༥", "༦", "༧", "༨", "༩", "𑲏𑲴𑲶", "", "।", "॥"], - "candra": ["𑲳"] - }, - "manipuri": { - "vowels": ["ꯑ", "ꯑꯥ", "ꯏ", "ꯏ", "ꯎ", "ꯎ", "ꯔꯨ", "ꯔꯨ", "ꯂꯨ", "ꯂꯨ", "", "ꯑꯦ", "ꯑꯩ", "", "ꯑꯣ", "ꯑꯧ"], - "vowel_marks": ["ꯥ", "ꯤ", "ꯤ", "ꯨ", "ꯨ", "꯭ꯔꯨ", "꯭ꯔꯨ", "꯭ꯂꯨ", "꯭ꯂꯨ", "", "ꯦ", "ꯩ", "", "ꯣ", "ꯧ"], - "other_marks": ["ꯪ", "ꯍ꯭", "ꯪ"], - "virama": ["꯭"], - "consonants": ["ꯀ", "ꯈ", "ꯒ", "ꯘ", "ꯉ", "ꯆ", "ꯆ", "ꯖ", "ꯓ", "ꯅ", "ꯇ", "ꯊ", "ꯗ", "ꯙ", "ꯅ", "ꯇ", "ꯊ", "ꯗ", "ꯙ", "ꯅ", "ꯄ", "ꯐ", "ꯕ", "ꯚ", "ꯃ", "ꯌ", "ꯔ", "ꯂ", "ꯋ", "ꯁ", "ꯁ", "ꯁ", "ꯍ", "ꯂ", "ꯛꯁ", "ꯖ꯭ꯅ"], - "symbols": ["꯰", "꯱", "꯲", "꯳", "꯴", "꯵", "꯶", "꯷", "꯸", "꯹", "ꯑꯣꯪ", "'", "।", "॥"], - "candra": ["ꯦ"] - }, - "modi": { - "vowels": ["𑘀", "𑘁", "𑘃", "𑘃", "𑘄", "𑘄", "𑘨𑘲", "𑘨𑘲", "𑘩𑘲", "𑘩𑘲", "", "𑘊", "𑘋", "", "𑘌", "𑘍"], - "vowel_marks": ["𑘰", "𑘲", "𑘲", "𑘳", "𑘳", "𑘿𑘨𑘲", "𑘿𑘨𑘲", "𑘿𑘩𑘲", "𑘿𑘩𑘲", "", "𑘹", "𑘺", "", "𑘻", "𑘼"], - "other_marks": ["𑘽", "𑘾", "𑘽"], - "virama": ["𑘿"], - "consonants": ["𑘎", "𑘏", "𑘐", "𑘑", "𑘒", "𑘓", "𑘔", "𑘕", "𑘖", "𑘗", "𑘘", "𑘙", "𑘚", "𑘛", "𑘜", "𑘝", "𑘞", "𑘟", "𑘠", "𑘡", "𑘢", "𑘣", "𑘤", "𑘥", "𑘦", "𑘧", "𑘨", "𑘩", "𑘪", "𑘫", "𑘬", "𑘭", "𑘮", "𑘯", "𑘎𑘿𑘬", "𑘕𑘿𑘗"], - "symbols": ["𑙐", "𑙑", "𑙒", "𑙓", "𑙔", "𑙕", "𑙖", "𑙗", "𑙘", "𑙙", "𑘌𑘽", "ऽ", "।", "॥"], - "candra": ["𑙀"] - }, - /* Malayalam - * --------- - * Sanskrit-complete. - */ - "malayalam": { - "vowels": ["അ", "ആ", "ഇ", "ഈ", "ഉ", "ഊ", "ഋ", "ൠ", "ഌ", "ൡ", "എ", "ഏ", "ഐ", "ഒ", "ഓ", "ഔ"], - "vowel_marks": ["ാ", "ി", "ീ", "ു", "ൂ", "ൃ", "ൄ", "ൢ", "ൣ", "െ", "േ", "ൈ", "ൊ", "ോ", "ൌ"], - "other_marks": ["ം", "ഃ", "ँ"], - "virama": ["്"], - "consonants": ["ക", "ഖ", "ഗ", "ഘ", "ങ", "ച", "ഛ", "ജ", "ഝ", "ഞ", "ട", "ഠ", "ഡ", "ഢ", "ണ", "ത", "ഥ", "ദ", "ധ", "ന", "പ", "ഫ", "ബ", "ഭ", "മ", "യ", "ര", "ല", "വ", "ശ", "ഷ", "സ", "ഹ", "ള", "ക്ഷ", "ജ്ഞ"], - "symbols": ["൦", "൧", "൨", "൩", "൪", "൫", "൬", "൭", "൮", "൯", "ഓം", "ഽ", "।", "॥"], - "other": ["", "", "", "", "", "", "", "", "റ"] - }, - - "mon": { - "vowels": ["အ", "အာ", "ဣ", "ဣဳ", "ဥ", "ဥူ", "ၒ", "ၓ", "ၔ", "ၕ", "", "ဨ", "အဲ", "", "ဩ", "ဪ"], - "vowel_marks": ["ာ", "ိ", "ဳ", "ု", "ူ", "ၖ", "ၗ", "ၘ", "ၙ", "", "ေ", "ဲ", "", "ော", "ော်"], - "other_marks": ["ံ", "း", "ံ"], - "virama": ["်"], - "consonants": ["က", "ခ", "ဂ", "ဃ", "ၚ", "စ", "ဆ", "ဇ", "ၛ", "ည", "ဋ", "ဌ", "ဍ", "ဎ", "ဏ", "တ", "ထ", "ဒ", "ဓ", "န", "ပ", "ဖ", "ဗ", "ဘ", "မ", "ယ", "ရ", "လ", "ဝ", "ၐ", "ၑ", "သ", "ဟ", "ဠ", "က္ၑ", "ဇ္ည"], - "symbols": ["၀", "၁", "၂", "၃", "၄", "၅", "၆", "၇", "၈", "၉", "ဩံ", "'", "।", "॥"], - "candra": ["ေ"] - }, - "mro": { - "vowels": ["𖩒", "𖩆", "𖩊", "𖩊", "𖩑", "𖩑", "𖩓𖩑", "𖩓𖩑", "𖩍𖩑", "𖩍𖩑", "", "𖩘", "𖩆𖩂", "", "𖩑", "𖩖"], - "vowel_marks": ["𖩆", "𖩊", "𖩊", "𖩑", "𖩑", "𖩓𖩑", "𖩓𖩑", "𖩍𖩑", "𖩍𖩑", "", "𖩘", "𖩆𖩂", "", "𖩑", "𖩖"], - "other_marks": ["𖩃", "𖩉", "𖩃"], - "virama": [""], - "consonants": ["𖩌𖩒", "𖩈𖩒", "𖩌𖩒", "𖩈𖩒", "𖩁𖩒", "𖩋𖩒", "𖩋𖩒", "𖩋𖩒", "𖩋𖩒", "𖩏𖩒", "𖩀𖩒", "𖩕𖩒", "𖩅𖩒", "𖩅𖩒", "𖩏𖩒", "𖩀𖩒", "𖩕𖩒", "𖩅𖩒", "𖩅𖩒", "𖩏𖩒", "𖩐𖩒", "𖩇𖩒", "𖩄𖩒", "𖩄𖩒", "𖩃𖩒", "𖩂𖩒", "𖩓𖩒", "𖩍𖩒", "𖩗𖩒", "𖩔𖩒", "𖩔𖩒", "𖩔𖩒", "𖩉𖩒", "𖩍𖩒", "𖩌𖩔𖩒", "𖩋𖩏𖩒"], - "symbols": ["𖩠", "𖩡", "𖩢", "𖩣", "𖩤", "𖩥", "𖩦", "𖩧", "𖩨", "𖩩", "𖩑𖩃", "", "।", "॥"], - "candra": ["𖩘"] - }, - "multani": { - "vowels": ["𑊀", "𑊀", "𑊁", "𑊁", "𑊂", "𑊂", "𑊢𑊂", "𑊢𑊂", "𑊣𑊂", "𑊣𑊂", "", "𑊃", "𑊃", "", "𑊂", "𑊂"], - "vowel_marks": ["𑊀", "𑊁", "𑊁", "𑊂", "𑊂", "𑊢𑊂", "𑊢𑊂", "𑊣𑊂", "𑊣𑊂", "", "𑊃", "𑊃", "", "𑊂", "𑊂"], - "other_marks": ["𑊚", "𑊦", "𑊚"], - "virama": [""], - "consonants": ["𑊄", "𑊅", "𑊆", "𑊈", "𑊚", "𑊊", "𑊋", "𑊌", "𑊌", "𑊏", "𑊐", "𑊑", "𑊒", "𑊔", "𑊕", "𑊖", "𑊗", "𑊘", "𑊙", "𑊚", "𑊛", "𑊜", "𑊝", "𑊟", "𑊠", "𑊡", "𑊢", "𑊣", "𑊤", "𑊥", "𑊥", "𑊥", "𑊦", "𑊣", "𑊄𑊥", "𑊌𑊏"], - "symbols": ["੦", "੧", "੨", "੩", "੪", "੫", "੬", "੭", "੮", "੯", "𑊂𑊠", "", "।", "॥"], - "candra": ["𑊃"] - }, - "newa": { - "vowels": ["𑐀", "𑐁", "𑐂", "𑐃", "𑐄", "𑐅", "𑐆", "𑐇", "𑐈", "𑐉", "", "𑐊", "𑐋", "", "𑐌", "𑐍"], - "vowel_marks": ["𑐵", "𑐶", "𑐷", "𑐸", "𑐹", "𑐺", "𑐻", "𑐼", "𑐽", "", "𑐾", "𑐿", "", "𑑀", "𑑁"], - "other_marks": ["𑑄", "𑑅", "𑑃"], - "virama": ["𑑂"], - "consonants": ["𑐎", "𑐏", "𑐐", "𑐑", "𑐒", "𑐔", "𑐕", "𑐖", "𑐗", "𑐘", "𑐚", "𑐛", "𑐜", "𑐝", "𑐞", "𑐟", "𑐠", "𑐡", "𑐢", "𑐣", "𑐥", "𑐦", "𑐧", "𑐨", "𑐩", "𑐫", "𑐬", "𑐮", "𑐰", "𑐱", "𑐲", "𑐳", "𑐴", "𑐮𑑆", "𑐎𑑂𑐲", "𑐖𑑂𑐘"], - "symbols": ["𑑐", "𑑑", "𑑒", "𑑓", "𑑔", "𑑕", "𑑖", "𑑗", "𑑘", "𑑙", "𑑉", "𑑇", "।", "॥"], - "candra": ["𑐾"] - }, - "persian_old": { - "vowels": ["𐎠", "𐎠", "𐎡", "𐎡", "𐎢", "𐎢", "𐎽𐎢", "𐎽𐎢", "𐎾𐎢", "𐎾𐎢", "", "𐎡", "𐎠𐎡", "", "𐎢", "𐎠𐎢"], - // "othermarks": ["𐎶", "𐏃", "𐎶"], - "virama": [""], - "consonants": ["𐎣", "𐎧", "𐎥", "𐎥", "𐎴", "𐎨", "𐎨", "𐎩", "𐎩", "𐎴", "𐎫", "𐎫", "𐎭", "𐎭", "𐎴", "𐎫", "𐎰", "𐎭", "𐎭", "𐎴", "𐎱", "𐎱", "𐎲", "𐎲", "𐎶", "𐎹", "𐎼", "𐎾", "𐎺", "𐏁", "𐏂", "𐎿", "𐏃", "𐎾", "𐎣𐏂", "𐎩𐎴"], - "symbols": ["", "𐏑", "𐏒", "𐏒𐏑", "𐏒𐏒", "𐏒𐏒𐏑", "𐏒𐏒𐏒", "𐏒𐏒𐏒𐏑", "𐏒𐏒𐏒𐏒", "𐏒𐏒𐏒𐏒𐏑", "𐎢𐎶", "", "।", "॥"], - "candra": ["𐎡"] - }, - - /* Oriya - * ----- - * Sanskrit-complete. - */ - "oriya": { - "vowels": ["ଅ", "ଆ", "ଇ", "ଈ", "ଉ", "ଊ", "ଋ", "ୠ", "ଌ", "ୡ", "", "ଏ", "ଐ", "", "ଓ", "ଔ"], - "vowel_marks": ["ା", "ି", "ୀ", "ୁ", "ୂ", "ୃ", "ୄ", "ୢ", "ୣ", "", "େ", "ୈ", "", "ୋ", "ୌ"], - "other_marks": ["ଂ", "ଃ", "ଁ"], - "virama": ["୍"], - "consonants": ["କ", "ଖ", "ଗ", "ଘ", "ଙ", "ଚ", "ଛ", "ଜ", "ଝ", "ଞ", "ଟ", "ଠ", "ଡ", "ଢ", "ଣ", "ତ", "ଥ", "ଦ", "ଧ", "ନ", "ପ", "ଫ", "ବ", "ଭ", "ମ", "ଯ", "ର", "ଲ", "ଵ", "ଶ", "ଷ", "ସ", "ହ", "ଳ", "କ୍ଷ", "ଜ୍ଞ"], - "symbols": ["୦", "୧", "୨", "୩", "୪", "୫", "୬", "୭", "୮", "୯", "ଓଂ", "ଽ", "।", "॥"], - "other": ["", "", "", "", "ଡ", "ଢ", "", "ଯ", ""] - }, - "phags_pa": { - "vowels": ["ꡝ", "ꡝꡖ", "ꡞ", "ꡞꡖ", "ꡟ", "ꡟꡖ", "ꡘꡞ", "ꡘꡖꡞ", "ꡙꡞ", "ꡙꡖꡞ", "", "ꡠ", "ꡠꡖ", "", "ꡡ", "ꡡꡖ"], - "vowel_marks": ["ꡖ", "ꡞ", "ꡖꡞ", "ꡟ", "ꡖꡟ", "ꡱꡞ", "ꡖꡱꡞ", "ꡙꡞ", "ꡙꡖꡞ", "", "ꡠ", "ꡖꡠ", "", "ꡡ", "ꡖꡡ"], - "other_marks": ["ꡳ", "ꡜ", "ꡳ"], - "virama": [""], - "consonants": ["ꡀ", "ꡁ", "ꡂ", "ꡂꡜ", "ꡃ", "ꡐ", "ꡑ", "ꡒ", "ꡒꡜ", "ꡇ", "ꡩ", "ꡪ", "ꡫ", "ꡫꡜ", "ꡬ", "ꡈ", "ꡉ", "ꡊ", "ꡊꡜ", "ꡋ", "ꡌ", "ꡍ", "ꡎ", "ꡎꡜ", "ꡏ", "ꡗ", "ꡘ", "ꡙ", "ꡓ", "ꡚ", "ꡚ", "ꡛ", "ꡜ", "ꡙ", "ꡀꡚ", "ꡒꡇ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ꡳꡡ", "", "।", "॥"], - "candra": ["ꡠ"] - }, - "ranjana": { - "vowels": ["अ", "आ", "इ", "ई", "उ", "ऊ", "ऋ", "ॠ", "ऌ", "ॡ", "", "ए", "ऐ", "", "ओ", "औ"], - "vowel_marks": ["ा", "ि", "ी", "ु", "ू", "ृ", "ॄ", "ॢ", "ॣ", "", "े", "ै", "", "ो", "ौ"], - "other_marks": ["ं", "ः", "ँ"], - "virama": ["्"], - "consonants": ["क", "ख", "ग", "घ", "ङ", "च", "छ", "ज", "झ", "ञ", "ट", "ठ", "ड", "ढ", "ण", "त", "थ", "द", "ध", "न", "प", "फ", "ब", "भ", "म", "य", "र", "ल", "व", "श", "ष", "स", "ह", "ल", "क्ष", "ज्ञ"], - "symbols": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "ॐ", "ऽ", "।", "॥"], - "candra": ["े"] - }, - "rejang": { - "vowels": ["ꥆ", "ꥆ", "ꥆꥇ", "ꥆꥇ", "ꥆꥈ", "ꥆꥈ", "ꤽꥈ", "ꤽꥈ", "ꤾꥈ", "ꤾꥈ", "", "ꥆꥉ", "ꥆꥊ", "", "ꥆꥋ", "ꥆꥌ"], - "vowel_marks": ["", "ꥇ", "ꥇ", "ꥈ", "ꥈ", "꥓ꤽꥈ", "꥓ꤽꥈ", "꥓ꤾꥈ", "꥓ꤾꥈ", "", "ꥉ", "ꥊ", "", "ꥋ", "ꥌ"], - "other_marks": ["ꥏ", "ꥒ", "ꥏ"], - "virama": ["꥓"], - "consonants": ["ꤰ", "ꤰ", "ꤱ", "ꤱ", "ꤲ", "ꤹ", "ꤹ", "ꤺ", "ꤺ", "ꤻ", "ꤳ", "ꤳ", "ꤴ", "ꤴ", "ꤵ", "ꤳ", "ꤳ", "ꤴ", "ꤴ", "ꤵ", "ꤶ", "ꤶ", "ꤷ", "ꤷ", "ꤸ", "ꤿ", "ꤽ", "ꤾ", "ꥀ", "ꤼ", "ꤼ", "ꤼ", "ꥁ", "ꤾ", "ꤰ꥓ꤼ", "ꤺ꥓ꤻ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ꥆꥋꥏ", "'", "।", "॥"], - "candra": ["ꥎ"] - }, - "rohingya": { - "vowels": ["𐴀𐴝", "𐴀𐴝𐴤", "𐴀𐴞", "𐴀𐴞𐴤", "𐴀𐴟", "𐴀𐴟𐴤", "𐴌𐴟", "𐴌𐴟𐴤", "𐴓𐴟", "𐴓𐴟𐴤", "", "𐴀𐴠𐴤", "𐴀𐴝𐴙", "", "𐴀𐴡𐴤", "𐴀𐴝𐴗"], - "vowel_marks": ["𐴀𐴝𐴤", "𐴀𐴞", "𐴀𐴞𐴤", "𐴀𐴟", "𐴀𐴟𐴤", "𐴌𐴟", "𐴌𐴟𐴤", "𐴓𐴟", "𐴓𐴟𐴤", "", "𐴀𐴠𐴤", "𐴀𐴝𐴙", "", "𐴀𐴡𐴤", "𐴀𐴝𐴗"], - "other_marks": ["𐴣", "𐴇", "𐴣"], - "virama": [""], - "consonants": ["𐴑𐴝", "𐴑𐴝", "𐴒𐴝", "𐴒𐴝", "𐴚𐴝", "𐴆𐴝", "𐴆𐴝", "𐴅𐴝", "𐴅𐴝", "𐴛𐴝", "𐴄𐴝", "𐴄𐴝", "𐴋𐴝", "𐴋𐴝", "𐴕𐴝", "𐴃𐴝", "𐴃𐴝", "𐴊𐴝", "𐴊𐴝", "𐴕𐴝", "𐴂𐴝", "𐴂𐴝", "𐴁𐴝", "𐴁𐴝", "𐴔𐴝", "𐴘𐴝", "𐴌𐴝", "𐴓𐴝", "𐴖𐴝", "𐴐𐴝", "𐴐𐴝", "𐴏𐴝", "𐴇𐴝", "𐴓𐴝", "𐴑𐴐𐴝", "𐴅𐴛𐴝"], - "symbols": ["𐴰", "𐴱", "𐴲", "𐴳", "𐴴", "𐴵", "𐴶", "𐴷", "𐴸", "𐴹", "𐴀𐴀𐴡𐴴𐴔", "", "।", "॥"], - "candra": ["𐴀𐴠"] - }, - "ol_chiki": { - "vowels": ["ᱚ", "ᱟ", "ᱤ", "ᱤᱻ", "ᱩ", "ᱩᱻ", "ᱨᱩ", "ᱨᱩᱻ", "ᱞᱩ", "ᱞᱩᱻ", "ᱮᱹ", "ᱮ", "ᱚᱤ", "ᱳ", "ᱳ", "ᱚᱩ"], - "vowel_marks": ["ᱟ", "ᱤ", "ᱤᱻ", "ᱩ", "ᱩᱻ", "ᱨᱩ", "ᱨᱩᱻ", "ᱞᱩ", "ᱞᱩᱻ", "ᱮᱹ", "ᱮ", "ᱚᱤ", "ᱳ", "ᱳ", "ᱚᱩ"], - "other_marks": ["ᱝ", "ᱷ", "ᱸ"], - "virama": [""], - "consonants": ["ᱠᱚ", "ᱠᱷᱚ", "ᱜᱚ", "ᱜᱷᱚ", "ᱶᱚ", "ᱪᱚ", "ᱪᱷᱚ", "ᱡᱚ", "ᱡᱷᱚ", "ᱧᱚ", "ᱴᱚ", "ᱴᱷᱚ", "ᱰᱚ", "ᱰᱷᱚ", "ᱬᱚ", "ᱛᱚ", "ᱛᱷᱚ", "ᱫᱚ", "ᱫᱷᱚ", "ᱱᱚ", "ᱯᱚ", "ᱯᱷᱚ", "ᱵᱚ", "ᱵᱷᱚ", "ᱢᱚ", "ᱭᱚ", "ᱨᱚ", "ᱞᱚ", "ᱣᱚ", "ᱥᱚ", "ᱥᱚ", "ᱥᱚ", "ᱦᱚ", "ᱞᱚ", "ᱠᱥᱚ", "ᱡᱧᱚ"], - "symbols": ["᱐", "᱑", "᱒", "᱓", "᱔", "᱕", "᱖", "᱗", "᱘", "᱙", "ᱳᱸ", "'", "᱾", "᱿"], - "candra": ["ᱚᱹ"], - "other": ["ᱠᱚ", "ᱠᱷᱚ", "ᱜᱚ", "ᱡᱚ", "ᱲᱚ", "ᱲᱷᱚ", "ᱯᱚ", "ᱭᱚ", "ᱨᱚ"] - }, - "shan": { - "vowels": ["အ", "အႃ", "အိ", "အီ", "အု", "အူ", "အၖ", "အၗ", "အၘ", "အၙ", "အေ", "အေ", "အႆ", "အေႃ", "အေႃ", "အဝ်"], - "vowel_marks": ["ႃ", "ိ", "ီ", "ု", "ူ", "ၖ", "ၗ", "ၘ", "ၙ", "ေ", "ေ", "ႆ", "ေႃ", "ေႃ", "ဝ်"], - "other_marks": ["ံ", "း", "ံ"], - "virama": ["်"], - "consonants": ["ၵ", "ၶ", "ၷ", "ꧠ", "င", "ၸ", "ꧡ", "ꩡ", "ꧢ", "ၺ", "ꩦ", "ꩧ", "ꩨ", "ꩩ", "ꧣ", "တ", "ထ", "ၻ", "ꩪ", "ၼ", "ပ", "ၽ", "ၿ", "ꧤ", "မ", "ယ", "ရ", "လ", "ဝ", "ၐ", "ၑ", "သ", "ႁ", "ꩮ", "ၵ်ၑ", "ꩡ်ၺ"], - "symbols": ["႐", "႑", "႒", "႓", "႔", "႕", "႖", "႗", "႘", "႙", "အေႃံ", "'", "၊", "။"], - "candra": ["ႄ"], - "other": ["ၵ", "ၶ", "ၷ", "ၹ", "ꩨ", "ꩩ", "ၾ", "ယ", "ရ"] - }, - "sharada": { - "vowels": ["𑆃", "𑆄", "𑆅", "𑆆", "𑆇", "𑆈", "𑆉", "𑆊", "𑆋", "𑆌", "𑆍𑇌", "𑆍", "𑆎", "𑆏𑇌", "𑆏", "𑆐"], - "vowel_marks": ["𑆳", "𑆴", "𑆵", "𑆶", "𑆷", "𑆸", "𑆹", "𑆺", "𑆻", "𑆼𑇌", "𑆼", "𑆽", "𑆾𑇌", "𑆾", "𑆿"], - "other_marks": ["𑆁", "𑆂", "𑆀"], - "virama": ["𑇀"], - "consonants": ["𑆑", "𑆒", "𑆓", "𑆔", "𑆕", "𑆖", "𑆗", "𑆘", "𑆙", "𑆚", "𑆛", "𑆜", "𑆝", "𑆞", "𑆟", "𑆠", "𑆡", "𑆢", "𑆣", "𑆤", "𑆥", "𑆦", "𑆧", "𑆨", "𑆩", "𑆪", "𑆫", "𑆬", "𑆮", "𑆯", "𑆰", "𑆱", "𑆲", "𑆭", "𑆑𑇀𑆰", "𑆘𑇀𑆚"], - "symbols": ["𑇐", "𑇑", "𑇒", "𑇓", "𑇔", "𑇕", "𑇖", "𑇗", "𑇘", "𑇙", "𑆏𑆀", "𑇁", "𑇅", "𑇆"], - "zwj": ["\u200D"], - "skip": [""], - "accent": ["\u0951", "\u0952"], - "combo_accent": ["𑆂॑", "𑆂॒", "𑆁॑", "𑆁॒"], - "candra": ["𑆼"], - "other": ["𑆑𑇊", "𑆒𑇊", "𑆓𑇊", "𑆘𑇊", "𑆝𑇊", "𑆞𑇊", "𑆦𑇊", "𑆪𑇊", "𑆫𑇊"] - }, - "siddham": { - "vowels": ["𑖀", "𑖁", "𑖂", "𑖃", "𑖄", "𑖅", "𑖆", "𑖇", "𑖈", "𑖉", "𑖊", "𑖊", "𑖋", "𑖌", "𑖌", "𑖍"], - "vowel_marks": ["𑖯", "𑖰", "𑖱", "𑖲", "𑖳", "𑖴", "𑖵", "𑖿𑖩𑖰", "𑖿𑖩𑖱", "𑖸", "𑖸", "𑖹", "𑖺", "𑖺", "𑖻"], - "other_marks": ["𑖽", "𑖾", "𑖼"], - "virama": ["𑖿"], - "consonants": ["𑖎", "𑖏", "𑖐", "𑖑", "𑖒", "𑖓", "𑖔", "𑖕", "𑖖", "𑖗", "𑖘", "𑖙", "𑖚", "𑖛", "𑖜", "𑖝", "𑖞", "𑖟", "𑖠", "𑖡", "𑖢", "𑖣", "𑖤", "𑖥", "𑖦", "𑖧", "𑖨", "𑖩", "𑖪", "𑖫", "𑖬", "𑖭", "𑖮", "𑖩𑗀", "𑖎𑖿𑖬", "𑖕𑖿𑖗"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "𑖌𑖼", "", "𑗂", "𑗃"], - "candra": ["𑖸"], - "other": ["𑖎𑗀", "𑖏𑗀", "𑖐𑗀", "𑖕𑗀", "𑖚𑗀", "𑖛𑗀", "𑖣𑗀", "𑖧𑗀", "𑖨𑗀"] - }, - "sinhala": { - "vowels": ["අ", "ආ", "ඉ", "ඊ", "උ", "ඌ", "ඍ", "ඎ", "ඏ", "ඐ", "එ", "ඒ", "ඓ", "ඔ", "ඕ", "ඖ"], - "vowel_marks": ["ා", "ි", "ී", "ු", "ූ", "ෘ", "ෲ", "ෟ", "ෳ", "ෙ", "ේ", "ෛ", "ො", "ෝ", "ෞ"], - "other_marks": ["ං", "ඃ", "ං"], - "virama": ["්"], - "consonants": ["ක", "ඛ", "ග", "ඝ", "ඞ", "ච", "ඡ", "ජ", "ඣ", "ඤ", "ට", "ඨ", "ඩ", "ඪ", "ණ", "ත", "ථ", "ද", "ධ", "න", "ප", "ඵ", "බ", "භ", "ම", "ය", "ර", "ල", "ව", "ශ", "ෂ", "ස", "හ", "ළ", "ක්‍ෂ", "ඥ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ඕං", "(අ)", ".", ".."], - "candra": ["ැ"], - "other": ["ක", "ඛ", "ග", "ජ", "ඩ", "ඪ", "ෆ", "ය", "ර"] - }, - "sora_sompeng": { - "vowels": ["𑃦𑃨", "𑃢", "𑃤", "𑃤", "𑃥", "𑃥", "𑃝𑃤", "𑃝𑃤", "𑃘𑃤", "𑃘𑃤", "𑃣", "𑃣", "𑃧", "𑃦", "𑃦", "𑃦𑃥"], - "vowel_marks": ["𑃢", "𑃤", "𑃤", "𑃥", "𑃥", "𑃝𑃤", "𑃝𑃤", "𑃘𑃤", "𑃘𑃤", "𑃣", "𑃣", "𑃧", "𑃦", "𑃦", "𑃦𑃥"], - "other_marks": ["𑃖", "𑃞", "𑃖"], - "virama": [""], - "consonants": ["𑃟", "𑃟𑃠", "𑃕", "𑃕𑃠", "𑃗", "𑃓", "𑃓𑃠", "𑃠", "𑃠𑃠", "𑃡", "𑃑𑃨", "𑃑𑃨𑃠", "𑃔", "𑃔𑃠", "𑃙𑃨", "𑃑", "𑃑𑃠", "𑃔𑃨", "𑃔𑃨𑃠", "𑃙", "𑃛", "𑃛𑃠", "𑃒", "𑃒𑃠", "𑃖", "𑃜", "𑃝", "𑃘", "𑃚", "𑃐𑃠", "𑃐𑃨", "𑃐", "𑃞", "𑃘𑃨", "𑃟𑃐𑃨", "𑃠𑃡"], - "symbols": ["𑃰", "𑃱", "𑃲", "𑃳", "𑃴", "𑃵", "𑃶", "𑃷", "𑃸", "𑃹", "𑃦𑃖", "'", ".", ".."], - "candra": ["𑃣"], - "other": ["𑃟", "𑃟𑃠", "𑃕", "𑃠", "𑃝𑃔", "𑃝𑃔𑃠", "𑃛𑃠", "𑃜", "𑃘"] - }, - "sundanese": { - "vowels": ["ᮃ", "ᮃ", "ᮄ", "ᮄ", "ᮅ", "ᮅ", "ᮛᮩ", "ᮛᮩ", "ᮜᮩ", "ᮜᮩ", "ᮈ", "ᮈ", "ᮃᮄ", "ᮇ", "ᮇ", "ᮃᮅ"], - "vowel_marks": ["", "ᮤ", "ᮤ", "ᮥ", "ᮥ", "ᮢᮩ", "ᮢᮩ", "ᮣᮩ", "ᮣᮩ", "ᮨ", "ᮨ", "ᮄ", "ᮧ", "ᮧ", "ᮅ"], - "other_marks": ["ᮀ", "ᮂ", "ᮀ"], - "virama": ["᮪"], - "consonants": ["ᮊ", "ᮊ", "ᮌ", "ᮌ", "ᮍ", "ᮎ", "ᮎ", "ᮏ", "ᮏ", "ᮑ", "ᮒ", "ᮒ", "ᮓ", "ᮓ", "ᮔ", "ᮒ", "ᮒ", "ᮓ", "ᮓ", "ᮔ", "ᮕ", "ᮕ", "ᮘ", "ᮘ", "ᮙ", "ᮚ", "ᮛ", "ᮜ", "ᮝ", "ᮯ", "ᮯ", "ᮞ", "ᮠ", "ᮜ", "ᮊ᮪ᮯ", "ᮏ᮪ᮑ"], - "symbols": ["᮰", "᮱", "᮲", "᮳", "᮴", "᮵", "᮶", "᮷", "᮸", "᮹", "ᮇᮀ", "ᮺ", ".", ".."], - "candra": ["ᮦ"], - "other": ["ᮋ", "ᮮ", "ᮌ", "ᮐ", "ᮓ", "ᮓ", "ᮖ", "ᮚ", "ᮛ"] - }, - "syloti_nagari": { - "vowels": ["ꠅ", "ꠀ", "ꠁ", "ꠁ", "ꠃ", "ꠃ", "ꠞꠤ", "ꠞꠤ", "ꠟꠤ", "ꠟꠤ", "ꠄ", "ꠄ", "ꠅꠂ", "ꠅ", "ꠅ", "ꠅꠃ"], - "vowel_marks": ["ꠣ", "ꠤ", "ꠤ", "ꠥ", "ꠥ", "꠆ꠞꠤ", "꠆ꠞꠤ", "꠆ꠟꠤ", "꠆ꠟꠤ", "ꠦ", "ꠦ", "ꠂ", "ꠧ", "ꠧ", "ꠃ"], - "other_marks": ["ꠋ", "ꠢ꠆", "ꠋ"], - "virama": ["꠆"], - "consonants": ["ꠇ", "ꠈ", "ꠉ", "ꠊ", "ꠘ", "ꠌ", "ꠍ", "ꠎ", "ꠏ", "ꠘ", "ꠐ", "ꠑ", "ꠒ", "ꠓ", "ꠘ", "ꠔ", "ꠕ", "ꠖ", "ꠗ", "ꠘ", "ꠙ", "ꠚ", "ꠛ", "ꠜ", "ꠝ", "ꠎ", "ꠞ", "ꠟ", "ꠛ", "ꠡ", "ꠡ", "ꠡ", "ꠢ", "ꠟ", "ꠇ꠆ꠡ", "ꠎ꠆ꠘ"], - "symbols": ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯", "ꠅꠋ", "ঽ", "।", "॥"], - "candra": ["ꠦ"], - "other": ["ꠇ", "ꠈ", "ꠉ", "ꠎ", "ꠠ", "ꠓ", "ꠚ", "ꠎ", "ꠞ"] - }, - "tagalog": { - "vowels": ["ᜀ", "ᜀ", "ᜁ", "ᜁ", "ᜂ", "ᜂ", "ᜎᜓ", "ᜎᜓ", "ᜎᜓ", "ᜎᜓ", "ᜁ", "ᜁ", "ᜀᜁ", "ᜂ", "ᜂ", "ᜀᜂ"], - "vowel_marks": ["", "ᜒ", "ᜒ", "ᜓ", "ᜓ", "᜔ᜎᜓ", "᜔ᜎᜓ", "᜔ᜎᜓ", "᜔ᜎᜓ", "ᜒ", "ᜒ", "ᜁ", "ᜓ", "ᜓ", "ᜂ"], - "other_marks": ["ᜋ᜔", "ᜑ᜔", "ᜋ᜔"], - "virama": ["᜔"], - "consonants": ["ᜃ", "ᜃ", "ᜄ", "ᜄ", "ᜅ", "ᜐ", "ᜐ", "ᜇ", "ᜇ", "ᜈ", "ᜆ", "ᜆ", "ᜇ", "ᜇ", "ᜈ", "ᜆ", "ᜆ", "ᜇ", "ᜇ", "ᜈ", "ᜉ", "ᜉ", "ᜊ", "ᜊ", "ᜋ", "ᜌ", "ᜎ", "ᜎ", "ᜏ", "ᜐ", "ᜐ", "ᜐ", "ᜑ", "ᜎ", "ᜃ᜔ᜐ", "ᜇ᜔ᜈ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ᜂᜋ᜔", "", "᜵", "᜶"], - "candra": ["ᜒ"], - "other": ["ᜃ", "ᜃ", "ᜄ", "ᜇ", "ᜇ", "ᜇ", "ᜉ", "ᜌ", "ᜎ"] - }, - "tagbanwa": { - "vowels": ["ᝠ", "ᝠ", "ᝡ", "ᝡ", "ᝢ", "ᝢ", "ᝮᝳ", "ᝮᝳ", "ᝮᝳ", "ᝮᝳ", "ᝡ", "ᝡ", "ᝠᝡ", "ᝢ", "ᝢ", "ᝠᝢ"], - "vowel_marks": ["", "ᝲ", "ᝲ", "ᝳ", "ᝳ", "ᝮᝳ", "ᝮᝳ", "ᝮᝳ", "ᝮᝳ", "ᝲ", "ᝲ", "ᝡ", "ᝳ", "ᝳ", "ᝢ"], - "other_marks": ["ᝫ", "ᝣ", "ᝫ"], - "virama": [""], - "consonants": ["ᝣ", "ᝣ", "ᝤ", "ᝤ", "ᝥ", "ᝰ", "ᝰ", "ᝧ", "ᝧ", "ᝨ", "ᝦ", "ᝦ", "ᝧ", "ᝧ", "ᝨ", "ᝦ", "ᝦ", "ᝧ", "ᝧ", "ᝨ", "ᝩ", "ᝩ", "ᝪ", "ᝪ", "ᝫ", "ᝬ", "ᝮ", "ᝮ", "ᝯ", "ᝰ", "ᝰ", "ᝰ", "ᝣ", "ᝮ", "ᝣᝰ", "ᝧᝨ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ᝢᝫ", "", "᜵", "᜶"], - "candra": ["ᝲ"], - "other": ["ᝣ", "ᝣ", "ᝤ", "ᝧ", "ᝧ", "ᝧ", "ᝩ", "ᝬ", "ᝮ"] - }, - "tai_laing": { - "vowels": ["အ", "အႃ", "အိ", "အီ", "အု", "အူ", "ꩺိ", "ꩺီ", "လိ", "လီ", "အေ", "အေ", "အႆ", "အေႃ", "အေႃ", "အဝ်"], - "vowel_marks": ["ႃ", "ိ", "ီ", "ု", "ူ", "ြိ", "ြီ", "်လိ", "်လီ", "ေ", "ေ", "ႆ", "ေႃ", "ေႃ", "ဝ်"], - "other_marks": ["ံ", "း", "ံ"], - "virama": ["်"], - "consonants": ["က", "ၵ", "ꧩ", "ꧪ", "င", "ၸ", "ꩬ", "ꧫ", "ꧬ", "ꧧ", "ꩦ", "ꩧ", "ꧭ", "ꧮ", "ꧯ", "တ", "ထ", "ꧻ", "ꧼ", "ꩫ", "ပ", "ꧤ", "ꧽ", "ꧾ", "မ", "ယ", "ꩺ", "လ", "ဝ", "ꧬ", "ꧬ", "ꧬ", "ၯ", "ꧺ", "က်ꧬ", "ꧫ်ꧧ"], - "symbols": ["꧰", "꧱", "꧲", "꧳", "꧴", "꧵", "꧶", "꧷", "꧸", "꧹", "အေႃံ", "'", "၊", "။"], - "candra": ["ႄ"], - "other": ["က", "ၵ", "ꧩ", "ꧫ", "ꧭ", "ꧮ", "ꧨ", "ယ", "ꩺ"] - }, - "takri": { - "vowels": ["𑚀", "𑚁", "𑚂", "𑚃", "𑚄", "𑚅", "𑚤𑚮", "𑚤𑚯", "𑚥𑚮", "𑚥𑚯", "𑚆", "𑚆", "𑚇", "𑚈", "𑚈", "𑚉"], - "vowel_marks": ["𑚭", "𑚮", "𑚯", "𑚰", "𑚱", "𑚶𑚤𑚮", "𑚶𑚤𑚯", "𑚶𑚥𑚮", "𑚶𑚥𑚯", "𑚳", "𑚲", "𑚳", "𑚴", "𑚴", "𑚵"], - "other_marks": ["𑚫", "𑚬", "𑚫"], - "virama": ["𑚶"], - "consonants": ["𑚊", "𑚋", "𑚌", "𑚍", "𑚎", "𑚏", "𑚐", "𑚑", "𑚒", "𑚓", "𑚔", "𑚕", "𑚖", "𑚗", "𑚘", "𑚙", "𑚚", "𑚛", "𑚜", "𑚝", "𑚞", "𑚟", "𑚠", "𑚡", "𑚢", "𑚣", "𑚤", "𑚥", "𑚦", "𑚧", "𑚋", "𑚨", "𑚩", "𑚥𑚷", "𑚊𑚶𑚋", "𑚑𑚶𑚓"], - "symbols": ["𑛀", "𑛁", "𑛂", "𑛃", "𑛄", "𑛅", "𑛆", "𑛇", "𑛈", "𑛉", "𑚈𑚫", "ऽ", "।", "॥"], - "candra": ["𑚳"], - "other": ["𑚊𑚷", "𑚋𑚷", "𑚌𑚷", "𑚑𑚷", "𑚪", "𑚗𑚷", "𑚟𑚷", "𑚣𑚷", "𑚤𑚷"] - }, - /* Tamil - * ----- - * Missing R/RR/lR/lRR vowel marks and voice/aspiration distinctions. - * The most incomplete of the Sanskrit schemes here. - */ - "tamil": { - "vowels": ["அ", "ஆ", "இ", "ஈ", "உ", "ஊ", "", "", "", "", "எ", "ஏ", "ஐ", "ஒ", "ஓ", "ஔ"], - "vowel_marks": ["ா", "ி", "ீ", "ு", "ூ", "", "", "", "", "ெ", "ே", "ை", "ொ", "ோ", "ௌ"], - "other_marks": ["ஂ", "ஃ", ""], - "virama": ["்"], - "consonants": ["க", "க", "க", "க", "ங", "ச", "ச", "ஜ", "ச", "ஞ", "ட", "ட", "ட", "ட", "ண", "த", "த", "த", "த", "ந", "ப", "ப", "ப", "ப", "ம", "ய", "ர", "ல", "வ", "ஶ", "ஷ", "ஸ", "ஹ", "ள", "க்ஷ", "ஜ்ஞ"], - "symbols": ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯", "ௐ", "ऽ", "।", "॥"], - "other": ["", "", "", "", "", "", "", "", "ற"] - }, - "tamil_extended": { - "vowels": ["அ", "ஆ", "இ", "ஈ", "உ", "ஊ", "𑌋", "𑍠", "𑌌", "𑍡", "எ", "ஏ", "ஐ", "ஒ", "ஓ", "ஔ"], - "vowel_marks": ["ா", "ி", "ீ", "ு", "ூ", "𑍃", "𑍄", "𑍢", "𑍣", "ெ", "ே", "ை", "ொ", "ோ", "ௌ"], - "other_marks": ["𑌂", "𑌃", "𑌁"], - "virama": ["்"], - "consonants": ["க", "𑌖", "𑌗", "𑌘", "ங", "ச", "𑌛", "ஜ", "𑌝", "ஞ", "ட", "𑌠", "𑌡", "𑌢", "ண", "த", "𑌥", "𑌦", "𑌧", "ந", "ப", "𑌫", "𑌬", "𑌭", "ம", "ய", "ர", "ல", "வ", "ஶ", "ஷ", "ஸ", "ஹ", "ள", "க்ஷ", "ஜ்ஞ"], - "symbols": ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯", "ௐ", "𑌽", "।", "॥"], - "candra": ["ெ"], - "other": ["க𑌼", "𑌖𑌼", "𑌗𑌼", "ஜ𑌼", "𑌡𑌼", "𑌢𑌼", "𑌫𑌼", "ய𑌼", "ற"] - }, - "tamil_superscripted": { - "vowels": ["அ", "ஆ", "இ", "ஈ", "உ", "ஊ", "ருʼ", "ரூʼ", "லுʼ", "லூʼ", "எ", "ஏ", "ஐ", "ஒ", "ஓ", "ஔ"], - "vowel_marks": ["ா", "ி", "ீ", "ு", "ூ", "்ருʼ", "்ரூʼ", "்லுʼ", "்லூʼ", "ெ", "ே", "ை", "ொ", "ோ", "ௌ"], - "other_marks": ["ம்ʼ", "꞉", "ம்ˮ"], - "virama": ["்"], - "consonants": ["க", "க²", "க³", "க⁴", "ங", - "ச", "ச²", "ஜ", "ஜ²", "ஞ", - "ட", "ட²", "ட³", "ட⁴", "ண", - "த", "த²", "த³", "த⁴", "ந", "ப", "ப²", "ப³", "ப⁴", "ம", "ய", "ர", "ல", "வ", "ஶ", "ஷ", "ஸ", "ஹ", "ள", "க்ஷ", "ஜ்ஞ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ௐ", "(அ)", ".", ".."], - "combo_accent": ["॑꞉", "॒꞉", "ம்॑ʼ", "ம்॒ʼ"], - "candra": ["ே"], - "other": ["ஃʼக", "ஃக²", "ஃக³", "ஃஜ", "ஃட²", "ஃட³", "ஃப", "ஃய", "ற"] - }, - /* Telugu - * ------ - * Sanskrit-complete. - */ - "telugu": { - "vowels": ["అ", "ఆ", "ఇ", "ఈ", "ఉ", "ఊ", "ఋ", "ౠ", "ఌ", "ౡ", "ఎ", "ఏ", "ఐ", "ఒ", "ఓ", "ఔ"], - "vowel_marks": ["ా", "ి", "ీ", "ు", "ూ", "ృ", "ౄ", "ౢ", "ౣ", "ె", "ే", "ై", "ొ", "ో", "ౌ"], - "other_marks": ["ం", "ః", "ఁ"], - "virama": ["్"], - "consonants": ["క", "ఖ", "గ", "ఘ", "ఙ", "చ", "ఛ", "జ", "ఝ", "ఞ", "ట", "ఠ", "డ", "ఢ", "ణ", "త", "థ", "ద", "ధ", "న", "ప", "ఫ", "బ", "భ", "మ", "య", "ర", "ల", "వ", "శ", "ష", "స", "హ", "ళ", "క్ష", "జ్ఞ"], - "symbols": ["౦", "౧", "౨", "౩", "౪", "౫", "౬", "౭", "౮", "౯", "ఓం", "ఽ", "।", "॥"], - "other": ["", "", "", "", "", "", "", "", "ఱ"] - }, - "thai": { - "vowels": ["อ", "อา", "อิ", "อี", "อุ", "อู", "ฤ", "ฤๅ", "ฦ", "ฦๅ", "เอะ", "เอ", "ไอ", "โอะ", "โอ", "เอา"], - "vowel_marks": ["า", "ิ", "ี", "ุ", "ู", "ฺฤ", "ฺฤๅ", "ฺฦ", "ฺฦๅ", "เะ", "เ", "ไ", "โะ", "โ", "เา"], - "other_marks": ["ํ", "ห์", "ํ"], - "virama": ["ฺ"], - "consonants": ["ก", "ข", "ค", "ฆ", "ง", "จ", "ฉ", "ช", "ฌ", "ญ", "ฏ", "ฐ", "ฑ", "ฒ", "ณ", "ต", "ถ", "ท", "ธ", "น", "ป", "ผ", "พ", "ภ", "ม", "ย", "ร", "ล", "ว", "ศ", "ษ", "ส", "ห", "ฬ", "กฺษ", "ชฺญ"], - "symbols": ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "โอํ", "'", "ฯ", "๚"], - "candra": ["แะ"], - "other": ["ก", "ข", "ค", "ซ", "ร", "รฺห", "ฟ", "ย", "ร"] - }, - "tibetan": { - "vowels": ["ཨ", "ཨཱ", "ཨི", "ཨཱི", "ཨུ", "ཨཱུ", "རྀ", "རཱྀ", "ལྀ", "ལཱྀ", "ཨེ", "ཨེ", "ཨཻ", "ཨོ", "ཨོ", "ཨཽ"], - "vowel_marks": ["ཱ", "ི", "ཱི", "ུ", "ཱུ", "ྲྀ", "ྲཱྀ", "ླྀ", "ླཱྀ", "ེ", "ེ", "ཻ", "ོ", "ོ", "ཽ"], - "other_marks": ["ཾ", "ཿ", "ྃ"], - "virama": [""], - "consonants": ["ཀ", "ཁ", "ག", "གྷ", "ང", "ཙ", "ཚ", "ཛ", "ཛྷ", "ཉ", "ཊ", "ཋ", "ཌ", "ཌྷ", "ཎ", "ཏ", "ཐ", "ད", "དྷ", "ན", "པ", "ཕ", "བ", "བྷ", "མ", "ཡ", "ར", "ལ", "བ", "ཤ", "ཥ", "ས", "ཧ", "ལ༹", "ཀྵ", "ཛྙ"], - "symbols": ["༠", "༡", "༢", "༣", "༤", "༥", "༦", "༧", "༨", "༩", "ༀ", "྅", "།", "༎"], - "candra": ["ེ"], - "other": ["ཀ༹", "ཁ༹", "ག༹", "ཟ", "ཌ༹", "ཌྷ༹", "ཕ༹", "ཡ༹", "ར༹"] - }, - "tirhuta_maithili": { - "vowels": ["𑒁", "𑒂", "𑒃", "𑒄", "𑒅", "𑒆", "𑒇", "𑒈", "𑒉", "𑒊", "𑒁𑒺", "𑒋", "𑒌", "𑒁𑒽", "𑒍", "𑒎"], - "vowel_marks": ["𑒰", "𑒱", "𑒲", "𑒳", "𑒴", "𑒵", "𑒶", "𑒷", "𑒸", "𑒺", "𑒹", "𑒻", "𑒽", "𑒼", "𑒾"], - "other_marks": ["𑓀", "𑓁", "𑒿"], - "virama": ["𑓂"], - "consonants": ["𑒏", "𑒐", "𑒑", "𑒒", "𑒓", "𑒔", "𑒕", "𑒖", "𑒗", "𑒘", "𑒙", "𑒚", "𑒛", "𑒜", "𑒝", "𑒞", "𑒟", "𑒠", "𑒡", "𑒢", "𑒣", "𑒤", "𑒥", "𑒦", "𑒧", "𑒨", "𑒩", "𑒪", "𑒫", "𑒬", "𑒭", "𑒮", "𑒯", "𑒝𑓃", "𑒏𑓂𑒭", "𑒖𑓂𑒘"], - "symbols": ["𑓐", "𑓑", "𑓒", "𑓓", "𑓔", "𑓕", "𑓖", "𑓗", "𑓘", "𑓙", "𑓇", "𑓄", "।", "॥"], - "candra": ["𑒹"], - "other": ["𑒏𑓃", "𑒐𑓃", "𑒑𑓃", "𑒖𑓃", "𑒛𑓃", "𑒜𑓃", "𑒤𑓃", "𑒨𑓃", "𑒩"] - }, - "urdu": { - "vowels": ["اَ", "آ", "اِ", "اِی", "اُ", "اُو", "رِ", "رِی", "لِ", "لِی", "اے", "اے", "اَے", "او", "او", "اَو"], - "vowel_marks": ["ا", "ِ", "ِی", "ُ", "ُو", "ْرِ", "ْرِی", "ْلِ", "ْلِی", "ے", "ے", "ے", "و", "و", "و"], - "other_marks": ["ں", "ہ", "ں"], - "virama": ["ْ"], - "consonants": ["کَ", "کھَ", "گَ", "گھَ", "نَ", "چَ", "چھَ", "جَ", "جھَ", "نَ", "ٹَ", "ٹھَ", "ڈَ", "ڈھَ", "نَ", "تَ", "تھَ", "دَ", "دھَ", "نَ", "پَ", "پھَ", "بَ", "بھَ", "مَ", "یَ", "رَ", "لَ", "وَ", "شَ", "شَ", "سَ", "ہَ", "لَ", "کْشَ", "جْنَ"], - "symbols": ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "اومْ", "", "۔", "۔۔"], - "candra": ["ے"], - "other": ["قَ", "خَ", "غَ", "زَ", "ڑَ", "ڑھَ", "فَ", "یَ", "رَ"] - }, - "vattelutu": { - "vowels": ["அ", "ஆ", "இ", "ஈ", "உ", "ஊ", "ரு", "ரூ", "லு", "லூ", "எ", "ஏ", "ஐ", "ஒ", "ஓ", "ஔ"], - "vowel_marks": ["ா", "ி", "ீ", "ு", "ூ", "்ரு", "்ரூ", "்லு", "்லூ", "ெ", "ே", "ை", "ொ", "ோ", "ௌ"], - "other_marks": ["ம்", "꞉", "ம்"], - "virama": ["்"], - "consonants": ["க", "க", "க", "க", "ங", "ச", "ச", "ச", "ச", "ஞ", "ட", "ட", "ட", "ட", "ண", "த", "த", "த", "த", "ந", "ப", "ப", "ப", "ப", "ம", "ய", "ர", "ல", "வ", "ச", "ச", "ச", "க", "ள", "க்ச", "ச்ஞ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "ஓம்", "", ".", ".."], - "candra": ["ெ"], - "other": ["க", "க", "க", "ச", "ட", "ட", "ப", "ய", "ற"] - }, - "wancho": { - "vowels": ["𞋁", "𞋀", "𞋜", "𞋜", "𞋞", "𞋞", "𞋗𞋞", "𞋗𞋞", "𞋈𞋞", "𞋈𞋞", "𞋛", "𞋛", "𞋀𞋜", "𞋕", "𞋕", "𞋖"], - "vowel_marks": ["𞋀", "𞋜", "𞋜", "𞋞", "𞋞", "𞋗𞋞", "𞋗𞋞", "𞋈𞋞", "𞋈𞋞", "𞋛", "𞋛", "𞋀𞋜", "𞋕", "𞋕", "𞋖"], - "other_marks": ["𞋝", "𞋫", "𞋉"], - "virama": [""], - "consonants": ["𞋔𞋁", "𞋙𞋁", "𞋅𞋁", "𞋅𞋁", "𞋝𞋁", "𞋃𞋁", "𞋃𞋁", "𞋐𞋁", "𞋐𞋁", "𞋩𞋁", "𞋋𞋁", "𞋌𞋁", "𞋄𞋁", "𞋄𞋁", "𞋉𞋁", "𞋋𞋁", "𞋌𞋁", "𞋄𞋁", "𞋄𞋁", "𞋉𞋁", "𞋊𞋁", "𞋇𞋁", "𞋂𞋁", "𞋂𞋁", "𞋘𞋁", "𞋆𞋁", "𞋗𞋁", "𞋈𞋁", "𞋓𞋁", "𞋏𞋁", "𞋏𞋁", "𞋎𞋁", "𞋚𞋁", "𞋟𞋁", "𞋔𞋏𞋁", "𞋐𞋩𞋁"], - "symbols": ["𞋰", "𞋱", "𞋲", "𞋳", "𞋴", "𞋵", "𞋶", "𞋷", "𞋸", "𞋹", "𞋦", "", ".", ".."], - "candra": ["𞋛"], - "other": ["𞋔𞋁", "𞋙𞋁", "𞋅𞋁", "𞋑𞋁", "𞋄𞋁", "𞋄𞋁", "𞋍𞋁", "𞋆𞋁", "𞋗𞋁"] - }, - "warang_citi": { - "vowels": ["𑣁", "𑣁𑣙", "𑣂", "𑣆", "𑣃", "𑣇", "𑣜𑣃", "𑣜𑣇", "𑣚𑣃", "𑣚𑣇", "𑣈", "𑣈", "𑣆", "𑣉", "𑣉", "𑣇"], - "vowel_marks": ["𑣁𑣙", "𑣂", "𑣆", "𑣃", "𑣇", "𑣜𑣃", "𑣜𑣇", "𑣚𑣃", "𑣚𑣇", "𑣈", "𑣈", "𑣆", "𑣉", "𑣉", "𑣇"], - "other_marks": ["𑣀", "𑣄", "𑣀"], - "virama": [""], - "consonants": ["𑣌", "𑣌", "𑣋", "𑣋", "𑣊", "𑣏", "𑣏", "𑣎", "𑣎", "𑣍", "𑣒", "𑣒", "𑣑", "𑣑", "𑣐", "𑣕", "𑣕", "𑣔", "𑣔", "𑣓", "𑣘", "𑣘", "𑣗", "𑣗", "𑣖", "𑣅", "𑣜", "𑣚", "𑣟", "𑣞", "𑣞", "𑣞", "𑣙", "𑣚", "𑣌𑣞", "𑣎𑣍"], - "symbols": ["𑣠", "𑣡", "𑣢", "𑣣", "𑣤", "𑣥", "𑣦", "𑣧", "𑣨", "𑣩", "𑣿", "'", ".", ".."], - "candra": ["𑣈"], - "other": ["𑣌", "𑣌", "𑣋", "𑣎", "𑣛", "𑣛", "𑣘", "𑣅", "𑣜"] - }, - "zanbazar_square": { - "vowels": ["𑨀", "𑨀𑨊", "𑨀𑨁", "𑨀𑨁𑨊", "𑨀𑨂", "𑨀𑨂𑨊", "𑨫𑨉", "𑨫𑨉𑨊", "𑨬𑨉", "𑨬𑨉𑨊", "𑨀𑨄", "𑨀𑨄", "𑨀𑨄𑨊", "𑨀𑨆", "𑨀𑨆", "𑨀𑨆𑨊"], - "vowel_marks": ["𑨊", "𑨁", "𑨁𑨊", "𑨂", "𑨂𑨊", "𑩇𑨫𑨉", "𑩇𑨫𑨉𑨊", "𑩇𑨬𑨉", "𑩇𑨬𑨉𑨊", "𑨄", "𑨄", "𑨄𑨊", "𑨆", "𑨆", "𑨆𑨊"], - "other_marks": ["𑨸", "𑨹", "𑨵"], - "virama": ["𑨴"], - "consonants": ["𑨋", "𑨌", "𑨍", "𑨎", "𑨏", "𑨣", "𑨤", "𑨥", "𑨦", "𑨓", "𑨔", "𑨕", "𑨖", "𑨗", "𑨘", "𑨙", "𑨚", "𑨛", "𑨜", "𑨝", "𑨞", "𑨟", "𑨠", "𑨡", "𑨢", "𑨪", "𑨫", "𑨬", "𑨭", "𑨮", "𑨯", "𑨰", "𑨱", "𑨬", "𑨲", "𑨥𑩇𑨓"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "𑨀𑨆𑨵", "", "𑩂", "𑩃"], - "candra": ["𑨄"], - "other": ["𑨋", "𑨌", "𑨍", "𑨨", "𑨖", "𑨗", "𑨟", "𑨪", "𑨫"] - }, - /* International Alphabet of Sanskrit Transliteration - * -------------------------------------------------- - * The most "professional" Sanskrit romanization scheme. - */ - "iast": { - "vowels": ["a", "ā", "i", "ī", "u", "ū", "ṛ", "ṝ", "ḷ", "ḹ", "", "e", "ai", "", "o", "au"], - "other_marks": ["ṃ", "ḥ", "~"], - "virama": [""], - "consonants": ["k", "kh", "g", "gh", "ṅ", "c", "ch", "j", "jh", "ñ", "ṭ", "ṭh", "ḍ", "ḍh", "ṇ", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "v", "ś", "ṣ", "s", "h", "ḻ", "kṣ", "jñ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "oṃ", "'", "।", "॥"] - }, - - /* ITRANS - * ------ - * One of the first romanization schemes -- and one of the most - * complicated. For alternate forms, see the "allAlternates" variable - * below. - * - * '_' is a "null" letter, which allows adjacent vowels. - */ - "itrans": { - "vowels": ["a", "A", "i", "I", "u", "U", "RRi", "RRI", "LLi", "LLI", "", "e", "ai", "", "o", "au"], - "other_marks": ["M", "H", ".N"], - "virama": [""], - "consonants": ["k", "kh", "g", "gh", "~N", "ch", "Ch", "j", "jh", "~n", "T", "Th", "D", "Dh", "N", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "v", "sh", "Sh", "s", "h", "L", "kSh", "j~n"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "OM", ".a", "|", "||"], - "candra": [".c"], - "zwj": ["{}"], - "skip": "_", - "accent": ["\\'", "\\_"], - "combo_accent": ["\\'H", "\\_H", "\\'M", "\\_M"], - "other": ["q", "K", "G", "z", ".D", ".Dh", "f", "Y", "R"] - }, - - /* Harvard-Kyoto - * ------------- - * A simple 1:1 mapping. - */ - "hk": { - "vowels": ["a", "A", "i", "I", "u", "U", "R", "RR", "lR", "lRR", "", "e", "ai", "", "o", "au"], - "other_marks": ["M", "H", "~"], - "virama": [""], - "consonants": ["k", "kh", "g", "gh", "G", "c", "ch", "j", "jh", "J", "T", "Th", "D", "Dh", "N", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "v", "z", "S", "s", "h", "L", "kS", "jJ"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "OM", "'", "|", "||"] - }, - - /* National Library at Kolkata - * --------------------------- - * Apart from using "ē" and "ō" instead of "e" and "o", this scheme is - * identical to IAST. ṝ, ḷ, and ḹ are not part of the scheme proper. - * - * This is defined further below. - */ - - /* Sanskrit Library Phonetic Basic - * ------------------------------- - * With one ASCII letter per phoneme, this is the tersest transliteration - * scheme in use today and is especially suited to computer processing. - */ - "slp1": { - "vowels": ["a", "A", "i", "I", "u", "U", "f", "F", "x", "X", "", "e", "E", "", "o", "O"], - "other_marks": ["M", "H", "~"], - "virama": [""], - "consonants": ["k", "K", "g", "G", "N", "c", "C", "j", "J", "Y", "w", "W", "q", "Q", "R", "t", "T", "d", "D", "n", "p", "P", "b", "B", "m", "y", "r", "l", "v", "S", "z", "s", "h", "L", "kz", "jY"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "oM", "'", ".", ".."] - }, - - /* Velthuis - * -------- - * A case-insensitive Sanskrit encoding. - */ - "velthuis": { - "vowels": ["a", "aa", "i", "ii", "u", "uu", ".r", ".rr", ".li", ".ll", "", "e", "ai", "", "o", "au"], - "other_marks": [".m", ".h", ""], - "virama": [""], - "consonants": ["k", "kh", "g", "gh", "\"n", "c", "ch", "j", "jh", "~n", ".t", ".th", ".d", ".d", ".n", "t", "th", "d", "dh", "n", "p", "ph", "b", "bh", "m", "y", "r", "l", "v", "~s", ".s", "s", "h", "L", "k.s", "j~n"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "o.m", "'", "|", "||"] - }, - - /* WX - * -- - * As terse as SLP1. - */ - "wx": { - "vowels": ["a", "A", "i", "I", "u", "U", "q", "Q", "L", "", "", "e", "E", "", "o", "O"], - "other_marks": ["M", "H", "z"], - "virama": [""], - "consonants": ["k", "K", "g", "G", "f", "c", "C", "j", "J", "F", "t", "T", "d", "D", "N", "w", "W", "x", "X", "n", "p", "P", "b", "B", "m", "y", "r", "l", "v", "S", "R", "s", "h", "", "kR", "jF"], - "symbols": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "oM", "'", "|", "||"] - } - }, - - // Set of names of schemes - romanSchemes = {}, - - // Map of alternate encodings. - allAlternates = { - "itrans": { - "A": ["aa"], - "I": ["ii", "ee"], - "U": ["uu", "oo"], - "RRi": ["R^i"], - "RRI": ["R^I"], - "LLi": ["L^i"], - "LLI": ["L^I"], - "M": [".m", ".n"], - "~N": ["N^"], - "ch": ["c"], - "Ch": ["C", "chh"], - "~n": ["JN"], - "v": ["w"], - "Sh": ["S", "shh"], - "kSh": ["kS", "x"], - "j~n": ["GY", "dny"], - "OM": ["AUM"], - "\\_": ["\\`"], - "\\_H": ["\\`H"], - "\\'M": ["\\'.m", "\\'.n"], - "\\_M": ["\\_.m", "\\_.n", "\\`M", "\\`.m", "\\`.n"], - ".a": ["~"], - "|": ["."], - "||": [".."], - "z": ["J"] - } - }, - - // object cache - cache = {}; - - /** - * Check whether the given scheme encodes romanized Sanskrit. - * - * @param name the scheme name - * @return boolean - */ - Sanscript.isRomanScheme = function (name) { - return romanSchemes.hasOwnProperty(name); - }; - - /** - * Add a Brahmic scheme to Sanscript. - * - * Schemes are of two types: "Brahmic" and "roman". Brahmic consonants - * have an inherent vowel sound, but roman consonants do not. This is the - * main difference between these two types of scheme. - * - * A scheme definition is an object ("{}") that maps a group name to a - * list of characters. For illustration, see the "devanagari" scheme at - * the top of this file. - * - * You can use whatever group names you like, but for the best results, - * you should use the same group names that Sanscript does. - * - * @param name the scheme name - * @param scheme the scheme data itself. This should be constructed as - * described above. - */ - Sanscript.addBrahmicScheme = function (name, scheme) { - Sanscript.schemes[name] = scheme; - }; - - /** - * Add a roman scheme to Sanscript. - * - * See the comments on Sanscript.addBrahmicScheme. The "vowel_marks" field - * can be omitted. - * - * @param name the scheme name - * @param scheme the scheme data itself - */ - Sanscript.addRomanScheme = function (name, scheme) { - if (!('vowel_marks' in scheme)) { - scheme.vowel_marks = scheme.vowels.slice(1); - } - Sanscript.schemes[name] = scheme; - romanSchemes[name] = true; - }; - - /** - * Create a deep copy of an object, for certain kinds of objects. - * - * @param scheme the scheme to copy - * @return the copy - */ - var cheapCopy = function (scheme) { - var copy = {}; - for (var key in scheme) { - if (!scheme.hasOwnProperty(key)) { - continue; - } - copy[key] = scheme[key].slice(0); - } - return copy; - }; - - // Set up various schemes - (function () { - // Set up roman schemes - var kolkata = schemes.kolkata = cheapCopy(schemes.iast), - schemeNames = ["iast", "itrans", "hk", "kolkata", "slp1", "velthuis", "wx", "cyrillic"]; - kolkata.vowels = ["a", "ā", "i", "ī", "u", "ū", "ṛ", "ṝ", "ḷ", "ḹ", "e", "ē", "ai", "o", "ō", "au"]; - - // These schemes already belong to Sanscript.schemes. But by adding - // them again with `addRomanScheme`, we automatically build up - // `romanSchemes` and define a `vowel_marks` field for each one. - for (var i = 0, name; (name = schemeNames[i]); i++) { - Sanscript.addRomanScheme(name, schemes[name]); - } - - // ITRANS variant, which supports Dravidian short 'e' and 'o'. - var itrans_dravidian = cheapCopy(schemes.itrans); - itrans_dravidian.vowels = ["a", "A", "i", "I", "u", "U", "Ri", "RRI", "LLi", "LLi", "e", "E", "ai", "o", "O", "au"]; - itrans_dravidian.vowel_marks = itrans_dravidian.vowels.slice(1); - allAlternates.itrans_dravidian = allAlternates.itrans; - Sanscript.addRomanScheme('itrans_dravidian', itrans_dravidian); - }()); - - /** - * Create a map from every character in `from` to its partner in `to`. - * Also, store any "marks" that `from` might have. - * - * @param from input scheme - * @param to output scheme - * @param options scheme options - */ - var makeMap = function (from, to, options) { - var alternates = allAlternates[from] || {}, - consonants = {}, - fromScheme = Sanscript.schemes[from], - letters = {}, - tokenLengths = [], - marks = {}, - toScheme = Sanscript.schemes[to]; - - for (var group in fromScheme) { - if (!fromScheme.hasOwnProperty(group)) { - continue; - } - var fromGroup = fromScheme[group], - toGroup = toScheme[group]; - if (toGroup === undefined) { - continue; - } - for (var i = 0; i < fromGroup.length; i++) { - var F = fromGroup[i], - T = toGroup[i], - alts = alternates[F] || [], - numAlts = alts.length, - j = 0; - - tokenLengths.push(F.length); - for (j = 0; j < numAlts; j++) { - tokenLengths.push(alts[j].length); - } - - if (group === 'vowel_marks' || group === 'virama') { - marks[F] = T; - for (j = 0; j < numAlts; j++) { - marks[alts[j]] = T; - } - } else { - letters[F] = T; - for (j = 0; j < numAlts; j++) { - letters[alts[j]] = T; - } - if (group === 'consonants' || group === 'other') { - consonants[F] = T; - - for (j = 0; j < numAlts; j++) { - consonants[alts[j]] = T; - } - } - } - } - } - - return { - consonants: consonants, - fromRoman: Sanscript.isRomanScheme(from), - letters: letters, - marks: marks, - maxTokenLength: Math.max.apply(Math, tokenLengths), - toRoman: Sanscript.isRomanScheme(to), - virama: toScheme.virama, - toSchemeA: toScheme.vowels[0], - fromSchemeA: fromScheme.vowels[0] - }; - }; - - /** - * Transliterate from a romanized script. - * - * @param data the string to transliterate - * @param map map data generated from makeMap() - * @param options transliteration options - * @return the finished string - */ - var transliterateRoman = function (data, map, options) { - var buf = [], - consonants = map.consonants, - dataLength = data.length, - hadConsonant = false, - letters = map.letters, - marks = map.marks, - maxTokenLength = map.maxTokenLength, - optSkipSGML = options.skip_sgml, - optSyncope = options.syncope, - tempLetter, - tempMark, - tokenBuffer = '', - toRoman = map.toRoman, - virama = map.virama; - - // Transliteration state. It's controlled by these values: - // - `skippingSGML`: are we in SGML? - // - `toggledTrans`: are we in a toggled region? - // - // We combine these values into a single variable `skippingTrans`: - // - // `skippingTrans` = skippingSGML || toggledTrans; - // - // If (and only if) this value is true, don't transliterate. - var skippingSGML = false, - skippingTrans = false, - toggledTrans = false; - - for (var i = 0, L; (L = data.charAt(i)) || tokenBuffer; i++) { - // Fill the token buffer, if possible. - var difference = maxTokenLength - tokenBuffer.length; - if (difference > 0 && i < dataLength) { - tokenBuffer += L; - if (difference > 1) { - continue; - } - } - - // Match all token substrings to our map. - for (var j = 0; j < maxTokenLength; j++) { - var token = tokenBuffer.substr(0, maxTokenLength - j); - - if (skippingSGML === true) { - skippingSGML = (token !== '>'); - } else if (token === '<') { - skippingSGML = optSkipSGML; - } else if (token === '##') { - toggledTrans = !toggledTrans; - tokenBuffer = tokenBuffer.substr(2); - break; - } - skippingTrans = skippingSGML || toggledTrans; - if ((tempLetter = letters[token]) !== undefined && !skippingTrans) { - if (toRoman) { - buf.push(tempLetter); - } else { - // Handle the implicit vowel. Ignore 'a' and force - // vowels to appear as marks if we've just seen a - // consonant. - if (hadConsonant) { - if ((tempMark = marks[token])) { - buf.push(tempMark); - } else if (token !== map.fromSchemeA) { - buf.push(virama); - buf.push(tempLetter); - } - } else { - buf.push(tempLetter); - } - hadConsonant = token in consonants; - } - tokenBuffer = tokenBuffer.substr(maxTokenLength - j); - break; - } else if (j === maxTokenLength - 1) { - if (hadConsonant) { - hadConsonant = false; - if (!optSyncope) { - buf.push(virama); - } - } - buf.push(token); - tokenBuffer = tokenBuffer.substr(1); - // 'break' is redundant here, "j == ..." is true only on - // the last iteration. - } - } - } - if (hadConsonant && !optSyncope) { - buf.push(virama); - } - return buf.join(''); - }; - - /** - * Transliterate from a Brahmic script. - * - * @param data the string to transliterate - * @param map map data generated from makeMap() - * @param options transliteration options - * @return the finished string - */ - var transliterateBrahmic = function (data, map, options) { - var buf = [], - consonants = map.consonants, - danglingHash = false, - hadRomanConsonant = false, - letters = map.letters, - marks = map.marks, - temp, - toRoman = map.toRoman, - skippingTrans = false; - console.debug(map); - for (var i = 0, L; (L = data.charAt(i)); i++) { - // Toggle transliteration state - if (L === '#') { - if (danglingHash) { - skippingTrans = !skippingTrans; - danglingHash = false; - } else { - danglingHash = true; - } - if (hadRomanConsonant) { - buf.push(map.toSchemeA); - hadRomanConsonant = false; - } - continue; - } else if (skippingTrans) { - buf.push(L); - continue; - } - - if ((temp = marks[L]) !== undefined) { - buf.push(temp); - hadRomanConsonant = false; - } else { - if (danglingHash) { - buf.push('#'); - danglingHash = false; - } - if (hadRomanConsonant) { - buf.push(map.toSchemeA); - hadRomanConsonant = false; - } - - // Push transliterated letter if possible. Otherwise, push - // the letter itself. - if ((temp = letters[L])) { - buf.push(temp); - hadRomanConsonant = toRoman && (L in consonants); - } else { - buf.push(L); - } - } - } - if (hadRomanConsonant) { - buf.push(map.toSchemeA); - } - return buf.join(''); - }; - - /** - * Transliterate from one script to another. - * - * @param data the string to transliterate - * @param from the source script - * @param to the destination script - * @param options transliteration options - * @return the finished string - */ - Sanscript.t = function (data, from, to, options) { - options = options || {}; - var cachedOptions = cache.options || {}, - defaults = Sanscript.defaults, - hasPriorState = (cache.from === from && cache.to === to), - map; - - // Here we simultaneously build up an `options` object and compare - // these options to the options from the last run. - for (var key in defaults) { - if (defaults.hasOwnProperty(key)) { - var value = defaults[key]; - if (key in options) { - value = options[key]; - } - options[key] = value; - - // This comparison method is not generalizable, but since these - // objects are associative arrays with identical keys and with - // values of known type, it works fine here. - if (value !== cachedOptions[key]) { - hasPriorState = false; - } - } - } - - if (hasPriorState) { - map = cache.map; - } else { - map = makeMap(from, to, options); - cache = { - from: from, - map: map, - options: options, - to: to - }; - } - - // Easy way out for "{\m+}", "\", and ".h". - if (from === 'itrans') { - data = data.replace(/\{\\m\+\}/g, ".h.N"); - data = data.replace(/\.h/g, ''); - data = data.replace(/\\([^'`_]|$)/g, "##$1##"); - } - if (from === "tamil_superscripted") { - let pattern = "([" + schemes["tamil_superscripted"]["vowel_marks"].join("") + schemes["tamil_superscripted"]["virama"] + "॒॑" + "]+)([²³⁴])"; - data = data.replace(new RegExp(pattern, "g"), "$2$1"); - console.error("transliteration from tamil_superscripted not fully implemented!"); - } - - let result = ""; - if (map.fromRoman) { - result = transliterateRoman(data, map, options); - } else { - result = transliterateBrahmic(data, map, options); - } - if (to === "tamil_superscripted") { - let pattern = "([²³⁴])([" + schemes["tamil_superscripted"]["vowel_marks"].join("") + schemes["tamil_superscripted"]["virama"] + "॒॑" + "]+)"; - result = result.replace(new RegExp(pattern, "g"), "$2$1") - } - return result; - }; - - // Now that Sanscript is fully defined, we now safely export it for use elsewhere. - // The below block was copied from https://www.npmjs.com/package/sanscript . - // define seems to be a requirejs thing https://requirejs.org/docs/whyamd.html#amd . - if (typeof define === 'function' && define.amd) { - define(function () { - return Sanscript; - }); - } else if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = Sanscript; - } - - exports.Sanscript = Sanscript; - } else { - global.Sanscript = Sanscript; - } -} - -// noinspection ThisExpressionReferencesGlobalObjectJS -exportSanscriptSingleton(this); diff --git a/src/sanscript.js b/src/sanscript.js new file mode 100644 index 0000000..68473c4 --- /dev/null +++ b/src/sanscript.js @@ -0,0 +1,492 @@ +/** + * Sanscript + * + * Sanscript is a Sanskrit transliteration library. Currently, it supports + * other Indian languages only incidentally. + * + * License: MIT + */ + +function exportSanscriptSingleton(global, schemes) { + "use strict"; + + var Sanscript = {}; + // First, we define the Sanscript singleton, with its variables and methods. + Sanscript.defaults = { + "skip_sgml": false, + "syncope": false + }; + + /* Schemes + * ======= + * Schemes are of two kinds: "Brahmic" and "roman." "Brahmic" schemes + * describe abugida scripts found in India. "Roman" schemes describe + * manufactured alphabets that are meant to describe or encode Brahmi + * scripts. Abugidas and alphabets are processed by separate algorithms + * because of the unique difficulties involved with each. + * + * Brahmic consonants are stated without a virama. Roman consonants are + * stated without the vowel 'a'. + * + * (Since "abugida" is not a well-known term, Sanscript uses "Brahmic" + * and "roman" for clarity.) + */ + Sanscript.schemes = schemes; + // Set of names of schemes + var romanSchemes = {}, + + // Map of alternate encodings. + allAlternates = { + "itrans": { + "A": ["aa"], + "I": ["ii", "ee"], + "U": ["uu", "oo"], + "RRi": ["R^i"], + "RRI": ["R^I"], + "LLi": ["L^i"], + "LLI": ["L^I"], + "M": [".m", ".n"], + "~N": ["N^"], + "ch": ["c"], + "Ch": ["C", "chh"], + "~n": ["JN"], + "v": ["w"], + "Sh": ["S", "shh"], + "kSh": ["kS", "x"], + "j~n": ["GY", "dny"], + "OM": ["AUM"], + "\\_": ["\\`"], + "\\_H": ["\\`H"], + "\\'M": ["\\'.m", "\\'.n"], + "\\_M": ["\\_.m", "\\_.n", "\\`M", "\\`.m", "\\`.n"], + ".a": ["~"], + "|": ["."], + "||": [".."], + "z": ["J"] + } + }, + + // object cache + cache = {}; + + /** + * Check whether the given scheme encodes romanized Sanskrit. + * + * @param name the scheme name + * @return boolean + */ + Sanscript.isRomanScheme = function (name) { + return romanSchemes.hasOwnProperty(name); + }; + + /** + * Add a Brahmic scheme to Sanscript. + * + * Schemes are of two types: "Brahmic" and "roman". Brahmic consonants + * have an inherent vowel sound, but roman consonants do not. This is the + * main difference between these two types of scheme. + * + * A scheme definition is an object ("{}") that maps a group name to a + * list of characters. For illustration, see the "devanagari" scheme at + * the top of this file. + * + * You can use whatever group names you like, but for the best results, + * you should use the same group names that Sanscript does. + * + * @param name the scheme name + * @param scheme the scheme data itself. This should be constructed as + * described above. + */ + Sanscript.addBrahmicScheme = function (name, scheme) { + Sanscript.schemes[name] = scheme; + }; + + /** + * Add a roman scheme to Sanscript. + * + * See the comments on Sanscript.addBrahmicScheme. The "vowel_marks" field + * can be omitted. + * + * @param name the scheme name + * @param scheme the scheme data itself + */ + Sanscript.addRomanScheme = function (name, scheme) { + if (!('vowel_marks' in scheme)) { + scheme.vowel_marks = scheme.vowels.slice(1); + } + Sanscript.schemes[name] = scheme; + romanSchemes[name] = true; + }; + + /** + * Create a deep copy of an object, for certain kinds of objects. + * + * @param scheme the scheme to copy + * @return the copy + */ + var cheapCopy = function (scheme) { + var copy = {}; + for (var key in scheme) { + if (!scheme.hasOwnProperty(key)) { + continue; + } + copy[key] = scheme[key].slice(0); + } + return copy; + }; + + // Set up various schemes + (function () { + // Set up roman schemes + var kolkata = schemes.kolkata = cheapCopy(schemes.iast), + schemeNames = ["iast", "itrans", "hk", "kolkata", "slp1", "velthuis", "wx", "cyrillic"]; + kolkata.vowels = ["a", "ā", "i", "ī", "u", "ū", "ṛ", "ṝ", "ḷ", "ḹ", "e", "ē", "ai", "o", "ō", "au"]; + + // These schemes already belong to Sanscript.schemes. But by adding + // them again with `addRomanScheme`, we automatically build up + // `romanSchemes` and define a `vowel_marks` field for each one. + for (var i = 0, name; (name = schemeNames[i]); i++) { + Sanscript.addRomanScheme(name, schemes[name]); + } + + // ITRANS variant, which supports Dravidian short 'e' and 'o'. + var itrans_dravidian = cheapCopy(schemes.itrans); + itrans_dravidian.vowels = ["a", "A", "i", "I", "u", "U", "Ri", "RRI", "LLi", "LLi", "e", "E", "ai", "o", "O", "au"]; + itrans_dravidian.vowel_marks = itrans_dravidian.vowels.slice(1); + allAlternates.itrans_dravidian = allAlternates.itrans; + Sanscript.addRomanScheme('itrans_dravidian', itrans_dravidian); + }()); + + /** + * Create a map from every character in `from` to its partner in `to`. + * Also, store any "marks" that `from` might have. + * + * @param from input scheme + * @param to output scheme + * @param options scheme options + */ + var makeMap = function (from, to, options) { + var alternates = allAlternates[from] || {}, + consonants = {}, + fromScheme = Sanscript.schemes[from], + letters = {}, + tokenLengths = [], + marks = {}, + toScheme = Sanscript.schemes[to]; + + for (var group in fromScheme) { + if (!fromScheme.hasOwnProperty(group)) { + continue; + } + var fromGroup = fromScheme[group], + toGroup = toScheme[group]; + if (toGroup === undefined) { + continue; + } + for (var i = 0; i < fromGroup.length; i++) { + var F = fromGroup[i], + T = toGroup[i], + alts = alternates[F] || [], + numAlts = alts.length, + j = 0; + + tokenLengths.push(F.length); + for (j = 0; j < numAlts; j++) { + tokenLengths.push(alts[j].length); + } + + if (group === 'vowel_marks' || group === 'virama') { + marks[F] = T; + for (j = 0; j < numAlts; j++) { + marks[alts[j]] = T; + } + } else { + letters[F] = T; + for (j = 0; j < numAlts; j++) { + letters[alts[j]] = T; + } + if (group === 'consonants' || group === 'other') { + consonants[F] = T; + + for (j = 0; j < numAlts; j++) { + consonants[alts[j]] = T; + } + } + } + } + } + + return { + consonants: consonants, + fromRoman: Sanscript.isRomanScheme(from), + letters: letters, + marks: marks, + maxTokenLength: Math.max.apply(Math, tokenLengths), + toRoman: Sanscript.isRomanScheme(to), + virama: toScheme.virama, + toSchemeA: toScheme.vowels[0], + fromSchemeA: fromScheme.vowels[0] + }; + }; + + /** + * Transliterate from a romanized script. + * + * @param data the string to transliterate + * @param map map data generated from makeMap() + * @param options transliteration options + * @return the finished string + */ + var transliterateRoman = function (data, map, options) { + var buf = [], + consonants = map.consonants, + dataLength = data.length, + hadConsonant = false, + letters = map.letters, + marks = map.marks, + maxTokenLength = map.maxTokenLength, + optSkipSGML = options.skip_sgml, + optSyncope = options.syncope, + tempLetter, + tempMark, + tokenBuffer = '', + toRoman = map.toRoman, + virama = map.virama; + + // Transliteration state. It's controlled by these values: + // - `skippingSGML`: are we in SGML? + // - `toggledTrans`: are we in a toggled region? + // + // We combine these values into a single variable `skippingTrans`: + // + // `skippingTrans` = skippingSGML || toggledTrans; + // + // If (and only if) this value is true, don't transliterate. + var skippingSGML = false, + skippingTrans = false, + toggledTrans = false; + + for (var i = 0, L; (L = data.charAt(i)) || tokenBuffer; i++) { + // Fill the token buffer, if possible. + var difference = maxTokenLength - tokenBuffer.length; + if (difference > 0 && i < dataLength) { + tokenBuffer += L; + if (difference > 1) { + continue; + } + } + + // Match all token substrings to our map. + for (var j = 0; j < maxTokenLength; j++) { + var token = tokenBuffer.substr(0, maxTokenLength - j); + + if (skippingSGML === true) { + skippingSGML = (token !== '>'); + } else if (token === '<') { + skippingSGML = optSkipSGML; + } else if (token === '##') { + toggledTrans = !toggledTrans; + tokenBuffer = tokenBuffer.substr(2); + break; + } + skippingTrans = skippingSGML || toggledTrans; + if ((tempLetter = letters[token]) !== undefined && !skippingTrans) { + if (toRoman) { + buf.push(tempLetter); + } else { + // Handle the implicit vowel. Ignore 'a' and force + // vowels to appear as marks if we've just seen a + // consonant. + if (hadConsonant) { + if ((tempMark = marks[token])) { + buf.push(tempMark); + } else if (token !== map.fromSchemeA) { + buf.push(virama); + buf.push(tempLetter); + } + } else { + buf.push(tempLetter); + } + hadConsonant = token in consonants; + } + tokenBuffer = tokenBuffer.substr(maxTokenLength - j); + break; + } else if (j === maxTokenLength - 1) { + if (hadConsonant) { + hadConsonant = false; + if (!optSyncope) { + buf.push(virama); + } + } + buf.push(token); + tokenBuffer = tokenBuffer.substr(1); + // 'break' is redundant here, "j == ..." is true only on + // the last iteration. + } + } + } + if (hadConsonant && !optSyncope) { + buf.push(virama); + } + return buf.join(''); + }; + + /** + * Transliterate from a Brahmic script. + * + * @param data the string to transliterate + * @param map map data generated from makeMap() + * @param options transliteration options + * @return the finished string + */ + var transliterateBrahmic = function (data, map, options) { + var buf = [], + consonants = map.consonants, + danglingHash = false, + hadRomanConsonant = false, + letters = map.letters, + marks = map.marks, + temp, + toRoman = map.toRoman, + skippingTrans = false; + console.debug(map); + for (var i = 0, L; (L = data.charAt(i)); i++) { + // Toggle transliteration state + if (L === '#') { + if (danglingHash) { + skippingTrans = !skippingTrans; + danglingHash = false; + } else { + danglingHash = true; + } + if (hadRomanConsonant) { + buf.push(map.toSchemeA); + hadRomanConsonant = false; + } + continue; + } else if (skippingTrans) { + buf.push(L); + continue; + } + + if ((temp = marks[L]) !== undefined) { + buf.push(temp); + hadRomanConsonant = false; + } else { + if (danglingHash) { + buf.push('#'); + danglingHash = false; + } + if (hadRomanConsonant) { + buf.push(map.toSchemeA); + hadRomanConsonant = false; + } + + // Push transliterated letter if possible. Otherwise, push + // the letter itself. + if ((temp = letters[L])) { + buf.push(temp); + hadRomanConsonant = toRoman && (L in consonants); + } else { + buf.push(L); + } + } + } + if (hadRomanConsonant) { + buf.push(map.toSchemeA); + } + return buf.join(''); + }; + + /** + * Transliterate from one script to another. + * + * @param data the string to transliterate + * @param from the source script + * @param to the destination script + * @param options transliteration options + * @return the finished string + */ + Sanscript.t = function (data, from, to, options) { + options = options || {}; + var cachedOptions = cache.options || {}, + defaults = Sanscript.defaults, + hasPriorState = (cache.from === from && cache.to === to), + map; + + // Here we simultaneously build up an `options` object and compare + // these options to the options from the last run. + for (var key in defaults) { + if (defaults.hasOwnProperty(key)) { + var value = defaults[key]; + if (key in options) { + value = options[key]; + } + options[key] = value; + + // This comparison method is not generalizable, but since these + // objects are associative arrays with identical keys and with + // values of known type, it works fine here. + if (value !== cachedOptions[key]) { + hasPriorState = false; + } + } + } + + if (hasPriorState) { + map = cache.map; + } else { + map = makeMap(from, to, options); + cache = { + from: from, + map: map, + options: options, + to: to + }; + } + + // Easy way out for "{\m+}", "\", and ".h". + if (from === 'itrans') { + data = data.replace(/\{\\m\+\}/g, ".h.N"); + data = data.replace(/\.h/g, ''); + data = data.replace(/\\([^'`_]|$)/g, "##$1##"); + } + if (from === "tamil_superscripted") { + let pattern = "([" + schemes["tamil_superscripted"]["vowel_marks"].join("") + schemes["tamil_superscripted"]["virama"] + "॒॑" + "]+)([²³⁴])"; + data = data.replace(new RegExp(pattern, "g"), "$2$1"); + console.error("transliteration from tamil_superscripted not fully implemented!"); + } + + let result = ""; + if (map.fromRoman) { + result = transliterateRoman(data, map, options); + } else { + result = transliterateBrahmic(data, map, options); + } + if (to === "tamil_superscripted") { + let pattern = "([²³⁴])([" + schemes["tamil_superscripted"]["vowel_marks"].join("") + schemes["tamil_superscripted"]["virama"] + "॒॑" + "]+)"; + result = result.replace(new RegExp(pattern, "g"), "$2$1") + } + return result; + }; + + // Now that Sanscript is fully defined, we now safely export it for use elsewhere. + // The below block was copied from https://www.npmjs.com/package/sanscript . + // define seems to be a requirejs thing https://requirejs.org/docs/whyamd.html#amd . + if (typeof define === 'function' && define.amd) { + define(function () { + return Sanscript; + }); + } else if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = Sanscript; + } + + exports.Sanscript = Sanscript; + } else { + global.Sanscript = Sanscript; + } +} + +// noinspection ThisExpressionReferencesGlobalObjectJS +exportSanscriptSingleton(this, schemes);