Skip to content

Commit dfac457

Browse files
committed
WIP
1 parent 87e181f commit dfac457

3 files changed

Lines changed: 97 additions & 17 deletions

File tree

doc/_ext/dfetch_style.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
"""Custom Pygments style matching the dfetch website brand palette."""
2+
3+
import sys
4+
import types
5+
6+
import pygments.styles
7+
from pygments.style import Style
8+
from pygments.token import (
9+
Comment,
10+
Error,
11+
Generic,
12+
Keyword,
13+
Name,
14+
Number,
15+
Operator,
16+
String,
17+
Token,
18+
)
19+
20+
21+
class DfetchStyle(Style):
22+
"""Brand-matched Pygments style — mirrors the website palette."""
23+
24+
background_color = "#fef8f0" # --bg-tint
25+
default_style = ""
26+
styles = {
27+
Token: "#1c1917", # --text
28+
Comment: "italic #78716c", # --text-muted
29+
Comment.Preproc: "noitalic #a0510a", # --primary-dark
30+
Keyword: "bold #c2620a", # --primary
31+
Keyword.Pseudo: "nobold #c2620a",
32+
Operator: "#a0510a", # --primary-dark
33+
Operator.Word: "bold #c2620a",
34+
String: "#4a7a62", # --dxt-reference (sage)
35+
String.Doc: "italic #4a7a62",
36+
Number: "#7a5a9a", # --dxt-explanation (purple)
37+
Name.Builtin: "#4e7fa0", # --accent
38+
Name.Builtin.Pseudo: "#4e7fa0",
39+
Name.Class: "bold #4e7fa0",
40+
Name.Function: "#3a6682", # --accent-dark
41+
Name.Exception: "bold #c0544a", # --dferror
42+
Name.Decorator: "#78716c", # --text-muted
43+
Name.Tag: "bold #c2620a", # --primary
44+
Name.Attribute: "#4e7fa0", # --accent
45+
Generic.Heading: "bold #1c1917",
46+
Generic.Subheading: "bold #78716c",
47+
Generic.Deleted: "#c0544a", # --dferror
48+
Generic.Inserted: "#4a7a62", # sage green
49+
Generic.Error: "#c0544a",
50+
Generic.Emph: "italic",
51+
Generic.Strong: "bold",
52+
Generic.Prompt: "bold #c2620a", # --primary
53+
Generic.Output: "#78716c", # --text-muted
54+
Generic.Traceback: "#4e7fa0", # --accent
55+
Error: "border:#c0544a",
56+
}
57+
58+
59+
def register() -> None:
60+
"""Inject the style into Pygments so it can be looked up by name."""
61+
mod = types.ModuleType("pygments.styles.dfetch")
62+
mod.DfetchStyle = DfetchStyle # type: ignore[attr-defined]
63+
sys.modules["pygments.styles.dfetch"] = mod
64+
pygments.styles.STYLE_MAP["dfetch"] = "dfetch::DfetchStyle"

doc/conf.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
import sys
1515
from importlib.metadata import PackageNotFoundError, version
1616

17+
# _ext/ must be on sys.path before any local imports.
18+
ext_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext"))
19+
sys.path.insert(0, ext_path)
20+
21+
import dfetch_style
22+
23+
dfetch_style.register()
24+
1725
try:
1826
__version__ = version("dfetch")
1927
except PackageNotFoundError:
@@ -26,9 +34,6 @@
2634

2735
# -- General configuration ------------------------------------------------
2836

29-
ext_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext"))
30-
sys.path.insert(0, ext_path)
31-
3237
# If your documentation needs a minimal Sphinx version, state it here.
3338
#
3439
# needs_sphinx = '1.0'
@@ -106,7 +111,7 @@
106111
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "venv", "landing-page"]
107112

108113
# The name of the Pygments (syntax highlighting) style to use.
109-
pygments_style = "sphinx"
114+
pygments_style = "dfetch"
110115

111116
# If true, `todo` and `todoList` produce output, else they produce nothing.
112117
todo_include_todos = False

doc/dfetch_preamble.inc

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,26 +96,31 @@
9696
\tcbuselibrary{skins}
9797
\usepackage{etoolbox}
9898
\tcbset{
99-
dfnote/.style={enhanced, frame hidden,
100-
borderline west={3.5pt}{0pt}{dfaccent}, colback=dfbgmint,
101-
left=10pt, right=10pt, top=8pt, bottom=8pt,
99+
dfnote/.style={enhanced,
100+
leftrule=3.5pt, rightrule=0pt, toprule=0pt, bottomrule=0pt,
101+
colframe=dfaccent, colback=dfbgmint,
102+
arc=4pt, left=10pt, right=10pt, top=8pt, bottom=8pt,
102103
before skip=\baselineskip, after skip=0.5\baselineskip},
103-
dfwarn/.style={enhanced, frame hidden,
104-
borderline west={3.5pt}{0pt}{dfprimary}, colback=dfbgtint,
105-
left=10pt, right=10pt, top=8pt, bottom=8pt,
104+
dfwarn/.style={enhanced,
105+
leftrule=3.5pt, rightrule=0pt, toprule=0pt, bottomrule=0pt,
106+
colframe=dfprimary, colback=dfbgtint,
107+
arc=4pt, left=10pt, right=10pt, top=8pt, bottom=8pt,
106108
before skip=\baselineskip, after skip=0.5\baselineskip},
107-
dftip/.style={enhanced, frame hidden,
108-
borderline west={3.5pt}{0pt}{dfgreen}, colback=dfbggreen,
109-
left=10pt, right=10pt, top=8pt, bottom=8pt,
109+
dftip/.style={enhanced,
110+
leftrule=3.5pt, rightrule=0pt, toprule=0pt, bottomrule=0pt,
111+
colframe=dfgreen, colback=dfbggreen,
112+
arc=4pt, left=10pt, right=10pt, top=8pt, bottom=8pt,
110113
before skip=\baselineskip, after skip=0.5\baselineskip},
111-
dferrstyle/.style={enhanced, frame hidden,
112-
borderline west={3.5pt}{0pt}{dferror}, colback=dfbgerror,
113-
left=10pt, right=10pt, top=8pt, bottom=8pt,
114+
dferrstyle/.style={enhanced,
115+
leftrule=3.5pt, rightrule=0pt, toprule=0pt, bottomrule=0pt,
116+
colframe=dferror, colback=dfbgerror,
117+
arc=4pt, left=10pt, right=10pt, top=8pt, bottom=8pt,
114118
before skip=\baselineskip, after skip=0.5\baselineskip},
115119
}
116120
% Per-type opener commands
117121
\newcommand{\dfadmonnote}[1]{\begin{tcolorbox}[dfnote]{\color{dfaccent}\sffamily\bfseries#1}\par\smallskip}
118122
\newcommand{\dfadmonimportant}[1]{\begin{tcolorbox}[dfnote]{\color{dfaccent}\sffamily\bfseries#1}\par\smallskip}
123+
\newcommand{\dfadmonseealso}[1]{\begin{tcolorbox}[dfnote]{\color{dfaccent}\sffamily\bfseries#1}\par\smallskip}
119124
\newcommand{\dfadmontip}[1]{\begin{tcolorbox}[dftip]{\color{dfgreen}\sffamily\bfseries#1}\par\smallskip}
120125
\newcommand{\dfadmonhint}[1]{\begin{tcolorbox}[dftip]{\color{dfgreen}\sffamily\bfseries#1}\par\smallskip}
121126
\newcommand{\dfadmonwarning}[1]{\begin{tcolorbox}[dfwarn]{\color{dfprimary}\sffamily\bfseries#1}\par\smallskip}
@@ -128,9 +133,15 @@
128133
\ifcsdef{dfadmon#1}{\csuse{dfadmon#1}{#2}}{\dfadmonnote{#2}}%
129134
}
130135
% sphinx.sty is loaded by \documentclass before the user preamble runs, so
131-
% sphinxadmonition is already defined here and \renewenvironment works directly.
136+
% sphinxadmonition and sphinxseealso are already defined here and
137+
% \renewenvironment works directly.
132138
\renewenvironment{sphinxadmonition}[2]{%
133139
\dfadmonbegin{#1}{#2}%
134140
}{%
135141
\end{tcolorbox}%
136142
}
143+
\renewenvironment{sphinxseealso}[1]{%
144+
\dfadmonseealso{#1}%
145+
}{%
146+
\end{tcolorbox}%
147+
}

0 commit comments

Comments
 (0)