# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
-import os
-import sys
+import ast
+from pathlib import Path
+import re
+import shutil
+import string
-import recommonmark
+from recommonmark.parser import CommonMarkParser
-sys.path.insert(0, os.path.abspath('.' ))
+CURRENT_DIR = Path(__file__).parent
+
+
+def get_version():
+ black_py = CURRENT_DIR / '..' / 'black.py'
+ _version_re = re.compile(r'__version__\s+=\s+(?P<version>.*)')
+ with open(str(black_py), 'r', encoding='utf8') as f:
+ version = _version_re.search(f.read()).group('version')
+ 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
+ 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 -----------------------------------------------------
author = 'Łukasz Langa and contributors to Black'
# Autopopulate version
-import black
-# The short X.Y version.
-# TODO: fix for 2 digit month
-version = f'{black.__version__[:4]}'
# The full version, including alpha/beta/rc tags.
-release = black.__version__
+release = get_version()
+# The short X.Y version.
+version = release
+for sp in 'abcfr':
+ version = version.split(sp)[0]
+make_pypi_svg(release)
+generate_sections_from_readme()
+
# -- General configuration ---------------------------------------------------
templates_path = ['_templates']
source_parsers = {
- '.md': 'recommonmark.parser.CommonMarkParser',
+ '.md': CommonMarkParser,
}
# The suffix(es) of source filenames.
}
html_theme_options = {
- 'show_related': True,
- 'description': 'The uncompromising Python code formatter',
+ 'show_related': False,
+ 'description': '“Any color you like.”',
+ 'github_button': True,
'github_user': 'ambv',
'github_repo': 'black',
- 'github_button': True,
+ 'github_type': 'star',
'show_powered_by': True,
'fixed_sidebar': True,
+ 'logo': 'logo2.png',
}
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- (master_doc, 'black', 'Documentation for black',
+ (master_doc, 'black', 'Documentation for Black',
[author], 1)
]
# -- Options for intersphinx extension ---------------------------------------
# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {'https://docs.python.org/3/': None}
\ No newline at end of file
+intersphinx_mapping = {'https://docs.python.org/3/': None}