Naraguna:Bennylin/trans.js
Cathetan: Nalika rampung nyimpen, panjenengan kudu mbusek telihing pangluruné panjenengan supaya owahané katon.
- Firefox / Safari: Pencèt Shift nalika ngeklik Reload, utawa pencèt Ctrl-F5 utawa Ctrl-R (⌘-R ing Mac)
- Google Chrome: Pencèt Ctrl-Shift-R (⌘-Shift-R ing Mac)
- Internet Explorer / Edge: Pencèt Ctrl nalika ngeklik Refresh, utawa pencèt Ctrl-F5
- Opera: Menyang Menu → Settings (Opera → Preferences ing Mac) nuli menyang Privacy & security → Clear browsing data → Cached images and files.
/*!* trans.js* https://bennylin.github.com/transliterasijawa** Copyright 2013, Bennylin @bennylin* Dual licensed under the MIT or GPL Version 2 licenses.* Released under the MIT, BSD, and GPL Licenses.** Versions:* 7 Mei 2013 - v 1.0* 25 Juli 2013 - v 1.1* 8 May 2015 - v 1.2* 1 Juni 2016 - v 1.3* 2020 - v 1.4* 2021** v 1.5 more thorough Murda support (with cakra/pengkal/panjingan)** v 1.51 zws (zero-width-space) after each layar/cecak/wignyan to produce line break for a very long sentence without comma, disable the Javanese "parentheses"* 2022** v 1.52 non-aktifkan murda untuk "gh" dan "kh" dalam mode "Tidak pakai Murda"** (terima kasih untuk Mas Dodi Subandoro)* * TOC* I. Function SuperTrim, findstr* II. Function isDigit, isPunct, isVowel* III. Function isSpecial, isHR, isLW* IV. Function GetMatra* V. Function GetShift (the longest part of the code, almost half the total lines)* VI. Function GetCoreSound, GetSpecialSound* VII. Function ResolveCharacterSound* VIII. Function GetSound* IX. Function DoTransliterate** Derived with permission from Hindi Transliteration by Markandey Singh @markandey* http://www.purplegene.com/static/HindiTranslitration.html (deadlink as of 2021)* http://web.archive.org/web/20190113114955/http://www.purplegene.com/static/HindiTranslitration.html*/var vowelPrev = false;//var spacePrev = false;/***************************I. Function SuperTrim, findstrtrim string, menemukan karakter di dalam string****************************/function SuperTrim(str) { str = str || ''; ret = str.replace(/^\s*|\s*$/g,'').replace(/\s+/g,' '); return ret;}function findstr(str,tofind){ for (var i = 0; i < str.length; i++) if (str[i] == tofind) return true; return false;}/***************************II. Function isDigit, isPunct, isVowelcek apakah digit, tanda baca, atau huruf vokal (a/ă/å/ɔ, e/è/é, i, o, u, ě/ê/ə, ô, ā/ī/ū/ō)****************************/function isDigit( /*char*/ a) { var str = "0123456789"; return findstr(str,a);}function isPunct( /*char*/ a) { var str = ",.><?/+=-_}{[]*&^%$#@!~`\"\\|:;()"; return findstr(str,a);}function isVowel( /*char*/ a) { var str = "AaĂăEeÈèÉéIiOoUuÊêĚěĔĕṚṛXxôâāīūōåɔə"; return findstr(str,a);}function isConsonant( /*char*/ a) { var str = "BCDfGHJKLMNPQRSTVWYZbcdfghjklmnpqrstvwyzḌḍṆṇṢṣṬṭŊŋÑñɲś";//Xx are vowels (pepet) return findstr(str,a);}/***************************III. Function isSpecial, isHR, isLWcek apakah karakter spesial (bikonsonan/cakra-pengkal/layar-cecak-wignyan/panjingan)****************************/function isSpecial( /*char*/ a) { var str = "GgHhRrYyñn"; //untuk bikonsonan th, dh, ng (nga dan cecak), ny, -r- (cakra), -y- (pengkal), jñ/jnya (ꦘ) return findstr(str,a);}function isHR( /*char*/ a) { var str = "HhRrŊŋ";//untuk layar dan wignyan dan cecak ([[:en:w:Engma]]) return findstr(str,a);}function isLW( /*char*/ a) { var str = "LlWw";//untuk panjingan ("ng" dapat diikuti "g", "r"/cakra, "y"/pengkal, dan "w" atau "l"/panjingan) return findstr(str,a);}function isCJ( /*char*/ a) { var str = "CcJj";//untuk anuswara -nj- dan -nc- return findstr(str,a);}/***************************IV. Function GetMatraapabila huruf vokal, return matra (sandhangan swara)****************************/function GetMatra(str) { var i = 0; if (str.length < 1) { return "꧀"; } while (str[i] == 'h') { i++; if (i >= str.length) { break; } } if (i < str.length) { str = str.substring(i); } var matramap1 = { "e":'ꦺ', "E":'ꦌ' } //mode ketik var matramap2 = { "e":'ꦼ', "E":'ꦄꦼ' } //mode kopas var matramap3 = { //both mode ketik and kopas "ā":"ꦴ", "â":"ꦴ", "aa":'ꦴ', "è":'ꦺ', "é":'ꦺ', "i":'ꦶ', "ī":"ꦷ", "ii":'ꦷ', "o":'ꦺꦴ', "ō":"ꦼꦴ", "u":'ꦸ', "ū":"ꦹ", "uu":'ꦹ', "x":"ꦼ", "ě":"ꦼ", "ĕ":"ꦼ", "ê":"ꦼ", "ə":"ꦼ", "ô":"", "ă":"", "å":"", "ɔ":"", "A":'ꦄ', "Ă":'ꦄ', "È":'ꦌ', "É":'ꦌ', "I":'ꦆ', "O":'ꦎ', "U":'ꦈ', "X":"ꦄꦼ", "Ě":"ꦄꦼ", "Ĕ":"ꦄꦼ", "Ê":"ꦄꦼ", "ṛ":"ꦽ", "Ṛ":"ꦽ", "ai":'ꦻ', "au":'ꦻꦴ' } var matramap, mode; var modeTranslit = document.getElementsByName("mode"); for(var rad in modeTranslit) { if(modeTranslit[rad].checked) mode = modeTranslit[rad].value; } if(mode == "kopas") matramap = {...matramap2, ...matramap3}; else //if(mode == "ketik") matramap = {...matramap1, ...matramap3}; if(matramap[str]!==undefined){ return matramap[str]; } return "";}/***************************V. Function GetShift (the longest part of the code, almost half the total lines)Basically all the exceptions to the Consonant-Vocal (CV) cluster. It means all the double Consonant-Consonant-Vocal (CCV) cluster,or triple CCCV cluster.Quick TOC:V.1. 2nd letter is 'h' -- th, dh, murda (kh, gh, ch, jh, Th, Dh, ṭh, ḍh, ph, bh, sh), hh, rh, h TODO: maybe add qh for ka sasak, zh for sa mahaprana, and rh for ra agung, considering jhV.2. 2nd letter is 'g' -- ng (ngg, ngng), hg, gg, rg, gV.3. 2nd letter is 'y' -- ny, hy, ry, yy, qy, murda (Ky, Gy, Cy, Jy, Ty, Dy, Ṭy, Ḍy, Py, By, Sy, Qy, Ry, Zy), yV.4. 2nd letter is 'r' -- hr, rr, qr, murda (Kr, Gr, Cr, Jr, Nr, Tr, Dr, Ṭr, Ḍr, Pr, Br, Sr, Qr, Rr, Zr), rV.5. 2nd letter is panjingan 'l'/'w' -- ll, rl, hl; rw, hw, ww, ngwV.6. 2nd letter is 'c', and 'j' -- nc: ncr, ncl; rc; nj: njr, njl; rj;V.7. 2nd letter is 'ñ' or 'n' -- jñ, jnyapabila huruf bikonsonan, return karakter khususTo add a new second letter exception, add in function isSpecialLongest consonant cluster is 4 (nggr, nggl, nggw, nggy). Doesn't compute cluster longer than that(e.g. sxlangnggronjal, 6 consonants). Need to separate them by a space****************************/function GetShift(str1) { str = str1.toLowerCase(); //case insensitive var modeMurda = document.getElementsByName("murda"); for(var rad in modeMurda) { if(modeMurda[rad].checked) murda = modeMurda[rad].value; } if(murda == "pakai") str2 = str1; //case sensitive (particularly the 8 characters of ꦛ ꦜ ꦝ ꦞ ꦠ ꦡ ꦢ ꦣ), //for combination of murda and cakra/pengkal/panjingan else //if(murda == "tidak") str2 = str1.toLowerCase(); //case insensitive //V.1. 2nd letter of the consonant cluster is 'h' if (str2.indexOf("th") == 0) { //suku kata diawali 'th' if (str2.indexOf("thl") == 0) { //thl- return { "CoreSound": "ꦛ꧀ꦭ", "len": 3 }; } else if (str2.indexOf("thr") == 0) { //thr- return { "CoreSound": "ꦛꦿ", "len": 3 }; } else if (str2.indexOf("thw") == 0) { //thw- return { "CoreSound": "ꦛ꧀ꦮ", "len": 3 }; } else if (str2.indexOf("thy") == 0) { //thy- return { "CoreSound": "ꦛꦾ", "len": 3 }; } else { return { "CoreSound": "ꦛ", "len": 2 };//tha } } else if (str2.indexOf("dh") == 0) { //suku kata diawali 'dh' if (str2.indexOf("dhl") == 0) { //dhl- return { "CoreSound": "ꦝ꧀ꦭ", "len": 3 }; } else if (str2.indexOf("dhr") == 0) { //dhr- return { "CoreSound": "ꦝꦿ", "len": 3 }; } else if (str2.indexOf("dhw") == 0) { //dhw-: dhwani return { "CoreSound": "ꦝ꧀ꦮ", "len": 3 }; } else if (str2.indexOf("dhy") == 0) { //dhy-: dhyaksa return { "CoreSound": "ꦝꦾ", "len": 3 }; } else { return { "CoreSound": "ꦝ", "len": 2 };//dha } } else if (str2.indexOf("Th") == 0) { //suku kata diawali 'Th' if (str2.indexOf("Thl") == 0) { //Thl- return { "CoreSound": "ꦜ꧀ꦭ", "len": 3 }; } else if (str2.indexOf("Thr") == 0) { //Thr- return { "CoreSound": "ꦜꦿ", "len": 3 }; } else if (str2.indexOf("Thw") == 0) { //Thw- return { "CoreSound": "ꦜ꧀ꦮ", "len": 3 }; } else if (str2.indexOf("Thy") == 0) { //Thy- return { "CoreSound": "ꦜꦾ", "len": 3 }; } else { return { "CoreSound": "ꦜ", "len": 2 };//Tha Mahaprana } } else if (str2.indexOf("Dh") == 0) { //suku kata diawali 'Dh' if (str2.indexOf("Dhl") == 0) { //Dhl- return { "CoreSound": "ꦞ꧀ꦭ", "len": 3 }; } else if (str2.indexOf("Dhr") == 0) { //Dhr- return { "CoreSound": "ꦞꦿ", "len": 3 }; } else if (str2.indexOf("Dhw") == 0) { //Dhw-: Dhwani return { "CoreSound": "ꦞ꧀ꦮ", "len": 3 }; } else if (str2.indexOf("Dhy") == 0) { //Dhy-: Dhyaksa return { "CoreSound": "ꦞꦾ", "len": 3 }; } else { return { "CoreSound": "ꦞ", "len": 2 };//Dha Mahaprana }/* murda block start */ } else if (str.indexOf("ṭh") == 0) { //ṭh (aksara murda: tha mahaprana) if (str.indexOf("ṭhy") == 0) { return { "CoreSound": "ꦜꦾ", "len": 2 }; } else if (str.indexOf("ṭhr") == 0) { return { "CoreSound": "ꦜꦿ", "len": 2 }; } else return { "CoreSound": "ꦜ", "len": 2 }; } else if (str.indexOf("ḍh") == 0) { //ḍh (aksara murda: dha mahaprana) if (str.indexOf("ḍhy") == 0) { return { "CoreSound": "ꦞꦾ", "len": 2 }; } else if (str.indexOf("ḍhr") == 0) { return { "CoreSound": "ꦞꦿ", "len": 2 }; } else return { "CoreSound": "ꦞ", "len": 2 };// perubahan versi 1.52, dari ꦑ menjadi ꦏ꦳ } else if (str.indexOf("kh") == 0) { //kh (aksara rekan) if (str.indexOf("khl") == 0) { //ka rekan + panjingan la return { "CoreSound": "ꦏ꦳꧀ꦭ", "len": 3 }; } else if (str.indexOf("khr") == 0) { //ka rekan + cakra return { "CoreSound": "ꦏ꦳ꦿ", "len": 3 }; } else if (str.indexOf("khw") == 0) { //ka rekan + panjingan wa return { "CoreSound": "ꦏ꦳꧀ꦮ", "len": 3 }; } else if (str.indexOf("khy") == 0) { //ka rekan + wignyan return { "CoreSound": "ꦏ꦳ꦾ", "len": 3 }; } else { return { "CoreSound": "ꦏ꦳", "len": 2 }; }// perubahan versi 1.52, dari ꦓ menjadi ꦒ꦳ } else if (str.indexOf("gh") == 0) { //gh (aksara rekan) if (str.indexOf("ghl") == 0) { //ga rekan + panjingan la return { "CoreSound": "ꦒ꦳꧀ꦭ", "len": 3 }; } else if (str.indexOf("ghw") == 0) { //ga rekan + panjingan wa return { "CoreSound": "ꦒ꦳꧀ꦮ", "len": 3 }; } else if (str.indexOf("ghr") == 0) { //ga rekan + cakra return { "CoreSound": "ꦒ꦳ꦿ", "len": 3 }; } else if (str.indexOf("ghy") == 0) { //ga rekan + wignyan return { "CoreSound": "ꦒ꦳ꦾ", "len": 3 }; } else { return { "CoreSound": "ꦒ꦳", "len": 2 }; } } else if (str.indexOf("Kh") == 0) { //Kh (aksara murda: ka murda) if (str.indexOf("Khl") == 0) { //ka murda + panjingan la return { "CoreSound": "ꦑ꧀ꦭ", "len": 3 }; } else if (str.indexOf("Khr") == 0) { //ka murda + cakra return { "CoreSound": "ꦑꦿ", "len": 3 }; } else if (str.indexOf("Khw") == 0) { //ka murda + panjingan wa return { "CoreSound": "ꦑ꧀ꦮ", "len": 3 }; } else if (str.indexOf("Khy") == 0) { //ka murda + wignyan return { "CoreSound": "ꦑꦾ", "len": 3 }; } else { return { "CoreSound": "ꦑ", "len": 2 }; } } else if (str.indexOf("Gh") == 0) { //Gh (aksara murda: ga murda) if (str.indexOf("Ghl") == 0) { //ga murda + panjingan la return { "CoreSound": "ꦓ꧀ꦭ", "len": 3 }; } else if (str.indexOf("Ghw") == 0) { //ga murda + panjingan wa return { "CoreSound": "ꦓ꧀ꦮ", "len": 3 }; } else if (str.indexOf("Ghr") == 0) { //ga murda + cakra return { "CoreSound": "ꦓꦿ", "len": 3 }; } else if (str.indexOf("Ghy") == 0) { //ga murda + wignyan return { "CoreSound": "ꦓꦾ", "len": 3 }; } else { return { "CoreSound": "ꦓ", "len": 2 }; } } else if (str.indexOf("ch") == 0) { //ch (aksara murda: ca murda) if (str.indexOf("chl") == 0) { //ca murda + panjingan la return { "CoreSound": "ꦖ꧀ꦭ", "len": 3 }; } else if (str.indexOf("chr") == 0) { //ca murda + cakra return { "CoreSound": "ꦖꦿ", "len": 3 }; } else if (str.indexOf("chw") == 0) { //ca murda + panjingan wa return { "CoreSound": "ꦖ꧀ꦮ", "len": 3 }; } else if (str.indexOf("chy") == 0) { //ca murda + wignyan return { "CoreSound": "ꦖꦾ", "len": 3 }; } else { return { "CoreSound": "ꦖ", "len": 2 }; } } else if (str.indexOf("jh") == 0) { //jh (aksara murda: ja mahaprana) if (str.indexOf("jhl") == 0) { //ja mahaprana + panjingan la return { "CoreSound": "ꦙ꧀ꦭ", "len": 3 }; //with zws, otherwise the panjingan is overlapped } else if (str.indexOf("jhr") == 0) { //ja mahaprana + cakra return { "CoreSound": "ꦙꦿ", "len": 3 }; } else if (str.indexOf("jhw") == 0) { //ja mahaprana + panjingan wa return { "CoreSound": "ꦙ꧀ꦮ", "len": 3 }; } else if (str.indexOf("jhy") == 0) { //ja mahaprana + wignyan return { "CoreSound": "ꦙꦾ", "len": 3 }; } else { return { "CoreSound": "ꦙ", "len": 2 }; } } else if (str.indexOf("ph") == 0) { //ph (aksara murda: pa murda) if (str.indexOf("phl") == 0) { //pa murda + panjingan la return { "CoreSound": "ꦦ꧀ꦭ", "len": 3 }; } else if (str.indexOf("phr") == 0) { //pa murda + cakra return { "CoreSound": "ꦦꦿ", "len": 3 }; } else if (str.indexOf("phw") == 0) { //pa murda + panjingan wa return { "CoreSound": "ꦦ꧀ꦮ", "len": 3 }; } else if (str.indexOf("phy") == 0) { //pa murda + wignyan return { "CoreSound": "ꦦꦾ", "len": 3 }; } else { return { "CoreSound": "ꦦ", "len": 2 }; } } else if (str.indexOf("bh") == 0) { //bh (aksara murda: ba murda) if (str.indexOf("bhl") == 0) { //ba murda + panjingan la return { "CoreSound": "ꦨ꧀ꦭ", "len": 3 }; } else if (str.indexOf("bhr") == 0) { //ba murda + cakra return { "CoreSound": "ꦨꦿ", "len": 3 }; } else if (str.indexOf("bhw") == 0) { //ba murda + panjingan wa return { "CoreSound": "ꦨ꧀ꦮ", "len": 3 }; } else if (str.indexOf("bhy") == 0) { //ba murda + wignyan return { "CoreSound": "ꦨꦾ", "len": 3 }; } else { return { "CoreSound": "ꦨ", "len": 2 }; } } else if (str.indexOf("sh") == 0) { //sh (aksara murda: sa murda) if (str.indexOf("shl") == 0) { //sa murda + panjingan la return { "CoreSound": "ꦯ꧀ꦭ", "len": 3 }; } else if (str.indexOf("shr") == 0) { //sa murda + cakra return { "CoreSound": "ꦯꦿ", "len": 3 }; } else if (str.indexOf("shw") == 0) { //sa murda + panjingan wa return { "CoreSound": "ꦯ꧀ꦮ", "len": 3 }; } else if (str.indexOf("shy") == 0) { //sa murda + wignyan return { "CoreSound": "ꦯꦾ", "len": 3 }; } else { return { "CoreSound": "ꦯ", "len": 2 }; }/* murda block end *///Uncatched exception: -h followed by hy, hr, hl, hw } else if (str.indexOf("hh") == 0) { //wignyan + ha, e.g. root word ends with 'h' with suffix -i return { "CoreSound": "ꦃꦲ", "len": 2 };//Uncatched exception: -r followed by hy, hr, hl, hw } else if (str.indexOf("rh") == 0) { //layar + ha return { "CoreSound": "ꦂꦲ", "len": 2 }; } else if (str.indexOf("h") == 1) { //h (h di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦲ", "len": 2 }; } //V.2. 2nd letter is 'g' if (str.indexOf("ng") == 0) { //suku kata diawali 'ng'//Uncatched exception: -ng followed by ry, rw, rl if (str.indexOf("ngr") == 0) { //cakra (for cecak + ra, separate by a space) return { "CoreSound": "" + "ꦔꦿ", "len": 3 }; } else if (str.indexOf("ngy") == 0) { //pengkal (for cecak + ya, separate by a space) return { "CoreSound": "" + "ꦔꦾ", "len": 3 };//Uncatched exception: -ng followed by hy, hr, hl } else if (str.indexOf("nghw") == 0) { //tyonghwa return { "CoreSound": "" + "ꦁꦲ꧀ꦮ", "len": 4 }; } else if (str.indexOf("ngg") == 0) { //cecak + ga if (str.indexOf("nggr") == 0) { //nggronjal return { "CoreSound": "ꦔ꧀ꦒꦿ", "len": 4 }; } else if (str.indexOf("nggl") == 0) { //nggl- return { "CoreSound": "ꦔ꧀ꦒ꧀ꦭ", "len": 4 }; } else if (str.indexOf("nggw") == 0) { //nggw-, munggwing return { "CoreSound": "ꦔ꧀ꦒ꧀ꦮ", "len": 4 }; } else if (str.indexOf("nggy") == 0) { //nggy-, anggyat return { "CoreSound": "ꦔ꧀ꦒꦾ", "len": 4 }; } else { return { "CoreSound": "ꦔ꧀ꦒ", "len": 3 }; } } else if (str.indexOf("ngn") == 0) { //cecak + na//Uncatched exception: -ng followed by ngy, ngr, ngl, ngw if (str.indexOf("ngng") == 0) { //ngng return { "CoreSound": "ꦁꦔ", "len": 4 }; } else { return { "CoreSound": "ꦁꦤ", "len": 3 }; } } else if (str.indexOf("ngh") == 0) { //cecak + ha return { "CoreSound": "ꦁꦲ", "len": 3 }; } else if (str.indexOf("ngc") == 0) { //cecak + ca return { "CoreSound": "ꦁꦕ", "len": 3 }; } else if (str.indexOf("ngj") == 0) { //cecak + ja return { "CoreSound": "ꦁꦗ", "len": 3 }; } else if (str.indexOf("ngl") == 0) { //ngl, e.g. ngluwari return { "CoreSound": "ꦔ꧀ꦭ", "len": 3 }; } else if (str.indexOf("ngw") == 0) { //ngw, e.g. ngwiru return { "CoreSound": "ꦔ꧀ꦮ", "len": 3 }; } else { return { "CoreSound": "ꦁ", "len": 2 };// cecak, with zws } } else if (str.indexOf("gg") == 0) { //'gg', e.g. root word ends with 'g' with suffix -i return { "CoreSound": "ꦒ꧀ꦒ", "len": 2 }; } else if (str.indexOf("hg") == 0) { //wignyan + ga, e.g. dahgene return { "CoreSound": "ꦃꦒ", "len": 2 }; } else if (str.indexOf("rg") == 0) { //layar + ga, e.g. amarga return { "CoreSound": "ꦂꦒ", "len": 2 }; } else if (str.indexOf("g") == 1) { //g (g di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦒ", "len": 2 }; } //V.3. 2nd letter is 'y' if (str.indexOf("ny") == 0) { //suku kata diawali 'ny' if (str.indexOf("nyr") == 0) { //cakra return { "CoreSound": "ꦚꦿ", "len": 3 };/* } else if (str.indexOf("nyy") == 0) { //nyy, I don't think it's possible return { "CoreSound": "ꦚꦾ", "len": 3 };*/ } else if (str.indexOf("nyl") == 0) { //nyl, e.g. nylonong return { "CoreSound": "ꦚ꧀ꦭ", "len": 3 }; } else if (str.indexOf("nyw") == 0) { //nyw return { "CoreSound": "ꦚ꧀ꦮ", "len": 3 };/* } else if (str2.indexOf("Ny") == 0) { //Na murda + pengkal, unlikely combination? return { "CoreSound": "ꦟꦾ", "len": 2 };*/ } else { return { "CoreSound": "ꦚ", "len": 2 }; } } else if (str.indexOf("hy") == 0) { //wignyan + ya / ha + pengkal -- hyang return { "CoreSound": "ꦲꦾ", "len": 2 }; } else if (str2.indexOf("ry") == 0) { //layar + ya, e.g. Suryati, Wiryadi if (str.indexOf("ryy") == 0) { return { "CoreSound": "ꦂꦪꦾ", "len": 3 } //'ryy', e.g. Duryyodhana (Jawa Kuno) } else { return { "CoreSound": "ꦂꦪ", "len": 2 }; }/* } else if (str.indexOf("yy") == 0) { //'yy', I don't think it's possible return { "CoreSound": "ꦪꦾ", "len": 2 };*/ } else if (str2.indexOf("qy") == 0) { //qy -- only pengkal return { "CoreSound": "ꦾ", "len": 1 }; } else if (str.indexOf("y") == 1) { //pengkal (y di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "ꦾ", "len": 2 }; } //V.4. 2nd letter is 'r'//Uncatched exception: -h followed by ry, rw, rl if (str.indexOf("hr") == 0) { //wignyan + ra / ha + cakra return { "CoreSound": "ꦲꦿ", "len": 2 }; } else if (str.indexOf("wr") == 0) { //wr -- panjingan + cakra return { "CoreSound": "" + "ꦮꦿ", "len": 2 };//Uncatched exception: -r followed by ry, rw, rl } else if (str.indexOf("rr") == 0) { //layar + ra (no cakra) return { "CoreSound": "ꦂꦫ", "len": 2 }; } else if (str2.indexOf("qr") == 0) { //qr -- only pasangan ra return { "CoreSound": "꧀ꦫ", "len": 1 }; } else if (str2.indexOf("qR") == 0) { //qR -- only cakra return { "CoreSound": "ꦿ", "len": 1 }; } else if (str.indexOf("r") == 1) { //cakra (r di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "ꦿ", "len": 2 }; } //V.5. 2nd letter is 'l' or 'w' //panjingan -l if (str.indexOf("hl") == 0) { //wignyan + la return { "CoreSound": "ꦃꦭ", "len": 2 }; } else if (str.indexOf("rl") == 0) { //layar + la return { "CoreSound": "ꦂꦭ", "len": 2 }; } else if (str.indexOf("ll") == 0) { //ll return { "CoreSound": "ꦭ꧀ꦭ", "len": 2 }; } else if (str.indexOf("ql") == 0) { //only panjingan return { "CoreSound": "꧀ꦭ", "len": 2 }; } else if (str.indexOf("l") == 1) { // (l di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦭ", "len": 2 }; } //panjingan -w if (str.indexOf("hw") == 0) { //wignyan + ha return { "CoreSound": "ꦃꦮ", "len": 2 }; //ꦲ꧀ꦮ } else if (str.indexOf("rw") == 0) { //layar + ha return { "CoreSound": "ꦂꦮ", "len": 2 };//error untuk 'rwi', 'rwab' } else if (str.indexOf("ww") == 0) { //ww (wwang, pûrwwa) - terima kasih Mas Revo return { "CoreSound": "ꦮ꧀ꦮ", "len": 2 }; } else if (str.indexOf("qw") == 0) { //only panjingan return { "CoreSound": "꧀ꦮ", "len": 2 }; } else if (str.indexOf("w") == 1) { // (w di posisi karakter kedua) return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦮ", "len": 2 }; } //V.6. 2nd letter is 'c' or 'j' if (str.indexOf("nc") == 0) { //nc if (str.indexOf("ncr") == 0) { //ncr -- kencrung return { "CoreSound": "ꦚ꧀ꦕꦿ", "len": 3 }; } else if (str.indexOf("ncl") == 0) { //ncl -- kinclong return { "CoreSound": "ꦚ꧀ꦕ꧀ꦭ", "len": 3 }; } else { return { "CoreSound": "ꦚ꧀ꦕ", "len": 2 }; } } else if (str.indexOf("hc") == 0) { //wignyan + ca return { "CoreSound": "ꦃꦕ", "len": 2 }; } else if (str.indexOf("rc") == 0) { //layar + ca -- arca return { "CoreSound": "ꦂꦕ", "len": 2 }; } else if (str.indexOf("cc") == 0) { //cc -- impossible combination in real text return { "CoreSound": "ꦕ꧀ꦕ", "len": 2 }; } else if (str2.indexOf("qc") == 0) { //only pasangan ca return { "CoreSound": "꧀ꦕ", "len": 2 }; } else if (str.indexOf("c") == 1) { //c return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦕ", "len": 2 }; } if (str.indexOf("nj") == 0) { //nj if (str.indexOf("njr") == 0) { //njr -- anjrit return { "CoreSound": "ꦚ꧀ꦗꦿ", "len": 3 }; } else if (str.indexOf("njl") == 0) { //njl -- anjlog return { "CoreSound": "ꦚ꧀ꦗ꧀ꦭ", "len": 3 }; } else { return { "CoreSound": "ꦚ꧀ꦗ", "len": 2 }; } } else if (str.indexOf("hj") == 0) { //wignyan + ja return { "CoreSound": "ꦃꦗ", "len": 2 }; } else if (str.indexOf("rj") == 0) { //layar + ja return { "CoreSound": "ꦂꦗ", "len": 2 }; } else if (str.indexOf("jj") == 0) { //jj -- impossible combination in real text return { "CoreSound": "ꦗ꧀ꦗ", "len": 2 }; } else if (str2.indexOf("qj") == 0) { //only pasangan ja return { "CoreSound": "꧀ꦗ", "len": 2 }; } else if (str.indexOf("j") == 1) { //j return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦗ", "len": 2 }; } //V.7. 2nd letter is 'ñ' or 'n' if (str.indexOf("jñ") == 0) { //suku kata diawali 'jñ' if (str.indexOf("jñl") == 0) { //suku kata diawali 'jñ' - nya murda return { "CoreSound": "ꦘ꧀ꦭ", "len": 3 }; } else if (str.indexOf("jñr") == 0) { //nya murda + cakra return { "CoreSound": "ꦘꦿ", "len": 3 }; } else if (str.indexOf("jñw") == 0) { //nya murda + panjingan wa return { "CoreSound": "ꦘ꧀ꦮ", "len": 3 }; } else if (str.indexOf("jñy") == 0) { //nya murda + wignyan return { "CoreSound": "ꦘꦾ", "len": 3 }; } else { return { "CoreSound": "ꦘ", "len": 2 }; } } else if (str.indexOf("jn") == 0) { //suku kata diawali 'jn' if (str.indexOf("jny") == 0) { //suku kata diawali 'jny' - nya murda if (str.indexOf("jnyl") == 0) { //suku kata diawali 'jny' - nya murda return { "CoreSound": "ꦘ꧀ꦭ", "len": 4 }; } else if (str.indexOf("jnyr") == 0) { //nya murda + cakra return { "CoreSound": "ꦘꦿ", "len": 4 }; } else if (str.indexOf("jnyw") == 0) { //nya murda + panjingan wa return { "CoreSound": "ꦘ꧀ꦮ", "len": 4 }; } else if (str.indexOf("jnyy") == 0) { //nya murda + wignyan return { "CoreSound": "ꦘꦾ", "len": 4 }; } else { return { "CoreSound": "ꦘ", "len": 3 }; } } else { return { "CoreSound": "ꦗ꧀ꦤ", "len": 2 }; }//Uncatched exception: -h followed by ngy, ngr, ngl, ngw } else if (str.indexOf("hn") == 0) { //wignyan + na return { "CoreSound": "ꦃꦤ", "len": 2 };//Uncatched exception: -r followed by ngy, ngr, ngl, ngw } else if (str.indexOf("rn") == 0) { //layar + na return { "CoreSound": "ꦂꦤ", "len": 2 }; } else if (str.indexOf("nn") == 0) { //nn, e.g. root word ends with 'n' with suffix -i if (str.indexOf("nng") == 0) { // return { "CoreSound": "ꦤ꧀ꦁ", "len": 3 }; } else if (str.indexOf("nng") == 0) { // return { "CoreSound": "ꦤ꧀ꦚ꧀", "len": 3 }; } else { return { "CoreSound": "ꦤ꧀ꦤ", "len": 2 }; } } else if (str2.indexOf("qn") == 0) { //only pasangan na return { "CoreSound": "꧀ꦤ", "len": 2 }; } else if (str.indexOf("ñ") == 1) { //huruf asing sih sebenarnya, kemungkinan kecil muncul return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦚ", "len": 2 }; } else if (str.indexOf("n") == 1) { // return { "CoreSound": "" + GetCoreSound(str2[0]).CoreSound + "꧀ꦤ", "len": 2 }; } //suku kata memiliki konsonan tersebut yang tidak di posisi kedua if (str.indexOf("h") > 1 || str.indexOf("g") > 1 || str.indexOf("y") > 1 || str.indexOf("r") > 1 || str.indexOf("l") > 1 || str.indexOf("w") > 1 || str.indexOf("c") > 1 || str.indexOf("j") > 1 || str.indexOf("n") > 1 || str.indexOf("ñ") > 1) { var sound = ""; var len = 0; var index = 0; for (index = 0; index < str.length; index++) { var c = str[index]; if (!isVowel(c)) { sound += ResolveCharacterSound(c); len++; } else { break; } } return { "CoreSound": sound, "len": len }; } return { "CoreSound": null, "len": 1 };}/***************************VI. Function GetCoreSound, GetSpecialSoundreturn aksara nglegana maupun aksara istimewa (f/v/z/pangkon)****************************/function GetCoreSound(str) { var soundMap1 = { //26 uppercase for non-Murda, largely mirror lowercase, except AEIOU, and HR "A":"ꦄ", //A "B":"ꦧ", //ba "C":"ꦕ", //ca "D":"ꦢ", //da "E":"ꦌ", //E "F":"ꦥ꦳", //fa rekan "G":"ꦒ", //ga "H":"ꦲ", //ha "I":"ꦆ", //I "J":"ꦗ", //ja "K":"ꦏ", //ka "L":"ꦭ", //la "M":"ꦩ", //ma "N":"ꦤ", //na "O":"ꦎ", //O "P":"ꦥ", //pa "Q":"꧀", //pangkon "R":"ꦫ", //ra "S":"ꦱ", //sa "T":"ꦠ", //ta "U":"ꦈ", //U "V":"ꦮ꦳", //va rekan "W":"ꦮ", //wa "X":"ꦼ", //pepet "Y":"ꦪ", //ya "Z":"ꦰ" //Sa Mahaprana //test: ABaCaDaEFaGaHaJaKaLaMaNaOPaRaSaTaUVaWaXYaZa } var soundMap2 = { //26 uppercase for Murda (notice for J, Q, R, and Z) "A":"ꦄ", //A "B":"ꦨ", //Ba murda "C":"ꦖ", //Ca murda "D":"ꦣ", //Da murda "E":"ꦌ", //E "F":"ꦦ꦳", //Pa murda rekan "G":"ꦓ", //Ga murda "H":"ꦲ꦳", //H "I":"ꦆ", //I "J":"ꦙ", //Ja mahaprana "K":"ꦑ", //Ka murda "L":"ꦭ", //L "M":"ꦩ", //M "N":"ꦟ", //Na murda "O":"ꦎ", //O "P":"ꦦ", //Pa murda "Q":"ꦐ", //Ka Sasak "R":"ꦬ", //Ra Agung "S":"ꦯ", //Sa murda "T":"ꦡ", //Ta murda "U":"ꦈ", //U "V":"ꦮ꦳", //Wa rekan "W":"ꦮ", //W "X":"ꦼ", //X "Y":"ꦪ", //Y "Z":"ꦰ" //Sa mahaprana //test: ABaCaDaEFaGaHaJaKaLaMaNaOPaQaRaSaTaUVaWaXaYaZa } var soundMap3 = { //26 lowercase + 35 special, same for both Murda or non-Murda "a":"ꦲ", //ha "b":"ꦧ", //ba "c":"ꦕ", //ca "d":"ꦢ", //da "e":"ꦲꦺ", //he "f":"ꦥ꦳", //fa rekan "g":"ꦒ", //ga "h":"ꦃ", //wignyan, with zws "i":"ꦲꦶ", //hi "j":"ꦗ", //ja "k":"ꦏ", //ka "l":"ꦭ", //la "m":"ꦩ", //ma "n":"ꦤ", //na "o":"ꦲꦺꦴ", //ho "p":"ꦥ", //pa "q":"꧀", //pangkon "r":"ꦂ", //layar, with zws "s":"ꦱ", //sa "t":"ꦠ", //ta "u":"ꦲꦸ", //hu "v":"ꦮ꦳", //va rekan "w":"ꦮ", //wa "x":"ꦲꦼ", //hə "y":"ꦪ", //ya "z":"ꦗ꦳", //za rekan "È":"ꦌ", //È "É":"ꦌ", //É "Ê":"ꦄꦼ", //Ê "Ě":"ꦄꦼ", //Ě "Ĕ":"ꦄꦼ", //Ĕ "è":"ꦲꦺ", //hè "é":"ꦲꦺ", //hé "ê":"ꦲꦼ", //hê "ě":"ꦲꦼ", //hě "ĕ":"ꦲꦼ", //hĕ "ə":"ꦲꦼ", //hə "ɔ":"ꦲ", //hɔ "å":"ꦲ", //hɔ "ô":"ꦲ", //hô "â":"ꦲꦴ", //hâ "ā":"ꦲꦴ", //hā "ī":"ꦲꦷ", //hī "ū":"ꦲꦹ", //hū "ō":"ꦲꦼꦴ", //hō "Ñ":"ꦚ", //nya "ñ":"ꦚ", //nya "ɲ":"ꦚ", //nya "Ŋ":"ꦔ", //nga "ŋ":"ꦔ", //nga "Ṇ":"ꦟ", //Na Murda "ṇ":"ꦟ", //Na Murda "Ḍ":"ꦝ", //dha / ḍa (Indic) "ḍ":"ꦝ", //dha / ḍa (Indic) "Ṭ":"ꦛ", //tha / ṭa (Indic) "ṭ":"ꦛ", //tha / ṭa (Indic) "ś":"ꦯ", //Sa Murda "Ṣ":"ꦰ", //Sa Mahaprana "ṣ":"ꦰ", //Sa Mahaprana "Ṛ":"ꦽ", //Cakra keret, somehow was categorized as vocal "ṛ":"ꦽ" //idem //test: Èè.Éé.Êê.Ěě.Ĕĕ.Ṛṛ.ôâāīūōåɔə //test: ḌaḍaṆaṇaṢaṣaṬaṭaŊaŋaÑañaɲaśa } var soundMap, murda; var modeMurda = document.getElementsByName("murda"); for(var rad in modeMurda) { if(modeMurda[rad].checked) murda = modeMurda[rad].value; } if(murda == "pakai") soundMap = {...soundMap2, ...soundMap3}; else //if(murda == "tidak") soundMap = {...soundMap1, ...soundMap3}; var h_shift = GetShift(str); var core = str; if (h_shift["CoreSound"] == null) { if (soundMap[str.charAt(0)]) core = soundMap[str.charAt(0)]; return { "CoreSound": core, "len": 1 }; } else { return h_shift; }}function GetSpecialSound(str) { specialsoundMap = { "f":"ꦥ꦳꧀", "v":"ꦮ꦳꧀", "z":"ꦗ꦳꧀", "ś":"ꦯ꧀", "Q":"꧀", "q":"꧀"/*pangkon*/ } if(specialsoundMap[str]!==undefined){ return specialsoundMap[str]; } return null;}/***************************VII. Function ResolveCharacterSoundreturn tanda baca, digit, vokal, maupun nglegana+pangkon****************************/function ResolveCharacterSound( /*char*/ c) { var str = "" + c; var len = 0; if (isDigit(c)) { return "" + ('꧇' + (c - '0')); } else if (isHR(str[0])) { return "" + GetCoreSound(str).CoreSound; //layar dan wignyan } else if (isCJ(str[1])) { return "" + GetCoreSound(str).CoreSound + "꧀"; //anuswara } else if (isConsonant(str[0])) { return "" + GetCoreSound(str).CoreSound + "꧀"; } else { //if (isVowel(str[0])) { return "" + GetCoreSound(str).CoreSound; }/**/}/***************************VIII. Function GetSoundfungsi yang mentransliterasi masing-masing suku kata****************************/function GetSound(str) { var len = 0; str = SuperTrim(str); str2 = str.toLowerCase(); if (str == null || str == "") { return ""; } var SpecialSound = GetSpecialSound(str); if (SpecialSound != null && str.length == 1) { return SpecialSound; } if (str.length == 1) { return ResolveCharacterSound(str[0]); } else { var core_sound = GetCoreSound(str); //return "1"+core_sound.CoreSound+"2"; var matra = ""; var konsonan = ""; if (core_sound.len >= 1) { matra = GetMatra(str.substring(core_sound.len)); //xeiou (pepet, taling, suku, taling tarung, wulu, dll.) /*if () { } else { }*/ } else { matra = ""; } //a/å/ɔ/* rules for some cluster like ngg- that have different behaviour depending if it's the start of a word or not.TODO: find more elegant solution */ if (str2.indexOf("nggr") == 0) { //nggr- if (vowelPrev) konsonan = "ꦁꦒꦿ";//<vowel>nggr-, e.g. panggrahita //else if (matra = "") else konsonan = "ꦔ꧀ꦒꦿ";//<nonvowel>nggr-, i.e. nggronjal } else if (str2.indexOf("nggl") == 0) { //nggl-, e.g. ngglantung konsonan = "ꦔ꧀ꦒ꧀ꦭ"; } else if (str2.indexOf("nggw") == 0) { //nggw-, e.g. munggwing konsonan = "ꦔ꧀ꦒ꧀ꦮ"; } else if (str2.indexOf("nggy") == 0) { //nggy-, e.g. anggyat konsonan = "ꦔ꧀ꦒꦾ"; } else if (str2.indexOf("ngg") == 0) { //ngg- if (vowelPrev) konsonan = "ꦁꦒ";//<vowel>ngg-, e.g. tunggal //else if (spacePrev) konsonan = "ꦔ꧀";//<space>ngg-, e.g. ditinggal nggambar (it has a zws) else konsonan = "ꦔ꧀ꦒ";//<nonvowel>ngg-, i.e. nggambar //for cluster longer than 4 consonants, such as "ditinggalnggambar", //need to separate it by a space, "ditinggal nggambar" to be correct } else if (str2.indexOf("rlx") == 0) { //r lx, e.g. pasarlxgi konsonan = "ꦂꦊ"; matra = ""; } else if (str2.indexOf("rrx") == 0) { //r rx konsonan = "ꦂꦉ"; matra = ""; } else if (str2.indexOf("hlx") == 0) { //h lx if (vowelPrev) { konsonan = "ꦃꦊ"; matra = ""; } else konsonan = "ꦲ꧀ꦭꦼ"; matra = ""; } else if (str2.indexOf("hrx") == 0) { //h rx if (vowelPrev) { konsonan = "ꦃꦉ"; matra = ""; } else konsonan = "ꦲꦽ"; matra = ""; } else if (str2.indexOf("qlx") == 0) { //just pasangan la + pepet konsonan = "꧀ꦭꦼ"; matra = ""; } else if (str2.indexOf("qrx") == 0) { //just cakra keret konsonan = "ꦽ"; matra = ""; } else if (core_sound.CoreSound == "ꦂꦂꦮ") { // -rw- if (vowelPrev) konsonan = "ꦂꦮ";//-rw- -- arwana else konsonan = "ꦫ꧀ꦮ";//rw- -- rwa/rwi/rwab } else if (core_sound.CoreSound == "ꦃꦃꦭ") { // -hl- if (vowelPrev) konsonan = "ꦃꦭ";//-hl- else konsonan = "ꦲ꧀ꦭ";//hlam } else if (core_sound.CoreSound == "ꦃꦃꦮ") { // -hw- if (vowelPrev) konsonan = "ꦃꦮ";//-hw- else konsonan = "ꦲ꧀ꦮ";//hwab,hwan } else if (core_sound.CoreSound == "ꦃꦲꦾ") { // -hy- if (vowelPrev) konsonan = "ꦃꦪ";//sembahyang else konsonan = "ꦲꦾ";//hyang/* rules for some characters that change depends on the matra/vowel (e.g. lx and rx, and -rx) */ } else if (findstr(core_sound.CoreSound,'ꦾ') && matra == "꧀") { // pengkal konsonan = core_sound.CoreSound; matra = "";//-y- } else if (findstr(core_sound.CoreSound,'ꦿ') && matra == "꧀") { // cakra konsonan = core_sound.CoreSound; matra = "";//-r- } else if (findstr(core_sound.CoreSound,'ꦿ') && matra == "ꦼ") { // cakra keret if ((str[0] == "n" && str[1] == "y") || ((str[0] == "t" || str[0] == "d") && str[1] == "h")) { konsonan = GetCoreSound(str[0]+str[1]).CoreSound + "ꦽ"; matra = "";//nyrê-, thrê-, dhrê- } else if (str[0] == "n" && str[1] == "g") { if (str[2] == "g") konsonan = "ꦔ꧀ꦒꦽ"; else konsonan = "ꦔꦽ"; matra = "";//nggrê-/ngrê- } else { konsonan = GetCoreSound(str[0]).CoreSound + "ꦽ"; matra = "";//-rê- } } else if (findstr(core_sound.CoreSound, 'ꦭ') && matra == "ꦼ") { // nga lelet if ((str[0] == "n" && str[1] == "y") || ((str[0] == "t" || str[0] == "d") && str[1] == "h")) { konsonan = GetCoreSound(str[0]+str[1]).CoreSound + "꧀ꦭꦼ"; matra = "";//nylê-, thlê-, dhlê- } else if (str[0] == "n" && str[1] == "g") { if (str[2] == "g") konsonan = "ꦔ꧀ꦒ꧀ꦭꦼ"; else konsonan = "ꦔ꧀ꦭꦼ"; matra = "";//ngglê-/nglê- } else if (str[0] == "l") { konsonan = "ꦊ"; matra = "";//-lê- } else { konsonan = GetCoreSound(str[0]).CoreSound + "꧀ꦭꦼ"; matra = "";//-lê- } } else if (core_sound.CoreSound == 'ꦃ' && matra == "꧀") { // wignyan - 12 April konsonan = "ꦲ"; //ha } else if (core_sound.CoreSound == 'ꦃ' && matra != "꧀") { // wignyan konsonan = "ꦲ"; //ha } else if (core_sound.CoreSound == 'ꦂ' && matra == "ꦼ") { // pa cerek konsonan = "ꦉ"; matra = "";//rê } else if (core_sound.CoreSound == 'ꦂ' && matra == "꧀") { // layar konsonan = "ꦫ"; //ra } else if (core_sound.CoreSound == 'ꦂ' && matra != "꧀") { // layar konsonan = "ꦫ"; //ra } else if (core_sound.CoreSound == 'ꦁ' && matra == "꧀") { // cecak konsonan = "ꦁ"; matra = "";//cecak } else if (core_sound.CoreSound == 'ꦁ' && matra != "꧀") { // cecak konsonan = "ꦔ"; //nga } else { konsonan = core_sound.CoreSound; } return "" + konsonan + matra; }}/***************************IX. Function DoTransliteratefungsi utama yang dipanggil (main function)****************************/function DoTransliterate(str) { var i = 0; var ret = ""; var pi = 0; //?offset var vowelFlag = false, angkaFlag = false, cecakFlag=false; var angka = {"0":'꧐',"1":'꧑',"2":'꧒',"3":'꧓',"4":'꧔',"5":'꧕',"6":'꧖',"7":'꧗',"8":'꧘',"9":'꧙'} str = SuperTrim(str); while (i < str.length) { if (i > 0 && isVowel(str[i]) && isVowel(str[i-1])) { //deal with words that start with multiple vocals if ((str[i-1] == 'a' && str[i] == 'a') || (str[i-1] == 'i' && str[i] == 'i') || (str[i-1] == 'u' && str[i] == 'u') || (str[i-1] == 'a' && str[i] == 'i') || (str[i-1] == 'a' && str[i] == 'u')) {//specials if (i == 1 || (i > 1 && !isConsonant(str[i-2]))) { //for example if starts with 'ai-' str = str.substring(0, i)+'h'+str.substring(i, str.length); } else { var modeDiftong = document.getElementsByName("diftong"); for(var rad in modeDiftong) { if(modeDiftong[rad].checked) diftong = modeDiftong[rad].value; } if(diftong == "pakai") { //do nothing, look in matramap table } else //if(diftong == "tidak") { str = str.substring(0, i)+'h'+str.substring(i, str.length); } } } else if ((str[i-1] == 'e' || str[i-1] == 'è' || str[i-1] == 'é') && (str[i] == 'a' || str[i] == 'o')) {//-y- str = str.substring(0, i)+'y'+str.substring(i, str.length); } else if ((str[i-1] == 'i') && (str[i] == 'a' || str[i] == 'e' || str[i] == 'è' || str[i] == 'é' || str[i] == 'o' || str[i] == 'u')) {//-y- str = str.substring(0, i)+'y'+str.substring(i, str.length); } else if ((str[i-1] == 'o') && (str[i] == 'a' || str[i] == 'e' || str[i] == 'è' || str[i] == 'é')) {//-w- str = str.substring(0, i)+'w'+str.substring(i, str.length); } else if ((str[i-1] == 'u') && (str[i] == 'a' || str[i] == 'e' || str[i] == 'è' || str[i] == 'é' || str[i] == 'i' || str[i] == 'o')) {//-y- str = str.substring(0, i)+'w'+str.substring(i, str.length); } else { str = str.substring(0, i)+'h'+str.substring(i, str.length); } } if ((isSpecial(str[i]) || isLW(str[i]) || isCJ(str[i])) && !vowelFlag) { //i++; } else if ((str[i] == 'h' && vowelFlag) || (!isVowel(str[i]) && i > 0) || (str[i] == ' ') || isPunct(str[i]) || isDigit(str[i]) || ((i - pi) > 5)) { if (!isDigit(str[i]) && angkaFlag) { //turn off the flag ret+="꧇";// with zws angkaFlag = false; } if (pi < i) { if (cecakFlag && GetSound(str.substring(pi, i)) == "ꦁ") { cecakFlag = false; ret += "ꦔ꧀ꦔ"; } else if (!cecakFlag && GetSound(str.substring(pi, i)) == "ꦁ") { cecakFlag = true; ret += "ꦁ"; } else { cecakFlag = false; ret += GetSound(str.substring(pi, i)); } } if (str[i] == ' ') { var spasi, modeSpasi; var pakaiSpasi = document.getElementsByName("spasi"); for(var rad in pakaiSpasi) { if(pakaiSpasi[rad].checked) modeSpasi = pakaiSpasi[rad].value; } if(modeSpasi == "without") { //if space preceeded by open vowel, or layar/wignyan (therefore, no pangkon/virama) if (i > 0 && ['a', 'e', 'i', 'o', 'u', 'r', 'h', 'ě'].indexOf(str[i-1]) >= 0) { spasi = ''; // zero-width space } else { spasi = ''; } } else { //if(mode == "with") spasi = ''; // zero-width space //spasi = ' '; }//hair space http://en.wikipedia.org/wiki/Space_(punctuation)#Spaces_in_Unicode } ret += spasi; } if (isPunct(str[i])) { if (str[i] == '.') { ret += "꧉"; //titik+zero-width space pi = i + 1; } else if (str[i] == ',') { ret += "꧈"; //koma+zero-width space pi = i + 1; } else if (str[i] == ':') { ret += "꧇"; //titik dua+zero-width space pi = i + 1; } else if (str[i] == '|') { ret += "꧋"; pi = i + 1;/* comment out, not really a good way to do brackets } else if (str[i] == '(') { ret += "꧌"; pi = i + 1; } else if (str[i] == ')') { ret += "꧍"; pi = i + 1;// with zws*/ } else if (str[i] == '-') {//tanda hubung ret += ""; pi = i + 1; } else if (str[i] == '?' || str[i] == '!' || str[i] == '"' || str[i] == "'") {//tanda tanya/seru/petik ret += ""; //zero-width space pi = i + 1; } else { ret += str[i]; pi = i + 1; } } else if (isDigit(str[i])) { if (!angkaFlag) ret+="꧇"; ret += angka[str[i]]; angkaFlag = true; pi = i + 1; } else { pi = i; } vowelFlag = false; } else if (isVowel(str[i]) && str[i] != 'h') { if (!isDigit(str[i]) && angkaFlag) { //turn off the flag ret+="꧇"; //with zws angkaFlag = false; } vowelFlag = true; } if (pi > 0 && isVowel(str[pi-1])) {//<vowel>ngg vowelPrev = true; } else vowelPrev = false; /* not working if (pi > 0 && findstr(" ",str[pi-1])) {//<vowel>ngg spacePrev = true; } else spacePrev = false;*/ i++; } //endwhile if (pi < i) { ret += GetSound(str.substring(pi, i)); } return SuperTrim(ret);}
🔥 Top keywords: Wikipédia:PendhapaPitulungPallywoodMahasiswaWikipédiat4yfpMirunggan:Golèktu4kjNaraguna:Altair Netraphim/bak wedhi3Perang Donya IIWikipédia:Sélakan umumSepongSurat Adh DhuhaPitulung:IsiMirunggan:Owahan anyarSinarmas GroupSurat Al QadrPanggulawenthahGapuraAksara CarakanWikipédia:SesambunganSurat As SajdahWikipédia:BabGapura:PaguyubanMinal 'Aidin wal-FaizinFacebookSekseWikipédia basa JawaCumbanaWikipédia:Pronunciation respelling keyꦄꦏ꧀ꦱꦫꦕꦫꦏꦤ꧀NgrokokJavaScriptWikipédia:Sugeng rawuhRéboisasiCumbana payudaraKategori:215WisnuNaraguna:Bebasnama