sphinx2rst moved to own package

This commit is contained in:
Ask Solem 2016-04-07 18:50:14 -07:00
Родитель fdf1a0f6a3
Коммит 79c36500b6
4 изменённых файлов: 16 добавлений и 173 удалений

Просмотреть файл

@ -7,7 +7,7 @@ CONTRIBUTING="CONTRIBUTING.rst"
CONFIGREF_SRC="docs/configuration.rst"
README_SRC="docs/templates/readme.txt"
CONTRIBUTING_SRC="docs/contributing.rst"
SPHINX2RST="extra/release/sphinx-to-rst.py"
SPHINX2RST="sphinx2rst"
WORKER_GRAPH_FULL="docs/images/worker_graph_full.png"
SPHINX_HTMLDIR = "${SPHINX_BUILDDIR}/html"
@ -52,7 +52,7 @@ readmecheck:
iconv -f ascii -t ascii $(README) >/dev/null
$(README):
$(PYTHON) $(SPHINX2RST) $(README_SRC) --ascii > $@
$(SPHINX2RST) $(README_SRC) --ascii > $@
readme: readmeclean $(README) readmecheck
@ -60,7 +60,7 @@ contributingclean:
-rm -f CONTRIBUTING.rst
$(CONTRIBUTING):
$(PYTHON) $(SPHINX2RST) $(CONTRIBUTING_SRC) > $@
$(SPHINX2RST) $(CONTRIBUTING_SRC) > $@
contributing: contributingclean $(CONTRIBUTING)

Просмотреть файл

@ -1,170 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
import codecs
import os
import re
import sys
from collections import Callable
from functools import partial
SAY = partial(print, file=sys.stderr)
dirname = ''
RE_CODE_BLOCK = re.compile(r'(\s*).. code-block:: (.+?)\s*$')
RE_INCLUDE = re.compile(r'\s*.. include:: (.+?)\s*$')
RE_REFERENCE = re.compile(r':(\w+):`(.+?)`')
RE_NAMED_REF = re.compile('(.+?)\<(.+)\>')
UNITABLE = {
'': '...',
'': '"',
'': '"',
}
X = re.compile(re.escape(''))
HEADER = re.compile('^[\=\~\-]+$')
UNIRE = re.compile('|'.join(re.escape(p) for p in UNITABLE),
re.UNICODE)
REFBASE = 'http://docs.celeryproject.org/en/latest'
REFS = {
'mailing-list':
'http://groups.google.com/group/celery-users',
'irc-channel': 'getting-started/resources.html#irc',
'breakpoint-signal': 'tutorials/debugging.html',
'internals-guide': 'internals/guide.html',
'bundles': 'getting-started/introduction.html#bundles',
'reporting-bugs': 'contributing.html#reporting-bugs',
}
pending_refs = {}
def _replace_handler(match, key=UNITABLE.__getitem__):
return key(match.group(0))
def include_file(lines, pos, match):
global dirname
orig_filename = match.groups()[0]
filename = os.path.join(dirname, orig_filename)
fh = codecs.open(filename, encoding='utf-8')
try:
old_dirname = dirname
dirname = os.path.dirname(orig_filename)
try:
lines[pos] = sphinx_to_rst(fh)
finally:
dirname = old_dirname
finally:
fh.close()
def asciify(lines):
prev_diff = None
for line in lines:
new_line = UNIRE.sub(_replace_handler, line)
if prev_diff and HEADER.match(new_line):
new_line = ''.join([
new_line.rstrip(), new_line[0] * prev_diff, '\n'])
prev_diff = len(new_line) - len(line)
yield new_line.encode('ascii')
def replace_code_block(lines, pos, match):
lines[pos] = ''
curpos = pos - 1
# Find the first previous line with text to append "::" to it.
while True:
prev_line = lines[curpos]
if not prev_line.isspace():
prev_line_with_text = curpos
break
curpos -= 1
if lines[prev_line_with_text].endswith(':'):
lines[prev_line_with_text] += ':'
else:
lines[prev_line_with_text] += match.group(1) + '::'
def _deref_default(target):
return r'``{0}``'.format(target)
def _deref_ref(target):
m = RE_NAMED_REF.match(target)
if m:
text, target = m.group(1).strip(), m.group(2).strip()
else:
text = target
try:
url = REFS[target]
except KeyError:
return _deref_default(target)
if '://' not in url:
url = '/'.join([REFBASE, url])
pending_refs[text] = url
return r'`{0}`_'.format(text)
DEREF = {'ref': _deref_ref}
def _deref(match):
return DEREF.get(match.group(1), _deref_default)(match.group(2))
def deref_all(line):
return RE_REFERENCE.subn(_deref, line)[0]
def resolve_ref(name, url):
return '\n.. _`{0}`: {1}\n'.format(name, url)
def resolve_pending_refs(lines):
for line in lines:
yield line
for name, url in pending_refs.items():
yield resolve_ref(name, url)
TO_RST_MAP = {RE_CODE_BLOCK: replace_code_block,
RE_INCLUDE: include_file}
def _process(lines, encoding='utf-8'):
lines = list(lines) # non-destructive
for i, line in enumerate(lines):
for regex, alt in TO_RST_MAP.items():
if isinstance(alt, Callable):
match = regex.match(line)
if match:
alt(lines, i, match)
line = lines[i]
else:
lines[i] = regex.sub(alt, line)
lines[i] = deref_all(lines[i])
if encoding == 'ascii':
lines = asciify(lines)
return resolve_pending_refs(lines)
def sphinx_to_rst(fh, encoding='utf-8'):
return ''.join(_process(fh, encoding))
if __name__ == '__main__':
global dirname
dirname = os.path.dirname(sys.argv[1])
encoding = 'ascii' if '--ascii' in sys.argv else 'utf-8'
fh = codecs.open(sys.argv[1], encoding='utf-8')
try:
print(sphinx_to_rst(fh, encoding).encode('utf-8'))
finally:
fh.close()

Просмотреть файл

@ -0,0 +1,12 @@
from __future__ import absolute_import, unicode_literals
REFBASE = 'http://docs.celeryproject.org/en/latest'
REFS = {
'mailing-list':
'http://groups.google.com/group/celery-users',
'irc-channel': 'getting-started/resources.html#irc',
'breakpoint-signal': 'tutorials/debugging.html',
'internals-guide': 'internals/guide.html',
'bundles': 'getting-started/introduction.html#bundles',
'reporting-bugs': 'contributing.html#reporting-bugs',
}

Просмотреть файл

@ -3,3 +3,4 @@ wheel>=0.29.0
flake8>=2.5.4
flakeplus>=1.1
tox>=2.3.1
sphinx2rst>=1.0