From 2e0d368a26973342810e130c941d960f7d36fd89 Mon Sep 17 00:00:00 2001 From: Sepehr Rasouli Date: Wed, 30 Sep 2026 18:34:02 +0330 Subject: [PATCH 1/3] Add Vazirmatn (v33.003) support for Farsi (#331) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Stan Ulbrych --- pyproject.toml | 7 +- python_docs_theme/static/fonts/OFL.txt | 93 ++++++++++++++++++ .../static/fonts/Vazirmatn-NL-VF.woff2 | Bin 0 -> 47972 bytes python_docs_theme/static/pydoctheme.css | 26 ++++- 4 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 python_docs_theme/static/fonts/OFL.txt create mode 100644 python_docs_theme/static/fonts/Vazirmatn-NL-VF.woff2 diff --git a/pyproject.toml b/pyproject.toml index 7b81c4f0..2883e33f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ name = "python-docs-theme" description = "The Sphinx theme for the CPython docs and related projects" readme = "README.md" license = "PSF-2.0" -license-files = [ "LICENSE" ] +license-files = [ "LICENSE", "python_docs_theme/static/fonts/OFL.txt" ] authors = [ { name = "Python Docs Sphinx Theme maintainers" } ] requires-python = ">=3.12" classifiers = [ @@ -42,7 +42,10 @@ version.path = "python_docs_theme/__init__.py" build.artifacts = [ "python_docs_theme/locale/**/*.mo" ] build.hooks.custom.path = "babel_runner.py" build.targets.wheel.packages = [ "python_docs_theme" ] -build.targets.wheel.exclude = [ "python_docs_theme/locale/**/*.po" ] +build.targets.wheel.exclude = [ + "python_docs_theme/locale/**/*.po", + "python_docs_theme/static/fonts/OFL.txt", +] [tool.ruff] fix = true diff --git a/python_docs_theme/static/fonts/OFL.txt b/python_docs_theme/static/fonts/OFL.txt new file mode 100644 index 00000000..d8320040 --- /dev/null +++ b/python_docs_theme/static/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2015 The Vazirmatn Project Authors (https://github.com/rastikerdar/vazirmatn) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/python_docs_theme/static/fonts/Vazirmatn-NL-VF.woff2 b/python_docs_theme/static/fonts/Vazirmatn-NL-VF.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..949ad2639ee4b03502ef4a2a820115c71f9e92fb GIT binary patch literal 47972 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π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 literal 0 HcmV?d00001 diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css index 44e5ce51..930ee2a5 100644 --- a/python_docs_theme/static/pydoctheme.css +++ b/python_docs_theme/static/pydoctheme.css @@ -6,6 +6,7 @@ --middle-border: rgb(244, 227, 76); --bad-color: rgb(159 49 51); --bad-border: rgb(244, 76, 78); + --sans-serif-font-stack: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; } /* unset some styles from the classic stylesheet */ @@ -211,7 +212,7 @@ div.sphinxsidebar a:hover { form.inline-search input, div.sphinxsidebar input, div.related input { - font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; + font-family: var(--sans-serif-font-stack); border: 1px solid #999999; font-size: smaller; border-radius: 3px; @@ -269,6 +270,29 @@ div.body hr { height: 1px; } +/* Persian (fa) uses Vazirmatn, since the default system font stack renders + Arabic-script text poorly on many platforms. */ +@font-face { + font-family: "Vazirmatn NL"; + src: url("fonts/Vazirmatn-NL-VF.woff2") format("woff2"); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} + +:lang(fa) { + :is(div.body, div.sphinxsidebar, .menu-wrapper, div.footer), + :is(div.body, div.sphinxsidebar, .menu-wrapper) :is(h1, h2, h3, h4, h5, h6), + a, + input, + select, + textarea, + button:not(.copybutton), + label { + font-family: "Vazirmatn NL", var(--sans-serif-font-stack); + } +} + body[dir='rtl'] { & pre, & code, From ba6a2dff5584851208098b6056d32c0e78215a05 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Wed, 30 Sep 2026 17:05:31 +0100 Subject: [PATCH 2/3] Prepare the 2026.9.1 release (#333) --- CHANGELOG.md | 4 ++++ python_docs_theme/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98fb5ee4..b52adff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [2026.9.1](https://github.com/python/python-docs-theme/releases/tag/2026.9.1) + +* Use the Vazirmatn font for Persian by @sepehr-rs in https://github.com/python/python-docs-theme/commit/2e0d368a26973342810e130c941d960f7d36fd89 + ## [2026.9](https://github.com/python/python-docs-theme/releases/tag/2026.9) * Add support for right-to-left page layout by @sepehr-rs in https://github.com/python/python-docs-theme/pull/324 diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py index 454d4499..1d51947d 100644 --- a/python_docs_theme/__init__.py +++ b/python_docs_theme/__init__.py @@ -11,7 +11,7 @@ from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata -__version__ = "2026.9" +__version__ = "2026.9.1" THEME_PATH = Path(__file__).resolve().parent LOCALE_DIR = THEME_PATH / "locale" From a157071396c169492c3bc6832ee8811f0bea2e4f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2026 15:36:04 +0300 Subject: [PATCH 3/3] [pre-commit.ci] pre-commit autoupdate (#334) --- .pre-commit-config.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7124edcf..32392196 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,12 +1,12 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.20 + rev: v0.16.10 hooks: - id: ruff-check args: [--exit-non-zero-on-fix] - repo: https://github.com/psf/black-pre-commit-mirror - rev: 26.5.1 + rev: 26.10.0 hooks: - id: black @@ -22,7 +22,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.37.4 + rev: 0.38.2 hooks: - id: check-dependabot - id: check-github-workflows @@ -33,17 +33,17 @@ repos: - id: actionlint - repo: https://github.com/zizmorcore/zizmor-pre-commit - rev: v1.26.1 + rev: v1.30.1 hooks: - id: zizmor - repo: https://github.com/tox-dev/pyproject-fmt - rev: v2.25.1 + rev: v2.30.1 hooks: - id: pyproject-fmt - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.25 + rev: '0.26' hooks: - id: validate-pyproject