

// 	Author: Joju John	
// 	$Date: 2006-09-27 	
<!-- 	Modified: 	 -->
<!-- 	Edited from commonmanglish.js	 -->
<!--    manglish.js-->


/* TO DO ----------------------------------------


-----------DONE--------

1. removed English pattern checking


------------------------------------------------*/
var mal_letters_normal = {
    "k" : '\u0D15', "c":'\u0D15',
    "kh": '\u0D16', 
     "g" :'\u0D17', "gh":'\u0D18', "ng":'\u0D19', 
    "ch": '\u0D1A', "C": '\u0D1A', 
   "chh": '\u0D1B', "Ch":'\u0D1B', 
     "j": '\u0D1C', "jh":'\u0D1D', "nj":'\u0D1E', 
    "T" : '\u0d1f', "Th":'\u0d20',  "D":'\u0d21', "Dh":'\u0d22', "N":'\u0d23',
    "th": '\u0d24',"thh":'\u0d25',  "d":'\u0d26', "dh":'\u0d27', "n": '\u0d28',
    "p" : '\u0d2a', "ph":'\u0d2b',  "b":'\u0d2c', "bh":'\u0d2d', "m": '\u0d2e',
    "y" : '\u0d2f',  "r":'\u0d30',  "R":'\u0d31',  "l":'\u0d32', "L": '\u0d33',
    "zh": '\u0d34',  "v":'\u0d35',  "S":'\u0d36', "sh":'\u0d37', 
     "s": '\u0d38',  "z":'\u0d38',  "h":'\u0d39', 
//	 "t": '\u0d31\u0d4d\u0d31',   "tt":'\u0d31\u0d4d\u0d31',
    "t": '\u0d31\u0d4d\u0d31',
//    "nt": '\u0d28\u0d4d\u0d31',   // n+t
//   TT ==> T+T
	                                                                          "~U":'\u0d09',
    "~a":'\u0d05', "~aa":'\u0d06', "~A":'\u0d06',  "~i":'\u0d07', "~ee":'\u0d08', "~u":'\u0d09', "~oo":'\u0d0a', "~r^":'\u0d0b',"~r^^":'\u0d60',"~l^":'\u0d0c',"~l^^":'\u0d61',
    "~e":'\u0d0e',  "~E":'\u0d0f', "~ai":'\u0d10',  "~o":'\u0d12', "~O":'\u0d13', "~au":'\u0d14',
	"~ii":'\u0d08',"~I":'\u0d08',
//   "~am":'\u0d05\u0d02', "~aH": '\u0d05\u0d03',
                                                                                 "U":'\u0d41',
    "a" : "",       "aa":'\u0d3e', "A":'\u0d3e',  "i":'\u0d3f',  "ee":'\u0d40',  "u":'\u0d41',  "oo":'\u0d42', "r^":'\u0d43', 
    "e" :'\u0d46',   "E":'\u0d47',  "ai":'\u0d48',   "o":'\u0d4a',  "O":'\u0d4b',  "au":'\u0d57',
	"ii":'\u0d40',   "I":'\u0d40',
//    "am":'\u0d02',
    // the following is non-sense..you can not start a word with this... still if the want  what to do
	//better add some error code
    "~n_":'\u0d28\u0d4d\u200d', "~N_":'\u0d23\u0d4d\u200d', "~L_": '\u0d33\u0d4d\u200d',   //  to get space , add \u00a0'
	"~l_":'\u0d32\u0d4d\u200d', "~r_":'\u0d30\u0d4d\u200d', "~m_": '\u0d02',               // n_, N_, L_, l_, r_, am
    "~n ":'\u0d28 ', "~N ":'\u0d23 ', "~L ": '\u0d33 ',   //  to get space , add \u00a0'
	"~l ":'\u0d32 ', "~r ":'\u0d30 ', "~m ": '\u0d2e ',               // na , Na,  La , la , ra , ma

    "n_":'\u0d28\u0d4d\u200d', "N_":'\u0d23\u0d4d\u200d', "L_": '\u0d33\u0d4d\u200d',   //  to get space , add \u00a0'
	"l_":'\u0d32\u0d4d\u200d', "r_":'\u0d30\u0d4d\u200d', "m_": '\u0d02',               // n_, N_, L_, l_, r_, am
    "n ":'\u0d28\u0d4d\u200d ', "N ":'\u0d23\u0d4d\u200d ', "L ": '\u0d33\u0d4d\u200d ',   //  to get space , add \u00a0'
	"l ":'\u0d32\u0d4d\u200d ', "r ":'\u0d30\u0d4d\u200d ', "m ": '\u0d02 ',               // n_, N_, L_, l_, r_, am
    "n.":'\u0d28\u0d4d\u200d.', "N.":'\u0d23\u0d4d\u200d.', "L.": '\u0d33\u0d4d\u200d.',   //  to get space , add \u00a0'
	"l.":'\u0d32\u0d4d\u200d.', "r.":'\u0d30\u0d4d\u200d.', "m.": '\u0d02.',               // n_, N_, L_, l_, r_, am

    "~H":'\u0d39', //ha
    "H":'\u0d03', //aH
	"x":'\u0D15\u0d4d\u0d38', // k+s
	"X":'\u0D15\u0d4d\u0d37', // k+sh
	
	
     "_":'\u200b', //Zerowidth  space
     "~":'\u0d4d',"~~":'\u0d4d'
}

// do not include c for k.; it will replace ch to kh and chh to khh
// do not define 't'; it will break tha
var convert_special = {
	"B":'bb', "G":'gg',"J":'jj',"K":'kk',"M":'mm',"P":'pp',"Q":'qh',"V":'vv',"w":'v',"W":'vv',"Y":'yy',"z":'s',"Z":'ss',
	"f":'ph', "F":'ph', "q":'k', "C":'ch',"Ch":'chh', "H":'h',
	"nK":'ngk',
	"nJ":'njnj',
	"nG":'ngng', 
    "tt":'RR',"nt":'nR', 
	"x":'ks', "X":'ksh'
}

var mal_letters_expert = {
    "k" : '\u0D15', "K": '\u0D16', "i": '\u0D17', "I":'\u0D18', "U":'\u0D19',
    ";" : '\u0D1A', ":": '\u0D1B', "p": '\u0D1C', "P":'\u0D1D', "}":'\u0D1E',
    "\'" : '\u0d1f', "\"":'\u0d20', "[": '\u0d21', "{":'\u0d22', "C":'\u0d23',
    "l" : '\u0d24', "L": '\u0d25', "o": '\u0d26', "O":'\u0d27', "v":'\u0d28',
    "h" : '\u0d2a', "H": '\u0d2b', "y": '\u0d2c', "Y":'\u0d2d', "c": '\u0d2e',
    "\/" : '\u0d2f', "j": '\u0d30', "J": '\u0d31', "n":'\u0d32', "N": '\u0d33',
    "B" : '\u0d34', "b": '\u0d35', "M": '\u0d36', "<":'\u0d37', 
    "m" : '\u0d38', "u": '\u0d39',

    "D":'\u0d05', "E":'\u0d06', "F":'\u0d07', "R":'\u0d08', "G":'\u0d09', "T":'\u0d0a',
    "Z":'\u0d0e', "S":'\u0d0f', "W":'\u0d10', "~":'\u0d12', "A":'\u0d13', "Q":'\u0d14',
	"+":'\u0d0b', "=":'\u0d43', // ru 
                  "e":'\u0d3e', "f":'\u0d3f', "r":'\u0d40', "g":'\u0d41', "t":'\u0d42',
    "z":'\u0d46', "s":'\u0d47', "w":'\u0d48', "`":'\u0d4a', "a":'\u0d4b', "q":'\u0d4c',
    "V":'\u0d28\u0d4d\u200d', "X":'\u0d23\u0d4d\u200d', "\*": '\u0d33\u0d4d\u200d',   //  to get space , add \u00a0'
	">":'\u0d32\u0d4d\u200d', "|":'\u0d30\u0d4d\u200d',  "x":'\u0d02', "_":'\u0d03', // n_, N_, L_, l_, r_, am, aH
    "d":'\u0d4d',
    "0":'\u0d66',"1":'\u0d67',"2":'\u0d68',"3":'\u0d69',"4":'\u0d6a',"5":'\u0d6b',"6":'\u0d6c',"7":'\u0d6d',"8":'\u0d6e',"9":'\u0d6f',

    
    "\." : ".",  "," : ",", "-":'-',
    "\?" :"?"
}


var maglish_in="";
var mal_out='';

function output_add(text)
{
	mal_out += text;
}
function non_mal_add(text)
{
	output_add(text);
}

function mal_normal_add(nmal)
{
//	output_add(nmal); //debug
	output_add(mal_letters_normal[nmal]);
}
function mal_expert_add(exmal)
{
//	output_add(exmal); //debug
    output_add(mal_letters_expert[exmal]);
}



function mal_parser()
{
    mal_out = '';
    var expert_mode = 0;
    var vowel_may_start = '~';
    var index = 0;

    var consonants = "(bh?)|(ch?h?)|(Dh?)|(dh?)|(gh?)|(h)|(jh?)|(kh?)|(l|L|N|r|R|S|v|y)|(m)|(n(g|j)?)|(ph?)|(sh?)|(Th?)|(th?h?)|(zh)";
    var vowels = "(a(a|i|u|U)?)|(A|H)|(e(e|i)?)|(ii?)|(oo?)|(I|u|E|O|U)|(l\\^\\^?)|(r\\^\\^?)|((n|N|L|l|r|m)(_| |\\.))|(~)";
    var special = "(B|M|P|Q|V|W|X|Y|Z|f|F|q|w|x)|(Ch?)|(tt)|(n?(G|J|K))|(z(?!h))|(nt(?!h))"; // tt -> t,   nt -> n+R, x -> k+s , X ->k+sh, 
	// nth in yanthram ; nt(?!h)
    // do not include c for k.; it will replace ch to kh and chh to khh
    // do not define 't'; it will break tha

   // anything inside {} considered as english ; minimal punch
   
   var white_space_pattern = "([ \r\n\t\f\.]+)" ; /// working for space and \r

   var comment_pattern = "//((.|\n)*?)//"; //  anything in between \* *\ as comment
   //    mal_out = maglish_in+maglish_in;	
   //    mal_out= mal_letters_normal["k"];
   //    maglish_in = "kkh";
   
   
   while (maglish_in.length >0 ) {
      index = maglish_in.search(white_space_pattern);	  
      if(index == 0){
           re_white = new RegExp(white_space_pattern);
           var white_array = re_white.exec(maglish_in);
           non_mal_add(white_array[0]); ////////////////////////////////////////changed here
           maglish_in = maglish_in.substring(white_array[0].length); //////<<<<<<<
           vowel_may_start ='~';
           continue;
      }

      if ( maglish_in.charAt(0) == '%') {
	   if (expert_mode == 0) { expert_mode =1; }else{ expert_mode = 0;}//toggle
	   maglish_in = maglish_in.substring(1,maglish_in.length);//remove # from start
	   // output_add(" #"+expert_mode+"# "); /// debugg
	   vowel_may_start ='~'; //useful when turn off
		   continue;
      } //working

	   // the following part must be above english pattern
      if (expert_mode == 1) {
	   //get next char ; covert it; print it;
	   var exmal= maglish_in.charAt(0);
	   mal_expert_add(exmal);
           maglish_in = maglish_in.substring(1,maglish_in.length); 
	   continue;
      }

      index = maglish_in.search(comment_pattern);
      if (index == 0) {
	  comm_eng = new RegExp(comment_pattern);
          var comm_array = comm_eng.exec(maglish_in);
          //non_mal_add(eng_array[1]);
	  maglish_in = maglish_in.substring(comm_array[0].length); // 0 is must here to trunc all matched english
	  vowel_may_start ='~';
	  continue;
      } // working
	  
	  
      index = maglish_in.search(vowels);
      if (index ==0 ){
	  re_vow = new RegExp(vowels);
	  var vow_array = re_vow.exec(maglish_in);
	  var mytext = vowel_may_start+vow_array[0];
	  // attempt to correct 'enter' after chillu here<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	  //mytext= String.trim(mytext);
	  mal_normal_add(mytext);
          if (vowel_may_start =='~')
		       vowel_may_start ='';  // am
          index = maglish_in.search(" "); // to handle space in chillu
	  if (index == 1) {               // like (n | N | etc)
		  vowel_may_start ='~';
	  } 
	  maglish_in = maglish_in.substring(vow_array[0].length); ////<<<<<<<<<<<<<<<<<<<<
	  continue;
      }
	  

      index = maglish_in.search(special);
      if (index == 0) {
	  re_sp = new RegExp(special);
	  var sp_array = re_sp.exec(maglish_in);
	  var c= convert_special[sp_array[0]];
          //output_add(c);  //debug
          maglish_in = maglish_in.substring(sp_array[0].length);  ///<<<<<<<<<<<<<<<<<<<
       	  var newtext = c + maglish_in;
	  maglish_in = newtext;
	  continue;
      }

	  //consonants
	  //  put chandrakala after checking vowel
      index = maglish_in.search(consonants);
      if (index ==0 ){
  		  re_con = new RegExp(consonants);
		  var con_array = re_con.exec(maglish_in);
		  mal_normal_add(con_array[0]);
		  maglish_in = maglish_in.substring(con_array[0].length);
		  vowel_may_start='';
		  var index = maglish_in.search(vowels);
		  if (index != 0) {
			  mal_normal_add("~");
		  }
		  continue;
      }
      var extras = maglish_in.charAt(0)
      if ( extras == "_")  {
	  mal_normal_add(extras);
      } else {
  	  non_mal_add(extras);
      }

      maglish_in = maglish_in.substring(1,maglish_in.length); // prevent infinite loop 
      vowel_may_start ='~';
	//	   non_mal_add(" remaining :"+maglish_in );
  }
}

function convert_manglish(input)
{
   maglish_in = input;
   mal_parser();
   var output = mal_out;
   mal_out =  '';
   return output;
}




