fullbleed 2.3.0__tar.gz → 2.4.0__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.
Files changed (210) hide show
  1. {fullbleed-2.3.0 → fullbleed-2.4.0}/Cargo.lock +1 -1
  2. {fullbleed-2.3.0 → fullbleed-2.4.0}/Cargo.toml +1 -1
  3. {fullbleed-2.3.0 → fullbleed-2.4.0}/PKG-INFO +24 -6
  4. {fullbleed-2.3.0 → fullbleed-2.4.0}/README.md +23 -5
  5. {fullbleed-2.3.0 → fullbleed-2.4.0}/fullbleed-agent-contract.json +968 -1
  6. {fullbleed-2.3.0 → fullbleed-2.4.0}/llms.txt +2 -1
  7. {fullbleed-2.3.0 → fullbleed-2.4.0}/pyproject.toml +1 -1
  8. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/_abi.py +15 -0
  9. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/agent_contract.py +61 -7
  10. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/cli.py +161 -152
  11. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/mcp.py +29 -1
  12. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/assets.rs +129 -1
  13. fullbleed-2.4.0/src/authoring.rs +2390 -0
  14. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/canvas.rs +139 -3
  15. fullbleed-2.4.0/src/chart.rs +1114 -0
  16. fullbleed-2.4.0/src/chart_document.rs +392 -0
  17. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/css_native.rs +8 -0
  18. fullbleed-2.4.0/src/document_metadata.rs +86 -0
  19. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/error.rs +2 -0
  20. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/flowable.rs +921 -61
  21. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/font.rs +24 -2
  22. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html.rs +376 -96
  23. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_dom.rs +5 -0
  24. fullbleed-2.4.0/src/icc.rs +188 -0
  25. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/jit.rs +392 -60
  26. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/lib.rs +558 -106
  27. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/pdf.rs +1370 -192
  28. fullbleed-2.4.0/src/pdf_identity.rs +263 -0
  29. fullbleed-2.4.0/src/pdf_print_contract.rs +347 -0
  30. fullbleed-2.4.0/src/pdf_profile.rs +163 -0
  31. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/pdf_raster.rs +199 -12
  32. fullbleed-2.4.0/src/pdf_table.rs +77 -0
  33. fullbleed-2.4.0/src/pdf_vt.rs +200 -0
  34. fullbleed-2.4.0/src/pdf_vt_inspect.rs +219 -0
  35. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/pdfinspect.rs +61 -78
  36. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/python/abi_exports.rs +44 -1
  37. fullbleed-2.4.0/src/python/pdf_vt.rs +166 -0
  38. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/python.rs +174 -59
  39. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/python_abi.rs +3 -0
  40. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/raster.rs +31 -9
  41. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/spill.rs +255 -2
  42. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/style.rs +1 -1
  43. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/svg.rs +683 -78
  44. fullbleed-2.4.0/src/table_header_tests.rs +350 -0
  45. fullbleed-2.4.0/src/table_semantics.rs +455 -0
  46. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/xml.rs +11 -0
  47. {fullbleed-2.3.0 → fullbleed-2.4.0}/COPYRIGHT +0 -0
  48. {fullbleed-2.3.0 → fullbleed-2.4.0}/FONT_LICENSE_AUDIT.json +0 -0
  49. {fullbleed-2.3.0 → fullbleed-2.4.0}/FONT_LICENSE_AUDIT.md +0 -0
  50. {fullbleed-2.3.0 → fullbleed-2.4.0}/LICENSE +0 -0
  51. {fullbleed-2.3.0 → fullbleed-2.4.0}/LICENSING.md +0 -0
  52. {fullbleed-2.3.0 → fullbleed-2.4.0}/THIRD_PARTY_LICENSES.md +0 -0
  53. {fullbleed-2.3.0 → fullbleed-2.4.0}/build.rs +0 -0
  54. {fullbleed-2.3.0 → fullbleed-2.4.0}/build_backend/fullbleed_build_backend.py +0 -0
  55. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/Cargo.lock +0 -0
  56. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/Cargo.toml +0 -0
  57. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/LICENSE +0 -0
  58. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/README.md +0 -0
  59. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/specs/fullbleed.audit_registry.v1.yaml +0 -0
  60. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/specs/section508_html_registry.v1.yaml +0 -0
  61. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/specs/wcag20aa_registry.v1.yaml +0 -0
  62. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/src/json.rs +0 -0
  63. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/src/lib.rs +0 -0
  64. {fullbleed-2.3.0 → fullbleed-2.4.0}/crates/fullbleed_audit_contract/src/sha256.rs +0 -0
  65. {fullbleed-2.3.0 → fullbleed-2.4.0}/docs/specs/fullbleed.a11y.verify.v1.schema.json +0 -0
  66. {fullbleed-2.3.0 → fullbleed-2.4.0}/docs/specs/fullbleed.audit_registry.v1.yaml +0 -0
  67. {fullbleed-2.3.0 → fullbleed-2.4.0}/docs/specs/fullbleed.pmr.v1.schema.json +0 -0
  68. {fullbleed-2.3.0 → fullbleed-2.4.0}/docs/specs/section508_html_registry.v1.yaml +0 -0
  69. {fullbleed-2.3.0 → fullbleed-2.4.0}/docs/specs/wcag20aa_registry.v1.yaml +0 -0
  70. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/__init__.py +0 -0
  71. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/__main__.py +0 -0
  72. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/accessibility/__init__.py +0 -0
  73. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/accessibility/engine.py +0 -0
  74. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/accessibility/runtime.py +0 -0
  75. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/accessibility/types.py +0 -0
  76. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/audit_prototype.py +0 -0
  77. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/audit_section508.py +0 -0
  78. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/audit_wcag.py +0 -0
  79. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/__init__.py +0 -0
  80. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/accessibility.py +0 -0
  81. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/__init__.py +0 -0
  82. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/_core.py +0 -0
  83. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/agency_letter.py +0 -0
  84. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/court_motion_form.py +0 -0
  85. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/declaration_form.py +0 -0
  86. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/instruction_sheet.py +0 -0
  87. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/investment_portfolio_report.py +0 -0
  88. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/marriage_record.py +0 -0
  89. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/profiles.py +0 -0
  90. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/recorded_plat.py +0 -0
  91. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/redaction_request_form.py +0 -0
  92. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/cav/warranty_deed.py +0 -0
  93. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/core.py +0 -0
  94. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/primitives.py +0 -0
  95. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed/ui/style.py +0 -0
  96. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/__init__.py +0 -0
  97. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/bootstrap.min.css +0 -0
  98. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/fonts/Inter-Variable.ttf +0 -0
  99. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/fonts/NotoSans-Regular.ttf +0 -0
  100. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/fonts/NotoSansMath-Regular.ttf +0 -0
  101. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/fonts/NotoSansSymbols-Regular.ttf +0 -0
  102. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/fonts/NotoSansSymbols2-Regular.ttf +0 -0
  103. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_assets/icons/bootstrap-icons.svg +0 -0
  104. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/__init__.py +0 -0
  105. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/__main__.py +0 -0
  106. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/agent.py +0 -0
  107. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/agent_acceptance.py +0 -0
  108. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/assets.py +0 -0
  109. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/cache.py +0 -0
  110. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/finalize.py +0 -0
  111. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold.py +0 -0
  112. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/__init__.py +0 -0
  113. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/.gitignore +0 -0
  114. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/AGENTS.md +0 -0
  115. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/COMPLIANCE.md +0 -0
  116. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/SCAFFOLDING.md +0 -0
  117. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/__init__.py +0 -0
  118. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/body.py +0 -0
  119. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/fb_ui.py +0 -0
  120. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/footer.py +0 -0
  121. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/header.py +0 -0
  122. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/primitives.py +0 -0
  123. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/body.css +0 -0
  124. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/footer.css +0 -0
  125. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/header.css +0 -0
  126. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/primitives.css +0 -0
  127. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/report.py +0 -0
  128. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/styles/report.css +0 -0
  129. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/init/styles/tokens.css +0 -0
  130. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/README.md +0 -0
  131. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitignore +0 -0
  132. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitkeep +0 -0
  133. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/report.py +0 -0
  134. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/styles/report.css +0 -0
  135. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/accessible/vendor/fonts/Inter-Variable.ttf +0 -0
  136. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitignore +0 -0
  137. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitkeep +0 -0
  138. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/invoice/report.py +0 -0
  139. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.css +0 -0
  140. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.html +0 -0
  141. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/COMPLIANCE.md +0 -0
  142. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/README.md +0 -0
  143. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/SCAFFOLDING.md +0 -0
  144. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/assets/brand-mark.svg +0 -0
  145. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/assets/reference-pattern.svg +0 -0
  146. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/__init__.py +0 -0
  147. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/appendix.py +0 -0
  148. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/architecture.py +0 -0
  149. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/cover.py +0 -0
  150. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/data_pages.py +0 -0
  151. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/fb_ui.py +0 -0
  152. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/primitives.py +0 -0
  153. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/appendix.css +0 -0
  154. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/architecture.css +0 -0
  155. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/cover.css +0 -0
  156. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/data.css +0 -0
  157. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/primitives.css +0 -0
  158. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/visuals.css +0 -0
  159. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/visuals.py +0 -0
  160. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/data/reference.json +0 -0
  161. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/output/.gitignore +0 -0
  162. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/report.py +0 -0
  163. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/styles/report.css +0 -0
  164. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/reference/styles/tokens.css +0 -0
  165. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitignore +0 -0
  166. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitkeep +0 -0
  167. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/statement/report.py +0 -0
  168. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.css +0 -0
  169. {fullbleed-2.3.0 → fullbleed-2.4.0}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.html +0 -0
  170. {fullbleed-2.3.0 → fullbleed-2.4.0}/skills/fullbleed/SKILL.md +0 -0
  171. {fullbleed-2.3.0 → fullbleed-2.4.0}/skills/fullbleed/agents/openai.yaml +0 -0
  172. {fullbleed-2.3.0 → fullbleed-2.4.0}/skills/fullbleed/references/compliance.md +0 -0
  173. {fullbleed-2.3.0 → fullbleed-2.4.0}/skills/fullbleed/references/selection.md +0 -0
  174. {fullbleed-2.3.0 → fullbleed-2.4.0}/skills/fullbleed/references/workflows.md +0 -0
  175. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/base64.rs +0 -0
  176. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/css_queries.rs +0 -0
  177. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/debug.rs +0 -0
  178. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/doc_context.rs +0 -0
  179. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/doc_template.rs +0 -0
  180. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/finalize.rs +0 -0
  181. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/flate_native.rs +0 -0
  182. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/font_subset.rs +0 -0
  183. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/frame.rs +0 -0
  184. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/glyph_report.rs +0 -0
  185. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities.rs +0 -0
  186. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_0.rs +0 -0
  187. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_1.rs +0 -0
  188. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_2.rs +0 -0
  189. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_3.rs +0 -0
  190. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_4.rs +0 -0
  191. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/html_entities_5.rs +0 -0
  192. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/image_native.rs +0 -0
  193. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/jpeg_native.rs +0 -0
  194. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/math.rs +0 -0
  195. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/metrics.rs +0 -0
  196. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/native_shape.rs +0 -0
  197. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/page_data.rs +0 -0
  198. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/page_template.rs +0 -0
  199. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/parallel.rs +0 -0
  200. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/pdf_encodings.rs +0 -0
  201. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/pdf_native.rs +0 -0
  202. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/perf.rs +0 -0
  203. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/plan.rs +0 -0
  204. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/raster_native.rs +0 -0
  205. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/sfnt.rs +0 -0
  206. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/sfnt_cff.rs +0 -0
  207. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/sfnt_outline.rs +0 -0
  208. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/text_shape.rs +0 -0
  209. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/types.rs +0 -0
  210. {fullbleed-2.3.0 → fullbleed-2.4.0}/src/unicode_data.rs +0 -0
@@ -4,7 +4,7 @@ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "fullbleed"
7
- version = "2.3.0"
7
+ version = "2.4.0"
8
8
  dependencies = [
9
9
  "fullbleed_audit_contract",
10
10
  "subsetter",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fullbleed"
3
- version = "2.3.0"
3
+ version = "2.4.0"
4
4
  edition = "2024"
5
5
  rust-version = "1.85"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fullbleed
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: License :: OSI Approved :: MIT License
6
6
  Classifier: Operating System :: MacOS
@@ -170,6 +170,11 @@ Fixed-geometry slots may remain inside immutable page-space transforms and clips
170
170
  captures that active coordinate-state program once and replays it in each compact record overlay;
171
171
  it does not rerun layout or clone the complete page display list.
172
172
 
173
+ Base-14/WinAnsi slot paint keeps the measured byte-patch linker. Registered embedded fonts use a
174
+ command-level overlay program so each bound value is shaped and included in the font subset while
175
+ the compiled layout, pagination, and static page stream remain shared. The throughput figures above
176
+ describe the Base-14 fast lane; they are not claims for registered-font shaping.
177
+
173
178
  The fixed-copy result remains scoped to identical content; the variable-data result is scoped to
174
179
  paint-only text whose geometry does not reflow. Neither is a claim that arbitrary new HTML or
175
180
  size-changing records render 200x faster. See
@@ -208,7 +213,7 @@ python -m pip install fullbleed
208
213
  From a local wheel:
209
214
 
210
215
  ```bash
211
- python -m pip install C:\path\to\fullbleed-2.3.0-cp310-abi3-win_amd64.whl
216
+ python -m pip install C:\path\to\fullbleed-2.4.0-cp310-abi3-win_amd64.whl
212
217
  ```
213
218
 
214
219
  From a source checkout with Rust installed, no Python build package is needed:
@@ -590,18 +595,22 @@ Render/verify/plan key flags:
590
595
  Profile targets: `none`, `pdfa1a`, `pdfa1b`, `pdfa2a`, `pdfa2b`, `pdfa2u`, `pdfa3a`, `pdfa3b`, `pdfa3u`, `pdfa4`, `pdfa4e`, `pdfa4f`, `pdfx4`, `pdfua1`, `pdfua2`, `pdfvt1`, `wtpdf1r`, `wtpdf1a`, `tagged`.
591
596
  Aliases: `a`, `ua`, `vt`, `wt1r`, `wt1a`, `pdf/a`, `pdf/ua`, `pdf/vt`.
592
597
  Output intent metadata (`--output-intent-identifier|--output-intent-info|--output-intent-components`) requires `--output-intent-icc`.
598
+ `pdfx4` and `pdfvt1` force PDF 1.6 and require a title and explicit write date
599
+ (`--timestamp current`, a fixed UTC date, or `--timestamp-source SOURCE_DATE_EPOCH`).
600
+ [PDF/VT composition](docs/pdf-vt.md) documents record hierarchies, `--pdf-vt-job`,
601
+ private DPM, conservative reuse hints, and the independent release-validation boundary.
593
602
  Run `python tools/validate_pdf_profiles.py --download-verapdf --install-pdf-oxide --strict-external`
594
603
  to regenerate profile specimens, capture inspect/JIT evidence, replay
595
604
  deterministic hashes, validate PDF/A and PDF/UA with veraPDF, and validate
596
605
  PDF/X-4 with `pdf_oxide`. WTPDF profiles are validated with veraPDF
597
606
  `wt1r`/`wt1a` and include PDF Declaration evidence. `pdfa4f` emits and
598
607
  checks an associated `EmbeddedFiles` name tree. `pdfvt1` also emits and checks a parsed
599
- DPart graph (`DPartRoot`, `DPartRootNode`, one-level `NodeNameList`, leaf page range,
608
+ DPart graph (`DPartRoot`, `DPartRootNode`, `NodeNameList [/Job /Record /Document]`, leaf page range,
600
609
  and page `/DPart` references), including a supplemental multipage specimen
601
610
  for `/Start` and `/End`, reported as granular booleans plus
602
611
  `pdfvt_dpart_graph_valid`; use a dedicated PDF/VT preflight tool
603
612
  for third-party PDF/VT certification, or wire one into the same harness with
604
- `--pdfvt-cmd "tool --input {pdf}" --require-dedicated-pdfvt`.
613
+ `--pdfvt-cmd "tool --input {pdf}" --pdfvt-version-cmd "tool --version" --require-dedicated-pdfvt`.
605
614
  - Watermarking: `--watermark-text`, `--watermark-html`, `--watermark-image`, `--watermark-layer`, `--watermark-semantics`, `--watermark-opacity`, `--watermark-rotation`
606
615
  - Artifacts: `--emit-jit`, `--emit-perf`, `--emit-glyph-report`, `--emit-page-data`, `--emit-compose-plan`, `--emit-image`, `--image-dpi`, `--deterministic-hash`
607
616
  - Assets: `--asset`, `--asset-kind`, `--asset-name`, `--asset-trusted`, `--allow-remote-assets`
@@ -913,6 +922,14 @@ Entrypoint formats:
913
922
  - `module_name:factory_or_engine`
914
923
  - `path/to/file.py:factory_or_engine`
915
924
 
925
+ ## Rust chart compilation
926
+
927
+ For Rust-based visual/source frontends, the engine also provides
928
+ [document-context chart compilation](docs/chart-typography.md): normal CSS font
929
+ selection and size, project-font legend measurement/wrapping, semantic tables,
930
+ and observable layout failures. Generated SVG is derived output, not authoring
931
+ source.
932
+
916
933
  ## Python API Quick Start
917
934
 
918
935
  ```python
@@ -1079,8 +1096,9 @@ Module exports:
1079
1096
  The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
1080
1097
  content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
1081
1098
  fixed-geometry text overlays per record while sharing static paint. They require exact slot keys,
1082
- equal non-zero column lengths, page-local WinAnsi-compatible text, and an untagged profile; bound
1083
- values do not trigger reflow.
1099
+ equal non-zero column lengths, page-local text, and an untagged profile. Base-14 text uses the
1100
+ direct byte-patch lane; registered fonts are shaped into a command-level overlay. Bound values do
1101
+ not trigger layout or reflow.
1084
1102
 
1085
1103
  The reflow binding methods use the same exact-column contract but execute the compiled parsed-DOM
1086
1104
  program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page
@@ -127,6 +127,11 @@ Fixed-geometry slots may remain inside immutable page-space transforms and clips
127
127
  captures that active coordinate-state program once and replays it in each compact record overlay;
128
128
  it does not rerun layout or clone the complete page display list.
129
129
 
130
+ Base-14/WinAnsi slot paint keeps the measured byte-patch linker. Registered embedded fonts use a
131
+ command-level overlay program so each bound value is shaped and included in the font subset while
132
+ the compiled layout, pagination, and static page stream remain shared. The throughput figures above
133
+ describe the Base-14 fast lane; they are not claims for registered-font shaping.
134
+
130
135
  The fixed-copy result remains scoped to identical content; the variable-data result is scoped to
131
136
  paint-only text whose geometry does not reflow. Neither is a claim that arbitrary new HTML or
132
137
  size-changing records render 200x faster. See
@@ -165,7 +170,7 @@ python -m pip install fullbleed
165
170
  From a local wheel:
166
171
 
167
172
  ```bash
168
- python -m pip install C:\path\to\fullbleed-2.3.0-cp310-abi3-win_amd64.whl
173
+ python -m pip install C:\path\to\fullbleed-2.4.0-cp310-abi3-win_amd64.whl
169
174
  ```
170
175
 
171
176
  From a source checkout with Rust installed, no Python build package is needed:
@@ -547,18 +552,22 @@ Render/verify/plan key flags:
547
552
  Profile targets: `none`, `pdfa1a`, `pdfa1b`, `pdfa2a`, `pdfa2b`, `pdfa2u`, `pdfa3a`, `pdfa3b`, `pdfa3u`, `pdfa4`, `pdfa4e`, `pdfa4f`, `pdfx4`, `pdfua1`, `pdfua2`, `pdfvt1`, `wtpdf1r`, `wtpdf1a`, `tagged`.
548
553
  Aliases: `a`, `ua`, `vt`, `wt1r`, `wt1a`, `pdf/a`, `pdf/ua`, `pdf/vt`.
549
554
  Output intent metadata (`--output-intent-identifier|--output-intent-info|--output-intent-components`) requires `--output-intent-icc`.
555
+ `pdfx4` and `pdfvt1` force PDF 1.6 and require a title and explicit write date
556
+ (`--timestamp current`, a fixed UTC date, or `--timestamp-source SOURCE_DATE_EPOCH`).
557
+ [PDF/VT composition](docs/pdf-vt.md) documents record hierarchies, `--pdf-vt-job`,
558
+ private DPM, conservative reuse hints, and the independent release-validation boundary.
550
559
  Run `python tools/validate_pdf_profiles.py --download-verapdf --install-pdf-oxide --strict-external`
551
560
  to regenerate profile specimens, capture inspect/JIT evidence, replay
552
561
  deterministic hashes, validate PDF/A and PDF/UA with veraPDF, and validate
553
562
  PDF/X-4 with `pdf_oxide`. WTPDF profiles are validated with veraPDF
554
563
  `wt1r`/`wt1a` and include PDF Declaration evidence. `pdfa4f` emits and
555
564
  checks an associated `EmbeddedFiles` name tree. `pdfvt1` also emits and checks a parsed
556
- DPart graph (`DPartRoot`, `DPartRootNode`, one-level `NodeNameList`, leaf page range,
565
+ DPart graph (`DPartRoot`, `DPartRootNode`, `NodeNameList [/Job /Record /Document]`, leaf page range,
557
566
  and page `/DPart` references), including a supplemental multipage specimen
558
567
  for `/Start` and `/End`, reported as granular booleans plus
559
568
  `pdfvt_dpart_graph_valid`; use a dedicated PDF/VT preflight tool
560
569
  for third-party PDF/VT certification, or wire one into the same harness with
561
- `--pdfvt-cmd "tool --input {pdf}" --require-dedicated-pdfvt`.
570
+ `--pdfvt-cmd "tool --input {pdf}" --pdfvt-version-cmd "tool --version" --require-dedicated-pdfvt`.
562
571
  - Watermarking: `--watermark-text`, `--watermark-html`, `--watermark-image`, `--watermark-layer`, `--watermark-semantics`, `--watermark-opacity`, `--watermark-rotation`
563
572
  - Artifacts: `--emit-jit`, `--emit-perf`, `--emit-glyph-report`, `--emit-page-data`, `--emit-compose-plan`, `--emit-image`, `--image-dpi`, `--deterministic-hash`
564
573
  - Assets: `--asset`, `--asset-kind`, `--asset-name`, `--asset-trusted`, `--allow-remote-assets`
@@ -870,6 +879,14 @@ Entrypoint formats:
870
879
  - `module_name:factory_or_engine`
871
880
  - `path/to/file.py:factory_or_engine`
872
881
 
882
+ ## Rust chart compilation
883
+
884
+ For Rust-based visual/source frontends, the engine also provides
885
+ [document-context chart compilation](docs/chart-typography.md): normal CSS font
886
+ selection and size, project-font legend measurement/wrapping, semantic tables,
887
+ and observable layout failures. Generated SVG is derived output, not authoring
888
+ source.
889
+
873
890
  ## Python API Quick Start
874
891
 
875
892
  ```python
@@ -1036,8 +1053,9 @@ Module exports:
1036
1053
  The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
1037
1054
  content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
1038
1055
  fixed-geometry text overlays per record while sharing static paint. They require exact slot keys,
1039
- equal non-zero column lengths, page-local WinAnsi-compatible text, and an untagged profile; bound
1040
- values do not trigger reflow.
1056
+ equal non-zero column lengths, page-local text, and an untagged profile. Base-14 text uses the
1057
+ direct byte-patch lane; registered fonts are shaped into a command-level overlay. Bound values do
1058
+ not trigger layout or reflow.
1041
1059
 
1042
1060
  The reflow binding methods use the same exact-column contract but execute the compiled parsed-DOM
1043
1061
  program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page