Writer: problema con Ricerca e Sostituzione

Salve,
Con LO 4.3.7.2 ho costruito una serie di formule (molto complesse) in grado di rilevare ed evidenziare gli errori di stampa / ortografici eventualmente presenti in un documento. Per evidenziare gli errori, oltre a spuntare le apposite caselle, inserisco il carattere & nella casella “Sostituisci” con relativo colore. Dalla versione successiva di LO in poi questo meccanismo non funziona più correttamente. Per ragioni a me sconosciute, diversi errori, non solo vengono individuati ma non evidenziati, ma al termine della sostituzione globale me li ritrovo sostituiti con &. Se invece cerco solo quello specifico errore, esso viene correttamente individuato ed evidenziato. Esiste un modo per risolvere questo problema?
Grazie anticipate.

Per me (LibO 6.2.4) funziona perfettamente. Hai segnalato la casella «espressioni regolari»? Il simbolo & è un’espressione regolare (una delle poche che funziona in sostituisci), perciò devi attivare questa opzione per utilizzarla.

Spiego meglio il funzionamento delle mie formule:

In LO 4372:

Cerca: [formula] —>
Sostituisci con: & [x Ricerca Esatta || x Espressione regolare || Formato —> Sfondo: colore scelto] —>
Sostituisci tutto.

TUTTI QUANTI gli errori vengono individuati ed evidenziati.

Nelle versioni successive a LO 4372 (inclusa la 624):

Cerca: [formula] —>
Sostituisci con: & [x Maiusc/Minusc || x Espressioni regolari || x Distingui diacritiche || Formato —> Sfondo: colore scelto] —>
Sostituisci tutto.

ALCUNI errori, benché individuati, non vengono evidenziati (l’ho constatato facendo la ricerca passo passo). E quando faccio la sostituzione globale per ottenere l’evidenziazione di tutti gli errori, questi errori non evidenziati vengono sostituiti con “&”, come se per questi errori l’opzione “Espressioni regolari” venisse disattivata.

Insomma, sulla 624 le mie formule funzionano perfettamente, quindi è da escludere che il problema stia nella loro costruzione. E il problema va risolto, perché quelle formule mi sono costate un anno di lavoro e non so fino a quando potrò ancora usare LO 4372.

P.S.: attualmente sto usando la versione 6.2.4.2 Portable, ma lo stesso problema ce l’avevo già con la versione 5 installata.

Ho trovato una porzione della formula principale che forse può aiutare ad individuare il problema:

<[GST][HI]“backslash”>[\s.,]

Testo campione:

"TI ricordi cosa accadde?" "SI, ricordo che GH diedi un pugno."

In LO 4372: TI, SI e GH individuati, evidenziati e NON sostituiti con “&”, sia nella ricerca/sostituzione passo passo che in quella globale.

In LO 624: TI, SI e GH individuati, NON evidenziati nella ricerca individuale E sostituiti con “&” nella ricerca/sostituzione globale.

Adesso vedo il problema. Mi sembra sia relazionato con questo

Bug 107916 - EDITING: Find & Replace Backreference Fails using Replace All and \b

L’unica soluzione che trovo per il momento è modificare l’espressione. Per esempio, se quello che cerchi è due o più caratteri in maiuscole, puoi utilizzare questa espressione senza problemi

(\p{Lu}){2,}

In questa espressione, \psceglie una «classe», L indica «letter» (un carattere) mentre che u significa «uppercase» (maiuscole). La documentazione del sistema di espressioni regolari di LibreOffice la trovi in questa pagina, anche se non tutte le espressioni che trovi lì funzionano.

Grazie delle indicazioni e dei link. Purtroppo il problema sorge quando si devono cercare parole specifiche. Nel caso esemplificato:

\<[GST][HI]\>[\s.,]

mi serve per trovare: GH GI SH SI TH TI, seguite da spazio, punto o virgola.

Stesso difetto con un’altra espressione che mi permette di individuare ed evidenziare errori come: deir[\s?], nel’[aeiou] (non la riporto perché è lunghissima), e un’altra ancora che mi evidenzia II (cioè Il)…

In tutti questi casi -regolarmente individuati dalla formula- mi ritrovo con la “&” al posto della sola evidenziazione.

Non credo quindi che il problema sia lo stesso del Bug citato. Probabilmente la cosa migliore da fare è smontare la formula principale, individuare quali espressioni danno quell’errore e vedere se riusciamo a scoprire dove sta il difetto.

L’espressione \< che usi è equivalente alla espressione indicata nel bug, cioè \b, quando quest’ultima si trova all’inizio di parola, perciò io creo sia proprio questo il problema: quando nell’espressione si trova un «bordo de parola» il riferimento non funziona.

Un’altra possibilità è provare con AltSearch: quest’estensione è più potente che il sistema di RegExp nativo di LibreOffice, forze funziona meglio.

E il problema è infatti quello. E’ bastato sostituire “<” con “[\s«—“”])" e l’errore rimane evidenziato e immodificato. Ma solo per quei pochi casi!. In tutti gli altri questa modifica non è stata necessaria.

In pratica:

\<[GST][HI]\>[\s.,]

deve diventare:

(^|[\s«—“"])[GST][HI]\>[\s.,]

Stesso aggiustamento (più o meno) per le altre espressioni che mi sostituivano la ricerca con “&”.

AltSearch? Preferisco usare le mie formule e sistemi di controllo.