= 4.2.1 (Unreleased) = * Gave new_string() the ability to create subclasses of NavigableString. [bug=1181986] * Fixed another bug by which the html5lib tree builder could create a disconnected tree. [bug=1182089] * Fixed test failures when lxml is not installed. [bug=1181589] * html5lib now supports Python 3. Fixed some Python 2-specific code in the html5lib test suite. [bug=1181624] = 4.2.0 (20130514) = * The Tag.select() method now supports a much wider variety of CSS selectors. - Added support for the adjacent sibling combinator (+) and the general sibling combinator (~). Tests by "liquider". [bug=1082144] - The combinators (>, +, and ~) can now combine with any supported selector, not just one that selects based on tag name. - Added limited support for the "nth-of-type" pseudo-class. Code by Sven Slootweg. [bug=1109952] * The BeautifulSoup class is now aliased to "_s" and "_soup", making it quicker to type the import statement in an interactive session: from bs4 import _s or from bs4 import _soup The alias may change in the future, so don't use this in code you're going to run more than once. * Added the 'diagnose' submodule, which includes several useful functions for reporting problems and doing tech support. - diagnose(data) tries the given markup on every installed parser, reporting exceptions and displaying successes. If a parser is not installed, diagnose() mentions this fact. - lxml_trace(data, html=True) runs the given markup through lxml's XML parser or HTML parser, and prints out the parser events as they happen. This helps you quickly determine whether a given problem occurs in lxml code or Beautiful Soup code. - htmlparser_trace(data) is the same thing, but for Python's built-in HTMLParser class. * In an HTML document, the contents of a