wikED para wiki do OpenStreetMap

Pode ser instalado por Greasemonkey. Mais informações na Wikipedia (em inglês): User:Cacycle/wikEd

Testei busca e substituição com expressões regulares mas só funcionou parcialmente. Ou eu não soube usar. Em alguns casos, ele parece ter entrado em loop infinito que não consegui prever (nem determinar o erro).

Eu estava procurando algo como o AWB, mas este só funciona em Windows.

Update: ocorreu-me que substituições iniciais, a serem pré-visualizadas pelo operador humano, podem ser feitas por funções de scripts Greasemonkey que disparadas através de menu (da extensão) ou por teclas de atalho. Já fiz e uso scripts assim. Isso seria conjugado com a automação do iMacros tudo estaria resolvido com segurança. → É o que vou fazer! Fácil de manter.

Fiz os primeiros testes substituindo código wiki com script Greasemonkey, e funcionou! Só não funcionou completamente com wikED; este perde a capacidade de mostrar seu diff para as substituições que tenham sido realizadas pelo Greasemonkey. Talvez o wikED requeira eventos de teclado para guardar seu cache em memória, coisa assim. Ele não coloca no DOM o que é alterado (digitado). Para não complicar, vou desprezar a limitação do wikED e fazer o casameno apenas iMacros e Greasemonkey, mesmo que também esteja usando wikED.

Update

Existe um problema grave! Depois que a pessoa digita na textarea, o script Greasemonkey deixa de agir. Ou seja, a função do menu fica inativa. O código de teste é este:


// ==UserScript==
// @name        regex helper for mediawiki
// @namespace   http://userscripts.org/users/69817
// @include     http*://wiki.openstreetmap.org/w/index.php?title=*&action=*
// @version     1
// ==/UserScript==

var idTextArea = "wpTextbox1";

function getWikiText() {
    return document.getElementById(idTextArea).innerHTML;
}

function setWikiText(text) {
    document.getElementById(idTextArea).innerHTML = text;
}

function substWikiText(regex, str) {
    var re = new RegExp(regex,"g");    
    var newText = getWikiText().replace(re, str);
    setWikiText(newText);
}

function someChanges() {
    substWikiText("Pt:", "Pt-br:");
}


//someChanges();
GM_registerMenuCommand("Pt: → Pt-br:", someChanges);

Referências mais úteis (sobre regex em Javascript):

Segue, com autorização do Fernando Trebien, reprodução de conversação particular que eu e ele tivemos por e-mail.