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', 'றீ');
});