Usuário:Cosmo Skerry/common.js

Neste artigo, exploraremos o fascinante mundo de Usuário:Cosmo Skerry/common.js e seus diversos aspectos, desde sua origem até seu impacto na sociedade atual. Ao longo da história, Usuário:Cosmo Skerry/common.js desempenhou um papel crucial em diversas áreas, influenciando a cultura, a política, a ciência e o dia a dia das pessoas. Iremos aprofundar-nos nas suas origens, analisar a sua evolução ao longo do tempo e examinar a sua relevância no mundo contemporâneo. Além disso, exploraremos diferentes perspectivas e opiniões sobre Usuário:Cosmo Skerry/common.js, bem como suas implicações éticas e morais hoje. Prepare-se para mergulhar em uma emocionante jornada por Usuário:Cosmo Skerry/common.js e descobrir todas as suas nuances e significados!
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');

mw.loader.using('mediawiki.storage').then(function () {
  mw.storage.session.set( 'client-error-opt-out', '1' );
});

novoEditor = mw.user.options.get('visualeditor-newwikitext') == '1';

var mesesEn = ;
var mesesPt = ;

function tradMes(mes) {
    for (var i = 0; i < mesesEn.length; i++) {
        if (mes.toLocaleLowerCase() == mesesEn
            || mes.toLocaleLowerCase() == mesesEn.substring(0, 3))
            return mesesPt;
        else if (mes.toLocaleLowerCase() == mesesPt)
            return mes;
        else if (mes.toLocaleLowerCase() == 'marco')
            return 'março';
    }
    return 'falhou';
}

//datas
var cvGrauO = "(*°*)",
    diaMesAno = "\\s*(\\d+(?:\\d+|))\\s+(+)\\s+(\\d\\d\\d\\d?)\\.?",
    linkDiaMesAno = "\\s*\\\\d+|))\\s+de\\s+(+)\\]\\]\\s+de\\s+\\?\\]?\\.?",
    mesDiaAno = "\\s*(+)\\s+(\\d+(?:\\d+|)),\\s+(\\d\\d\\d\\d?)",
    mesAno = "\\s*(+),?\\s+(\\d\\d\\d\\d?)",
    mesMesAno = "\\s*(+)\\s*\\s*(+),?\\s*d?e?\\s+(\\d\\d\\d\\d?)",
    nAnoMes = "\\s*(\\d\\d\\d\\d?)(\\d\\d?)(\\s*\\|)",
    nMesAno = "\\s*(\\d\\d?)(\\d\\d\\d\\d?)(\\s*\\|)",
    sAnoMesDia = "\\s*(\\d\\d\\d\\d?)(+)(\\d\\d?)(\\s*\\|)",
    sDiaMesAno = "\\s*(\\d\\d?)(+)(\\d\\d\\d\\d?)(\\s*\\|)",
    _0diaMesAno = "\\s*0(\\d+(?:\\d+|))\\s+de\\s+(+)\\s+de\\s+(\\d\\d\\d\\d?)\\.?",
    diaMesVAno = "\\s*\\\\d\\d?|))\\s+de\\s+(+)\\]?\\]?,?\\s+\\?\\]?\\.?",
    prData = "\\s*\\{\\{\\s*ata\\s*\\|\\s*(\\d\\d\\d\\d?)\\s*\\|\\s*(\\d\\d?)\\s*\\|\\s*(\\d\\d?)*\\}\\}\\.?",
    prDataExt = "\\s*\\{\\{ataExt\\s*\\|\\s*(\\d\\d?)\\s*\\|\\s*(\\d\\d?)\\s*\\|\\s*(\\d\\d\\d\\d?)*\\}\\}\\.?",
    marco = "s*((:?\\d\\d?(?:\\d\\d?|)??\\s+de\\s+|)arco\\s+de\\s+\\d\\d\\d\\d?)\\.?";
//parâmetros
var data = "\\|\\s*(?:dat|year|ano)\\s*=",
    transmissao = "\\|\\s*(?:transmissão|air\\-?date)\\s*=",
    acessodata = "\\|\\s*(?:acc?esso?\\-?dat|acc?essadoem)\\s*=",
    publicacao = "\\|\\s*(?:publication\\-?date|data\\-publicao)\\s*=",
    arquivodata = "\\|\\s*ariv\\-?dat\\s*=";

function rDatas(alt, padrao) {
    if (alt.match(/falhou/)) return padrao;
    else return alt;
}
function rdata(alt, padrao) {
    return rDatas('|data=' + alt, padrao);
}
function rtransmissao(alt, padrao) {
    return rDatas('|transmissão=' + alt, padrao);
}
function racessodata(alt, padrao) {
    return rDatas('|acessodata=' + alt, padrao);
}
function rpublicacao(alt, padrao) {
    return rDatas('|data-publicação=' + alt, padrao);
}
function rarquivodata(alt, padrao) {
    return rDatas('|arquivodata=' + alt, padrao);
}

citacoes = {
    datas: {
        cond: [
            /*{ reg: /\|\s*data\s*=\s*(\d+)\s*\|\s*ano\s*=\s*(\d+)\s*\|\s*mes=(\d+)/, subs: function(achou){
                if (mesesPt-1])
                    return rdata(achou + ' de ' + mesesPt-1] + ' de ' + achou, achou);
                else return achou;
            } },*/
            {
                reg: /\|\s*(?:ano|year)\s*=\s*((:?\d\d???\s+de\s+|)+\s+de\s+\d\d\d\d?)/, subs: function (achou) {
                    return rdata(achou, achou);
                }
            }, {
                reg: /\|\s*(?:ano|year)\s*=\s*\\]/, subs: function (achou) {
                    return '|ano=' + achou;
                }
            }, {
                reg: new RegExp(data + cvGrauO), subs: function (achou) {
                    return rdata(achou.replace('°', 'º'), achou);
                }
            }, {
                reg: new RegExp(data + marco), subs: function (achou) {
                    return rdata(achou.replace(/arco/, 'março'), achou);
                }
            }, {
                reg: new RegExp(data + diaMesAno), subs: function (achou) {
                    return rdata(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + linkDiaMesAno), subs: function (achou) {
                    return rdata(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + mesDiaAno), subs: function (achou) {
                    return rdata(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + mesAno), subs: function (achou) {
                    return rdata(tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + mesMesAno), subs: function (achou) {
                    return rdata(tradMes(achou) + '–' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + nAnoMes), subs: function (achou) {
                    if (mesesPt - 1])
                        return rdata(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(data + nMesAno), subs: function (achou) {
                    if (mesesPt - 1])
                        return rdata(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(data + sAnoMesDia), subs: function (achou) {
                    return rdata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(data + sDiaMesAno), subs: function (achou) {
                    return rdata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(data + _0diaMesAno), subs: function (achou) {
                    return rdata(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + diaMesVAno), subs: function (achou) {
                    return rdata(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + prData), subs: function (achou) {
                    return rdata(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(data + prDataExt), subs: function (achou) {
                    return rdata(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            },
            {
                reg: new RegExp(transmissao + cvGrauO), subs: function (achou) {
                    return rtransmissao(achou.replace('°', 'º'), achou);
                }
            }, {
                reg: new RegExp(transmissao + diaMesAno), subs: function (achou) {
                    return rtransmissao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + linkDiaMesAno), subs: function (achou) {
                    return rtransmissao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + mesDiaAno), subs: function (achou) {
                    return rtransmissao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + mesAno), subs: function (achou) {
                    return rtransmissao(tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + mesMesAno), subs: function (achou) {
                    return rtransmissao(tradMes(achou) + '–' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + nAnoMes), subs: function (achou) {
                    if (mesesPt - 1])
                        return rtransmissao(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(transmissao + nMesAno), subs: function (achou) {
                    if (mesesPt - 1])
                        return rtransmissao(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(transmissao + sAnoMesDia), subs: function (achou) {
                    return rtransmissao(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + sDiaMesAno), subs: function (achou) {
                    return rtransmissao(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + _0diaMesAno), subs: function (achou) {
                    return rtransmissao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + prData), subs: function (achou) {
                    return rtransmissao(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + prDataExt), subs: function (achou) {
                    return rtransmissao(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(transmissao + diaMesVAno), subs: function (achou) {
                    return rtransmissao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            },
            {
                reg: new RegExp(acessodata + cvGrauO), subs: function (achou) {
                    return racessodata(achou.replace('°', 'º'), achou);
                }
            }, {
                reg: new RegExp(acessodata + diaMesAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + mesDiaAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + linkDiaMesAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + prData), subs: function (achou) {
                    return racessodata(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + prDataExt), subs: function (achou) {
                    return racessodata(achou + ' de ' + mesesPt - 1] + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + diaMesVAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + nAnoMes), subs: function (achou) {
                    if (mesesPt - 1])
                        return racessodata('1 de ' + mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(acessodata + nMesAno), subs: function (achou) {
                    if (mesesPt - 1])
                        return racessodata('1 de ' + mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(acessodata + sAnoMesDia), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + sDiaMesAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + _0diaMesAno), subs: function (achou) {
                    return racessodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + "\\s*(+)\\s+,?d?e?\\s*(\\d\\d\\d\\d?)\\.?"), subs: function (achou) {
                    return racessodata('1 de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(acessodata + marco), subs: function (achou) {
                    return racessodata(achou.replace(/arco/, 'março'), achou);
                }
            },
            {
                reg: new RegExp(publicacao + cvGrauO), subs: function (achou) {
                    return rpublicacao(achou.replace('°', 'º'), achou);
                }
            }, {
                reg: new RegExp(publicacao + diaMesAno), subs: function (achou) {
                    return rpublicacao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + mesDiaAno), subs: function (achou) {
                    return rpublicacao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + mesAno), subs: function (achou) {
                    return rpublicacao(tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + diaMesVAno), subs: function (achou) {
                    return rpublicacao(achou.replace(//, '–') + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + mesAno), subs: function (achou) {
                    return rpublicacao(tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + mesMesAno), subs: function (achou) {
                    return rpublicacao(tradMes(achou) + '–' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + nAnoMes), subs: function (achou) {
                    if (mesesPt - 1])
                        return rpublicacao(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(publicacao + nMesAno), subs: function (achou) {
                    if (mesesPt - 1])
                        return rpublicacao(mesesPt - 1] + ' de ' + achou + achou, achou);
                    else return achou;
                }
            }, {
                reg: new RegExp(publicacao + sAnoMesDia), subs: function (achou) {
                    return rpublicacao(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + sDiaMesAno), subs: function (achou) {
                    return rpublicacao(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(publicacao + _0diaMesAno), subs: function (achou) {
                    return rpublicacao(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            },
            {
                reg: new RegExp(arquivodata + cvGrauO), subs: function (achou) {
                    return rarquivodata(achou.replace('°', 'º'), achou);
                }
            }, {
                reg: new RegExp(arquivodata + diaMesAno), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(arquivodata + mesDiaAno), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(arquivodata + diaMesVAno), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }, {
                reg: new RegExp(arquivodata + sAnoMesDia), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(arquivodata + sDiaMesAno), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou + achou, achou);
                }
            }, {
                reg: new RegExp(arquivodata + _0diaMesAno), subs: function (achou) {
                    return rarquivodata(achou + ' de ' + tradMes(achou) + ' de ' + achou, achou);
                }
            }
            /*, { reg: /\|\s*dat\s*=data=\s*(+)\s+d?e?\s*(\d\d\d\d?)/, subs: function(achou){
                return '|data=' + tradMes(achou) + ' de ' + achou;
            } }*/
        ],
        sumario: 'ajustando datas'
    },

    tradpred: {
        cond: [
            {
                reg: /\{\s*ite ?web *(\s*\|)/, subs: function (achou) {
                    return '{citar web' + achou;
                }
            },
            {
                reg: /\{\s*ite AV media notes *(\s*\|)/, subs: function (achou) {
                    return '{citar vídeo notas' + achou;
                }
            },
            {
                reg: /\{\s*ite (?:video|AV media) *(\s*\|)/, subs: function (achou) {
                    return '{citar vídeo' + achou;
                }
            },
            {
                reg: /\{\s*ite video game *(\s*\|)/, subs: function (achou) {
                    return '{Citar jogo eletrônico' + achou;
                }
            },
            {
                reg: /\{\s*ite thesis *(\s*\|)/, subs: function (achou) {
                    return '{citar tese' + achou;
                }
            },
            {
                reg: /\{\s*ite magazine *(\s*\|)/, subs: function (achou) {
                    return '{citar revista' + achou;
                }
            },
            {
                reg: /\{\s*ite report *(\s*\|)/, subs: function (achou) {
                    return '{citar relatório' + achou;
                }
            },
            {
                reg: /\{\s*ite podcast *(\s*\|)/, subs: function (achou) {
                    return '{citar podcast' + achou;
                }
            },
            {
                reg: /\{\s*ite ?news(?:paper|) *(\s*\|)/, subs: function (achou) {
                    return '{citar jornal' + achou;
                }
            },
            {
                reg: /\{\s*ite map *(\s*\|)/, subs: function (achou) {
                    return '{citar mapa' + achou;
                }
            },
            {
                reg: /\{\s*ite book *(\s*\|)/, subs: function (achou) {
                    return '{citar livro' + achou;
                }
            },
            {
                reg: /\{\s*ite mailing list *(\s*\|)/, subs: function (achou) {
                    return '{citar lista de discussão' + achou;
                }
            },
            {
                reg: /\{\s*(?:ite (?:journal|paper|document)|rticle) *(\s*\|)/, subs: function (achou) {
                    return '{citar periódico' + achou;
                }
            },
            {
                reg: /\{\s*ite newsgroup *(\s*\|)/, subs: function (achou) {
                    return '{citar grupo de notícias' + achou;
                }
            },
            {
                reg: /\{\s*ite episode *(\s*\|)/, subs: function (achou) {
                    return '{citar episódio' + achou;
                }
            },
            {
                reg: /\{\s*ite serial *(\s*\|)/, subs: function (achou) {
                    return '{citar série' + achou;
                }
            },
            {
                reg: /\{\s*ite interview *(\s*\|)/, subs: function (achou) {
                    return '{citar entrevista' + achou;
                }
            },
            {
                reg: /\{\s*ite encyclopedia *(\s*\|)/, subs: function (achou) {
                    return '{citar enciclopédia' + achou;
                }
            },
            {
                reg: /\{\s*ite conference *(\s*\|)/, subs: function (achou) {
                    return '{citar conferência' + achou;
                }
            },
            {
                reg: /\{\s*ite press(?: release|) *(\s*\|)/, subs: function (achou) {
                    return '{citar comunicado de imprensa' + achou;
                }
            },
            {
                reg: /\{\s*ite ariv *(\s*\|)/, subs: function (achou) {
                    return '{citar arXiv' + achou;
                }
            },
            {
                reg: /\|\s*at\s*=/, subs: function (achou) {
                    return '|em=';
                }
            },
            {
                reg: /\|\s*accesso?\-?dat\s*=/, subs: function (achou) {
                    return '|acessodata=';
                }
            },
            {
                reg: /\|\s*date\s*=/, subs: function (achou) {
                    return '|data=';
                }
            },
            {
                reg: /\|\s*publication\-?date\s*=/, subs: function (achou) {
                    return '|data-publicacao=';
                }
            },
            {
                reg: /\|\s*air\-?date\s*=/, subs: function (achou) {
                    return '|transmissão=';
                }
            },
            {
                reg: /\|\s*archive\-?date\s*=/, subs: function (achou) {
                    return '|arquivodata=';
                }
            },
            {
                reg: /\|\s*archive\-?url\s*=/, subs: function (achou) {
                    return '|arquivourl=';
                }
            },
            {
                reg: /\|\s*agency\s*=/, subs: function (achou) {
                    return '|agência=';
                }
            },
            {
                reg: /\|\s*authors\s*=/, subs: function (achou) {
                    return '|autores=';
                }
            },
            {
                reg: /\|\s*people\s*=/, subs: function (achou) {
                    return '|pessoas=';
                }
            },
            {
                reg: /\|\s*credits\s*=/, subs: function (achou) {
                    return '|créditos=';
                }
            },
            {
                reg: /\|\s*book\-?title\s*=/, subs: function (achou) {
                    return '|títulolivro=';
                }
            },
            {
                reg: /\|\s*call\-?sign\s*=/, subs: function (achou) {
                    return '|indicativo=';
                }
            },
            {
                reg: /\|\s*cartography\s*=/, subs: function (achou) {
                    return '|cartografia=';
                }
            },
            {
                reg: /\|\s*chapter\s*=/, subs: function (achou) {
                    return '|capítulo=';
                }
            },
            {
                reg: /\|\s*article\s*=/, subs: function (achou) {
                    return '|artigo=';
                }
            },
            {
                reg: /\|\s*contribution\s*=/, subs: function (achou) {
                    return '|contribuição=';
                }
            },
            {
                reg: /\|\s*chapter\-format\s*=/, subs: function (achou) {
                    return '|formato-capitulo=';
                }
            },
            {
                reg: /\|\s*chapter\-?url\s*=/, subs: function (achou) {
                    return '|capítulourl=';
                }
            },
            {
                reg: /\|\s*coauthors?\s*=/, subs: function (achou) {
                    return '|coautor=';
                }
            },
            {
                reg: /\|\s*collaboration\s*=/, subs: function (achou) {
                    return '|colaboração=';
                }
            },
            {
                reg: /\|\s*conference\s*=/, subs: function (achou) {
                    return '|conferencia=';
                }
            },
            {
                reg: /\|\s*conference-format\s*=/, subs: function (achou) {
                    return '|formato-conferencia=';
                }
            },
            {
                reg: /\|\s*conference\-?url\s*=/, subs: function (achou) {
                    return '|urlconferencia=';
                }
            },
            {
                reg: /\|\s*contribution\s*=/, subs: function (achou) {
                    return '|contribuição=';
                }
            },
            {
                reg: /\|\s*(?:dead\-?url|url\-status)\s*=\s*(?:(?:|)|)\s*()/, subs: function (achou) {
                    return '|urlmorta= não' + achou;
                }
            },
            {
                reg: /\|\s*(?:dead\-?url|url\-status)\s*=\s*(?:(?:|)|)\s*()/, subs: function (achou) {
                    return '|urlmorta= sim' + achou;
                }
            },
            {
                reg: /\|\s*(?:dead\-?url|url\-status)\s*=/, subs: function (achou) {
                    return '|urlmorta=';
                }
            },
            {
                reg: /\|\s*degree\s*=/, subs: function (achou) {
                    return '|grau=';
                }
            },
            {
                reg: /\|\s*edition\s*=/, subs: function (achou) {
                    return '|edição=';
                }
            },
            {
                reg: /\|\s*editors\s*=/, subs: function (achou) {
                    return '|editores=';
                }
            },
            {
                reg: /\|\s*encyclopa?edia\s*=/, subs: function (achou) {
                    return '|enciclopédia=';
                }
            },
            {
                reg: /\|\s*episode\s*=/, subs: function (achou) {
                    return '|episódio=';
                }
            },
            {
                reg: /\|\s*format\s*=/, subs: function (achou) {
                    return '|formato=';
                }
            },
            {
                reg: /\|\s*language\s*=/, subs: function (achou) {
                    return '|língua=';
                }
            },
            {
                reg: /\|\s*interviewers?\s*=/, subs: function (achou) {
                    return '|entrevistador=';
                }
            },
            {
                reg: /\|\s*map\s*=/, subs: function (achou) {
                    return '|mapa=';
                }
            },
            {
                reg: /\|\s*map\-format\s*=/, subs: function (achou) {
                    return '|formato-mapa=';
                }
            },
            {
                reg: /\|\s*map\-url\s*=/, subs: function (achou) {
                    return '|urlmapa=';
                }
            },
            {
                reg: /\|\s*minutes\s*=/, subs: function (achou) {
                    return '|minuto=';
                }
            },
            {
                reg: /\|\s*network\s*=/, subs: function (achou) {
                    return '|rede=';
                }
            },
            {
                reg: /\|\s*orig\-?year\s*=/, subs: function (achou) {
                    return '|anooriginal=';
                }
            },
            {
                reg: /\|\s*pages\s*=/, subs: function (achou) {
                    return '|páginas=';
                }
            },
            {
                reg: /\|\s*page\s*=/, subs: function (achou) {
                    return '|página=';
                }
            },
            {
                reg: /\|\s*(?:number|issue)\s*=/, subs: function (achou) {
                    return '|número=';
                }
            },
            {
                reg: /\|\s*journal\s*=/, subs: function (achou) {
                    return '|periódico=';
                }
            },
            {
                reg: /\|\s*newspaper\s*=/, subs: function (achou) {
                    return '|jornal=';
                }
            },
            {
                reg: /\|\s*magazine\s*=/, subs: function (achou) {
                    return '|revista=';
                }
            },
            {
                reg: /\|\s*dictionary\s*=/, subs: function (achou) {
                    return '|dicionário=';
                }
            },
            {
                reg: /\|\s*work\s*=/, subs: function (achou) {
                    return '|obra=';
                }
            },
            {
                reg: /\|\s*place\s*=/, subs: function (achou) {
                    return '|local=';
                }
            },
            {
                reg: /\|\s*location\s*=/, subs: function (achou) {
                    return '|local=';
                }
            },
            {
                reg: /\|\s*publication\-?place\s*=/, subs: function (achou) {
                    return '|local-publicação=';
                }
            },
            {
                reg: /\|\s*publisher\s*=/, subs: function (achou) {
                    return '|publicado=';
                }
            },
            {
                reg: /\|\s*institution\s*=/, subs: function (achou) {
                    return '|instituição=';
                }
            },
            {
                reg: /\|\s*quote?a?t?i?o?n?\s*=/, subs: function (achou) {
                    return '|citação=';
                }
            },
            {
                reg: /\|\s*registration\s*=/, subs: function (achou) {
                    return '|registro=';
                }
            },
            {
                reg: /\|\s*section\s*=/, subs: function (achou) {
                    return '|seção=';
                }
            },
            {
                reg: /\|\s*season\s*=/, subs: function (achou) {
                    return '|temporada=';
                }
            },
            {
                reg: /\|\s*sections\s*=/, subs: function (achou) {
                    return '|seções=';
                }
            },
            {
                reg: /\|\s*sheet\s*=/, subs: function (achou) {
                    return '|folha=';
                }
            },
            {
                reg: /\|\s*sheets\s*=/, subs: function (achou) {
                    return '|folhas=';
                }
            },
            {
                reg: /\|\s*station\s*=/, subs: function (achou) {
                    return '|estação=';
                }
            },
            {
                reg: /\|\s*subscription\s*=/, subs: function (achou) {
                    return '|subscrição=';
                }
            },
            {
                reg: /\|\s*time\s*=/, subs: function (achou) {
                    return '|tempo=';
                }
            },
            {
                reg: /\|\s*time\-?caption\s*=/, subs: function (achou) {
                    return '|lengenda=';
                }
            },
            {
                reg: /\|\s*title\s*=/, subs: function (achou) {
                    return '|título=';
                }
            },
            {
                reg: /\|\s*title\-?link\s*=/, subs: function (achou) {
                    return '|títulolink=';
                }
            },
            {
                reg: /\|\s*episode\-?link\s*=/, subs: function (achou) {
                    return '|episódiolink=';
                }
            },
            {
                reg: /\|\s*department\s*=/, subs: function (achou) {
                    return '|departamento=';
                }
            },
            {
                reg: /\|\s*type\s*=/, subs: function (achou) {
                    return '|tipo=';
                }
            },
            {
                reg: /\|\s*trans\-?chapter\s*=/, subs: function (achou) {
                    return '|capítulo-trad=';
                }
            },
            {
                reg: /\|\s*transcript\-format\s*=/, subs: function (achou) {
                    return '|transcricao-formato=';
                }
            },
            {
                reg: /\|\s*transcript\s*=/, subs: function (achou) {
                    return '|transcrição=';
                }
            },
            {
                reg: /\|\s*transcript\-?url\s*=/, subs: function (achou) {
                    return '|transcriçãourl=';
                }
            },
            {
                reg: /\|\s*trans\-?title\s*=/, subs: function (achou) {
                    return '|títulotrad=';
                }
            },
            {
                reg: /\|\s*year\s*=/, subs: function (achou) {
                    return '|ano=';
                }
            },
            {
                reg: /\|\s*platform\s*=/, subs: function (achou) {
                    return '|plataforma=';
                }
            },
            {
                reg: /\|\s*version\s*=/, subs: function (achou) {
                    return '|versão=';
                }
            },
            {
                reg: /\|\s*scene\s*=/, subs: function (achou) {
                    return '|cena=';
                }
            },
            {
                reg: /\|\s*level\s*=/, subs: function (achou) {
                    return '|fase=';
                }
            },
            {
                reg: /\|\s*author(\d\d?)?\s*=/, subs: function (achou) {
                    return '|autor' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*author(\d\d?)?\-?link\s*=/, subs: function (achou) {
                    return '|autorlink' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*first(\d\d?)?\s*=/, subs: function (achou) {
                    return '|primeiro' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*last(\d\d?)?\s*=/, subs: function (achou) {
                    return '|último' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*editor(\d\d?)?\-last\s*=/, subs: function (achou) {
                    return '|editor-sobrenome' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*editor(\d\d?)?\-first\s*=/, subs: function (achou) {
                    return '|editor-nome' + (achou ? achou : '') + '=';
                }
            },
            {
                reg: /\|\s*developer(\d\d?)?\s*=/, subs: function (achou) {
                    return '|desenvolvedor' + (achou ? achou : '') + '=';
                }
            }
        ],
        sumario: 'traduzindo nome/parâmetro'
    },

    geral: {
        cond: [
            {
                reg: /\|\s*accessadoem\s*=/, subs: function (achou) {
                    return "|acessadoem=";
                }
            },
            {
                reg: /\|\s*ttulo\s*=\s*(*)(\s*)/, subs: function (achou) {
                    if (achou.match(/\u200B|\n/)) {
                        var tmp = achou.replace(/ *\n */g, ' ');
                        return '|título=' + tmp.replace(/\u200B/g, '') + achou;
                    }
                    return achou;
                }
            },
            {
                reg: /\|\s*(?:lngua|lang)\s*=/, subs: function (achou) {
                    return '|língua=';
                }
            },
            {
                reg: /\|\s*\s*=\s*ISBN/, subs: function (achou) {
                    return '|isbn=';
                }
            },
            {
                reg: /\{\s*eferência a livro/, subs: function (achou) {
                    return '{citar livro';
                }
            },
            {
                reg: /\|\s*Ano\s*=/, subs: function (achou) {
                    return '|ano=';
                }
            },
            {
                reg: /\|\s*Autor\s*=/, subs: function (achou) {
                    return '|autor=';
                }
            },
            {
                reg: /\|\s*Autorlink\s*=/, subs: function (achou) {
                    return '|autorlink=';
                }
            },
            {
                reg: /\|\s*Editora\s*=/, subs: function (achou) {
                    return '|editora=';
                }
            },
            {
                reg: /\|\s*Ttulo\s*=/, subs: function (achou) {
                    return '|título=';
                }
            },
            {
                reg: /\|\s*Pgina\s*=/, subs: function (achou) {
                    return '|página=';
                }
            },
            {
                reg: /\|\s*Pginas\s*=/, subs: function (achou) {
                    return '|páginas=';
                }
            },
            {
                reg: /\|\s*Local de publicação\s*=/, subs: function (achou) {
                    return '|local-publicação=';
                }
            },
            {
                reg: /\|\s*Subttulo\s*=/, subs: function (achou) {
                    return '|subtítulo=';
                }
            },
            {
                reg: /\|\s*Colec?o\s*=/, subs: function (achou) {
                    return '|coleção=';
                }
            },
            {
                reg: /\|\s*Nmero\s*=/, subs: function (achou) {
                    return '|numero=';
                }
            },
            {
                reg: /\|\s*Edição\s*=/, subs: function (achou) {
                    return '|edição=';
                }
            },
            {
                reg: /\|\s*Captulo\s*=/, subs: function (achou) {
                    return '|capítulo=';
                }
            },
            {
                reg: /\|\s*Notas\s*=/, subs: function (achou) {
                    return '|notas=';
                }
            },
            {
                reg: /\|\s*Volume\s*=/, subs: function (achou) {
                    return '|volume=';
                }
            },
            {
                reg: /\|\s*olumes\s*=*((?:\}\}|\|))/, subs: function (achou) {
                    return achou;
                }
            }
        ],
        sumario: 'ajustes gerais'
    },

    duplicado: {
        sumario: 'rm duplicados'
    },

    //predefinições com exclusividade de verificação
    apenas: itar web\s*\|/,
        /\{\{\s*itar vídeo(?: notas|)\s*\|/,
        /\{\{\s*itar tese\s*\|/,
        /\{\{\s*itar revista\s*\|/,
        /\{\{\s*itar relatório\s*\|/,
        /\{\{\s*itar podcast\s*\|/,
        /\{\{\s*itar periódico\s*\|/,
        /\{\{\s*itar mapa\s*\|/,
        /\{\{\s*itar livro\s*\|/,
        /\{\{\s*eferência a livro\s*\|/,
        /\{\{\s*itar lista de discussão\s*\|/,
        /\{\{\s*itar jornal\s*\|/,
        /\{\{\s*itar jogo eletrônico\s*\|/,
        /\{\{\s*itar notícia\s*\|/,
        /\{\{\s*itar grupo de notícias\s*\|/,
        /\{\{\s*itar episódio\s*\|/,
        /\{\{\s*itar entrevista\s*\|/,
        /\{\{\s*itar enciclopédia\s*\|/,
        /\{\{\s*itar discurso\s*\|/,
        /\{\{\s*itar conferência\s*\|/,
        /\{\{\s*itar comunicados? de imprensa\s*\|/,
        /\{\{\s*itar ariv\s*\|/,
        /\{\{\s*ite ?web\s*\|/,
        /\{\{\s*ite video(?: game|)\s*\|/,
        /\{\{\s*ite AV media(?: notes|)\s*\|/,
        /\{\{\s*ite thesis\s*\|/,
        /\{\{\s*ite magazine\s*\|/,
        /\{\{\s*ite report\s*\|/,
        /\{\{\s*ite podcast\s*\|/,
        /\{\{\s*ite ?news(?:paper|)\s*\|/,
        /\{\{\s*ite map\s*\|/,
        /\{\{\s*ite book\s*\|/,
        /\{\{\s*ite mailing list\s*\|/,
        /\{\{\s*ite journal\s*\|/,
        /\{\{\s*ite document\s*\|/,
        /\{\{\s*ite paper\s*\|/,
        /\{\{\s*ite newsgroup\s*\|/,
        /\{\{\s*ite episode\s*\|/,
        /\{\{\s*ite serial\s*\|/,
        /\{\{\s*ite interview\s*\|/,
        /\{\{\s*ite encyclopedia\s*\|/,
        /\{\{\s*ite conference\s*\|/,
        /\{\{\s*ite press(?: release|)\s*\|/,
        /\{\{\s*ite ariv\s*\|/,
        /\{\{\s*itation\s*\|/,
        /\{\{\s*rticle\s*\|/
    ],
    ordem: 
}

function verifDuplicado(achou) {
    function acharAninhados(cap) {
        var colch = 0;
        var chaves = 0;
        var r = '';
        for (var i = 0; i < cap.length; r += cap) {
            if (cap.charAt(i) == '[' && cap.charAt(i + 1) == '[') {
                if (chaves == 0) colch++;
                r += cap;
            } else if (cap.charAt(i) == ']' && cap.charAt(i + 1) == ']') {
                if (chaves == 0) colch--;
                if (colch < 0) colch = 0;
                r += cap;
            } else if (cap.charAt(i) == '{' && cap.charAt(i + 1) == '{') {
                if (colch > 0) return achou;
                chaves++;
                r += cap
            } else if (cap.charAt(i) == '}' &&
                (cap.charAt(i + 1) == '}' || cap.charAt(i + 1) == '')) {
                // será < 0 se atingir o fim da delimitação
                chaves--;
                if (chaves < 0) {
                    if (colch == 0) return r;
                    else return achou;
                }
                r += cap;
            } else if (cap.charAt(i) == '|') {
                if (colch == 0 && chaves == 0) return r;
            }
        }
        if (colch == 0 && chaves == 0) return r;
        else return achou;
    }
    var ultimo = acharAninhados(achou);
    if (ultimo == achou) return achou;
    if (/+/.test(ultimo)) {
        //o padrão do MediaWiki escolhe o último em caso de repetição, que se apague o primeiro
        var primeiro = acharAninhados(achou);
        if (primeiro == achou) return achou;
        return achou.substring(primeiro.length) + achou + achou;
    } else {
        //se o último for vazio, mesmo sendo o padrão escolhido, faz sentido removê-lo
        return achou + achou + achou.substring(ultimo.length);
    }
}

// apenas parâmetros das predefinições delimitadas
listaDupl = tulo'
    , '(?:lngua|idioma)', '(?:ligação inac?tiva|li|datali|urlmorta|dead\\-?url)'];

duplicado = ;

for (var i = 0; i < listaDupl.length; i++) {
    duplicado.push({
        reg: new RegExp("(\\|\\s*" + listaDupl + "\\s*=)(*)(\\|"
            + listaDupl + "\\s*=)(*)"),
        subs: function (achou) {
            return verifDuplicado(achou);
        }
    });
}

citacoes.duplicado.cond = duplicado;

links = [
    {
        reg: /<a\s*.*href\s*=\s*\"?(*)\"?\s**<\s*\/\s*a\s*>/, subs: function (achou) {
            var acao;
            var value = novoEditor ? 'submit' : 'edit';
            if (/\?/.test(achou)) acao = '&action=' + value;
            else acao = (/%3F/.test(achou)) ? '?&action=' + value : '?action=' + value;

            return achou + '&nbsp;<a href="javascript:subsTextoBox(window.open(\''
                + encodeURIComponent(achou) + acao + '\'))">Editar</a>';
        }
    },
    {
        reg: /<a\s*.*href\s*=\s*\"?(*)\"?\s*.*<\s*\/\s*a\s*>/, subs: function (achou) {
            var acao;
            var value = novoEditor ? 'submit' : 'edit';
            if (/\?/.test(achou)) acao = '&action=' + value;
            else acao = (/%3F/.test(achou)) ? '?&action=' + value : '?action=' + value;

            return achou + '&nbsp;<a href="javascript:subsTextoBox(window.open(\''
                + encodeURIComponent(achou) + acao + '\'))">Editar</a>';
        }
    }
]

geral = [
    {
        reg: /\]*\]\])/i, subs: function (achou) {
            return ';
        }
    }, {
        reg: /(\]*)\.\]\]/i, subs: function (achou) {
            return achou + achou + ']]';
        }
    }, {
        reg: /\nexo:(]*\]\])/, subs: function (achou) {
            return ';
        }
    }, {
        reg: /\]+)\s*\|\s*(]+)\s*\]\]/, subs: function (achou) {
            var quot = '';
            var tmp = (achou.charAt(0).toLocaleLowerCase() + achou.replace(/_/g, " ").substring(1)).indexOf
                (achou.charAt(0).toLocaleLowerCase() + achou.replace(/_/g, " ").substring(1));

            if (tmp != 0) {
                quot = achou.match(/^(''''')(.+)\1$/) || achou.match(/^(''')(.+)\1$/) || achou.match(/^('')(.+)\1$/) || achou.match(/^(')(.+)\1$/) || achou.match(/^(")(.+)\1$/);

                if (!quot) return achou;

                achou = quot;
                quot = quot;
                tmp = (achou.charAt(0).toLocaleLowerCase() + achou.replace(/_/g, " ").substring(1)).indexOf
                    (achou.charAt(0).toLocaleLowerCase() + achou.replace(/_/g, " ").substring(1));
            }

            if (tmp == 0) {
                var apos = achou.substring(achou.length);
                if (/^*?$/.test(apos))
                    return quot + '.substring(0, achou.length)
                        + ']]' + apos + quot;
            }
            return achou;
        }
    }, {
        reg: /(<\s*ref\s+(?:*\s+)?name=+)\s*>\s*<\s*\/ref\s*>/i, subs: function (achou) {
            return achou + ' />';
        }
    }, {
        reg: / *? *(<\s*ref(?:\s+*)?>*<\s*\/ref\s*>|<\s*ref\s+*\/>) *()/i, subs: function (achou) {
            return achou + achou;
        }
    }, {
        reg: /(,;'"]|(?:<\/ref\s*>)|(?:<ref\s*(?:\s++|)\/>)) +<\s*ref()/i, subs: function (achou) {
            return achou + '<ref' + achou;
        }
    }, {
        reg: /(<\/ref>)(\w)/i, subs: function (achou) {
            return achou + ' ' + achou;
        }
    }/* Código desativado para corrigir <ref name=nome> para <ref name="nome"/>
    , { reg: /(<\s*ref\s+(?:+\s+|)(?:name|group)\s*=)(+)(\/>|\s|>)/i, subs: function(achou){
    return achou + '"' + achou + '"' + achou;
} }*/, {
        reg: /<\s*br\s*clear\s*=\s*\"?(none|left|right|both|initial|inherit|all)\"?\s*\/?>/i, subs: function (achou) {
            if (achou.toLowerCase() == "all")
                achou = "both";
            return '<br style="clear: ' + achou + '">';
        }
    }, {
        reg: /<\s*\s*br\s*>/i, subs: function (achou) {
            return '<br>';
        }
    }, {
        reg: /<\s*br\s*(\/|)>/i, subs: function (achou) {
            return '<br' + achou + '>';
        }
    }, {
        reg: /Encyclopa?edia Britannica/, subs: function (achou) {
            return 'Encyclopædia Britannica';
        }
    }, {
        reg: /() +\n/, subs: function (achou) {
            return achou + '\n';
        }
    }, {
        reg: /\{\{\s*(?:igação inativa|ink quebrado|ead\s?link)\s*\|\s*dat\s*=\s*(+)\s+d?e?\s*(\d\d\d\d?)/, subs: function (achou) {
            var tmp = tradMes(achou);
            if (tmp.match(/falhou/)) return achou;
            else return '{{ligação inativa|data=' + tmp + ' de ' + achou;
        }
    }, {
        reg: /\{\{\s*(?:ead\s?link|ink quebrado)\s*(\}\}|\|)/, subs: function (achou) {
            return '{{ligação inativa' + achou;
        }
    }, {
        reg: /(\{\{\s*(?:itar (?:web\s*\||vídeo\s*\||vídeo notas\s*\||tese\s*\||revista\s*\||relatório\s*\||podcast\s*\||periódico\s*\||mapa\s*\||livro\s*\||lista de discussão|jornal\s*\||notícia\s*\||grupo de notícias|episódio\s*\||entrevista\s*\||enciclopédia\s*\||discurso\s*\||conferência\s*\||comunicados? de imprensa|ariv\s*\|)|itation\s*\|)*)\}\}\s*\{\{\s*igação inativa\s*(?:\|dat\s*=(\s*+\s+de\s*\d\d\d\d?)\s*|)(?:\|\s*bot=*|)\}\}/, subs: function (achou) {
            return achou + '|datali=' + (achou ? achou : mesesPt
                + ' de ' + (new Date).getFullYear()) + '}}';
        }
    }, {
        reg: /\{\{\s*(?:\-notas|\-fontes|ais\-?notas|ais?fontes|ais\-referências|oucas fontes|altam fontes)\s*(\}\}|\|)/, subs: function (achou) {
            return '{{mais notas' + achou;
        }
    }, {
        reg: /\{\{\s*(?:ormatação|eciclar|leanup)\s*(\}\}|\|)/, subs: function (achou) {
            return '{{reciclagem' + achou;
        }
    }, {
        reg: /\{\{\s*(?:itation needed|act|arece de fonte|arece\-de\-fontes|arece fontes|itação necessária|ite as fontes)\s*(\}\}|\|)/, subs: function (achou) {
            return '{{carece de fontes' + achou;
        }
    }, {
        reg: /\{\{\s*em\-notas\s*(\}\}|\|)/, subs: function (achou) {
            return '{{sem notas' + achou;
        }
    }, {
        reg: /\{\{\s*(?:(?:ais|)\-fontes-bpv|ais\-notas\-bpv)\s*(\}\}|\|)/, subs: function (achou) {
            return '{{mais notas-bpv' + achou;
        }
    }, {
        reg: /\{\{\s*(arece de fontes2?|eciclagem|em\-fontes|em notas|ais fontes|ais notas\-bpv|igação inativa|ultitag)((?:\|*))?\|\s*dat\s*=\s*(+)\s+d?e?\s*(\d\d\d\d?)/, subs: function (achou) {
            var tmp = tradMes(achou) + ' de ' + achou;
            if (tmp.match(/falhou/)) return achou;
            else return '{{' + achou + (achou ? achou : '') + '|data=' + tmp;
        }
    }, {
        reg: /\{\{\s*(?:em)\-fontes\s*\|\s*dat\s*=\s*(+)\s+d?e?\s*(\d\d\d\d?)/, subs: function (achou) {
            var tmp = tradMes(achou);
            if (tmp.match(/falhou/)) return achou;
            else return '{{sem fontes|data=' + tmp + ' de ' + achou;
        }
    }, {
        reg: /\{\{\s*\-referências\s*\|\s*dat\s*=\s*(+)\s+d?e?\s*(\d\d\d\d?)/, subs: function (achou) {
            var tmp = tradMes(achou);
            if (tmp.match(/falhou/)) return achou;
            else return '{{formatar referências|data=' + tmp + ' de ' + achou;
        }
    }, {
        reg: /\{\{\s*wkf\s*\|\s*dat\s*=\s*(+)\s+d?e?\s*(\d\d\d\d)/, subs: function (achou) {
            var tmp = tradMes(achou);
            if (tmp.match(/falhou/)) return achou;
            else return '{{wikificação|data=' + tmp + ' de ' + achou;
        }
    }, {
        reg: /\{\{\s*(?:\-notas|\-fontes)\s*\}\}/, subs: function (achou) {
            return '{{mais notas|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + '}}';
        }
    }, {
        reg: /\{\{\s*(?:em)\-fontes\s*\}\}/, subs: function (achou) {
            return '{{sem fontes|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + '}}';
        }
    }, {
        reg: /\{\{\s*\-referências\s*\}\}/, subs: function (achou) {
            return '{{formatar referências|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + '}}';
        }
    }, {
        reg: /\{\{\s*wkf\s*\}\}/, subs: function (achou) {
            return '{{wikificação|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + '}}';
        }
    }, {
        reg: /\{\{\s*(arece de fontes|eciclagem|em\-fontes|em notas|ais fontes|ais notas\-bpv|igação inativa|ultitag)\s*((?:\|*)?\}\})/, subs: function (achou) {
            if (achou.match(/\|\s*at\s*=/)) return achou;

            tmpReg = /(?:\||(?:\|esde|at)\s*=?|=)\s*(?:\d\d?\s+d?e?\s*)?(+)\s+d?e?\s*(\d\d\d\d)\s*(\||\}\})/;
            var tmp = achou.match(tmpReg);
            if (tmp) {
                tmp = '|data=' + tradMes(tmp) + ' de ' + tmp + tmp;
                if (!tmp.match(/falhou/)) return '{{' + achou + achou.replace(tmpReg, tmp);
            }
            return '{{' + achou + '|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + achou;
        }
    }, {
        reg: /\{\{\s*(arece de fontes\/bloco|arece de fontes2)\s*((?:\|*)?\}\})/, subs: function (achou) {
            if (achou.match(/\|\s*at\s*=/)) return achou;

            return '{{' + achou + '|data=' + mesesPt
                + ' de ' + (new Date).getFullYear() + achou;
        }
    }, {
        reg: /\{\{\s*(?:igações xternas|áginas externas|eferências externas|inks|ink externo|igação externa|inks externos)\s*\}\}/, subs: function (achou) {
            return 'Ligações externas';
        }
    }, {
        reg: /\{\{\s*e(?:r|ja) ambém\s*\}\}/, subs: function (achou) {
            return 'Ver também';
        }
    }, {
        reg: /\{\{\s*ibliografia\s*\}\}/, subs: function (achou) {
            return 'Bibliografia';
        }
    }, {
        reg: /\n? *(\n)? *\{\{(?:em ?interwikis?|eminterwiki-categorias|emiwcat|em?iw)\s*(?:\|*)?\}\} *(\n?) *\n/, subs: function (achou) {
            return '\n' + ((achou || achou) ? '\n' : '');
        }
    }, {
        reg: /\{\{(?:em ?interwikis?|eminterwiki-categorias|emiwcat|em?iw)\s*(?:\|*)?\}\}()/, subs: function (achou) {
            return achou;
        }
    }, {
        reg: /(\n *(?:==|\{\{)\s*referências\s*(?:==|(?:\|*)?\}\})*)(\n\s*==\s*ver também\s*==*)/i, subs: function (achou) {
            var p1 = achou, p2 = "";

            var maisSecao;
            while (maisSecao = p1.match(/(\n\s*==\s*ver também\s*==*)(\n\s*==\s**\s*==*)/i)) {
                p1 = maisSecao;
                p2 = maisSecao + p2;
            }

            if (!p2) {
                while (maisSecao = p1.match(/(\n\s*==\s*ver também\s*==*)(\n\s*(?:\\]|\{\{.*\}\})*)/i)) {
                    p1 = maisSecao;
                    p2 = maisSecao + p2;
                }
            }

            return p1.replace(/(.)\n*$/, "$1\n") + achou + p2;
        }
    }]
// { reg: /\{\{\s*itar notcia *(\n?) *\|/, subs: function(achou){
// return '{{citar jornal' + (achou ? achou : '') + '|';
//} }

foraDePredef = [
    {
        reg: /(\n\*+)<\s*br\s*\/?>(\s*\n)/i, subs: function (achou) {
            return achou + achou;
        }
    }, {
        reg: /(\n\*+)\n\:\*/, subs: function (achou) {
            return achou + "\n**";
        }
    }]

//predefinições com exceção de verificação
excecoes = ;

function substComExcecao(texto, cond, excecoes) {
    var tmp = '';

    for (var j = 0; j < cond.length; j++) {
        while (texto) {
            var pos = texto.search(cond.reg);
            while (excecoes.length > 0 && pos != -1) {
                var exce = -1;
                for (var i = 0; i < excecoes.length; i++) {
                    var _exce = texto.search(excecoes);
                    if ((exce == -1) || (_exce != -1 && _exce < exce))
                        exce = _exce;
                }
                if (exce == -1) {
                    pos = texto.search(cond.reg);
                    break;
                }
                if (pos < exce) {
                    pos = texto.search(cond.reg);
                    break;
                }
                var bloco = 0;
                var exceInicial = exce;
                for (; exce < texto.length; exce++) {
                    if (texto.charAt(exce) == '{' && texto.charAt(exce + 1) == '{') {
                        bloco++;
                        exce++; //O próximo char já foi verificado
                    }
                    else if (texto.charAt(exce) == '}' && texto.charAt(exce + 1) == '}') {
                        bloco--;
                        exce++; //O próximo char já foi verificado
                    }
                    if (bloco == 0) break;
                }
                if (bloco != 0) {
                    var linhas = (tmp + texto.substring(0, exceInicial)).split('\n');
                    var erro = "Erro: O bloco da predefinição na linha: "
                        + linhas.length + ", e posição: "
                        + (linhas.length + 1) + " nunca é fechado";

                    mw.notify(erro);
                    throw erro;
                }
                tmp += texto.substring(0, exce);
                texto = texto.substring(exce);
                pos = texto.search(cond.reg);
            }

            if (pos > -1) {
                tmp += texto.substring(0, pos);
                texto = texto.substring(pos);
                var achou = texto.match(cond.reg);
                texto = texto.replace(achou, '');
                tmp += cond.subs(achou);
            } else {
                tmp += texto;
                texto = "";
            }
        }
        texto = tmp;
        tmp = '';
    }
    return texto;
}

function substApenas(texto, cond, apenas, excecoes) {
    var tmp = '';

    while (texto) {
        var apen = -1;
        for (var i = 0; i < apenas.length; i++) {
            var _apen = texto.search(apenas);
            if ((apen == -1) || (_apen != -1 && _apen < apen))
                apen = _apen;
        }
        if (apen == -1) {
            tmp += texto;
            texto = '';
            break;
        }

        var bloco = 1;
        var apenInicial = apen;
        for (++apen; apen < texto.length; apen++) {
            if (texto.charAt(apen) == '{' && texto.charAt(apen + 1) == '{') {
                bloco++;
                apen++; //O próximo char já foi verificado
            }
            else if (texto.charAt(apen) == '}' && texto.charAt(apen + 1) == '}') {
                bloco--;
                apen++; //O próximo char já foi verificado
            }
            if (bloco == 0) break;
        }
        if (bloco != 0) {
            var linhas = (tmp + texto.substring(0, apenInicial)).split('\n');
            var erro = "Erro: O bloco da predefinição na linha: "
                + linhas.length + ", e posição: "
                + (linhas.length + 1) + " nunca é fechado";

            mw.notify(erro);
            throw erro;
        }
        if (excecoes) {
            apenInicial++;
            tmp += texto.substring(0, apenInicial)
                + substComExcecao(texto.substring(apenInicial, apen), cond, excecoes)
        } else tmp += texto.substring(0, apenInicial)
            + substituir(texto.substring(apenInicial, apen), cond);
        texto = texto.substring(apen);
    }

    return tmp;
}

function substituir(texto, cond) {
    var tmp = '';

    for (var j = 0; j < cond.length; j++) {
        while (texto) {
            var pos = texto.search(cond.reg);
            if (pos > -1) {
                tmp += texto.substring(0, pos);
                texto = texto.substring(pos);
                var achou = texto.match(cond.reg);
                texto = texto.replace(achou, '');
                tmp += cond.subs(achou);
            } else {
                tmp += texto;
                texto = "";
            }
        }
        texto = tmp;
        tmp = '';
    }
    return texto;
}

function validarSintaxePredefinicoes(temp, janela) {
    // Verificar se há blocos não fechados
    var bloco = 0;
    var pbloco = 0;
    for (var pos = 0; pos < temp.length; pos++) {
        if (temp.charAt(pos) == '<') {
            var partes = 0;
            var identif = ;
            var palavra = '';
            pos++
            escopo: while (pos < temp.length) {
                switch (partes) {
                    case 0:
                        if (/^\s$/.test(temp.charAt(pos))) {
                            pos++;
                            continue escopo;
                        }
                        partes++;
                        break;
                    case 1:
                        var c = temp.charAt(pos).toLowerCase();
                        if (/^$/.test(c)) {
                            palavra += c;
                            pos++;
                            partes++
                            continue escopo;
                        } else break escopo;
                        break;
                    case 2:
                        var c = temp.charAt(pos).toLowerCase();
                        if (/^$/.test(c)) {
                            palavra += c;
                            pos++;
                            continue escopo;
                        } else partes++;
                        break;
                    case 3:
                        for (var i = 0; i < identif.length; i++) {
                            if (palavra == identif) {
                                partes++;
                                break;
                            }
                        }
                        if (partes == 3) break escopo;
                        break;
                    case 4:
                        if (temp.charAt(pos) == '/' && temp.charAt(pos + 1) == '>')
                            break escopo;
                        if (temp.charAt(pos) == '>') partes++;
                        pos++;
                        break;
                    case 5:
                        if (temp.charAt(pos) == '<') partes++;
                        pos++;
                        break;
                    case 6:
                        var b = false;
                        if (/^$/.test(temp.charAt(pos))) {
                            if (temp.charAt(pos) == '/') {
                                if (b) {
                                    partes = 5;
                                } else b = true;
                            }
                            pos++;
                            continue escopo;
                        }
                        partes++;
                        break;
                    case 7:
                        for (var num = 0; num < palavra.length; num++) {
                            if (palavra != temp.charAt(pos).toLowerCase()) {
                                partes = 5;
                                break;
                            }
                            pos++
                        }
                        if (partes == 7) partes++;
                        break;
                    case 8:
                        if (/^$/.test(temp.charAt(pos))) pos++;
                        else { pos++; break escopo }
                        break;
                }
            }
        }
        if (temp.charAt(pos) == '{' && temp.charAt(pos + 1) == '{') {
            if (bloco == 0) pbloco = pos;
            bloco++;
            pos++; //O próximo char já foi verificado
        } else if (temp.charAt(pos) == '}' && temp.charAt(pos + 1) == '}') {
            bloco--;
            pos++; //O próximo char já foi verificado
        }
        if (bloco == -1) {
            var linhas = temp.substring(0, pos).split('\n');
            var textAviso = "<div style='color: red'>Aviso:</div> Na linha: " + linhas.length + ", e posição: " + linhas.length + " teve bloco fechado sem nenhum aberto.";

            if (window.ve && window.ve.init) {
                if (!window.avisove) {
                    textAviso += " Para ignorar clique novamente em 'Ajustes'";
                    mw.notify(textAviso);
                }
            } else {
                janela.document.getElementById("editpage-copywarn").innerHTML += textAviso
                    + " Para ignorar clique em 'Mostrar alterações'";
            }
            aviso = true;
            bloco = 0;
        }
    }
    if (bloco != 0) {
        var linhas = temp.substring(0, pbloco).split('\n');
        var erro = "Erro: O bloco da predefinição na linha: "
            + linhas.length + ", e posição: "
            + (linhas.length + 1) + " nunca é fechado";

        mw.notify(erro);
        throw erro;
    }
}


function subsTextoBox(janela) {
    if (janela == window) _();
    else $(janela).load(_);

    function _() {
        if (!janela.aposWait) {
            janela.box = null
            janela.sumarioEl = null;
        }
        janela.aposWait = undefined;

        if (janela.ve && janela.ve.init) {
            var mode = janela.ve.init.target.surface.getMode()
            if (mode == 'source') {
                box = {
                    valor: janela.ve.init.target.surface.model.documentModel.data.getSourceText(),
                    get value() {
                        return this.valor == null
                            ? '' : this.valor;
                    },
                    set value(val) {
                        this.valor = val.toString();
                    }
                }

                var tmp = $('.ve-ui-mwSaveDialog-summary')
                if (tmp.length > 0)
                    sumarioEl = tmp
                else
                    sumarioEl = {
                        get value() {
                            return janela.ve.init.target.editSummaryValue == null
                                ? '' : janela.ve.init.target.editSummaryValue;
                        },
                        set value(val) {
                            janela.ve.init.target.editSummaryValue = val.toString();
                        }
                    }
            } else if (mode == 'visual') {
                if (!janela.box) {
                    //janela.ve.dm.MWWikitextSurfaceFragment.prototype.convertToSource(ve.init.target.surface.model.documentModel).done(function (source) {
                    wikitextPromise = ve.init.target.getWikitextFragment(ve.init.target.surface.model.documentModel, true);
                    ve.init.target.getSurface().createProgress(wikitextPromise, 'Gerando o WikiTexto').done(function (progressBar, cancelPromise) {
                        cancelPromise.fail(function () {
                            wikitextPromise.abort();
                        });
                    });
                    wikitextPromise.done(function (source) {
                        box = {
                            valor: source,
                            get value() {
                                return this.valor == null
                                    ? '' : this.valor;
                            },
                            set value(val) {
                                this.valor = val.toString();
                            }
                        }

                        var tmp = $('.ve-ui-mwSaveDialog-summary')
                        if (tmp.length > 0)
                            sumarioEl = tmp
                        else
                            sumarioEl = {
                                get value() {
                                    return janela.ve.init.target.editSummaryValue == null
                                        ? '' : janela.ve.init.target.editSummaryValue;
                                },
                                set value(val) {
                                    janela.ve.init.target.editSummaryValue = val.toString();
                                }
                            }

                        janela.aposWait = true;
                        subsTextoBox(janela);
                    }).fail(function () {
                        mw.notify('Falhou ao tentar obter código fonte');
                    });
                    return;
                }
            } else {
                return;
            }
        } else if (janela.wikEd && janela.wikEd.textarea) {
            if (janela.wikEd.useWikEd === true)
                janela.wikEd.UpdateTextarea();
            box = janela.wikEd.textarea;
            janela.wikEd.useWikEd = false;
        } else if (janela.$('.CodeMirror').length) {
            try {
                box = janela.$('.CodeMirror').CodeMirror;

                box.__defineGetter__('value', function () {
                    return this.getValue();
                });
                box.__defineSetter__('value', function (val) {
                    this.setValue(val);
                });
            } catch (e) {
                box = janela.document.getElementById('wpTextbox1');
            }

        } else {
            box = janela.document.getElementById('wpTextbox1');
        }
        if (!window.sumarioEl)
            sumarioEl = janela.document.getElementById('wpSummary');

        var temp = box.value;
        var mudou = {};
        var sumario = '';
        var comp;
        var escape = 0;
        var sumGeral = false;

        aviso = false;

        validarSintaxePredefinicoes(temp, janela);

        comp = temp.replace(/\{\{redefinição:/g, "{{");
        if (comp != temp) {
            temp = comp;
            sumGeral = true;
        }


        for (var i = 0; i < citacoes.ordem.length; i++) {
            var obj = citacoes];
            escape = 0;
            do {
                if (escape == 6) {
                    mw.notify('Parece haver algo errado na operação: '
                        + obj.sumario + '. Parando a execução');
                    return;
                }
                escape++;
                comp = temp;
                temp = substApenas(temp, obj.cond, citacoes.apenas, );
                if ((!mudou]) && comp != temp) {
                    mudou] = true;
                    if (sumario)
                        sumario += ', ';
                    sumario += obj.sumario;
                }
            } while (comp != temp)
        }
        if (sumario) sumario += ' nas citações';

        escape = 0;
        do {
            if (escape == 20) {
                mw.notify("Parece haver algo errado ao aplicar ajustes gerais. Parando a execução");
                return;
            }
            escape++;
            comp = temp;
            temp = substComExcecao(temp, foraDePredef, );
            if ((!mudou.outros) && comp != temp) {
                sumGeral = true;
            }
        } while (comp != temp)

        escape = 0;
        do {
            if (escape == 12) {
                mw.notify("Parece haver algo errado ao aplicar ajustes gerais. Parando a execução");
                return;
            }
            escape++;
            comp = temp;
            temp = substituir(temp, geral);
            if ((!mudou.outros) && (comp != temp || sumGeral)) {
                mudou.outros = true;
                if (sumario != '')
                    sumario += ', outros ';
                sumario += 'ajustes';
            }
        } while (comp != temp)

        box.value = temp;

        if (sumario != '')
            sumario += ' usando ]';
        {
            var tmpSmr = sumarioEl.value;
            if (tmpSmr) sumario += (sumario ? ', ' : '') + tmpSmr;
        }
        sumarioEl.value = sumario;

        if (!(janela.ve && janela.ve.init)) {
        	var tmp = janela.document.getElementById('wpMinoredit');
        	if (tmp)
                tmp.checked = true;
            if (!aviso) {
                //janela.document.getElementById('wpPreview').click();
                janela.document.getElementById('wpDiff').click();
                //janela.document.getElementById('wpSave').click();
            }
            box = null
            sumarioEl = null;
        } else {
            if (aviso) {
                if (!window.avisove) {
                    avisove = true;
                    return;
                }
            }
            avisove = false;

            var form = $('<form style="display:none" method="post" action="https://wikifreehand.com/pt/' + janela.mw.config.get('wgPageName')
                + '"><input name="action" value="' + 'submit'
                + '"><textarea name="wpTextbox1">'
                + '</textarea><input name="wpSummary" value="' + sumarioEl.value
                + '"><input name="wpMinoredit" value="' + 'on'
                + '"><input name="wpDiff" value="' + 'Mostrar alterações'
                + '"><input name="editRevId" value="' + janela.mw.config.get("wgCurRevisionId")
                + '"><input name="parentRevId" value="' + janela.mw.config.get("wgCurRevisionId")
                + '"><input name="baseRevId" value="' + janela.mw.config.get("wgCurRevisionId")
                + '"><input name="wpStarttime" value="' + (new Date()).toISOString().replace(//g, "").slice(0, -3)
                + ($("#ca-unwatch").length ? '"><input name="wpWatchthis" checked type="checkbox' : '')
                + '"><input name="mode" value="diff'
                + '"><input name="model" value="wikitext'
                + '"><input name="format" value="text/x-wiki'
                + '"><input name="wpUltimateParam" value="1'
                + '"></form>');

            form.find("textarea").val(box.value);
            $(document.body).append(form);
            window.onbeforeunload = null;
            form.submit();
        }
    }
}

var categoria;
var afluentes;
if (categoria = document.getElementById('mw-pages')) {
    if (categoria = categoria.getElementsByClassName('mw-content-ltr')) {
        fCategoria = function () {
            categoria.innerHTML = substituir(categoria.innerHTML, links);
        }
        categoria.innerHTML = '<input type="button" value="Criar links de edição automática" onclick    ="fCategoria()" ><br>' + categoria.innerHTML
    }
} else if (afluentes = document.getElementById("mw-whatlinkshere-list")) {
    fAfluentes = function () {
        afluentes.innerHTML = substituir(afluentes.innerHTML, links)
    }
    afluentes.innerHTML = '<input type="button" value="Criar links de edição automática" onclick ="fAfluentes()" ><br>' + afluentes.innerHTML
    //afluentes.innerHTML = substituir(afluentes.innerHTML, links);
} else if (document.getElementById('wpTextbox1') && document.getElementById('wpDiff')) {
    document.getElementById('wpDiff').outerHTML =
        document.getElementById('wpDiff').outerHTML.replace('accesskey="v"', 'accesskey="d"')
            .replace('alt-shift-v', 'alt-shift-d')
        + '\n<input id="Ajustes automáticos" '
        + 'name="Ajustes automáticos" tabindex="7" title="Ajustes automáticos " '
        + 'type="button" class="' + $("#wpDiff").prop("class") + '" value="Ajustes automáticos" accesskey="a" onclick="subsTextoBox(window)">';
    // subsTextoBox(window)
}

function isVe() {
    var tentativas = 5

	mw.loader.using('ext.visualEditor.ve').then(function() {
        var intervalo = setInterval(function () {
            if (ve.init) {
                if ($('.ve-ui-toolbar-ajustes').length || tentativas-- < 1) {
                    clearInterval(intervalo);
                } else if (ve.init.target && ve.init.target.surface) {
                    var mode = ve.init.target.surface.getMode()
                    if (mode == 'source' || mode == 'visual') {
                    
                        temp = document.createElement("z");
                        var refItem = $('.oo-ui-tool-name-showSave');
                        if (refItem) {
                            $(refItem).after(temp);
                            temp.outerHTML = refItem.outerHTML;
                            
                            $($('.ve-ui-toolbar-saveButton'))
                                .removeClass('ve-ui-toolbar-saveButton')
                                .addClass('ve-ui-toolbar-ajustes');
                            
                            $('.ve-ui-toolbar-ajustes').find('.oo-ui-tool-title').html('Ajustes');
                            $($('.oo-ui-tool-name-showSave'))
                                .removeClass('oo-ui-tool-name-showSave')
                                .removeClass('oo-ui-widget-disabled')
                                .addClass('oo-ui-widget-enabled')
                                .parent()
                                .removeClass('oo-ui-toolGroup-disabled-tools')
                                .addClass('oo-ui-toolGroup-enabled-tools')
                            
                            $('.ve-ui-toolbar-ajustes').click(function () {
                                subsTextoBox(window);
                            });
                        }
                    }
                }
            }
        }, 5000);
    });
}
isVe();

$(document).ready(function () {
    $('#ca-ve-edit').click(isVe);
})