athena-python-docx 0.39.0__tar.gz → 0.40.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.40.0}/AGENTS.md +123 -6
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/PKG-INFO +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/__init__.py +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_buffer.py +386 -15
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_http_doc.py +66 -4
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/commands.py +10 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/comments.py +16 -10
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/document.py +34 -6
- athena_python_docx-0.40.0/docx/drawing/__init__.py +136 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/section.py +188 -19
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/_table.py +19 -2
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/table.py +501 -76
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/hyperlink.py +47 -14
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/paragraph.py +192 -14
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/parfmt.py +1 -5
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/run.py +80 -13
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/tabstops.py +1 -3
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/pyproject.toml +1 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/fake_session.py +5 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/note_reference_reads.json +0 -1
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/baseline.json +4 -101
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/fixture_scripts.py +154 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/test_live_runner.py +46 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/intentional_deviations.json +120 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comments.py +24 -7
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_iter_inner_content.py +1 -1
- athena_python_docx-0.40.0/tests/test_listed_paragraph_reads.py +98 -0
- athena_python_docx-0.40.0/tests/test_literal_no_break_hyphens.py +140 -0
- athena_python_docx-0.40.0/tests/test_literal_soft_hyphens.py +59 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_runs_hyperlinks.py +46 -0
- athena_python_docx-0.40.0/tests/test_sections_empty_list.py +49 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_names.py +27 -0
- athena_python_docx-0.40.0/tests/test_table_listing_reads.py +410 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_read_reuse.py +106 -34
- athena_python_docx-0.40.0/tests/test_versioned_read_reuse.py +768 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_wire_contract.py +1 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/uv.lock +1 -1
- athena_python_docx-0.39.0/docx/drawing/__init__.py +0 -68
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/.gitignore +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/CLAUDE.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_batching.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_capabilities.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_citations.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_execution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_http.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_postproc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_proxy.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_ptc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_references.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_run_order.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_tracked.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_xml_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/api.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/blkcntnr.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/charts.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/client.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/base.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/dml.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/table.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/errors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/exceptions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/fields.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/footnotes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/exceptions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/image.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/math.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/opc/coreprops.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/revisions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/sdt.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/session.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/settings.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/shared.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/latent.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/font.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/toc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/typing.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/dump_wire_fixtures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/release.sh +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/conftest.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/agent_documents.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/default_style_run_formatting.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/header_footer_pictures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/less_used_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/merged_cell_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/paragraph_text_setter.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/picture_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/proxy_equality.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/return_types.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/xml_incompatible_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/zero_and_negative_indents.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.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.40.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw16_header_footer_tables.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw17_header_letterhead_filled.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw18_header_table_properties.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw19_header_table_rows_columns.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw20_header_table_merges.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/field_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/ruby_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/symbol_reads.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/reader.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/runner.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/sdk_driver.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/stock_driver.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/README.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_add_section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_alignment_values.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extension_creates_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_batch_chunking.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_battery_cases.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_borders_spec.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_fastpath_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_merge.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_nested_tables.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_paragraphs_listed.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_citations.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_color_format_theme.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_commands.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comment_paragraphs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comments_first_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_content_control_value.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_core_properties.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_create.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_settings_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_drawing_image.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_empty_hyperlinks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_enum_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_export_docx_clean.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_export_rescue_anchors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_refresh.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_flushed_write_failures.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_hyperlink_coalescing.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_page_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_alt_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_size.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_type.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shapes_floating.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_latent_style_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_line_clear_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_missing_modules.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_nested_table_refused.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_note_reference_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_page_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_delete.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_indent_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_empty_run.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parfmt_clears.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_pdf_export_and_page_renders.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_b_headers_footers.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_positional_cell_id.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_proxy_equality.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_ptc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_read_run_ranges.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_rendered_page_breaks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_repeated_node_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_restart_numbering.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_round_trip_smoke_script.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_ruby_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_add_picture_anchor.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_break_inner_content.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_edges.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_formatting_wire.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_identity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_later_runs.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_mark_inheritance.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_page_number_blocks.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_table_style_objects.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_text_python_docx.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_text_refreshes_paragraph.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_unmodeled_toggles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_sdk_reads_served.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_section_read_lengths.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_delete.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_formatting_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_metadata_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_resolution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops_read.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_symbol_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_tab_stop_writes.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_add_row_grid_row.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_anchors.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_clears.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_direction.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_length_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_text_control_characters.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_tracked_revisions_offsets.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_unmapped_alignment_reads.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_uv_lock_version.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_xml_incompatible_text.py +0 -0
- {athena_python_docx-0.39.0 → athena_python_docx-0.40.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,27 @@ 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`.
|
|
1227
|
+
|
|
1204
1228
|
- **`CoreProperties.modified` is the time of the last save.** The asset is a
|
|
1205
1229
|
live Word document, and docx-studio stamps `dcterms:modified` when it saves
|
|
1206
1230
|
a change to the package: a section, style or property write, and the export
|
|
@@ -1220,6 +1244,95 @@ architecture or a DOCX Studio constraint:
|
|
|
1220
1244
|
Markup) show insertions and hide deletions, as these reads do.
|
|
1221
1245
|
`doc.revisions` lists every change (`tests/test_run_text_python_docx.py`).
|
|
1222
1246
|
|
|
1247
|
+
- **Runs inside an inline wrapper read as the paragraph's.** The runs of a
|
|
1248
|
+
`w:smartTag`, an inline `w:customXml`, a `w:dir` or a `w:bdo` read in
|
|
1249
|
+
`Paragraph.text`, `runs`, `iter_inner_content()`, `Hyperlink.runs` and
|
|
1250
|
+
`_Cell.text`, as Word shows them; upstream reads only a `w:p`'s direct
|
|
1251
|
+
`w:r` and `w:hyperlink` children, so it cannot see their text. With
|
|
1252
|
+
upstream's reads, `p.text = p.text.replace(...)` on such a paragraph would
|
|
1253
|
+
delete the wrapped text, which the setter clears unseen: 62 of 6,803
|
|
1254
|
+
customer uploads hold text inside smart tags. Decided on 2026-10-21 under
|
|
1255
|
+
the Word fidelity goal (owner question 47), the same choice as tracked
|
|
1256
|
+
changes; the owner may overrule it. Recorded in
|
|
1257
|
+
`tests/parity/intentional_deviations.json` (`live_deviations`).
|
|
1258
|
+
|
|
1259
|
+
- **Two things a source writes that the model holds otherwise read as the
|
|
1260
|
+
model holds them** (2026-10-22 SDK live parity run over 398 customer
|
|
1261
|
+
documents). Each is recorded in
|
|
1262
|
+
`tests/parity/intentional_deviations.json` (`live_deviations`) with a
|
|
1263
|
+
synthetic fixture of `docx-fidelity/regression-fixtures/`:
|
|
1264
|
+
- A run size written as a measure with a unit (`w:sz w:val="6mm"`, as
|
|
1265
|
+
Microsoft Teams transcripts write it; 9 documents) reads in whole
|
|
1266
|
+
half-points (`Length(215900)`, 17pt, where upstream reads 216000): under
|
|
1267
|
+
a hundredth of a point, and holding the measure would change the stored
|
|
1268
|
+
model of a run (`runs-measured-sizes`). Confirmed by the owner,
|
|
1269
|
+
2026-10-23.
|
|
1270
|
+
- A page margin written as decimal twips (`w:left="1440.0000000000002"`;
|
|
1271
|
+
1 document) reads as the length it holds, where upstream raises
|
|
1272
|
+
`ValueError`; the export writes it in whole twips
|
|
1273
|
+
(`sections-fractional-twips`). Confirmed by the owner, 2026-10-23.
|
|
1274
|
+
|
|
1275
|
+
- **Four more things a source writes that the model holds otherwise read as the
|
|
1276
|
+
model holds them** (2026-10-22 SDK live parity run over 398 customer
|
|
1277
|
+
documents, round 2). Each is recorded in `tests/parity/intentional_deviations.json`
|
|
1278
|
+
(`live_deviations`) with a synthetic fixture of
|
|
1279
|
+
`docx-fidelity/regression-fixtures/`:
|
|
1280
|
+
- A run that holds Word's rendered page break before a page break
|
|
1281
|
+
(`<w:lastRenderedPageBreak/><w:br w:type="page"/>`; 2 documents) yields the
|
|
1282
|
+
page break's `""` before the `RenderedPageBreak`, as a run that holds them
|
|
1283
|
+
the other way round does: the model holds the page break apart from the
|
|
1284
|
+
paragraph and keeps no order between the two
|
|
1285
|
+
(`breaks-rendered-before-page-break`). Confirmed by the owner, 2026-10-23.
|
|
1286
|
+
- A rendered page break in the run that begins a field (2 documents) reads
|
|
1287
|
+
in no run and no paragraph: the import keeps none in a field's own runs,
|
|
1288
|
+
which its node stands for (`fields-rendered-break-begin-run`). Confirmed
|
|
1289
|
+
by the owner, 2026-10-23.
|
|
1290
|
+
- A table that names a table style its styles.xml does not define (1
|
|
1291
|
+
document; 16 of 6,806 uploads) reads as Word's built-in style of that id,
|
|
1292
|
+
which the editor draws it with, where upstream reads the default table
|
|
1293
|
+
style; reading the default would change how such tables draw. The export
|
|
1294
|
+
leaves the style undefined, as the source has it: an unedited download of
|
|
1295
|
+
a document imported since is the source's bytes (owner, 2026-10-23). The read is kept until Word can be
|
|
1296
|
+
checked, as no Word probe can be made on the machine that recorded it
|
|
1297
|
+
(`tables-undefined-style`).
|
|
1298
|
+
- A package with no styles part (1 document) reads Word's built-in styles,
|
|
1299
|
+
which the editor gives it, where upstream reads its own default template's
|
|
1300
|
+
(`styles-part-absent`). Confirmed by the owner, 2026-10-23.
|
|
1301
|
+
|
|
1302
|
+
- **Two more reads follow the model where python-docx reads the source**
|
|
1303
|
+
(2026-10-22 SDK live parity run over 398 customer documents, round 3). Each is
|
|
1304
|
+
recorded in `tests/parity/intentional_deviations.json` (`live_deviations`)
|
|
1305
|
+
with a synthetic fixture:
|
|
1306
|
+
- A comment whose range ends between paragraphs (`w:commentRangeEnd` a
|
|
1307
|
+
child of `w:body`; 1 document, 11 of 6,826 uploads) reads its reference
|
|
1308
|
+
run at the end of the last paragraph its mark covers, where the export
|
|
1309
|
+
writes it from the model, where upstream reads it in the paragraph after
|
|
1310
|
+
the range end: the model holds a range as a mark on its text and no range
|
|
1311
|
+
end between paragraphs (`comments-range-end-between-paragraphs`).
|
|
1312
|
+
Confirmed by the owner, 2026-10-23.
|
|
1313
|
+
- A comment's annotation reference run that names no character style
|
|
1314
|
+
(1 document, 13 of 6,826 uploads) reads in the CommentReference style, in
|
|
1315
|
+
which the export writes every comment's annotation run when it writes the
|
|
1316
|
+
comments part: the model holds no annotation mark, and the parser keeps the
|
|
1317
|
+
run as an empty run nothing tells from another
|
|
1318
|
+
(`comments-annotation-ref-unstyled`). Confirmed by the owner, 2026-10-23.
|
|
1319
|
+
|
|
1320
|
+
A third, runs of one formatting read and exported joined after a run write
|
|
1321
|
+
in a paragraph with a link, an inline content control, an equation or a
|
|
1322
|
+
field beside a picture, is no longer a deviation (the owner asked for it to
|
|
1323
|
+
be fixed, 2026-10-23, #46477): a run write (a format, `run.text`,
|
|
1324
|
+
`add_run`, `add_text`) carries the records the read takes of such a
|
|
1325
|
+
paragraph's runs (`_writtenRunRecords`), each `w:r` kept with the written
|
|
1326
|
+
run changed as python-docx changes it, and the export writes the paragraph
|
|
1327
|
+
from them. A write the records cannot describe (a format of a field's runs,
|
|
1328
|
+
a write across a field, a run the offsets cannot tell from an empty one
|
|
1329
|
+
beside it) leaves the paragraph as before: a link paragraph's kept content,
|
|
1330
|
+
else the runs its marks make. Fixture scripts
|
|
1331
|
+
`fixture-links-run-write-keeps-runs`, `fixture-links-run-writes`,
|
|
1332
|
+
`fixture-content-controls-inline-run-writes`,
|
|
1333
|
+
`fixture-equations-beside-runs-run-writes` and
|
|
1334
|
+
`fixture-fields-beside-pictures-run-writes`.
|
|
1335
|
+
|
|
1223
1336
|
- **A citation link Athena added reads as its text, as the export writes it**
|
|
1224
1337
|
(owner decision #40122). Athena's citation flow stamps the links it writes
|
|
1225
1338
|
with the `Athena citation` tooltip. These links only navigate inside Athena,
|
|
@@ -1246,7 +1359,11 @@ architecture or a DOCX Studio constraint:
|
|
|
1246
1359
|
is the link's, as in python-docx. Each paragraph of a field that spans
|
|
1247
1360
|
paragraphs (a table of contents) holds the field character runs it has
|
|
1248
1361
|
(`tests/test_field_reads_python_docx_parity.py`, against stock python-docx
|
|
1249
|
-
on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field
|
|
1362
|
+
on the same `.docx`; `DOCX_STUDIO_LIMITATIONS.md` § 27). A field the source
|
|
1363
|
+
wrote whole in one `w:r` (begin, field code, separate and end, no result, as
|
|
1364
|
+
generators write a page number) is that one run, a `begin` run with that
|
|
1365
|
+
run's formatting, as python-docx reads it, and docx-studio writes it back
|
|
1366
|
+
as one run. A field takes no
|
|
1250
1367
|
room in the text-address space, so its runs stand at one offset. Writes:
|
|
1251
1368
|
- setting a result run's `.text` changes the field's displayed result,
|
|
1252
1369
|
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.40.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>
|