smiley: Detect smileys inside pre and tags, and do not expand.
parent
628467125c
commit
44824dba1b
|
@ -34,13 +34,47 @@ sub build_regexp () { #{{{
|
||||||
|
|
||||||
sub filter (@) { #{{{
|
sub filter (@) { #{{{
|
||||||
my %params=@_;
|
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};
|
build_regexp() unless defined $smiley_regexp;
|
||||||
|
|
||||||
|
$_=$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
|
1
|
||||||
|
|
|
@ -55,6 +55,7 @@ ikiwiki (2.41) UNRELEASED; urgency=low
|
||||||
* Store userinfo in network byte order for easy portability.
|
* Store userinfo in network byte order for easy portability.
|
||||||
(Old files will be automatically converted.)
|
(Old files will be automatically converted.)
|
||||||
* Close meta tag for redir properly.
|
* 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
|
-- 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
|
`<img>` tags is not allowed within a `<pre>` block. Maybe the smiley
|
||||||
plugin should be disabled on [[RecentChanges]]?
|
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.
|
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
|
Note that the above patch for the redirect tag is still applicable and
|
||||||
the smiley issue remains open. --[[JasonBlevins]]
|
the smiley issue remains open. --[[JasonBlevins]]
|
||||||
|
|
||||||
|
> This bug is [[done]], all issues are fixed. --[[Joey]]
|
||||||
|
|
||||||
[[tag patch]]
|
[[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
|
> Looks similar to [[wiki_links_still_processed_inside_code_blocks]]; in both
|
||||||
> cases, substitution happens in a code block, which it shouldn't.
|
> cases, substitution happens in a code block, which it shouldn't.
|
||||||
> --[[JoshTriplett]]
|
> --[[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.
|
> In the case of either bug, no, I don't have an idea of a solution yet.
|
||||||
> --[[Joey]]
|
> --[[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