Description
This is the initial release. Things should be somewhat stable, but still do be careful.
What's Changed
- Topic/stacked input by @lestrrat in #3
- Remove github.com/pkg/errors by @lestrrat in #4
- Update go.mod by @lestrrat in #5
- Fix parameter entity by @lestrrat in #6
- Tweak parserstate by @lestrrat in #7
- linting should match xmllint by @lestrrat in #8
- Test cleanup by @lestrrat in #9
- Lint by @lestrrat in #10
- Add .github by @lestrrat in #11
- Test libxml2 compat by @lestrrat in #14
- Implement XPath 1.0 engine by @lestrrat in #15
- Implement XInclude by @lestrrat in #16
- Implement XPointer and wire into XInclude by @lestrrat in #17
- Fix XInclude xml:base ancestor resolution and text char validation by @lestrrat in #18
- Fix CI workflow to trigger on all pushes by @lestrrat in #20
- Implement XSD validation Phase 1 (structural) by @lestrrat in #19
- Worktree fix ci workflow by @lestrrat in #21
- Implement external DTD loading for XInclude issue733 by @lestrrat in #22
- Add XML Catalog support; fix XInclude DTD propagation by @lestrrat in #23
- Implement C14N support by @lestrrat in #24
- Fix external entity resolution and internal entity substitution by @lestrrat in #25
- XSD by @lestrrat in #26
- Rename xmlschema package to xsd by @lestrrat in #27
- Implement HTML support by @lestrrat in #28
- add streaming XML writer package by @lestrrat in #30
- move encoding package to internal/encoding by @lestrrat in #31
- Migrate SAX2 functions to match interfaces by @lestrrat in #33
- Refactor html SAX by @lestrrat in #34
- rename helium-lint to heliumlint by @lestrrat in #35
- add schematron validation package by @lestrrat in #36
- Tweak and fix heliumlint by @lestrrat in #37
- add xpath operation/recursion limits by @lestrrat in #38
- fix entity amplification and ParseOption bits by @lestrrat in #39
- add RelaxNG validation support by @lestrrat in #32
- add push/streaming parser for XML and HTML by @lestrrat in #40
- add tree manipulation API by @lestrrat in #41
- move bitset logic to internal/bitset by @lestrrat in #42
- Chore cleanup md by @lestrrat in #43
- add xpath Function interface by @lestrrat in #44
- add formatted/indented XML output support by @lestrrat in #45
- add structured error API to ErrParseError by @lestrrat in #46
- add xsi:nil support to XSD validation by @lestrrat in #47
- add xpath custom function registration by @lestrrat in #48
- add ID/IDREF validation to DTD validity checks by @lestrrat in #50
- add XSD default/fixed value validation by @lestrrat in #49
- fix typo in ErrDTDDupToken error message by @lestrrat in #51
- Feat id idref validation by @lestrrat in #52
- fix xmlwriter DTD brackets and newline by @lestrrat in #53
- Fix extsubset lookup by @lestrrat in #54
- Feat xsd builtin types by @lestrrat in #55
- fix encoding alias coverage by @lestrrat in #56
- xpointer: add xpath1() scheme alias by @lestrrat in #57
- Feat xsd builtin types by @lestrrat in #58
- enforce ParseNoError flag in parser by @lestrrat in #59
- skip xml: prefix in dumpNs output by @lestrrat in #60
- xmlwriter: add trailing newline to StartDocument by @lestrrat in #61
- remove noscript from isHeadElement by @lestrrat in #62
- reject invalid predefined entity redeclaration by @lestrrat in #63
- add DTD root element name check by @lestrrat in #64
- add WithNoEmpty option for save by @lestrrat in #66
- fix entity redefinition to first-wins by @lestrrat in #67
- escape DTD entity content in xmlwriter by @lestrrat in #65
- xsd: add missing facet validation by @lestrrat in #68
- add xmlns() XPointer scheme by @lestrrat in #69
- add notation declaration serialization by @lestrrat in #70
- validate enumeration attr values against declared set by @lestrrat in #71
- add WithNoDecl option to suppress xml decl by @lestrrat in #72
- xsd: add full whiteSpace normalization by @lestrrat in #73
- c14n: reject relative namespace URIs by @lestrrat in #74
- add GetPublicId/GetSystemId to DocumentLocator by @lestrrat in #75
- fix schematron value-of semantics by @lestrrat in #76
- xsd: reject abstract types at validation time by @lestrrat in #77
- add xpointer circumflex escape handling by @lestrrat in #78
- add schematron compile-time validation checks by @lestrrat in #79
- xpointer: add cascading fallback for multiple parts by @lestrrat in #80
- add schematron output mode flags by @lestrrat in #81
- add UCS-4/UCS-2 encoding conversion by @lestrrat in #82
- add HTML parser and dump options by @lestrrat in #83
- add atype field to Attribute struct by @lestrrat in #84
- add StopParser for aborting parse from SAX callbacks by @lestrrat in #85
- add ParseInNodeContext for fragment parsing by @lestrrat in #86
- add newer parser options (NoXXE, SkipIDs, etc) by @lestrrat in #87
- add conditional sections in DTD parser by @lestrrat in #88
- add xs:redefine support to XSD compiler by @lestrrat in #89
- pre-index xpath document order for O(1) lookup by @lestrrat in #90
- document content model determinism assumption by @lestrrat in #91
- add xinclude validation strictness checks by @lestrrat in #92
- add namespace-qualified attr lookup in xinclude by @lestrrat in #93
- reject unconsumed children in matchContentModel by @lestrrat in #94
- fix dumpQuotedString dropping double quotes by @lestrrat in #95
- add AttrEntities case to dumpAttributeDecl by @lestrrat in #96
- reject colon in parseNCName start char by @lestrrat in #97
- fix XHTML void-element ns check for default ns by @lestrrat in #98
- require RNG namespace in isRNGElement by @lestrrat in #99
- fix relaxng getAncestorNS ns="" handling by @lestrrat in #100
- report unexpected children in schematron schema by @lestrrat in #101
- report error for value-of missing select by @lestrrat in #102
- limit xpointer circumflex escape to ^( ^) ^^ by @lestrrat in #103
- report all attribute errors per element in XSD by @lestrrat in #104
- count document nodes in xpointer nthElementChild by @lestrrat in #105
- reject StartDTD with pubid but no sysid by @lestrrat in #106
- add missing IANA encoding aliases by @lestrrat in #107
- suppress about:legacy-compat in HTML DTD dump by @lestrrat in #108
- add trailing newline after comments/PIs in indent mode by @lestrrat in #110
- adjust content model depth limit for ParseHuge by @lestrrat in #111
- treat name as URI attr only on elements by @lestrrat in #109
- add range checks for XSD integer subtypes by @lestrrat in #112
- fix xpath lang() to use namespace-aware lookup by @lestrrat in #113
- auto-close PI/CDATA/comment/DTD in EndDocument by @lestrrat in #114
- export SetListDoc by @lestrrat in #115
- fix xpath name() for non-named node types by @lestrrat in #116
- add O(1) ID lookup table to GetElementByID by @lestrrat in #117
- suppress formatting during DTD child output by @lestrrat in #118
- abort xpointer cascade on syntax errors by @lestrrat in #119
- use helium.UnlinkNode in xinclude package by @lestrrat in #120
- add indent before XHTML meta content-type tag by @lestrrat in #121
- unwrap urn:publicid: in ResolveURI by @lestrrat in #122
- validate encoding in xmlwriter StartDocument by @lestrrat in #123
- reject empty names in xmlwriter by @lestrrat in #124
- report missing attributes in catalog entries by @lestrrat in #125
- deduplicate HTML attributes by name by @lestrrat in #126
- handle bare child sequence in xpointer by @lestrrat in #128
- add URL field to Document for base URI resolution by @lestrrat in #130
- add GetAttributeNodeNS for xmlHasNsProp parity by @lestrrat in #131
- emit prefix:localname for attrs in schematron name by @lestrrat in #133
- support bare name+child sequence in xpointer by @lestrrat in #129
- add document properties flags by @lestrrat in #132
- enforce title/ns/pattern ordering in schematron by @lestrrat in #134
- fix schematron let variable eval order by @lestrrat in #135
- enforce schema element ordering in schematron by @lestrrat in #136
- match libxml2 numberToString formatting by @lestrrat in #137
- fix xmlwriter DTD indent formatting by @lestrrat in #138
- use exact XML 1.0 NameChar ranges in valid.go by @lestrrat in #139
- per-segment trailing whitespace trim in schematron by @lestrrat in #140
- use proper error levels in parse errors by @lestrrat in #141
- deep-copy DTD maps in CopyDoc by @lestrrat in #143
- add warning location info via parserCtx.warning by @lestrrat in #142
- add visited cache to catalog resolver by @lestrrat in #144
- implement xml:space tracking in parser by @lestrrat in #145
- add ENTITY/ENTITIES/NOTATION attr validation by @lestrrat in #146
- support xml:id in xpath id() function by @lestrrat in #147
- cache raw bytes in xinclude doc loader by @lestrrat in #148
- add standalone whitespace check in validation by @lestrrat in #149
- add format suppression to XHTML serialization by @lestrrat in #150
- add disableSAX mechanism for ParseRecover by @lestrrat in #151
- document areBlanks heuristic as OK:arch by @lestrrat in #152
- validate RelaxNG combine mode agreement by @lestrrat in #153
- document xmlwriter goroutine safety by @lestrrat in #154
- rename xmlwriter package to stream by @lestrrat in #155
- add entity boundary checks to DTD parsers by @lestrrat in #156
- add xsi:type derivation checking by @lestrrat in #157
- discard misplaced html/head/body elements by @lestrrat in #158
- pass structured error to SAX Error/Warning by @lestrrat in #159
- type-aware value comparison for XSD min/max facets by @lestrrat in #160
- enforce wildcard element processContents by @lestrrat in #161
- add FormatError and ErrorDomain to ErrParseError by @lestrrat in #163
- add xinclude entity merging with conflict detection by @lestrrat in #164
- add compile-time facet consistency validation by @lestrrat in #162
- implement blockDefault/finalDefault processing by @lestrrat in #165
- add relaxng forbidden pattern nesting checks by @lestrrat in #166
- add relaxng whitespace trim and xml:base href resolution by @lestrrat in #167
- fix schematron union context pattern matching by @lestrrat in #168
- Refactor node interface by @lestrrat in #169
- add executable examples for all packages by @lestrrat in #170
- update go requirement to 1.25.7 by @lestrrat in #171
- add package doc comments by @lestrrat in #172
- replace interface{} with any by @lestrrat in #173
- remove trailing semicolons in sax generated code by @lestrrat in #174
- remove named return values in sax.ParseInput by @lestrrat in #175
- document SAXCallbacks zero-value usability by @lestrrat in #176
- add safety warning to WriteRaw doc comment by @lestrrat in #177
- use slices.Contains in html parser by @lestrrat in #178
- lowercase exported fields on unexported htmlElemDesc by @lestrrat in #179
- use slices.SortFunc in c14n by @lestrrat in #180
- change SAX2 methods to pointer receivers by @lestrrat in #181
- add libxml2 traceability doc comments by @lestrrat in #182
- return ErrHandlerUnspecified from html SAXCallbacks by @lestrrat in #183
- change html ErrorHandler/WarningHandler to typed error by @lestrrat in #185
- change Validate to return error in xsd, relaxng, schematron by @lestrrat in #184
- rename Dump* to Write* for serialization by @lestrrat in #186
- rename GetPublicId/GetSystemId to GetPublicID/GetSystemID by @lestrrat in #187
- add migration notes to renamed symbols by @lestrrat in #189
- Refactor set namespace by @lestrrat in #190
- rename CreateDocument to NewDefaultDocument by @lestrrat in #188
- rename GetPublicId/GetSystemId to GetPublicID/GetSystemID by @lestrrat in #192
- rename AddContent to AppendText by @lestrrat in #193
- add xsd.Schema cross-reference to Grammar doc by @lestrrat in #194
- improve WithQuoteChar and Flush doc comments by @lestrrat in #195
- fix AttrUse doc comment to remove stub label by @lestrrat in #196
- replace copyBytes with slices.Clone by @lestrrat in #197
- document Entity.Checked and MarkChecked by @lestrrat in #198
- encapsulate Writer fields behind WriteOption by @lestrrat in #199
- consolidate nsNodeInfo into nsSortEntry in c14n by @lestrrat in #200
- rename abbreviated catalog fields Typ/Pref/Ldr by @lestrrat in #201
- alias html.DocumentLocator to sax.DocumentLocator by @lestrrat in #202
- rename html SAXCallbacks fields to On* prefix by @lestrrat in #203
- unexport xpath Lexer and Parser types by @lestrrat in #206
- rename SAX2 fields to On* prefix by @lestrrat in #205
- rename NewPushParserWithSAX to NewSAXPushParser by @lestrrat in #204
- rename NodeTestPI to NodeTestProcessingInstruction by @lestrrat in #207
- add libxml2 traceability to catalog entry types by @lestrrat in #208
- clarify PushParser.Close doc for SAX mode by @lestrrat in #209
- rename EvaluateWithContext to EvaluateWith by @lestrrat in #210
- rename Result.Boolean to Result.Bool by @lestrrat in #211
- add context.Context to Parse functions by @lestrrat in #212
- add iter.Seq-based Children/Descendants by @lestrrat in #213
- use generics for stack types by @lestrrat in #214
- add ErrorHandler/Sink[T] and remove string-based compile errors by @lestrrat in #215
- add enum pkg for SAX typed params by @lestrrat in #216
- remove xpointer.CopyNode wrapper by @lestrrat in #218
- make xpath.Context fields private by @lestrrat in #217
- remove dead SchemaError type by @lestrrat in #219
- replace goto with labeled break in collectText by @lestrrat in #220
- docs: update readme and issue templates by @lestrrat in #221
- Use xxx_test instead of xxx for tests by @lestrrat in #222
- I have no idea why this code was generated, but it's silly by @lestrrat in #223
- tweak tests by @lestrrat in #224
- Test cleanup by @lestrrat in #225
- Implement encoding/xml shim by @lestrrat in #226
- autodoc updates by @github-actions[bot] in #227
- add shim to current status in README by @lestrrat in #228
- Validate XML declaration and add malformed test cases by @lestrrat in #230
- add fuzz testing infrastructure by @lestrrat in #229
- Add CLAUDE.md and symlink AGENTS.md for agent orientation by @lestrrat in #231
- Refactor xpath context by @lestrrat in #232
- autodoc updates by @github-actions[bot] in #233
- rename xpath package to xpath1 by @lestrrat in #234
- autodoc updates by @github-actions[bot] in #235
- use setters for SAX2 handler fields by @lestrrat in #236
- autodoc updates by @github-actions[bot] in #237
- replace sax.Context with context.Context by @lestrrat in #238
- autodoc updates by @github-actions[bot] in #239
- Implement XPath3 by @lestrrat in #240
- add XPath 3.1 example to README by @lestrrat in #242
- Refactor context APIs and improve threading across formats by @lestrrat in #243
- autodoc updates by @github-actions[bot] in #244
- add more executable examples by @lestrrat in #245
- implement helium command by @lestrrat in #246
- refactor helium cli for examples by @lestrrat in #247
- update helium project description by @lestrrat in #248
- XSLT3.0 and much more by @lestrrat in #249
- autodoc updates by @github-actions[bot] in #251
- fix seqtor sequence constructor spacing and separators by @lestrrat in #252
- implement UCA collation support for keys, grouping, XPath by @lestrrat in #253
- fix xpath-default-namespace, strip-space, attribute-set, castable by @lestrrat in #254
- refactor c14n to fluent builder API by @lestrrat in #255
- fix streaming, list type, and streamability tests by @lestrrat in #257
- implement xsl:accept visibility control by @lestrrat in #258
- autodoc updates by @github-actions[bot] in #261
- refactor xinclude to fluent builder API by @lestrrat in #262
- autodoc updates by @github-actions[bot] in #265
- fix static-base-uri and base URI propagation by @lestrrat in #256
- refactor html to fluent builder API by @lestrrat in #266
- autodoc updates by @github-actions[bot] in #267
- refactor schematron to fluent builder API by @lestrrat in #268
- fix 6 deep tests: strip-space, regex, base-uri by @lestrrat in #270
- fix package static checks and version resolution by @lestrrat in #271
- implement package-scoped isolation and variable resolution by @lestrrat in #259
- refactor relaxng to fluent builder API by @lestrrat in #272
- autodoc updates by @github-actions[bot] in #273
- fix xsl:override function/template/variable/mode handling by @lestrrat in #260
- reject Selection on Transform invocation path by @lestrrat in #274
- persist resolvedOutputDef in WriteTo and Serialize by @lestrrat in #275
- fix streaming analysis and merge collation by @lestrrat in #269
- refactor xpath3 to fluent compiler API by @lestrrat in #277
- refactor xsd to fluent builder API by @lestrrat in #276
- refactor helium parser to fluent builder API by @lestrrat in #278
- autodoc updates by @github-actions[bot] in #279
- fix function-1009 zero-length text node merging and unskip json-to-xml-error-015 by @lestrrat in #282
- fix xsl:key body to use sequence-preserving path by @lestrrat in #283
- unlock W3C assertion types, XSD 1.1, and streaming fallback tests by @lestrrat in #280
- fix empty xsl:document in sequence/capture contexts by @lestrrat in #284
- fix composite xsl:key to use collation functions by @lestrrat in #285
- fix W3C merge tests: merge-067, merge-096 by @lestrrat in #286
- add helium.ClarkName and replace inline Clark notation by @lestrrat in #287
- unskip 7 streaming tests with stale skip reasons by @lestrrat in #288
- fix fn:transform QName param keys to use Clark notation by @lestrrat in #289
- fix simple content stray separators from empty text by @lestrrat in #291
- add embedded stylesheet extraction for W3C tests by @lestrrat in #290
- fix global param static-base-uri resolution by @lestrrat in #292
- rename stale Receiver references to Handler by @lestrrat in #293
- remove 8 stale W3C package/override skips by @lestrrat in #295
- refactor parser options to fluent bool methods by @lestrrat in #294
- reuse parser instances within same scope by @lestrrat in #296
- remove 18 stale schema-aware W3C skips by @lestrrat in #297
- autodoc updates by @github-actions[bot] in #298
- autodoc updates by @github-actions[bot] in #299
- fix Evaluator zero-value nil cfg panic by @lestrrat in #300
- fix zero-value panic in html, c14n, xinclude builders by @lestrrat in #301
- fix W3C HTML output and serialization tests by @lestrrat in #303
- fix W3C streaming fallback and edge cases by @lestrrat in #302
- fix W3C runtime test failures by @lestrrat in #304
- fix W3C package system and function-lookup tests by @lestrrat in #305
- fix Compiler zero-value panic by @lestrrat in #306
- fix zero-value panic in xsd, relaxng, schematron builders by @lestrrat in #307
- fix W3C schema-aware test failures by @lestrrat in #308
- reject mismatched initial param setters by @lestrrat in #309
- reject SetInitialModeParameter on CallTemplate/CallFunction by @lestrrat in #310
- reject tunnel params on CallFunction invocation by @lestrrat in #311
- fix W3C test: XSD 1.1 anyURI and TVT namespace resolution by @lestrrat in #312
- fix W3C package-scoped isolation tests by @lestrrat in #313
- fix W3C round 3: package isolation, strip-space, base-uri, OOM by @lestrrat in #314
- set document URL in html.Parser.ParseFile by @lestrrat in #315
- parse performance: 37→86 MB/s (109KB), 64→228 MB/s (3MB) by @lestrrat in #316
- add helium xslt command by @lestrrat in #317
- document examples guidance by @lestrrat in #318
- fix xpath3.Evaluate nil expression panic by @lestrrat in #319
- clarify README benchmark scope by @lestrrat in #320
- fix html WriteNode document options by @lestrrat in #321
- update enum package docs by @lestrrat in #322
- refactor writer fluent api by @lestrrat in #323
- split package docs into readmes by @lestrrat in #324
- Update badges in README by @koron in #325
- Add a badge to DeepWiki by @koron in #326
- small API fixes across packages by @lestrrat in #327
- root package API fixes by @lestrrat in #328
- standardize ErrorHandler across validation packages by @lestrrat in #329
- convert catalog and stream to fluent API by @lestrrat in #330
- align xpath1 API with xpath3 patterns by @lestrrat in #331
- split Node into read-only Node and MutableNode by @lestrrat in #332
- improve API surface, discoverability, and docs by @lestrrat in #333
- standardize xsd validation on ErrorHandler by @lestrrat in #334
- autodoc updates by @github-actions[bot] in #335
- fix irregularities found during API surface review by @lestrrat in #336
- fix API surface irregularities (round 2) by @lestrrat in #337
- optimize xpath3 evaluation performance by @lestrrat in #338
- fix MinInt64 idiv -1 overflow in xpath3 int64 fast path by @lestrrat in #339
- optimize hot paths in xpath3, xslt3, and serialization by @lestrrat in #340
- make Replace variadic, unexport internal symbols by @lestrrat in #341
- reject colons in attribute local names by @lestrrat in #342
- consolidate NCName validation into internal/xmlchar by @lestrrat in #343
- remove Output field from ValidateError by @lestrrat in #344
- refactor DTDValidateError with Unwrap() []error by @lestrrat in #345
- honor context.Context in HTML parser by @lestrrat in #346
- fix readme parse example comment by @lestrrat in #347
- autodoc updates by @github-actions[bot] in #348
- move xpath3 streamability helpers to internal/xpathstream by @lestrrat in #349
- unify validation to sentinel error + ErrorHandler by @lestrrat in #350
- move schematron tests to external package by @lestrrat in #351
- Experiment: speed up DOM parser hot path by @lestrrat in #353
- migrate tests to external package form by @lestrrat in #352
- add xml parse benchmark coverage by @lestrrat in #354
- replace hardcoded Version with VCS commit ID by @lestrrat in #355
- speed up parser token scans by @lestrrat in #356
- update readme performance numbers by @lestrrat in #357
- remove XML constants from helium package by @lestrrat in #358
- reorganize root helium package by @lestrrat in #359
- fix parser fuzz regressions by @lestrrat in #360
- expand fuzz coverage by @lestrrat in #361
- reorganize xslt3 package file layout by @lestrrat in #362
- reject invalid UTF-8 in attribute values by @lestrrat in #367
- reject empty local name after colon in QName by @lestrrat in #368
- reorganize schematron package file layout by @lestrrat in #363
- reorganize xsd package file layout by @lestrrat in #364
- reorganize relaxng package file layout by @lestrrat in #365
- reorganize xpath3 package file layout by @lestrrat in #366
- update dependabot targets by @lestrrat in #369
- Bump golangci/golangci-lint-action from 8.0.0 to 9.2.0 by @dependabot[bot] in #370
- Bump actions/checkout from 4.2.2 to 6.0.2 by @dependabot[bot] in #371
- Bump actions/cache from 4.2.3 to 5.0.4 by @dependabot[bot] in #377
- Bump github.com/stretchr/testify from 1.10.0 to 1.11.1 by @dependabot[bot] in #372
- Bump golang.org/x/net from 0.51.0 to 0.52.0 by @dependabot[bot] in #373
- Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #375
- use go.mod for ci go version by @lestrrat in #379
- reorganize root package test files by @lestrrat in #378
- Bump actions/setup-go from 5.5.0 to 6.3.0 by @dependabot[bot] in #376
- fix malformed comment parsing by @lestrrat in #380
- Bump actions/stale from 9.1.0 to 10.2.0 by @dependabot[bot] in #381
- drop fuzz roundtrip corpus by @lestrrat in #382
- consolidate fuzz repro tests into fuzz_test.go by @lestrrat in #383
- add t.Parallel to all applicable tests by @lestrrat in #384
- fix root fuzz parser panics by @lestrrat in #385
- replace serialization API with Write/WriteString/WriteTo by @lestrrat in #386
- autodoc updates by @github-actions[bot] in #388
- upload failing fuzz corpus as artifact by @lestrrat in #387
- update current status section in README by @lestrrat in #389
- improve example legibility and comments by @lestrrat in #390
- autodoc updates by @github-actions[bot] in #391
- rename Filename/SchemaFilename to Label/SchemaLabel by @lestrrat in #392
- cosmetic doc improvements by @lestrrat in #393
- infer validator label from document URL by @lestrrat in #394
- add xpath3, dom mutation, and pipeline examples by @lestrrat in #395
- replace panics with error returns, add golangci config by @lestrrat in #396
- autodoc updates by @github-actions[bot] in #397
- use strcursor in html parser by @lestrrat in #398
- add goreleaser infrastructure by @lestrrat in #399
New Contributors
- @github-actions[bot] made their first contribution in #227
- @koron made their first contribution in #325
- @dependabot[bot] made their first contribution in #370
Full Changelog: https://github.com/lestrrat-go/helium/commits/v0.0.1