panache-cli 3.17.0__tar.gz → 3.17.2__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 (397) hide show
  1. {panache_cli-3.17.0 → panache_cli-3.17.2}/Cargo.lock +36 -35
  2. {panache_cli-3.17.0 → panache_cli-3.17.2}/Cargo.toml +5 -5
  3. {panache_cli-3.17.0 → panache_cli-3.17.2}/PKG-INFO +11 -1
  4. {panache_cli-3.17.0 → panache_cli-3.17.2}/README.md +10 -0
  5. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/CHANGELOG.md +16 -0
  6. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/Cargo.toml +3 -3
  7. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/raw.rs +9 -0
  8. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/CHANGELOG.md +15 -0
  9. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/Cargo.toml +2 -2
  10. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/pandoc_ast.rs +38 -85
  11. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/block_dispatcher.rs +1 -9
  12. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/fenced_divs.rs +39 -3
  13. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/html_blocks.rs +100 -11
  14. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/citations.rs +73 -4
  15. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/core.rs +104 -7
  16. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/inline_html.rs +25 -3
  17. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/inline_ir.rs +65 -6
  18. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/sink.rs +6 -0
  19. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/attributes.rs +43 -13
  20. panache_cli-3.17.2/crates/panache-parser/src/parser/utils/raw_html.rs +150 -0
  21. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils.rs +2 -0
  22. panache_cli-3.17.2/crates/panache-parser/src/syntax/ast.rs +44 -0
  23. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/attributes.rs +4 -5
  24. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/fenced_divs.rs +55 -0
  25. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/headings.rs +9 -3
  26. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/html.rs +169 -3
  27. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/inlines.rs +18 -2
  28. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/kind.rs +2 -0
  29. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/links.rs +80 -17
  30. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/references.rs +1 -1
  31. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/tables.rs +1 -3
  32. panache_cli-3.17.2/src/diagnostic_renderer.rs +57 -0
  33. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/code_block_collector.rs +82 -0
  34. panache_cli-3.17.2/src/linter/docs.rs +336 -0
  35. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/execution_context.rs +45 -0
  36. panache_cli-3.17.2/src/linter/external_linters/jarl.rs +703 -0
  37. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters.rs +48 -6
  38. panache_cli-3.17.2/src/linter/fix.rs +84 -0
  39. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/project_index.rs +2 -2
  40. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema/interp.rs +5 -0
  41. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema/report.rs +2 -2
  42. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema/value.rs +101 -18
  43. panache_cli-3.17.0/src/diagnostic_renderer.rs → panache_cli-3.17.2/src/linter/render.rs +65 -87
  44. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/adjacent_footnote_refs.rs +15 -0
  45. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/blank_line_in_display_math.rs +15 -0
  46. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/blank_line_in_inline_footnote.rs +15 -0
  47. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/chunk_label_spaces.rs +15 -0
  48. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/citation_keys.rs +47 -0
  49. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/citation_nonbreaking_space.rs +15 -0
  50. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/consumer_divergence.rs +10 -0
  51. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/crossref_as_link_target.rs +15 -0
  52. panache_cli-3.17.2/src/linter/rules/docs/adjacent-footnote-refs.md +4 -0
  53. panache_cli-3.17.2/src/linter/rules/docs/blank-line-in-display-math.md +5 -0
  54. panache_cli-3.17.2/src/linter/rules/docs/blank-line-in-inline-footnote.md +6 -0
  55. panache_cli-3.17.2/src/linter/rules/docs/chunk-label-spaces.md +5 -0
  56. panache_cli-3.17.2/src/linter/rules/docs/citation-keys.md +6 -0
  57. panache_cli-3.17.2/src/linter/rules/docs/citation-nonbreaking-space.md +7 -0
  58. panache_cli-3.17.2/src/linter/rules/docs/consumer-divergence.md +10 -0
  59. panache_cli-3.17.2/src/linter/rules/docs/crossref-as-link-target.md +5 -0
  60. panache_cli-3.17.2/src/linter/rules/docs/duplicate-reference-labels.md +7 -0
  61. panache_cli-3.17.2/src/linter/rules/docs/duplicate-yaml-anchor.md +5 -0
  62. panache_cli-3.17.2/src/linter/rules/docs/empty-list-item.md +4 -0
  63. panache_cli-3.17.2/src/linter/rules/docs/empty-values.md +9 -0
  64. panache_cli-3.17.2/src/linter/rules/docs/figure-crossref-captions.md +6 -0
  65. panache_cli-3.17.2/src/linter/rules/docs/footnote-after-image.md +7 -0
  66. panache_cli-3.17.2/src/linter/rules/docs/footnote-ref-in-footnote-def.md +6 -0
  67. panache_cli-3.17.2/src/linter/rules/docs/footnote-swallowed-by-bracket.md +7 -0
  68. panache_cli-3.17.2/src/linter/rules/docs/heading-eaten-attrs.md +6 -0
  69. panache_cli-3.17.2/src/linter/rules/docs/heading-hierarchy.md +5 -0
  70. panache_cli-3.17.2/src/linter/rules/docs/heading-strip-comments-residue.md +5 -0
  71. panache_cli-3.17.2/src/linter/rules/docs/html-entities.md +7 -0
  72. panache_cli-3.17.2/src/linter/rules/docs/html-unclosed-attribute.md +7 -0
  73. panache_cli-3.17.2/src/linter/rules/docs/inline-math-line-break.md +6 -0
  74. panache_cli-3.17.2/src/linter/rules/docs/link-text-is-url.md +6 -0
  75. panache_cli-3.17.2/src/linter/rules/docs/malformed-citation.md +7 -0
  76. panache_cli-3.17.2/src/linter/rules/docs/math-syntax.md +8 -0
  77. panache_cli-3.17.2/src/linter/rules/docs/missing-chunk-labels.md +6 -0
  78. panache_cli-3.17.2/src/linter/rules/docs/quarto-schema-unknown-key.md +9 -0
  79. panache_cli-3.17.2/src/linter/rules/docs/quarto-schema.md +11 -0
  80. panache_cli-3.17.2/src/linter/rules/docs/reversed-footnote-marker.md +7 -0
  81. panache_cli-3.17.2/src/linter/rules/docs/space-before-punctuation.md +9 -0
  82. panache_cli-3.17.2/src/linter/rules/docs/stray-fenced-div-markers.md +6 -0
  83. panache_cli-3.17.2/src/linter/rules/docs/swallowed-list-marker.md +15 -0
  84. panache_cli-3.17.2/src/linter/rules/docs/table-column-count.md +6 -0
  85. panache_cli-3.17.2/src/linter/rules/docs/undefined-anchor.md +11 -0
  86. panache_cli-3.17.2/src/linter/rules/docs/undefined-references.md +15 -0
  87. panache_cli-3.17.2/src/linter/rules/docs/unknown-emoji-alias.md +3 -0
  88. panache_cli-3.17.2/src/linter/rules/docs/unspaced-citation.md +7 -0
  89. panache_cli-3.17.2/src/linter/rules/docs/unspaced-list-marker.md +5 -0
  90. panache_cli-3.17.2/src/linter/rules/docs/unsupported-metadata-key.md +7 -0
  91. panache_cli-3.17.2/src/linter/rules/docs/unused-definitions.md +5 -0
  92. panache_cli-3.17.2/src/linter/rules/docs/unused-yaml-anchor.md +6 -0
  93. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/duplicate_references.rs +53 -0
  94. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/duplicate_yaml_anchor.rs +15 -0
  95. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/emoji_aliases.rs +15 -0
  96. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/empty_list_item.rs +15 -0
  97. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/empty_values.rs +10 -0
  98. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/figure_crossref_captions.rs +16 -0
  99. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/footnote_after_image.rs +15 -0
  100. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/footnote_ref_in_footnote_def.rs +15 -0
  101. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/footnote_swallowed_by_bracket.rs +24 -0
  102. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/heading_eaten_attrs.rs +15 -0
  103. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/heading_hierarchy.rs +15 -0
  104. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/heading_strip_comments_residue.rs +15 -0
  105. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/html_entities.rs +10 -0
  106. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/html_unclosed_attribute.rs +15 -0
  107. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/inline_math_line_break.rs +15 -0
  108. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/link_text_is_url.rs +15 -0
  109. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/malformed_citation.rs +10 -0
  110. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/math_content.rs +53 -0
  111. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/missing_chunk_labels.rs +15 -0
  112. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/quarto_schema.rs +117 -9
  113. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/reversed_footnote_marker.rs +16 -0
  114. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/space_before_punctuation.rs +16 -0
  115. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/stray_fenced_div_markers.rs +107 -30
  116. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/swallowed_list_marker.rs +154 -1
  117. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/table_column_count.rs +15 -0
  118. panache_cli-3.17.2/src/linter/rules/undefined_anchor.rs +812 -0
  119. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/undefined_references.rs +131 -27
  120. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/unspaced_citation.rs +15 -0
  121. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/unspaced_list_marker.rs +15 -0
  122. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/unsupported_metadata_key.rs +15 -0
  123. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/unused_definitions.rs +60 -0
  124. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules/unused_yaml_anchor.rs +15 -0
  125. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/rules.rs +20 -6
  126. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter.rs +7 -4
  127. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/document_links.rs +2 -2
  128. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/goto_definition.rs +4 -1
  129. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/heading_link_conversion.rs +36 -3
  130. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/hover.rs +3 -3
  131. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/helpers.rs +16 -2
  132. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/main.rs +1 -83
  133. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata/bibliography.rs +20 -1
  134. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/salsa.rs +435 -23
  135. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/utils.rs +13 -8
  136. panache_cli-3.17.0/crates/panache-parser/src/syntax/ast.rs +0 -4
  137. panache_cli-3.17.0/src/linter/external_linters/jarl.rs +0 -139
  138. panache_cli-3.17.0/src/linter/rules/undefined_anchor.rs +0 -423
  139. {panache_cli-3.17.0 → panache_cli-3.17.2}/LICENSE +0 -0
  140. {panache_cli-3.17.0 → panache_cli-3.17.2}/assets/quarto-schema/schema.json +0 -0
  141. {panache_cli-3.17.0 → panache_cli-3.17.2}/build.rs +0 -0
  142. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/README.md +0 -0
  143. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/config.rs +0 -0
  144. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/directives.rs +0 -0
  145. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/blockquotes.rs +0 -0
  146. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/blocks.rs +0 -0
  147. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/code_blocks.rs +0 -0
  148. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/containers.rs +0 -0
  149. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/core.rs +0 -0
  150. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/document.rs +0 -0
  151. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/fenced_divs.rs +0 -0
  152. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/hashpipe.rs +0 -0
  153. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/headings.rs +0 -0
  154. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/indent_utils.rs +0 -0
  155. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/inline.rs +0 -0
  156. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/inline_layout.rs +0 -0
  157. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/lists.rs +0 -0
  158. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math/STYLE.md +0 -0
  159. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math/ir.rs +0 -0
  160. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math/lower.rs +0 -0
  161. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math/printer.rs +0 -0
  162. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math/render.rs +0 -0
  163. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/math.rs +0 -0
  164. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/metadata.rs +0 -0
  165. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/paragraphs.rs +0 -0
  166. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/preserve.rs +0 -0
  167. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/sentence_wrap.rs +0 -0
  168. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/shortcodes.rs +0 -0
  169. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/smart.rs +0 -0
  170. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/table_conversion.rs +0 -0
  171. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/tables.rs +0 -0
  172. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/utils.rs +0 -0
  173. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/STYLE.md +0 -0
  174. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/block_map.rs +0 -0
  175. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/block_sequence.rs +0 -0
  176. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/document.rs +0 -0
  177. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/flow.rs +0 -0
  178. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/options.rs +0 -0
  179. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml/scalar.rs +0 -0
  180. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter/yaml.rs +0 -0
  181. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/formatter.rs +0 -0
  182. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/lib.rs +0 -0
  183. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/parser.rs +0 -0
  184. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/syntax.rs +0 -0
  185. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/utils.rs +0 -0
  186. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-formatter/src/yaml_engine.rs +0 -0
  187. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/README.md +0 -0
  188. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/build.rs +0 -0
  189. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/data/math_symbols.json +0 -0
  190. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/data/unicode-math.LICENSE +0 -0
  191. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/data/unicode-math.NOTICE +0 -0
  192. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/grid_layout.rs +0 -0
  193. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/lib.rs +0 -0
  194. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/options.rs +0 -0
  195. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/admonitions.rs +0 -0
  196. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/blockquotes.rs +0 -0
  197. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/code_blocks.rs +0 -0
  198. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/container_prefix.rs +0 -0
  199. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/definition_lists.rs +0 -0
  200. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/figures.rs +0 -0
  201. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/headings.rs +0 -0
  202. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/horizontal_rules.rs +0 -0
  203. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/hugo.rs +0 -0
  204. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/indented_code.rs +0 -0
  205. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/latex_envs.rs +0 -0
  206. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/line_blocks.rs +0 -0
  207. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/lists.rs +0 -0
  208. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/metadata.rs +0 -0
  209. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/myst_directives.rs +0 -0
  210. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/myst_targets.rs +0 -0
  211. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/paragraphs.rs +0 -0
  212. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/raw_blocks.rs +0 -0
  213. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/reference_links.rs +0 -0
  214. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tables.rs +0 -0
  215. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/blanklines.rs +0 -0
  216. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/blockquotes.rs +0 -0
  217. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/code_blocks.rs +0 -0
  218. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/content_containers.rs +0 -0
  219. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/definition_lists.rs +0 -0
  220. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/figures.rs +0 -0
  221. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/footnote_marker_line.rs +0 -0
  222. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/fragment_context.rs +0 -0
  223. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/frame_pinning.rs +0 -0
  224. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/headings.rs +0 -0
  225. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/helpers.rs +0 -0
  226. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/lists.rs +0 -0
  227. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/losslessness.rs +0 -0
  228. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/metadata_guards.rs +0 -0
  229. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks/tests/tables.rs +0 -0
  230. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/blocks.rs +0 -0
  231. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/core/blockquotes.rs +0 -0
  232. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/core/definition_lists.rs +0 -0
  233. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/core/html_interruptions.rs +0 -0
  234. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/core/list_items.rs +0 -0
  235. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/core.rs +0 -0
  236. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/diagnostics.rs +0 -0
  237. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/bookdown.rs +0 -0
  238. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/bracketed_spans.rs +0 -0
  239. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/code_spans.rs +0 -0
  240. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/emoji.rs +0 -0
  241. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/escapes.rs +0 -0
  242. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/hard_breaks.rs +0 -0
  243. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/hugo.rs +0 -0
  244. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/inline_executable.rs +0 -0
  245. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/inline_footnotes.rs +0 -0
  246. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/latex.rs +0 -0
  247. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/links.rs +0 -0
  248. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/mark.rs +0 -0
  249. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/math.rs +0 -0
  250. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/myst_roles.rs +0 -0
  251. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/myst_substitutions.rs +0 -0
  252. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/native_spans.rs +0 -0
  253. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/raw_inline.rs +0 -0
  254. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/refdef_map.rs +0 -0
  255. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/shortcodes.rs +0 -0
  256. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/strikeout.rs +0 -0
  257. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/subscript.rs +0 -0
  258. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/superscript.rs +0 -0
  259. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/svelte.rs +0 -0
  260. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/tests.rs +0 -0
  261. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/uri-schemes.csv +0 -0
  262. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines/wikilinks.rs +0 -0
  263. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/inlines.rs +0 -0
  264. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/math.rs +0 -0
  265. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/reparse.rs +0 -0
  266. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/chunk_options.rs +0 -0
  267. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/container_stack.rs +0 -0
  268. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/continuation.rs +0 -0
  269. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/helpers.rs +0 -0
  270. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/inline_emission.rs +0 -0
  271. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/list_item_buffer.rs +0 -0
  272. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/marker_utils.rs +0 -0
  273. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/text_buffer.rs +0 -0
  274. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/tree_copy.rs +0 -0
  275. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/utils/yaml_regions.rs +0 -0
  276. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/verify.rs +0 -0
  277. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/cooking.rs +0 -0
  278. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/events.rs +0 -0
  279. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/model.rs +0 -0
  280. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/parser.rs +0 -0
  281. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/profile.rs +0 -0
  282. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/scanner.rs +0 -0
  283. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml/validator.rs +0 -0
  284. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser/yaml.rs +0 -0
  285. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/parser.rs +0 -0
  286. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/range_utils.rs +0 -0
  287. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/semantic/math.rs +0 -0
  288. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/semantic.rs +0 -0
  289. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/alerts.rs +0 -0
  290. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/block_quotes.rs +0 -0
  291. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/blocks.rs +0 -0
  292. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/chunk_options.rs +0 -0
  293. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/citations.rs +0 -0
  294. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/code_blocks.rs +0 -0
  295. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/code_span.rs +0 -0
  296. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/consumer.rs +0 -0
  297. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/crossrefs.rs +0 -0
  298. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/definitions.rs +0 -0
  299. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/hugo.rs +0 -0
  300. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/lists.rs +0 -0
  301. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/math.rs +0 -0
  302. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/myst.rs +0 -0
  303. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/raw_tex.rs +0 -0
  304. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/shortcodes.rs +0 -0
  305. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/yaml.rs +0 -0
  306. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax/yaml_ast.rs +0 -0
  307. {panache_cli-3.17.0 → panache_cli-3.17.2}/crates/panache-parser/src/syntax.rs +0 -0
  308. {panache_cli-3.17.0 → panache_cli-3.17.2}/pyproject.toml +0 -0
  309. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/bibtex.rs +0 -0
  310. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/csl_json.rs +0 -0
  311. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/csl_yaml.rs +0 -0
  312. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/index.rs +0 -0
  313. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/preview.rs +0 -0
  314. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib/ris.rs +0 -0
  315. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bib.rs +0 -0
  316. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/bin/distill_quarto_schema.rs +0 -0
  317. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/cache.rs +0 -0
  318. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/cli.rs +0 -0
  319. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/config/formatter_presets.rs +0 -0
  320. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/config/types/schema_helpers.rs +0 -0
  321. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/config/types.rs +0 -0
  322. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/config.rs +0 -0
  323. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/directives.rs +0 -0
  324. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/external_formatters_common.rs +0 -0
  325. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/external_formatters_sync.rs +0 -0
  326. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/external_tools_common.rs +0 -0
  327. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/formatter.rs +0 -0
  328. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/includes.rs +0 -0
  329. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/incremental.rs +0 -0
  330. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/io_context.rs +0 -0
  331. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lib.rs +0 -0
  332. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/diagnostics.rs +0 -0
  333. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/clippy.rs +0 -0
  334. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/eslint.rs +0 -0
  335. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/jolars.rs +0 -0
  336. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/ruff.rs +0 -0
  337. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/shellcheck.rs +0 -0
  338. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters/staticcheck.rs +0 -0
  339. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/external_linters_sync.rs +0 -0
  340. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/fuzzy.rs +0 -0
  341. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/index.rs +0 -0
  342. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/metadata_diagnostics.rs +0 -0
  343. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/offsets.rs +0 -0
  344. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema/distill.rs +0 -0
  345. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema/model.rs +0 -0
  346. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/quarto_schema.rs +0 -0
  347. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/runner.rs +0 -0
  348. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/yaml_anchors.rs +0 -0
  349. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/linter/yaml_resolve.rs +0 -0
  350. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/config.rs +0 -0
  351. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/context.rs +0 -0
  352. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/conversions.rs +0 -0
  353. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/dispatch.rs +0 -0
  354. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/documents.rs +0 -0
  355. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/global_state.rs +0 -0
  356. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/code_actions.rs +0 -0
  357. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/completion.rs +0 -0
  358. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/configuration.rs +0 -0
  359. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/diagnostics.rs +0 -0
  360. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/document_highlight.rs +0 -0
  361. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/document_symbols.rs +0 -0
  362. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/file_operations.rs +0 -0
  363. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/file_rename.rs +0 -0
  364. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/file_watcher.rs +0 -0
  365. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/folding_ranges.rs +0 -0
  366. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/footnote_conversion.rs +0 -0
  367. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/formatting.rs +0 -0
  368. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/link_conversion.rs +0 -0
  369. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/linked_editing_range.rs +0 -0
  370. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/list_conversion.rs +0 -0
  371. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/prepare_rename.rs +0 -0
  372. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/references.rs +0 -0
  373. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/rename.rs +0 -0
  374. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/semantic_tokens.rs +0 -0
  375. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/shortcode_args.rs +0 -0
  376. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/table_conversion.rs +0 -0
  377. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/workspace_folders.rs +0 -0
  378. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers/workspace_symbols.rs +0 -0
  379. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/handlers.rs +0 -0
  380. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/line_index.rs +0 -0
  381. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/navigation.rs +0 -0
  382. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/symbols.rs +0 -0
  383. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/task_pool.rs +0 -0
  384. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/testing.rs +0 -0
  385. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp/uri_ext.rs +0 -0
  386. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/lsp.rs +0 -0
  387. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata/citations.rs +0 -0
  388. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata/project.rs +0 -0
  389. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata/references.rs +0 -0
  390. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata/yaml.rs +0 -0
  391. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/metadata.rs +0 -0
  392. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/parser.rs +0 -0
  393. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/range_utils.rs +0 -0
  394. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/syntax.rs +0 -0
  395. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/vfs.rs +0 -0
  396. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/yaml_engine.rs +0 -0
  397. {panache_cli-3.17.0 → panache_cli-3.17.2}/src/yaml_regions.rs +0 -0
@@ -39,9 +39,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
39
39
 
40
40
  [[package]]
41
41
  name = "annotate-snippets"
42
- version = "0.12.16"
42
+ version = "0.12.17"
43
43
  source = "registry+https://github.com/rust-lang/crates.io-index"
44
- checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1"
44
+ checksum = "b2a5b0a5ab8561c603f16c3b78c24a386b1f70e7fc1b1b1e8c15738828e4a176"
45
45
  dependencies = [
46
46
  "anstyle",
47
47
  "memchr",
@@ -121,9 +121,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
121
121
 
122
122
  [[package]]
123
123
  name = "badness-formatter"
124
- version = "0.10.2"
124
+ version = "0.11.0"
125
125
  source = "registry+https://github.com/rust-lang/crates.io-index"
126
- checksum = "b174164ae9bb3abaa0115a64ecb11a54cdee5c93c9104c1cdf2c5da282039d76"
126
+ checksum = "0165f729bcb3de3e5b19936829abb6e32204d5762ed93a2c131e65c3c9495810"
127
127
  dependencies = [
128
128
  "badness-parser",
129
129
  "rowan 0.17.0",
@@ -131,9 +131,9 @@ dependencies = [
131
131
 
132
132
  [[package]]
133
133
  name = "badness-parser"
134
- version = "0.11.1"
134
+ version = "0.11.2"
135
135
  source = "registry+https://github.com/rust-lang/crates.io-index"
136
- checksum = "32b45795e07c88249e867c1f2dd84ca0d5d78062753fb5fa75c8eb1ece8e202b"
136
+ checksum = "75b997df78399ddfa09f747bbe52f8e1c8afc374e3fc95540cd312632b939744"
137
137
  dependencies = [
138
138
  "phf 0.14.0",
139
139
  "phf_codegen",
@@ -294,9 +294,9 @@ dependencies = [
294
294
 
295
295
  [[package]]
296
296
  name = "clapdown"
297
- version = "0.2.0"
297
+ version = "0.3.0"
298
298
  source = "registry+https://github.com/rust-lang/crates.io-index"
299
- checksum = "68bcefa13c36a119d957224c65214f792139033a34f8157297ac2a7fff5a343a"
299
+ checksum = "d8f2a42d22b905f09c7e696e2f46a17e4aa956c8d8b8cd09806137fd99c8544c"
300
300
  dependencies = [
301
301
  "clap",
302
302
  ]
@@ -326,9 +326,9 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
326
326
 
327
327
  [[package]]
328
328
  name = "crc32fast"
329
- version = "1.5.2"
329
+ version = "1.5.3"
330
330
  source = "registry+https://github.com/rust-lang/crates.io-index"
331
- checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78"
331
+ checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055"
332
332
  dependencies = [
333
333
  "cfg-if",
334
334
  ]
@@ -497,9 +497,9 @@ dependencies = [
497
497
 
498
498
  [[package]]
499
499
  name = "emojis"
500
- version = "0.9.0"
500
+ version = "0.9.1"
501
501
  source = "registry+https://github.com/rust-lang/crates.io-index"
502
- checksum = "0b1514ced566c94991ed9563258ecf61e311fd773bf0a3f20606830386bf66e3"
502
+ checksum = "589871e639330783bc20ad89d32ac1b049e02c273d96c907ca27478c8bc674a2"
503
503
  dependencies = [
504
504
  "phf 0.13.1",
505
505
  ]
@@ -850,9 +850,9 @@ dependencies = [
850
850
 
851
851
  [[package]]
852
852
  name = "jsonschema"
853
- version = "0.58.6"
853
+ version = "0.60.1"
854
854
  source = "registry+https://github.com/rust-lang/crates.io-index"
855
- checksum = "f622c574a29fb3034a0a90645afee194dfedc75fc124228801b6e77041075bd1"
855
+ checksum = "65de752665c4a06528af6759955eecf60ba73ae7442d35349963a09c8031cd71"
856
856
  dependencies = [
857
857
  "ahash",
858
858
  "bytecount",
@@ -878,23 +878,24 @@ dependencies = [
878
878
 
879
879
  [[package]]
880
880
  name = "jsonschema-regex"
881
- version = "0.58.6"
881
+ version = "0.60.2"
882
882
  source = "registry+https://github.com/rust-lang/crates.io-index"
883
- checksum = "a968fffd387b2ab005bf00c1851f5d26e90df05b6f7ad609ed0d620033cca5e7"
883
+ checksum = "107aeb6ff14b8deb5610096a8ce5c554ec89806b521147eaeb3cae05b07edb7a"
884
884
  dependencies = [
885
885
  "regex-syntax",
886
886
  ]
887
887
 
888
888
  [[package]]
889
889
  name = "jsonschema-value"
890
- version = "0.58.6"
890
+ version = "0.60.2"
891
891
  source = "registry+https://github.com/rust-lang/crates.io-index"
892
- checksum = "39b7670345e5ce87371339d13705dbb9276b7e3e934bbe1efa2c6734a1f65a96"
892
+ checksum = "e281d6b177bb4834f2ffd6f92aa0443cffe29c996b251c8d94eb6f456186feba"
893
893
  dependencies = [
894
894
  "ahash",
895
895
  "bytecount",
896
896
  "fraction",
897
897
  "getrandom 0.3.4",
898
+ "memchr",
898
899
  "num-cmp",
899
900
  "num-traits",
900
901
  "serde_json",
@@ -903,9 +904,9 @@ dependencies = [
903
904
 
904
905
  [[package]]
905
906
  name = "libc"
906
- version = "0.2.190"
907
+ version = "0.2.191"
907
908
  source = "registry+https://github.com/rust-lang/crates.io-index"
908
- checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78"
909
+ checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
909
910
 
910
911
  [[package]]
911
912
  name = "libredox"
@@ -1114,7 +1115,7 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1114
1115
 
1115
1116
  [[package]]
1116
1117
  name = "panache"
1117
- version = "3.17.0"
1118
+ version = "3.17.2"
1118
1119
  dependencies = [
1119
1120
  "annotate-snippets",
1120
1121
  "assert_cmd",
@@ -1147,7 +1148,7 @@ dependencies = [
1147
1148
  "schemars",
1148
1149
  "serde",
1149
1150
  "serde_json",
1150
- "similar 3.2.0",
1151
+ "similar 3.2.1",
1151
1152
  "similar-asserts",
1152
1153
  "tempfile",
1153
1154
  "toml",
@@ -1159,7 +1160,7 @@ dependencies = [
1159
1160
 
1160
1161
  [[package]]
1161
1162
  name = "panache-formatter"
1162
- version = "0.28.0"
1163
+ version = "0.28.2"
1163
1164
  dependencies = [
1164
1165
  "badness-formatter",
1165
1166
  "insta",
@@ -1179,7 +1180,7 @@ dependencies = [
1179
1180
 
1180
1181
  [[package]]
1181
1182
  name = "panache-parser"
1182
- version = "0.34.0"
1183
+ version = "0.34.2"
1183
1184
  dependencies = [
1184
1185
  "badness-parser",
1185
1186
  "entities",
@@ -1461,9 +1462,9 @@ dependencies = [
1461
1462
 
1462
1463
  [[package]]
1463
1464
  name = "referencing"
1464
- version = "0.58.6"
1465
+ version = "0.60.2"
1465
1466
  source = "registry+https://github.com/rust-lang/crates.io-index"
1466
- checksum = "558f3855529c0a7e78a48e409fa653456e55f1b167eab4109c16a255b7727e3f"
1467
+ checksum = "f42818036d3b37cda6bd4c494543158a36e431cb717015ef7c93acc6ba214d3b"
1467
1468
  dependencies = [
1468
1469
  "ahash",
1469
1470
  "fluent-uri 0.4.1",
@@ -1738,9 +1739,9 @@ checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
1738
1739
 
1739
1740
  [[package]]
1740
1741
  name = "similar"
1741
- version = "3.2.0"
1742
+ version = "3.2.1"
1742
1743
  source = "registry+https://github.com/rust-lang/crates.io-index"
1743
- checksum = "4f66ca1f7aca2474dc10c942eb22feffc897735f54cd1db90138c2fddb490987"
1744
+ checksum = "d2f8bec09ae8fae0f4f265a4559a9334be3929d8504e9b536df0a41302bd1733"
1744
1745
  dependencies = [
1745
1746
  "bstr",
1746
1747
  "unicode-segmentation",
@@ -1753,7 +1754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1753
1754
  checksum = "997e6ca38e97437973fc9f7f50a50d1274cacd874341a4960fea90067291038c"
1754
1755
  dependencies = [
1755
1756
  "console",
1756
- "similar 3.2.0",
1757
+ "similar 3.2.1",
1757
1758
  ]
1758
1759
 
1759
1760
  [[package]]
@@ -1770,15 +1771,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
1770
1771
 
1771
1772
  [[package]]
1772
1773
  name = "smallvec"
1773
- version = "1.16.3"
1774
+ version = "1.16.4"
1774
1775
  source = "registry+https://github.com/rust-lang/crates.io-index"
1775
- checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b"
1776
+ checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8"
1776
1777
 
1777
1778
  [[package]]
1778
1779
  name = "smol_str"
1779
- version = "0.3.6"
1780
+ version = "0.3.7"
1780
1781
  source = "registry+https://github.com/rust-lang/crates.io-index"
1781
- checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523"
1782
+ checksum = "eeb7109d23f319619d4cc0de5464613c8b7b1a09db2774a58101459cf6be2f10"
1782
1783
  dependencies = [
1783
1784
  "borsh",
1784
1785
  "serde_core",
@@ -1986,9 +1987,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1986
1987
 
1987
1988
  [[package]]
1988
1989
  name = "uuid"
1989
- version = "1.28.0"
1990
+ version = "1.29.0"
1990
1991
  source = "registry+https://github.com/rust-lang/crates.io-index"
1991
- checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606"
1992
+ checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514"
1992
1993
  dependencies = [
1993
1994
  "getrandom 0.4.3",
1994
1995
  "js-sys",
@@ -9,7 +9,7 @@ authors = ["Johan Larsson <johan@jolars.co>"]
9
9
 
10
10
  [package]
11
11
  name = "panache"
12
- version = "3.17.0"
12
+ version = "3.17.2"
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
@@ -55,11 +55,11 @@ path = "src/main.rs"
55
55
  required-features = ["cli"]
56
56
 
57
57
  [dependencies]
58
- panache-formatter = { path = "crates/panache-formatter", version = "0.28.0", features = [
58
+ panache-formatter = { path = "crates/panache-formatter", version = "0.28.2", features = [
59
59
  "serde",
60
60
  "schema",
61
61
  ] }
62
- panache-parser = { path = "crates/panache-parser", version = "0.34.0", features = [
62
+ panache-parser = { path = "crates/panache-parser", version = "0.34.2", features = [
63
63
  "serde",
64
64
  "schema",
65
65
  ] }
@@ -95,7 +95,7 @@ similar-asserts = "2.0.0"
95
95
  insta = { version = "1.47.2", features = ["json"] }
96
96
  assert_cmd = "2.2.2"
97
97
  predicates = "3.1.4"
98
- jsonschema = { version = "0.58.5", default-features = false }
98
+ jsonschema = { version = "0.60.1", default-features = false }
99
99
 
100
100
  [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
101
101
  rayon = "1.10.0"
@@ -117,7 +117,7 @@ lsp = [
117
117
  clap = { version = "4.6.1", features = ["derive", "env"] }
118
118
  clap_complete = "4.6.0"
119
119
  clap_mangen = "0.3.0"
120
- clapdown = "0.2.0"
120
+ clapdown = "0.3.0"
121
121
  flate2 = "1.1.9"
122
122
 
123
123
  [package.metadata.deb]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: panache-cli
3
- Version: 3.17.0
3
+ Version: 3.17.2
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -37,6 +37,7 @@ Code](https://vsmarketplacebadges.dev/version-short/jolars.panache.svg?logo=vsix
37
37
  version](https://badge.fury.io/py/panache-cli.svg?icon=si%3Apython)](https://badge.fury.io/py/panache-cli)
38
38
  [![npm
39
39
  version](https://badge.fury.io/js/@panache-cli%2Fpanache.svg?icon=si%3Anpm)](https://badge.fury.io/js/@panache-cli%2Fpanache)
40
+ [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.18608442-blue)](https://doi.org/10.5281/zenodo.18608442)
40
41
 
41
42
  Panache is a language server, formatter, and linter for Quarto and other
42
43
  Markdown flavors, built in Rust with a lossless CST parser and support for
@@ -337,3 +338,12 @@ documentation, well-structured code, and testing infrastructure provided by
337
338
  Pandoc. We also owe significant debt to the rust-analyzer project, on which
338
339
  Panache is heavily inspired.
339
340
 
341
+ ## Citation
342
+
343
+ If you use Panache in your research, please cite the release you used. Select
344
+ that release in the [Zenodo archive](https://doi.org/10.5281/zenodo.18608442)
345
+ and export its citation. To cite Panache generally, use the concept DOI
346
+ `10.5281/zenodo.18608442`.
347
+
348
+ Machine-readable metadata is available in [CITATION.cff](CITATION.cff).
349
+
@@ -11,6 +11,7 @@ Code](https://vsmarketplacebadges.dev/version-short/jolars.panache.svg?logo=vsix
11
11
  version](https://badge.fury.io/py/panache-cli.svg?icon=si%3Apython)](https://badge.fury.io/py/panache-cli)
12
12
  [![npm
13
13
  version](https://badge.fury.io/js/@panache-cli%2Fpanache.svg?icon=si%3Anpm)](https://badge.fury.io/js/@panache-cli%2Fpanache)
14
+ [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.18608442-blue)](https://doi.org/10.5281/zenodo.18608442)
14
15
 
15
16
  Panache is a language server, formatter, and linter for Quarto and other
16
17
  Markdown flavors, built in Rust with a lossless CST parser and support for
@@ -310,3 +311,12 @@ The development of Panache has simplified considerably thanks to the extensive
310
311
  documentation, well-structured code, and testing infrastructure provided by
311
312
  Pandoc. We also owe significant debt to the rust-analyzer project, on which
312
313
  Panache is heavily inspired.
314
+
315
+ ## Citation
316
+
317
+ If you use Panache in your research, please cite the release you used. Select
318
+ that release in the [Zenodo archive](https://doi.org/10.5281/zenodo.18608442)
319
+ and export its citation. To cite Panache generally, use the concept DOI
320
+ `10.5281/zenodo.18608442`.
321
+
322
+ Machine-readable metadata is available in [CITATION.cff](CITATION.cff).
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.28.2](https://github.com/jolars/panache/compare/panache-formatter-v0.28.1...panache-formatter-v0.28.2) (2026-10-30)
4
+
5
+ ### Dependencies
6
+
7
+ - updated crates/panache-parser to v0.34.2
8
+
9
+ ## [0.28.1](https://github.com/jolars/panache/compare/panache-formatter-v0.28.0...panache-formatter-v0.28.1) (2026-10-26)
10
+
11
+ ### Bug Fixes
12
+
13
+ - **parser:** expose IDs in raw CommonMark HTML ([`b076c95`](https://github.com/jolars/panache/commit/b076c955aa49d1a4ff9bb32cbc132e83d57b9a04))
14
+
15
+ ### Dependencies
16
+
17
+ - updated crates/panache-parser to v0.34.1
18
+
3
19
  ## [0.28.0](https://github.com/jolars/panache/compare/panache-formatter-v0.27.1...panache-formatter-v0.28.0) (2026-10-16)
4
20
 
5
21
  ### Features
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "panache-formatter"
3
- version = "0.28.0"
3
+ version = "0.28.2"
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.34.0" }
22
+ panache-parser = { path = "../panache-parser", version = "0.34.2" }
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 }
@@ -32,7 +32,7 @@ serde = ["dep:serde", "panache-parser/serde"]
32
32
  schema = ["serde", "dep:schemars", "panache-parser/schema"]
33
33
 
34
34
  [dev-dependencies]
35
- badness-formatter = "=0.10.2"
35
+ badness-formatter = "=0.11.0"
36
36
  serde_json = "1.0.150"
37
37
  insta = { version = "1.47.2", features = ["json"] }
38
38
  # TEMPORARY: cross-validation oracle only (tests/yaml_cross_validation.rs).
@@ -48,6 +48,15 @@ impl Formatter {
48
48
  after_marker = false;
49
49
  text.push_str(token.text());
50
50
  }
51
+ // A prefix-only final line still belongs to the raw block without a
52
+ // source newline; the enclosing container must emit that blank line.
53
+ if text.ends_with('\n')
54
+ && node
55
+ .last_token()
56
+ .is_some_and(|token| token.kind() == SyntaxKind::LINE_PREFIX)
57
+ {
58
+ text.push('\n');
59
+ }
51
60
  let starts_on_marker_line = node
52
61
  .first_token()
53
62
  .and_then(|token| token.prev_token())
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.34.2](https://github.com/jolars/panache/compare/panache-parser-v0.34.1...panache-parser-v0.34.2) (2026-10-30)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **lint:** validate custom cross-reference targets ([`f4f3a1d`](https://github.com/jolars/panache/commit/f4f3a1db60ec5ee2d537c72c60668426d696ecd9)), closes [#591](https://github.com/jolars/panache/issues/591)
8
+ - **parser:** capture narrative citation suffixes ([`3b50e47`](https://github.com/jolars/panache/commit/3b50e47a2ccbae75974ab1926a24825b4c4f1c18)), fixes [#590](https://github.com/jolars/panache/issues/590)
9
+
10
+ ## [0.34.1](https://github.com/jolars/panache/compare/panache-parser-v0.34.0...panache-parser-v0.34.1) (2026-10-26)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **parser:** reject trailing div attribute blocks ([`8f88555`](https://github.com/jolars/panache/commit/8f88555b61cc4edaaf2e2a8a74a6267953f47600)), refs [#584](https://github.com/jolars/panache/issues/584)
15
+ - **linter:** preserve html context and raw labels ([`1655cf0`](https://github.com/jolars/panache/commit/1655cf067c19b7dd4f8e6f8dde080e3e03275a63))
16
+ - **parser:** expose IDs in raw CommonMark HTML ([`b076c95`](https://github.com/jolars/panache/commit/b076c955aa49d1a4ff9bb32cbc132e83d57b9a04))
17
+
3
18
  ## [0.34.0](https://github.com/jolars/panache/compare/panache-parser-v0.33.0...panache-parser-v0.34.0) (2026-10-16)
4
19
 
5
20
  ### Features
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "panache-parser"
3
- version = "0.34.0"
3
+ version = "0.34.2"
4
4
  edition.workspace = true
5
5
  rust-version.workspace = true
6
6
  readme = "README.md"
@@ -44,6 +44,6 @@ serde = { version = "1.0.228", features = ["derive"] }
44
44
  serde_json = "1.0.150"
45
45
 
46
46
  [dev-dependencies]
47
- badness-parser = "=0.11.1"
47
+ badness-parser = "=0.11.2"
48
48
  insta = "1.47.2"
49
49
  toml = "1.1.2"
@@ -3542,9 +3542,6 @@ fn inlines_from(parent: &SyntaxNode) -> Vec<Inline> {
3542
3542
  NodeOrToken::Node(n) if n.kind() == SyntaxKind::LATEX_COMMAND => {
3543
3543
  emit_latex_command_with_absorb(&n, &mut iter, &mut out);
3544
3544
  }
3545
- NodeOrToken::Node(n) if n.kind() == SyntaxKind::CITATION => {
3546
- emit_citation_with_absorb(&n, &mut iter, &mut out);
3547
- }
3548
3545
  NodeOrToken::Node(n) => push_inline_node(&n, &mut out),
3549
3546
  }
3550
3547
  }
@@ -3554,62 +3551,6 @@ fn inlines_from(parent: &SyntaxNode) -> Vec<Inline> {
3554
3551
  out
3555
3552
  }
3556
3553
 
3557
- /// Pandoc absorbs `@key [locator]` into a single AuthorInText `Cite` with
3558
- /// the bracketed text becoming the citation's suffix. The parser emits two
3559
- /// separate nodes: `CITATION` (bare `@key`, no surrounding brackets) and an
3560
- /// adjacent `LINK` whose bracketed text has no destination. When the
3561
- /// CITATION is bare and we can verify both the next siblings (a single
3562
- /// `TEXT` whitespace token followed by a `LINK` node lacking
3563
- /// `LINK_DEST_START`), consume both and absorb the link's text as suffix.
3564
- fn emit_citation_with_absorb<I>(
3565
- node: &SyntaxNode,
3566
- iter: &mut std::iter::Peekable<I>,
3567
- out: &mut Vec<Inline>,
3568
- ) where
3569
- I: Iterator<Item = rowan::SyntaxElement<crate::syntax::PanacheLanguage>>,
3570
- {
3571
- let bracketed = node
3572
- .children_with_tokens()
3573
- .filter_map(|el| el.into_token())
3574
- .any(|t| t.kind() == SyntaxKind::LINK_START);
3575
- if bracketed {
3576
- render_citation_inline(node, out, None);
3577
- return;
3578
- }
3579
- let next_sibling_pair = node.next_sibling_or_token().and_then(|el1| {
3580
- let t = el1.as_token().cloned()?;
3581
- if t.kind() != SyntaxKind::TEXT || !t.text().starts_with(' ') {
3582
- return None;
3583
- }
3584
- let space_text = t.text().to_string();
3585
- let link_el = t.next_sibling_or_token()?;
3586
- let link = link_el.as_node().cloned()?;
3587
- if link.kind() != SyntaxKind::LINK && link.kind() != SyntaxKind::UNRESOLVED_REFERENCE {
3588
- return None;
3589
- }
3590
- let has_dest = link
3591
- .children_with_tokens()
3592
- .filter_map(|el| el.into_token())
3593
- .any(|tok| tok.kind() == SyntaxKind::LINK_DEST_START);
3594
- if has_dest {
3595
- return None;
3596
- }
3597
- let link_text = link
3598
- .children()
3599
- .find(|c| c.kind() == SyntaxKind::LINK_TEXT)
3600
- .map(|tt| tt.text().to_string())
3601
- .unwrap_or_default();
3602
- Some((space_text, link_text))
3603
- });
3604
- if let Some((_space_text, locator_text)) = next_sibling_pair {
3605
- iter.next();
3606
- iter.next();
3607
- render_citation_inline(node, out, Some(&locator_text));
3608
- } else {
3609
- render_citation_inline(node, out, None);
3610
- }
3611
- }
3612
-
3613
3554
  /// Pandoc's tex inline reader absorbs trailing horizontal whitespace into the
3614
3555
  /// raw command when (and only when) the command is `\letters` with no brace
3615
3556
  /// arguments — `\foo bar` becomes `RawInline tex "\\foo "` + `Str "bar"`,
@@ -3656,7 +3597,7 @@ fn push_inline_node(node: &SyntaxNode, out: &mut Vec<Inline>) {
3656
3597
  match node.kind() {
3657
3598
  SyntaxKind::LINK => render_link_inline(node, out),
3658
3599
  SyntaxKind::IMAGE_LINK => render_image_inline(node, out),
3659
- SyntaxKind::CITATION => render_citation_inline(node, out, None),
3600
+ SyntaxKind::CITATION => render_citation_inline(node, out),
3660
3601
  SyntaxKind::UNRESOLVED_REFERENCE => render_unresolved_reference_inline(node, out),
3661
3602
  _ => out.push(inline_from_node(node)),
3662
3603
  }
@@ -3755,14 +3696,9 @@ fn render_unresolved_reference_inline(node: &SyntaxNode, out: &mut Vec<Inline>)
3755
3696
  /// `Str "N"` (just the digits — surrounding parens come from adjacent
3756
3697
  /// source bytes which our coalesce pass merges back in). Otherwise we
3757
3698
  /// project the CITATION node as a proper `Cite [Citation, ...] [Inline,
3758
- /// ...]` per pandoc's citation reader. `extra_suffix_text` carries an
3759
- /// absorbed `[locator]` (pandoc absorbs `@key [locator]` into the Cite as
3760
- /// the citation's suffix); the literal text reflects the absorbed bytes.
3761
- fn render_citation_inline(
3762
- node: &SyntaxNode,
3763
- out: &mut Vec<Inline>,
3764
- extra_suffix_text: Option<&str>,
3765
- ) {
3699
+ /// ...]` per pandoc's citation reader, including any narrative suffix
3700
+ /// captured in the citation node.
3701
+ fn render_citation_inline(node: &SyntaxNode, out: &mut Vec<Inline>) {
3766
3702
  let first_key = node
3767
3703
  .children_with_tokens()
3768
3704
  .filter_map(|el| el.into_token())
@@ -3784,13 +3720,15 @@ fn render_citation_inline(
3784
3720
  let mut builders: Vec<CitationBuilder> = Vec::new();
3785
3721
  let mut current: Option<CitationBuilder> = None;
3786
3722
  let mut pending_prefix = String::new();
3723
+ let mut in_brackets = bracketed;
3787
3724
  for el in node.children_with_tokens() {
3788
3725
  let token = match el {
3789
3726
  NodeOrToken::Token(t) => t,
3790
3727
  _ => continue,
3791
3728
  };
3792
3729
  match token.kind() {
3793
- SyntaxKind::LINK_START | SyntaxKind::LINK_DEST => {}
3730
+ SyntaxKind::LINK_START | SyntaxKind::LINK_DEST | SyntaxKind::CITATION_SUFFIX_END => {}
3731
+ SyntaxKind::CITATION_SUFFIX_START => in_brackets = true,
3794
3732
  SyntaxKind::CITATION_BRACE_OPEN | SyntaxKind::CITATION_BRACE_CLOSE => {}
3795
3733
  SyntaxKind::CITATION_MARKER => {
3796
3734
  if let Some(c) = current.take() {
@@ -3798,7 +3736,7 @@ fn render_citation_inline(
3798
3736
  }
3799
3737
  let mode = if token.text() == "-@" {
3800
3738
  CitationMode::SuppressAuthor
3801
- } else if bracketed {
3739
+ } else if in_brackets {
3802
3740
  CitationMode::NormalCitation
3803
3741
  } else {
3804
3742
  CitationMode::AuthorInText
@@ -3832,15 +3770,6 @@ fn render_citation_inline(
3832
3770
  builders.push(c);
3833
3771
  }
3834
3772
 
3835
- if let Some(extra) = extra_suffix_text
3836
- && let Some(last) = builders.last_mut()
3837
- {
3838
- if !last.suffix_raw.is_empty() && !extra.starts_with(' ') {
3839
- last.suffix_raw.push(' ');
3840
- }
3841
- last.suffix_raw.push_str(extra);
3842
- }
3843
-
3844
3773
  let note_offset: u32 = node.text_range().start().into();
3845
3774
  let note_num = REFS_CTX
3846
3775
  .with(|c| {
@@ -3856,12 +3785,19 @@ fn render_citation_inline(
3856
3785
  .map(|b| b.into_citation(note_num))
3857
3786
  .collect();
3858
3787
 
3859
- let mut literal = node.text().to_string();
3860
- if let Some(extra) = extra_suffix_text {
3861
- literal.push(' ');
3862
- literal.push('[');
3863
- literal.push_str(extra);
3864
- literal.push(']');
3788
+ let mut literal = String::new();
3789
+ for token in node.children_with_tokens().filter_map(|el| el.into_token()) {
3790
+ match token.kind() {
3791
+ SyntaxKind::LINE_PREFIX => {}
3792
+ SyntaxKind::CITATION_SUFFIX_START => {
3793
+ if !literal.ends_with(char::is_whitespace) {
3794
+ literal.push(' ');
3795
+ }
3796
+ literal.push('[');
3797
+ }
3798
+ SyntaxKind::CITATION_MARKER if !bracketed && literal.is_empty() => literal.push('@'),
3799
+ _ => literal.push_str(token.text()),
3800
+ }
3865
3801
  }
3866
3802
  let text_inlines = literal_inlines(&literal);
3867
3803
 
@@ -5492,6 +5428,23 @@ mod tests {
5492
5428
  serde_json::from_str(&s).expect("to_pandoc_json must emit valid JSON")
5493
5429
  }
5494
5430
 
5431
+ #[test]
5432
+ fn narrative_citation_projects_suffix_and_preserves_the_following_reference() {
5433
+ let output = parse_to_json("@a\n[p. 4; @b] and [missing]");
5434
+ let inlines = &output["blocks"][0]["c"];
5435
+ let citations = &inlines[0]["c"][0];
5436
+ assert_eq!(citations[0]["citationId"], "a");
5437
+ assert_eq!(citations[0]["citationMode"]["t"], "AuthorInText");
5438
+ assert_eq!(
5439
+ citations[0]["citationSuffix"],
5440
+ json!([{"t": "Str", "c": "p.\u{a0}4"}])
5441
+ );
5442
+ assert_eq!(citations[1]["citationId"], "b");
5443
+ assert_eq!(citations[1]["citationMode"]["t"], "NormalCitation");
5444
+ assert_eq!(inlines[0]["c"][1][1]["t"], "SoftBreak");
5445
+ assert_eq!(inlines[4], json!({"t": "Str", "c": "[missing]"}));
5446
+ }
5447
+
5495
5448
  fn pandoc_options() -> crate::options::ParserOptions {
5496
5449
  flavor_options(crate::options::Flavor::Pandoc)
5497
5450
  }
@@ -2208,15 +2208,7 @@ impl BlockParser for FencedDivOpenParser {
2208
2208
 
2209
2209
  emit_div_info_node(builder, &div_fence.attributes);
2210
2210
 
2211
- let after_attrs = if div_fence.attributes.starts_with('{') {
2212
- if let Some(close_idx) = content_after_space.find('}') {
2213
- &content_after_space[close_idx + 1..]
2214
- } else {
2215
- ""
2216
- }
2217
- } else {
2218
- &content_after_space[div_fence.attributes.len()..]
2219
- };
2211
+ let after_attrs = &content_after_space[div_fence.attributes.len()..];
2220
2212
 
2221
2213
  if !after_attrs.is_empty() {
2222
2214
  let suffix_trimmed = after_attrs.trim_start();