diff options
-rw-r--r-- | doc/build/builder/changelog.py | 26 | ||||
-rw-r--r-- | doc/build/static/docs.css | 8 |
2 files changed, 31 insertions, 3 deletions
diff --git a/doc/build/builder/changelog.py b/doc/build/builder/changelog.py index 1d24d486c..023d11818 100644 --- a/doc/build/builder/changelog.py +++ b/doc/build/builder/changelog.py @@ -5,6 +5,7 @@ from docutils import nodes import textwrap import itertools import collections +import md5 def _comma_list(text): return re.split(r"\s*,\s*", text.strip()) @@ -147,9 +148,19 @@ class ChangeLogDirective(EnvDirective, Directive): def _render_rec(self, rec, section, cat, append_sec): para = rec['node'].deepcopy() - #targetid = "%s-%d" % (self.type_, self.env.new_serialno(self.type_)) - #targetnode = nodes.target('', '', ids=[targetid]) - #para.insert(0, targetnode) + text = _text_rawsource_from_node(para) + if len(text) > 50: + targetid = "%s-%s" % (self.type_, + md5.md5(text[0:100].encode('ascii', 'ignore') + ).hexdigest()) + targetnode = nodes.target('', '', ids=[targetid]) + para.insert(0, targetnode) + permalink = nodes.reference('', '', + nodes.Text("(link)", "(link)"), + refid=targetid, + classes=['changeset-link'] + ) + para.append(permalink) insert_ticket = nodes.paragraph('') para.append(insert_ticket) @@ -224,6 +235,15 @@ class ChangeDirective(EnvDirective, Directive): return [] +def _text_rawsource_from_node(node): + src = [] + stack = [node] + while stack: + n = stack.pop(0) + if isinstance(n, nodes.Text): + src.append(n.rawsource) + stack.extend(n.children) + return "".join(src) def _rst2sphinx(text): return StringList( diff --git a/doc/build/static/docs.css b/doc/build/static/docs.css index a5a0cba8d..1243c2a65 100644 --- a/doc/build/static/docs.css +++ b/doc/build/static/docs.css @@ -305,6 +305,14 @@ a.headerlink:hover { background-color: #900; } +/* changeset stuff */ + +#docs-container a.changeset-link { + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + /* docutils-specific elements */ th.field-name { |