PageSourceSearch

https://da-damiano.de/static/js/farsi.js

js da-damiano.de collected 2026-10-04 08:30:26 UTC 8,032 bytes, 224 lines download raw bytes

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.