Skip to content

Releases: tox-dev/turbohtml

v1.4.0

Choose a tag to compare

@gaborbernat gaborbernat released this 11 Jul 20:33

What's Changed

Full Changelog: 1.3.1...1.4.0

v1.3.1

Choose a tag to compare

@gaborbernat gaborbernat released this 10 Jul 18:28

What's Changed

  • 🔧 chore(meta): enrich PyPI links and issue templates by @gaborbernat in #633

Full Changelog: 1.3.0...1.3.1

v1.3.0

Choose a tag to compare

@gaborbernat gaborbernat released this 10 Jul 00:39

What's Changed

  • ✨ feat(pypy): run the C core on PyPy, publish 3.10 + 3.11 wheels by @gaborbernat in #623
  • ⚡ perf(encoding): inline the decoder and copy ASCII runs past it by @gaborbernat in #624
  • 🐛 fix(detect): stream the encoding detector by @gaborbernat in #628
  • 🐛 fix(encoding, tokenizer): honor a late , and report every parse error by @gaborbernat in #626
  • 🐛 fix(stream): report the parse errors a streamed document raises by @gaborbernat in #631
  • 🐛 fix(detect): restore chardetng's TLD hint by @gaborbernat in #632

Full Changelog: 1.2.0...1.3.0

v1.2.0

Choose a tag to compare

@gaborbernat gaborbernat released this 09 Jul 05:12

What's Changed

Full Changelog: 1.1.1...1.2.0

v1.1.1

Choose a tag to compare

@gaborbernat gaborbernat released this 08 Jul 20:06

What's Changed

  • 🔧 chore: correct package metadata and widen discoverability by @gaborbernat in #616

Full Changelog: 1.1.0...1.1.1

v1.1.0

Choose a tag to compare

@gaborbernat gaborbernat released this 08 Jul 18:16

What's Changed

Full Changelog: 1.0.0...1.1.0

v1.0.0

Choose a tag to compare

@gaborbernat gaborbernat released this 06 Jul 22:28
0c1279a

What's Changed

  • ✨ feat: a safe-string for HTML, a markupsafe drop-in by @gaborbernat in #28
  • ✨ feat: linkify() — URL/email auto-linking, a bleach successor by @gaborbernat in #29
  • ✨ feat: an HTML sanitizer (clean()), faster than nh3, a bleach successor by @gaborbernat in #30
  • 🐛 fix: detection and URL-scheme bugs found running competitors' test suites by @gaborbernat in #31
  • ⚡ perf: faster serialize and data-state scan by @gaborbernat in #73
  • 🐛 fix(linkify): keep underscore in host labels by @gaborbernat in #100
  • 🐛 fix(treebuilder): keep foreign

    inside its root by @gaborbernat in #101
  • 🐛 fix(serialize): emit frame as a void element by @gaborbernat in #102
  • 🐛 fix(treebuilder): ignore stray end tag before by @gaborbernat in #103
  • 🐛 fix(sanitizer): drop URL attr when a duplicate scheme is unsafe by @gaborbernat in #104
  • 🐛 fix(tokenizer): drop duplicate attribute names per WHATWG by @gaborbernat in #105
  • 🐛 fix(treebuilder): synthesize head/body for html fragments by @gaborbernat in #108
  • 🐛 fix(treebuilder): restore table mode after fostered rawtext by @gaborbernat in #110
  • 🐛 fix(treebuilder): adjust MathML definitionURL attribute name by @gaborbernat in #107
  • 🐛 fix(serialize): walk trees iteratively to avoid stack overflow by @gaborbernat in #106
  • 🐛 fix(parse): keep head mode on redundant html/duplicate head by @gaborbernat in #111
  • 🐛 fix(treebuilder): honor foreign scope in adoption agency by @gaborbernat in #112
  • 🐛 fix(tokenizer): report nameless DOCTYPE name as None by @gaborbernat in #115
  • 🐛 fix(treebuilder): case-adjust SVG attribute names by @gaborbernat in #113
  • 🐛 fix(tree): guard descendants walk against a detached cursor by @gaborbernat in #117
  • 🐛 fix(tokenizer): reclaim consumed input in streaming feed() by @gaborbernat in #114
  • 🐛 fix(treebuilder): ignore stray DOCTYPE after initial mode by @gaborbernat in #118
  • 🐛 fix(encoding): complete the WHATWG charset-label table by @gaborbernat in #121
  • 🐛 fix(tree): pickle elements with parser-only tag names by @gaborbernat in #119
  • 🐛 fix(treebuilder): process stray in colgroup via in-body by @gaborbernat in #123
  • 🐛 fix(select): decode CSS escape sequences in identifiers by @gaborbernat in #122
  • 🐛 fix(tokenizer): reject Tokenizer constructor arguments by @gaborbernat in #124
  • 🐛 fix(linkify): end a URL at Unicode whitespace by @gaborbernat in #120
  • 🐛 fix(treebuilder): keep NUL-adjacent table whitespace inside by @gaborbernat in #126
  • 🐛 fix(treebuilder): foster out of a table-section fragment by @gaborbernat in #135
  • 🐛 fix: keep a trailing asterisk in a linkified URL by @gaborbernat in #134
  • 🐛 fix: report missing DOCTYPE identifier as None on the node by @gaborbernat in #133
  • 🐛 fix: decode gbk label with gb18030 decoder by @gaborbernat in #132
  • 🐛 fix: raise TypeError for non-mapping Element attrs by @gaborbernat in #131
  • 🐛 fix: report exact-case WHATWG name for legacy encodings by @gaborbernat in #129
  • 🐛 fix: accept slash separator after meta in encoding prescan by @gaborbernat in #128
  • 🐛 fix: require str for parse_fragment context and Token.attr name by @gaborbernat in #127
  • 🐛 fix: declare _reconstruct pickle hook in type stub by @gaborbernat in #130
  • 🐛 fix(select): apply HTML case-insensitive attribute set by @gaborbernat in #125
  • 🐛 fix: keep foreign element namespace across a pickle round-trip by @gaborbernat in #139
  • 🐛 fix: match custom-element type selector case-insensitively by @gaborbernat in #137
  • 🐛 fix(encoding): cap the meta charset prescan at 1024 bytes by @gaborbernat in #136
  • 🐛 fix(selectors): accept namespace-qualified type selectors by @gaborbernat in #141
  • 🐛 fix: require exact annotation-xml encoding for integration point by @gaborbernat in #142
  • 🐛 fix(treebuilder): keep foreign
    inside its root by @gaborbernat in #143
  • 🐛 fix: keep raw-text serialization across construct and pickle by @gaborbernat in #145
  • 🐛 fix: put plain xmlns on a foreign element in the xmlns namespace by @gaborbernat in #140
  • 🐛 fix: pop open optgroup/option in a select-context fragment by @gaborbernat in #147
  • 🐛 fix(sanitizer): always neutralize plaintext by @gaborbernat in #146
  • 🐛 fix(encoding): add the WHATWG replacement decoder by @gaborbernat in #148
  • 🐛 fix(sanitizer): keep allowlisted SVG/MathML elements by @gaborbernat in #144
  • 🐛 fix: keep after-head whitespace under html, not in body by @gaborbernat in #150
  • ✨ feat(select): tree-structural pseudo-classes by @gaborbernat in #151
  • 🐛 fix: report a valueless attribute as the empty string by @gaborbernat in #153
  • 🐛 fix: pop open select for a keygen start tag in select mode by @gaborbernat in #154
  • 🐛 fix: pop open option before hr in a select-context fragment by @gaborbernat in #149
  • 🐛 fix(tokenizer): lock shared Tokenizer for free-threaded safety by @gaborbernat in #152
  • 🐛 fix(parse): template fragment enters in-template mode by @gaborbernat in #155
  • 🐛 fix(treebuilder): pop select for a table tag in select-in-table by @gaborbernat in #156
  • 🐛 fix: lock the shared node tree for free-threaded safety by @gaborbernat in #157
  • 🧪 test(freethread): stress, GIL guard, and ThreadSanitizer by @gaborbernat in #159
  • ✨ feat(select): :is(), :where(), and :has() pseudo-classes by @gaborbernat in #158
  • ⚡ perf(select): index by subject atom and cache compiled selectors by @gaborbernat in #162
  • 🧪 test(treebuilder): lock foreign

    /
    containment by @gaborbernat in #184
  • 🐛 fix(select): fold class/ID case in quirks mode by @gaborbernat in #185
  • ✨ feat(select): support the :not() negation pseudo-class by @gaborbernat in #188
  • 🐛 fix(select): match whitespace-only elements with :empty by @gaborbernat in #187
  • 🐛 fix(parser): treat empty DOCTYPE system id as quirks by @gaborbernat in #190
  • ✨ feat(xpath): native XPath 1.0 engine by @gaborbernat in #186
  • ✨ feat(select): support :scope, UI/form, :lang() and :dir() pseudo-classes by @gaborbernat in #193
  • 🐛 fix(select): make :is()/:where() forgiving selector lists by @gaborbernat in #195
  • ✨ feat(select): support :nth-child(An+B of S) selector lists by @gaborbernat in #198
  • ✨ feat(serializer): round-trip-safe HTML minify mode by @gaborbernat in #196
  • ✨ feat(compat): html.parser-compatible callback adapter by @gaborbernat in #199
  • ✨ feat(xpath): complete lxml/parsel call-option parity by @gaborbernat in #194
  • ✨ feat(serialize): to_markdown and to_text exporters with full markdownify/html2text/inscriptis parity by @gaborbernat in #191
  • 📝 docs(migration): note the encoding-detection boundary by @gaborbernat in #202
  • 📝 docs: compare and migrate resiliparse, note gumbo by @gaborbernat in #205
  • 📝 docs: compare and migrate lxml-html-clean & html-sanitizer by @gaborbernat in https://gi...
Read more

v0.4.0

Choose a tag to compare

@gaborbernat gaborbernat released this 16 Jun 18:53

What's Changed

  • ✨ feat: an editable tree, complete node types, migration guides by @gaborbernat in #27

Full Changelog: 0.3.0...0.4.0

v0.3.0

Choose a tag to compare

@gaborbernat gaborbernat released this 16 Jun 01:28

What's Changed

  • ✨ feat: parse HTML into a navigable tree by @gaborbernat in #12
  • 📝 docs: benchmark parse() against other tree builders by @gaborbernat in #13
  • ✨ feat: a typed query and serialization layer for parsed HTML by @gaborbernat in #26

New Contributors

Full Changelog: 0.2.0...0.3.0

v0.2.0

Choose a tag to compare

@gaborbernat gaborbernat released this 11 Jun 21:45

What's Changed

  • Fix links: gaborbernat -> tox-dev by @hugovk in #5
  • ✨ feat: WHATWG-conformant streaming HTML tokenizer by @gaborbernat in #6
  • ⚡ perf: SIMD escape scan and span-hopping unescape by @gaborbernat in #7

New Contributors

  • @hugovk made their first contribution in #5

Full Changelog: 0.1.1...0.2.0