various fixes and simplifications
parent
be4e3ad587
commit
88b5a0ece5
|
@ -41,36 +41,32 @@ sub filter (@) { #{{{
|
|||
return $_ unless length $smiley_regexp;
|
||||
|
||||
MATCH: while (m{(?:^|(?<=\s))(\\?)$smiley_regexp(?:(?=\s)|$)}g) {
|
||||
my $escape=$1;
|
||||
my $smiley=$2;
|
||||
|
||||
# Smilies are not allowed inside <pre> or <code>.
|
||||
# For each tag in turn, match forward to find <tag> or
|
||||
# </tag>. If it's </tag>, then the smiley is inside the
|
||||
# tag, and is not expanded. If it's <tag>, the smiley is
|
||||
# outside the block.
|
||||
# For each tag in turn, match forward to find the next <tag>
|
||||
# or </tag> after the smiley.
|
||||
my $pos=pos;
|
||||
foreach my $tag ("pre", "code") {
|
||||
if (m/.*?<(\/)?\s*$tag\s*>/isg) {
|
||||
if (defined $1) {
|
||||
# Inside tag, so do nothing.
|
||||
# (Smiley hunting will continue after
|
||||
# the tag.)
|
||||
next MATCH;
|
||||
}
|
||||
else {
|
||||
# Reset pos back to where it was before
|
||||
# this test.
|
||||
pos=$pos;
|
||||
}
|
||||
if (m/.*?<(\/)?\s*$tag\s*>/isg && defined $1) {
|
||||
# </tag> found first, so the smiley is
|
||||
# inside the tag, so do not expand it.
|
||||
next MATCH;
|
||||
}
|
||||
# Reset pos back to where it was before this test.
|
||||
pos=$pos;
|
||||
}
|
||||
|
||||
if ($1) {
|
||||
if ($escape) {
|
||||
# Remove escape.
|
||||
substr($_, $-[1], 1)="";
|
||||
}
|
||||
else {
|
||||
# Replace the smiley with its expanded value.
|
||||
substr($_, $-[2], length($2))=
|
||||
htmllink($params{page}, $params{destpage}, $smileys{$2}, linktext => $2);
|
||||
substr($_, $-[2], length($smiley))=
|
||||
htmllink($params{page}, $params{destpage},
|
||||
$smileys{$smiley}, linktext => $smiley);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue