Click here to Skip to main content
15,885,195 members
Articles / Programming Languages / Javascript

Write bangla Unicode in bijoy rule without installing bijoy software

Rate me:
Please Sign up or sign in to vote.
5.00/5 (7 votes)
1 Jun 2012CPOL4 min read 53.2K   950   5  
Write bangla unicode in bijoy rules without installing bijoy software
// Set of Characters
var textarea_bn; //active text area
var unijoy = new Array();


// the word those are use pre-character
var rashed_swap_array = new Array();
rashed_swap_array[0] = 'c'; // e kar
rashed_swap_array[1] = 'C'; //Oi Kar
rashed_swap_array[2] = 'd'; // hrossho i kar


// the word those are use before-character
var hr_post_array = new Array();
hr_post_array[0] = 'f'; // e kar
hr_post_array[1] = 'D'; //Oi Kar
hr_post_array[2] = 'X'; // hrossho i kar
hr_post_array[3] = 'Z'; // hrossho i kar

// the words which are not character

var hr_not_character = new Array();

hr_not_character[0] = 'c'; // e kar
hr_not_character[1] = 'C'; //Oi Kar
hr_not_character[2] = 'd'; // hrossho i kar
hr_not_character[3] = 'f'; // e kar
hr_not_character[4] = 'D'; //Oi Kar
hr_not_character[5] = 'X'; // hrossho i kar
hr_not_character[6] = 'Z'; // hrossho i kar




// unijoy bangla equivalents
unijoy['j'] = "\u0995"; // ko

unijoy['d'] = '\u09BF'; // hrossho i kar
unijoy['gd'] = '\u0987'; // hrossho i
unijoy['D'] = '\u09C0'; // dirgho i kar
unijoy['gD'] = '\u0988'; // dirgho i
unijoy['c'] = '\u09C7'; // e kar
unijoy['gc'] = '\u098F'; // E
unijoy['gs'] = '\u0989'; // hrossho u
unijoy['s'] = '\u09C1'; // hrossho u kar
unijoy['S'] = '\u09C2'; // dirgho u kar
unijoy['gS'] = '\u098A'; // dirgho u
unijoy['v'] = '\u09B0'; // ro
unijoy['a'] = '\u098B'; // wri
unijoy['f'] = '\u09BE'; // a kar
unijoy['gf'] = '\u0986'; //shore a
unijoy['F'] = '\u0985'; // shore ao
//unijoy['ao']='\u0985'; // shore o
unijoy['n'] = '\u09B8'; // dontyo so
unijoy['t'] = '\u099f'; // to
unijoy['J'] = '\u0996'; // Kho

//unijoy['kh'] = '\u0996'; // kho

unijoy['b'] = '\u09A8'; // dontyo no
unijoy['B'] = '\u09A3'; // murdhonyo no
unijoy['k'] = '\u09A4'; // tto
unijoy['K'] = '\u09A5'; // ttho

unijoy['e'] = '\u09A1'; // ddo
unijoy['E'] = '\u09A2'; // ddho

unijoy['h'] = '\u09AC'; // bo
unijoy['H'] = '\u09AD'; // bho
//unijoy['v']='\u09AD'; // bho
//unijoy['rh']='o';	 // doye bindu ro
unijoy['p'] = '\u09DC';  // doye bindu ro
unijoy['P'] = '\u09DD';  // dhoye bindu ro
unijoy['o'] = '\u0997'; // go
unijoy['O'] = '\u0998'; // gho

//unijoy['gh']='\u0998'; // gho

unijoy['i'] = '\u09B9'; // ho
unijoy['I'] = '\u099E'; // yo
unijoy['u'] = '\u099C'; // borgio jo
unijoy['U'] = '\u099D'; // jho
//unijoy['jh']='\u099D'; // jho
unijoy['y'] = '\u099A'; //  cho
unijoy['Y'] = '\u099B'; // cho
//unijoy['C']='\u099B'; // ccho
unijoy['T'] = '\u09A0'; // tho
unijoy['r'] = '\u09AA'; // po
unijoy['R'] = '\u09AB'; // fo
//unijoy['ph']='\u09AB'; // fo
unijoy['l'] = '\u09A6'; // do
unijoy['L'] = '\u09A7'; // dho

unijoy['w'] = '\u09AF'; // ontoshyo zo
unijoy['W'] = '\u09DF'; // ontostho yo
unijoy['q'] = '\u0999'; // Uma
unijoy['Q'] = '\u0982'; // uniswor
unijoy['V'] = '\u09B2'; // lo
unijoy['m'] = '\u09AE'; // mo
unijoy['M'] = '\u09B6'; // talobyo sho
unijoy['N'] = '\u09B7'; // mordhonyo sho
unijoy['gx'] = '\u0993'; //'\u09CB'; // o
unijoy['X'] = '\u09CC'; // ou kar
unijoy['gX'] = '\u0994'; // OU
//unijoy['Ou']='\u0994'; // OU
unijoy['gC'] = '\u0990'; // Oi
//unijoy['\\']='\u09CE'; // tto
//unijoy['|']='\u0983'; // bisworgo
unijoy["G"] = "\u0964"; // dari
//unijoy[".."] = "."; // fullstop

//unijoy['g'] = ' '; //'\u09CD' + '\u200c'; // hosonto
unijoy['g'] = '\u09CD'; //change by rashed


unijoy['&'] = '\u0981'; // chondrobindu
unijoy['Z'] = '\u09CD' + '\u09AF'; // jo fola
unijoy['gh'] = '\u09CD' + '\u09AC'; // bo fola
unijoy['ga'] = '\u098B'; // wri kar
unijoy['a'] = '\u09C3'; // wri 
//unijoy['k'] ="\u0995"  + '\u09CD'+ '\u09B8';
unijoy['rZ'] = unijoy['r'] + '\u200c' + '\u09CD' + '\u09AF';
unijoy['z'] = '\u09CD' + unijoy['v'];
unijoy['x'] = '\u09CB';
unijoy['C'] = '\u09C8'; //Oi Kar
unijoy['\\'] = '\u0983';
unijoy['|'] = '\u09CE'; // bisworgo




var carry = '';  //This variable stores each keystrokes
var carry_rashed = '';
var old_len = 0; //This stores length parsed bangla charcter
var ctrlPressed = false;
var first_letter = false;
var lastInserted;

isIE = document.all ? 1 : 0;
var switched = false;

function checkKeyDown(ev) {
    //just track the control key
    var e = (window.event) ? event.keyCode : ev.which;
    if (e == '17') {
        ctrlPressed = true;
    }
}

function checkKeyUp(ev) {
    //just track the control key
    var e = (window.event) ? event.keyCode : ev.which;

    if (e == '17') {
        ctrlPressed = false;
        //alert(ctrlPressed);
    }

}



function parseunijoy(evnt, textarea_bn) {
    // main unijoy parser
   
    //var t = document.getElementById(textarea_bn); // the active text area
    var t=textarea_bn;
     var myField;
     myField=t;
    var e = (window.event) ? event.keyCode : evnt.which; // get the keycode
  
    if (e == '113') {
        //switch the keyboard mode
        if (ctrlPressed) {
            switched = !switched;
            //alert("H"+switched);
            return true;
        }
    }

    if (switched) return true;

    if (ctrlPressed) {
        // user is pressing control, so leave the parsing
        e = 0;
    }

    var char_e = String.fromCharCode(e); // get the character equivalent to this keycode

    if (e == 8 || e == 32) {
        // if space is pressed we have to clear the carry. otherwise there will be some malformed conjunctions
        carry = " ";
        old_len = 1;
        return;
    }

    lastcarry = carry;
    carry += "" + char_e;  //append the current character pressed to the carry
    carry_rashed = carry;


    bangla = parseunijoyCarry(carry); // get the combined equivalent
    tempBangla = parseunijoyCarry(char_e); // get the single equivalent

    if (tempBangla == ".." || bangla == "..") //that means it has sibling
    {

        return false;
    }
    if (char_e == "g") {
        if (carry == "gg") {
            // check if it is a plus sign
            insertConjunction('\u09CD' + '\u200c', old_len);
            old_len = 1;
            return false;
        }
        //otherwise this is a simple joiner
      
        insertAtCursor("\u09CD",t); old_len = 1;
        carry = "g";
        return false;
    }

    else if (old_len == 0) //first character
    {

        // this is first time someone press a character
        insertConjunction(bangla, 1,t);
        old_len = 1;

        return false;

    }
    
    else if (char_e == "A") {
        //process old style ref
        //	    if (Check_Post_Character_Exist(get_unicode_to_character_rashed(lastInserted)) == 1) {

        newChar = unijoy['v'] + '\u09CD' + lastInserted;
       // var myField = document.getElementById('textarea_bn');
        var value_field = "";

        var startPos = myField.selectionStart;

        var last_fifth_one = myField.value.substring(startPos - 5, startPos - 4);
        var last_forth_one = myField.value.substring(startPos - 4, startPos - 3);
        var last_third_one = myField.value.substring(startPos - 3, startPos - 2);
        var last_second_one = myField.value.substring(startPos - 2, startPos - 1);
        var last_one = myField.value.substring(startPos - 1, startPos);


        //
        // if character[last] is character: gorto, 
        //
        if (Check_Character_Exist_orNot(get_unicode_to_character_rashed(last_one)) == 0) {

            // if last previous one is g then "ref" add with (g-1) located character
            if (get_unicode_to_character_rashed(last_second_one) == 'g') {
                newChar = unijoy['v'] + '\u09CD' + last_third_one + last_second_one + last_one;
                myField.value = myField.value.substring(0, startPos - 4) + myField.value.substring(startPos - 4, startPos - 3) + newChar;
            }
            else {
                newChar = unijoy['v'] + '\u09CD' + last_one;
                myField.value = myField.value.substring(0, startPos - 2) + myField.value.substring(startPos - 2, startPos - 1) + newChar;
            }
        }
        else {
            // if last previous one is g then "ref" add with (g-1) located character: kargo
//            alert(last_forth_one + ' ' + last_third_one + ' ' + last_second_one + ' ' + last_one);

            if (Check_Character_Exist_orNot(get_unicode_to_character_rashed(last_second_one)) == 1) {
                if (get_unicode_to_character_rashed(last_forth_one) == 'g') {
                    newChar = unijoy['v'] + '\u09CD'+ last_fifth_one+ last_forth_one + last_third_one + last_second_one + last_one;
                    myField.value = myField.value.substring(0, startPos - 6) + myField.value.substring(startPos - 6, startPos - 5) + newChar;
                  
                }
                else {
                    newChar = unijoy['v'] + '\u09CD' + last_third_one + last_second_one + last_one;
                    myField.value = myField.value.substring(0, startPos - 4) + myField.value.substring(startPos - 4, startPos - 3) + newChar;
                }
            }
            else {
                // alert(last_forth_one + ' ' + last_third_one + ' ' + last_second_one + ' ' + last_one);
                //example: gorde
                if (get_unicode_to_character_rashed(last_third_one) == 'g') {
                    newChar = unijoy['v'] + '\u09CD'+last_forth_one + last_third_one + last_second_one + last_one;
                    myField.value = myField.value.substring(0, startPos - 5) + myField.value.substring(startPos - 5, startPos - 4) + newChar;
                }
                else {
                    newChar = unijoy['v'] + '\u09CD' + last_second_one + last_one;
                    myField.value = myField.value.substring(0, startPos - 3) + myField.value.substring(startPos - 3, startPos - 2) + newChar;
                }
            }

        }
       
        return false;
    }


    else if ((bangla == "" && tempBangla != "")) //that means it has no joint equivalent
    {
        // there is no joint equivalent - so show the single equivalent. 
        bangla = tempBangla;
        if (bangla == "") {
            // there is no available equivalent - leave as is
            carry = "";
            return;
        }

        else {
            // found one equivalent

            carry = char_e;
            insertAtCursor(bangla,t);
            old_len = bangla.length;
            return false;
        }
    }
    else if (bangla != "")//joint equivalent found 
    {
        // we have found some joint equivalent process it
       
        insertConjunction(bangla, old_len);
        old_len = bangla.length;
        return false;
    }

   

}

function parseunijoyCarry(code) {
    //this function just returns a bangla equivalent for a given keystroke
    //or a conjunction
    //just read the array - if found then return the bangla eq.
    //otherwise return a null value
    if (!unijoy[code])  //Oh my god :-( no bangla equivalent for this keystroke
    {
        return ''; //return a null value
    }
    else {
        return (unijoy[code]);  //voila - we've found bangla equivalent
    }

}

function get_unicode_to_character_rashed(param_unicode) {

    for (keyVar in unijoy) {
        if (unijoy[keyVar] == param_unicode) {
            return keyVar;
        }

    }
    return '';

}

//----------------------------------------------Check the bangla pre-vowel-------
function Check_Pre_Character_Exist(p_char) {

    var tag_found = 0;
    for (var p_char_index = 0; p_char_index < rashed_swap_array.length; p_char_index++) {

        if (rashed_swap_array[p_char_index].toString() == p_char) {
            tag_found = 1;
            return tag_found;
        }
    }
    return tag_found;
}
//-----------------------------------------------------------------------------------


//----------------------------------------------Check the bangla post-character-------
function Check_Post_Character_Exist(p_char) {

    var tag_found = 0;
    for (var p_char_index = 0; p_char_index < hr_post_array.length; p_char_index++) {

        if (hr_post_array[p_char_index].toString() == p_char) {
            tag_found = 1;
            return tag_found;
        }
    }
    return tag_found;
}
//-----------------------------------------------------------------------------------

//----------------------------------------------Check the bangla post-character-------
function Check_Character_Exist_orNot(p_char) {

    var tag_found = 0;
    for (var p_char_index = 0; p_char_index < hr_not_character.length; p_char_index++) {

        if (hr_not_character[p_char_index].toString() == p_char) {
            tag_found = 1;
            return tag_found;
        }
    }
    return tag_found;
}
//-----------------------------------------------------------------------------------


function insertAtCursor(myValue,myField) {
    /**
    * this function inserts a character at the current cursor position in a text area
    * many thanks to alex king and phpMyAdmin for this cool function
    * 
    * This function is originally found in phpMyAdmin package and modified by Hasin Hayder to meet the requirement
    */
  
    lastInserted = myValue;
    //var myField = document.getElementById('textarea_bn');
  
    if (document.selection) {
        //alert("hello2");
        myField.focus();
        sel = document.selection.createRange();

        sel.text = myValue;

        sel.collapse(true);
        sel.select();
    }
    //MOZILLA/NETSCAPE support
    else if (myField.selectionStart || myField.selectionStart == 0) {
        
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        var scrollTop = myField.scrollTop;
        startPos = (startPos == -1 ? myField.value.length : startPos);

        //alert(myField.value.substring(startPos - 1, startPos));

       

        // rashed
        if (Check_Pre_Character_Exist(get_unicode_to_character_rashed(myValue)) == 1) {
            // if user change the cursor and give e-kar in front of any character then
            if (myField.value.substring(startPos, startPos + 1) == ' '
                || myField.value.substring(startPos, startPos + 1) == '') {

              
                myField.value = myField.value.substring(0, startPos)
                        + '`'
                        + myValue
		                + myField.value.substring(endPos, myField.value.length);
            }
            else {
                myField.value = myField.value.substring(0, startPos + 1)
                    + myValue
                    + myField.value.substring(startPos + 1);
            }
        }
        else if (Check_Pre_Character_Exist(carry_rashed.substring(0, 1))) {

      
            if (myField.value.substring(startPos - 2, startPos - 1) == '`') {

                myField.value = myField.value.substring(0, startPos - 2)
                    + myValue
                    + myField.value.substring(startPos - 1, startPos)
                    + myField.value.substring(endPos, myField.value.length);
            }
            else {
                myField.value = myField.value.substring(0, startPos - 1)
                + myValue
                + myField.value.substring(startPos - 1, startPos)
		        + myField.value.substring(endPos, myField.value.length);
            }
        }
        else {
            //
            // if any body write like dhoy-dho then it will work
            //

            //		    if (carry_rashed.substring(0, 1) != ' '){
            if (myField.value.substring(startPos - 1, startPos) != ' ') {
                if (carry_rashed.substring(1, 2) == 'g') {
                    myField.value = myField.value.substring(0, startPos)
		            + myValue
		            + myField.value.substring(endPos, myField.value.length);
                }
                else {

                    if (carry_rashed.substring(0, 1) == 'g') {
                        if (Check_Pre_Character_Exist(get_unicode_to_character_rashed(myField.value.substring(startPos - 2, startPos - 1))) == 1) {
                            myField.value = myField.value.substring(0, startPos - 2)
		                + myField.value.substring(startPos - 1, startPos)
                        + myValue
		                + myField.value.substring(startPos - 2, startPos - 1)
		                + myField.value.substring(endPos, myField.value.length);
                        }
                        else {
                            myField.value = myField.value.substring(0, startPos)
		                    + myValue
		                    + myField.value.substring(endPos, myField.value.length);
                        }
                    }
                    else {
                        myField.value = myField.value.substring(0, startPos)
		                    + myValue
		                    + myField.value.substring(endPos, myField.value.length);
                    }

                }

            }
            else {
                myField.value = myField.value.substring(0, startPos)
		            + myValue
		            + myField.value.substring(endPos, myField.value.length);
            }

        }


      

        myField.focus();
        myField.selectionStart = startPos+1 + myValue.length;
        myField.selectionEnd = startPos+1 + myValue.length;
        myField.scrollTop = scrollTop;
       

    } else {
        var scrollTop = myField.scrollTop;
        myField.value += myValue;
        myField.focus();
        myField.scrollTop = scrollTop;
    }
}

function insertConjunction(myValue, len, myField) {
    /**
    * this function inserts a conjunction and removes previous single character at the current cursor position in a text area
    * 
    * This function is derived from the original one found in phpMyAdmin package and modified by Hasin to meet our need
    */

    lastInserted = myValue;
   
    //var myField = document.getElementById(textarea_bn);
    //alert(myField)
    if (document.selection) {
        myField.focus();
        sel = document.selection.createRange();
        if (myField.value.length >= len) {  // here is that first conjunction bug in IE, if you use the > operator
            sel.moveStart('character', -1 * (len));
            //sel.moveEnd('character',-1*(len-1));
        }
        sel.text = myValue;
        sel.collapse(true);
        sel.select();
    }
    //MOZILLA/NETSCAPE support
    else if (myField.selectionStart || myField.selectionStart == 0) {
        myField.focus();
        var startPos = myField.selectionStart - len;
        var endPos = myField.selectionEnd;
        var scrollTop = myField.scrollTop;
        startPos = (startPos == -1 ? myField.value.length : startPos);

        if (Check_Pre_Character_Exist(get_unicode_to_character_rashed(myField.value.substring(startPos, endPos))) == 1) {
            myField.value = myField.value.substring(0, startPos - 1)
            + myValue
            + myField.value.substring(startPos, endPos)
		    + myField.value.substring(endPos, myField.value.length);
        }
        else {
            myField.value = myField.value.substring(0, startPos)
		            + myValue
		            + myField.value.substring(endPos, myField.value.length);
        }



        myField.focus();
        myField.selectionStart = startPos + myValue.length;
        myField.selectionEnd = startPos + myValue.length;
        myField.scrollTop = scrollTop;
    } else {
        var scrollTop = myField.scrollTop;
        myField.value += myValue;
        myField.focus();
        myField.scrollTop = scrollTop;
    }

   

    //document.getElementById("len").innerHTML = len;
}


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



Comments and Discussions