Naraguna:Bennylin/trans-toba.js: Béda antara owahan

Saka Wikipédia Jawa, bauwarna mardika basa Jawa
Konten dihapus Konten ditambahkan
Tanpa ringkesan besutan
Tanpa ringkesan besutan
Tenger: Dibalèkaké
Larik 99: Larik 99:
if (str.indexOf("ng") == 0) {
if (str.indexOf("ng") == 0) {
//suku kata diawali 'ng'
//suku kata diawali 'ng'
if (str.indexOf("nga") == 0) {
return {
"CoreSound": "", "len": 2 //amisara (sandhangan / cecak)
return { "CoreSound": "" + "ꦔ", "len": 3 };
} else {
}
return { "CoreSound": "ᯰ", "len": 2 //amisara (sandhangan / cecak) };
;
}
}
}
//nya
//nya
if (str.indexOf("ny") == 0) {
if (str.indexOf("ny") == 0) {
//suku kata diawali 'ny'
//suku kata diawali 'ny'
return {
return { "CoreSound": "ᯠ", "len": 2 };
"CoreSound": "ᯠ", "len": 2
}
;
} /*
} /*
if (str.indexOf("nd") == 0) {
if (str.indexOf("nd") == 0) {
//nd-
//nd-
return {
return { "CoreSound": "ᯢ", "len": 2 };
"CoreSound": "ᯢ", "len": 2
}
;
} *//*
} *//*
if (str.indexOf("mb") == 0) {
if (str.indexOf("mb") == 0) {
//mb-
//mb-
return {
return { "CoreSound": "ᯣ", "len": 2 };
"CoreSound": "ᯣ", "len": 2
}
;
} */
} */
return {
return {

Révisi kala 2 April 2021 09.51

/*!
* trans-toba.js
* https://bennylin.github.com/transliterasi/toba.html
*
* Copyright 2013-2021, Bennylin @bennylin
* Dual licensed under the MIT or GPL Version 2 licenses.
* Released under the MIT, BSD, and GPL Licenses.
*
* Versions:
* 1 April 2021 - v 1.0
* TODO: bindu
*
* Derived from my Javanese transliteration: https://jv.wikipedia.org/wiki/Naraguna:Bennylin/trans.js
*/
var vowelPrev = false;
/***************************
Function SuperTrim, findstr
trim string, menemukan karakter di dalam string
****************************/
function SuperTrim(str) {
	str = str || '';
	return str.replace(/^\s*|\s*$/g,'').replace(/\s+/g,' ');
}
function findstr(str,tofind) {
	for (var i = 0; i < str.length; i++)
	if (str[i] == tofind)
	return true;
	return false;
}
/***************************
Function isDigit, isPunct, isVowel
cek apakah digit, tanda baca, atau huruf vokal (a, e/è/é, i, o, u, ě/ê, ô, ā/ī/ū/ō)
****************************/
function isDigit(a) {
	var str = "0123456789";
	return findstr(str,a);
}
function isPunct(a) {
	var str = ",.><?/+=-_}{[]*&^%$#@!~`\"\\|:;()";
	return findstr(str,a);
}
function isVowel(a) {
	var str = "AaEeÈèÉéIiOoUuÊêĚěXxôāīūō";
	return findstr(str,a);
}
function isLCVowel(a) {
	var str = "aeiou";
	return findstr(str,a);
}
function isConsonant(a) {
	var str = "BCDfGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz";
	//QXqx are special chars, add engma & enye
	return findstr(str,a);
}
/***************************
Function isSpecial, isHR, isLW
cek apakah karakter spesial (bikonsonan)
****************************/
function isSpecial(a) {
	var str = "GgYy";
	//untuk bikonsonan nga, nya
	return findstr(str,a);
}
/***************************
Function GetMatra
apabila 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 matramap= {
		"e":'ᯩ', "i":'ᯪ', "o":'ᯬ', "u":'ᯮ', 
		"A":'ᯀ', "E":'ᯀᯩ', "I":'ᯤ', "O":'ᯀᯬ', "U":'ᯥ'
	} //TODO: talinga (ee) & tompi
    //Aksara i (ᯤ) dan u (ᯥ) hanya digunakan untuk suku kata terbuka, misal pada kata dan ina ᯤᯉ dan ulu ᯥᯞᯮ. Untuk suku kata tertutup yang diawali dengan bunyi i atau u, digunakanlah aksara a (ᯀ atau ᯁ) bersama diaktirik untuk masing-masing vokal, misal pada kata indung ᯀᯪᯉ᯲ᯑᯮᯰ dan umpama ᯀᯮᯔ᯲ᯇᯔ

	if(matramap[str]!==undefined) {
		return matramap[str];
	}
	return "";
}
/***************************
Function GetShift
apabila huruf bikonsonan, return karakter khusus
****************************/
function GetShift(str) {
	str = str.toLowerCase();
	if (str.indexOf("ng") == 0) {
		//suku kata diawali 'ng'
      if (str.indexOf("nga") == 0) {
        return { "CoreSound": "" + "ꦔ", "len": 3 };
      } else {
		return { "CoreSound": "ᯰ", "len": 2 //amisara (sandhangan / cecak) };
      }
	} 
	//nya
	if (str.indexOf("ny") == 0) {
		//suku kata diawali 'ny'
		return { "CoreSound": "ᯠ", "len": 2 };
	} /*
	if (str.indexOf("nd") == 0) {
		//nd-
		return { "CoreSound": "ᯢ", "len": 2 };
	} *//*
	if (str.indexOf("mb") == 0) {
		//mb-
		return { "CoreSound": "ᯣ", "len": 2 };
	} */
	return {
		"CoreSound": null, "len": 1
	}
	;
}
/***************************
Function GetCoreSound
return aksara nglegana
****************************/
function GetCoreSound(str) {
	var consonantMap = {
		"A":"ᯀ", //A
		"B":"ᯅ", //B
		"C":"ᯡ", //C
		"D":"ᯑ", //D
		"E":"ᯀᯩ", //E
		"F":"ᯇ", //P
		"G":"ᯎ", //G
		"H":"ᯂ", //H
		"I":"ᯤ", //I
		"J":"ᯐ", //J
		"K":"ᯂ", //K
		"L":"ᯞ", //L
		"M":"ᯔ", //M
		"N":"ᯉ", //N
		"O":"ᯀᯬ", //O
		"P":"ᯇ", //P
		"Q":"ᯂ", //K
		"R":"ᯒ", //R
		"S":"ᯘ", //S
		"T":"ᯖ", //T
		"U":"ᯥ", //U
		"V":"ᯋ", //W
		"W":"ᯋ", //W
		"X":"ᯂ", //K
		"Y":"ᯛ", //Y
		"Z":"ᯐ", //J
		"a":"ᯀ", //A
		"b":"ᯅ", //B
		"c":"ᯡ", //C
		"d":"ᯑ", //D
		"e":"ᯀᯩ", //E
		"f":"ᯇ", //P
		"g":"ᯎ", //G
		"h":"ᯂ", //H
		"i":"ᯀᯪ", //I
		"j":"ᯐ", //J
		"k":"ᯂ", //K
		"l":"ᯞ", //L
		"m":"ᯔ", //M
		"n":"ᯉ", //N
		"o":"ᯀᯬ", //O
		"p":"ᯇ", //P
		"q":"ᯂ", //K
		"r":"ᯒ", //R
		"s":"ᯘ", //S
		"t":"ᯖ", //T
		"u":"ᯀᯮ", //U
		"v":"ᯋ", //W
		"w":"ᯋ", //W
		"x":"ᯂ", //K
		"y":"ᯛ", //Y
		"z":"ᯐ" //J
	}
	var h_shift = GetShift(str);
	var core = str;
	if (h_shift["CoreSound"] == null) {
		if (consonantMap[str.charAt(0)]) core = consonantMap[str.charAt(0)];
		return {
			"CoreSound": core,
			"len": 1
		}
		;
	} else {
		return h_shift;
	}
}
/***************************
Function ResolveCharacterSound
return tanda baca, digit, vokal, maupun nglegana+pangkon
****************************/
function ResolveCharacterSound(c) {
	var str = "" + c;
	var len = 0;
	if (isDigit(c)) {
		return "" + ('' + (c - '0'));
	} else if (isConsonant(str[0])) {
		return "" + GetCoreSound(str).CoreSound + "᯲"; //virama pangolat
	} else {
		//if (isVowel(str[0])) {
		return "" + GetCoreSound(str).CoreSound;
	}
	/**/
}
/***************************
Function GetSound
fungsi 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("ngg") == 0) { //ngg-
            if (vowelPrev) konsonan = "ᯰᯎ";//<vowel>ngg-, e.g. tunggal
            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 (core_sound.CoreSound == 'ᯱ' && matra == "᯲") { // wignyan
            konsonan = "ᯂ"; //ha
        } else if (core_sound.CoreSound == 'ᯱ' && matra != "᯲") { // wignyan
            konsonan = "ᯂ"; //ha
        } 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;
    }
}
/***************************
Function DoTransliterate
fungsi utama yang dipanggil (main function)
****************************/
function DoTransliterate(str) {
	var i = 0;
	var ret = "";
	var pi = 0;
	var vowelFlag = false;
	startVowel = false;
	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
               str = str.substring(0, i)+'​'+str.substring(i, str.length);
        }
		if ((isSpecial(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)) {
			ret += GetSound(str.substring(pi, i));
            if (str[i] == ' ') { ret += ' '; }
			if (isPunct(str[i])) {
					ret += str[i];
					pi = i + 1;
			} else {
				pi = i;
			}
			vowelFlag = false;
		} else if (isVowel(str[i]) && str[i] != 'h') {
			//ret += GetSound(str.substring(pi, i));
			vowelFlag = true;
		}
		if (pi > 0 && isVowel(str[pi-1])) {
			//<vowel>ngg
			vowelPrev = true;
		} else vowelPrev = false;
		i++;
	}
	//endwhile
	if (pi < i) {
		ret += GetSound(str.substring(pi, i));
	}
	return SuperTrim(ret);
}