pdfmd-cli 3.29.8__tar.gz → 3.29.24__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 (244) hide show
  1. {pdfmd_cli-3.29.8/pdfmd_cli.egg-info → pdfmd_cli-3.29.24}/PKG-INFO +100 -1
  2. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/README.md +99 -0
  3. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd.py +342 -5
  4. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24/pdfmd_cli.egg-info}/PKG-INFO +100 -1
  5. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/SOURCES.txt +14 -0
  6. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_help/__init__.py +1 -1
  7. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_images/remote.py +1 -1
  8. pdfmd_cli-3.29.24/pdfmd_lua/cover.lua +53 -0
  9. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/csv_table.lua +26 -1
  10. pdfmd_cli-3.29.24/pdfmd_lua/markup.lua +692 -0
  11. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_setup/inventory.py +4 -1
  12. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_setup/registry.py +20 -1
  13. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_tables/convert.py +6 -0
  14. pdfmd_cli-3.29.24/pdfmd_tables/sheets.py +130 -0
  15. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_calibre.py +4 -2
  16. pdfmd_cli-3.29.24/tests/test_cover.py +131 -0
  17. pdfmd_cli-3.29.24/tests/test_folder_settings.py +132 -0
  18. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_install_calibre.py +2 -3
  19. pdfmd_cli-3.29.24/tests/test_markup_appendix.py +62 -0
  20. pdfmd_cli-3.29.24/tests/test_markup_callouts.py +201 -0
  21. pdfmd_cli-3.29.24/tests/test_markup_center.py +103 -0
  22. pdfmd_cli-3.29.24/tests/test_markup_highlight.py +95 -0
  23. pdfmd_cli-3.29.24/tests/test_markup_keep.py +82 -0
  24. pdfmd_cli-3.29.24/tests/test_markup_landscape.py +103 -0
  25. pdfmd_cli-3.29.24/tests/test_markup_toc.py +108 -0
  26. pdfmd_cli-3.29.24/tests/test_show_comments.py +142 -0
  27. pdfmd_cli-3.29.24/tests/test_spreadsheets.py +137 -0
  28. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/LICENSE +0 -0
  29. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_check/__init__.py +0 -0
  30. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_check/lint.py +0 -0
  31. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_chem/__init__.py +0 -0
  32. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_chem/__main__.py +0 -0
  33. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_chem/batch.py +0 -0
  34. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_chem/render.py +0 -0
  35. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_chem/siunitx.py +0 -0
  36. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/dependency_links.txt +0 -0
  37. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/entry_points.txt +0 -0
  38. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/requires.txt +0 -0
  39. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/top_level.txt +0 -0
  40. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_css/__init__.py +0 -0
  41. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_direct/__init__.py +0 -0
  42. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_direct/defaults.py +0 -0
  43. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_direct/html.py +0 -0
  44. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_direct/typst.py +0 -0
  45. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_edit/__init__.py +0 -0
  46. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_flat/__init__.py +0 -0
  47. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_flat/asciify.py +0 -0
  48. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_flat/keep.py +0 -0
  49. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_history/__init__.py +0 -0
  50. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_history/git.py +0 -0
  51. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_history/hst.py +0 -0
  52. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_history/versions.py +0 -0
  53. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_images/__init__.py +0 -0
  54. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_images/scan.py +0 -0
  55. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_images/svg.py +0 -0
  56. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/LICENSE +0 -0
  57. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/VENDORED.md +0 -0
  58. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/__init__.py +0 -0
  59. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/_kerning_data.py +0 -0
  60. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/assets/fonts/DejaVuSans-LICENSE.txt +0 -0
  61. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/assets/fonts/DejaVuSans.ttf +0 -0
  62. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/ast.py +0 -0
  63. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/cidfont.py +0 -0
  64. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/embedded.py +0 -0
  65. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/embedded_metrics.py +0 -0
  66. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/emoji.py +0 -0
  67. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/emoji_font.py +0 -0
  68. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/fonts.py +0 -0
  69. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/html_filter.py +0 -0
  70. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/image_loader.py +0 -0
  71. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/layout.py +0 -0
  72. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/parser.py +0 -0
  73. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/pdf.py +0 -0
  74. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/py.typed +0 -0
  75. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/render.py +0 -0
  76. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/truetype.py +0 -0
  77. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_inkmd/url_filter.py +0 -0
  78. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_labels/__init__.py +0 -0
  79. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_labels/replay.py +0 -0
  80. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_labels/scan.py +0 -0
  81. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/__init__.py +0 -0
  82. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/ascii.lua +0 -0
  83. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/chem.lua +0 -0
  84. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/chem_client.lua +0 -0
  85. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/code.lua +0 -0
  86. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/code_wrap.tex +0 -0
  87. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/diagram.lua +0 -0
  88. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/ebook.lua +0 -0
  89. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/ebook_input.lua +0 -0
  90. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/flat.lua +0 -0
  91. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/graphicx.tex +0 -0
  92. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/graphviz.cjs +0 -0
  93. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/images.lua +0 -0
  94. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/katex.cjs +0 -0
  95. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/mathjax.cjs +0 -0
  96. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/pagebreak.lua +0 -0
  97. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/pdf_images.lua +0 -0
  98. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/raw.lua +0 -0
  99. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/select.lua +0 -0
  100. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/table_width.lua +0 -0
  101. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/title_meta.lua +0 -0
  102. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/typst.lua +0 -0
  103. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_lua/weasyprint.lua +0 -0
  104. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_mhchem/LICENSE +0 -0
  105. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_mhchem/__init__.py +0 -0
  106. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_mhchem/parser.py +0 -0
  107. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/__init__.py +0 -0
  108. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/docx.py +0 -0
  109. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/docx_post.py +0 -0
  110. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/fonts.py +0 -0
  111. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/fragments.py +0 -0
  112. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/labels.py +0 -0
  113. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/odt.py +0 -0
  114. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/office.lua +0 -0
  115. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/properties.py +0 -0
  116. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/spec.py +0 -0
  117. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_office/units.py +0 -0
  118. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_raw/__init__.py +0 -0
  119. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_setup/__init__.py +0 -0
  120. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_setup/fancy.py +0 -0
  121. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_setup/plain.py +0 -0
  122. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_tables/__init__.py +0 -0
  123. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_tables/scan.py +0 -0
  124. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_tables/verify.py +0 -0
  125. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/__init__.py +0 -0
  126. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/__name__.md +0 -0
  127. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/description.txt +0 -0
  128. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/next.txt +0 -0
  129. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/refs.bib +0 -0
  130. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/__name__.md +0 -0
  131. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/description.txt +0 -0
  132. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/next.txt +0 -0
  133. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/10-introduction.md +0 -0
  134. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/20-methods.md +0 -0
  135. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/30-results.md +0 -0
  136. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/__name__.md +0 -0
  137. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/description.txt +0 -0
  138. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/next.txt +0 -0
  139. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/__name__.md +0 -0
  140. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/data.csv +0 -0
  141. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/description.txt +0 -0
  142. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/next.txt +0 -0
  143. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/__name__.md +0 -0
  144. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/description.txt +0 -0
  145. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/next.txt +0 -0
  146. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/__init__.py +0 -0
  147. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/_catalog.py +0 -0
  148. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/_scripts.py +0 -0
  149. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/_tessdata_catalog.py +0 -0
  150. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/colorfont.py +0 -0
  151. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/emoji.py +0 -0
  152. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/fonts.py +0 -0
  153. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/install.py +0 -0
  154. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/plan.py +0 -0
  155. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/scripts.py +0 -0
  156. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/tessdata.py +0 -0
  157. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pdfmd_unicode/translit.py +0 -0
  158. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/pyproject.toml +0 -0
  159. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/setup.cfg +0 -0
  160. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_api.py +0 -0
  161. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_apple_emoji.py +0 -0
  162. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_ascii.py +0 -0
  163. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_attach.py +0 -0
  164. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_attach_format.py +0 -0
  165. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_autolog.py +0 -0
  166. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_bopen.py +0 -0
  167. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_browser_engine.py +0 -0
  168. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_budget.py +0 -0
  169. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_build_record.py +0 -0
  170. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_cache_location.py +0 -0
  171. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_calibre_markdown.py +0 -0
  172. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_calibre_targets.py +0 -0
  173. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_check.py +0 -0
  174. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_check_source.py +0 -0
  175. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_chem.py +0 -0
  176. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_code_blocks.py +0 -0
  177. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_compat.py +0 -0
  178. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_completion.py +0 -0
  179. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_config.py +0 -0
  180. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_css.py +0 -0
  181. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_css_v2.py +0 -0
  182. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_csv_table.py +0 -0
  183. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_diagrams.py +0 -0
  184. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_direct.py +0 -0
  185. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_display_path.py +0 -0
  186. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_doctor.py +0 -0
  187. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_docx_tables.py +0 -0
  188. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_ebook_input.py +0 -0
  189. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_edit.py +0 -0
  190. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_edit_pdf.py +0 -0
  191. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_embedding.py +0 -0
  192. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_engine_chain.py +0 -0
  193. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_engine_filters.py +0 -0
  194. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_flat.py +0 -0
  195. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_header_includes.py +0 -0
  196. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_help.py +0 -0
  197. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_history.py +0 -0
  198. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_images.py +0 -0
  199. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_install_core_tex.py +0 -0
  200. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_install_diagram.py +0 -0
  201. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_install_ocr.py +0 -0
  202. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_install_python.py +0 -0
  203. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_jobs.py +0 -0
  204. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_katex_scale.py +0 -0
  205. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_keep_source.py +0 -0
  206. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_labels.py +0 -0
  207. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_latex_errors.py +0 -0
  208. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_lookup.py +0 -0
  209. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_lua_trust.py +0 -0
  210. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_markdown_features.py +0 -0
  211. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_mathfont.py +0 -0
  212. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_mathjax.py +0 -0
  213. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_mhchem.py +0 -0
  214. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_native.py +0 -0
  215. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_office.py +0 -0
  216. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_office_latex.py +0 -0
  217. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_old_python_syntax.py +0 -0
  218. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_package_helper.py +0 -0
  219. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_packaging.py +0 -0
  220. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_pagebreak.py +0 -0
  221. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_pan_tec.py +0 -0
  222. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_pdf_input.py +0 -0
  223. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_picture_cache_protocol.py +0 -0
  224. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_plot_cache.py +0 -0
  225. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_polish.py +0 -0
  226. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_presets.py +0 -0
  227. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_raw.py +0 -0
  228. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_rawcode.py +0 -0
  229. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_reader.py +0 -0
  230. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_remote_csl.py +0 -0
  231. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_sections.py +0 -0
  232. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_setup.py +0 -0
  233. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_soffice_parts.py +0 -0
  234. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_standalone_source.py +0 -0
  235. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_table_widths.py +0 -0
  236. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_tables.py +0 -0
  237. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_templates.py +0 -0
  238. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_tessdata.py +0 -0
  239. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_texpackages.py +0 -0
  240. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_text_input.py +0 -0
  241. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_translit.py +0 -0
  242. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_typst_input.py +0 -0
  243. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_unicode.py +0 -0
  244. {pdfmd_cli-3.29.8 → pdfmd_cli-3.29.24}/tests/test_versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pdfmd-cli
3
- Version: 3.29.8
3
+ Version: 3.29.24
4
4
  Summary: One command from Markdown to a good-looking PDF: a Pandoc wrapper with smart defaults, project-file discovery and a multi-engine fallback chain
5
5
  Author: Ali Perdekhan
6
6
  License-Expression: MIT AND Apache-2.0
@@ -1359,6 +1359,12 @@ Water,18.015,1.20
1359
1359
  `---`, `:--`, `:-:`, `--:` as in a pipe table; `align=` wins. If such a row is really data, say `separator="none"`.
1360
1360
  `widths="5,1,1"` sets relative widths, and a second row with unequal dashes does too. Without either, pdfmd picks
1361
1361
  widths that suit the contents.
1362
+ - **A spreadsheet** (v3.29) works as the file: `::: {.csv file="results.xlsx" sheet="Run 2"}` (`.xlsx`, `.xlsm`, `.xls`, `.ods`;
1363
+ `sheet=` is a name or a number counted from 1, the first sheet when it is left out). The sheet is read by `openpyxl` (xlsx and
1364
+ xlsm: the values the file stores, so a cell shown as `1.50` is `1.5`, a date is `2026-01-02`), else by `pandas`, else by
1365
+ LibreOffice (the sheet by number); none of them is a `WARN` that says what to install (`pip install openpyxl`). The converted
1366
+ CSV is kept in pdfmd's cache by the file's content, the attached source carries the spreadsheet itself, and
1367
+ `--expand-tables` reads it too.
1362
1368
  - The first row is the header unless you add `header="false"`.
1363
1369
  - Large files are capped at 10 rows × 7 columns, so a huge CSV can't
1364
1370
  silently fill 40 pages. A cut table keeps both ends: the first 7 rows, a row
@@ -1434,6 +1440,15 @@ article class, and never over a document that formats its headings itself: a `ti
1434
1440
  `\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
1435
1441
  (and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
1436
1442
 
1443
+ ### A cover: `cover`
1444
+
1445
+ `pdfmd-options: {cover: true}` puts the title block (title, subtitle, author, date) on a page of its own and starts the text
1446
+ on the next (v3.29): LaTeX's `titlepage` class option (for the article, report and book classes and KOMA's; another class is
1447
+ left alone), and a page break after the title block of an HTML-family PDF (WeasyPrint, a browser, Calibre) or an HTML page.
1448
+ `cover: picture.png` (relative to the document) puts that picture on the first page of such a PDF, before the title, and is the
1449
+ cover of an EPUB, so of the Kindle book Calibre makes from it (Pandoc's own `cover-image:` does the same for an EPUB). A
1450
+ Word, OpenDocument or Typst file says once that the key was not applied. Off by default: the title block stays on page 1.
1451
+
1437
1452
  ### Code: wrapping and line numbers
1438
1453
 
1439
1454
  With a LaTeX engine a long line of code wraps at the margin instead of running off the page (a long path or option list
@@ -1574,6 +1589,79 @@ It is off unless asked (the document, a metadata file, or `pdfmd --setup` under
1574
1589
  [KIND ...]` and `--no-pagebreak` decide for one run. A spelling already in the output's own language stays as written,
1575
1590
  and slides leave a break out with a note. The built-in renderer (no Pandoc) reads the comment and TeX spellings anyway.
1576
1591
 
1592
+ **Callouts in every format** (v3.29, the first kind of *universal markup* after page breaks). GitHub's and Obsidian's
1593
+ `> [!NOTE]`, a fenced `::: note` and Quarto's `::: callout-tip` are a block quote or a div to Pandoc, and print as plain text.
1594
+ Ask for them and each becomes a box of the writer's own: LaTeX a `tcolorbox` (a plain indented quote when that package is not
1595
+ installed), Typst a tinted block, HTML, EPUB and the HTML engines' PDFs a `div.callout` with its style, every other writer
1596
+ (Word, OpenDocument, Markdown ...) a block quote with a bold title:
1597
+
1598
+ ```yaml
1599
+ pdfmd-options:
1600
+ markup: callouts # or: markup: true (every kind there is)
1601
+ ```
1602
+
1603
+ ```markdown
1604
+ > [!warning] Mind the gap
1605
+ > The title is the rest of the first line, the body the lines after it.
1606
+
1607
+ ::: {.tip title="Another way"}
1608
+ A fenced div takes `note`, `tip`, `important`, `warning` or `caution` as its class, `title=` for the title.
1609
+ :::
1610
+ ```
1611
+
1612
+ The five kinds are GitHub's (`note`, `tip`, `important`, `warning`, `caution`); Obsidian's others map to them (`info`, `todo`,
1613
+ `example`, `abstract` to note; `success`, `check`, `hint` to tip; `question`, `help`, `faq` to important; `failure`, `danger`,
1614
+ `error`, `bug` to caution; `attention` to warning), and an unknown name is a note titled with it. A fold marker (`[!tip]-`) is
1615
+ dropped. Off unless asked (the document, a metadata file, or `pdfmd --setup` under *Universal markup*); `--markup [KIND ...]` and
1616
+ `--no-markup` decide for one run. The built-in renderer (no Pandoc) does not read it yet, and there is no Word shaded box yet.
1617
+
1618
+ **A table of contents where you put it** (v3.29, `markup: toc`). `[TOC]`, `[[_TOC_]]` and `<!-- toc -->` alone in a paragraph, or
1619
+ a raw `\tableofcontents` for a writer that is not LaTeX, become the contents at that place: LaTeX's `\tableofcontents` (filled in
1620
+ one build, with the page numbers), Typst's `#outline()`, a Word TOC field (Word offers to update it when the file is opened) and,
1621
+ for every other writer (HTML, EPUB, Markdown, OpenDocument ...), a nested list of links to the headings down to level 3, with a
1622
+ bold "Contents" above it. `markup: [callouts, toc]` or `markup: true` for both; `--markup toc` for one run. A marker inside a
1623
+ sentence is text.
1624
+
1625
+ **Centred text** (v3.29, `markup: center`). `<center>` ... `</center>` around blocks (the closing tag in its own paragraph),
1626
+ `<div align="center">`, `<div style="text-align: center">`, a fenced `::: center` and, for writers that are not LaTeX, a raw
1627
+ `\begin{center}` ... `\end{center}` all centre what they hold: LaTeX's `center` environment, Typst's `#align(center)[...]`, a
1628
+ `text-align` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text as it is and say so once (no
1629
+ centring for a block there yet). `markup: [callouts, toc, center]` or `true` for all; `--markup center` for one run.
1630
+
1631
+ **Highlighted text** (v3.29, `markup: highlight`). `==marked text==` (across several words, with emphasis inside, over a line
1632
+ break) is highlighted: LaTeX with `soul`'s `\hl` in a pale yellow (plain text when `soul` is not installed), Typst with
1633
+ `#highlight[...]`, HTML, EPUB and `--to gfm` with `<mark>`; Pandoc's own Markdown output keeps `==...==`, and Word and OpenDocument
1634
+ keep the text and say once that it is not highlighted. A lone `==` or one inside code stays as written; a closing `==` followed by
1635
+ punctuation (`==end==.`) works. `markup: [callouts, toc, center, highlight]` or `true` for all; `--markup highlight` for one run.
1636
+
1637
+ **Blocks kept on one page** (v3.29, `markup: keep`). A fenced `::: keep` (also `nobreak`, `keep-together`), a div with
1638
+ `style="break-inside: avoid"` and, for writers that are not LaTeX, a raw `\begin{samepage}` ... `\end{samepage}` hold what they
1639
+ contain on one page where it fits: LaTeX's `samepage` environment, Typst's `#block(breakable: false)[...]`, a `break-inside:
1640
+ avoid` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text and say once that it is not held.
1641
+ `--markup keep` for one run.
1642
+
1643
+ **Landscape pages** (v3.29, `markup: landscape`). A fenced `::: landscape`, a div with `style="page: landscape"` and, for writers
1644
+ that are not LaTeX, a raw `\begin{landscape}` ... `\end{landscape}` put what they hold on pages turned sideways, the document
1645
+ going back to portrait after it: LaTeX with `pdflscape` (the page is rotated in the PDF; `lscape`, or no turning, when it is not
1646
+ installed), Typst with `#page(flipped: true)[...]`, WeasyPrint and the browsers with a named page (`@page landscape`: the browsers
1647
+ get the document's paper turned; WeasyPrint's is its own A4 unless your own `@page landscape` says otherwise). Calibre's PDF cannot
1648
+ name page types, and Word and OpenDocument have no sections made from here: they keep the text and say once that no landscape page
1649
+ was made. `--markup landscape` for one run.
1650
+
1651
+ **Where the appendix starts** (v3.29, `markup: appendix`). A raw `\appendix`, `<!-- appendix -->` or a heading with the class
1652
+ `{.appendix}` marks the start: the sections after it are lettered (A, B, A.1) in LaTeX (`\appendix`) and Typst (a heading
1653
+ numbering of letters and a counter reset). It matters for a document that numbers its sections (`--number-sections`); without
1654
+ numbers Typst gets nothing and LaTeX's `\appendix` changes nothing visible. Other writers keep their own numbering and say once
1655
+ that the lettering is not made.
1656
+
1657
+ **Showing the comments of the text** (v3.29, `show-comments`). An `<!-- HTML comment -->` is invisible in every output. With
1658
+ `pdfmd-options: {show-comments: true}` (or `--show-comments` for one run, `--no-show-comments` to switch it off; also a row in
1659
+ `pdfmd --setup`) each one is shown: a box labelled *Comment* in LaTeX, Typst, HTML, EPUB and the HTML engines' PDFs, a real Word
1660
+ comment in a `.docx` (anchored on the paragraph after it, so Word's review pane lists them), `[comment: ...]` in italics for one
1661
+ inside a paragraph. The Markdown family (`--to gfm`, `markdown`) keeps the comment as it is; OpenDocument and PowerPoint drop
1662
+ it, with a note once. pdfmd's own markers stay invisible (`<!-- pdfmd: ... -->`, `<!-- pagebreak -->`, `<!-- toc -->`,
1663
+ `<!-- appendix -->`), and so does an empty comment. It is off unless asked and is not one of the kinds `markup: true` turns on.
1664
+
1577
1665
  **PDF images in HTML.** A browser does not show a PDF in `<img>`, an SVG it does. For an HTML build (a web page, an
1578
1666
  EPUB, a PDF through WeasyPrint) every image that is a PDF, `![fig](plot.pdf)` or `<img src="plot.pdf">`, is converted to
1579
1667
  an SVG with poppler's `pdftocairo` (or `mutool`, `pdf2svg`, `inkscape`) and stays vector; the first page is used and the
@@ -1831,6 +1919,17 @@ document or its metadata files say (the command line beats all of them);
1831
1919
  `translit:` is the romanization packs of the name lookup. `PDFMD_CONFIG=other.yaml`
1832
1920
  uses another file, `PDFMD_CONFIG=` (empty) none.
1833
1921
 
1922
+ **Settings for a folder** (v3.29): a `.pdfmd/config.yaml` in a document's folder, or in any folder above it, has the same
1923
+ `options:` for everything under it. The order, strongest first: the command line, the document's `pdfmd-options`, its metadata
1924
+ files, the folder settings (the nearest folder first, then the ones above it), your global `config.yaml`, pdfmd's own defaults.
1925
+ `inherit: false` in a folder's file stops the walk upward there. A folder cannot set what belongs to this computer (`translit`,
1926
+ `setup-ui`, `disabled`): they are ignored with a `WARN`. A mapping such as `stamp:` or `backup:` in a folder's file stays off
1927
+ until it says `enabled: true`, as in the global file. A build lists the folder files it used on its `FOUND` line
1928
+ (`--verbose`: `AUTO SETTINGS`). A folder's options cannot name code (a Lua filter or a preamble is read from the document's own
1929
+ front matter only), a `.pdfmd/config.yaml` owned by another user (a shared `/tmp`) is not read, and a path in it (`css: house.css`)
1930
+ is relative to the document, as everywhere, not to the folder file. Writing the file from `pdfmd --setup DIR`, and carrying it in
1931
+ an attached source, are not done yet.
1932
+
1834
1933
  ```yaml
1835
1934
  translit: [greek, hangul]
1836
1935
  options:
@@ -1324,6 +1324,12 @@ Water,18.015,1.20
1324
1324
  `---`, `:--`, `:-:`, `--:` as in a pipe table; `align=` wins. If such a row is really data, say `separator="none"`.
1325
1325
  `widths="5,1,1"` sets relative widths, and a second row with unequal dashes does too. Without either, pdfmd picks
1326
1326
  widths that suit the contents.
1327
+ - **A spreadsheet** (v3.29) works as the file: `::: {.csv file="results.xlsx" sheet="Run 2"}` (`.xlsx`, `.xlsm`, `.xls`, `.ods`;
1328
+ `sheet=` is a name or a number counted from 1, the first sheet when it is left out). The sheet is read by `openpyxl` (xlsx and
1329
+ xlsm: the values the file stores, so a cell shown as `1.50` is `1.5`, a date is `2026-01-02`), else by `pandas`, else by
1330
+ LibreOffice (the sheet by number); none of them is a `WARN` that says what to install (`pip install openpyxl`). The converted
1331
+ CSV is kept in pdfmd's cache by the file's content, the attached source carries the spreadsheet itself, and
1332
+ `--expand-tables` reads it too.
1327
1333
  - The first row is the header unless you add `header="false"`.
1328
1334
  - Large files are capped at 10 rows × 7 columns, so a huge CSV can't
1329
1335
  silently fill 40 pages. A cut table keeps both ends: the first 7 rows, a row
@@ -1399,6 +1405,15 @@ article class, and never over a document that formats its headings itself: a `ti
1399
1405
  `\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
1400
1406
  (and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
1401
1407
 
1408
+ ### A cover: `cover`
1409
+
1410
+ `pdfmd-options: {cover: true}` puts the title block (title, subtitle, author, date) on a page of its own and starts the text
1411
+ on the next (v3.29): LaTeX's `titlepage` class option (for the article, report and book classes and KOMA's; another class is
1412
+ left alone), and a page break after the title block of an HTML-family PDF (WeasyPrint, a browser, Calibre) or an HTML page.
1413
+ `cover: picture.png` (relative to the document) puts that picture on the first page of such a PDF, before the title, and is the
1414
+ cover of an EPUB, so of the Kindle book Calibre makes from it (Pandoc's own `cover-image:` does the same for an EPUB). A
1415
+ Word, OpenDocument or Typst file says once that the key was not applied. Off by default: the title block stays on page 1.
1416
+
1402
1417
  ### Code: wrapping and line numbers
1403
1418
 
1404
1419
  With a LaTeX engine a long line of code wraps at the margin instead of running off the page (a long path or option list
@@ -1539,6 +1554,79 @@ It is off unless asked (the document, a metadata file, or `pdfmd --setup` under
1539
1554
  [KIND ...]` and `--no-pagebreak` decide for one run. A spelling already in the output's own language stays as written,
1540
1555
  and slides leave a break out with a note. The built-in renderer (no Pandoc) reads the comment and TeX spellings anyway.
1541
1556
 
1557
+ **Callouts in every format** (v3.29, the first kind of *universal markup* after page breaks). GitHub's and Obsidian's
1558
+ `> [!NOTE]`, a fenced `::: note` and Quarto's `::: callout-tip` are a block quote or a div to Pandoc, and print as plain text.
1559
+ Ask for them and each becomes a box of the writer's own: LaTeX a `tcolorbox` (a plain indented quote when that package is not
1560
+ installed), Typst a tinted block, HTML, EPUB and the HTML engines' PDFs a `div.callout` with its style, every other writer
1561
+ (Word, OpenDocument, Markdown ...) a block quote with a bold title:
1562
+
1563
+ ```yaml
1564
+ pdfmd-options:
1565
+ markup: callouts # or: markup: true (every kind there is)
1566
+ ```
1567
+
1568
+ ```markdown
1569
+ > [!warning] Mind the gap
1570
+ > The title is the rest of the first line, the body the lines after it.
1571
+
1572
+ ::: {.tip title="Another way"}
1573
+ A fenced div takes `note`, `tip`, `important`, `warning` or `caution` as its class, `title=` for the title.
1574
+ :::
1575
+ ```
1576
+
1577
+ The five kinds are GitHub's (`note`, `tip`, `important`, `warning`, `caution`); Obsidian's others map to them (`info`, `todo`,
1578
+ `example`, `abstract` to note; `success`, `check`, `hint` to tip; `question`, `help`, `faq` to important; `failure`, `danger`,
1579
+ `error`, `bug` to caution; `attention` to warning), and an unknown name is a note titled with it. A fold marker (`[!tip]-`) is
1580
+ dropped. Off unless asked (the document, a metadata file, or `pdfmd --setup` under *Universal markup*); `--markup [KIND ...]` and
1581
+ `--no-markup` decide for one run. The built-in renderer (no Pandoc) does not read it yet, and there is no Word shaded box yet.
1582
+
1583
+ **A table of contents where you put it** (v3.29, `markup: toc`). `[TOC]`, `[[_TOC_]]` and `<!-- toc -->` alone in a paragraph, or
1584
+ a raw `\tableofcontents` for a writer that is not LaTeX, become the contents at that place: LaTeX's `\tableofcontents` (filled in
1585
+ one build, with the page numbers), Typst's `#outline()`, a Word TOC field (Word offers to update it when the file is opened) and,
1586
+ for every other writer (HTML, EPUB, Markdown, OpenDocument ...), a nested list of links to the headings down to level 3, with a
1587
+ bold "Contents" above it. `markup: [callouts, toc]` or `markup: true` for both; `--markup toc` for one run. A marker inside a
1588
+ sentence is text.
1589
+
1590
+ **Centred text** (v3.29, `markup: center`). `<center>` ... `</center>` around blocks (the closing tag in its own paragraph),
1591
+ `<div align="center">`, `<div style="text-align: center">`, a fenced `::: center` and, for writers that are not LaTeX, a raw
1592
+ `\begin{center}` ... `\end{center}` all centre what they hold: LaTeX's `center` environment, Typst's `#align(center)[...]`, a
1593
+ `text-align` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text as it is and say so once (no
1594
+ centring for a block there yet). `markup: [callouts, toc, center]` or `true` for all; `--markup center` for one run.
1595
+
1596
+ **Highlighted text** (v3.29, `markup: highlight`). `==marked text==` (across several words, with emphasis inside, over a line
1597
+ break) is highlighted: LaTeX with `soul`'s `\hl` in a pale yellow (plain text when `soul` is not installed), Typst with
1598
+ `#highlight[...]`, HTML, EPUB and `--to gfm` with `<mark>`; Pandoc's own Markdown output keeps `==...==`, and Word and OpenDocument
1599
+ keep the text and say once that it is not highlighted. A lone `==` or one inside code stays as written; a closing `==` followed by
1600
+ punctuation (`==end==.`) works. `markup: [callouts, toc, center, highlight]` or `true` for all; `--markup highlight` for one run.
1601
+
1602
+ **Blocks kept on one page** (v3.29, `markup: keep`). A fenced `::: keep` (also `nobreak`, `keep-together`), a div with
1603
+ `style="break-inside: avoid"` and, for writers that are not LaTeX, a raw `\begin{samepage}` ... `\end{samepage}` hold what they
1604
+ contain on one page where it fits: LaTeX's `samepage` environment, Typst's `#block(breakable: false)[...]`, a `break-inside:
1605
+ avoid` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text and say once that it is not held.
1606
+ `--markup keep` for one run.
1607
+
1608
+ **Landscape pages** (v3.29, `markup: landscape`). A fenced `::: landscape`, a div with `style="page: landscape"` and, for writers
1609
+ that are not LaTeX, a raw `\begin{landscape}` ... `\end{landscape}` put what they hold on pages turned sideways, the document
1610
+ going back to portrait after it: LaTeX with `pdflscape` (the page is rotated in the PDF; `lscape`, or no turning, when it is not
1611
+ installed), Typst with `#page(flipped: true)[...]`, WeasyPrint and the browsers with a named page (`@page landscape`: the browsers
1612
+ get the document's paper turned; WeasyPrint's is its own A4 unless your own `@page landscape` says otherwise). Calibre's PDF cannot
1613
+ name page types, and Word and OpenDocument have no sections made from here: they keep the text and say once that no landscape page
1614
+ was made. `--markup landscape` for one run.
1615
+
1616
+ **Where the appendix starts** (v3.29, `markup: appendix`). A raw `\appendix`, `<!-- appendix -->` or a heading with the class
1617
+ `{.appendix}` marks the start: the sections after it are lettered (A, B, A.1) in LaTeX (`\appendix`) and Typst (a heading
1618
+ numbering of letters and a counter reset). It matters for a document that numbers its sections (`--number-sections`); without
1619
+ numbers Typst gets nothing and LaTeX's `\appendix` changes nothing visible. Other writers keep their own numbering and say once
1620
+ that the lettering is not made.
1621
+
1622
+ **Showing the comments of the text** (v3.29, `show-comments`). An `<!-- HTML comment -->` is invisible in every output. With
1623
+ `pdfmd-options: {show-comments: true}` (or `--show-comments` for one run, `--no-show-comments` to switch it off; also a row in
1624
+ `pdfmd --setup`) each one is shown: a box labelled *Comment* in LaTeX, Typst, HTML, EPUB and the HTML engines' PDFs, a real Word
1625
+ comment in a `.docx` (anchored on the paragraph after it, so Word's review pane lists them), `[comment: ...]` in italics for one
1626
+ inside a paragraph. The Markdown family (`--to gfm`, `markdown`) keeps the comment as it is; OpenDocument and PowerPoint drop
1627
+ it, with a note once. pdfmd's own markers stay invisible (`<!-- pdfmd: ... -->`, `<!-- pagebreak -->`, `<!-- toc -->`,
1628
+ `<!-- appendix -->`), and so does an empty comment. It is off unless asked and is not one of the kinds `markup: true` turns on.
1629
+
1542
1630
  **PDF images in HTML.** A browser does not show a PDF in `<img>`, an SVG it does. For an HTML build (a web page, an
1543
1631
  EPUB, a PDF through WeasyPrint) every image that is a PDF, `![fig](plot.pdf)` or `<img src="plot.pdf">`, is converted to
1544
1632
  an SVG with poppler's `pdftocairo` (or `mutool`, `pdf2svg`, `inkscape`) and stays vector; the first page is used and the
@@ -1796,6 +1884,17 @@ document or its metadata files say (the command line beats all of them);
1796
1884
  `translit:` is the romanization packs of the name lookup. `PDFMD_CONFIG=other.yaml`
1797
1885
  uses another file, `PDFMD_CONFIG=` (empty) none.
1798
1886
 
1887
+ **Settings for a folder** (v3.29): a `.pdfmd/config.yaml` in a document's folder, or in any folder above it, has the same
1888
+ `options:` for everything under it. The order, strongest first: the command line, the document's `pdfmd-options`, its metadata
1889
+ files, the folder settings (the nearest folder first, then the ones above it), your global `config.yaml`, pdfmd's own defaults.
1890
+ `inherit: false` in a folder's file stops the walk upward there. A folder cannot set what belongs to this computer (`translit`,
1891
+ `setup-ui`, `disabled`): they are ignored with a `WARN`. A mapping such as `stamp:` or `backup:` in a folder's file stays off
1892
+ until it says `enabled: true`, as in the global file. A build lists the folder files it used on its `FOUND` line
1893
+ (`--verbose`: `AUTO SETTINGS`). A folder's options cannot name code (a Lua filter or a preamble is read from the document's own
1894
+ front matter only), a `.pdfmd/config.yaml` owned by another user (a shared `/tmp`) is not read, and a path in it (`css: house.css`)
1895
+ is relative to the document, as everywhere, not to the folder file. Writing the file from `pdfmd --setup DIR`, and carrying it in
1896
+ an attached source, are not done yet.
1897
+
1799
1898
  ```yaml
1800
1899
  translit: [greek, hangul]
1801
1900
  options: