No mě se ten můj script povedlo úspěšně opravit.
Tady je řešení:
Přidal jsem jednu proměnnou static do části, která rozhoduje o opravě tolerance.
/** VÝPOČET SPRÁVNÉ TOLERANCE */
$tolerance = $this->c->multiline->SearchLimit['before_strings'][$index]; // předběžná hodnota
/* Vysvětlení: Nemohu přidávat větší toleranci např. 9. když předchozí
řádek měl toleranci 0 nebo 1. Toleranci je možné zvýšit na novém
řádku o jedna, ale pokud zůstávám na tom samém řádku (v cyklu $i/$index),
pak neměnit toleranci. Tolerance se takto uplatňuje jen na hledání dopředu. */
if ($last_tolerance < $tolerance){ // HLAVNÍ PODMÍNKA část A)
if (!$tolerance_correction_set && $tolerance >= 1){
$last_tolerance--;
$tolerance_correction_set = true;
}
if ( $allow_set_tolerance == true ){
$last_tolerance++; // přičíst pouze jednou / když spouštím cyklus poprvé
$allow_set_tolerance = false; // Když začalo postupné navyšování tolerance, zmenšit toleranci o 1. Tím se vyvolá opoždění, a do hledání nebude zahrnutý ten, řádek, který jsem už jednou procházel.
}
$tolerance=$last_tolerance;
if ($last_tolerance+1 == $tolerance) $tolerance = $this->c->multiline->SearchLimit['before_strings'][$index];
}
else if ($last_tolerance >= $tolerance) { // HLAVNÍ PODMÍNKA část B)
$last_tolerance = $tolerance;
$tolerance_correction_set = false; // ZASTAVIT ODEČÍTÁNÍ
Jsem šťastný, že se mi to povedlo dotáhnout do konce. Vypadalo to fakt beznadějně. I když jste přišli s dejme tomu lepším řešením, tohle přeci jen bylo rychlejší na dokončení.