Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1310 → Rev 1311

/firefox/latrus/trunk/src/chrome/content/latrus.xul
0,0 → 1,20
<?xml version="1.0"?>
 
<overlay id="latrus"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
<script type="application/x-javascript" src="chrome://latrus/content/latrus.js" />
<popup id="contentAreaContextMenu">
<menuitem id="context-latrus-enabled" type="checkbox" label="Convert lat->rus"
oncommand="LatRus.toggleEnabled();" insertafter="spell-separator" />
<!--menu id="context-latrus-submenu" insertafter="context-latrus-enabled">
<menupopup id="context-latrus-menupopup" />
</menu-->
</popup>
<statusbar id="status-bar">
<statusbarpanel id="latrus-panel" />
</statusbar>
 
</overlay>
/firefox/latrus/trunk/src/chrome/content/latrus.js
0,0 → 1,105
var latRusWorker = null;
var latRusEnabled = false;
 
var LatRus = {
init: function()
{
var appcontent = document.getElementById("appcontent");
if(appcontent) {
appcontent.addEventListener("DOMContentLoaded", LatRus.onPageLoad, true);
}
 
latRusWorker = new Worker();
LatRus.setEnabled(latRusEnabled); // update menu and panel
},
 
onPageLoad: function(aEvent)
{
if(aEvent.originalTarget.nodeName == "#document") {
aEvent.originalTarget.addEventListener('keypress', LatRus.onKeyPress, true);
}
},
 
onKeyPress: function(aEvent)
{
if(!latRusEnabled) return;
if(aEvent.ctrlKey || aEvent.altKey || aEvent.charCode == 0) return true;
if(aEvent.keyCode == 255) return; // our loop event
 
var newEvent = document.commandDispatcher.focusedWindow.document.createEvent("KeyEvents");
newEvent.initKeyEvent(aEvent.type, aEvent.bubbles, aEvent.cancelable, aEvent.view,
false, false, false, false, 255, latRusWorker.convertChar(aEvent.charCode));
aEvent.preventDefault();
aEvent.target.dispatchEvent(newEvent);
},
 
toggleEnabled: function()
{
LatRus.setEnabled(!latRusEnabled);
},
 
setEnabled: function(enabled)
{
latRusEnabled = enabled;
 
var item = document.getElementById("context-latrus-enabled");
if(item) {
item.setAttribute("checked", latRusEnabled);
}
 
var panel = document.getElementById("latrus-panel");
if(panel) {
panel.label = (latRusEnabled ? "RUS" : "LAT");
}
},
};
 
window.addEventListener('load', LatRus.init, false);
 
Worker.engTable = new Array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'\"', '\'', '§', '$', '&', '/', '(', ')', '=', '?', '`', '-',
'_', '#', '+', '*', ',', '.', 'ä', 'ö', 'ü', 'ß');
Worker.rusTable1 = new Array(
'а', 'б', 'ц', 'д', 'е', 'ф', 'г', 'х', 'и', 'й', 'к', 'л', 'м',
'н', 'о', 'п', 'ч', 'р', 'с', 'т', 'у', 'в', 'ш', 'ж', 'я', 'з',
'ъ', 'ь', '§', '$', '&', '/', '(', ')', '=', '?', '`', '-',
'_', '#', '+', '*', ',', '.', 'э', 'ы', 'ю', 'щ');
Worker.rusTable2 = new Array(
'ф', 'и', 'с', 'в', 'у', 'а', 'п', 'р', 'ш', 'о', 'л', 'д', 'ь',
'т', 'щ', 'з', 'й', 'к', 'ы', 'е', 'г', 'м', 'ц', 'ч', 'я', 'н',
'\"', '/', 'â„–', ';', ':', '?', '*', '(', ')', '_', '=', '.',
',', '\\', 'ъ', 'Ъ', 'б', 'ю');
 
function Worker()
{
this.convertTable = Worker.buildConvertTable(Worker.engTable, Worker.rusTable1, true);
}
 
Worker.buildConvertTable = function(fromTable, toTable, autoUpperCase)
{
var res = new Object();
 
for(var i = 0, l = Math.min(fromTable.length, toTable.length); i < l; ++i) {
res[fromTable[i].charCodeAt(0)] = toTable[i].charCodeAt(0);
if(autoUpperCase) {
if(fromTable[i].toUpperCase() != fromTable[i]) {
res[fromTable[i].toUpperCase().charCodeAt(0)] = toTable[i].toUpperCase().charCodeAt(0);
}
}
}
 
return res;
}
 
Worker.prototype.convertChar = function(c)
{
if(this.convertTable) {
var r = this.convertTable[c];
if(r != undefined) return r;
}
 
return c; // not found or no table
}