diff --git a/python_docs_theme/layout.html b/python_docs_theme/layout.html
index 1903fad..c0edd8f 100644
--- a/python_docs_theme/layout.html
+++ b/python_docs_theme/layout.html
@@ -80,6 +80,12 @@
{{ _('Navigation') }}
{%- endif -%}
{%- endif -%}
+ {%- if theme_is_rtl|lower == "true" %}
+
+ {%- endif %}
{{ super() }}
{%- endblock -%}
diff --git a/python_docs_theme/static/fonts/Vazirmatn[wght].woff2 b/python_docs_theme/static/fonts/Vazirmatn[wght].woff2
new file mode 100644
index 0000000..a501289
Binary files /dev/null and b/python_docs_theme/static/fonts/Vazirmatn[wght].woff2 differ
diff --git a/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css
index aa9622d..00306a3 100644
--- a/python_docs_theme/static/pydoctheme.css
+++ b/python_docs_theme/static/pydoctheme.css
@@ -7,6 +7,22 @@
--bad-color: rgb(159 49 51);
--bad-border: rgb(244, 76, 78);
}
+@font-face {
+ font-family: 'Vazirmatn';
+ src: url('fonts/Vazirmatn[wght].woff2') format('woff2');
+ font-weight: 100 900;
+ font-style: normal;
+ font-display: swap;
+}
+
+/* Apply Vazirmatn only when the page is RTL */
+html[dir='rtl'] body,
+html[dir='rtl'] div.sphinxsidebar,
+html[dir='rtl'] .menu {
+ font-family: 'Vazirmatn', -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 */
div.document,
@@ -108,7 +124,7 @@ div.related a:hover {
}
.switchers > div {
- margin-right: 5px;
+ margin-inline-end: 5px;
}
div.related ul::after {
@@ -130,6 +146,7 @@ form.inline-search input[type='submit'] {
div.document {
display: flex;
+ flex-direction: row;
/* Don't let long code literals extend beyond the right side of the screen */
overflow-wrap: break-word;
}
@@ -142,6 +159,9 @@ span.pre {
div.sphinxsidebar {
display: flex;
width: min(25vw, 350px);
+ flex-shrink: 0;
+ margin: 0;
+ order: 0;
float: none;
position: sticky;
top: 0;
@@ -159,7 +179,13 @@ div.sphinxsidebar h4 {
}
div.bodywrapper {
- margin-left: min(25vw, 350px);
+ margin-inline-start: 0;
+}
+
+div.documentwrapper {
+ flex: 1;
+ min-width: 0;
+ order: 1;
}
div.sphinxsidebarwrapper {
@@ -202,8 +228,9 @@ div.sphinxsidebar input[type='text'] {
align-items: center;
width: 12px;
min-width: 12px;
- border-radius: 0 5px 5px 0;
- border-left: none;
+ border-start-end-radius: 5px;
+ border-end-end-radius: 5px;
+ border-inline-start: none;
}
#sidebarbutton:hover {
@@ -214,8 +241,13 @@ div.body {
padding: 0 0 0 1.2em;
}
+html[dir='rtl'] div.body {
+ padding: 0 1.2em 0 0;
+ direction: rtl;
+}
+
div.body p, div.body dd, div.body li, div.body blockquote {
- text-align: left;
+ text-align: start;
line-height: 1.6;
}
div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 {
@@ -233,6 +265,10 @@ div.body hr {
height: 1px;
}
+div.body pre, div.body code, div.highlight {
+ direction: ltr;
+}
+
div.body pre {
border-radius: 3px;
border: 1px solid #ac9;
@@ -251,19 +287,10 @@ div.body {
}
div.code-block-caption {
- background-color: #eee;
- border: 1px solid #ac9;
- border-bottom: none;
- border-radius: 3px 3px 0 0;
- padding: 0.3em 0.6em;
- font-size: 90%;
- color: #333;
-
& + div pre {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
}
-
& + div .copybutton {
border-top-right-radius: 0 !important;
}
@@ -402,7 +429,7 @@ table.docutils th {
table p,
table li {
- text-align: left !important;
+ text-align: start !important;
}
table.docutils th {
@@ -416,9 +443,9 @@ table.footnote td {
div.footer {
line-height: 150%;
- text-align: right;
+ text-align: end; /* was: text-align: right */
width: auto;
- margin-right: 10px;
+ margin-inline-end: 10px; /* was: margin-right */
}
div.footer a {
@@ -483,11 +510,11 @@ dl > dt span ~ em,
}
.toctree-wrapper ul {
- padding-left: 20px;
+ padding-inline-start: 20px;
}
.theme-selector {
- margin-left: .5em;
+ margin-inline-start: .5em;
}
div.genindex-jumpbox,
@@ -506,17 +533,17 @@ div.genindex-jumpbox a {
cursor: pointer;
position: absolute;
top: 0;
- right: 0;
+ right: 0; /* physical right; always, even in RTL, since code is LTR */
font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;
font-size: 80%;
padding-left: .5em;
padding-right: .5em;
height: 100%;
max-height: min(100%, 2.4em);
- border-radius: 0 3px 0 0;
+ border-radius: 0 3px 0 0; /* physical — top-right corner, always */
color: #000;
background-color: #fff;
- border: 1px solid #ac9; /* follows div.body pre */
+ border: 1px solid #ac9;
display: none;
}
@@ -583,7 +610,7 @@ div.genindex-jumpbox a {
width: 100%;
position: fixed;
top: 0;
- left: 0;
+ inset-inline-start: 0;
box-shadow: rgba(0, 0, 0, 0.25) 0 0 2px 0;
z-index: 1;
}
@@ -605,7 +632,7 @@ div.genindex-jumpbox a {
align-items: stretch;
}
.nav-logo {
- margin-right: 1rem;
+ margin-inline-end: 1rem;
flex-shrink: 0;
align-self: center;
}
@@ -614,7 +641,7 @@ div.genindex-jumpbox a {
width: 20px;
}
.version_switcher_placeholder {
- margin-right: 1rem;
+ margin-inline-end: 1rem;
}
.version_switcher_placeholder > select {
height: 100%;
@@ -627,7 +654,7 @@ div.genindex-jumpbox a {
}
.nav-content .search input[type=search] {
border: 0;
- padding-left: 24px;
+ padding-inline-start: 24px; /* was: padding-left */
width: 100%;
flex: 1;
}
@@ -635,14 +662,14 @@ div.genindex-jumpbox a {
height: 100%;
box-shadow: none;
border: 0;
- border-left: 1px solid #a9a9a9;
+ border-inline-start: 1px solid #a9a9a9;
cursor: pointer;
- margin-right: 0;
+ margin-inline-end: 0;
}
.nav-content .search svg {
position: absolute;
align-self: center;
- padding-left: 4px;
+ padding-inline-start: 4px;
}
.toggler__input {
display: none;
@@ -674,7 +701,7 @@ div.genindex-jumpbox a {
width: 100%;
background: inherit;
position: absolute;
- left: 0;
+ inset-inline-start: 0;
top: -8px;
}
.toggler__label > span::after {
@@ -695,7 +722,7 @@ div.genindex-jumpbox a {
}
.toggler__input:checked ~ .menu-wrapper {
visibility: visible;
- left: 0;
+ inset-inline-start: 0; /* was: left: 0 */
}
/* Sliding side menu */
@@ -703,8 +730,8 @@ div.genindex-jumpbox a {
display: block;
position: fixed;
top: 0;
- transition: left 400ms ease;
- left: -310px;
+ transition: inset-inline-start 400ms ease;
+ inset-inline-start: -310px;
width: 300px;
height: 100%;
background-color: #eee;
@@ -714,7 +741,7 @@ div.genindex-jumpbox a {
}
.menu-wrapper.open {
visibility: visible;
- left: 0;
+ inset-inline-start: 0;
}
.menu {
padding: 40px 10px 30px 20px;
@@ -742,10 +769,10 @@ div.genindex-jumpbox a {
list-style: none;
line-height: 1.4;
overflow-wrap: break-word;
- padding-left: 0;
+ padding-inline-start: 0;
}
.menu ul ul {
- margin-left: 20px;
+ margin-inline-start: 20px;
list-style: square;
}
.menu ul li {
@@ -801,26 +828,26 @@ div.versionadded,
div.versionchanged,
div.deprecated,
div.deprecated-removed {
- border-left: 3px solid;
+ border-inline-start: 3px solid;
padding: 0 1rem;
}
div.versionadded {
- border-left-color: var(--versionadded-border);
+ border-inline-start-color: var(--versionadded-border);
}
div.versionchanged {
- border-left-color: var(--versionchanged-border);
+ border-inline-start-color: var(--versionchanged-border);
}
div.deprecated,
div.deprecated-removed,
div.versionremoved {
- border-left-color: var(--deprecated-border);
+ border-inline-start-color: var(--deprecated-border);
}
div.soft-deprecated {
- border-left-color: var(--soft-deprecated-border);
+ border-inline-start-color: var(--soft-deprecated-border);
}
div.versionadded .versionmodified {
diff --git a/python_docs_theme/theme.toml b/python_docs_theme/theme.toml
index 1d3cdbd..c0f9c79 100644
--- a/python_docs_theme/theme.toml
+++ b/python_docs_theme/theme.toml
@@ -27,6 +27,7 @@ headbgcolor = "white"
headlinkcolor = "#aaaaaa"
codebgcolor = "#eeffcc"
codetextcolor = "#333333"
+is_rtl = "false"
hosted_on = ""
issues_url = ""