fontoxpath-exact-decimal
v3.34.0-exact.2
Published
fontoxpath 3.34.0 with exact xs:decimal arithmetic (temporary fork — see FontoXML/fontoxpath#686)
Maintainers
Readme
fontoxpath-exact-decimal
Temporary fork of fontoxpath 3.34.0
with exact xs:decimal arithmetic. It exists only until
FontoXML/fontoxpath#686 is
fixed upstream, and will be deprecated in favour of upstream the moment it is.
Why
Stock fontoxpath computes xs:decimal arithmetic in float64, which violates
XPath decimal semantics:
evaluateXPath('1.1 + 2.2 = 3.3') // stock: false — this fork: trueThis breaks real-world users of decimal arithmetic — e.g. the EN 16931
e-invoicing Schematron rules, where a compliance validator flags valid invoices
(rule BR-O-08 on the official CEF example XRechnung-O.xml).
What changed
One bounded patch to the dist bundles (dist/fontoxpath.js,
dist/fontoxpath.esm.js): in the numeric binary-operation dispatch, when the
result type resolves to xs:decimal/xs:integer — i.e. both operands are
decimal subtypes — + − × div are computed exactly (BigInt over the scaled
decimal representation). Untyped/double/float operands keep IEEE 754 float
semantics, as the spec requires (0.1 + 0.2e0 is still 0.30000000000000004).
Everything else is byte-identical to fontoxpath 3.34.0. Known limitation:
aggregates (fn:sum, fn:avg) still accumulate in float64 — the full fix
needs an exact decimal value representation upstream.
Usage
Drop-in replacement via package alias:
{ "dependencies": { "fontoxpath": "npm:[email protected]" } }License
MIT, same as upstream — see LICENSE.md
(© Fonto Group BV, Martin Middel; patch © NeosiaNexus).
