This regression seems more severe than the bug the commit was
attempting to fix (incorrect parsing of nested wikilinks in normal
links), so that bug is reintroduced until localization-aware parsing
that allows us to detect file links is added.
This commit partially reverts fac60dee48
.
tags/v0.6.4
@@ -1,7 +1,10 @@ | |||||
v0.7 (unreleased): | |||||
v0.6.4 (unreleased): | |||||
- Dropped support for end-of-life Python 3.5. | - Dropped support for end-of-life Python 3.5. | ||||
- Added support for Python 3.10. (#278) | - Added support for Python 3.10. (#278) | ||||
- Fixed a regression in v0.6.2 that broke parsing of nested wikilinks in file | |||||
captions. For now, the parser will interpret nested wikilinks in normal links | |||||
as well, even though this differs from MediaWiki. (#270) | |||||
v0.6.3 (released September 2, 2021): | v0.6.3 (released September 2, 2021): | ||||
@@ -1,14 +1,19 @@ | |||||
Changelog | Changelog | ||||
========= | ========= | ||||
v0.7 | |||||
v0.6.4 | |||||
------ | |||||
Unreleased | Unreleased | ||||
(`changes <https://github.com/earwig/mwparserfromhell/compare/v0.6.3...develop>`__): | (`changes <https://github.com/earwig/mwparserfromhell/compare/v0.6.3...develop>`__): | ||||
- Dropped support for end-of-life Python 3.5. | |||||
- Added support for Python 3.10. | - Added support for Python 3.10. | ||||
(`#278 <https://github.com/earwig/mwparserfromhell/issues/278>`_) | (`#278 <https://github.com/earwig/mwparserfromhell/issues/278>`_) | ||||
- Fixed a regression in v0.6.2 that broke parsing of nested wikilinks in file | |||||
captions. For now, the parser will handle interpret wikilinks in normal links | |||||
as well, even though this differs from MediaWiki. | |||||
(`#270 <https://github.com/earwig/mwparserfromhell/issues/270>`_) | |||||
v0.6.3 | v0.6.3 | ||||
------ | ------ | ||||
@@ -51,7 +51,8 @@ static int Tokenizer_parse_tag(Tokenizer *); | |||||
/* | /* | ||||
Determine whether the given code point is a marker. | Determine whether the given code point is a marker. | ||||
*/ | */ | ||||
static int is_marker(Py_UCS4 this) | |||||
static int | |||||
is_marker(Py_UCS4 this) | |||||
{ | { | ||||
int i; | int i; | ||||
@@ -2929,9 +2930,10 @@ Tokenizer_parse(Tokenizer *self, uint64_t context, int push) | |||||
return NULL; | return NULL; | ||||
} | } | ||||
} else if (this == next && next == '[' && Tokenizer_CAN_RECURSE(self)) { | } else if (this == next && next == '[' && Tokenizer_CAN_RECURSE(self)) { | ||||
if (this_context & LC_WIKILINK_TEXT) { | |||||
return Tokenizer_fail_route(self); | |||||
} | |||||
// TODO: Only do this if not in a file context: | |||||
// if (this_context & LC_WIKILINK_TEXT) { | |||||
// return Tokenizer_fail_route(self); | |||||
// } | |||||
if (!(this_context & AGG_NO_WIKILINKS)) { | if (!(this_context & AGG_NO_WIKILINKS)) { | ||||
if (Tokenizer_parse_wikilink(self)) { | if (Tokenizer_parse_wikilink(self)) { | ||||
return NULL; | return NULL; | ||||
@@ -1406,8 +1406,9 @@ class Tokenizer: | |||||
return self._handle_argument_end() | return self._handle_argument_end() | ||||
self._emit_text("}") | self._emit_text("}") | ||||
elif this == nxt == "[" and self._can_recurse(): | elif this == nxt == "[" and self._can_recurse(): | ||||
if self._context & contexts.WIKILINK_TEXT: | |||||
self._fail_route() | |||||
# TODO: Only do this if not in a file context: | |||||
# if self._context & contexts.WIKILINK_TEXT: | |||||
# self._fail_route() | |||||
if not self._context & contexts.NO_WIKILINKS: | if not self._context & contexts.NO_WIKILINKS: | ||||
self._parse_wikilink() | self._parse_wikilink() | ||||
else: | else: | ||||
@@ -54,6 +54,20 @@ output: [WikilinkOpen(), Text(text="foo"), WikilinkSeparator(), Text(text="bar[b | |||||
--- | --- | ||||
name: nested | |||||
label: a wikilink nested within another | |||||
input: "[[file:foo|[[bar]]]]" | |||||
output: [WikilinkOpen(), Text(text="file:foo"), WikilinkSeparator(), WikilinkOpen(), Text(text="bar"), WikilinkClose(), WikilinkClose()] | |||||
--- | |||||
name: nested_padding | |||||
label: a wikilink nested within another, separated by other data | |||||
input: "[[file:foo|a[[b]]c]]" | |||||
output: [WikilinkOpen(), Text(text="file:foo"), WikilinkSeparator(), Text(text="a"), WikilinkOpen(), Text(text="b"), WikilinkClose(), Text(text="c"), WikilinkClose()] | |||||
--- | |||||
name: invalid_newline | name: invalid_newline | ||||
label: invalid wikilink: newline as only content | label: invalid wikilink: newline as only content | ||||
input: "[[\n]]" | input: "[[\n]]" | ||||
@@ -89,20 +103,6 @@ output: [Text(text="[[foo[bar]]")] | |||||
--- | --- | ||||
name: invalid_nested_text | |||||
label: invalid wikilink: nested within the text of another | |||||
input: "[[foo|[[bar]]]]" | |||||
output: [Text(text="[[foo|"), WikilinkOpen(), Text(text="bar"), WikilinkClose(), Text(text="]]")] | |||||
name: invalid_nested_text_2 | |||||
label: invalid wikilink: a wikilink nested within the text of another, with additional content | |||||
input: "[[foo|a[[b]]c]]" | |||||
output: [Text(text="[[foo|a"), WikilinkOpen(), Text(text="b"), WikilinkClose(), Text(text="c]]")] | |||||
name: invalid_nested_title | name: invalid_nested_title | ||||
label: invalid wikilink: nested within the title of another | label: invalid wikilink: nested within the title of another | ||||
input: "[[foo[[bar]]]]" | input: "[[foo[[bar]]]]" | ||||