1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
import py
py.magic.autopath()
import py
pydir = py.path.local(py.__file__).dirpath()
distdir = pydir.dirpath()
dist_url = 'http://codespeak.net/svn/py/dist/'
#issue_url = 'http://codespeak.net/issue/py-dev/'
docdir = pydir.join('documentation')
reffile = docdir / 'talk' / '_ref.txt'
linkrex = py.std.re.compile('`(\S+)`_')
name2target = {}
def addlink(linkname, linktarget):
assert linkname and linkname != '/'
if linktarget in name2target:
if linkname in name2target[linktarget]:
return
name2target.setdefault(linktarget, []).append(linkname)
for textfile in docdir.visit(lambda x: x.ext == '.txt',
lambda x: x.check(dotfile=0)):
for linkname in linkrex.findall(textfile.read()):
if '/' in linkname:
for startloc in ('', 'py'):
cand = distdir.join(startloc, linkname)
if cand.check():
rel = cand.relto(distdir)
# we are in py/doc/x.txt
count = rel.count("/") + 1
target = '../' * count + rel
addlink(linkname, target)
break
else:
print "WARNING %s: link %r may be bogus" %(textfile, linkname)
elif linkname.startswith('issue'):
addlink(linkname, issue_url+linkname)
items = name2target.items()
items.sort()
lines = []
for linktarget, linknamelist in items:
linknamelist.sort()
for linkname in linknamelist[:-1]:
lines.append(".. _`%s`:" % linkname)
lines.append(".. _`%s`: %s" %(linknamelist[-1], linktarget))
reffile.write("\n".join(lines))
print "wrote %d references to %r" %(len(lines), reffile)
#print "last ten lines"
#for x in lines[-10:]: print x
|