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.
Files changed (499) hide show
  1. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/AGENTS.md +123 -6
  2. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/PKG-INFO +1 -1
  3. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/__init__.py +1 -1
  4. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_buffer.py +386 -15
  5. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_http_doc.py +66 -4
  6. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/commands.py +10 -0
  7. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/comments.py +16 -10
  8. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/document.py +34 -6
  9. athena_python_docx-0.40.0/docx/drawing/__init__.py +136 -0
  10. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/section.py +188 -19
  11. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/_table.py +19 -2
  12. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/table.py +501 -76
  13. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/hyperlink.py +47 -14
  14. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/paragraph.py +192 -14
  15. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/parfmt.py +1 -5
  16. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/run.py +80 -13
  17. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/tabstops.py +1 -3
  18. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/pyproject.toml +1 -1
  19. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/fake_session.py +5 -0
  20. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/note_reference_reads.json +0 -1
  21. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/baseline.json +4 -101
  22. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/fixture_scripts.py +154 -0
  23. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/test_live_runner.py +46 -0
  24. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/intentional_deviations.json +120 -0
  25. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comments.py +24 -7
  26. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_iter_inner_content.py +1 -1
  27. athena_python_docx-0.40.0/tests/test_listed_paragraph_reads.py +98 -0
  28. athena_python_docx-0.40.0/tests/test_literal_no_break_hyphens.py +140 -0
  29. athena_python_docx-0.40.0/tests/test_literal_soft_hyphens.py +59 -0
  30. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_runs_hyperlinks.py +46 -0
  31. athena_python_docx-0.40.0/tests/test_sections_empty_list.py +49 -0
  32. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_names.py +27 -0
  33. athena_python_docx-0.40.0/tests/test_table_listing_reads.py +410 -0
  34. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_read_reuse.py +106 -34
  35. athena_python_docx-0.40.0/tests/test_versioned_read_reuse.py +768 -0
  36. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_wire_contract.py +1 -0
  37. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/uv.lock +1 -1
  38. athena_python_docx-0.39.0/docx/drawing/__init__.py +0 -68
  39. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/.gitignore +0 -0
  40. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/CLAUDE.md +0 -0
  41. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/DOCX_EXEC_LAB.md +0 -0
  42. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/README.md +0 -0
  43. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_athena_extension.py +0 -0
  44. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_batching.py +0 -0
  45. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_capabilities.py +0 -0
  46. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_citations.py +0 -0
  47. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_execution.py +0 -0
  48. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_http.py +0 -0
  49. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_image_utils.py +0 -0
  50. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_postproc.py +0 -0
  51. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_proxy.py +0 -0
  52. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_ptc.py +0 -0
  53. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_references.py +0 -0
  54. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_run_order.py +0 -0
  55. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_table_styles.py +0 -0
  56. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_timeouts.py +0 -0
  57. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_tracked.py +0 -0
  58. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/_xml_text.py +0 -0
  59. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/api.py +0 -0
  60. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/blkcntnr.py +0 -0
  61. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/bookmarks.py +0 -0
  62. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/charts.py +0 -0
  63. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/client.py +0 -0
  64. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/__init__.py +0 -0
  65. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/base.py +0 -0
  66. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/dml.py +0 -0
  67. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/section.py +0 -0
  68. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/shape.py +0 -0
  69. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/style.py +0 -0
  70. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/table.py +0 -0
  71. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/enum/text.py +0 -0
  72. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/errors.py +0 -0
  73. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/exceptions.py +0 -0
  74. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/fields.py +0 -0
  75. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/footnotes.py +0 -0
  76. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/__init__.py +0 -0
  77. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/exceptions.py +0 -0
  78. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/image/image.py +0 -0
  79. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/math.py +0 -0
  80. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/opc/__init__.py +0 -0
  81. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/opc/coreprops.py +0 -0
  82. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/oxml/__init__.py +0 -0
  83. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/revisions.py +0 -0
  84. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/sdt.py +0 -0
  85. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/session.py +0 -0
  86. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/settings.py +0 -0
  87. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/shape.py +0 -0
  88. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/shared.py +0 -0
  89. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/__init__.py +0 -0
  90. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/latent.py +0 -0
  91. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/style.py +0 -0
  92. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/styles/styles.py +0 -0
  93. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/__init__.py +0 -0
  94. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/font.py +0 -0
  95. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/text/pagebreak.py +0 -0
  96. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/toc.py +0 -0
  97. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/docx/typing.py +0 -0
  98. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab.py +0 -0
  99. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
  100. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
  101. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/docx_exec_lab_server.py +0 -0
  102. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/dump_wire_fixtures.py +0 -0
  103. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/release.sh +0 -0
  104. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/round_trip_smoke.py +0 -0
  105. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/smoke_test_block_not_found.py +0 -0
  106. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/scripts/validate_find_replace_asset.py +0 -0
  107. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/__init__.py +0 -0
  108. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/conftest.py +0 -0
  109. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/METHODOLOGY.md +0 -0
  110. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/README.md +0 -0
  111. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/__init__.py +0 -0
  112. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/__init__.py +0 -0
  113. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/agent_documents.py +0 -0
  114. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/default_style_run_formatting.py +0 -0
  115. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/header_footer_pictures.py +0 -0
  116. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/less_used_writes.py +0 -0
  117. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/merged_cell_identity.py +0 -0
  118. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/paragraph_text_setter.py +0 -0
  119. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/picture_runs.py +0 -0
  120. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/proxy_equality.py +0 -0
  121. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/return_types.py +0 -0
  122. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/xml_incompatible_text.py +0 -0
  123. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe/zero_and_negative_indents.py +0 -0
  124. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_cases.py +0 -0
  125. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ab_probe_runner.py +0 -0
  126. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/auto_gen_cases.py +0 -0
  127. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/binary_round_trip.py +0 -0
  128. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/cases.py +0 -0
  129. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/complex_cases.py +0 -0
  130. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/coverage_report.py +0 -0
  131. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/extract.py +0 -0
  132. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/extreme_cases.py +0 -0
  133. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/README.md +0 -0
  134. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/__init__.py +0 -0
  135. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/_runner.py +0 -0
  136. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/extractor.py +0 -0
  137. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
  138. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
  139. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/local_runner.py +0 -0
  140. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/mega_cases.py +0 -0
  141. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshot.py +0 -0
  142. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
  143. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
  144. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
  145. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
  146. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
  147. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
  148. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
  149. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
  150. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
  151. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
  152. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
  153. {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
  154. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
  155. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
  156. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
  157. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
  158. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
  159. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
  160. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
  161. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
  162. {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
  163. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
  164. {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
  165. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
  166. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
  167. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
  168. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
  169. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
  170. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
  171. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
  172. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
  173. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
  174. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
  175. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
  176. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
  177. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
  178. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
  179. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
  180. {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
  181. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
  182. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
  183. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
  184. {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
  185. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
  186. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
  187. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
  188. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
  189. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
  190. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
  191. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
  192. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
  193. {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
  194. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
  195. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
  196. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
  197. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
  198. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
  199. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
  200. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
  201. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
  202. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
  203. {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
  204. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
  205. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
  206. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
  207. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
  208. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
  209. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
  210. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
  211. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
  212. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
  213. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
  214. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
  215. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
  216. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
  217. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
  218. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
  219. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
  220. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
  221. {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
  222. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
  223. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
  224. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
  225. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
  226. {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
  227. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
  228. {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
  229. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
  230. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
  231. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
  232. {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
  233. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
  234. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
  235. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
  236. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
  237. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
  238. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
  239. {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
  240. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
  241. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
  242. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
  243. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
  244. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
  245. {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
  246. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
  247. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
  248. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
  249. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
  250. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
  251. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
  252. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
  253. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
  254. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
  255. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
  256. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
  257. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
  258. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
  259. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
  260. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
  261. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
  262. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
  263. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
  264. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
  265. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
  266. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
  267. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
  268. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
  269. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
  270. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
  271. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
  272. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
  273. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
  274. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
  275. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
  276. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
  277. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
  278. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
  279. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
  280. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
  281. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
  282. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
  283. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
  284. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
  285. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
  286. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
  287. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
  288. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
  289. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw16_header_footer_tables.json +0 -0
  290. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw17_header_letterhead_filled.json +0 -0
  291. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw18_header_table_properties.json +0 -0
  292. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw19_header_table_rows_columns.json +0 -0
  293. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/op_snapshots/rw20_header_table_merges.json +0 -0
  294. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/ours_spec.json +0 -0
  295. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_crawl.py +0 -0
  296. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/parity_diff.json +0 -0
  297. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/real_world_cases.py +0 -0
  298. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/round_trip_tests.py +0 -0
  299. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/stock_spec.json +0 -0
  300. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
  301. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/field_reads.json +0 -0
  302. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/ruby_reads.json +0 -0
  303. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/fixtures/symbol_reads.json +0 -0
  304. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/__init__.py +0 -0
  305. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/reader.py +0 -0
  306. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/runner.py +0 -0
  307. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/sdk_driver.py +0 -0
  308. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/live/stock_driver.py +0 -0
  309. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/README.md +0 -0
  310. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/__init__.py +0 -0
  311. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/baseline_gaps.json +0 -0
  312. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/compare.py +0 -0
  313. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/introspect.py +0 -0
  314. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
  315. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/reports/gap_report.json +0 -0
  316. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/run_parity.py +0 -0
  317. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/athena_latest.json +0 -0
  318. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
  319. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/parity/test_parity_gap.py +0 -0
  320. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_add_section.py +0 -0
  321. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_add_section_extract_items.py +0 -0
  322. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_alignment_values.py +0 -0
  323. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extension_creates_session_open.py +0 -0
  324. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_contract.py +0 -0
  325. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_athena_extensions_registry.py +0 -0
  326. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_batch_chunking.py +0 -0
  327. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_batching_perf.py +0 -0
  328. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_battery_cases.py +0 -0
  329. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_block_not_found_error.py +0 -0
  330. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_buffer.py +0 -0
  331. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
  332. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_add_table_not_supported.py +0 -0
  333. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_borders_spec.py +0 -0
  334. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_fastpath_runs.py +0 -0
  335. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
  336. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
  337. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_format_stash.py +0 -0
  338. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_format_stash.py +0 -0
  339. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_inner_run_guard.py +0 -0
  340. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_merge.py +0 -0
  341. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_nested_tables.py +0 -0
  342. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_paragraphs_listed.py +0 -0
  343. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_text_plain_fastpath.py +0 -0
  344. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_cell_text_replace_semantics.py +0 -0
  345. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_citations.py +0 -0
  346. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_collapsed_range_format.py +0 -0
  347. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_color_format_theme.py +0 -0
  348. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_command_dataclasses.py +0 -0
  349. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_commands.py +0 -0
  350. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comment_paragraphs.py +0 -0
  351. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_comments_first_read.py +0 -0
  352. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_content_control_value.py +0 -0
  353. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_core_properties.py +0 -0
  354. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_asset_id_property.py +0 -0
  355. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_clear.py +0 -0
  356. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_create.py +0 -0
  357. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_create_from_template.py +0 -0
  358. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_factory_validation.py +0 -0
  359. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_document_settings_session_open.py +0 -0
  360. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab.py +0 -0
  361. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_docx_exec_lab_server.py +0 -0
  362. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_drawing_image.py +0 -0
  363. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
  364. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_empty_hyperlinks.py +0 -0
  365. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_enum_parity.py +0 -0
  366. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_execution_scope.py +0 -0
  367. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_export_docx_clean.py +0 -0
  368. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_export_rescue_anchors.py +0 -0
  369. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_reads_python_docx_parity.py +0 -0
  370. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_refresh.py +0 -0
  371. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_field_runs.py +0 -0
  372. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_find_replace_session_open.py +0 -0
  373. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_flushed_write_failures.py +0 -0
  374. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_http_transport.py +0 -0
  375. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_hyperlink_coalescing.py +0 -0
  376. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_image_url_data_uri.py +0 -0
  377. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_page_break.py +0 -0
  378. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_alt_text.py +0 -0
  379. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_size.py +0 -0
  380. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shape_type.py +0 -0
  381. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_inline_shapes_floating.py +0 -0
  382. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_insert_deferred.py +0 -0
  383. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_latent_style_writes.py +0 -0
  384. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_line_clear_break.py +0 -0
  385. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_list_styles.py +0 -0
  386. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_identity.py +0 -0
  387. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cell_secondary_slot.py +0 -0
  388. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_merged_cells.py +0 -0
  389. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_missing_modules.py +0 -0
  390. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_nested_table_refused.py +0 -0
  391. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_note_reference_reads_python_docx_parity.py +0 -0
  392. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_oxml_shim.py +0 -0
  393. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_page_break.py +0 -0
  394. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_delete.py +0 -0
  395. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_indent_reads.py +0 -0
  396. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_empty_run.py +0 -0
  397. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_paragraph_text_len_cache.py +0 -0
  398. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parfmt_clears.py +0 -0
  399. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parity_misc.py +0 -0
  400. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_parity_round2.py +0 -0
  401. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_partial_failure_cascade.py +0 -0
  402. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_pdf_export_and_page_renders.py +0 -0
  403. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_a_behavior.py +0 -0
  404. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_b_headers_footers.py +0 -0
  405. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_phase_c_tables.py +0 -0
  406. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_positional_cell_id.py +0 -0
  407. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
  408. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
  409. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_postproc_ref_restore.py +0 -0
  410. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_pr19766_review_fixes.py +0 -0
  411. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_proxy_equality.py +0 -0
  412. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_ptc.py +0 -0
  413. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_python_docx_api_parity.py +0 -0
  414. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_read_run_ranges.py +0 -0
  415. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_rendered_page_breaks.py +0 -0
  416. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_repeated_node_read.py +0 -0
  417. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_restart_numbering.py +0 -0
  418. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_revisions.py +0 -0
  419. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_round_trip_smoke_script.py +0 -0
  420. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_ruby_reads_python_docx_parity.py +0 -0
  421. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_add_picture_anchor.py +0 -0
  422. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_break_inner_content.py +0 -0
  423. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_edges.py +0 -0
  424. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_formatting_wire.py +0 -0
  425. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_identity.py +0 -0
  426. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_later_runs.py +0 -0
  427. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_mark_inheritance.py +0 -0
  428. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_page_number_blocks.py +0 -0
  429. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_table_style_objects.py +0 -0
  430. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_text_python_docx.py +0 -0
  431. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_text_refreshes_paragraph.py +0 -0
  432. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_run_unmodeled_toggles.py +0 -0
  433. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_sdk_reads_served.py +0 -0
  434. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_section_read_lengths.py +0 -0
  435. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
  436. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_picture.py +0 -0
  437. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_add_run.py +0 -0
  438. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
  439. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
  440. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_comments_get.py +0 -0
  441. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_audit.py +0 -0
  442. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_document_element.py +0 -0
  443. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_enum_section.py +0 -0
  444. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_font_audit.py +0 -0
  445. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_header_footer.py +0 -0
  446. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_hyperlink.py +0 -0
  447. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_inline_shape.py +0 -0
  448. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
  449. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_misc.py +0 -0
  450. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
  451. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style.py +0 -0
  452. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
  453. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_parfmt.py +0 -0
  454. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_row_col_cell.py +0 -0
  455. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_add_break.py +0 -0
  456. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
  457. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style.py +0 -0
  458. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_style_strict.py +0 -0
  459. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_text.py +0 -0
  460. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_run_underline.py +0 -0
  461. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_audit.py +0 -0
  462. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_dimensions.py +0 -0
  463. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_section_onoff.py +0 -0
  464. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_settings.py +0 -0
  465. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_shared_audit.py +0 -0
  466. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_style.py +0 -0
  467. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_styles.py +0 -0
  468. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_audit.py +0 -0
  469. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_cell.py +0 -0
  470. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_dimensions.py +0 -0
  471. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_silent_stub_table_layout.py +0 -0
  472. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_smoke_integration.py +0 -0
  473. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_acceptance.py +0 -0
  474. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_delete.py +0 -0
  475. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_font.py +0 -0
  476. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_formatting_writes.py +0 -0
  477. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_metadata_writes.py +0 -0
  478. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_resolution.py +0 -0
  479. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_setters_contract.py +0 -0
  480. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops.py +0 -0
  481. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_style_tab_stops_read.py +0 -0
  482. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_symbol_reads_python_docx_parity.py +0 -0
  483. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_tab_stop_writes.py +0 -0
  484. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_add_row_grid_row.py +0 -0
  485. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_anchors.py +0 -0
  486. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_clears.py +0 -0
  487. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_direction.py +0 -0
  488. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_length_reads.py +0 -0
  489. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_set_cell_perf.py +0 -0
  490. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_table_style_id_resolution.py +0 -0
  491. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_temporarily_unavailable.py +0 -0
  492. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_text_control_characters.py +0 -0
  493. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_tracked_revisions_offsets.py +0 -0
  494. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_unmapped_alignment_reads.py +0 -0
  495. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_uv_lock_version.py +0 -0
  496. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_validate_find_replace_asset_script.py +0 -0
  497. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_xml_attr_guard.py +0 -0
  498. {athena_python_docx-0.39.0 → athena_python_docx-0.40.0}/tests/test_xml_incompatible_text.py +0 -0
  499. {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 header or footer part a read adds
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`) until an edit changes them, and a
1197
- paragraph with a tracked change, an edited one with a link, and a header's,
1198
- footer's or comment's with a link read their runs from their marks, the base
1199
- text included. A write to the run
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 takes no
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.39.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>
@@ -6,7 +6,7 @@ See CLAUDE.md for the API parity contract.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "0.39.0"
9
+ __version__ = "0.40.0"
10
10
 
11
11
  from docx.api import Document
12
12
  from docx._buffer import discard_all, flush_all