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.
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.github/workflows/ci.yml +22 -10
- texsmith-0.2.2/.wiki/1919_eclipse_positive.jpg +0 -0
- texsmith-0.2.2/.wiki/Albert_Einstein_and_Charlie_Chaplin_City_Lights_premiere_1931.jpg +0 -0
- texsmith-0.2.2/.wiki/Albert_Einstein_and_his_wife_Mileva_Maric.jpg +0 -0
- texsmith-0.2.2/.wiki/Albert_Einstein_as_a_child.jpg +0 -0
- texsmith-0.2.2/.wiki/Einstein-Oslofjord_cropped.jpg +0 -0
- texsmith-0.2.2/.wiki/README.md +20 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/CHANGELOG.md +20 -13
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/PKG-INFO +5 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/README.md +4 -1
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/index.md +3 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/letters.md +12 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/supported.md +3 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/__init__.py +3 -6
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_assets.py +12 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/inline.py +15 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/tectonic/__init__.py +25 -1
- texsmith-0.2.2/src/texsmith/adapters/latex/partials/horizontal_rule.tex +1 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/tectonic.py +2 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/utils.py +22 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/strategies.py +39 -8
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/core.py +6 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/models.py +1 -0
- texsmith-0.2.2/src/texsmith/core/http.py +57 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/coverage.py +2 -3
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/downloader.py +4 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/fallback.py +32 -1
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/ucharclasses.py +2 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/__init__.py +2 -2
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/ts-fonts.jinja.sty +0 -5
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/_options.py +10 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/render.py +20 -3
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/presenter.py +18 -1
- texsmith-0.2.2/src/texsmith/version.py +16 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_blocks.py +1 -1
- texsmith-0.2.2/tests/test_version.py +17 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/uv.lock +47 -47
- texsmith-0.2.1.dev0/fonts-test.tex +0 -180
- texsmith-0.2.1.dev0/src/texsmith/adapters/latex/partials/horizontal_rule.tex +0 -1
- texsmith-0.2.1.dev0/test.md +0 -12
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.editorconfig +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.gitignore +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/.vscode/settings.json +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/AGENT.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/LICENSE.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/Makefile +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/author.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/contribute.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/config.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/glossary.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/plugins.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/devel/tables.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/license.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/other-resources.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/release-notes.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/about/versioning.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/bibliography.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/cli.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/core.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/custom-transformers.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/handlers.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/high-level.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/latex.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/markdown.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/plugins.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/api/transformers.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/drawio-viewer.js +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/cheese.bib +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/cheese.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/code.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/dialects.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/examples/mozzarella.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/js/auto-reload.js +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/mermaid.mmd +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/mermaid.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/pipeline.png +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/standards.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-anvil.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-dark.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-light.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/ts-logo.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/assets/workflow.drawio +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/bibliography.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/build.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/slots.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/cli/templates.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/css/brand.css +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/css/extra.css +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/book.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/colorful.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/cooking.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/diagrams.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/languages.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/paper.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/pgcd.drawio +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/snippet-configs/letter.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/snippets.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/examples/texsmith.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/extensions.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/acronyms.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/bibliography.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/headings.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/listings.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/features/tags.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fonts.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/geometry.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/glossary.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/fragments/typesetting.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/front-matter.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/getting-started.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/limitations.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/metadata.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/mkdocs.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/.nav.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/engines.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/latex.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/pipeline.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/plumbing/tex.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/tectonic.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/discovery.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/fragments.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/mermaid.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/partials.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/templates/template-cookbook.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/guide/troubleshooting.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/hooks/mkdocs_hooks.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/js/mathjax.js +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/abbr.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/admonitions.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/captions.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/code.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/deflists.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/extra.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/formatting.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/images.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/math.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/mermaid.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/notes.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/progressbar.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/references.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/smartypants.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/tables.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/syntax/wikilinks.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/docs/texsmith-logo.pdf +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/mkdocs.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/noxfile.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.editorconfig +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.gitignore +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/.markdownlint.yaml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/LICENSE.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/Makefile +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/about.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/images/latex-hummingbird.svg +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/docs/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/hatch_build.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/mkdocs.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/noxfile.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/pyproject.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/src/mkdocs_plugin_texsmith/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/src/mkdocs_plugin_texsmith/plugin.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/tests/test_import.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/tests/test_plugin_config.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/packages/mkdocs_texsmith/uv.lock +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/pyproject.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/pyrightconfig.json +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/scripts/ci/python_versions.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/scripts/refresh_cli_help.sh +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/docker.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_helpers.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/_mermaid.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/admonitions.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/basic.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/blocks.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/code.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/links.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/handlers/media.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/log.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/latex/runner.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/formatter.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/latexmk.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/acronym.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/add.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/addition.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/blockquote.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/callout.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/choices.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/citation.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_listings.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_pygments.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeblock_verbatim.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeinline.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/codeinlinett.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/comment.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/del.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/deletion.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/description_list.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/enquote.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/epigraph.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/exercises_solutions.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/figure.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/figure_tcolorbox.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/footnote.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/glossary.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/heading.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/highlight.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/href.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/icon.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/include.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/index.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/italic.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/keystroke.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/label.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/list_acronyms.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/list_glossary.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/multicolumn.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/ordered_list.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/pagestyle.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/ref.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/regex.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/smallcaps.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/strikethrough.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/strong.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/subscript.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/substitution.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/superscript.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/tabbed.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/table.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/underline.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/unordered_list.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/partials/url.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/pygments.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/pyxindy.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/xindy/latex.xdy +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/xindy/tex.xdy +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/markdown/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/material.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/plugins/snippet.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/base.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/transformers/utils.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/collection.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/doi.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/issues.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/bibliography/parsing.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/callouts.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/config.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/context.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/_utils.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/debug.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/execution.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/inputs.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/pipeline.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/service.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion/templates.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/conversion_contexts.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/diagnostics.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/documents.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/exceptions.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/execution.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fonts/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fragments/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/fragments/base.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/metadata.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/mustache.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/partials.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/rules.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/base.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/builtins.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/context_usage.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/loader.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/manifest.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/runtime.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/session.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/text.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/templates/wrapper.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/core/user_dir.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/devtools.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/markdown.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/mkdocs_plugin.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/registry.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/index/templates/index.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/latex_raw.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/latex_text.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/mermaid.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/missing_footnotes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/multi_citations.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/markdown.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/progressbar/renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/smallcaps.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/markdown.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/extensions/texlogos/specs.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/cache.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/constants.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/html_scripts.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/logging.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/pipeline.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fonts/scripts.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/ts-bibliography-backmatter.jinja.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/bibliography/ts-bibliography.jinja.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/callouts/ts-callouts.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/code/ts-code.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/extra/ts-extra.jinja.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/fonts/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/frame/ts-frame.tex.jinja +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/paper.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/geometry/ts_geometry.tex.jinja +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/ts-glossary-backmatter.jinja.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/glossary/ts-glossary.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/ts-index-backmatter.jinja.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/index/ts-index.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/keystrokes/ts-keystrokes.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/todolist/ts-todolist.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/fragment.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/fragments/typesetting/ts-typesetting.tex.jinja +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/index.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/plugins/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/progressbar.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/quotes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/smart_dashes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/manifest.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/mermaid-config.json +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/article/template/template.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/overrides/codeblock.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/overrides/codeinline.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/fixtoc.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/manifest.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/book/template/template.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/common/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/common/latexmkrc +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/demo.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/fonts/modernline bold.otf +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/fonts/modernline.otf +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/manifest.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/template/callouts.jinja.sty +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/letter/template/template.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/README.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/template/manifest.toml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/templates/snippet/template/template.tex +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/texlogos.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/app.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/bibliography.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/__init__.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/commands/templates.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/diagnostics.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/state.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/ui/cli/utils.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/bib/a.bib +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/bib/b.bib +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/article.txt +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/book.txt +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/letter.txt +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/fixtures/template-info/snippet.txt +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_admonitions.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_api_service.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_article_template.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_assets.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_attribute_ownership.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_baseline_regressions.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_bibliography.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_bibliography_fragment.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_callouts.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_citations.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_bibliography.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_convert.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_cli_templates_commands.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_code_engines.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_combining_marks.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_counter_extension.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_data_script_rendering.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_dependency_warnings.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_diagnostics.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_diagrams_backend.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_docker.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_document_state.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_engine_helpers.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_extra_fragment.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fallback_cache_refresh.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fonts_fallback.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_formatting.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragment_configs.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragments/geometry.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_fragments.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_geometry_fragment.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_headings.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_html_script_detection.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_index_extension.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_latex_log.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_letter_template.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_links.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_latex_raw.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_latex_text.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_mermaid.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_module.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_quotes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_markdown_smart_dashes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_media_conversion.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/code.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/formatting.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/headings.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/index.md +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/docs/pgcd.drawio +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs/mkdocs.yml +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_html.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_integration.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mkdocs_plugin.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_mustache.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_partials.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_presenter.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_press_metadata.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_progressbar_extension.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_entry_points.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_fallback_manager.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_renderer_parser_fallback.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_rule_ordering.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_script_wrapping.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_snippet_cache.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_snippet_parser.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_strip_tags.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_tectonic_downloads.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_attributes.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_emitters.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_loader.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_renderer.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_renderer_slots.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_template_wrapping.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_texlogos_extension.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_title_levels.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_transformers.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_typesetting_fragment.py +0 -0
- {texsmith-0.2.1.dev0 → texsmith-0.2.2}/tests/test_user_dir.py +0 -0
- {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:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
-
###
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Nothing yet.
|
|
11
13
|
|
|
12
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
{texsmith-0.2.1.dev0 → texsmith-0.2.2}/src/texsmith/adapters/latex/engines/tectonic/__init__.py
RENAMED
|
@@ -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
|
-
|
|
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=[])
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
\clearpage
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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(
|