smiley: Detect smileys inside pre and tags, and do not expand.
parent
628467125c
commit
44824dba1b
|
@ -36,11 +36,45 @@ sub filter (@) { #{{{
|
|||
my %params=@_;
|
||||
|
||||
build_regexp() unless defined $smiley_regexp;
|
||||
$params{content} =~ s{(?:^|(?<=\s))(\\?)$smiley_regexp(?:(?=\s)|$)}{
|
||||
$1 ? $2 : htmllink($params{page}, $params{destpage}, $smileys{$2}, linktext => $2)
|
||||
}egs if length $smiley_regexp;
|
||||
|
||||
return $params{content};
|
||||
$_=$params{content};
|
||||
return $_ unless length $smiley_regexp;
|
||||
|
||||
MATCH: while (m{(?:^|(?<=\s))(\\?)$smiley_regexp(?:(?=\s)|$)}g) {
|
||||
# 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.
|
||||
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 ($1) {
|
||||
# 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);
|
||||
}
|
||||
}
|
||||
|
||||
return $_;
|
||||
} # }}}
|
||||
|
||||
1
|
||||
|
|
|
@ -55,6 +55,7 @@ ikiwiki (2.41) UNRELEASED; urgency=low
|
|||
* Store userinfo in network byte order for easy portability.
|
||||
(Old files will be automatically converted.)
|
||||
* Close meta tag for redir properly.
|
||||
* smiley: Detect smileys inside pre and tags, and do not expand.
|
||||
|
||||
-- martin f. krafft <madduck@debian.org> Sun, 02 Mar 2008 17:46:38 +0100
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ plugin which end up wrapped in a `<pre>` tag in the inline diff output.
|
|||
`<img>` tags is not allowed within a `<pre>` block. Maybe the smiley
|
||||
plugin should be disabled on [[RecentChanges]]?
|
||||
|
||||
> See [[Smileys_in_the_block_code]] --[[Joey]]
|
||||
> See [[Smileys_in_the_block_code]], which is now fixed. --[[Joey]]
|
||||
|
||||
See the [validator output][validate] for more details.
|
||||
|
||||
|
@ -51,4 +51,6 @@ after installing the most recent version of Text::Markdown from CPAN.
|
|||
Note that the above patch for the redirect tag is still applicable and
|
||||
the smiley issue remains open. --[[JasonBlevins]]
|
||||
|
||||
> This bug is [[done]], all issues are fixed. --[[Joey]]
|
||||
|
||||
[[tag patch]]
|
||||
|
|
|
@ -29,3 +29,6 @@ BTW, maybe converting smileys in the block code should be disabled at all?
|
|||
> Looks similar to [[wiki_links_still_processed_inside_code_blocks]]; in both
|
||||
> cases, substitution happens in a code block, which it shouldn't.
|
||||
> --[[JoshTriplett]]
|
||||
|
||||
> [[fixed|done]], via some super duper regexp fun to notice if the smiley
|
||||
> is inside a pre or code tag. --[[Joey]]
|
||||
|
|
|
@ -41,3 +41,7 @@ and have it render like:
|
|||
>
|
||||
> In the case of either bug, no, I don't have an idea of a solution yet.
|
||||
> --[[Joey]]
|
||||
|
||||
> I've now solved a similar bug involving the smiley plugin. The code used
|
||||
> there should give some strong hints how to fix this bug, though I haven't
|
||||
> tried to apply the method yet. --[[Joey]]
|
||||
|
|
Loading…
Reference in New Issue