Skip to content

Commit 6fc683c

Browse files
committed
Move latex config to config file.
1 parent 850e5a3 commit 6fc683c

File tree

4 files changed

+139
-130
lines changed

4 files changed

+139
-130
lines changed

build_docs.py

+15-79
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
"""Build the Python docs for various branches and various languages.
44
55
Without any arguments builds docs for all active versions and
6-
languages configured in the config.ini file.
6+
languages.
7+
8+
Languages are stored in `config.toml` while versions are discovered
9+
from the devguide.
710
811
-q selects "quick build", which means to build only HTML.
912
@@ -20,7 +23,6 @@
2023
"""
2124

2225
from argparse import ArgumentParser
23-
import configparser
2426
from contextlib import suppress
2527
from dataclasses import dataclass
2628
import filecmp
@@ -47,6 +49,8 @@
4749
import zc.lockfile
4850
import jinja2
4951
import requests
52+
from tomlkit import parse
53+
5054

5155
HERE = Path(__file__).resolve().parent
5256

@@ -223,71 +227,6 @@ def filter(languages, language_tags=None):
223227
return languages
224228

225229

226-
227-
228-
XELATEX_DEFAULT = (
229-
"-D latex_engine=xelatex",
230-
"-D latex_elements.inputenc=",
231-
"-D latex_elements.fontenc=",
232-
)
233-
234-
LUALATEX_FOR_JP = (
235-
"-D latex_engine=lualatex",
236-
"-D latex_elements.inputenc=",
237-
"-D latex_elements.fontenc=",
238-
"-D latex_docclass.manual=ltjsbook",
239-
"-D latex_docclass.howto=ltjsarticle",
240-
241-
# supress polyglossia warnings
242-
"-D latex_elements.polyglossia=",
243-
"-D latex_elements.fontpkg=",
244-
245-
# preamble
246-
"-D latex_elements.preamble="
247-
248-
# Render non-Japanese letters with luatex
249-
# https://gist.github.com/zr-tex8r/e0931df922f38fbb67634f05dfdaf66b
250-
r"\\usepackage[noto-otf]{luatexja-preset}"
251-
r"\\usepackage{newunicodechar}"
252-
r"\\newunicodechar{^^^^212a}{K}"
253-
254-
# Workaround for the luatex-ja issue (Thanks to @jfbu)
255-
# https://github.com/sphinx-doc/sphinx/issues/11179#issuecomment-1420715092
256-
# https://osdn.net/projects/luatex-ja/ticket/47321
257-
r"\\makeatletter"
258-
r"\\titleformat{\\subsubsection}{\\normalsize\\py@HeaderFamily}"
259-
r"{\\py@TitleColor\\thesubsubsection}{0.5em}{\\py@TitleColor}"
260-
r"\\titleformat{\\paragraph}{\\normalsize\\py@HeaderFamily}"
261-
r"{\\py@TitleColor\\theparagraph}{0.5em}{\\py@TitleColor}"
262-
r"\\titleformat{\\subparagraph}{\\normalsize\\py@HeaderFamily}"
263-
r"{\\py@TitleColor\\thesubparagraph}{0.5em}{\\py@TitleColor}"
264-
r"\\makeatother"
265-
266-
# subpress warning: (fancyhdr)Make it at least 16.4pt
267-
r"\\setlength{\\footskip}{16.4pt}"
268-
)
269-
270-
XELATEX_WITH_FONTSPEC = (
271-
"-D latex_engine=xelatex",
272-
"-D latex_elements.inputenc=",
273-
r"-D latex_elements.fontenc=\\usepackage{fontspec}",
274-
)
275-
276-
XELATEX_FOR_KOREAN = (
277-
"-D latex_engine=xelatex",
278-
"-D latex_elements.inputenc=",
279-
"-D latex_elements.fontenc=",
280-
r"-D latex_elements.preamble=\\usepackage{kotex}\\setmainhangulfont"
281-
r"{UnBatang}\\setsanshangulfont{UnDotum}\\setmonohangulfont{UnTaza}",
282-
)
283-
284-
XELATEX_WITH_CJK = (
285-
"-D latex_engine=xelatex",
286-
"-D latex_elements.inputenc=",
287-
r"-D latex_elements.fontenc=\\usepackage{xeCJK}",
288-
)
289-
290-
291230
def run(cmd, cwd=None) -> subprocess.CompletedProcess:
292231
"""Like subprocess.run, with logging before and after the command execution."""
293232
cmd = [str(arg) for arg in cmd]
@@ -626,7 +565,8 @@ def parse_args():
626565
parser.add_argument(
627566
"--languages",
628567
nargs="*",
629-
help="Language translation, as a PEP 545 language tag like" " 'fr' or 'pt-br'. "
568+
help="Language translation, as a PEP 545 language tag like"
569+
" 'fr' or 'pt-br'. "
630570
"Use 'all' to build all of them (it's the default behavior).",
631571
metavar="fr",
632572
)
@@ -1061,20 +1001,18 @@ def parse_versions_from_devguide():
10611001

10621002

10631003
def parse_languages_from_config():
1064-
config = configparser.ConfigParser()
1065-
config.read(HERE / "config.ini")
1066-
versions, languages = [], []
1067-
for name, section in config.items():
1068-
if name == "DEFAULT":
1069-
continue
1004+
"""Read config.toml to discover languages to build."""
1005+
config = tomlkit.parse((HERE / "config.toml").read_text(encoding="UTF-8"))
1006+
languages = []
1007+
for name, section in config["languages"].items():
10701008
languages.append(
10711009
Language(
10721010
name,
10731011
section.get("iso639_tag", name),
10741012
section["name"],
1075-
section.getboolean("in_prod", True),
1076-
sphinxopts=globals()[section.get("sphinxopts", "XELATEX_DEFAULT")],
1077-
html_only=section.get("html_only", False),
1013+
section.get("in_prod", config["defaults"]["in_prod"]),
1014+
sphinxopts=section.get("sphinxopts", config["defaults"]["sphinxopts"]),
1015+
html_only=section.get("html_only", config["defaults"]["html_only"]),
10781016
)
10791017
)
10801018
return languages
@@ -1129,8 +1067,6 @@ def main():
11291067
lock.close()
11301068

11311069

1132-
1133-
11341070
if __name__ == "__main__":
11351071
all_built_successfully = main()
11361072
sys.exit(EX_OK if all_built_successfully else EX_FAILURE)

config.ini

-51
This file was deleted.

config.toml

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
[defaults]
2+
# name has no default, it is mandatory.
3+
# iso639_tag defaults to section key.
4+
in_prod = true
5+
html_only = false
6+
sphinxopts = [
7+
"-D latex_engine=xelatex",
8+
"-D latex_elements.inputenc=",
9+
"-D latex_elements.fontenc=",
10+
]
11+
12+
13+
[languages]
14+
15+
[languages.en]
16+
name = "English"
17+
18+
[languages.es]
19+
name = "Spanish"
20+
sphinxopts = [
21+
'-D latex_engine=xelatex',
22+
'-D latex_elements.inputenc=',
23+
'-D latex_elements.fontenc=\\usepackage{fontspec}',
24+
]
25+
26+
[languages.fr]
27+
name = "French"
28+
sphinxopts = [
29+
'-D latex_engine=xelatex',
30+
'-D latex_elements.inputenc=',
31+
'-D latex_elements.fontenc=\\usepackage{fontspec}',
32+
]
33+
34+
[languages.id]
35+
name = "Indonesian"
36+
in_prod = false
37+
38+
[languages.it]
39+
name = "Italian"
40+
in_prod = false
41+
42+
[languages.ja]
43+
name = "Japanese"
44+
html_only = true # See https://github.com/python/python-docs-ja/issues/35
45+
sphinxopts = [
46+
'-D latex_engine=lualatex',
47+
'-D latex_elements.inputenc=',
48+
'-D latex_elements.fontenc=',
49+
'-D latex_docclass.manual=ltjsbook',
50+
'-D latex_docclass.howto=ltjsarticle',
51+
52+
# supress polyglossia warnings
53+
'-D latex_elements.polyglossia=',
54+
'-D latex_elements.fontpkg=',
55+
56+
# preamble
57+
# Render non-Japanese letters with luatex
58+
# https://gist.github.com/zr-tex8r/e0931df922f38fbb67634f05dfdaf66b
59+
# Workaround for the luatex-ja issue (Thanks to @jfbu)
60+
# https://github.com/sphinx-doc/sphinx/issues/11179#issuecomment-1420715092
61+
# https://osdn.net/projects/luatex-ja/ticket/47321
62+
# subpress warning: (fancyhdr)Make it at least 16.4pt
63+
'''-D latex_elements.preamble=
64+
\\usepackage[noto-otf]{luatexja-preset}
65+
\\usepackage{newunicodechar}
66+
\\newunicodechar{^^^^212a}{K}
67+
\\makeatletter
68+
\\titleformat{\\subsubsection}{\\normalsize\\py@HeaderFamily}
69+
{\\py@TitleColor\\thesubsubsection}{0.5em}{\\py@TitleColor}
70+
\\titleformat{\\paragraph}{\\normalsize\\py@HeaderFamily}
71+
{\\py@TitleColor\\theparagraph}{0.5em}{\\py@TitleColor}
72+
\\titleformat{\\subparagraph}{\\normalsize\\py@HeaderFamily}
73+
{\\py@TitleColor\\thesubparagraph}{0.5em}{\\py@TitleColor}
74+
\\makeatother
75+
\\setlength{\\footskip}{16.4pt}'''
76+
]
77+
78+
[languages.ko]
79+
name = "Korean"
80+
sphinxopts = [
81+
'-D latex_engine=xelatex',
82+
'-D latex_elements.inputenc=',
83+
'-D latex_elements.fontenc=',
84+
'''-D latex_elements.preamble=
85+
\\usepackage{kotex}
86+
\\setmainhangulfont{UnBatang}
87+
\\setsanshangulfont{UnDotum}
88+
\\setmonohangulfont{UnTaza}''',
89+
]
90+
91+
[languages.pl]
92+
name = "Polish"
93+
in_prod = false
94+
95+
[languages.pt-br]
96+
iso639_tag = "pt_BR"
97+
name = "Brazilian Portuguese"
98+
99+
[languages.tr]
100+
name = "Turkish"
101+
102+
[languages.uk]
103+
name = "Ukrainian"
104+
in_prod = false
105+
html_only = true
106+
107+
[languages.zh-cn]
108+
iso639_tag = "zh_CN"
109+
name = "Simplified Chinese"
110+
sphinxopts = [
111+
'-D latex_engine=xelatex',
112+
'-D latex_elements.inputenc=',
113+
'-D latex_elements.fontenc=\\usepackage{xeCJK}',
114+
]
115+
116+
[languages.zh-tw]
117+
iso639_tag = "zh_TW"
118+
name = "Traditional Chinese"
119+
sphinxopts = [
120+
'-D latex_engine=xelatex',
121+
'-D latex_elements.inputenc=',
122+
'-D latex_elements.fontenc=\\usepackage{xeCJK}',
123+
]

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
jinja2
22
requests
33
sentry-sdk
4+
tomlkit
45
zc.lockfile

0 commit comments

Comments
 (0)