Add a filterable HTML version of Misc/NEWS to the docs "whatsnew" section.

This commit is contained in:
Georg Brandl 2012-09-30 15:10:06 +02:00
parent eea74276cc
commit 2cac28b37e
4 changed files with 79 additions and 0 deletions

View File

@ -8,6 +8,23 @@
{% block extrahead %} {% block extrahead %}
<link rel="shortcut icon" type="image/png" href="{{ pathto('_static/py.png', 1) }}" /> <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 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() }} {{ super() }}
{% endblock %} {% endblock %}
{% block footer %} {% block footer %}

View File

@ -145,6 +145,45 @@ class DeprecatedRemoved(Directive):
return ret 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 # Support for building "topic help" for pydoc
pydoc_topic_labels = [ pydoc_topic_labels = [
@ -276,3 +315,4 @@ def setup(app):
app.add_description_unit('2to3fixer', '2to3fixer', '%s (2to3 fixer)') app.add_description_unit('2to3fixer', '2to3fixer', '%s (2to3 fixer)')
app.add_directive_to_domain('py', 'decorator', PyDecoratorFunction) app.add_directive_to_domain('py', 'decorator', PyDecoratorFunction)
app.add_directive_to_domain('py', 'decoratormethod', PyDecoratorMethod) app.add_directive_to_domain('py', 'decoratormethod', PyDecoratorMethod)
app.add_directive('miscnews', MiscNews)

View File

@ -23,3 +23,11 @@ anyone wishing to stay up-to-date after a new release.
2.2.rst 2.2.rst
2.1.rst 2.1.rst
2.0.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

14
Doc/whatsnew/news.rst Normal file
View File

@ -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