sub fix_17 { # Category double
my ($error_code, $title_str, $text_str) = @_;
my $orig_str = $text_str;
$text_str =~ s/(\[\[(Kategória|Category):[^\]]+\]\]) *\n?/$1\n/gsi;
my $break = $orig_str eq $text_str;
my @repeated_categories;
my %seen;
my $count = 0;
while ($text_str =~ m/^((\[\[(Kategória|Category):([^\]]+)\]\]) *)\n/gmsi) {
my ($pos, $category, $len, $name) =
(pos($text_str), $2, length($&), $4);
if (!exists $seen{$name}) {
$seen{$name} = 1;
next;
}
$pos -= $len;
unshift(@repeated_categories, {
'pos' => $pos,
len => $len,
replacement => '',
});
$count++;
}
$count or return ('Nincs dupla kategória');
foreach (@repeated_categories) {
substr($text_str, $_->{pos}, $_->{len}) = $_->{replacement};
}
my $summary_str = $latin2->decode(
"Bot: $count duplázott kategória törölve. (Hibakód: $error_code)" .
($break ? " Valamint az egymás mellé írt kategóriabesorolások önálló sorokba tördelve." : '')
);
return ($summary_str, $count, $text_str);
}