var names = {
bengali: 'Bengali', devanagari: 'Devanagari', gujarati: 'Gujarati', gurmukhi: 'Gurmukhi', hk: 'Harvard-Kyoto', iast: 'IAST', itrans: 'ITRANS', itrans_dravidian: 'ITRANS', kannada: 'Kannada', kolkata: 'Kolkata', malayalam: 'Malayalam', oriya: 'Oriya', tamil: 'Tamil', telugu: 'Telugu',
};
console.log(Sanscript.t('अ आ इ ई उ ऊ ऋ ॠ ऌ ॡ ए ऐ ओ औ', 'devanagari', 'kannada')); console.log(Sanscript.t('क खा गि घी ङु चू छृ जॄ झॢ ञॣ टे ठै डो ढौ णं तः थ्', 'devanagari', 'kannada'));
var data = {
bengali: {
vowels: 'অ আ ই ঈ উ ঊ ঋ ৠ ঌ ৡ এ ঐ ও ঔ',
marks: 'ক খা গি ঘী ঙু চূ ছৃ জৄ ঝৢ ঞৣ টে ঠৈ ডো ঢৌ ণং তঃ থ্',
consonants: 'ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম',
other: 'য র ল ব শ ষ স হ ळ',
symbols: 'ॐ । ॥ ০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯',
putra: 'পুত্র',
naraIti: 'নর ইতি',
sentence: 'ধর্মক্ষেত্রে কুরুক্ষেত্রে সমবেতা যুযুত্সবঃ ।'
},
devanagari: {
vowels: 'अ आ इ ई उ ऊ ऋ ॠ ऌ ॡ ए ऐ ओ औ',
short_vowels: 'ऎ ए ऒ ओ',
marks: 'क खा गि घी ङु चू छृ जॄ झॢ ञॣ टे ठै डो ढौ णं तः थ्',
short_marks: 'कॆ के कॊ को',
consonants: 'क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म',
other: 'य र ल व श ष स ह ळ',
symbols: 'ॐ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९',
putra: 'पुत्र',
naraIti: 'नर इति',
sentence: 'धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः ।'
},
gujarati: {
vowels: 'અ આ ઇ ઈ ઉ ઊ ઋ ૠ ઌ ૡ એ ઐ ઓ ઔ',
marks: 'ક ખા ગિ ઘી ઙુ ચૂ છૃ જૄ ઝૢ ઞૣ ટે ઠૈ ડો ઢૌ ણં તઃ થ્',
consonants: 'ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ',
other: 'ય ર લ વ શ ષ સ હ ળ',
symbols: 'ૐ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯',
putra: 'પુત્ર',
naraIti: 'નર ઇતિ',
sentence: 'ધર્મક્ષેત્રે કુરુક્ષેત્રે સમવેતા યુયુત્સવઃ '
},
gurmukhi: {
vowels: 'ਅ ਆ ਇ ਈ ਉ ਊ ਏ ਐ ਓ ਔ',
marks: 'ਕ ਖਾ ਗਿ ਘੀ ਙੁ ਚੂ ਟੇ ਠੈ ਡੋ ਢੌ ਣਂ ਤਃ ਥ੍',
consonants: 'ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ',
other: 'ਯ ਰ ਲ ਵ ਸ਼ ਸ਼ ਸ ਹ ਲ਼',
symbols: 'ॐ । ॥ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯',
putra: 'ਪੁਤ੍ਰ',
naraIti: 'ਨਰ ਇਤਿ',
sentence: 'ਧਰ੍ਮਕ੍ਸ਼ੇਤ੍ਰੇ ਕੁਰੁਕ੍ਸ਼ੇਤ੍ਰੇ ਸਮਵੇਤਾ ਯੁਯੁਤ੍ਸਵਃ ।'
},
hk: {
vowels: 'a A i I u U R RR lR lRR e ai o au',
marks: 'ka khA gi ghI Gu cU chR jRR jhlR JlRR Te Thai Do Dhau NaM taH th',
consonants: 'ka kha ga gha Ga ca cha ja jha Ja Ta Tha Da Dha Na ta tha da dha na pa pha ba bha ma',
other: 'ya ra la va za Sa sa ha La',
symbols: 'OM | || 0 1 2 3 4 5 6 7 8 9',
putra: 'putra',
naraIti: 'nara iti',
sentence: 'dharmakSetre kurukSetre samavetA yuyutsavaH |'
},
iast: {
vowels: 'a ā i ī u ū ṛ ṝ ḷ ḹ e ai o au',
marks: 'ka khā gi ghī ṅu cū chṛ jṝ jhḷ ñḹ ṭe ṭhai ḍo ḍhau ṇaṃ taḥ th',
consonants: 'ka kha ga gha ṅa ca cha ja jha ña ṭa ṭha ḍa ḍha ṇa ta tha da dha na pa pha ba bha ma',
other: 'ya ra la va śa ṣa sa ha ḻa',
symbols: 'oṃ । ॥ 0 1 2 3 4 5 6 7 8 9',
putra: 'putra',
naraIti: 'nara iti',
sentence: 'dharmakṣetre kurukṣetre samavetā yuyutsavaḥ ।'
},
itrans: {
vowels: 'a A i I u U RRi RRI LLi LLI e ai o au',
marks: 'ka khA gi ghI ~Nu chU ChRRi jRRI jhLLi ~nLLI Te Thai Do Dhau NaM taH th',
consonants: 'ka kha ga gha ~Na cha Cha ja jha ~na Ta Tha Da Dha Na ta tha da dha na pa pha ba bha ma',
other: 'ya ra la va sha Sha sa ha La',
symbols: 'OM | || 0 1 2 3 4 5 6 7 8 9',
putra: 'putra',
naraIti: 'nara iti',
sentence: 'dharmakShetre kurukShetre samavetA yuyutsavaH |'
},
itrans_dravidian: {
short_vowels: 'e E o O',
short_marks: 'ke kE ko kO',
},
kolkata: {
short_vowels: 'e ē o ō',
short_marks: 'ke kē ko kō',
},
kannada: {
vowels: 'ಅ ಆ ಇ ಈ ಉ ಊ ಋ ೠ ಌ ೡ ಏ ಐ ಓ ಔ',
short_vowels: 'ಎ ಏ ಒ ಓ',
marks: 'ಕ ಖಾ ಗಿ ಘೀ ಙು ಚೂ ಛೃ ಜೄ ಝೢ ಞೣ ಟೇ ಠೈ ಡೋ ಢೌ ಣಂ ತಃ ಥ್',
short_marks: 'ಕೆ ಕೇ ಕೊ ಕೋ',
consonants: 'ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ ಪ ಫ ಬ ಭ ಮ',
other: 'ಯ ರ ಲ ವ ಶ ಷ ಸ ಹ ಳ',
symbols: 'ಓಂ । ॥ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯',
putra: 'ಪುತ್ರ',
naraIti: 'ನರ ಇತಿ',
sentence: 'ಧರ್ಮಕ್ಷೇತ್ರೇ ಕುರುಕ್ಷೇತ್ರೇ ಸಮವೇತಾ ಯುಯುತ್ಸವಃ ।'
},
malayalam: {
vowels: 'അ ആ ഇ ഈ ഉ ഊ ഋ ൠ ഌ ൡ ഏ ഐ ഓ ഔ',
short_vowels: 'എ ഏ ഒ ഓ',
marks: 'ക ഖാ ഗി ഘീ ങു ചൂ ഛൃ ജൄ ഝൢ ഞൣ ടേ ഠൈ ഡോ ഢൌ ണം തഃ ഥ്',
short_marks: 'കെ കേ കൊ കോ',
consonants: 'ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ',
other: 'യ ര ല വ ശ ഷ സ ഹ ള',
symbols: 'ഓം । ॥ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯',
putra: 'പുത്ര',
naraIti: 'നര ഇതി',
sentence: 'ധര്മക്ഷേത്രേ കുരുക്ഷേത്രേ സമവേതാ യുയുത്സവഃ ।'
},
oriya: {
vowels: 'ଅ ଆ ଇ ଈ ଉ ଊ ଋ ୠ ଌ ୡ ଏ ଐ ଓ ଔ',
marks: 'କ ଖା ଗି ଘୀ ଙୁ ଚୂ ଛୃ ଜୄ ଟେ ଠୈ ଡୋ ଢୌ ଣଂ ତଃ ଥ୍',
consonants: 'କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ',
other: 'ଯ ର ଲ ଵ ଶ ଷ ସ ହ ଳ',
symbols: 'ଓଂ । ॥ ୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯',
putra: 'ପୁତ୍ର',
naraIti: 'ନର ଇତି',
sentence: 'ଧର୍ମକ୍ଷେତ୍ରେ କୁରୁକ୍ଷେତ୍ରେ ସମଵେତା ଯୁଯୁତ୍ସଵଃ ।'
},
tamil: {
short_vowels: 'எ ஏ ஒ ஓ',
short_marks: 'கெ கே கொ கோ',
},
telugu: {
vowels: 'అ ఆ ఇ ఈ ఉ ఊ ఋ ౠ ఌ ౡ ఏ ఐ ఓ ఔ',
short_vowels: 'ఎ ఏ ఒ ఓ',
marks: 'క ఖా గి ఘీ ఙు చూ ఛృ జౄ ఝౢ ఞౣ టే ఠై డో ఢౌ ణం తః థ్',
short_marks: 'కె కే కొ కో',
consonants: 'క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ',
other: 'య ర ల వ శ ష స హ ళ',
symbols: 'ఓం । ॥ ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯',
putra: 'పుత్ర',
naraIti: 'నర ఇతి',
sentence: 'ధర్మక్షేత్రే కురుక్షేత్రే సమవేతా యుయుత్సవః ।'
},
wx: {
consonants: 'ka Ka ga Ga fa ca Ca ja Ja Fa ta Ta da Da Na wa Wa xa Xa na pa Pa ba Ba ma',
symbols: 'oM | || 0 1 2 3 4 5 6 7 8 9',
putra: 'puwra',
naraIti: 'nara iwi',
sentence: 'XarmakRewre kurukRewre samavewA yuyuwsavaH |'
}
};
// ———————————————————————–
QUnit.module('Setup');
/* Scheme basics
* ------------- * Test that all schemes have the same number of elements for each category, * e.g. "vowels" and "consonants". */
QUnit.test('Scheme definitions', function() {
// Find the typical lengths of each category. We use Devanagari because it
// contains every category, including "marks".
var schemes = Sanscript.schemes,
devanagari = schemes.devanagari,
lengths = {};
for (var key in devanagari) {
lengths[key] = devanagari[key].length;
}
for (var name in schemes) {
for (var key in schemes[name]) {
// The virama is distinct from other categories.
if (key !== 'virama') {
QUnit.assert.equal(schemes[name][key].length, lengths[key], name + "." + key);
}
}
}
});
/* Roman schemes
* ------------- * Test that Sanscript.isRomanScheme returns true for all roman schemes. */
QUnit.test('Roman scheme membership', function() {
var roman = ['iast', 'itrans', 'hk', 'kolkata', 'slp1', 'velthuis', 'wx'],
other = ['bengali', 'devanagari', 'gujarati', 'gurmukhi', 'kannada',
'malayalam', 'oriya', 'tamil', 'telugu'];
for (var i in roman) {
QUnit.assert.ok(Sanscript.isRomanScheme(roman[i]), roman[i]);
}
for (var i in other) {
QUnit.assert.ok(!Sanscript.isRomanScheme(other[i]), other[i]);
}
});
QUnit.test('Adding schemes', function() {
var sanskritOCR = { vowels: ["a", "å", "i", "ï", "u", "÷", "Ÿ", "", "", "", "e", "ai", "o", "au"], 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ñ"] }; Sanscript.addRomanScheme('sanskritOCR', sanskritOCR); var f = transHelper('sanskritOCR', 'devanagari'); f('bhïma', 'भीम'); f('narå½åm', 'नराणाम्');
});
// ———————————————————————–
QUnit.module('Transliteration');
/**
* For a script pair (f, t), return a function that takes two strings s1 and * s2 and asserts that s1, when transliterated from f to t, equals s2. The * returned function takes an optional 'description' parameter for QUnit. * * @param from the source script * @param to the destination script * @param options transliteration options * @return the function described above. */
var transHelper = function(from, to, options) {
return function(input, output, description) { QUnit.assert.equal(Sanscript.t(input, from, to, options), output, description); };
};
/* Letter transliteration tests
* ---------------------------- * Basic checks on letters and symbols. * * @param from the source data * @param to the destination data * @param f the function to use */
function letterTests(from, to, f) {
f(from.vowels, to.vowels, 'Vowels'); f(from.marks, to.marks, 'Marks'); f(from.consonants, to.consonants, 'Stops and nasals'); f(from.other, to.other, 'Other consonants'); f(from.symbols, to.symbols, 'Symbols and punctuation');
}
/* Text transliteration tests
* -------------------------- * Basic checks on words and sentences. * * @param from the source data * @param to the destination data * @param f the function to use */
function textTests(from, to, f) {
f(from.putra, to.putra, 'Single word'); f(from.naraIti, to.naraIti, 'Two words, one with explicit vowel'); f(from.sentence, to.sentence, 'Basic sentence');
}
QUnit.test('Devanagari to Bengali', function() {
var from = data.devanagari, to = data.bengali, f = transHelper('devanagari', 'bengali'); letterTests(from, to, f); textTests(from, to, f); f('व', 'ব', 'व transliteration'); f('ब', 'ব', 'ब transliteration');
});
QUnit.test('Devanagari to Harvard-Kyoto', function() {
var from = data.devanagari,
to = data.hk,
f = transHelper('devanagari', 'hk');
letterTests(from, to, f);
textTests(from, to, f);
// Other
f('wwॠww', 'wwRRww', 'Vowel among other letters');
f('wwकww', 'wwkaww', 'Consonant among other letters');
});
QUnit.test('Devanagari to Gujarati', function() {
var from = data.devanagari, to = data.gujarati, f = transHelper('devanagari', 'gujarati'); letterTests(from, to, f); textTests(from, to, f);
});
QUnit.test('Devanagari to Gurmukhi', function() {
var from = data.devanagari, to = data.gurmukhi,
f = transHelper('devanagari', 'gurmukhi');
f('अ आ इ ई उ ऊ ए ऐ ओ औ', to.vowels, 'Vowels'); // no ऋ/ॠ/ऌ/ॡ
f('क खा गि घी ङु चू टे ठै डो ढौ णं तः थ्', to.marks, 'Marks'); // no ऋ/ॠ/ऌ/ॡ
f(from.consonants, to.consonants, 'Stops and nasals');
f(from.other, to.other, 'Other consonants');
f(from.symbols, to.symbols, 'Symbols and punctuation');
textTests(from, to, f);
});
QUnit.test('Devanagari to Kannada', function() {
// Letters
var from = data.devanagari, to = data.kannada,
f = transHelper('devanagari', 'kannada');
letterTests(from, to, f);
textTests(from, to, f);
});
QUnit.test('Devanagari to Malayalam', function() {
var from = data.devanagari, to = data.malayalam, f = transHelper('devanagari', 'malayalam'); letterTests(from, to, f); textTests(from, to, f);
});
QUnit.test('Devanagari to Oriya', function() {
var from = data.devanagari, to = data.oriya,
f = transHelper('devanagari', 'oriya');
f(from.vowels, to.vowels, 'Vowels');
f('क खा गि घी ङु चू छृ जॄ टे ठै डो ढौ णं तः थ्', to.marks, 'Marks'); // no ऌ or ॡ
f(from.consonants, to.consonants, 'Stops and nasals');
f(from.other, to.other, 'Other consonants');
f(from.symbols, to.symbols, 'Symbols and punctuation');
textTests(from, to, f);
textTests(from, to, f);
});
QUnit.test('Devanagari to Telugu', function() {
var from = data.devanagari, to = data.telugu, f = transHelper('devanagari', 'telugu'); letterTests(from, to, f); textTests(from, to, f);
});
QUnit.test('Harvard-Kyoto to Devanagari', function() {
var from = data.hk, to = data.devanagari, f = transHelper('hk', 'devanagari'); letterTests(from, to, f); textTests(from, to, f); f('naraxiti', 'नरxइति', 'Undefined letters');
});
QUnit.test('Harvard-Kyoto to IAST', function() {
var from = data.hk, to = data.iast, f = transHelper('hk', 'iast'); letterTests(from, to, f); textTests(from, to, f); f('tAmxiti', 'tāmxiti', 'Undefined letters');
});
QUnit.test('ITRANS to Devanagari', function() {
var from = data.itrans, to = data.devanagari, f = transHelper('itrans', 'devanagari'); letterTests(from, to, f); textTests(from, to, f);
});
QUnit.test('WX to Devanagari', function() {
var from = data.wx, to = data.devanagari, f = transHelper('wx', 'devanagari'); f(from.consonants, to.consonants, 'Stops and nasals'); f(from.symbols, to.symbols, 'Symbols and punctuation'); textTests(from, to, f);
});
QUnit.test('Telugu to Devanagari', function() {
var from = data.telugu, to = data.devanagari, f = transHelper('telugu', 'devanagari'); textTests(from, to, f);
});
QUnit.test('Undefined letters', function() {
var f = transHelper('devanagari', 'gurmukhi'); f('ऋच्छति', 'ऋਚ੍ਛਤਿ');
});
// ———————————————————————–
QUnit.module('Dravidian');
function dravidianTest(fromScript, toScript) {
label = names[fromScript] + ' to ' + names[toScript]; QUnit.test(label, function() { var f = transHelper(fromScript, toScript), from = data[fromScript], to = data[toScript]; f(from.short_vowels, to.short_vowels, 'Vowels (forward)'); f(from.short_marks, to.short_marks, 'Vowel marks (forward)'); });
}
console.log(Sanscript.schemes);
dravidianTest('itrans_dravidian', 'kolkata'); dravidianTest('itrans_dravidian', 'devanagari'); dravidianTest('itrans_dravidian', 'kannada'); dravidianTest('itrans_dravidian', 'malayalam'); dravidianTest('itrans_dravidian', 'tamil'); dravidianTest('itrans_dravidian', 'telugu'); dravidianTest('kolkata', 'devanagari');
// ———————————————————————–
QUnit.module('Toggle');
QUnit.test('Harvard-Kyoto', function() {
var f = transHelper('hk', 'devanagari'); f('akSa##kSa##ra', 'अक्षkSaर', 'Basic disable'); f('##akSa##kSa##ra', 'akSaक्षra', 'Initial disable'); f('akSa##ra##', 'अक्षra', 'Final disable 1'); f('akSa##ra', 'अक्षra', 'Final disable 2'); f('akSa##kSa##ra####', 'अक्षkSaर', 'Redundant disable 1'); f('a####kSara', 'अक्षर', 'Redundant disable 2'); f('a#kSara', 'अ#क्षर', 'Misleading disable');
});
QUnit.test('Devanagari', function() {
var f = transHelper('devanagari', 'hk'); f('अ##क्ष##र', 'aक्षra', 'Basic disable'); f('##अ##क्षर', 'अkSara', 'Initial disable'); f('अक्ष##र##', 'akSaर', 'Final disable 1'); f('अक्ष##र', 'akSaर', 'Final disable 2'); f('अक्ष##र####', 'akSaर', 'Redundant disable 1'); f('अ####क्षर', 'akSara', 'Redundant disable 2'); f('अ#क्षर', 'a#kSara', 'Misleading disable');
});
// ———————————————————————–
QUnit.module('Options');
QUnit.test('Hindi-style transliteration', function() {
var f = transHelper('itrans', 'devanagari', {syncope: true}); f('karaN', 'करण'); f('rAj ke lie', 'राज के लिए');
});
QUnit.test('Skipping SGML', function() {
var f1 = transHelper('hk', 'devanagari'); var f2 = transHelper('hk', 'devanagari', {skip_sgml: false}); var f3 = transHelper('hk', 'devanagari', {skip_sgml: true}); f1('<p>nara iti</p>', '<प्>नर इति</प्>'); f2('<p>nara iti</p>', '<प्>नर इति</प्>'); f3('<p>nara iti</p>', '<p>नर इति</p>'); f3('##<p>nara iti</p>', '<p>nara iti</p>');
});
// ———————————————————————–
QUnit.module('ITRANS');
QUnit.test('Zero-width joiner', function() {
var f = transHelper('itrans', 'devanagari'); f('bara_u', 'बरउ', 'Separated vowels'); f('k{}Shetra', 'क्षेत्र', 'Separated consonants');
});
QUnit.test('Virama', function() {
var f = transHelper('itrans', 'devanagari'); var g = transHelper('devanagari', 'itrans'); f('tattatvam.h', 'तत्तत्वम्', 'ITRANS to Devanagari'); g('तत्तत्वम्', 'tattatvam', 'Devanagari to ITRANS');
});
QUnit.test('Alternates', function() {
var f = function(itrans1, itrans2, description) { dev1 = Sanscript.t(itrans1, 'itrans', 'devanagari'), dev2 = Sanscript.t(itrans2, 'itrans', 'devanagari'); QUnit.assert.equal(dev2, dev1, description); }; f('A I U RRi RRI LLi LLI', 'aa ii uu R^i R^I L^i L^I', 'vowels'); f('kA kI kU kRRi kRRI kLLi kLLI', 'kaa kii kuu kR^i kR^I kL^i kL^I', 'vowels (marks)'); f('I U', 'ee oo', 'long I and U'); f('kI kU', 'kee koo', 'long I and U (marks)'); f('aM aM', 'a.m a.n', 'anusvara'); f('~Na', 'N^a', 'na (kavarga)'); f('ca', 'cha', 'ca'); f('Cha Cha', 'Ca chha', 'cha'); f('va', 'wa', 'va/wa'); f('Sha Sha', 'Sa shha', 'sha (retroflex)'); f('kSha kSha kSha', 'kSa kshha xa', 'ksha'); f('j~na j~na', 'GYa dnya', 'jna'); f('OM', 'AUM', 'om'); f(".a | ||", '~ . ..', 'punctuation'); f('za', 'Ja', 'Devanagari za'); f('a{\\m+}', 'a.h.N', '{\\m+}');
});
QUnit.test('Backslash escape', function() {
var f = transHelper('itrans', 'devanagari'); f('\\nara', 'nअर'); f('na\\ra', 'नrअ'); f('nara\\', 'नर');
});
QUnit.test('Accent', function() {
var f = transHelper('itrans', 'devanagari'); f("a\\_gnimI\\'le pu\\_rohi\\'tam", 'अ॒ग्निमी॑ले पु॒रोहि॑तम्'); f("naH\\' naH\\_ naH\\`", 'नः॑ नः॒ नः॒', 'Visarga + accent'); f("na\\'H na\\_H na\\`H", 'नः॑ नः॒ नः॒', 'Accent + visarga'); f("taM\\' ta.m\\' ta.n\\' taM\\_ ta.m\\_ ta.n\\_ taM\\` ta.m\\` ta.n\\`", 'तं॑ तं॑ तं॑ तं॒ तं॒ तं॒ तं॒ तं॒ तं॒', 'Anusvara + accent'); f("ta\\'M ta\\'.m ta\\'.n ta\\_M ta\\_.m ta\\_.n ta\\`M ta\\`.m ta\\`.n", 'तं॑ तं॑ तं॑ तं॒ तं॒ तं॒ तं॒ तं॒ तं॒', 'Accent + anusvara');
});
QUnit.test('Non-Sanskrit letters', function() {
var ben = transHelper('itrans', 'bengali'), dev = transHelper('itrans', 'devanagari'), kan = transHelper('itrans', 'kannada'), guj = transHelper('itrans', 'gujarati'), gur = transHelper('itrans', 'gurmukhi'), mal = transHelper('itrans', 'malayalam'), ori = transHelper('itrans', 'oriya'), tam = transHelper('itrans', 'tamil'), tel = transHelper('itrans', 'telugu'); ben('.De .Dhe Ye', 'ডে ঢে যে'); dev('qa KA Gi zI .Du .DU fRRi YRRI RLLi', 'क़ ख़ा ग़ि ज़ी ड़ु ड़ू फ़ृ य़ॄ ऱॢ'); dev('ka.cna', 'कॅन'); kan('fI RI', 'ಫೀ ಱೀ'); guj('ka.cna', 'કૅન'); gur('Ko Go zo Jo .Do fo', 'ਖੋ ਗੋ ਜੋ ਜੋ ਡੋ ਫੋ'); mal('RI', 'റീ'); ori('.DU .DhU YU', 'ଡୂ ଢୂ ଯୂ'); tam('RI', 'றீ');
});