https://bugzilla.wikimedia.org/show_bug.cgi?id=31374

--- Comment #4 from Brad Jorsch <[email protected]> 2011-10-05 
18:25:02 UTC ---
Ok, I think I see what is happening here.

The parser finds a <ref> tag. It calls the hook registered by Cite.php.
Cite.php generates wikitext something like this to output to the page in place
of a <ref> tag:

    <sup id="cite_ref-1"
class="reference">[[#cite_note-1|<span><nowiki>[</nowiki></span>1<span><nowiki>]</nowiki></span>]]</sup>

It passes this to the parser's recursiveTagParse. The parser returns something
like this:

    <sup id="cite_ref-1" class="reference"><a
href="#cite_note-1"><span>�UNIQ-1�</span>1<span>�UNIQ-2�</span></a></sup>

Note it replaced the <nowiki> tags with UNIQ markers. Cite.php returns this
string from its hook function. The parser stores that as another UNIQ marker
(call it �UNIQ-3�), and outputs the UNIQ marker to the page in place of the
<ref> tag.

Then, later on, the parser unstrips all the uniq markers for output.

In r82644, does this in a loop: replace all UNIQ markers in the text and repeat
until the text stops changing. So in this example, it replaces �UNIQ-3� with
text that contains �UNIQ-1� and �UNIQ-2�, and then in the second pass it
replaces �UNIQ-1� and �UNIQ-2�, and then in the third pass it makes no changes
and stops.

In r82645, it does *not* loop. So in this example, it replaces �UNIQ-3� with
text that contains �UNIQ-1� and �UNIQ-2� and stops there, leaving those markers
in the page output.


I can think of two possible fixes: have StripState's unstripGeneral(),
unstripNowiki(), and unstripBoth() loop as the old version did, or have
StripState::addItem() call unstripBoth() on $value before storing it. It also
looks like merge() needs to be adjusted to process the saved values, to unstrip
them in the latter solution or to rename any existing markers in the former. In
the former solution getSubState() also needs to be changed, otherwise it will
keep �UNIQ-3� in our example and forget about �UNIQ-1� and �UNIQ-2�.

-- 
Configure bugmail: https://bugzilla.wikimedia.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
You are on the CC list for the bug.
_______________________________________________
Wikibugs-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikibugs-l

Reply via email to