import ast
from pathlib import Path
import re
+import shutil
+import string
from recommonmark.parser import CommonMarkParser
return str(ast.literal_eval(version))
+def make_pypi_svg(version):
+ template = CURRENT_DIR / '_static' / 'pypi_template.svg'
+ target = CURRENT_DIR / '_static' / 'pypi.svg'
+ with open(str(template), 'r', encoding='utf8') as f:
+ svg = string.Template(f.read()).substitute(version=version)
+ with open(str(target), 'w', encoding='utf8') as f:
+ f.write(svg)
+
+
+def make_filename(line):
+ non_letters = re.compile(r'[^a-z]+')
+ filename = line[3:].rstrip().lower()
+ filename = non_letters.sub('_', filename)
+ if filename.startswith('_'):
+ filename = filename[1:]
+ if filename.endswith('_'):
+ filename = filename[:-1]
+ return filename + '.md'
+
+
+def generate_sections_from_readme():
+ target_dir = CURRENT_DIR / '_build' / 'generated'
+ readme = CURRENT_DIR / '..' / 'README.md'
+ shutil.rmtree(str(target_dir), ignore_errors=True)
+ target_dir.mkdir(parents=True)
+
+ output = None
+ target_dir = target_dir.relative_to(CURRENT_DIR)
+ with open(str(readme), 'r', encoding='utf8') as f:
+ for line in f:
+ if line.startswith('## '):
+ if output is not None:
+ output.close()
+ filename = make_filename(line)
+ output_path = CURRENT_DIR / filename
+ if output_path.is_symlink() or output_path.is_file():
+ output_path.unlink()
+ output_path.symlink_to(target_dir / filename)
+ output = open(str(output_path), 'w', encoding='utf8')
+ output.write(
+ '[//]: # (NOTE: THIS FILE IS AUTOGENERATED FROM README.md)\n\n'
+ )
+
+ if output is None:
+ continue
+
+ if line.startswith('##'):
+ line = line[1:]
+
+ output.write(line)
+
+
# -- Project information -----------------------------------------------------
project = 'Black'
version = release
for sp in 'abcfr':
version = version.split(sp)[0]
+make_pypi_svg(release)
+generate_sections_from_readme()
+
# -- General configuration ---------------------------------------------------
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
+ 'sphinx.ext.napoleon',
]
# Add any paths that contain templates here, relative to this directory.
# -- Extension configuration -------------------------------------------------
+autodoc_member_order = 'bysource'
+
# -- Options for intersphinx extension ---------------------------------------
# Example configuration for intersphinx: refer to the Python standard library.