athena-python-docx 0.38.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.38.0 → athena_python_docx-0.40.0}/AGENTS.md +165 -19
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/PKG-INFO +1 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/__init__.py +1 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_buffer.py +386 -15
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_http_doc.py +66 -4
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/commands.py +15 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/comments.py +35 -17
- {athena_python_docx-0.38.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.38.0 → athena_python_docx-0.40.0}/docx/opc/coreprops.py +27 -8
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/section.py +216 -23
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/shape.py +23 -8
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/styles/_table.py +114 -46
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/styles/style.py +40 -14
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/styles/styles.py +22 -12
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/table.py +518 -80
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/hyperlink.py +47 -14
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/paragraph.py +199 -17
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/parfmt.py +13 -8
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/run.py +96 -17
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/tabstops.py +1 -3
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/pyproject.toml +1 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/fake_session.py +10 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fixtures/note_reference_reads.json +0 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/baseline.json +50 -105
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/fixture_scripts.py +154 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/test_live_runner.py +46 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/intentional_deviations.json +120 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_comments.py +52 -7
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_comments_first_read.py +5 -3
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_core_properties.py +26 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_type.py +31 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_inline_shapes_floating.py +22 -0
- {athena_python_docx-0.38.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.38.0 → athena_python_docx-0.40.0}/tests/test_paragraph_runs_hyperlinks.py +46 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_parfmt_clears.py +13 -7
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_phase_b_headers_footers.py +38 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_break_inner_content.py +36 -0
- athena_python_docx-0.40.0/tests/test_sections_empty_list.py +49 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_names.py +27 -0
- athena_python_docx-0.40.0/tests/test_style_resolution.py +173 -0
- athena_python_docx-0.40.0/tests/test_table_length_reads.py +49 -0
- athena_python_docx-0.40.0/tests/test_table_listing_reads.py +410 -0
- {athena_python_docx-0.38.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.38.0 → athena_python_docx-0.40.0}/tests/test_wire_contract.py +2 -1
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/uv.lock +1 -1
- athena_python_docx-0.38.0/docx/drawing/__init__.py +0 -68
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/.gitignore +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/CLAUDE.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/README.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_batching.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_capabilities.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_citations.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_execution.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_http.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_postproc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_proxy.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_ptc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_references.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_run_order.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_tracked.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/_xml_text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/api.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/blkcntnr.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/charts.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/client.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/base.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/dml.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/section.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/shape.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/style.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/table.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/enum/text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/errors.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/exceptions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/fields.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/footnotes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/image/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/image/exceptions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/image/image.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/math.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/revisions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/sdt.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/session.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/settings.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/shared.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/styles/latent.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/font.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/toc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/docx/typing.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/dump_wire_fixtures.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/release.sh +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/conftest.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/agent_documents.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/default_style_run_formatting.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/header_footer_pictures.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/less_used_writes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/merged_cell_identity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/paragraph_text_setter.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/picture_runs.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/proxy_equality.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/return_types.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/xml_incompatible_text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/zero_and_negative_indents.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.38.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.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw16_header_footer_tables.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw17_header_letterhead_filled.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw18_header_table_properties.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw19_header_table_rows_columns.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw20_header_table_merges.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fixtures/field_reads.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fixtures/ruby_reads.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/fixtures/symbol_reads.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/reader.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/runner.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/sdk_driver.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/live/stock_driver.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/README.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_add_section.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_alignment_values.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_athena_extension_creates_session_open.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_batch_chunking.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_battery_cases.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_borders_spec.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_fastpath_runs.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_merge.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_nested_tables.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_paragraphs_listed.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_citations.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_color_format_theme.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_commands.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_comment_paragraphs.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_content_control_value.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_create.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_document_settings_session_open.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_drawing_image.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_empty_hyperlinks.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_enum_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_export_docx_clean.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_export_rescue_anchors.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_field_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_field_refresh.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_field_runs.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_flushed_write_failures.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_hyperlink_coalescing.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_inline_page_break.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_alt_text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_size.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_latent_style_writes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_line_clear_break.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_identity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_missing_modules.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_nested_table_refused.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_note_reference_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_page_break.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_paragraph_delete.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_paragraph_indent_reads.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_empty_run.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_pdf_export_and_page_renders.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_positional_cell_id.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_proxy_equality.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_ptc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_read_run_ranges.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_rendered_page_breaks.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_repeated_node_read.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_restart_numbering.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_round_trip_smoke_script.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_ruby_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_add_picture_anchor.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_edges.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_formatting_wire.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_identity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_later_runs.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_mark_inheritance.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_page_number_blocks.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_table_style_objects.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_text_python_docx.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_text_refreshes_paragraph.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_run_unmodeled_toggles.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_sdk_reads_served.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_section_read_lengths.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_delete.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_formatting_writes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_metadata_writes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops_read.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_symbol_reads_python_docx_parity.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_tab_stop_writes.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_add_row_grid_row.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_anchors.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_clears.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_direction.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_text_control_characters.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_tracked_revisions_offsets.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_unmapped_alignment_reads.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_uv_lock_version.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_xml_incompatible_text.py +0 -0
- {athena_python_docx-0.38.0 → athena_python_docx-0.40.0}/tests/test_zod_wire_contract.py +0 -0
|
@@ -136,12 +136,24 @@ pinned by focused tests and documented in
|
|
|
136
136
|
r.add_picture(img)` writes the bold `w:rPr` beside the `w:drawing`. An older
|
|
137
137
|
docx-studio puts the picture in a run of its own (`tests/test_drawing_image.py`,
|
|
138
138
|
battery `ab_probe/picture_runs.py`).
|
|
139
|
-
- **A run holding only a page or column break
|
|
140
|
-
`Run.iter_inner_content()`,** as python-docx
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
139
|
+
- **A run holding only a page or column break, or an empty text element
|
|
140
|
+
(`<w:t/>`), yields `""` from `Run.iter_inner_content()`,** as python-docx
|
|
141
|
+
reads a `w:br` of type `page` or `column`, and a `w:t` with no text, as
|
|
142
|
+
empty text; an empty run (a comment reference's) yields nothing.
|
|
143
|
+
docx-studio's read marks such a run with `break` (or `emptyText`), and
|
|
144
|
+
`Run.add_break` marks the run it adds one to; a text write to the run
|
|
145
|
+
drops `emptyText`. Against an older docx-studio, which sends neither, a
|
|
146
|
+
re-read run yields nothing.
|
|
147
|
+
- **`doc.inline_shapes` lists a picture in a text box twice, as python-docx
|
|
148
|
+
does.** Word writes a text box in `mc:AlternateContent` as a DrawingML
|
|
149
|
+
shape and as its VML copy, each with the box's text, and python-docx's
|
|
150
|
+
`//w:p/w:r/w:drawing/wp:inline` finds the picture in both. The SDK asks
|
|
151
|
+
`ImagesList` for the second (`fallbackCopies`): a row under no id
|
|
152
|
+
(`fallbackCopy`) that reads its size, type and alt text as the export
|
|
153
|
+
writes the copy. A change of its size, alt text, title or decorative flag
|
|
154
|
+
warns (`DocxUnsupportedCommandWarning`) and sends nothing, as docx-studio
|
|
155
|
+
writes the copy from the box (`tests/test_inline_shape_type.py`). An older
|
|
156
|
+
docx-studio lists the picture once.
|
|
145
157
|
- **`Styles.latent_styles`** (`docx.styles.latent.LatentStyles`) reads
|
|
146
158
|
the document's `<w:latentStyles>` (defaults and each `w:lsdException`)
|
|
147
159
|
from docx-studio's `Info` (`includeStyles` → `latentStyles`), as python-docx
|
|
@@ -351,6 +363,13 @@ Issue numbers reference `python-openxml/python-docx`.
|
|
|
351
363
|
through `CreateHyperlink` (DOCX Studio `doc.hyperlinks.create`). Returns
|
|
352
364
|
the same `Hyperlink` class the read path already exposes. Also
|
|
353
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`).
|
|
354
373
|
|
|
355
374
|
- **`Run.add_field(kind, *, args=None, cached_result=None) -> Field`**
|
|
356
375
|
+ **`Document.fields: Fields`** — generic Word field insertion.
|
|
@@ -1019,8 +1038,17 @@ architecture or a DOCX Studio constraint:
|
|
|
1019
1038
|
the UI name (`"Heading 1"`), `.style_id` the id (`"Heading1"`), read from
|
|
1020
1039
|
the document's style table (docx-studio `Info` with `includeStyles`,
|
|
1021
1040
|
fetched once per session in `docx/styles/_table.py`). A style set by name
|
|
1022
|
-
or id is sent as the document's id
|
|
1023
|
-
|
|
1041
|
+
or id is sent as the document's id. A style read resolves as python-docx's
|
|
1042
|
+
`Styles.get_by_id`: the document's first style of the stored id when it is
|
|
1043
|
+
of the type read; else, for an unstyled paragraph, run or table or one
|
|
1044
|
+
naming a style of another type, the type's default style (the last the
|
|
1045
|
+
document flags `w:default`), and None in a document that flags none, as
|
|
1046
|
+
generated documents often do (`styles.default(...)` is None there too).
|
|
1047
|
+
Each `w:style` is a style of its own, a second definition of an id (and
|
|
1048
|
+
one with no `w:name`, whose name is None) included, reading its own name,
|
|
1049
|
+
flags and formatting; a write to it changes the first definition of its id,
|
|
1050
|
+
which docx-studio addresses by the id, where python-docx changes the one it
|
|
1051
|
+
wraps. `paragraph.style = …` raises `KeyError` for a
|
|
1024
1052
|
name the document defines no style for, like python-docx — except the
|
|
1025
1053
|
Word built-ins docx-studio holds a definition of
|
|
1026
1054
|
(`BUILTIN_PARAGRAPH_STYLE_NAMES`: `"Heading 4"`, `"List Bullet"`,
|
|
@@ -1028,7 +1056,16 @@ architecture or a DOCX Studio constraint:
|
|
|
1028
1056
|
`styles.xml` until used. Those are sent by their Word id; the paragraph
|
|
1029
1057
|
holds `w:pStyle` alone, the editor paints it from that definition and
|
|
1030
1058
|
the export adds the definition (with a list of the document's own for a
|
|
1031
|
-
numbered list style), as Word does when the style is applied
|
|
1059
|
+
numbered list style), as Word does when the style is applied, so the
|
|
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
|
|
1065
|
+
(python-docx's `default-header.xml`) names `Header` (`Footer`) only where
|
|
1066
|
+
the document defines it: elsewhere python-docx's reference resolves to the
|
|
1067
|
+
default paragraph style and adds no definition, so the SDK's paragraph
|
|
1068
|
+
names no style and the export adds none. Heading 1–9,
|
|
1032
1069
|
Title, Subtitle, Quote, Intense Quote, List Paragraph, No Spacing and
|
|
1033
1070
|
Caption are defined by hand to current Word's definitions
|
|
1034
1071
|
(`packages/core/src/prosemirror/styles/latentBuiltInStyles.ts`); the
|
|
@@ -1104,13 +1141,12 @@ architecture or a DOCX Studio constraint:
|
|
|
1104
1141
|
wins in the save that writes it (a later save in the same batch stamps
|
|
1105
1142
|
again). Every read asks docx-studio, which saves the batch's edits before it
|
|
1106
1143
|
answers, so a read sees the stamp, and a collaborator's save. A package
|
|
1107
|
-
without `docProps/core.xml` reads
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
-
|
|
1112
|
-
|
|
1113
|
-
can't be honored. Tracked in `DOCX_STUDIO_LIMITATIONS.md`.
|
|
1144
|
+
without `docProps/core.xml` reads as the default part python-docx adds to
|
|
1145
|
+
it on first access (title "Word Document", last modified by
|
|
1146
|
+
"python-docx", revision 1, and as `modified` the time of the session's
|
|
1147
|
+
first read, which later reads keep, as python-docx keeps its part's;
|
|
1148
|
+
docx-studio's `Info` marks it `corePropertiesDefault`), and a property set
|
|
1149
|
+
there is written into that part, as python-docx writes it.
|
|
1114
1150
|
|
|
1115
1151
|
- **`add_comment` without an `author` stores the session's name, not
|
|
1116
1152
|
`""`.** `Document.add_comment` / `Comments.add_comment` send `author`
|
|
@@ -1166,12 +1202,29 @@ architecture or a DOCX Studio constraint:
|
|
|
1166
1202
|
the base text keeps its room in the text-address space (`ruby` spans on the
|
|
1167
1203
|
read's run; `tests/test_ruby_reads_python_docx_parity.py`). That holds while
|
|
1168
1204
|
the paragraph's runs are as its records hold them, in the body, a table cell,
|
|
1169
|
-
a header, a footer or a comment; a paragraph with a link or
|
|
1170
|
-
reads its runs from
|
|
1205
|
+
a header, a footer or a comment; a body or cell paragraph with a link or an
|
|
1206
|
+
inline content control reads its runs from the records its import keeps for
|
|
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
|
|
1171
1212
|
(its text, an append, its formatting) makes the base text ordinary text,
|
|
1172
1213
|
which then reads as text: docx-studio keeps no guide through an edit, where
|
|
1173
1214
|
upstream keeps the `w:ruby` through all but a text write.
|
|
1174
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
|
+
|
|
1175
1228
|
- **`CoreProperties.modified` is the time of the last save.** The asset is a
|
|
1176
1229
|
live Word document, and docx-studio stamps `dcterms:modified` when it saves
|
|
1177
1230
|
a change to the package: a section, style or property write, and the export
|
|
@@ -1191,6 +1244,95 @@ architecture or a DOCX Studio constraint:
|
|
|
1191
1244
|
Markup) show insertions and hide deletions, as these reads do.
|
|
1192
1245
|
`doc.revisions` lists every change (`tests/test_run_text_python_docx.py`).
|
|
1193
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
|
+
|
|
1194
1336
|
- **A citation link Athena added reads as its text, as the export writes it**
|
|
1195
1337
|
(owner decision #40122). Athena's citation flow stamps the links it writes
|
|
1196
1338
|
with the `Athena citation` tooltip. These links only navigate inside Athena,
|
|
@@ -1217,7 +1359,11 @@ architecture or a DOCX Studio constraint:
|
|
|
1217
1359
|
is the link's, as in python-docx. Each paragraph of a field that spans
|
|
1218
1360
|
paragraphs (a table of contents) holds the field character runs it has
|
|
1219
1361
|
(`tests/test_field_reads_python_docx_parity.py`, against stock python-docx
|
|
1220
|
-
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
|
|
1221
1367
|
room in the text-address space, so its runs stand at one offset. Writes:
|
|
1222
1368
|
- setting a result run's `.text` changes the field's displayed result,
|
|
1223
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>
|