Naraguna:Bennylin/trans-toba.js: Béda antara owahan
Konten dihapus Konten ditambahkan
Tanpa ringkesan besutan |
Tanpa ringkesan besutan |
||
Larik 167: | Larik 167: | ||
"c":"ᯡ", //C |
"c":"ᯡ", //C |
||
"d":"ᯑ", //D |
"d":"ᯑ", //D |
||
"e":" |
"e":"ᯀᯧ", //E |
||
"f":"ᯇ", //P |
"f":"ᯇ", //P |
||
"g":"ᯎ", //G |
"g":"ᯎ", //G |
||
Larik 177: | Larik 177: | ||
"m":"ᯔ", //M |
"m":"ᯔ", //M |
||
"n":"ᯉ", //N |
"n":"ᯉ", //N |
||
"o":" |
"o":"ᯀᯬ", //O |
||
"p":"ᯇ", //P |
"p":"ᯇ", //P |
||
"q":"ᯂ", //K |
"q":"ᯂ", //K |
||
Larik 222: | Larik 222: | ||
return "" + ('' + (c - '0')); |
return "" + ('' + (c - '0')); |
||
} else if (isConsonant(str[0])) { |
} else if (isConsonant(str[0])) { |
||
return "" + GetCoreSound(str).CoreSound + " |
return "" + GetCoreSound(str).CoreSound + "᯳"; //virama panongonan |
||
} else { |
} else { |
||
//if (isVowel(str[0])) { |
//if (isVowel(str[0])) { |
Révisi kala 1 April 2021 15.10
/*!
* 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
*
*
* 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 = "GgYyDdBb";
//untuk bikonsonan nga, nya, nda, mba
return findstr(str,a);
}
/***************************
Function GetMatra
apabila huruf vokal, return matra (sandhangan swara)
****************************/
function GetMatra(str) {
var i = 0;
if (str.length < 1) {
return ""; //virama panongonan
}
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'
return {
"CoreSound": "ᯝ", "len": 2
}
;
}
//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 consonantMap1 = {
"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 consonantMap, murda;
var modeMurda = document.getElementsByName("murda");
for (var rad in modeMurda) {
if(modeMurda[rad].checked)
murda = modeMurda[rad].value;
}
if(murda == "pakai")
consonantMap = consonantMap2; else //if(murda == "tidak")
consonantMap = consonantMap1;
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 panongonan
} 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);
if (str == null || str == "") {
return "";
}
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));
//aeiou (suku, wulu, pepet, taling, taling tarung, dll.)
/*if () {
} else {
}*/
} else {
matra = "";
}
if (str.indexOf("nggr") == 0) {
//nggr-
if (vowelPrev) konsonan = "ᬂᬕ᭄ᬭ";
//<vowel>nggr-, e.g. panggrahita else konsonan = "ᬗ᭄ᬕ᭄ᬭ";
//<nonvowel>nggr-, i.e. nggronjal
} else if (str.indexOf("ngg") == 0) {
//ngg-
if (vowelPrev) konsonan = "ᬂᬕ";
//<vowel>ngg-, e.g. tunggal else konsonan = "ᬗ᭄ᬕ";
//<nonvowel>ngg-, i.e. nggambar
} else if (str.indexOf("njl") == 0) {
//njl-
konsonan = "ᬜ᭄ᬚ᭄ᬮ";
} else if (str.indexOf("njr") == 0) {
//njr-
konsonan = "ᬜ᭄ᬚ᭄ᬭ";
} else if (str.indexOf("ngg") == 0) {
//njr-
if (vowelPrev) konsonan = "ᬂᬕ";
//<vowel>ngg-, e.g. tunggal else konsonan = "ᬗ᭄ᬕ";
//<nonvowel>ngg-, i.e. nggambar
} else if (core_sound.CoreSound == "ᬦᬜ᭄ᬘ") {
// -nc-
konsonan = "ᬜ᭄ᬘ";
//-nyc-/*
} else if (core_sound.CoreSound == "ᬦᬜ᭄ᬚ᭄ᬮ") {
// -njl-
konsonan = "ᬜ᭄ᬚ᭄ᬮ";
//-njl-
} else if (core_sound.CoreSound == "ᬦᬜ᭄ᬚ") {
// -njr-
konsonan = "ᬜ᭄ᬚ᭄ᬭ";
//-njr-*/
} else if (core_sound.CoreSound == "ᬦᬜ᭄ᬚ") {
// -nj-
konsonan = "ᬜ᭄ᬚ";
//-nyj-
} else if (core_sound.CoreSound == "ᬤᬟ᭄ᬯ") {
// -dhw-
konsonan = "ᬟ᭄ᬯ";
//-dhw-
} else if (core_sound.CoreSound == "ᬤᬟ") {
// -dhy-
konsonan = "ᬟ";
//-dhy-
} else if (core_sound.CoreSound == "ᬢᬝ᭄ᬯ") {
// -thw-
konsonan = "ᬝ᭄ᬯ";
//-dhw-
} else if (core_sound.CoreSound == "ᬢᬝ") {
// -thy-
konsonan = "ᬝ";
//-dhy-
} 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 == 'ᬝ᭄ᬭ' || core_sound.CoreSound == 'ᬟ᭄ᬭ' || core_sound.CoreSound == 'ᬗ᭄ᬭ' || core_sound.CoreSound == 'ᬜ᭄ᬭ') {
// i.e. nyruput
konsonan = core_sound.CoreSound;
if (matra == "᭄") matra = "";
} else if (core_sound.CoreSound == "ᬮᬮ᭄ᬮ") {
// -ll-
konsonan = "ᬮ᭄ᬮ";
//double -l-
} else if (core_sound.CoreSound == "ᬃᬃᬭ") {
// -rr-
konsonan = "ᬃᬭ";
//double -r-
} else if (core_sound.CoreSound == "ᬃᬃᬳ") {
// -rh-
konsonan = "ᬃᬳ";
//-rh-
} else if (core_sound.CoreSound == "ᬃᬃᬮ") {
// -rl-
konsonan = "ᬃᬮ";
//-rl-
} else if (core_sound.CoreSound == "ᬃᬃᬯ") {
// -rw-
if (vowelPrev) konsonan = "ᬃᬯ";
//-rw- -- arwana else konsonan = "ᬭ᭄ᬯ";
//rw- -- rwa/rwi/rwab
} else if (core_sound.CoreSound == "ᬃᬃᬘ") {
// -rc-
konsonan = "ᬃᬘ";
//-rc-
} else if (core_sound.CoreSound == "ᬄᬄᬳ") {
// -hh-
konsonan = "ᬄᬳ";
//double -h-
} 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/*
} else if (core_sound.CoreSound == "ᬄᬄ") {
// hrx-
konsonan = "ᬳ᭄ᬭ";
//hrx-
} else if (core_sound.CoreSound == "ᬄᬄ᭄ᬭ") {
// hr-
if (matra == "ᭂ") konsonan = "ᬳ";
//hr- else konsonan = "ᬳ᭄ᬭ";
//hr-
} else if (core_sound.CoreSound == "ᬄᬳ᭄ᬭ") {
// hr-
if (matra == "ᭂ") konsonan = "ᬳ";
//hr- else konsonan = "ᬳ";
//hr-
} 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 != "᭄") {
// cecak
konsonan = "ᬗ";
//nga
} else if (core_sound.CoreSound == 'ᬂ' && matra == "᭄") {
// cecak
konsonan = "ᬂ";
matra = "";
//cecak
} 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);
}