User:Xybot/FixEscapes
Jump to navigation
Jump to search
This is the Ruleset FixEscapes of the Xybot script
<source lang=perl>
sub begin {
my $me = shift; Data::Primitive->setCreator("FixEscapes"); Data::Primitive->setComment('Fixing falsely escaped entities');
}
sub process {
my ($me, $obj) = @_;
my $resultstr = ""; my $work = $obj; my $clone = undef; my $k; my $v;
while (($k,$v) = each(%{$work->{"tags"}})) { my $key = $k; my $val = $v; $key =~ s/^\s*(.*?)\s*$/$1/; # remove surrounding space in keys $val =~ s/^\s*(.*?)\s*$/$1/; # remove surrounding space in values $val =~ s/\\{2,}/\\/g; # remove falsely escaped backslashes (backslash has also to be escaped in perl) $val =~ s/\\+s/;/g; # remove falsely escaped semicolons (backslash has also to be escaped in perl) $val =~ s/</</g; # remove falsely escaped lesser than $val =~ s/>/>/g; # remove falsely escaped greater than $val =~ s/&/&/g; # remove falsely escaped ampersands $val =~ s/"/"/g; # remove falsely excaped quotation marks $val =~ s/'/'/g; # remove falsely excaped apostrophe marks
if ($val =~ /&(\w+?);/) { $obj->log(ref($obj), $work->{"id"}, " NOTICE found html-entity '&".$1.";'", ""); }
# delete keys with empty values if ($val eq "") { $clone=$work->clone() unless defined($clone); delete $clone->{"tags"}->{$k}; $resultstr .= sprintf " - deleting tag '%s=%s'", $k, $v, $work=$clone; } elsif ($k ne $key && $v ne $val) { $clone=$work->clone() unless defined($clone); delete $clone->{"tags"}->{$k}; $clone->{"tags"}->{$key} = $val; $resultstr .= sprintf " - modifying tag '%s=%s' to '%s=%s'", $k, $v, $key, $val; $work=$clone; } elsif ($k ne $key) { $clone=$work->clone() unless defined($clone); delete $clone->{"tags"}->{$k}; $clone->{"tags"}->{$key} = $v; $resultstr .= sprintf " - modifying key '%s' to '%s' value '%s'", $k, $key, $v; $work=$clone; } elsif ($v ne $val) { $clone=$work->clone() unless defined($clone); $clone->{"tags"}->{$k} = $val; $resultstr .= sprintf " - key '%s' modifying value '%s' to '%s'", $k, $v, $val; $work=$clone; } } $obj->log(ref($obj), $work->{"id"}, $resultstr, $obj->update($clone, $me)) if (defined($clone));
}