texsmith 0.2.1.dev0__tar.gz → 0.2.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 (501) hide show
  1. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.github/workflows/ci.yml +22 -10
  2. texsmith-0.2.2/.wiki/1919_eclipse_positive.jpg +0 -0
  3. texsmith-0.2.2/.wiki/Albert_Einstein_and_Charlie_Chaplin_City_Lights_premiere_1931.jpg +0 -0
  4. texsmith-0.2.2/.wiki/Albert_Einstein_and_his_wife_Mileva_Maric.jpg +0 -0
  5. texsmith-0.2.2/.wiki/Albert_Einstein_as_a_child.jpg +0 -0
  6. texsmith-0.2.2/.wiki/Einstein-Oslofjord_cropped.jpg +0 -0
  7. texsmith-0.2.2/.wiki/README.md +20 -0
  8. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/CHANGELOG.md +20 -13
  9. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/PKG-INFO +5 -2
  10. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/README.md +4 -1
  11. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/index.md +3 -0
  12. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/letters.md +12 -0
  13. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/supported.md +3 -2
  14. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/__init__.py +3 -6
  15. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_assets.py +12 -0
  16. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/inline.py +15 -2
  17. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/tectonic/__init__.py +25 -1
  18. texsmith-0.2.2/src/texsmith/adapters/latex/partials/horizontal_rule.tex +1 -0
  19. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/tectonic.py +2 -2
  20. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/utils.py +22 -0
  21. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/strategies.py +39 -8
  22. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/core.py +6 -0
  23. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/models.py +1 -0
  24. texsmith-0.2.2/src/texsmith/core/http.py +57 -0
  25. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/coverage.py +2 -3
  26. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/downloader.py +4 -2
  27. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/fallback.py +32 -1
  28. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/ucharclasses.py +2 -2
  29. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/__init__.py +2 -2
  30. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/ts-fonts.jinja.sty +0 -5
  31. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/_options.py +10 -0
  32. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/render.py +20 -3
  33. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/presenter.py +18 -1
  34. texsmith-0.2.2/src/texsmith/version.py +16 -0
  35. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_blocks.py +1 -1
  36. texsmith-0.2.2/tests/test_version.py +17 -0
  37. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/uv.lock +47 -47
  38. texsmith-0.2.1.dev0/fonts-test.tex +0 -180
  39. texsmith-0.2.1.dev0/src/texsmith/adapters/latex/partials/horizontal_rule.tex +0 -1
  40. texsmith-0.2.1.dev0/test.md +0 -12
  41. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.editorconfig +0 -0
  42. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.gitignore +0 -0
  43. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.vscode/settings.json +0 -0
  44. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/AGENT.md +0 -0
  45. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/LICENSE.md +0 -0
  46. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/Makefile +0 -0
  47. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/.nav.yml +0 -0
  48. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/.nav.yml +0 -0
  49. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/author.md +0 -0
  50. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/contribute.md +0 -0
  51. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/config.md +0 -0
  52. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/glossary.md +0 -0
  53. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/index.md +0 -0
  54. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/plugins.md +0 -0
  55. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/tables.md +0 -0
  56. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/index.md +0 -0
  57. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/license.md +0 -0
  58. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/other-resources.md +0 -0
  59. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/release-notes.md +0 -0
  60. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/versioning.md +0 -0
  61. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/bibliography.md +0 -0
  62. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/cli.md +0 -0
  63. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/core.md +0 -0
  64. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/custom-transformers.md +0 -0
  65. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/handlers.md +0 -0
  66. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/high-level.md +0 -0
  67. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/index.md +0 -0
  68. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/latex.md +0 -0
  69. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/markdown.md +0 -0
  70. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/plugins.md +0 -0
  71. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/transformers.md +0 -0
  72. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/.nav.yml +0 -0
  73. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/drawio-viewer.js +0 -0
  74. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/README.md +0 -0
  75. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/cheese.bib +0 -0
  76. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/cheese.md +0 -0
  77. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/code.py +0 -0
  78. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/dialects.md +0 -0
  79. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/mozzarella.svg +0 -0
  80. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/js/auto-reload.js +0 -0
  81. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/mermaid.mmd +0 -0
  82. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/mermaid.svg +0 -0
  83. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/pipeline.png +0 -0
  84. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/standards.svg +0 -0
  85. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-anvil.svg +0 -0
  86. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-dark.svg +0 -0
  87. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-light.svg +0 -0
  88. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-logo.svg +0 -0
  89. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/workflow.drawio +0 -0
  90. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/bibliography.md +0 -0
  91. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/build.md +0 -0
  92. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/slots.md +0 -0
  93. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/templates.md +0 -0
  94. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/css/brand.css +0 -0
  95. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/css/extra.css +0 -0
  96. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/book.md +0 -0
  97. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/colorful.md +0 -0
  98. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/cooking.md +0 -0
  99. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/diagrams.md +0 -0
  100. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/index.md +0 -0
  101. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/languages.md +0 -0
  102. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/paper.md +0 -0
  103. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/pgcd.drawio +0 -0
  104. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/snippet-configs/letter.yml +0 -0
  105. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/snippets.md +0 -0
  106. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/texsmith.md +0 -0
  107. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/.nav.yml +0 -0
  108. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/extensions.md +0 -0
  109. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/.nav.yml +0 -0
  110. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/acronyms.md +0 -0
  111. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/bibliography.md +0 -0
  112. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/headings.md +0 -0
  113. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/listings.md +0 -0
  114. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/tags.md +0 -0
  115. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fonts.md +0 -0
  116. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/.nav.yml +0 -0
  117. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/geometry.md +0 -0
  118. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/glossary.md +0 -0
  119. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/index.md +0 -0
  120. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/typesetting.md +0 -0
  121. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/front-matter.md +0 -0
  122. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/getting-started.md +0 -0
  123. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/limitations.md +0 -0
  124. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/metadata.md +0 -0
  125. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/mkdocs.md +0 -0
  126. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/.nav.yml +0 -0
  127. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/engines.md +0 -0
  128. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/index.md +0 -0
  129. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/latex.md +0 -0
  130. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/pipeline.md +0 -0
  131. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/tex.md +0 -0
  132. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/tectonic.md +0 -0
  133. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/discovery.md +0 -0
  134. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/fragments.md +0 -0
  135. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/index.md +0 -0
  136. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/mermaid.md +0 -0
  137. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/partials.md +0 -0
  138. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/template-cookbook.md +0 -0
  139. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/troubleshooting.md +0 -0
  140. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/hooks/mkdocs_hooks.py +0 -0
  141. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/index.md +0 -0
  142. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/js/mathjax.js +0 -0
  143. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/abbr.md +0 -0
  144. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/admonitions.md +0 -0
  145. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/captions.md +0 -0
  146. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/code.md +0 -0
  147. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/deflists.md +0 -0
  148. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/extra.md +0 -0
  149. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/formatting.md +0 -0
  150. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/images.md +0 -0
  151. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/index.md +0 -0
  152. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/math.md +0 -0
  153. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/mermaid.md +0 -0
  154. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/notes.md +0 -0
  155. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/progressbar.md +0 -0
  156. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/references.md +0 -0
  157. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/smartypants.md +0 -0
  158. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/tables.md +0 -0
  159. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/wikilinks.md +0 -0
  160. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/texsmith-logo.pdf +0 -0
  161. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/mkdocs.yml +0 -0
  162. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/noxfile.py +0 -0
  163. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.editorconfig +0 -0
  164. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.gitignore +0 -0
  165. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.markdownlint.yaml +0 -0
  166. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/LICENSE.md +0 -0
  167. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/Makefile +0 -0
  168. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/README.md +0 -0
  169. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/about.md +0 -0
  170. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/images/latex-hummingbird.svg +0 -0
  171. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/index.md +0 -0
  172. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/hatch_build.py +0 -0
  173. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/mkdocs.yml +0 -0
  174. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/noxfile.py +0 -0
  175. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/pyproject.toml +0 -0
  176. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/src/mkdocs_plugin_texsmith/__init__.py +0 -0
  177. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/src/mkdocs_plugin_texsmith/plugin.py +0 -0
  178. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/tests/test_import.py +0 -0
  179. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/tests/test_plugin_config.py +0 -0
  180. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/uv.lock +0 -0
  181. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/pyproject.toml +0 -0
  182. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/pyrightconfig.json +0 -0
  183. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/scripts/ci/python_versions.py +0 -0
  184. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/scripts/refresh_cli_help.sh +0 -0
  185. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/__init__.py +0 -0
  186. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/docker.py +0 -0
  187. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/__init__.py +0 -0
  188. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_helpers.py +0 -0
  189. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_mermaid.py +0 -0
  190. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/admonitions.py +0 -0
  191. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/basic.py +0 -0
  192. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/blocks.py +0 -0
  193. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/code.py +0 -0
  194. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/links.py +0 -0
  195. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/media.py +0 -0
  196. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/__init__.py +0 -0
  197. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/__init__.py +0 -0
  198. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/__init__.py +0 -0
  199. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/log.py +0 -0
  200. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/runner.py +0 -0
  201. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/formatter.py +0 -0
  202. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/latexmk.py +0 -0
  203. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/acronym.tex +0 -0
  204. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/add.tex +0 -0
  205. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/addition.tex +0 -0
  206. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/blockquote.tex +0 -0
  207. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/callout.tex +0 -0
  208. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/choices.tex +0 -0
  209. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/citation.tex +0 -0
  210. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock.tex +0 -0
  211. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_listings.tex +0 -0
  212. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_pygments.tex +0 -0
  213. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_verbatim.tex +0 -0
  214. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeinline.tex +0 -0
  215. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeinlinett.tex +0 -0
  216. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/comment.tex +0 -0
  217. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/del.tex +0 -0
  218. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/deletion.tex +0 -0
  219. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/description_list.tex +0 -0
  220. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/enquote.tex +0 -0
  221. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/epigraph.tex +0 -0
  222. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/exercises_solutions.tex +0 -0
  223. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/figure.tex +0 -0
  224. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/figure_tcolorbox.tex +0 -0
  225. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/footnote.tex +0 -0
  226. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/glossary.tex +0 -0
  227. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/heading.tex +0 -0
  228. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/highlight.tex +0 -0
  229. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/href.tex +0 -0
  230. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/icon.tex +0 -0
  231. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/include.tex +0 -0
  232. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/index.tex +0 -0
  233. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/italic.tex +0 -0
  234. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/keystroke.tex +0 -0
  235. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/label.tex +0 -0
  236. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/list_acronyms.tex +0 -0
  237. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/list_glossary.tex +0 -0
  238. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/multicolumn.tex +0 -0
  239. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/ordered_list.tex +0 -0
  240. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/pagestyle.tex +0 -0
  241. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/ref.tex +0 -0
  242. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/regex.tex +0 -0
  243. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/smallcaps.tex +0 -0
  244. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/strikethrough.tex +0 -0
  245. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/strong.tex +0 -0
  246. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/subscript.tex +0 -0
  247. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/substitution.tex +0 -0
  248. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/superscript.tex +0 -0
  249. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/tabbed.tex +0 -0
  250. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/table.tex +0 -0
  251. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/underline.tex +0 -0
  252. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/unordered_list.tex +0 -0
  253. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/url.tex +0 -0
  254. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/pygments.py +0 -0
  255. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/pyxindy.py +0 -0
  256. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/renderer.py +0 -0
  257. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/xindy/latex.xdy +0 -0
  258. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/xindy/tex.xdy +0 -0
  259. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/markdown/__init__.py +0 -0
  260. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/__init__.py +0 -0
  261. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/material.py +0 -0
  262. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/snippet.py +0 -0
  263. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/__init__.py +0 -0
  264. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/base.py +0 -0
  265. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/utils.py +0 -0
  266. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/__init__.py +0 -0
  267. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/__init__.py +0 -0
  268. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/collection.py +0 -0
  269. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/doi.py +0 -0
  270. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/issues.py +0 -0
  271. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/parsing.py +0 -0
  272. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/callouts.py +0 -0
  273. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/config.py +0 -0
  274. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/context.py +0 -0
  275. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/__init__.py +0 -0
  276. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/_utils.py +0 -0
  277. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/debug.py +0 -0
  278. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/execution.py +0 -0
  279. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/inputs.py +0 -0
  280. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/pipeline.py +0 -0
  281. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/renderer.py +0 -0
  282. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/service.py +0 -0
  283. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/templates.py +0 -0
  284. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion_contexts.py +0 -0
  285. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/diagnostics.py +0 -0
  286. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/documents.py +0 -0
  287. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/exceptions.py +0 -0
  288. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/execution.py +0 -0
  289. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fonts/__init__.py +0 -0
  290. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fragments/__init__.py +0 -0
  291. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fragments/base.py +0 -0
  292. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/metadata.py +0 -0
  293. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/mustache.py +0 -0
  294. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/partials.py +0 -0
  295. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/rules.py +0 -0
  296. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/__init__.py +0 -0
  297. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/base.py +0 -0
  298. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/builtins.py +0 -0
  299. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/context_usage.py +0 -0
  300. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/loader.py +0 -0
  301. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/manifest.py +0 -0
  302. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/runtime.py +0 -0
  303. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/session.py +0 -0
  304. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/text.py +0 -0
  305. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/wrapper.py +0 -0
  306. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/user_dir.py +0 -0
  307. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/devtools.py +0 -0
  308. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/__init__.py +0 -0
  309. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/__init__.py +0 -0
  310. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/markdown.py +0 -0
  311. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/mkdocs_plugin.py +0 -0
  312. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/registry.py +0 -0
  313. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/renderer.py +0 -0
  314. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/templates/index.tex +0 -0
  315. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/latex_raw.py +0 -0
  316. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/latex_text.py +0 -0
  317. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/mermaid.py +0 -0
  318. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/missing_footnotes.py +0 -0
  319. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/multi_citations.py +0 -0
  320. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/__init__.py +0 -0
  321. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/markdown.py +0 -0
  322. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/renderer.py +0 -0
  323. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/smallcaps.py +0 -0
  324. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/__init__.py +0 -0
  325. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/markdown.py +0 -0
  326. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/renderer.py +0 -0
  327. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/specs.py +0 -0
  328. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/__init__.py +0 -0
  329. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/cache.py +0 -0
  330. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/constants.py +0 -0
  331. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/html_scripts.py +0 -0
  332. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/logging.py +0 -0
  333. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/pipeline.py +0 -0
  334. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/scripts.py +0 -0
  335. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/__init__.py +0 -0
  336. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/__init__.py +0 -0
  337. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/fragment.toml +0 -0
  338. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/ts-bibliography-backmatter.jinja.tex +0 -0
  339. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/ts-bibliography.jinja.tex +0 -0
  340. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/__init__.py +0 -0
  341. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/fragment.toml +0 -0
  342. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/ts-callouts.jinja.sty +0 -0
  343. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/__init__.py +0 -0
  344. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/fragment.toml +0 -0
  345. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/ts-code.jinja.sty +0 -0
  346. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/__init__.py +0 -0
  347. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/fragment.toml +0 -0
  348. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/ts-extra.jinja.tex +0 -0
  349. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/fragment.toml +0 -0
  350. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/__init__.py +0 -0
  351. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/fragment.toml +0 -0
  352. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/ts-frame.tex.jinja +0 -0
  353. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/__init__.py +0 -0
  354. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/fragment.toml +0 -0
  355. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/paper.py +0 -0
  356. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/ts_geometry.tex.jinja +0 -0
  357. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/__init__.py +0 -0
  358. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/fragment.toml +0 -0
  359. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/ts-glossary-backmatter.jinja.tex +0 -0
  360. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/ts-glossary.jinja.sty +0 -0
  361. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/__init__.py +0 -0
  362. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/fragment.toml +0 -0
  363. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/ts-index-backmatter.jinja.tex +0 -0
  364. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/ts-index.jinja.sty +0 -0
  365. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/__init__.py +0 -0
  366. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/fragment.toml +0 -0
  367. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/ts-keystrokes.jinja.sty +0 -0
  368. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/__init__.py +0 -0
  369. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/fragment.toml +0 -0
  370. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/ts-todolist.jinja.sty +0 -0
  371. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/__init__.py +0 -0
  372. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/fragment.toml +0 -0
  373. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/ts-typesetting.tex.jinja +0 -0
  374. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/index.py +0 -0
  375. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/plugins/__init__.py +0 -0
  376. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/progressbar.py +0 -0
  377. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/quotes.py +0 -0
  378. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/smart_dashes.py +0 -0
  379. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/__init__.py +0 -0
  380. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/README.md +0 -0
  381. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/__init__.py +0 -0
  382. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/manifest.toml +0 -0
  383. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/mermaid-config.json +0 -0
  384. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/template.tex +0 -0
  385. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/README.md +0 -0
  386. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/__init__.py +0 -0
  387. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/overrides/codeblock.tex +0 -0
  388. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/overrides/codeinline.tex +0 -0
  389. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/fixtoc.sty +0 -0
  390. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/manifest.toml +0 -0
  391. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/template.tex +0 -0
  392. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/common/__init__.py +0 -0
  393. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/common/latexmkrc +0 -0
  394. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/README.md +0 -0
  395. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/__init__.py +0 -0
  396. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/demo.md +0 -0
  397. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/fonts/modernline bold.otf +0 -0
  398. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/fonts/modernline.otf +0 -0
  399. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/manifest.toml +0 -0
  400. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/template/callouts.jinja.sty +0 -0
  401. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/template/template.tex +0 -0
  402. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/README.md +0 -0
  403. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/__init__.py +0 -0
  404. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/template/manifest.toml +0 -0
  405. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/template/template.tex +0 -0
  406. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/texlogos.py +0 -0
  407. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/__init__.py +0 -0
  408. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/__init__.py +0 -0
  409. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/app.py +0 -0
  410. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/bibliography.py +0 -0
  411. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/__init__.py +0 -0
  412. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/templates.py +0 -0
  413. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/diagnostics.py +0 -0
  414. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/state.py +0 -0
  415. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/utils.py +0 -0
  416. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/bib/a.bib +0 -0
  417. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/bib/b.bib +0 -0
  418. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/article.txt +0 -0
  419. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/book.txt +0 -0
  420. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/letter.txt +0 -0
  421. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/snippet.txt +0 -0
  422. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_admonitions.py +0 -0
  423. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_api_service.py +0 -0
  424. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_article_template.py +0 -0
  425. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_assets.py +0 -0
  426. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_attribute_ownership.py +0 -0
  427. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_baseline_regressions.py +0 -0
  428. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_bibliography.py +0 -0
  429. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_bibliography_fragment.py +0 -0
  430. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_callouts.py +0 -0
  431. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_citations.py +0 -0
  432. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli.py +0 -0
  433. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_bibliography.py +0 -0
  434. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_convert.py +0 -0
  435. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_templates_commands.py +0 -0
  436. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_code_engines.py +0 -0
  437. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_combining_marks.py +0 -0
  438. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_counter_extension.py +0 -0
  439. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_data_script_rendering.py +0 -0
  440. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_dependency_warnings.py +0 -0
  441. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_diagnostics.py +0 -0
  442. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_diagrams_backend.py +0 -0
  443. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_docker.py +0 -0
  444. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_document_state.py +0 -0
  445. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_engine_helpers.py +0 -0
  446. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_extra_fragment.py +0 -0
  447. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fallback_cache_refresh.py +0 -0
  448. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fonts_fallback.py +0 -0
  449. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_formatting.py +0 -0
  450. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragment_configs.py +0 -0
  451. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragments/geometry.md +0 -0
  452. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragments.py +0 -0
  453. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_geometry_fragment.py +0 -0
  454. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_headings.py +0 -0
  455. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_html_script_detection.py +0 -0
  456. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_index_extension.py +0 -0
  457. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_latex_log.py +0 -0
  458. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_letter_template.py +0 -0
  459. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_links.py +0 -0
  460. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_latex_raw.py +0 -0
  461. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_latex_text.py +0 -0
  462. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_mermaid.py +0 -0
  463. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_module.py +0 -0
  464. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_quotes.py +0 -0
  465. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_smart_dashes.py +0 -0
  466. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_media_conversion.py +0 -0
  467. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/code.md +0 -0
  468. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/formatting.md +0 -0
  469. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/headings.md +0 -0
  470. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/index.md +0 -0
  471. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/pgcd.drawio +0 -0
  472. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/mkdocs.yml +0 -0
  473. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_html.py +0 -0
  474. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_integration.py +0 -0
  475. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_plugin.py +0 -0
  476. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mustache.py +0 -0
  477. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_partials.py +0 -0
  478. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_presenter.py +0 -0
  479. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_press_metadata.py +0 -0
  480. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_progressbar_extension.py +0 -0
  481. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_entry_points.py +0 -0
  482. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_fallback_manager.py +0 -0
  483. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_parser_fallback.py +0 -0
  484. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_rule_ordering.py +0 -0
  485. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_script_wrapping.py +0 -0
  486. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_snippet_cache.py +0 -0
  487. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_snippet_parser.py +0 -0
  488. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_strip_tags.py +0 -0
  489. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_tectonic_downloads.py +0 -0
  490. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_attributes.py +0 -0
  491. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_emitters.py +0 -0
  492. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_loader.py +0 -0
  493. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_renderer.py +0 -0
  494. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_renderer_slots.py +0 -0
  495. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_wrapping.py +0 -0
  496. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_texlogos_extension.py +0 -0
  497. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_title_levels.py +0 -0
  498. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_transformers.py +0 -0
  499. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_typesetting_fragment.py +0 -0
  500. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_user_dir.py +0 -0
  501. {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_utils.py +0 -0
@@ -21,6 +21,7 @@ jobs:
21
21
  - name: Install uv
22
22
  uses: astral-sh/setup-uv@v7
23
23
  with:
24
+ version: "0.9.18"
24
25
  enable-cache: true
25
26
  cache-python: false
26
27
  env:
@@ -55,6 +56,7 @@ jobs:
55
56
  - name: Install uv
56
57
  uses: astral-sh/setup-uv@v7
57
58
  with:
59
+ version: "0.9.18"
58
60
  enable-cache: true
59
61
  cache-python: false
60
62
  env:
@@ -65,7 +67,7 @@ jobs:
65
67
 
66
68
  - name: Install Cairo (macOS)
67
69
  if: runner.os == 'macOS'
68
- run: brew install cairo
70
+ run: brew list cairo >/dev/null 2>&1 || brew install cairo
69
71
 
70
72
  - name: Run pytest
71
73
  run: uv run pytest
@@ -92,6 +94,7 @@ jobs:
92
94
  - name: Install uv
93
95
  uses: astral-sh/setup-uv@v7
94
96
  with:
97
+ version: "0.9.18"
95
98
  enable-cache: true
96
99
  cache-python: false
97
100
  env:
@@ -128,6 +131,7 @@ jobs:
128
131
  # Install system dependencies (Playwright, cairo, etc.)
129
132
  - name: Install system dependencies
130
133
  run: |
134
+ sudo apt-get update
131
135
  sudo apt-get install -y libglib2.0-0 libnspr4 libnss3 libatk1.0-0 \
132
136
  libatk-bridge2.0-0 libcups2 libxkbcommon0 libatspi2.0-0 libxcomposite1 \
133
137
  libxdamage1 libxfixes3 libxrandr2 libgbm1 libcairo2 libpango-1.0-0
@@ -136,6 +140,7 @@ jobs:
136
140
  - name: Install uv
137
141
  uses: astral-sh/setup-uv@v7
138
142
  with:
143
+ version: "0.9.18"
139
144
  enable-cache: true
140
145
  cache-python: false
141
146
 
@@ -149,6 +154,21 @@ jobs:
149
154
  uv run playwright install-deps
150
155
  uv run playwright install chromium
151
156
 
157
+ # Build the main Python package distribution before docs/examples touch the repo
158
+ - name: Build distributions (texsmith)
159
+ run: uv build
160
+
161
+ # Build the MkDocs plugin distribution before docs/examples touch the repo
162
+ - name: Build distributions (mkdocs_texsmith)
163
+ working-directory: packages/mkdocs_texsmith
164
+ run: uv build
165
+
166
+ # Ensure no generated artifacts pollute the version calculation
167
+ - name: Verify clean git state
168
+ run: |
169
+ git status --porcelain
170
+ test -z "$(git status --porcelain)"
171
+
152
172
  # Build all examples (clean + all)
153
173
  - name: Build examples
154
174
  run: |
@@ -165,15 +185,6 @@ jobs:
165
185
  run: |
166
186
  make docs
167
187
 
168
- # Build the main Python package distribution
169
- - name: Build distributions (texsmith)
170
- run: uv build
171
-
172
- # Build the MkDocs plugin distribution
173
- - name: Build distributions (mkdocs_texsmith)
174
- working-directory: packages/mkdocs_texsmith
175
- run: uv build
176
-
177
188
  # Upload all artifacts needed for the release job
178
189
  - name: Upload release artifacts
179
190
  uses: actions/upload-artifact@v4
@@ -242,6 +253,7 @@ jobs:
242
253
  - name: Install uv
243
254
  uses: astral-sh/setup-uv@v7
244
255
  with:
256
+ version: "0.9.18"
245
257
  enable-cache: true
246
258
  cache-python: false
247
259
  env:
@@ -0,0 +1,20 @@
1
+ # Cached Wikipedia images
2
+
3
+ This folder contains locally cached copies of Wikipedia images used in the examples.
4
+
5
+ Why this exists:
6
+
7
+ - CI (especially Windows) occasionally hits HTTP 429 rate limits when fetching directly from `upload.wikimedia.org`.
8
+ - Keeping a local copy makes the examples deterministic and prevents flaky builds.
9
+
10
+ How it works:
11
+
12
+ - The Markdown examples still reference HTTP URLs, but we point them to the repo via
13
+ `https://raw.githubusercontent.com/yves-chevallier/texsmith/refs/heads/master/.wiki/...`.
14
+ - This preserves the HTTP fetch path in the renderer while avoiding third‑party rate limits.
15
+
16
+ If you need to add new images:
17
+
18
+ 1. Download the file from Wikipedia (or another source with a compatible license).
19
+ 2. Place it in this folder using a stable filename.
20
+ 3. Update the example markdown to reference the raw GitHub URL.
@@ -7,26 +7,33 @@ and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Changed
10
+ ### Added
11
+
12
+ - Nothing yet.
11
13
 
12
- - Collapsed conversion settings to a single `ConversionRequest` model (removed `RenderSettings`).
13
- - Folded document render options and slot tracking into `Document` for a single SSOT.
14
- - Simplified template options handling to use plain mappings in `TemplateSession`.
15
- - Bumped the minimum PyXindy dependency to `0.0.6`.
16
- - Expanded CI to test on Windows and macOS, and added a Windows examples build job.
14
+ ## [0.2.2] - 2026-02-24
17
15
 
18
16
  ### Added
19
17
 
20
- - Documented the `--legacy-latex-accents` CLI flag and its API equivalent via `ConversionRequest`.
18
+ - CLI/API version reporting (`texsmith --version`, `get_version()`).
19
+ - Configurable HTTP user agent for remote asset and emoji fetching (`--http-user-agent` / `TEXSMITH_HTTP_USER_AGENT`).
20
+ - TLS download helper with cert guidance for network fetches.
21
+ - Cached Wikipedia images for the book example under `.wiki/` with documentation.
22
+
23
+ ### Changed
24
+
25
+ - Horizontal rules now force a page break in LaTeX output.
26
+ - Asset summaries hide temporary build roots and `.converted` cache files.
27
+ - Letter example no longer hard-codes the format, allowing snippet overrides; docs include local build steps.
28
+ - Book example images now resolve via raw GitHub URLs to avoid third‑party rate limits.
29
+ - CI now runs `apt-get update` before installing system dependencies.
21
30
 
22
31
  ### Fixed
23
32
 
24
- - Use the bundled `biber` path when invoking bibliography builds to fix Windows CI failures.
25
- - Make placeholder PDFs valid so Tectonic can include them when SVG conversion fails.
26
- - Add a Playwright fallback for SVG-to-PDF conversion when Cairo isn't available.
27
- - Try multiple Biber download names on macOS arm64 to avoid 404s on the CI runners.
28
- - Honor the diagrams backend when converting letter signature SVG assets.
29
- - Avoid markdown-escaping letter `source_dir` so Windows paths resolve correctly.
33
+ - Playwright SVG conversion now handles `viewBox`-only SVGs to prevent blank PDFs.
34
+ - Suppressed noisy Tectonic `lineno` UTF‑8 warnings and made console output encoding-safe.
35
+ - XeTeX fallback transitions no longer leak across scripts; arrow glyphs prefer Noto Sans Symbols.
36
+ - Convert common Unicode symbols to LaTeX math macros to avoid missing glyphs.
30
37
 
31
38
  ## [0.1.0] - 2025-12-20
32
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: texsmith
3
- Version: 0.2.1.dev0
3
+ Version: 0.2.2
4
4
  Summary: A Markdown to LaTeX converter.
5
5
  Project-URL: Homepage, https://github.com/yves-chevallier/texsmith
6
6
  Author-email: Yves Chevallier <yves.chevalier@heig-vd.ch>
@@ -57,7 +57,8 @@ Description-Content-Type: text/markdown
57
57
  TeXSmith is a [Python](https://www.python.org/) package and CLI tool to convert **Markdown** or **HTML** documents into LaTeX format. It is designed to be extensible via templates and integrates with [MkDocs](https://www.mkdocs.org/) for generating printable documents from documentation sites.
58
58
 
59
59
  <p align="center">
60
- <img src="docs/assets/ts-logo.svg" width="70%" />
60
+ <!-- Absolute link for compatibility with PyPi -->
61
+ <img src="https://raw.githubusercontent.com/yves-chevallier/texsmith/master/docs/assets/ts-logo.svg" width="70%" />
61
62
  </p>
62
63
 
63
64
  ## TL;DR
@@ -67,6 +68,8 @@ pip install texsmith
67
68
  texsmith input.md input.bib -o build/ --build
68
69
  ```
69
70
 
71
+ Check the installed version with `texsmith --version` or in Python with `texsmith.get_version()`.
72
+
70
73
  ## Key features
71
74
 
72
75
  - **MkDocs-native Markdown** – Ships with the same Material + pymdown extension stack you use in MkDocs, so tabs, callouts, annotations, tooltips, and data tables survive the conversion.
@@ -14,7 +14,8 @@
14
14
  TeXSmith is a [Python](https://www.python.org/) package and CLI tool to convert **Markdown** or **HTML** documents into LaTeX format. It is designed to be extensible via templates and integrates with [MkDocs](https://www.mkdocs.org/) for generating printable documents from documentation sites.
15
15
 
16
16
  <p align="center">
17
- <img src="docs/assets/ts-logo.svg" width="70%" />
17
+ <!-- Absolute link for compatibility with PyPi -->
18
+ <img src="https://raw.githubusercontent.com/yves-chevallier/texsmith/master/docs/assets/ts-logo.svg" width="70%" />
18
19
  </p>
19
20
 
20
21
  ## TL;DR
@@ -24,6 +25,8 @@ pip install texsmith
24
25
  texsmith input.md input.bib -o build/ --build
25
26
  ```
26
27
 
28
+ Check the installed version with `texsmith --version` or in Python with `texsmith.get_version()`.
29
+
27
30
  ## Key features
28
31
 
29
32
  - **MkDocs-native Markdown** – Ships with the same Material + pymdown extension stack you use in MkDocs, so tabs, callouts, annotations, tooltips, and data tables survive the conversion.
@@ -134,6 +134,9 @@ $ texsmith --help
134
134
  `--hash-assets`
135
135
  : Hash the filenames of stored assets instead of preserving their original names. This helps avoid filename collisions when multiple assets with the same name are used in different documents.
136
136
 
137
+ `--http-user-agent`
138
+ : Override the User-Agent header used when fetching remote assets (images, emoji). You can also set `TEXSMITH_HTTP_USER_AGENT` in the environment.
139
+
137
140
  `--manifest`, `-m`
138
141
  : Generate a `manifest.json` file alongside the LaTeX output, containing metadata about the rendered document, including input sources, template details, and rendering options.
139
142
 
@@ -98,3 +98,15 @@ The former French AFNOR standard **NF Z 11-001**, replaced by ISO 269 back in 19
98
98
  While our documentation already covers the underlying standards that govern letter layout, what actually matters in practice is finding a tool that can embody these rules with precision, consistency, and a healthy respect for typographic sanity. This is the point where LaTeX—and specifically KOMA-Script’s `scrlttr2`—quietly distinguishes itself from the rest. Designed in the German tradition of rigorous typesetting, `scrlttr2` follows the logic of formal letter standards with an almost pedantic accuracy, offering a layout engine that behaves predictably and stays faithful to the structural constraints imposed by modern correspondence norms. Yet it remains flexible enough to emulate the conventions of other national styles without falling apart or requiring awkward hacks.
99
99
 
100
100
  In short, choosing `scrlttr2` was less about tradition and more about engineering. It gives us a letter typesetting engine that is standards-aware, robust enough for large-scale automation, and structured enough to keep our layouts consistent across contexts. It is not the easiest tool, nor the most forgiving, but for anyone who values correctness, longevity, and the quiet satisfaction of seeing a letter snap perfectly into place, it is simply the right one.
101
+
102
+ ## Build the exemple locally
103
+
104
+ To build the letter example locally, navigate to the `examples/letter` directory and run the following command:
105
+
106
+ ```bash
107
+ git clone https://github.com/yves-chevallier/texsmith.git
108
+ cd texsmith
109
+ uv sync
110
+ cd examples/letter
111
+ make
112
+ ```
@@ -35,8 +35,9 @@ Horizontal rules:
35
35
 
36
36
  All standard Markdown constructs—headings, emphasis, lists, code blocks,
37
37
  blockquotes, links, images, and horizontal rules—render exactly as you would
38
- expect. TeXSmith relies on fenced code blocks by default, so triple backticks
39
- (```` ``) are the recommended way to author code samples.
38
+ expect. In LaTeX output, horizontal rules become `\clearpage` page breaks rather
39
+ than a literal line. TeXSmith relies on fenced code blocks by default, so triple
40
+ backticks (```` ``) are the recommended way to author code samples.
40
41
 
41
42
  ## Extension Cheat Sheet
42
43
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from importlib.metadata import PackageNotFoundError, version as _pkg_version
6
-
7
5
  from texsmith.core.bibliography import (
8
6
  BibliographyCollection,
9
7
  BibliographyIssue,
@@ -50,12 +48,10 @@ from texsmith.core.user_dir import (
50
48
  get_user_dir,
51
49
  user_dir_context,
52
50
  )
51
+ from texsmith.version import get_version
53
52
 
54
53
 
55
- try:
56
- __version__ = _pkg_version("texsmith")
57
- except PackageNotFoundError:
58
- __version__ = "0.0.0"
54
+ __version__ = get_version()
59
55
 
60
56
  __all__ = [
61
57
  "DEFAULT_TEMPLATE_LANGUAGE",
@@ -94,6 +90,7 @@ __all__ = [
94
90
  "copy_template_assets",
95
91
  "get_template",
96
92
  "get_user_dir",
93
+ "get_version",
97
94
  "load_template",
98
95
  "load_template_runtime",
99
96
  "renders",
@@ -57,6 +57,15 @@ _PLACEHOLDER_PDF = (
57
57
  )
58
58
 
59
59
 
60
+ def _resolve_http_user_agent(context: RenderContext) -> str | None:
61
+ candidate = context.runtime.get("http_user_agent")
62
+ if isinstance(candidate, str):
63
+ candidate = candidate.strip()
64
+ if candidate:
65
+ return candidate
66
+ return None
67
+
68
+
60
69
  def store_local_image_asset(context: RenderContext, resolved: Path) -> Path:
61
70
  """Copy or convert a local asset and register it on the context."""
62
71
  asset_key = str(resolved)
@@ -135,6 +144,9 @@ def store_remote_image_asset(context: RenderContext, url: str) -> Path:
135
144
  "manifest_dirty": manifest_dirty,
136
145
  "emitter": emitter,
137
146
  }
147
+ user_agent = _resolve_http_user_agent(context)
148
+ if user_agent:
149
+ fetch_options["user_agent"] = user_agent
138
150
  if convert_requested:
139
151
  fetch_options["output_suffix"] = ".pdf"
140
152
  elif suffix_hint:
@@ -293,10 +293,21 @@ def _emoji_twemoji_url(token: str) -> str:
293
293
  return f"https://twemoji.maxcdn.com/v/latest/svg/{codepoints}.svg"
294
294
 
295
295
 
296
+ def _resolve_http_user_agent(context: RenderContext) -> str | None:
297
+ candidate = context.runtime.get("http_user_agent")
298
+ if isinstance(candidate, str):
299
+ candidate = candidate.strip()
300
+ if candidate:
301
+ return candidate
302
+ return None
303
+
304
+
296
305
  def _render_emoji(token: str, context: RenderContext) -> str:
297
306
  url = _emoji_twemoji_url(token)
298
307
  try:
299
- artefact = fetch_image(url, output_dir=context.assets.output_root)
308
+ user_agent = _resolve_http_user_agent(context)
309
+ options = {"user_agent": user_agent} if user_agent else {}
310
+ artefact = fetch_image(url, output_dir=context.assets.output_root, **options)
300
311
  except TransformerExecutionError as exc:
301
312
  warnings.warn(f"Failed to fetch emoji '{token}': {exc}", stacklevel=2)
302
313
  legacy = getattr(context.config, "legacy_latex_accents", False)
@@ -700,7 +711,9 @@ def render_twemoji_image(element: Tag, context: RenderContext) -> None:
700
711
  if not is_valid_url(src):
701
712
  raise InvalidNodeError("Twemoji images must reference remote assets")
702
713
 
703
- artefact = fetch_image(src, output_dir=context.assets.output_root)
714
+ user_agent = _resolve_http_user_agent(context)
715
+ options = {"user_agent": user_agent} if user_agent else {}
716
+ artefact = fetch_image(src, output_dir=context.assets.output_root, **options)
704
717
  stored_path = context.assets.register(src, artefact)
705
718
  asset_path = context.assets.latex_path(stored_path)
706
719
 
@@ -11,6 +11,15 @@ from rich.console import Console
11
11
  from ..latex import LatexStreamResult
12
12
 
13
13
 
14
+ _SUPPRESSED_WARNINGS = (
15
+ "warning: lineno.sty:296: Invalid UTF-8 byte or sequence at line 296 replaced by U+FFFD",
16
+ )
17
+
18
+
19
+ def _should_suppress(line: str) -> bool:
20
+ return any(token in line for token in _SUPPRESSED_WARNINGS)
21
+
22
+
14
23
  def run_tectonic_engine(
15
24
  argv: Sequence[str],
16
25
  *,
@@ -19,6 +28,19 @@ def run_tectonic_engine(
19
28
  console: Console,
20
29
  ) -> LatexStreamResult:
21
30
  """Execute a tectonic command, streaming plain output."""
31
+
32
+ def _safe_console_print(text: str) -> None:
33
+ try:
34
+ console.print(text)
35
+ except UnicodeEncodeError:
36
+ stream = getattr(console, "file", None)
37
+ if stream is None:
38
+ return
39
+ encoding = getattr(stream, "encoding", None) or "utf-8"
40
+ sanitized = text.encode(encoding, errors="replace").decode(encoding, errors="replace")
41
+ stream.write(f"{sanitized}\n")
42
+ stream.flush()
43
+
22
44
  with subprocess.Popen(
23
45
  argv,
24
46
  cwd=str(workdir),
@@ -32,7 +54,9 @@ def run_tectonic_engine(
32
54
  ) as process:
33
55
  assert process.stdout is not None
34
56
  for line in process.stdout:
35
- console.print(line.rstrip())
57
+ if _should_suppress(line):
58
+ continue
59
+ _safe_console_print(line.rstrip())
36
60
  returncode = process.wait()
37
61
 
38
62
  return LatexStreamResult(returncode=returncode, messages=[])
@@ -12,11 +12,11 @@ import sys
12
12
  import tarfile
13
13
  import tempfile
14
14
  from urllib.error import URLError
15
- from urllib.request import urlopen
16
15
  import zipfile
17
16
 
18
17
  from rich.console import Console
19
18
 
19
+ from texsmith.core.http import open_url
20
20
  from texsmith.core.user_dir import get_user_dir
21
21
 
22
22
 
@@ -218,7 +218,7 @@ def _install_dir() -> Path:
218
218
 
219
219
 
220
220
  def _download_file(url: str, destination: Path) -> None:
221
- with urlopen(url) as response, destination.open("wb") as handle:
221
+ with open_url(url) as response, destination.open("wb") as handle:
222
222
  shutil.copyfileobj(response, handle)
223
223
 
224
224
 
@@ -21,6 +21,21 @@ _BASIC_LATEX_ESCAPE_MAP = {
21
21
  "\\": r"\textbackslash{}",
22
22
  }
23
23
 
24
+ _COMMON_SYMBOL_MAP = {
25
+ "→": r"\(\rightarrow\)",
26
+ "←": r"\(\leftarrow\)",
27
+ "⇒": r"\(\Rightarrow\)",
28
+ "⇐": r"\(\Leftarrow\)",
29
+ "≥": r"\(\geq\)",
30
+ "≤": r"\(\leq\)",
31
+ "≠": r"\(\neq\)",
32
+ "≈": r"\(\approx\)",
33
+ "±": r"\(\pm\)",
34
+ "×": r"\(\times\)", # noqa: RUF001
35
+ "÷": r"\(\div\)",
36
+ "∞": r"\(\infty\)",
37
+ }
38
+
24
39
  _ACCENT_NEEDS_BRACES_PATTERN = re.compile(
25
40
  r"\\([" + re.escape("`'^\"~=\\.Hrvuck") + r"])\s*([A-Za-z])(?!\{)"
26
41
  )
@@ -69,6 +84,13 @@ def escape_latex_chars(text: str, *, legacy_accents: bool = False) -> str:
69
84
  return "MODIFIER LETTER" in name and ("SMALL" in name or "CAPITAL" in name)
70
85
 
71
86
  for char in text:
87
+ replacement = _COMMON_SYMBOL_MAP.get(char)
88
+ if replacement is not None:
89
+ if buffer:
90
+ parts.append(_encode_chunk("".join(buffer)))
91
+ buffer.clear()
92
+ parts.append(replacement)
93
+ continue
72
94
  if _should_skip_encoding(char):
73
95
  if buffer:
74
96
  parts.append(_encode_chunk("".join(buffer)))
@@ -6,12 +6,12 @@ import atexit
6
6
  from collections.abc import Callable, Mapping, Sequence
7
7
  import contextlib
8
8
  from datetime import datetime, timezone
9
- from importlib import metadata as importlib_metadata
10
9
  from io import BytesIO
11
10
  import json
12
11
  import math
13
12
  import os
14
13
  from pathlib import Path
14
+ import re
15
15
  import shlex
16
16
  import shutil
17
17
  import subprocess
@@ -20,11 +20,11 @@ import threading
20
20
  from threading import Lock, Thread
21
21
  from typing import Any, ClassVar, TypeVar
22
22
  from urllib.parse import unquote, urlparse
23
- from urllib.request import urlopen
24
23
  import warnings
25
24
 
26
25
  from texsmith.core.conversion.debug import ensure_emitter, record_event
27
26
  from texsmith.core.exceptions import TransformerExecutionError
27
+ from texsmith.core.http import open_url
28
28
  from texsmith.core.user_dir import get_user_dir
29
29
 
30
30
  from ..docker import DockerLimits, VolumeMount, run_container
@@ -125,6 +125,40 @@ def _wrap_playwright_error(exc: Exception, emitter: Any = None) -> TransformerEx
125
125
  return TransformerExecutionError(message)
126
126
 
127
127
 
128
+ def _normalise_svg_for_playwright(svg: str) -> str:
129
+ """Ensure Playwright has explicit SVG dimensions when width/height are missing."""
130
+ svg = re.sub(r"^\s*<\?xml[^>]*>\s*", "", svg)
131
+ match = re.search(r"<svg\b[^>]*>", svg, flags=re.IGNORECASE | re.DOTALL)
132
+ if not match:
133
+ return svg
134
+
135
+ tag = match.group(0)
136
+ has_width = re.search(r"\bwidth\s*=", tag, flags=re.IGNORECASE)
137
+ has_height = re.search(r"\bheight\s*=", tag, flags=re.IGNORECASE)
138
+ if has_width and has_height:
139
+ return svg
140
+
141
+ viewbox_match = re.search(
142
+ r"\bviewBox\s*=\s*['\"]([^'\"]+)['\"]",
143
+ tag,
144
+ flags=re.IGNORECASE,
145
+ )
146
+ if not viewbox_match:
147
+ return svg
148
+
149
+ parts = re.split(r"[\s,]+", viewbox_match.group(1).strip())
150
+ if len(parts) != 4:
151
+ return svg
152
+
153
+ width, height = parts[2], parts[3]
154
+ if tag.endswith("/>"):
155
+ replacement = tag[:-2] + f' width="{width}" height="{height}" />'
156
+ else:
157
+ replacement = tag[:-1] + f' width="{width}" height="{height}">'
158
+
159
+ return svg[: match.start()] + replacement + svg[match.end() :]
160
+
161
+
128
162
  def _resolve_cli(names: Sequence[str], hints: Sequence[Path]) -> tuple[str | None, bool]:
129
163
  """Return an executable path and whether it was discovered via $PATH."""
130
164
  for name in names:
@@ -295,6 +329,7 @@ class SvgToPdfStrategy(CachedConversionStrategy):
295
329
  return target
296
330
 
297
331
  def _svg_to_pdf(self, browser: Any, svg: str, target: Path) -> None:
332
+ svg = _normalise_svg_for_playwright(svg)
298
333
  page = browser.new_page()
299
334
  page.set_content(f"<html><body style='margin:0; display:inline-block'>{svg}</body></html>")
300
335
  locator = page.locator("svg")
@@ -416,11 +451,7 @@ class FetchImageStrategy(CachedConversionStrategy):
416
451
  elif os.getenv("TEXSMITH_HTTP_USER_AGENT"):
417
452
  user_agent = os.environ["TEXSMITH_HTTP_USER_AGENT"].strip()
418
453
  else:
419
- try:
420
- version = importlib_metadata.version("texsmith")
421
- except importlib_metadata.PackageNotFoundError:
422
- version = "unknown"
423
- user_agent = f"texsmith/{version}"
454
+ user_agent = "Mozilla/5.0"
424
455
 
425
456
  headers = {"User-Agent": user_agent}
426
457
 
@@ -1389,7 +1420,7 @@ class DrawioToPdfStrategy(CachedConversionStrategy):
1389
1420
  export_url = None
1390
1421
  if not export_page.exists():
1391
1422
  try:
1392
- with urlopen(self.export_url) as response:
1423
+ with open_url(self.export_url) as response:
1393
1424
  export_page.write_bytes(response.read())
1394
1425
  except Exception:
1395
1426
  export_url = self.export_url
@@ -267,6 +267,7 @@ def convert_document(
267
267
  wrap_document=wrap_document,
268
268
  legacy_latex_accents=request.legacy_latex_accents,
269
269
  diagrams_backend=request.diagrams_backend,
270
+ http_user_agent=request.http_user_agent,
270
271
  )
271
272
 
272
273
 
@@ -283,6 +284,7 @@ def _render_document(
283
284
  wrap_document: bool,
284
285
  legacy_latex_accents: bool,
285
286
  diagrams_backend: str | None,
287
+ http_user_agent: str | None,
286
288
  ) -> ConversionResult:
287
289
  if persist_debug_html:
288
290
  persist_debug_artifacts(
@@ -305,6 +307,7 @@ def _render_document(
305
307
  strategy=strategy,
306
308
  diagrams_backend=diagrams_backend,
307
309
  emitter=emitter,
310
+ http_user_agent=http_user_agent,
308
311
  )
309
312
 
310
313
  active_slot_requests = binder_context.slot_requests
@@ -490,6 +493,7 @@ def _build_runtime_common(
490
493
  strategy: GenerationStrategy,
491
494
  diagrams_backend: str | None,
492
495
  emitter: DiagnosticEmitter,
496
+ http_user_agent: str | None,
493
497
  ) -> dict[str, object]:
494
498
  """Prepare immutable runtime metadata shared across fragment rendering."""
495
499
  code_options = _resolve_code_options(binding, binder_context.template_overrides)
@@ -504,6 +508,8 @@ def _build_runtime_common(
504
508
  "language": binder_context.language,
505
509
  "emitter": emitter,
506
510
  }
511
+ if isinstance(http_user_agent, str) and http_user_agent.strip():
512
+ runtime_common["http_user_agent"] = http_user_agent.strip()
507
513
  template_callouts = binder_context.template_overrides.get("callouts")
508
514
  runtime_common["callouts_definitions"] = normalise_callouts(
509
515
  merge_callouts(
@@ -55,6 +55,7 @@ class ConversionRequest:
55
55
  manifest: bool = False
56
56
  persist_debug_html: bool = False
57
57
  language: str | None = None
58
+ http_user_agent: str | None = None
58
59
  legacy_latex_accents: bool = False
59
60
  diagrams_backend: str | None = None
60
61