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 = ""