athena-python-docx 0.39.0__tar.gz → 0.41.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.
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/AGENTS.md +141 -6
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/PKG-INFO +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/__init__.py +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_buffer.py +386 -15
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_http_doc.py +66 -4
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/commands.py +10 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/comments.py +78 -11
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/document.py +34 -6
- athena_python_docx-0.41.0/docx/drawing/__init__.py +136 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/section.py +188 -19
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/_table.py +19 -2
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/table.py +501 -76
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/hyperlink.py +47 -14
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/paragraph.py +232 -24
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/parfmt.py +1 -5
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/run.py +80 -13
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/tabstops.py +1 -3
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/pyproject.toml +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/fake_session.py +5 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/note_reference_reads.json +0 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/baseline.json +4 -101
- athena_python_docx-0.41.0/tests/live/fixture_scripts.py +727 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/test_live_runner.py +46 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/intentional_deviations.json +112 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comments.py +156 -7
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_hyperlink_coalescing.py +43 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_iter_inner_content.py +1 -1
- athena_python_docx-0.41.0/tests/test_listed_paragraph_reads.py +98 -0
- athena_python_docx-0.41.0/tests/test_literal_no_break_hyphens.py +140 -0
- athena_python_docx-0.41.0/tests/test_literal_soft_hyphens.py +59 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_runs_hyperlinks.py +46 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_rendered_page_breaks.py +24 -0
- athena_python_docx-0.41.0/tests/test_sections_empty_list.py +49 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_names.py +27 -0
- athena_python_docx-0.41.0/tests/test_table_listing_reads.py +410 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_read_reuse.py +106 -34
- athena_python_docx-0.41.0/tests/test_versioned_read_reuse.py +768 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_wire_contract.py +1 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/uv.lock +1 -1
- athena_python_docx-0.39.0/docx/drawing/__init__.py +0 -68
- athena_python_docx-0.39.0/tests/live/fixture_scripts.py +0 -255
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/.gitignore +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/CLAUDE.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_batching.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_capabilities.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_citations.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_execution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_http.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_postproc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_proxy.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_ptc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_references.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_run_order.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_tracked.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/_xml_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/api.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/blkcntnr.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/charts.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/client.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/base.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/dml.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/table.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/enum/text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/errors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/exceptions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/fields.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/footnotes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/exceptions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/image/image.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/math.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/opc/coreprops.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/revisions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/sdt.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/session.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/settings.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/shared.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/latent.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/styles/styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/font.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/toc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/docx/typing.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/dump_wire_fixtures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/release.sh +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/conftest.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/agent_documents.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/default_style_run_formatting.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/header_footer_pictures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/less_used_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/merged_cell_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/paragraph_text_setter.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/picture_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/proxy_equality.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/return_types.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/xml_incompatible_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe/zero_and_negative_indents.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw16_header_footer_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw17_header_letterhead_filled.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw18_header_table_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw19_header_table_rows_columns.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/op_snapshots/rw20_header_table_merges.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/field_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/ruby_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/fixtures/symbol_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/reader.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/sdk_driver.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/live/stock_driver.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_add_section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_alignment_values.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extension_creates_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_batch_chunking.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_battery_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_borders_spec.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_fastpath_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_merge.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_nested_tables.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_paragraphs_listed.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_citations.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_color_format_theme.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_commands.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comment_paragraphs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_comments_first_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_content_control_value.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_core_properties.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_create.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_document_settings_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_drawing_image.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_empty_hyperlinks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_enum_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_export_docx_clean.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_export_rescue_anchors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_refresh.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_field_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_flushed_write_failures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_page_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_alt_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_size.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shape_type.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_inline_shapes_floating.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_latent_style_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_line_clear_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cell_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_missing_modules.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_nested_table_refused.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_note_reference_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_page_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_delete.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_indent_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_text_empty_run.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parfmt_clears.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_pdf_export_and_page_renders.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_b_headers_footers.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_positional_cell_id.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_proxy_equality.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_ptc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_read_run_ranges.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_repeated_node_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_restart_numbering.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_round_trip_smoke_script.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_ruby_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_add_picture_anchor.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_break_inner_content.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_edges.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_formatting_wire.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_later_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_mark_inheritance.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_page_number_blocks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_table_style_objects.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_text_python_docx.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_text_refreshes_paragraph.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_run_unmodeled_toggles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_sdk_reads_served.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_section_read_lengths.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_delete.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_formatting_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_metadata_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_resolution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_tab_stops.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_style_tab_stops_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_symbol_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_tab_stop_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_add_row_grid_row.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_anchors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_clears.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_direction.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_length_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_text_control_characters.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_tracked_revisions_offsets.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_unmapped_alignment_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_uv_lock_version.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_xml_incompatible_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.41.0}/tests/test_zod_wire_contract.py +0 -0
|
@@ -363,6 +363,13 @@ Issue numbers reference `python-openxml/python-docx`.
|
|
|
363
363
|
through `CreateHyperlink` (DOCX Studio `doc.hyperlinks.create`). Returns
|
|
364
364
|
the same `Hyperlink` class the read path already exposes. Also
|
|
365
365
|
available as `Run.add_hyperlink` for convenience.
|
|
366
|
+
A link whose target has a scheme the editor does not keep (`file:`, a
|
|
367
|
+
mistyped `Mail:`, `javascript:`), written by a script or in the source, is
|
|
368
|
+
stored as written beside an empty clickable target (`unsafeHref`): it reads
|
|
369
|
+
as python-docx reads it (`Hyperlink`, `address`, `url`, its runs), the
|
|
370
|
+
export writes the target back, and the editor draws its text as a link that
|
|
371
|
+
nothing makes clickable (owner decision, 2026-10-23;
|
|
372
|
+
`hyperlinks-unlisted-schemes`).
|
|
366
373
|
|
|
367
374
|
- **`Run.add_field(kind, *, args=None, cached_result=None) -> Field`**
|
|
368
375
|
+ **`Document.fields: Fields`** — generic Word field insertion.
|
|
@@ -1050,7 +1057,11 @@ architecture or a DOCX Studio constraint:
|
|
|
1050
1057
|
holds `w:pStyle` alone, the editor paints it from that definition and
|
|
1051
1058
|
the export adds the definition (with a list of the document's own for a
|
|
1052
1059
|
numbered list style), as Word does when the style is applied, so the
|
|
1053
|
-
paragraph reads back as that built-in. A
|
|
1060
|
+
paragraph reads back as that built-in. A built-in the uploaded document's
|
|
1061
|
+
source already named without defining it (`Info`'s `undefinedStyleIds`)
|
|
1062
|
+
reads as the default paragraph style, as python-docx reads it and Word
|
|
1063
|
+
draws it: the editor paints it so and the export adds no definition.
|
|
1064
|
+
A header or footer part a read adds
|
|
1054
1065
|
(python-docx's `default-header.xml`) names `Header` (`Footer`) only where
|
|
1055
1066
|
the document defines it: elsewhere python-docx's reference resolves to the
|
|
1056
1067
|
default paragraph style and adds no definition, so the SDK's paragraph
|
|
@@ -1193,14 +1204,29 @@ architecture or a DOCX Studio constraint:
|
|
|
1193
1204
|
the paragraph's runs are as its records hold them, in the body, a table cell,
|
|
1194
1205
|
a header, a footer or a comment; a body or cell paragraph with a link or an
|
|
1195
1206
|
inline content control reads its runs from the records its import keeps for
|
|
1196
|
-
the reads alone (`_readRunRecords`)
|
|
1197
|
-
|
|
1198
|
-
footer's
|
|
1199
|
-
|
|
1207
|
+
the reads alone (`_readRunRecords`), carried through an SDK run write
|
|
1208
|
+
(`_writtenRunRecords`), until another edit changes them, a header's or
|
|
1209
|
+
footer's with a link always does, and a paragraph with a tracked change, an
|
|
1210
|
+
edited one with a link, and a comment's with a link read their runs from
|
|
1211
|
+
their marks, the base text included. A write to the run
|
|
1200
1212
|
(its text, an append, its formatting) makes the base text ordinary text,
|
|
1201
1213
|
which then reads as text: docx-studio keeps no guide through an edit, where
|
|
1202
1214
|
upstream keeps the `w:ruby` through all but a text write.
|
|
1203
1215
|
|
|
1216
|
+
- **A character of one of Word's run elements that the source wrote as text
|
|
1217
|
+
reads as written.** A source can write a non-breaking or soft hyphen as the
|
|
1218
|
+
character in a `w:t` (generated text holds them so), which upstream reads as
|
|
1219
|
+
it is, where it reads a `w:noBreakHyphen` as `-` and a `w:softHyphen` as
|
|
1220
|
+
nothing. docx-studio keeps each character it lists
|
|
1221
|
+
(`LITERAL_CHARACTERS`, `packages/core/src/utils/wordCharacters.ts`) apart
|
|
1222
|
+
from the element under the `literalCharacter` mark, and its reads send their
|
|
1223
|
+
offsets in a run's text (`literalCharacters`), which `_word_text` reads as
|
|
1224
|
+
written; a docx-studio that sends none reads each as the element, as before.
|
|
1225
|
+
The export writes them back in a `w:t`, and text a script writes holds them
|
|
1226
|
+
as upstream writes it, in a `w:t`. `Document.find_replace` keeps each hyphen
|
|
1227
|
+
the replacement shares with the match as the match held it, and writes any
|
|
1228
|
+
other in a `w:t`, as upstream writes text.
|
|
1229
|
+
|
|
1204
1230
|
- **`CoreProperties.modified` is the time of the last save.** The asset is a
|
|
1205
1231
|
live Word document, and docx-studio stamps `dcterms:modified` when it saves
|
|
1206
1232
|
a change to the package: a section, style or property write, and the export
|
|
@@ -1220,6 +1246,111 @@ architecture or a DOCX Studio constraint:
|
|
|
1220
1246
|
Markup) show insertions and hide deletions, as these reads do.
|
|
1221
1247
|
`doc.revisions` lists every change (`tests/test_run_text_python_docx.py`).
|
|
1222
1248
|
|
|
1249
|
+
- **Runs inside an inline wrapper read as the paragraph's.** The runs of a
|
|
1250
|
+
`w:smartTag`, an inline `w:customXml`, a `w:dir` or a `w:bdo` read in
|
|
1251
|
+
`Paragraph.text`, `runs`, `iter_inner_content()`, `Hyperlink.runs` and
|
|
1252
|
+
`_Cell.text`, as Word shows them; upstream reads only a `w:p`'s direct
|
|
1253
|
+
`w:r` and `w:hyperlink` children, so it cannot see their text. With
|
|
1254
|
+
upstream's reads, `p.text = p.text.replace(...)` on such a paragraph would
|
|
1255
|
+
delete the wrapped text, which the setter clears unseen: 62 of 6,803
|
|
1256
|
+
customer uploads hold text inside smart tags. Decided on 2026-10-21 under
|
|
1257
|
+
the Word fidelity goal (owner question 47), the same choice as tracked
|
|
1258
|
+
changes; the owner may overrule it. Recorded in
|
|
1259
|
+
`tests/parity/intentional_deviations.json` (`live_deviations`).
|
|
1260
|
+
|
|
1261
|
+
- **Two things a source writes that the model holds otherwise read as the
|
|
1262
|
+
model holds them** (2026-10-22 SDK live parity run over 398 customer
|
|
1263
|
+
documents). Each is recorded in
|
|
1264
|
+
`tests/parity/intentional_deviations.json` (`live_deviations`) with a
|
|
1265
|
+
synthetic fixture of `docx-fidelity/regression-fixtures/`:
|
|
1266
|
+
- A run size written as a measure with a unit (`w:sz w:val="6mm"`, as
|
|
1267
|
+
Microsoft Teams transcripts write it; 9 documents) reads in whole
|
|
1268
|
+
half-points (`Length(215900)`, 17pt, where upstream reads 216000): under
|
|
1269
|
+
a hundredth of a point, and holding the measure would change the stored
|
|
1270
|
+
model of a run (`runs-measured-sizes`). Confirmed by the owner,
|
|
1271
|
+
2026-10-23.
|
|
1272
|
+
- A page margin written as decimal twips (`w:left="1440.0000000000002"`;
|
|
1273
|
+
1 document) reads as the length it holds, where upstream raises
|
|
1274
|
+
`ValueError`; the export writes it in whole twips
|
|
1275
|
+
(`sections-fractional-twips`). Confirmed by the owner, 2026-10-23.
|
|
1276
|
+
|
|
1277
|
+
- **Four more things a source writes that the model holds otherwise read as the
|
|
1278
|
+
model holds them** (2026-10-22 SDK live parity run over 398 customer
|
|
1279
|
+
documents, round 2). Each is recorded in `tests/parity/intentional_deviations.json`
|
|
1280
|
+
(`live_deviations`) with a synthetic fixture of
|
|
1281
|
+
`docx-fidelity/regression-fixtures/`:
|
|
1282
|
+
- A run that holds Word's rendered page break before a page break
|
|
1283
|
+
(`<w:lastRenderedPageBreak/><w:br w:type="page"/>`; 2 documents) yields the
|
|
1284
|
+
page break's `""` before the `RenderedPageBreak`, as a run that holds them
|
|
1285
|
+
the other way round does: the model holds the page break apart from the
|
|
1286
|
+
paragraph and keeps no order between the two
|
|
1287
|
+
(`breaks-rendered-before-page-break`). Confirmed by the owner, 2026-10-23.
|
|
1288
|
+
- A rendered page break in the run that begins a field (2 documents) reads
|
|
1289
|
+
in no run and no paragraph: the import keeps none in a field's own runs,
|
|
1290
|
+
which its node stands for (`fields-rendered-break-begin-run`). Confirmed
|
|
1291
|
+
by the owner, 2026-10-23.
|
|
1292
|
+
- A table that names a table style its styles.xml does not define (1
|
|
1293
|
+
document; 16 of 6,806 uploads) reads as Word's built-in style of that id,
|
|
1294
|
+
which the editor draws it with, where upstream reads the default table
|
|
1295
|
+
style; reading the default would change how such tables draw. The export
|
|
1296
|
+
leaves the style undefined, as the source has it: an unedited download of
|
|
1297
|
+
a document imported since is the source's bytes (owner, 2026-10-23). The read is kept
|
|
1298
|
+
(`tables-undefined-style`): checked on 2026-10-24 against the one sample
|
|
1299
|
+
document's Word PDF, whose tables draw alike under either style (empty
|
|
1300
|
+
paragraph defaults, the tables' own borders and margins) and match the
|
|
1301
|
+
editor's Table Grid layout, so no corpus document yet tells the two apart.
|
|
1302
|
+
- A package with no styles part (1 document) reads Word's built-in styles,
|
|
1303
|
+
which the editor gives it, where upstream reads its own default template's
|
|
1304
|
+
(`styles-part-absent`). Confirmed by the owner, 2026-10-23.
|
|
1305
|
+
|
|
1306
|
+
- **One more read follows the model where python-docx reads the source**
|
|
1307
|
+
(2026-10-22 SDK live parity run over 398 customer documents, round 3). It is
|
|
1308
|
+
recorded in `tests/parity/intentional_deviations.json` (`live_deviations`)
|
|
1309
|
+
with a synthetic fixture:
|
|
1310
|
+
- A comment's annotation reference run that names no character style
|
|
1311
|
+
(1 document, 13 of 6,826 uploads) reads in the CommentReference style, in
|
|
1312
|
+
which the export writes every comment's annotation run when it writes the
|
|
1313
|
+
comments part: the model holds no annotation mark, and the parser keeps the
|
|
1314
|
+
run as an empty run nothing tells from another
|
|
1315
|
+
(`comments-annotation-ref-unstyled`). Confirmed by the owner, 2026-10-23.
|
|
1316
|
+
|
|
1317
|
+
A comment whose range ends between paragraphs (`w:commentRangeEnd` a child
|
|
1318
|
+
of `w:body`; 1 document, 11 of 6,826 uploads) is no longer a deviation, with
|
|
1319
|
+
the other comments whose reference run stands apart from the text their
|
|
1320
|
+
range marks: one over links alone in several paragraphs or over a picture or
|
|
1321
|
+
an object alone, which the model holds no range for, one that ends in a
|
|
1322
|
+
paragraph holding none of its text, and one whose run follows a field's end
|
|
1323
|
+
run. The import records where the source body holds each reference run and
|
|
1324
|
+
range end (`commentReferenceRunPlaces`: the paragraph and how many of its
|
|
1325
|
+
runs come before it), the paragraphs whose text it marks for the comment,
|
|
1326
|
+
and the fingerprint of each body block that holds them. While those blocks
|
|
1327
|
+
are as imported and the comment marks the same paragraphs, the run reads
|
|
1328
|
+
where the source holds it, where the export keeps the blocks' source XML,
|
|
1329
|
+
and a reply added since reads beside the comment's range end, where the
|
|
1330
|
+
export writes it (`comments-range-end-between-paragraphs`,
|
|
1331
|
+
`comments-range-over-links`, `comments-range-end-without-text`,
|
|
1332
|
+
`comments-range-over-object`). A block an edit changed, a comment moved to
|
|
1333
|
+
new text, and a room imported before the record read where the model places
|
|
1334
|
+
the run, as before.
|
|
1335
|
+
|
|
1336
|
+
A third, runs of one formatting read and exported joined after a run write
|
|
1337
|
+
in a paragraph with a link, an inline content control, an equation or a
|
|
1338
|
+
field beside a picture, is no longer a deviation (the owner asked for it to
|
|
1339
|
+
be fixed, 2026-10-23, #46477): a run write (a format, `run.text`,
|
|
1340
|
+
`add_run`, `add_text`) carries the records the read takes of such a
|
|
1341
|
+
paragraph's runs (`_writtenRunRecords`), each `w:r` kept with the written
|
|
1342
|
+
run changed as python-docx changes it, and the export writes the paragraph
|
|
1343
|
+
from them. A format of one of a field's own runs is carried too, into the
|
|
1344
|
+
field's record (2026-10-24, #46477). A write the records cannot describe (a
|
|
1345
|
+
write across a field, a field's result written, a run the offsets cannot
|
|
1346
|
+
tell from an empty one beside it) leaves the paragraph as before: a link
|
|
1347
|
+
paragraph's kept content, else the runs its marks make. Fixture scripts
|
|
1348
|
+
`fixture-links-run-write-keeps-runs`, `fixture-links-run-writes`,
|
|
1349
|
+
`fixture-content-controls-inline-run-writes`,
|
|
1350
|
+
`fixture-equations-beside-runs-run-writes`,
|
|
1351
|
+
`fixture-fields-beside-pictures-run-writes` and
|
|
1352
|
+
`fixture-fields-beside-pictures-field-run-formats`.
|
|
1353
|
+
|
|
1223
1354
|
- **A citation link Athena added reads as its text, as the export writes it**
|
|
1224
1355
|
(owner decision #40122). Athena's citation flow stamps the links it writes
|
|
1225
1356
|
with the `Athena citation` tooltip. These links only navigate inside Athena,
|
|
@@ -1246,7 +1377,11 @@ architecture or a DOCX Studio constraint:
|
|
|
1246
1377
|
is the link's, as in python-docx. Each paragraph of a field that spans
|
|
1247
1378
|
paragraphs (a table of contents) holds the field character runs it has
|
|
1248
1379
|
(`tests/test_field_reads_python_docx_parity.py`, against stock python-docx
|
|
1249
|
-
on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field
|
|
1380
|
+
on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field the source
|
|
1381
|
+
wrote whole in one `w:r` (begin, field code, separate and end, no result, as
|
|
1382
|
+
generators write a page number) is that one run, a `begin` run with that
|
|
1383
|
+
run's formatting, as python-docx reads it, and docx-studio writes it back
|
|
1384
|
+
as one run. A field takes no
|
|
1250
1385
|
room in the text-address space, so its runs stand at one offset. Writes:
|
|
1251
1386
|
- setting a result run's `.text` changes the field's displayed result,
|
|
1252
1387
|
as in python-docx (`Replace` with a `field` target): the export keeps
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: athena-python-docx
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.41.0
|
|
4
4
|
Summary: Drop-in replacement for python-docx that connects to Athena's DOCX Studio collaborative document stack
|
|
5
5
|
Project-URL: Homepage, https://athenaintelligence.ai
|
|
6
6
|
Author-email: Athena Intelligence <engineering@athenaintelligence.ai>
|