[Python-checkins] cpython (3.3): Add a filterable HTML version of Misc/NEWS to the docs "whatsnew" section.

georg.brandl python-checkins at python.org
Sun Sep 30 15:10:16 CEST 2012


http://hg.python.org/cpython/rev/6347fb67239a
changeset:   79321:6347fb67239a
branch:      3.3
user:        Georg Brandl <georg at python.org>
date:        Sun Sep 30 15:10:06 2012 +0200
summary:
  Add a filterable HTML version of Misc/NEWS to the docs "whatsnew" section.

files:
  Doc/tools/sphinxext/layout.html   |  17 ++++++++
  Doc/tools/sphinxext/pyspecific.py |  40 +++++++++++++++++++
  Doc/whatsnew/index.rst            |   8 +++
  Doc/whatsnew/news.rst             |  14 ++++++
  4 files changed, 79 insertions(+), 0 deletions(-)


diff --git a/Doc/tools/sphinxext/layout.html b/Doc/tools/sphinxext/layout.html
--- a/Doc/tools/sphinxext/layout.html
+++ b/Doc/tools/sphinxext/layout.html
@@ -8,6 +8,23 @@
 {% block extrahead %}
     <link rel="shortcut icon" type="image/png" href="{{ pathto('_static/py.png', 1) }}" />
     {% if not embedded %}<script type="text/javascript" src="{{ pathto('_static/copybutton.js', 1) }}"></script>{% endif %}
+    {% if pagename == 'whatsnew/news' %}
+    <script type="text/javascript">
+      function dofilter() {
+        var el = document.getElementById('searchbox');
+        var string = el.value.toLowerCase();
+        var litags = document.getElementsByTagName('li')
+        for (var idx = 0; idx < litags.length; idx++) {
+          var li = litags[idx];
+          if (li.innerHTML.toLowerCase().indexOf(string) >= 0) {
+            li.style.display = '';
+          } else {
+            li.style.display = 'none';
+          }
+        }
+      }
+    </script>
+    {% endif %}
 {{ super() }}
 {% endblock %}
 {% block footer %}
diff --git a/Doc/tools/sphinxext/pyspecific.py b/Doc/tools/sphinxext/pyspecific.py
--- a/Doc/tools/sphinxext/pyspecific.py
+++ b/Doc/tools/sphinxext/pyspecific.py
@@ -145,6 +145,45 @@
         return ret
 
 
+# Support for including Misc/NEWS
+
+import re
+import codecs
+from docutils.statemachine import string2lines
+from sphinx.util.nodes import nested_parse_with_titles
+
+issue_re = re.compile('Issue #([0-9]+)')
+
+class MiscNews(Directive):
+    has_content = False
+    required_arguments = 1
+    optional_arguments = 0
+    final_argument_whitespace = False
+    option_spec = {}
+
+    def run(self):
+        fname = self.arguments[0]
+        source = self.state_machine.input_lines.source(
+            self.lineno - self.state_machine.input_offset - 1)
+        source_dir = path.dirname(path.abspath(source))
+        try:
+            fp = codecs.open(path.join(source_dir, fname), encoding='utf-8')
+            try:
+                content = fp.read()
+            finally:
+                fp.close()
+        except Exception:
+            text = 'The NEWS file is not available.'
+            node = nodes.strong(text, text)
+            return [node]
+        content = issue_re.sub(r'`Issue #\1 <http://bugs.python.org/\1>`__',
+                               content)
+        # remove first 3 lines as they are the main heading
+        lines = content.splitlines()[3:]
+        self.state_machine.insert_input(lines, fname)
+        return []
+
+
 # Support for building "topic help" for pydoc
 
 pydoc_topic_labels = [
@@ -276,3 +315,4 @@
     app.add_description_unit('2to3fixer', '2to3fixer', '%s (2to3 fixer)')
     app.add_directive_to_domain('py', 'decorator', PyDecoratorFunction)
     app.add_directive_to_domain('py', 'decoratormethod', PyDecoratorMethod)
+    app.add_directive('miscnews', MiscNews)
diff --git a/Doc/whatsnew/index.rst b/Doc/whatsnew/index.rst
--- a/Doc/whatsnew/index.rst
+++ b/Doc/whatsnew/index.rst
@@ -23,3 +23,11 @@
    2.2.rst
    2.1.rst
    2.0.rst
+
+The "Python News" is a HTML version of the file :source:`Misc/NEWS` which
+contains *all* nontrivial changes to Python.
+
+.. toctree::
+   :maxdepth: 1
+
+   news.rst
diff --git a/Doc/whatsnew/news.rst b/Doc/whatsnew/news.rst
new file mode 100644
--- /dev/null
+++ b/Doc/whatsnew/news.rst
@@ -0,0 +1,14 @@
++++++++++++
+Python News
++++++++++++
+
+.. raw:: html
+
+   <p>
+   Filter entries by content:
+   <input type="text" value="" id="searchbox" style="width: 50%" onchange="dofilter()">
+   <input type="submit" value="Filter" onclick="dofilter()">
+   </p>
+
+.. miscnews:: ../../Misc/NEWS
+

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list