fullbleed 2.2.4__tar.gz → 2.2.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fullbleed-2.2.4 → fullbleed-2.2.5}/Cargo.lock +1 -1
- {fullbleed-2.2.4 → fullbleed-2.2.5}/Cargo.toml +1 -1
- {fullbleed-2.2.4 → fullbleed-2.2.5}/PKG-INFO +19 -12
- {fullbleed-2.2.4 → fullbleed-2.2.5}/README.md +18 -11
- {fullbleed-2.2.4 → fullbleed-2.2.5}/pyproject.toml +1 -1
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/_abi.py +37 -4
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/cli.py +10 -2
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/flate_native.rs +34 -11
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/flowable.rs +12 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/lib.rs +177 -5
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/pdf.rs +27 -4
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/python/abi_exports.rs +34 -4
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/python.rs +5 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/style.rs +19 -1
- {fullbleed-2.2.4 → fullbleed-2.2.5}/COPYRIGHT +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/FONT_LICENSE_AUDIT.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/FONT_LICENSE_AUDIT.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/LICENSE +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/LICENSING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/THIRD_PARTY_LICENSES.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/build.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/build_backend/fullbleed_build_backend.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/Cargo.lock +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/Cargo.toml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/LICENSE +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/specs/fullbleed.audit_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/specs/section508_html_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/specs/wcag20aa_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/src/json.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/src/lib.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/crates/fullbleed_audit_contract/src/sha256.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/docs/specs/fullbleed.a11y.verify.v1.schema.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/docs/specs/fullbleed.audit_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/docs/specs/fullbleed.pmr.v1.schema.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/docs/specs/section508_html_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/docs/specs/wcag20aa_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/__main__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/accessibility/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/accessibility/engine.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/accessibility/runtime.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/accessibility/types.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/audit_prototype.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/audit_section508.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/audit_wcag.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/accessibility.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/_core.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/agency_letter.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/court_motion_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/declaration_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/instruction_sheet.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/investment_portfolio_report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/marriage_record.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/profiles.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/recorded_plat.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/redaction_request_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/cav/warranty_deed.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/core.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed/ui/style.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/bootstrap.min.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/fonts/Inter-Variable.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/fonts/NotoSans-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/fonts/NotoSansMath-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/fonts/NotoSansSymbols-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/fonts/NotoSansSymbols2-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_assets/icons/bootstrap-icons.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/__main__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/assets.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/cache.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/finalize.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/COMPLIANCE.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/SCAFFOLDING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/body.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/fb_ui.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/footer.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/header.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/styles/body.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/styles/footer.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/styles/header.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/components/styles/primitives.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/init/styles/tokens.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/accessible/vendor/fonts/Inter-Variable.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/invoice/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.html +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/COMPLIANCE.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/SCAFFOLDING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/assets/brand-mark.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/assets/reference-pattern.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/appendix.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/architecture.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/cover.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/data_pages.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/fb_ui.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/appendix.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/architecture.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/cover.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/data.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/primitives.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/visuals.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/components/visuals.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/data/reference.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/reference/styles/tokens.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/statement/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.html +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/assets.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/base64.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/canvas.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/css_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/css_queries.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/debug.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/doc_context.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/doc_template.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/error.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/finalize.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/font.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/font_subset.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/frame.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/glyph_report.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_dom.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_0.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_1.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_2.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_3.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_4.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/html_entities_5.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/image_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/jit.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/jpeg_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/math.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/metrics.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/native_shape.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/page_data.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/page_template.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/parallel.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/pdf_encodings.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/pdf_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/pdf_raster.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/pdfinspect.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/perf.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/plan.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/python_abi.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/raster.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/raster_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/sfnt.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/sfnt_cff.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/sfnt_outline.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/spill.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/svg.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/text_shape.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/types.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/unicode_data.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.2.5}/src/xml.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fullbleed
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.5
|
|
4
4
|
Classifier: Development Status :: 5 - Production/Stable
|
|
5
5
|
Classifier: License :: OSI Approved :: MIT License
|
|
6
6
|
Classifier: Operating System :: MacOS
|
|
@@ -136,7 +136,7 @@ size-changing records render 200x faster. See
|
|
|
136
136
|
[`docs/performance-architecture.md`](docs/performance-architecture.md) for the packed vector IR,
|
|
137
137
|
typed-binding, virtual-linker, and shader roadmap.
|
|
138
138
|
|
|
139
|
-
Fullbleed 2.2.
|
|
139
|
+
Fullbleed 2.2.5 hardens the third compiler lane introduced in 2.2.4 for
|
|
140
140
|
size-changing records: `CompiledDocument.render_pdf_reflow_bindings(...)`. It parses and recovers
|
|
141
141
|
the template DOM once and compiles encountered structural flow variants into guarded fixed-point
|
|
142
142
|
display programs. Matching records bind directly into those programs; workers execute pre-shaped
|
|
@@ -144,15 +144,17 @@ text/TJ paint slots, cached static PDF page segments, page-local Deflate, and on
|
|
|
144
144
|
Explicit trusted structural slots use `data-fb-bind-html="slot"`. A value that no compiled variant
|
|
145
145
|
can safely place runs ordinary fixed-point layout once to add another variant.
|
|
146
146
|
|
|
147
|
-
On the independent 1,000-distinct-record case study, the
|
|
148
|
-
|
|
149
|
-
pages/s
|
|
147
|
+
On the independent 1,000-distinct-record case study, the 29-sample hot direct-file median was
|
|
148
|
+
216.160 ms: **4,626 records/s and 8,096 pages/s**. The 168.995 ms best sample reached **5,917
|
|
149
|
+
records/s and 10,355 pages/s**. It produced
|
|
150
150
|
the exact 1,750-page 500/300/150/50 reflow distribution and verified all 24,900 markers. The
|
|
151
151
|
throughput-tuned 6,870,320-byte PDF was deterministic across all samples. With the compact
|
|
152
152
|
compression setting, compiled output was also byte-for-byte identical to ordinary rendering:
|
|
153
153
|
5,298,961 bytes and SHA-256 `bb3c441313a08fb00d3bd15f23a567981f3bbbd550908e3a9fe7a07ca5d7f138`.
|
|
154
|
-
This is a hot compiled-variant result, not a claim for previously unseen structure
|
|
155
|
-
|
|
154
|
+
This is a hot compiled-variant result, not a claim for previously unseen structure. The first
|
|
155
|
+
variant-discovery render measured 0.509 s (3,437 pages/s), and the fully cold job including setup,
|
|
156
|
+
bindings, compilation, discovery, and write measured 0.588 s (2,975 pages/s). The independently
|
|
157
|
+
observed hot-median speedup over the ordinary path was 43.8x.
|
|
156
158
|
|
|
157
159
|
## Install
|
|
158
160
|
|
|
@@ -165,7 +167,7 @@ python -m pip install fullbleed
|
|
|
165
167
|
From a local wheel:
|
|
166
168
|
|
|
167
169
|
```bash
|
|
168
|
-
python -m pip install C:\path\to\fullbleed-2.2.
|
|
170
|
+
python -m pip install C:\path\to\fullbleed-2.2.5-cp310-abi3-win_amd64.whl
|
|
169
171
|
```
|
|
170
172
|
|
|
171
173
|
From a source checkout with Rust installed, no Python build package is needed:
|
|
@@ -618,7 +620,8 @@ Machine discovery:
|
|
|
618
620
|
fullbleed capabilities --json
|
|
619
621
|
```
|
|
620
622
|
|
|
621
|
-
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata.
|
|
623
|
+
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata. The `engine`
|
|
624
|
+
object also reports compiled-document/reflow availability and supported per-call compression modes.
|
|
622
625
|
It reports the compiled `svg_raster` build feature plus a feature matrix for
|
|
623
626
|
native-vector SVG, raster-fallback-required SVG, and unsupported/known-loss SVG
|
|
624
627
|
features.
|
|
@@ -977,6 +980,7 @@ Module exports:
|
|
|
977
980
|
|
|
978
981
|
- `PdfEngine`
|
|
979
982
|
- `CompiledDocument`
|
|
983
|
+
- `CompiledFlowCompression`
|
|
980
984
|
- `AssetBundle`
|
|
981
985
|
- `Asset`
|
|
982
986
|
- `AssetKind`
|
|
@@ -1025,8 +1029,8 @@ Module exports:
|
|
|
1025
1029
|
| `render_pdf_batch(copies, deterministic_hash=None)` | `bytes` |
|
|
1026
1030
|
| `render_pdf_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
1027
1031
|
| `render_pdf_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
1028
|
-
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
1029
|
-
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
1032
|
+
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None, *, compression="throughput")` | `bytes` |
|
|
1033
|
+
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None, *, compression="throughput")` | `int` |
|
|
1030
1034
|
|
|
1031
1035
|
The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
|
|
1032
1036
|
content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
|
|
@@ -1038,7 +1042,10 @@ The reflow binding methods use the same exact-column contract but execute the co
|
|
|
1038
1042
|
program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page
|
|
1039
1043
|
counts. Empty elements can opt into trusted generated markup with
|
|
1040
1044
|
`data-fb-bind-html="slot"`; those values replace the element's children. One DOM is reused per
|
|
1041
|
-
native worker and record output is linked in input order through a bounded queue.
|
|
1045
|
+
native worker and record output is linked in input order through a bounded queue. Structural slot
|
|
1046
|
+
values are parsed as trusted markup: sanitize untrusted input or use scalar `{{slot}}` bindings,
|
|
1047
|
+
which remain literal text. Choose `CompiledFlowCompression.Throughput` (default) or
|
|
1048
|
+
`CompiledFlowCompression.Compact` per render; modes can be mixed safely in one process. See
|
|
1042
1049
|
[`docs/python-api.md`](docs/python-api.md) for the trust boundary and current limitations.
|
|
1043
1050
|
|
|
1044
1051
|
When `deterministic_hash` is set, engine writes PDF SHA-256 to the provided file path.
|
|
@@ -99,7 +99,7 @@ size-changing records render 200x faster. See
|
|
|
99
99
|
[`docs/performance-architecture.md`](docs/performance-architecture.md) for the packed vector IR,
|
|
100
100
|
typed-binding, virtual-linker, and shader roadmap.
|
|
101
101
|
|
|
102
|
-
Fullbleed 2.2.
|
|
102
|
+
Fullbleed 2.2.5 hardens the third compiler lane introduced in 2.2.4 for
|
|
103
103
|
size-changing records: `CompiledDocument.render_pdf_reflow_bindings(...)`. It parses and recovers
|
|
104
104
|
the template DOM once and compiles encountered structural flow variants into guarded fixed-point
|
|
105
105
|
display programs. Matching records bind directly into those programs; workers execute pre-shaped
|
|
@@ -107,15 +107,17 @@ text/TJ paint slots, cached static PDF page segments, page-local Deflate, and on
|
|
|
107
107
|
Explicit trusted structural slots use `data-fb-bind-html="slot"`. A value that no compiled variant
|
|
108
108
|
can safely place runs ordinary fixed-point layout once to add another variant.
|
|
109
109
|
|
|
110
|
-
On the independent 1,000-distinct-record case study, the
|
|
111
|
-
|
|
112
|
-
pages/s
|
|
110
|
+
On the independent 1,000-distinct-record case study, the 29-sample hot direct-file median was
|
|
111
|
+
216.160 ms: **4,626 records/s and 8,096 pages/s**. The 168.995 ms best sample reached **5,917
|
|
112
|
+
records/s and 10,355 pages/s**. It produced
|
|
113
113
|
the exact 1,750-page 500/300/150/50 reflow distribution and verified all 24,900 markers. The
|
|
114
114
|
throughput-tuned 6,870,320-byte PDF was deterministic across all samples. With the compact
|
|
115
115
|
compression setting, compiled output was also byte-for-byte identical to ordinary rendering:
|
|
116
116
|
5,298,961 bytes and SHA-256 `bb3c441313a08fb00d3bd15f23a567981f3bbbd550908e3a9fe7a07ca5d7f138`.
|
|
117
|
-
This is a hot compiled-variant result, not a claim for previously unseen structure
|
|
118
|
-
|
|
117
|
+
This is a hot compiled-variant result, not a claim for previously unseen structure. The first
|
|
118
|
+
variant-discovery render measured 0.509 s (3,437 pages/s), and the fully cold job including setup,
|
|
119
|
+
bindings, compilation, discovery, and write measured 0.588 s (2,975 pages/s). The independently
|
|
120
|
+
observed hot-median speedup over the ordinary path was 43.8x.
|
|
119
121
|
|
|
120
122
|
## Install
|
|
121
123
|
|
|
@@ -128,7 +130,7 @@ python -m pip install fullbleed
|
|
|
128
130
|
From a local wheel:
|
|
129
131
|
|
|
130
132
|
```bash
|
|
131
|
-
python -m pip install C:\path\to\fullbleed-2.2.
|
|
133
|
+
python -m pip install C:\path\to\fullbleed-2.2.5-cp310-abi3-win_amd64.whl
|
|
132
134
|
```
|
|
133
135
|
|
|
134
136
|
From a source checkout with Rust installed, no Python build package is needed:
|
|
@@ -581,7 +583,8 @@ Machine discovery:
|
|
|
581
583
|
fullbleed capabilities --json
|
|
582
584
|
```
|
|
583
585
|
|
|
584
|
-
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata.
|
|
586
|
+
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata. The `engine`
|
|
587
|
+
object also reports compiled-document/reflow availability and supported per-call compression modes.
|
|
585
588
|
It reports the compiled `svg_raster` build feature plus a feature matrix for
|
|
586
589
|
native-vector SVG, raster-fallback-required SVG, and unsupported/known-loss SVG
|
|
587
590
|
features.
|
|
@@ -940,6 +943,7 @@ Module exports:
|
|
|
940
943
|
|
|
941
944
|
- `PdfEngine`
|
|
942
945
|
- `CompiledDocument`
|
|
946
|
+
- `CompiledFlowCompression`
|
|
943
947
|
- `AssetBundle`
|
|
944
948
|
- `Asset`
|
|
945
949
|
- `AssetKind`
|
|
@@ -988,8 +992,8 @@ Module exports:
|
|
|
988
992
|
| `render_pdf_batch(copies, deterministic_hash=None)` | `bytes` |
|
|
989
993
|
| `render_pdf_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
990
994
|
| `render_pdf_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
991
|
-
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
992
|
-
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
995
|
+
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None, *, compression="throughput")` | `bytes` |
|
|
996
|
+
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None, *, compression="throughput")` | `int` |
|
|
993
997
|
|
|
994
998
|
The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
|
|
995
999
|
content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
|
|
@@ -1001,7 +1005,10 @@ The reflow binding methods use the same exact-column contract but execute the co
|
|
|
1001
1005
|
program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page
|
|
1002
1006
|
counts. Empty elements can opt into trusted generated markup with
|
|
1003
1007
|
`data-fb-bind-html="slot"`; those values replace the element's children. One DOM is reused per
|
|
1004
|
-
native worker and record output is linked in input order through a bounded queue.
|
|
1008
|
+
native worker and record output is linked in input order through a bounded queue. Structural slot
|
|
1009
|
+
values are parsed as trusted markup: sanitize untrusted input or use scalar `{{slot}}` bindings,
|
|
1010
|
+
which remain literal text. Choose `CompiledFlowCompression.Throughput` (default) or
|
|
1011
|
+
`CompiledFlowCompression.Compact` per render; modes can be mixed safely in one process. See
|
|
1005
1012
|
[`docs/python-api.md`](docs/python-api.md) for the trust boundary and current limitations.
|
|
1006
1013
|
|
|
1007
1014
|
When `deterministic_hash` is set, engine writes PDF SHA-256 to the provided file path.
|
|
@@ -54,6 +54,16 @@ class AssetKind(metaclass=_NativeFacadeType):
|
|
|
54
54
|
raise TypeError("No constructor defined for AssetKind")
|
|
55
55
|
|
|
56
56
|
|
|
57
|
+
class CompiledFlowCompression(metaclass=_NativeFacadeType):
|
|
58
|
+
"""Per-call size/speed policy for compiled content-reflow PDF streams."""
|
|
59
|
+
|
|
60
|
+
Throughput = "throughput"
|
|
61
|
+
Compact = "compact"
|
|
62
|
+
|
|
63
|
+
def __new__(cls, /, *args, **kwargs):
|
|
64
|
+
raise TypeError("No constructor defined for CompiledFlowCompression")
|
|
65
|
+
|
|
66
|
+
|
|
57
67
|
class Asset(metaclass=_NativeFacadeType):
|
|
58
68
|
__slots__ = ("_handle",)
|
|
59
69
|
|
|
@@ -219,25 +229,42 @@ class CompiledDocument(metaclass=_NativeFacadeType):
|
|
|
219
229
|
deterministic_hash,
|
|
220
230
|
)
|
|
221
231
|
|
|
222
|
-
def render_pdf_reflow_bindings(
|
|
232
|
+
def render_pdf_reflow_bindings(
|
|
233
|
+
self,
|
|
234
|
+
/,
|
|
235
|
+
bindings,
|
|
236
|
+
deterministic_hash=None,
|
|
237
|
+
*,
|
|
238
|
+
compression=CompiledFlowCompression.Throughput,
|
|
239
|
+
):
|
|
223
240
|
"""Render columnar text bindings with content-driven layout and pagination."""
|
|
241
|
+
_require_string(compression, "compression")
|
|
224
242
|
return _call(
|
|
225
243
|
self._handle,
|
|
226
244
|
"CompiledDocument.render_pdf_reflow_bindings",
|
|
227
245
|
bindings,
|
|
228
246
|
deterministic_hash,
|
|
247
|
+
compression,
|
|
229
248
|
)
|
|
230
249
|
|
|
231
250
|
def render_pdf_reflow_bindings_to_file(
|
|
232
|
-
self,
|
|
251
|
+
self,
|
|
252
|
+
/,
|
|
253
|
+
bindings,
|
|
254
|
+
path,
|
|
255
|
+
deterministic_hash=None,
|
|
256
|
+
*,
|
|
257
|
+
compression=CompiledFlowCompression.Throughput,
|
|
233
258
|
):
|
|
234
259
|
"""Stream a compiled content-reflow batch directly to ``path``."""
|
|
260
|
+
_require_string(compression, "compression")
|
|
235
261
|
return _call(
|
|
236
262
|
self._handle,
|
|
237
263
|
"CompiledDocument.render_pdf_reflow_bindings_to_file",
|
|
238
264
|
bindings,
|
|
239
265
|
path,
|
|
240
266
|
deterministic_hash,
|
|
267
|
+
compression,
|
|
241
268
|
)
|
|
242
269
|
|
|
243
270
|
|
|
@@ -579,7 +606,9 @@ class PdfEngine(metaclass=_NativeFacadeType):
|
|
|
579
606
|
)
|
|
580
607
|
|
|
581
608
|
def render_pdf(self, /, html, css, deterministic_hash=None):
|
|
582
|
-
return _call(
|
|
609
|
+
return _call(
|
|
610
|
+
self._handle, "PdfEngine.render_pdf", html, css, deterministic_hash
|
|
611
|
+
)
|
|
583
612
|
|
|
584
613
|
def compile_pdf(self, /, html, css):
|
|
585
614
|
handle = _call(self._handle, "PdfEngine.compile_pdf", html, css)
|
|
@@ -747,7 +776,9 @@ class PdfEngine(metaclass=_NativeFacadeType):
|
|
|
747
776
|
deterministic_hash,
|
|
748
777
|
)
|
|
749
778
|
|
|
750
|
-
def render_pdf_batch_to_file(
|
|
779
|
+
def render_pdf_batch_to_file(
|
|
780
|
+
self, /, html_list, css, path, deterministic_hash=None
|
|
781
|
+
):
|
|
751
782
|
return _call(
|
|
752
783
|
self._handle,
|
|
753
784
|
"PdfEngine.render_pdf_batch_to_file",
|
|
@@ -897,6 +928,7 @@ def audit_sparse_page_visual_pair(source_png_path, render_png_path):
|
|
|
897
928
|
__all__ = [
|
|
898
929
|
"PdfEngine",
|
|
899
930
|
"CompiledDocument",
|
|
931
|
+
"CompiledFlowCompression",
|
|
900
932
|
"AssetKind",
|
|
901
933
|
"Asset",
|
|
902
934
|
"AssetBundle",
|
|
@@ -925,6 +957,7 @@ __all__ = [
|
|
|
925
957
|
_CLASS_NAMES = {
|
|
926
958
|
"PdfEngine",
|
|
927
959
|
"CompiledDocument",
|
|
960
|
+
"CompiledFlowCompression",
|
|
928
961
|
"AssetKind",
|
|
929
962
|
"Asset",
|
|
930
963
|
"AssetBundle",
|
|
@@ -2793,6 +2793,8 @@ def cmd_capabilities(args):
|
|
|
2793
2793
|
build_features = {}
|
|
2794
2794
|
svg_raster_available = bool(build_features.get("svg_raster", False))
|
|
2795
2795
|
pdf_engine = getattr(fullbleed, "PdfEngine", None)
|
|
2796
|
+
compiled_document = getattr(fullbleed, "CompiledDocument", None)
|
|
2797
|
+
compression_modes = list(build_features.get("compiled_flow_compression_modes", []))
|
|
2796
2798
|
|
|
2797
2799
|
commands = [
|
|
2798
2800
|
"render",
|
|
@@ -2828,6 +2830,14 @@ def cmd_capabilities(args):
|
|
|
2828
2830
|
"--repro-check",
|
|
2829
2831
|
],
|
|
2830
2832
|
"engine": {
|
|
2833
|
+
"compiled_document": bool(pdf_engine and hasattr(pdf_engine, "compile_pdf")),
|
|
2834
|
+
"compiled_reflow_bindings": bool(
|
|
2835
|
+
build_features.get("compiled_reflow", False)
|
|
2836
|
+
and pdf_engine
|
|
2837
|
+
and compiled_document
|
|
2838
|
+
and hasattr(compiled_document, "render_pdf_reflow_bindings")
|
|
2839
|
+
),
|
|
2840
|
+
"compiled_flow_compression_modes": compression_modes,
|
|
2831
2841
|
"batch_render": bool(pdf_engine and hasattr(pdf_engine, "render_pdf_batch")),
|
|
2832
2842
|
"batch_render_parallel": bool(
|
|
2833
2843
|
pdf_engine and hasattr(pdf_engine, "render_pdf_batch_parallel")
|
|
@@ -3677,5 +3687,3 @@ if __name__ == "__main__":
|
|
|
3677
3687
|
raise SystemExit(main())
|
|
3678
3688
|
|
|
3679
3689
|
|
|
3680
|
-
|
|
3681
|
-
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
use std::cell::RefCell;
|
|
2
|
-
use std::sync::OnceLock;
|
|
3
|
-
|
|
4
2
|
const ADLER_BASE: u32 = 65_521;
|
|
5
3
|
const DEFAULT_ADLER_CHUNK: usize = 1 << 20;
|
|
6
4
|
const ADLER_NMAX: usize = 5_552;
|
|
@@ -425,15 +423,14 @@ pub(crate) fn zlib_deflate_parallel(data: &[u8]) -> Vec<u8> {
|
|
|
425
423
|
zlib_deflate_with_chain(data, MAX_CHAIN_STEPS)
|
|
426
424
|
}
|
|
427
425
|
|
|
428
|
-
pub(crate) fn zlib_deflate_compiled_flow(
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
});
|
|
426
|
+
pub(crate) fn zlib_deflate_compiled_flow(
|
|
427
|
+
data: &[u8],
|
|
428
|
+
compression: crate::pdf::CompiledFlowCompression,
|
|
429
|
+
) -> Vec<u8> {
|
|
430
|
+
let steps = match compression {
|
|
431
|
+
crate::pdf::CompiledFlowCompression::Throughput => DEFAULT_COMPILED_FLOW_CHAIN_STEPS,
|
|
432
|
+
crate::pdf::CompiledFlowCompression::Compact => MAX_CHAIN_STEPS,
|
|
433
|
+
};
|
|
437
434
|
let steps = if data.len() < COMPILED_FLOW_THROUGHPUT_MIN_BYTES {
|
|
438
435
|
MAX_CHAIN_STEPS
|
|
439
436
|
} else {
|
|
@@ -923,6 +920,32 @@ mod tests {
|
|
|
923
920
|
}
|
|
924
921
|
}
|
|
925
922
|
|
|
923
|
+
#[test]
|
|
924
|
+
fn compiled_flow_compression_modes_are_per_call_and_deterministic() {
|
|
925
|
+
use crate::pdf::CompiledFlowCompression::{Compact, Throughput};
|
|
926
|
+
|
|
927
|
+
let src = (0..8_000)
|
|
928
|
+
.map(|index| format!("BT /F1 10 Tf 72 720 Td [(RECORD-{index:05})] TJ ET\n"))
|
|
929
|
+
.collect::<String>()
|
|
930
|
+
.into_bytes();
|
|
931
|
+
let throughput = zlib_deflate_compiled_flow(&src, Throughput);
|
|
932
|
+
let compact = zlib_deflate_compiled_flow(&src, Compact);
|
|
933
|
+
assert_eq!(throughput, zlib_deflate_compiled_flow(&src, Throughput));
|
|
934
|
+
assert_eq!(compact, zlib_deflate_compiled_flow(&src, Compact));
|
|
935
|
+
assert_eq!(
|
|
936
|
+
zlib_inflate(&throughput, src.len()).expect("throughput roundtrip"),
|
|
937
|
+
src
|
|
938
|
+
);
|
|
939
|
+
assert_eq!(
|
|
940
|
+
zlib_inflate(&compact, src.len()).expect("compact roundtrip"),
|
|
941
|
+
src
|
|
942
|
+
);
|
|
943
|
+
assert!(
|
|
944
|
+
compact.len() <= throughput.len(),
|
|
945
|
+
"compact search should not produce a larger representative stream"
|
|
946
|
+
);
|
|
947
|
+
}
|
|
948
|
+
|
|
926
949
|
#[test]
|
|
927
950
|
fn zlib_lz77_roundtrip_empty() {
|
|
928
951
|
let src: Vec<u8> = Vec::new();
|
|
@@ -33108,8 +33108,20 @@ impl Flowable for ContainerFlowable {
|
|
|
33108
33108
|
&& sibling_boundary_context
|
|
33109
33109
|
&& combined_occupied_height - remaining_height <= Pt::from_milli_i64(1_500)
|
|
33110
33110
|
&& child.has_paint_only_fixed_height_tail(content_width, child_available_height);
|
|
33111
|
+
// Relax `break-inside: avoid` before deferring an oversized box.
|
|
33112
|
+
// The UA stylesheet gives tables this value too, so suppressing a
|
|
33113
|
+
// split merely because earlier siblings were placed orphaned a
|
|
33114
|
+
// kept heading and moved a long, splittable table to the next
|
|
33115
|
+
// page. The same behavior wasted the remainder before an
|
|
33116
|
+
// oversized authored keep-together block. Avoidance is only
|
|
33117
|
+
// actionable when the complete box can fit a fresh fragmentainer.
|
|
33118
|
+
let fresh_size =
|
|
33119
|
+
avoids_page_break.then(|| child.wrap(content_width, available_content_height));
|
|
33120
|
+
let fits_fresh_fragmentainer =
|
|
33121
|
+
fresh_size.is_some_and(|fresh| fresh.height <= available_content_height);
|
|
33111
33122
|
let child_split = if paint_only_edge_overhang
|
|
33112
33123
|
|| (avoids_page_break
|
|
33124
|
+
&& fits_fresh_fragmentainer
|
|
33113
33125
|
&& ((!placed.is_empty() && !follows_only_table_captions)
|
|
33114
33126
|
|| size.height <= available_content_height))
|
|
33115
33127
|
{
|