1var replacing = false; 2var MIN_CODE = 39; 3var MX_CODE = 122; 4 5var keyMap = new Array( 6 new Array( 7122,120, 99,118, 98, /*z,x,c,v,b*/ 8110,109, 44, 97,115,/*n,m,,,a,s*/ 9100,102,103,104,106,/*d,f,g,h,j*/ 10107,108, 59, 39, 92,/*k,l,;,',|*/ 11113,119,101,114,116,/*q,w,e,r,t*/ 12121,117,105,111,112,/*y,u,i,o,p*/ 13 91, 93, 49, 50, 51,/*[,],1,2,3*/ 14 52, 53, 54, 55, 56,/*4,5,6,7,8*/ 15 57, 48,40,41,123,125,/*9,0,(,),{,}*/ 16 90, 88, 67, 86, 66,/*Z,X,C,V,B*/ 17 78, 77, 63, 65, 83,/*N,M,?,A,S*/ 18 68, 70, 71, 72, 74,/*D,F,G,H,J*/ 19 75, 76, 81, 87, 69, /*K,L,Q,W,E*/ 20 84, 89, 85, 73, 79,/*T,Y,U,I,O*/ 21 80), /*P*/ 22 new Array( 230x0638,0x0637,0x0632,0x0631,0x0630,/*Ø°ØØ±ØØ²ØØ·ØØ¸*/ 240x062F,0x0626,0x0648,0x0634,0x0633,/*Ø³ØØ´ØÙØØ¦ØØ¯*/ 250x06CC,0x0628,0x0644,0x0627,0x062A,/*ØªØØ§ØÙØØ¨ØÛ*/ 260x0646,0x0645,0x06A9,0x06AF,0x067E,/*Ù¾ØÚ¯ØÚ©ØÙ ØÙ*/ 270x0636,0x0635,0x062B,0x0642,0x0641,/*ÙØÙØØ«ØØµØØ¶*/ 280x063A,0x0639,0x0647,0x062E,0x062D,/*ØØØ®ØÙØØ¹ØØº*/ 290x062C,0x0686,0x0661,0x0662,0x0663,/*Ù£ØÙ¢ØÙ¡ØÚØØ¬*/ 300x0664,0x0665,0x0666,0x0667,0x0668, 310x0669,0x0660,0x29,0x28,0x7D,0x7B,/*Ù©ØÙ */ 320x0629,0x064A,0x0698,0x0624,0x0625, 330x0623,0x0621,0x061F,0x064E,0x064F, 340x0650,0x0651,0x06C0,0x0622,0x0640, 350x00AB,0x00BB,0x064B,0x064C,0x064D, 360x060C,0x061B, 0x2c, 0x5d, 0x5b, 37 0x5c)); 38 39var downkeys = new Array( 40 90,88,67,86,66, /*z,x,c,v,b*/ 41 78,77,188,191,/*n,m,,, */ 42 65,83,68,70,71,/*a,s,d,f,g*/ 43 72,74, 75,76,186,222,/*h,j,k,l,;,' */ 44 81,87,69,82,84,/*q,w,e,r,t*/ 45 89,85,73,79,80,/*y,u,i,o,p*/ 46 219,221, 49, 50, 51,/*[,],1,2,3*/ 47 52, 53, 54, 55, 56,/*4,5,6,7,8*/ 48 57, 48,220,192 /*9,0,,\`*/ 49 ); 50/*regular*/ 51var downkeyMap1 = new Array( 52 0x0638,0x0637,0x0632,0x0631,0x0630,/*Ø°ØØ±ØØ²ØØ·ØØ¸*/ 53 0x062F,0x0626,0x0648,0, 54 0x0634,0x0633,0x06CC,0x0628,0x0644, 55 0x0627,0x062A,0x0646,0x0645,0x0643,0x06AF, 56 0x0636,0x0635,0x062B,0x0642,0x0641, 57 0x063A,0x0639,0x0647,0x062E,0x062D, 58 0x062C,0x0686,0x0661,0x0662,0x0663, 59 0x0664,0x0665,0x0666,0x0667,0x0668, 60 0x0669,0x0660,0x067E,0x00F7); 61 62/*shift*/ 63var downkeyMap2 = new Array( 64 0x0629,0x064A,0x0698,0x0676,0x0673, //Done 65 0x0623,0x0621,0,0x61F, 66 0x064E,0x064F,0x0650,0x0651,0x06C2, 67 0x0622,0x0640,0x00AB,0x00BB,0x003A,0x05F4, 68 0x064B,0x064C,0x064D,0xFDFC,0x060C, 69 0x061B,0x066B,0x005D,0x005B,0x005C, 70 0x007D,0x007B,0,0,0, 71 0,0,0,0,0, 72 0,0,0,0x00D7); 73 74function replaceChar(event, charCode) { 75 replaceChar2(event, charCode, null); 76} 77 78function replaceChar2(event, charCode, textEditor) { 79 var newCharCode = null; 80 var newCharStr = null; 81 var len = 1; 82 if (charCode > 38 && charCode < 126) { 83 if (charCode == 82) { 84 newCharStr = String.fromCharCode(0x0631,0x064A,0x0627,0x0644); 85 newCharCode = 0x0631; 86 len = 4; 87 } else { 88 for (var i = 0; i < keyMap[0].length; i++ ) { 89 if (keyMap[0][i] == charCode) { 90 91 newCharStr = String.fromCharCode(keyMap[1][i]); 92 newCharCode = keyMap[1][i]; 93 break; 94 } 95 } 96 } 97//console.log("charCode: " + charCode + " new charCode: " + newCharCode); 98 if (newCharCode != null) { 99 var agent = getBrowserAgent(); 100//console.log("new charCode: " + newCharCode + " new charStr: " + newCharStr + " agent: " + agent); 101 switch (agent) { 102 case 1: //msie 103//console.log("msie: " + newCharCode); 104 event.keyCode = newCharCode; 105 break; 106 case 2://firefox 107 case 3: //chrome 108//console.log('replaceChar - 1 - event.target: ' + event.target); 109 var tgt = event.target; 110 textEditor = textEditor == null ? tgt : textEditor; 111 event.preventDefault(true); 112 event.stopPropagation(true); 113 // Append or insert replacement character 114 if ('selectionStart' in textEditor) { 115//console.log('replaceChar - 1 - tgt.selectionStart: ' + textEditor.selectionStart + ' tgt.textLength: ' + textEditor.textLength); 116 if (textEditor.selectionStart == textEditor.textLength) { 117 //textEditor.value += newCharStr; 118 tgt.value += newCharStr; 119//console.log('replaceChar - 1 - tgt.value: ' + tgt.value); 120 } else { 121 var startpos = textEditor.selectionStart; 122 var lastpos = textEditor.selectionEnd; 123 var val = textEditor.value.substr(0, startpos) + newCharStr + textEditor.value.substr(lastpos); 124 var pos = startpos + len; 125 //textEditor.value = val; 126 //textEditor.selectionStart = pos; 127 //textEditor.selectionEnd = pos; 128 tgt.value = val; 129 tgt.selectionStart = pos; 130 tgt.selectionEnd = pos; 131//console.log('replaceChar - 1 - lastpos: ' + lastpos + ' len: ' + len); 132 } 133 } 134 break; 135 case 10: //legacy chrome: deprecated. apparently chrome no longer support this 136//console.log('replaceChar - 1'); 137 var textEvent = document.createEvent('TextEvent'); 138 textEvent.initTextEvent('textInput', true, true, null, newCharStr); 139//console.log('replaceChar - 2'); 140 event.preventDefault(); 141 event.target.dispatchEvent(textEvent); 142//console.log('replaceChar - 3'); 143 break; 144 case 4://ie 11 145 var tgt = event.target; 146 textEditor = textEditor == null ? tgt : textEditor; 147 event.preventDefault(true); 148 event.stopPropagation(true); 149 // Append or insert replacement character 150 if ('selectionStart' in textEditor){ 151 if (textEditor.selectionStart == textEditor.textLength) { 152 textEditor.value += newCharStr; 153 } else { 154 var lastpos = textEditor.selectionStart; 155 textEditor.value = textEditor.value.substr(0, lastpos) + newCharStr + textEditor.value.substr(lastpos); 156 textEditor.selectionStart = lastpos + len; 157 textEditor.selectionEnd = lastpos + len; 158 } 159 } 160 break; 161 } 162 } 163 } 164} 165 166function swapLanguage(target) { 167 var currentLang = target.getAttribute("language"); 168 var newLang = ( currentLang == "far" ) ? ( "eng" ) : ( "far" ); 169 target.setAttribute("language", newLang); 170 return true; 171} 172 173function changeLanguage(e) { 174 var evt = window.event || e; 175 var target = evt.currentTarget || evt.srcElement; 176 if (evt.ctrlKey) { 177 swapLanguage(target); 178 } 179} 180 181function farsiEntry(e) { 182 var evt = window.event || e; 183 var target = evt.currentTarget || evt.srcElement; 184 var key = window.event ? window.event.keyCode : e.which; 185 var language = target.getAttribute("language"); 186//console.log('farsiEntry - target: ' + target + " key: " + key + " language: " + language + " window.event: " + window.event); 187 if (language == undefined || 188 language == "" || 189 language == null || 190 language == "far") { 191 if ( !replacing) { 192 replacing = true; 193 target.setAttribute("language", "far"); 194 replaceChar(evt, key); 195 replacing = false; 196 } 197 } 198 return true; 199} 200 201function map2Farsi(event) { 202 var evt = window.event || event;
203 var charCode = window.event ? window.event.keyCode : evt.which; 204//console.log('map2Farsi - charCode: ' + charCode); 205 if (charCode == undefined || 206 charCode == "" || 207 charCode == null) { 208 charCode = evt.keyCode; 209 } 210 if (event.altKey || event.ctrlKey || event.metaKey) { 211 return null; 212 } 213 var newCharCode = 0; 214 for (var i = 0; i < downkeys.length; i++) { 215 if (charCode == downkeys[i]) { 216 newCharStr = String.fromCharCode(event.shiftKey ? downkeyMap2[i] : downkeyMap1[i]); 217 newCharCode = event.shiftKey ? downkeyMap2[i] : downkeyMap1[i]; 218//console.log('map2Farsi - charCode: ' + charCode + " newCharCode: " + newCharCode); 219 break; 220 } 221 } 222 return newCharCode == 0 ? null : newCharStr; 223} 224
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.