panache-cli 3.9.0__tar.gz → 3.10.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 (339) hide show
  1. {panache_cli-3.9.0 → panache_cli-3.10.0}/Cargo.lock +21 -21
  2. {panache_cli-3.9.0 → panache_cli-3.10.0}/Cargo.toml +3 -3
  3. {panache_cli-3.9.0 → panache_cli-3.10.0}/PKG-INFO +1 -1
  4. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/CHANGELOG.md +13 -0
  5. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/Cargo.toml +2 -2
  6. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/core.rs +29 -12
  7. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/inline_layout.rs +58 -7
  8. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/lists.rs +17 -7
  9. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math/STYLE.md +28 -14
  10. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math/lower.rs +203 -97
  11. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/sentence_wrap.rs +29 -18
  12. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/tables.rs +61 -26
  13. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/CHANGELOG.md +6 -0
  14. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/Cargo.toml +1 -1
  15. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/lists.rs +60 -0
  16. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/core/list_items.rs +30 -15
  17. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/core.rs +2 -7
  18. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/cli.rs +2 -2
  19. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/config/types/schema_helpers.rs +29 -1
  20. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/config/types.rs +45 -2
  21. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/config.rs +160 -7
  22. panache_cli-3.10.0/src/linter/rules/unspaced_list_marker.rs +217 -0
  23. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules.rs +1 -0
  24. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter.rs +1 -0
  25. {panache_cli-3.9.0 → panache_cli-3.10.0}/LICENSE +0 -0
  26. {panache_cli-3.9.0 → panache_cli-3.10.0}/README.md +0 -0
  27. {panache_cli-3.9.0 → panache_cli-3.10.0}/assets/quarto-schema/schema.json +0 -0
  28. {panache_cli-3.9.0 → panache_cli-3.10.0}/build.rs +0 -0
  29. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/README.md +0 -0
  30. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/config.rs +0 -0
  31. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/directives.rs +0 -0
  32. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/blockquotes.rs +0 -0
  33. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/blocks.rs +0 -0
  34. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/code_blocks.rs +0 -0
  35. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/containers.rs +0 -0
  36. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/document.rs +0 -0
  37. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/fenced_divs.rs +0 -0
  38. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/hashpipe.rs +0 -0
  39. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/headings.rs +0 -0
  40. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/indent_utils.rs +0 -0
  41. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/inline.rs +0 -0
  42. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math/ir.rs +0 -0
  43. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math/printer.rs +0 -0
  44. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math/render.rs +0 -0
  45. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/math.rs +0 -0
  46. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/metadata.rs +0 -0
  47. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/paragraphs.rs +0 -0
  48. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/preserve.rs +0 -0
  49. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/raw.rs +0 -0
  50. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/shortcodes.rs +0 -0
  51. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/smart.rs +0 -0
  52. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/utils.rs +0 -0
  53. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/STYLE.md +0 -0
  54. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/block_map.rs +0 -0
  55. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/block_sequence.rs +0 -0
  56. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/document.rs +0 -0
  57. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/flow.rs +0 -0
  58. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/options.rs +0 -0
  59. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml/scalar.rs +0 -0
  60. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter/yaml.rs +0 -0
  61. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/formatter.rs +0 -0
  62. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/lib.rs +0 -0
  63. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/parser.rs +0 -0
  64. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/syntax.rs +0 -0
  65. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/utils.rs +0 -0
  66. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-formatter/src/yaml_engine.rs +0 -0
  67. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/README.md +0 -0
  68. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/build.rs +0 -0
  69. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/data/math_symbols.json +0 -0
  70. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/data/unicode-math.LICENSE +0 -0
  71. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/data/unicode-math.NOTICE +0 -0
  72. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/grid_layout.rs +0 -0
  73. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/lib.rs +0 -0
  74. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/options.rs +0 -0
  75. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/pandoc_ast.rs +0 -0
  76. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/block_dispatcher.rs +0 -0
  77. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/admonitions.rs +0 -0
  78. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/blockquotes.rs +0 -0
  79. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/code_blocks.rs +0 -0
  80. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/container_prefix.rs +0 -0
  81. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/definition_lists.rs +0 -0
  82. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/fenced_divs.rs +0 -0
  83. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/figures.rs +0 -0
  84. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/headings.rs +0 -0
  85. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/horizontal_rules.rs +0 -0
  86. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/html_blocks.rs +0 -0
  87. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/indented_code.rs +0 -0
  88. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/latex_envs.rs +0 -0
  89. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/line_blocks.rs +0 -0
  90. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/lists.rs +0 -0
  91. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/metadata.rs +0 -0
  92. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/myst_directives.rs +0 -0
  93. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/myst_targets.rs +0 -0
  94. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/paragraphs.rs +0 -0
  95. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/raw_blocks.rs +0 -0
  96. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/reference_links.rs +0 -0
  97. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tables.rs +0 -0
  98. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/blanklines.rs +0 -0
  99. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/blockquotes.rs +0 -0
  100. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/code_blocks.rs +0 -0
  101. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/content_containers.rs +0 -0
  102. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/definition_lists.rs +0 -0
  103. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/figures.rs +0 -0
  104. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/footnote_marker_line.rs +0 -0
  105. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/fragment_context.rs +0 -0
  106. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/frame_pinning.rs +0 -0
  107. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/headings.rs +0 -0
  108. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/helpers.rs +0 -0
  109. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/losslessness.rs +0 -0
  110. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/metadata_guards.rs +0 -0
  111. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks/tests/tables.rs +0 -0
  112. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/blocks.rs +0 -0
  113. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/core/blockquotes.rs +0 -0
  114. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/core/definition_lists.rs +0 -0
  115. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/core/html_interruptions.rs +0 -0
  116. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/diagnostics.rs +0 -0
  117. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/bookdown.rs +0 -0
  118. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/bracketed_spans.rs +0 -0
  119. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/citations.rs +0 -0
  120. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/code_spans.rs +0 -0
  121. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/core.rs +0 -0
  122. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/emoji.rs +0 -0
  123. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/escapes.rs +0 -0
  124. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/hard_breaks.rs +0 -0
  125. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/inline_executable.rs +0 -0
  126. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/inline_footnotes.rs +0 -0
  127. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/inline_html.rs +0 -0
  128. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/inline_ir.rs +0 -0
  129. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/latex.rs +0 -0
  130. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/links.rs +0 -0
  131. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/mark.rs +0 -0
  132. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/math.rs +0 -0
  133. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/myst_roles.rs +0 -0
  134. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/myst_substitutions.rs +0 -0
  135. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/native_spans.rs +0 -0
  136. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/raw_inline.rs +0 -0
  137. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/refdef_map.rs +0 -0
  138. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/shortcodes.rs +0 -0
  139. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/sink.rs +0 -0
  140. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/strikeout.rs +0 -0
  141. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/subscript.rs +0 -0
  142. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/superscript.rs +0 -0
  143. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/svelte.rs +0 -0
  144. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/tests.rs +0 -0
  145. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/uri-schemes.csv +0 -0
  146. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines/wikilinks.rs +0 -0
  147. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/inlines.rs +0 -0
  148. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/math.rs +0 -0
  149. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/reparse.rs +0 -0
  150. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/attributes.rs +0 -0
  151. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/chunk_options.rs +0 -0
  152. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/container_stack.rs +0 -0
  153. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/continuation.rs +0 -0
  154. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/helpers.rs +0 -0
  155. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/inline_emission.rs +0 -0
  156. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/list_item_buffer.rs +0 -0
  157. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/marker_utils.rs +0 -0
  158. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/text_buffer.rs +0 -0
  159. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/tree_copy.rs +0 -0
  160. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils/yaml_regions.rs +0 -0
  161. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/utils.rs +0 -0
  162. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/verify.rs +0 -0
  163. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/cooking.rs +0 -0
  164. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/events.rs +0 -0
  165. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/model.rs +0 -0
  166. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/parser.rs +0 -0
  167. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/profile.rs +0 -0
  168. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/scanner.rs +0 -0
  169. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml/validator.rs +0 -0
  170. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser/yaml.rs +0 -0
  171. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/parser.rs +0 -0
  172. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/range_utils.rs +0 -0
  173. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/semantic/math.rs +0 -0
  174. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/semantic.rs +0 -0
  175. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/alerts.rs +0 -0
  176. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/ast.rs +0 -0
  177. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/attributes.rs +0 -0
  178. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/block_quotes.rs +0 -0
  179. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/blocks.rs +0 -0
  180. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/chunk_options.rs +0 -0
  181. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/citations.rs +0 -0
  182. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/code_blocks.rs +0 -0
  183. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/code_span.rs +0 -0
  184. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/consumer.rs +0 -0
  185. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/crossrefs.rs +0 -0
  186. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/definitions.rs +0 -0
  187. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/fenced_divs.rs +0 -0
  188. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/headings.rs +0 -0
  189. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/inlines.rs +0 -0
  190. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/kind.rs +0 -0
  191. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/links.rs +0 -0
  192. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/lists.rs +0 -0
  193. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/math.rs +0 -0
  194. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/myst.rs +0 -0
  195. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/raw_tex.rs +0 -0
  196. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/references.rs +0 -0
  197. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/shortcodes.rs +0 -0
  198. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/tables.rs +0 -0
  199. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/yaml.rs +0 -0
  200. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax/yaml_ast.rs +0 -0
  201. {panache_cli-3.9.0 → panache_cli-3.10.0}/crates/panache-parser/src/syntax.rs +0 -0
  202. {panache_cli-3.9.0 → panache_cli-3.10.0}/pyproject.toml +0 -0
  203. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/bibtex.rs +0 -0
  204. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/csl_json.rs +0 -0
  205. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/csl_yaml.rs +0 -0
  206. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/index.rs +0 -0
  207. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/preview.rs +0 -0
  208. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib/ris.rs +0 -0
  209. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bib.rs +0 -0
  210. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/bin/distill_quarto_schema.rs +0 -0
  211. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/cache.rs +0 -0
  212. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/config/formatter_presets.rs +0 -0
  213. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/diagnostic_renderer.rs +0 -0
  214. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/directives.rs +0 -0
  215. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/external_formatters_common.rs +0 -0
  216. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/external_formatters_sync.rs +0 -0
  217. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/external_tools_common.rs +0 -0
  218. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/formatter.rs +0 -0
  219. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/includes.rs +0 -0
  220. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/incremental.rs +0 -0
  221. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/io_context.rs +0 -0
  222. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lib.rs +0 -0
  223. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/code_block_collector.rs +0 -0
  224. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/diagnostics.rs +0 -0
  225. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/clippy.rs +0 -0
  226. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/eslint.rs +0 -0
  227. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/jarl.rs +0 -0
  228. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/jolars.rs +0 -0
  229. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/ruff.rs +0 -0
  230. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/shellcheck.rs +0 -0
  231. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters/staticcheck.rs +0 -0
  232. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters.rs +0 -0
  233. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/external_linters_sync.rs +0 -0
  234. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/fuzzy.rs +0 -0
  235. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/index.rs +0 -0
  236. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/metadata_diagnostics.rs +0 -0
  237. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/offsets.rs +0 -0
  238. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/project_index.rs +0 -0
  239. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema/distill.rs +0 -0
  240. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema/interp.rs +0 -0
  241. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema/model.rs +0 -0
  242. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema/report.rs +0 -0
  243. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema/value.rs +0 -0
  244. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/quarto_schema.rs +0 -0
  245. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/adjacent_footnote_refs.rs +0 -0
  246. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/blank_line_in_display_math.rs +0 -0
  247. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/blank_line_in_inline_footnote.rs +0 -0
  248. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/chunk_label_spaces.rs +0 -0
  249. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/citation_keys.rs +0 -0
  250. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/citation_nonbreaking_space.rs +0 -0
  251. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/consumer_divergence.rs +0 -0
  252. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/crossref_as_link_target.rs +0 -0
  253. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/duplicate_references.rs +0 -0
  254. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/duplicate_yaml_anchor.rs +0 -0
  255. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/emoji_aliases.rs +0 -0
  256. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/empty_list_item.rs +0 -0
  257. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/empty_values.rs +0 -0
  258. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/figure_crossref_captions.rs +0 -0
  259. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/footnote_after_image.rs +0 -0
  260. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/footnote_ref_in_footnote_def.rs +0 -0
  261. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/footnote_swallowed_by_bracket.rs +0 -0
  262. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/heading_eaten_attrs.rs +0 -0
  263. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/heading_hierarchy.rs +0 -0
  264. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/heading_strip_comments_residue.rs +0 -0
  265. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/html_entities.rs +0 -0
  266. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/inline_math_line_break.rs +0 -0
  267. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/link_text_is_url.rs +0 -0
  268. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/math_content.rs +0 -0
  269. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/missing_chunk_labels.rs +0 -0
  270. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/quarto_schema.rs +0 -0
  271. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/reversed_footnote_marker.rs +0 -0
  272. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/stray_fenced_div_markers.rs +0 -0
  273. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/swallowed_list_marker.rs +0 -0
  274. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/table_column_count.rs +0 -0
  275. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/undefined_anchor.rs +0 -0
  276. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/undefined_references.rs +0 -0
  277. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/unspaced_citation.rs +0 -0
  278. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/unsupported_metadata_key.rs +0 -0
  279. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/unused_definitions.rs +0 -0
  280. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/rules/unused_yaml_anchor.rs +0 -0
  281. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/runner.rs +0 -0
  282. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/yaml_anchors.rs +0 -0
  283. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/linter/yaml_resolve.rs +0 -0
  284. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/config.rs +0 -0
  285. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/context.rs +0 -0
  286. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/conversions.rs +0 -0
  287. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/dispatch.rs +0 -0
  288. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/documents.rs +0 -0
  289. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/global_state.rs +0 -0
  290. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/code_actions.rs +0 -0
  291. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/completion.rs +0 -0
  292. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/configuration.rs +0 -0
  293. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/diagnostics.rs +0 -0
  294. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/document_highlight.rs +0 -0
  295. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/document_links.rs +0 -0
  296. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/document_symbols.rs +0 -0
  297. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/file_operations.rs +0 -0
  298. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/file_rename.rs +0 -0
  299. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/file_watcher.rs +0 -0
  300. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/folding_ranges.rs +0 -0
  301. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/footnote_conversion.rs +0 -0
  302. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/formatting.rs +0 -0
  303. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/goto_definition.rs +0 -0
  304. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/heading_link_conversion.rs +0 -0
  305. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/hover.rs +0 -0
  306. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/link_conversion.rs +0 -0
  307. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/linked_editing_range.rs +0 -0
  308. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/list_conversion.rs +0 -0
  309. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/prepare_rename.rs +0 -0
  310. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/references.rs +0 -0
  311. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/rename.rs +0 -0
  312. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/semantic_tokens.rs +0 -0
  313. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/shortcode_args.rs +0 -0
  314. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/workspace_folders.rs +0 -0
  315. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers/workspace_symbols.rs +0 -0
  316. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/handlers.rs +0 -0
  317. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/helpers.rs +0 -0
  318. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/line_index.rs +0 -0
  319. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/navigation.rs +0 -0
  320. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/symbols.rs +0 -0
  321. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/task_pool.rs +0 -0
  322. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/testing.rs +0 -0
  323. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp/uri_ext.rs +0 -0
  324. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/lsp.rs +0 -0
  325. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/main.rs +0 -0
  326. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata/bibliography.rs +0 -0
  327. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata/citations.rs +0 -0
  328. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata/project.rs +0 -0
  329. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata/references.rs +0 -0
  330. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata/yaml.rs +0 -0
  331. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/metadata.rs +0 -0
  332. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/parser.rs +0 -0
  333. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/range_utils.rs +0 -0
  334. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/salsa.rs +0 -0
  335. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/syntax.rs +0 -0
  336. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/utils.rs +0 -0
  337. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/vfs.rs +0 -0
  338. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/yaml_engine.rs +0 -0
  339. {panache_cli-3.9.0 → panache_cli-3.10.0}/src/yaml_regions.rs +0 -0
@@ -166,9 +166,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
166
166
 
167
167
  [[package]]
168
168
  name = "bitflags"
169
- version = "2.13.1"
169
+ version = "2.13.2"
170
170
  source = "registry+https://github.com/rust-lang/crates.io-index"
171
- checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
171
+ checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
172
172
 
173
173
  [[package]]
174
174
  name = "borrow-or-share"
@@ -309,9 +309,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
309
309
 
310
310
  [[package]]
311
311
  name = "console"
312
- version = "0.16.4"
312
+ version = "0.16.6"
313
313
  source = "registry+https://github.com/rust-lang/crates.io-index"
314
- checksum = "4fe5f465a4f6fee88fad41b85d990f84c835335e85b5d9e6e63e0d06d28cba7c"
314
+ checksum = "e96a4956774c13c126a8b5af4daa79384f4d826534c95a02d76afb39e2ab64e3"
315
315
  dependencies = [
316
316
  "encode_unicode",
317
317
  "libc",
@@ -568,9 +568,9 @@ dependencies = [
568
568
 
569
569
  [[package]]
570
570
  name = "fancy-regex"
571
- version = "0.19.0"
571
+ version = "0.19.1"
572
572
  source = "registry+https://github.com/rust-lang/crates.io-index"
573
- checksum = "476de73bddf2ef8490aa4ee8f1cf40b430bf1d56c48c22080e5186952cd580e6"
573
+ checksum = "52e0387578e845beb7a1acff126228499f26cb18edf12919cc513bb863266464"
574
574
  dependencies = [
575
575
  "bit-set",
576
576
  "regex-automata",
@@ -731,9 +731,9 @@ dependencies = [
731
731
 
732
732
  [[package]]
733
733
  name = "hashlink"
734
- version = "0.12.1"
734
+ version = "0.12.2"
735
735
  source = "registry+https://github.com/rust-lang/crates.io-index"
736
- checksum = "32069d97bb81e38fa67eab65e3393bf804bb85969f2bc06bf13f64aef5aba248"
736
+ checksum = "a596f1b20ed2cc5ecac41a164aaebc7258057060f06c0cf7a2ba3991ee7990fb"
737
737
  dependencies = [
738
738
  "hashbrown 0.17.1",
739
739
  ]
@@ -1250,7 +1250,7 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1250
1250
 
1251
1251
  [[package]]
1252
1252
  name = "panache"
1253
- version = "3.9.0"
1253
+ version = "3.10.0"
1254
1254
  dependencies = [
1255
1255
  "annotate-snippets",
1256
1256
  "assert_cmd",
@@ -1295,7 +1295,7 @@ dependencies = [
1295
1295
 
1296
1296
  [[package]]
1297
1297
  name = "panache-formatter"
1298
- version = "0.24.0"
1298
+ version = "0.24.1"
1299
1299
  dependencies = [
1300
1300
  "badness-formatter",
1301
1301
  "insta",
@@ -1315,7 +1315,7 @@ dependencies = [
1315
1315
 
1316
1316
  [[package]]
1317
1317
  name = "panache-parser"
1318
- version = "0.29.0"
1318
+ version = "0.29.1"
1319
1319
  dependencies = [
1320
1320
  "badness-parser",
1321
1321
  "entities",
@@ -1570,7 +1570,7 @@ version = "0.5.18"
1570
1570
  source = "registry+https://github.com/rust-lang/crates.io-index"
1571
1571
  checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
1572
1572
  dependencies = [
1573
- "bitflags 2.13.1",
1573
+ "bitflags 2.13.2",
1574
1574
  ]
1575
1575
 
1576
1576
  [[package]]
@@ -1699,7 +1699,7 @@ version = "1.1.4"
1699
1699
  source = "registry+https://github.com/rust-lang/crates.io-index"
1700
1700
  checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
1701
1701
  dependencies = [
1702
- "bitflags 2.13.1",
1702
+ "bitflags 2.13.2",
1703
1703
  "errno",
1704
1704
  "libc",
1705
1705
  "linux-raw-sys",
@@ -2064,9 +2064,9 @@ dependencies = [
2064
2064
 
2065
2065
  [[package]]
2066
2066
  name = "toml"
2067
- version = "1.1.5+spec-1.1.0"
2067
+ version = "1.1.6+spec-1.1.0"
2068
2068
  source = "registry+https://github.com/rust-lang/crates.io-index"
2069
- checksum = "12c0ba9680044b4ce98d391a62094047eada0d64860b80166c39f4a6b5640785"
2069
+ checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a"
2070
2070
  dependencies = [
2071
2071
  "indexmap",
2072
2072
  "serde_core",
@@ -2164,9 +2164,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
2164
2164
 
2165
2165
  [[package]]
2166
2166
  name = "uuid"
2167
- version = "1.26.0"
2167
+ version = "1.26.1"
2168
2168
  source = "registry+https://github.com/rust-lang/crates.io-index"
2169
- checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812"
2169
+ checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce"
2170
2170
  dependencies = [
2171
2171
  "getrandom 0.4.3",
2172
2172
  "js-sys",
@@ -2394,18 +2394,18 @@ dependencies = [
2394
2394
 
2395
2395
  [[package]]
2396
2396
  name = "zerocopy"
2397
- version = "0.8.56"
2397
+ version = "0.8.57"
2398
2398
  source = "registry+https://github.com/rust-lang/crates.io-index"
2399
- checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb"
2399
+ checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873"
2400
2400
  dependencies = [
2401
2401
  "zerocopy-derive",
2402
2402
  ]
2403
2403
 
2404
2404
  [[package]]
2405
2405
  name = "zerocopy-derive"
2406
- version = "0.8.56"
2406
+ version = "0.8.57"
2407
2407
  source = "registry+https://github.com/rust-lang/crates.io-index"
2408
- checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1"
2408
+ checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc"
2409
2409
  dependencies = [
2410
2410
  "proc-macro2",
2411
2411
  "quote",
@@ -9,7 +9,7 @@ authors = ["Johan Larsson <johan@jolars.co>"]
9
9
 
10
10
  [package]
11
11
  name = "panache"
12
- version = "3.9.0"
12
+ version = "3.10.0"
13
13
  edition.workspace = true
14
14
  rust-version.workspace = true
15
15
  # `distill_quarto_schema` is a dev-only vendoring bin (src/bin/); keep bare
@@ -51,11 +51,11 @@ path = "src/main.rs"
51
51
  required-features = ["cli"]
52
52
 
53
53
  [dependencies]
54
- panache-formatter = { path = "crates/panache-formatter", version = "0.24.0", features = [
54
+ panache-formatter = { path = "crates/panache-formatter", version = "0.24.1", features = [
55
55
  "serde",
56
56
  "schema",
57
57
  ] }
58
- panache-parser = { path = "crates/panache-parser", version = "0.29.0", features = [
58
+ panache-parser = { path = "crates/panache-parser", version = "0.29.1", features = [
59
59
  "serde",
60
60
  "schema",
61
61
  ] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: panache-cli
3
- Version: 3.9.0
3
+ Version: 3.10.0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.24.1](https://github.com/jolars/panache/compare/panache-formatter-v0.24.0...panache-formatter-v0.24.1) (2026-09-11)
4
+
5
+ ### Bug Fixes
6
+ - **formatter:** avoid duplicate quote prefixes ([`59fe1ce`](https://github.com/jolars/panache/commit/59fe1ce681cf657493b670473d05ba1638603aac))
7
+ - **formatter:** stabilize semantic list wrapping ([`1346dfa`](https://github.com/jolars/panache/commit/1346dfaa31ca3915f61de2b3e7fa0e58d44a9953))
8
+ - **formatter:** wrap separate math expressions ([`d7685b7`](https://github.com/jolars/panache/commit/d7685b7ee0d18c554814c95462c689d7c793f53a))
9
+
10
+ ### Performance Improvements
11
+ - **formatter:** cache document sentence profiles ([`c7df8a3`](https://github.com/jolars/panache/commit/c7df8a367d2e38185075e9b06023733c82ff9de4))
12
+
13
+ ### Dependencies
14
+ - updated crates/panache-parser to v0.29.1
15
+
3
16
  ## [0.24.0](https://github.com/jolars/panache/compare/panache-formatter-v0.23.0...panache-formatter-v0.24.0) (2026-09-06)
4
17
 
5
18
  ### Features
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "panache-formatter"
3
- version = "0.24.0"
3
+ version = "0.24.1"
4
4
  edition.workspace = true
5
5
  rust-version.workspace = true
6
6
  include = [
@@ -19,7 +19,7 @@ keywords = ["quarto", "pandoc", "markdown", "formatter"]
19
19
  categories = ["text-processing"]
20
20
 
21
21
  [dependencies]
22
- panache-parser = { path = "../panache-parser", version = "0.29.0" }
22
+ panache-parser = { path = "../panache-parser", version = "0.29.1" }
23
23
  log = { version = "0.4.31", features = ["release_max_level_debug"] }
24
24
  rowan = "0.17.0"
25
25
  serde = { version = "1.0.228", features = ["derive"], optional = true }
@@ -13,12 +13,14 @@ use super::headings;
13
13
  use super::inline;
14
14
  use super::inline_layout;
15
15
  use super::paragraphs;
16
+ use super::sentence_wrap::SentenceProfileCache;
16
17
  use super::tables;
17
18
  use super::utils::is_structural_block;
18
19
 
19
20
  pub struct Formatter {
20
21
  pub(super) output: String,
21
22
  pub(super) config: Config,
23
+ pub(super) sentence_profile: SentenceProfileCache,
22
24
  pub(super) consecutive_blank_lines: usize,
23
25
  pub(super) fenced_div_depth: usize,
24
26
  pub(super) formatted_code: FormattedCodeMap,
@@ -48,6 +50,7 @@ impl Formatter {
48
50
  Self {
49
51
  output: String::with_capacity(8192),
50
52
  config,
53
+ sentence_profile: SentenceProfileCache::default(),
51
54
  consecutive_blank_lines: 0,
52
55
  fenced_div_depth: 0,
53
56
  formatted_code,
@@ -99,9 +102,13 @@ impl Formatter {
99
102
  node: &SyntaxNode,
100
103
  width: usize,
101
104
  ) -> Vec<String> {
102
- inline_layout::wrapped_lines_for_paragraph(&self.config, node, width, &|n| {
103
- self.format_inline_node(n)
104
- })
105
+ inline_layout::wrapped_lines_for_paragraph(
106
+ &self.config,
107
+ &self.sentence_profile,
108
+ node,
109
+ width,
110
+ &|n| self.format_inline_node(n),
111
+ )
105
112
  }
106
113
 
107
114
  pub(super) fn wrapped_lines_for_paragraph_with_widths(
@@ -109,21 +116,31 @@ impl Formatter {
109
116
  node: &SyntaxNode,
110
117
  widths: &[usize],
111
118
  ) -> Vec<String> {
112
- inline_layout::wrapped_lines_for_paragraph_with_widths(&self.config, node, widths, &|n| {
113
- self.format_inline_node(n)
114
- })
119
+ inline_layout::wrapped_lines_for_paragraph_with_widths(
120
+ &self.config,
121
+ &self.sentence_profile,
122
+ node,
123
+ widths,
124
+ &|n| self.format_inline_node(n),
125
+ )
115
126
  }
116
127
 
117
128
  pub(super) fn sentence_lines_for_paragraph(&self, node: &SyntaxNode) -> Vec<String> {
118
- inline_layout::sentence_lines_for_paragraph(&self.config, node, &|n| {
119
- self.format_inline_node(n)
120
- })
129
+ inline_layout::sentence_lines_for_paragraph(
130
+ &self.config,
131
+ &self.sentence_profile,
132
+ node,
133
+ &|n| self.format_inline_node(n),
134
+ )
121
135
  }
122
136
 
123
137
  pub(super) fn semantic_lines_for_paragraph(&self, node: &SyntaxNode) -> Vec<String> {
124
- inline_layout::semantic_lines_for_paragraph(&self.config, node, &|n| {
125
- self.format_inline_node(n)
126
- })
138
+ inline_layout::semantic_lines_for_paragraph(
139
+ &self.config,
140
+ &self.sentence_profile,
141
+ node,
142
+ &|n| self.format_inline_node(n),
143
+ )
127
144
  }
128
145
 
129
146
  pub(super) fn format_heading(&self, node: &SyntaxNode) -> String {
@@ -1,10 +1,10 @@
1
1
  use crate::config::{Config, Dialect};
2
2
  use crate::formatter::sentence_wrap::{
3
- ResolvedProfile, SentenceBoundaryClass, SentenceLanguage, SentenceSegment,
4
- is_sentence_boundary_segment, resolve_profile,
3
+ ResolvedProfile, SentenceBoundaryClass, SentenceLanguage, SentenceProfileCache,
4
+ SentenceSegment, is_sentence_boundary_segment,
5
5
  };
6
6
  use crate::formatter::smart::normalize_smart_punctuation;
7
- use crate::syntax::{LatexCommand, SyntaxKind, SyntaxNode};
7
+ use crate::syntax::{LatexCommand, ListItem, SyntaxKind, SyntaxNode};
8
8
  use panache_parser::parser::inlines::subscript::try_parse_subscript;
9
9
  use rowan::NodeOrToken;
10
10
  use rowan::ast::AstNode;
@@ -435,6 +435,26 @@ fn is_unsafe_list_line_start_piece(piece: &str) -> bool {
435
435
  || is_bullet_list_marker_piece(piece)
436
436
  }
437
437
 
438
+ fn escape_fancy_list_marker(piece: &str) -> Option<String> {
439
+ let unescaped = match piece.rsplit_once('\\') {
440
+ Some((head, punctuation @ ("." | ")"))) => Cow::Owned(format!("{head}{punctuation}")),
441
+ _ => Cow::Borrowed(piece),
442
+ };
443
+ if !is_fancy_alpha_marker_piece(&unescaped)
444
+ && !is_fancy_roman_marker_piece(&unescaped)
445
+ && !is_fancy_paren_decimal_marker_piece(&unescaped)
446
+ && !is_fancy_paren_alpha_or_roman_marker_piece(&unescaped)
447
+ {
448
+ return None;
449
+ }
450
+ if matches!(unescaped, Cow::Owned(_)) {
451
+ return Some(piece.to_string());
452
+ }
453
+ let mut escaped = piece.to_string();
454
+ escaped.insert(piece.len() - 1, '\\');
455
+ Some(escaped)
456
+ }
457
+
438
458
  fn is_atx_heading_marker_piece(piece: &str) -> bool {
439
459
  !piece.is_empty() && piece.len() <= 6 && piece.bytes().all(|b| b == b'#')
440
460
  }
@@ -460,6 +480,7 @@ struct StreamingCoreSink<'a> {
460
480
  avoid_definition_marker_line_start: bool,
461
481
  avoid_heading_line_start: bool,
462
482
  avoid_tilde_fence_line_start: bool,
483
+ escape_fancy_list_line_start: bool,
463
484
  }
464
485
 
465
486
  impl<'a> StreamingCoreSink<'a> {
@@ -492,6 +513,7 @@ impl<'a> StreamingCoreSink<'a> {
492
513
  avoid_definition_marker_line_start,
493
514
  avoid_heading_line_start,
494
515
  avoid_tilde_fence_line_start,
516
+ escape_fancy_list_line_start: false,
495
517
  }
496
518
  }
497
519
 
@@ -534,12 +556,24 @@ impl<'a> StreamingCoreSink<'a> {
534
556
  self.line.push(' ');
535
557
  self.line_width += 1;
536
558
  }
537
- self.line.push_str(&segment.text);
538
- self.line_width += piece_width;
559
+ // Reindenting lazy list-item text can turn a preserved line's literal
560
+ // marker into a sublist. Keep it literal and attached to its text on
561
+ // subsequent passes, when its punctuation is already escaped.
562
+ let escaped_marker = (self.escape_fancy_list_line_start && !self.line_has_piece)
563
+ .then(|| escape_fancy_list_marker(&segment.text))
564
+ .flatten();
565
+ if let Some(escaped) = &escaped_marker {
566
+ self.line.push_str(escaped);
567
+ self.line_width += UnicodeWidthStr::width(escaped.as_str());
568
+ } else {
569
+ self.line.push_str(&segment.text);
570
+ self.line_width += piece_width;
571
+ }
539
572
  self.line_has_piece = true;
540
573
  self.prev_ws_after = segment.has_whitespace_after;
541
574
 
542
575
  if self.sentence_mode
576
+ && escaped_marker.is_none()
543
577
  && is_sentence_boundary_segment(&segment, next_segment, is_last, self.profile)
544
578
  && !next_segment.is_some_and(|next| self.piece_would_start_unsafe_line(&next.text))
545
579
  {
@@ -1362,6 +1396,7 @@ fn process_node_recursive(
1362
1396
 
1363
1397
  pub(super) fn wrapped_lines_for_paragraph(
1364
1398
  config: &Config,
1399
+ sentence_profile: &SentenceProfileCache,
1365
1400
  node: &SyntaxNode,
1366
1401
  width: usize,
1367
1402
  format_inline_fn: &dyn Fn(&SyntaxNode) -> String,
@@ -1372,6 +1407,7 @@ pub(super) fn wrapped_lines_for_paragraph(
1372
1407
  log::trace!("wrapped_lines_for_paragraph called with width={}", width);
1373
1408
  let out_lines = wrapped_lines_for_node(
1374
1409
  config,
1410
+ sentence_profile,
1375
1411
  node,
1376
1412
  &[width],
1377
1413
  format_inline_fn,
@@ -1383,6 +1419,7 @@ pub(super) fn wrapped_lines_for_paragraph(
1383
1419
 
1384
1420
  pub(super) fn wrapped_lines_for_paragraph_with_widths(
1385
1421
  config: &Config,
1422
+ sentence_profile: &SentenceProfileCache,
1386
1423
  node: &SyntaxNode,
1387
1424
  widths: &[usize],
1388
1425
  format_inline_fn: &dyn Fn(&SyntaxNode) -> String,
@@ -1393,6 +1430,7 @@ pub(super) fn wrapped_lines_for_paragraph_with_widths(
1393
1430
  log::trace!("wrapped_lines_for_paragraph_with_widths called");
1394
1431
  let out_lines = wrapped_lines_for_node(
1395
1432
  config,
1433
+ sentence_profile,
1396
1434
  node,
1397
1435
  widths,
1398
1436
  format_inline_fn,
@@ -1404,6 +1442,7 @@ pub(super) fn wrapped_lines_for_paragraph_with_widths(
1404
1442
 
1405
1443
  pub(super) fn sentence_lines_for_paragraph(
1406
1444
  config: &Config,
1445
+ sentence_profile: &SentenceProfileCache,
1407
1446
  node: &SyntaxNode,
1408
1447
  format_inline_fn: &dyn Fn(&SyntaxNode) -> String,
1409
1448
  ) -> Vec<String> {
@@ -1413,6 +1452,7 @@ pub(super) fn sentence_lines_for_paragraph(
1413
1452
  log::trace!("sentence_lines_for_paragraph called");
1414
1453
  wrapped_lines_for_node(
1415
1454
  config,
1455
+ sentence_profile,
1416
1456
  node,
1417
1457
  &[],
1418
1458
  format_inline_fn,
@@ -1422,6 +1462,7 @@ pub(super) fn sentence_lines_for_paragraph(
1422
1462
 
1423
1463
  pub(super) fn semantic_lines_for_paragraph(
1424
1464
  config: &Config,
1465
+ sentence_profile: &SentenceProfileCache,
1425
1466
  node: &SyntaxNode,
1426
1467
  format_inline_fn: &dyn Fn(&SyntaxNode) -> String,
1427
1468
  ) -> Vec<String> {
@@ -1431,6 +1472,7 @@ pub(super) fn semantic_lines_for_paragraph(
1431
1472
  log::trace!("semantic_lines_for_paragraph called");
1432
1473
  wrapped_lines_for_node(
1433
1474
  config,
1475
+ sentence_profile,
1434
1476
  node,
1435
1477
  &[],
1436
1478
  format_inline_fn,
@@ -1501,6 +1543,7 @@ fn east_asian_break_creates_subscript(config: &Config, node: &SyntaxNode) -> boo
1501
1543
 
1502
1544
  pub(super) fn wrapped_lines_for_node(
1503
1545
  config: &Config,
1546
+ sentence_profile: &SentenceProfileCache,
1504
1547
  node: &SyntaxNode,
1505
1548
  widths: &[usize],
1506
1549
  format_inline_fn: &dyn Fn(&SyntaxNode) -> String,
@@ -1513,8 +1556,11 @@ pub(super) fn wrapped_lines_for_node(
1513
1556
  } else {
1514
1557
  &[1]
1515
1558
  };
1516
- let mut extra_abbreviations = Vec::new();
1517
- let profile = resolve_profile(node, config, &mut extra_abbreviations);
1559
+ let profile = if sentence_mode {
1560
+ sentence_profile.resolve(node, config)
1561
+ } else {
1562
+ ResolvedProfile::builtin_only(SentenceLanguage::English)
1563
+ };
1518
1564
  let escape_literal_tildes =
1519
1565
  !options.preserve_newlines && east_asian_break_creates_subscript(config, node);
1520
1566
  let mut builder = TraversalBuilder::new(
@@ -1529,6 +1575,11 @@ pub(super) fn wrapped_lines_for_node(
1529
1575
  options.preserve_newlines,
1530
1576
  escape_literal_tildes,
1531
1577
  );
1578
+ builder.sink.escape_fancy_list_line_start = options.preserve_newlines
1579
+ && config.parser_extensions.fancy_lists
1580
+ && node
1581
+ .ancestors()
1582
+ .any(|ancestor| ListItem::can_cast(ancestor.kind()));
1532
1583
  process_node_recursive(
1533
1584
  config,
1534
1585
  node,
@@ -8,7 +8,7 @@ use panache_parser::parser::blocks::headings::try_parse_atx_heading;
8
8
  use rowan::NodeOrToken;
9
9
 
10
10
  use super::Formatter;
11
- use super::preserve::{self, preserve_lines};
11
+ use super::preserve::{preserve_lines, preserve_lines_unprefixed};
12
12
  use super::utils::is_block_element;
13
13
 
14
14
  impl Formatter {
@@ -573,7 +573,7 @@ impl Formatter {
573
573
  match wrap_mode {
574
574
  WrapMode::Preserve => {
575
575
  let escaped = self.config.formatter_extensions.escaped_line_breaks;
576
- for line in preserve::preserve_lines(node, escaped) {
576
+ for line in preserve_lines_unprefixed(node, escaped) {
577
577
  self.output.push_str(&" ".repeat(indent));
578
578
  self.output.push_str(line.trim_start());
579
579
  self.output.push('\n');
@@ -1184,6 +1184,7 @@ impl Formatter {
1184
1184
  .map(|source| {
1185
1185
  inline_layout::wrapped_lines_for_node(
1186
1186
  &self.config,
1187
+ &self.sentence_profile,
1187
1188
  source,
1188
1189
  &line_widths,
1189
1190
  &|n| self.format_inline_node(n),
@@ -1210,7 +1211,7 @@ impl Formatter {
1210
1211
  Some(
1211
1212
  content_node
1212
1213
  .as_ref()
1213
- .map(|content| preserve::preserve_lines(content, escaped))
1214
+ .map(|content| preserve_lines_unprefixed(content, escaped))
1214
1215
  .unwrap_or_default(),
1215
1216
  )
1216
1217
  }
@@ -1235,6 +1236,7 @@ impl Formatter {
1235
1236
  .map(|source| {
1236
1237
  inline_layout::wrapped_lines_for_node(
1237
1238
  &self.config,
1239
+ &self.sentence_profile,
1238
1240
  source,
1239
1241
  &[],
1240
1242
  &|n| self.format_inline_node(n),
@@ -1587,10 +1589,18 @@ impl Formatter {
1587
1589
  " ".repeat(list_indent.spaces_after),
1588
1590
  );
1589
1591
  let table_str = match child.kind() {
1590
- SyntaxKind::PIPE_TABLE => {
1591
- tables::format_pipe_table(&child, &self.config, content_indent)
1592
- }
1593
- _ => tables::format_grid_table(&child, &self.config, content_indent),
1592
+ SyntaxKind::PIPE_TABLE => tables::format_pipe_table(
1593
+ &child,
1594
+ &self.config,
1595
+ &self.sentence_profile,
1596
+ content_indent,
1597
+ ),
1598
+ _ => tables::format_grid_table(
1599
+ &child,
1600
+ &self.config,
1601
+ &self.sentence_profile,
1602
+ content_indent,
1603
+ ),
1594
1604
  };
1595
1605
  let first_line_indent = " ".repeat(content_indent);
1596
1606
  self.output.push_str(&prefix);
@@ -68,6 +68,9 @@ This line hygiene does not otherwise normalize or reflow the preserved content.
68
68
  - Panache retains an authored environment-row boundary after a standalone TeX
69
69
  control space. The pinned formatter moves the control space onto the next row;
70
70
  Panache keeps the semantic space at the physical line end.
71
+ - Panache wraps independent equations at top-level punctuation. The pinned
72
+ formatter treats their relations as one chain and can strand the second
73
+ equation's left-hand side at the end of the preceding line.
71
74
 
72
75
  ## Rules
73
76
 
@@ -276,20 +279,31 @@ This line hygiene does not otherwise normalize or reflow the preserved content.
276
279
  `:`.
277
280
 
278
281
  7. **Display line-breaking.** In `reflow` mode, a free display row (`$$…$$`,
279
- non-environment) wider than `line-width` is broken at its **top-level**
280
- operators in a hierarchy keyed on parser `MathBreakPriority` (**relations** >
281
- **binary** > everything else). It chooses a subset of those candidates
282
- instead of breaking at every operator. The deterministic layout score charges
283
- squared overflow more heavily than a continuation, prefers a later relation
284
- break to a binary break, and prefers a binary break to separating the first
282
+ non-environment) wider than `line-width` is broken after **top-level**
283
+ punctuation, around `\qquad`, or before top-level operators. Operator
284
+ candidates follow parser `MathBreakPriority` (**relations** > **binary** >
285
+ everything else). It chooses a subset of those candidates instead of breaking
286
+ at every operator. The deterministic layout score charges squared overflow
287
+ more heavily than a continuation, prefers punctuation and later relation
288
+ breaks to binary breaks, and prefers a binary break to separating the first
285
289
  relation from its left-hand side. Ties favor the smaller maximum line width,
286
290
  then the smaller sum of squared line widths. This packs complete operator
287
291
  segments together when they fit instead of stranding `\pm`, `\cdot`, or a
288
292
  short relation on its own line.
289
293
 
294
+ Top-level punctuation, such as commas and semicolons, and `\qquad` separate
295
+ independent expressions. A selected break after punctuation starts at the
296
+ display indent and leaves the punctuation attached to the preceding
297
+ expression. When a break selects `\qquad`, the command occupies its own
298
+ source line at the display indent, followed by the next expression at that
299
+ same indent. Its width does not affect that expression's wrapping or relation
300
+ alignment. Expressions that fit together keep `\qquad` inline.
301
+
290
302
  A selected later relation starts a continuation aligned under the **first
291
- relation**---the classic stacked-`=` layout for an equality/comparison chain.
292
- A selected binary continuation sits **flush** under that relation segment's
303
+ relation in its expression**---the classic stacked-`=` layout for an
304
+ equality/comparison chain. The anchor is the relation's printed column; if
305
+ the first relation moves to a new line, later relations follow that column. A
306
+ selected binary continuation sits **flush** under that relation segment's
293
307
  right-hand side. The relation/RHS offset alone supplies the visual nesting;
294
308
  binary continuations never pick up an extra step. A top-level conditioning
295
309
  bar (`\mid`) identifies neighboring relations as separate predicates rather
@@ -334,12 +348,12 @@ This line hygiene does not otherwise normalize or reflow the preserved content.
334
348
  content, `line-width`, and `math-indent`---the author's own line breaks and
335
349
  indentation are never preserved, only recomputed.
336
350
 
337
- - **Top-level only.** An operator at delimiter depth > 0 --- inside the flat
338
- token runs `(…)` or `[…]` --- is never a break candidate. Structural
339
- `MATH_DELIMITED` (`\left…\right`), `MATH_GROUP`, and `MATH_ENVIRONMENT`
340
- nodes are opaque operands that the break scan never descends into, so their
341
- interior operators are likewise excluded.
342
- - **Spaced operators only.** A candidate has parser
351
+ - **Top-level only.** Punctuation or an operator at delimiter depth > 0 ---
352
+ inside the flat token runs `(…)` or `[…]` --- is never a break candidate.
353
+ Structural `MATH_DELIMITED` (`\left…\right`), `MATH_GROUP`, and
354
+ `MATH_ENVIRONMENT` nodes are opaque operands that the break scan never
355
+ descends into, so their interior operators are likewise excluded.
356
+ - **Spaced operators only.** An operator candidate has parser
343
357
  `MathBreakPriority::Binary` or `MathBreakPriority::Relation`; a unary
344
358
  `+`/`-` is `Ord` and never a break site. Typed lowering keeps the semantic
345
359
  atom stream intact across continuation segments, so a leading binary