Changelog¶
v0.4.4¶
Released December 30, 2016 (changes):
- Added support for Python 3.6.
- Fixed parsing bugs involving:
- wikitables nested in templates;
- wikitable error recovery when unable to recurse;
- templates nested in template parameters before other parameters.
- Fixed parsing file-like objects.
- Made builds deterministic.
- Documented caveats.
v0.4.3¶
Released October 29, 2015 (changes):
- Added Windows binaries for Python 3.5.
- Fixed edge cases involving wikilinks inside of external links and vice versa.
- Fixed a C tokenizer crash when a keyboard interrupt happens while parsing.
v0.4.2¶
Released July 30, 2015 (changes):
- Fixed setup script not including header files in releases.
- Fixed Windows binary uploads.
v0.4.1¶
Released July 30, 2015 (changes):
- The process for building Windows binaries has been fixed, and these should be distributed along with new releases. Windows users can now take advantage of C speedups without having a compiler of their own.
- Added support for Python 3.5.
<
and>
are now disallowed in wikilink titles and template names. This includes when denoting tags, but not comments.- Fixed the behavior of preserve_spacing in
Template.add()
and keep_field inTemplate.remove()
on parameters with hidden keys. - Removed
_ListProxy.detach()
.SmartList
s now use weak references and their children are garbage-collected properly. - Fixed parser bugs involving:
- templates with completely blank names;
- templates with newlines and comments.
- Heavy refactoring and fixes to the C tokenizer, including:
- corrected a design flaw in text handling, allowing for substantial speed improvements when parsing long strings of plain text;
- implemented new Python 3.3 PEP 393 Unicode APIs.
- Fixed various bugs in
SmartList
, including one that was causing memory issues on 64-bit builds of Python 2 on Windows. - Fixed some bugs in the release scripts.
v0.4¶
Released May 23, 2015 (changes):
- The parser now falls back on pure Python mode if C extensions cannot be built. This fixes an issue that prevented some Windows users from installing the parser.
- Added support for parsing wikicode tables (patches by David Winegar).
- Added a script to test for memory leaks in
scripts/memtest.py
. - Added a script to do releases in
scripts/release.sh
. - skip_style_tags can now be passed to
mwparserfromhell.parse()
(previously, onlyParser.parse()
allowed it). - The recursive argument to
Wikicode's
filter()
methods now accepts a third option,RECURSE_OTHERS
, which recurses over all children except instances of forcetype (for example,code.filter_templates(code.RECURSE_OTHERS)
returns all un-nested templates). - The parser now understands HTML tag attributes quoted with single quotes.
When setting a tag attribute’s value, quotes will be added if necessary. As
part of this,
Attribute
‘squoted
attribute has been changed toquotes
, and is now either a string orNone
. - Calling
Template.remove()
with aParameter
object that is not part of the template now raisesValueError
instead of doing nothing. Parameter
s with non-integer keys can no longer be created with showkey=False, nor have the value of this attribute be set to False later._ListProxy.destroy()
has been changed to_ListProxy.detach()
, and now works in a more useful way.- If something goes wrong while parsing,
ParserError
will now be raised. Previously, the parser would produce an unclearBadRoute
exception or allow an incorrect node tree to be build. - Fixed parser bugs involving:
- nested tags;
- comments in template names;
- tags inside of
<nowiki>
tags.
- Added tests to ensure that parsed trees convert back to wikicode without unintentional modifications.
- Added support for a
NOWEB
environment variable, which disables a unit test that makes a web call. - Test coverage has been improved, and some minor related bugs have been fixed.
- Updated and fixed some documentation.
v0.3.3¶
Released April 22, 2014 (changes):
- Added support for Python 2.6 and 3.4.
Template.has()
is now passed ignore_empty=False by default instead of True. This fixes a bug when adding parameters to templates with empty fields, and is a breaking change if you rely on the default behavior.- The matches argument of
Wikicode's
filter()
methods now accepts a function (taking one argument, aNode
, and returning a bool) in addition to a regex. - Re-added flat argument to
Wikicode.get_sections()
, fixed the order in which it returns sections, and made it faster. Wikicode.matches()
now accepts a tuple or list of strings/Wikicode
objects instead of just a single string orWikicode
.- Given the frequency of issues with the (admittedly insufficient) tag parser,
there’s a temporary skip_style_tags argument to
parse()
that ignores''
and'''
until these issues are corrected. - Fixed a parser bug involving nested wikilinks and external links.
- C code cleanup and speed improvements.
v0.3.2¶
Released September 1, 2013 (changes):
- Added support for Python 3.2 (along with current support for 3.3 and 2.7).
- Renamed
Template.remove()
‘s first argument from name to param, which now acceptsParameter
objects in addition to parameter name strings.
v0.3.1¶
Released August 29, 2013 (changes):
- Fixed a parser bug involving URLs nested inside other markup.
- Fixed some typos.
v0.3¶
Released August 24, 2013 (changes):
- Added complete support for HTML
Tags
, including forms like<ref>foo</ref>
,<ref name="bar"/>
, and wiki-markup tags like bold ('''
), italics (''
), and lists (*
,#
,;
and:
). - Added support for
ExternalLink
s (http://example.com/
and[http://example.com/ Example]
). Wikicode's
filter()
methods are now passed recursive=True by default instead of False. This is a breaking change if you rely on any filter() methods being non-recursive by default.- Added a
matches()
method toWikicode
for page/template name comparisons. - The obj param of
Wikicode.insert_before()
,insert_after()
,replace()
, andremove()
now acceptsWikicode
objects and strings representing parts of wikitext, instead of just nodes. These methods also make all possible substitutions instead of just one. - Renamed
Template.has_param()
tohas()
for consistency withTemplate
‘s other methods;has_param()
is now an alias. - The C tokenizer extension now works on Python 3 in addition to Python 2.7.
- Various bugfixes, internal changes, and cleanup.
v0.2¶
Released June 20, 2013 (changes):
- The parser now fully supports Python 3 in addition to Python 2.7.
- Added a C tokenizer extension that is significantly faster than its Python
equivalent. It is enabled by default (if available) and can be toggled by
setting
mwparserfromhell.parser.use_c
to a boolean value. - Added a complete set of unit tests covering parsing and wikicode manipulation.
- Renamed
filter_links()
tofilter_wikilinks()
(applies toifilter()
as well). - Added filter methods for
Arguments
,Comments
,Headings
, andHTMLEntities
. - Added before param to
Template.add()
; renamed force_nonconformity to preserve_spacing. - Added include_lead param to
Wikicode.get_sections()
. - Removed flat param from
get_sections()
. - Removed force_no_field param from
Template.remove()
. - Added support for Travis CI.
- Added note about Windows build issue in the README.
- The tokenizer will limit itself to a realistic recursion depth to prevent errors and unreasonably long parse times.
- Fixed how some nodes’ attribute setters handle input.
- Fixed multiple bugs in the tokenizer’s handling of invalid markup.
- Fixed bugs in the implementation of
SmartList
andStringMixIn
. - Fixed some broken example code in the README; other copyedits.
- Other bugfixes and code cleanup.
v0.1.1¶
Released September 21, 2012 (changes):
- Added support for
Comments
(<!-- foo -->
) andWikilinks
([[foo]]
). - Added corresponding
ifilter_links()
andfilter_links()
methods toWikicode
. - Fixed a bug when parsing incomplete templates.
- Fixed
strip_code()
to affect the contents of headings. - Various copyedits in documentation and comments.