Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
// funzione di ricerca binaria; testoBase.substring(p1,p2) viene spezzato a metà, viene scelta la metà
// con match superiore, e vengono restituiti due nuovi puntatori più "stretti"
// Usa la funzione simil(), che restituisce un numero fra 0 e 1 funzione del confronto fra due stringhe 
// (viene valutata la presenza di una stringa simile a quella cercata all'interno di una seconda stringa, 
// e il numero restituito è indice del grado di somiglianza). Algoritmo originale :-)
// es: 
// simil("mentre 'l cor ci duole","Levo la faccia, mentre il cor mi duole,‿\ne pel rossore dè miei chiusi cigli")
// 0.5789473684210527
function zsb(sottostringa,testoBase,p1,p2,nc) {
    if (p1==undefined || p2==undefined) {
        p1=0; 
        p2=testoBase.length;
    } 
    if (p1<0) p1=0;
    if (p2>testoBase.length) p2=testoBase.length;
    testo=testoBase.substring(p1,p2);
    lt=testo.length/2+testo.length%2/2; 
    m0=simil(sottostringa,testo.substring(0,lt),nc); 
    m1=simil(sottostringa,testo.substring(lt),nc); 
    if (m0>m1) {
         return [p1,lt+p1];
    } 
    else {
         return [lt+p1,testo.length+p1];
    }
}

// raffinamento della testa e della coda del match: viene esaminato un intorno di 10 caratteri prima e dopo il match
function zse(sottostringa,testoBase,p1,p2,nc) {
   var p1=p1-10; if (p1<0) p1=0;
   var p2=p2+10; if (p2>testoBase.length) p2=testoBase.length;
   var s=simil(sottostringa,testoBase.substring(p1,p2));
   if (nc==undefined) nc=4;
   for (i=p1;i<p2;i+=1){
       if (simil(sottostringa,testoBase.substring(i+1,p2),nc) < s) {
           break;
       }
       else {
           p1=p1+1;
       }
   }
   for (i=p2;i>p1;i-=1){
       if (simil(sottostringa,testoBase.substring(p1,i-1),nc) < s) {
           break;
       }
       else {
           p2-=1;
       }
   }
return  [p1,p2,testoBase.substring(p1,p2)];
}

// ricerca il miglior match di sottostringa dentro testoBase e restituisce i due puntatori inizio-fine del match
function zs(sottostringa,testoBase,nc) {
    var p=[0,testoBase.length];
    while (p[1]-p[0]>sottostringa.length*2) {
    // ricerca binaria
    p=zsb(sottostringa,testoBase,p[0],p[1]);  
    }
    // raffinamento testa e coda
    p=zse(sottostringa,testoBase,p[0],p[1]);
    return [p[0],p[1]];
}

// accetta un testo html e sostituisce i tag con il carattere speciale ‿; restituisce un testo codificato e la 
// lista dei tag; esiste una relazione 1:1 fra caratteri e tag e i tag sono ordinati
function codificaHtml(testo){
    var l=[];
    while(find_stringa(testo,"<",">",1)>""){
         var el=find_stringa(testo,"<",">",1);
         testo=testo.replace(el,"‿");l.push(el);
    }
    return[testo,l];
}

// inversa di codificaHtml, riceve un testo codificato e una lista di tag e li risistema
function decodificaHtml(testo,l) {
    for (var i=0;i<l.length;i+=1) {
        testo=testo.replace("‿",l[i]);
    }
    return testo;
}

// restituisce il testo html della div id="mw-content-text"
function leggiHtml() {
     return $("#mw-content-text").html();
}

// scrive un testo html nella div id="mw-content-text"
function scriviHtml(testoHtml) {
    $("#mw-content-text").html(testoHtml);
}

// riceve la stringa testo e due puntatori di sottostringa.
// aggiunge in testa e in coda alla sottostringa un tag span con backgroud-color di evidenziazione #def
// chiude e riapre lo span attorno ai caratteri speciali ‿ (marcatori di tag html)
function evidenzia(testo,ini,fin) {
    var selezione=testo.substring(ini,fin);
    selezione=selezione.replace(/(‿+)/g,'</span>$1<span style="background.color:#def">'); 
    selezione='<span style="background.color:#def">'+selezione+'</span>';
    testo=testo.substring(0,ini)+selezione+testo.substring(fin);
    return testo
}