diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-03-21 02:55:14 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-03-21 02:55:14 -0400 |
commit | 88b5a0ece54c63129733adc2a4bb9c89df46a5f0 (patch) | |
tree | 62d378a347793051df467452372998605044b51d | |
parent | be4e3ad587dff1dbe9eaa43df7526ea4d5e7631b (diff) |
various fixes and simplifications
-rw-r--r-- | IkiWiki/Plugin/smiley.pm | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/IkiWiki/Plugin/smiley.pm b/IkiWiki/Plugin/smiley.pm index 7e0b54499..fcf3048b2 100644 --- a/IkiWiki/Plugin/smiley.pm +++ b/IkiWiki/Plugin/smiley.pm @@ -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); } } |