summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sphinx/util/__init__.py8
-rw-r--r--sphinx/util/compat.py3
-rw-r--r--sphinx/util/console.py8
-rw-r--r--sphinx/util/docfields.py8
-rw-r--r--sphinx/util/inspect.py10
-rw-r--r--sphinx/util/jsdump.py4
-rw-r--r--sphinx/util/jsonimpl.py3
-rw-r--r--sphinx/util/matching.py3
-rw-r--r--sphinx/util/nodes.py18
-rw-r--r--sphinx/util/osutil.py5
-rw-r--r--sphinx/util/pycompat.py13
-rw-r--r--sphinx/util/smartypants.py3
-rw-r--r--sphinx/util/stemmer.py201
-rw-r--r--sphinx/util/tags.py5
-rw-r--r--sphinx/util/texescape.py6
-rw-r--r--sphinx/util/websupport.py2
16 files changed, 200 insertions, 100 deletions
diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py
index 4e4c117fc..1449fcf86 100644
--- a/sphinx/util/__init__.py
+++ b/sphinx/util/__init__.py
@@ -21,7 +21,7 @@ from os import path
from codecs import open, BOM_UTF8
from collections import deque
-from six import iteritems, text_type, binary_type, string_types
+from six import iteritems, text_type, binary_type
from six.moves import range
import docutils
from docutils.utils import relative_path
@@ -189,6 +189,7 @@ _DEBUG_HEADER = '''\
# Loaded extensions:
'''
+
def save_traceback(app):
"""Save the current exception's traceback in a temporary file."""
import platform
@@ -279,6 +280,7 @@ def get_full_modname(modname, attribute):
# a regex to recognize coding cookies
_coding_re = re.compile(r'coding[:=]\s*([-\w.]+)')
+
def detect_encoding(readline):
"""Like tokenize.detect_encoding() from Py3k, but a bit simplified."""
@@ -390,8 +392,10 @@ def force_decode(string, encoding):
class attrdict(dict):
def __getattr__(self, key):
return self[key]
+
def __setattr__(self, key, val):
self[key] = val
+
def __delattr__(self, key):
del self[key]
@@ -438,7 +442,7 @@ def split_index_msg(type, value):
def format_exception_cut_frames(x=1):
"""Format an exception with traceback, but only the last x frames."""
typ, val, tb = sys.exc_info()
- #res = ['Traceback (most recent call last):\n']
+ # res = ['Traceback (most recent call last):\n']
res = []
tbres = traceback.format_tb(tb)
res += tbres[-x:]
diff --git a/sphinx/util/compat.py b/sphinx/util/compat.py
index a9c492776..de6266880 100644
--- a/sphinx/util/compat.py
+++ b/sphinx/util/compat.py
@@ -11,6 +11,7 @@
import warnings
from docutils import nodes
+from docutils.parsers.rst import Directive
from docutils import __version__ as _du_version
docutils_version = tuple(int(x) for x in _du_version.split('.')[:2])
@@ -35,5 +36,3 @@ def make_admonition(node_class, name, arguments, options, content, lineno,
admonition_node['classes'] += classes
state.nested_parse(content, content_offset, admonition_node)
return [admonition_node]
-
-from docutils.parsers.rst import Directive
diff --git a/sphinx/util/console.py b/sphinx/util/console.py
index 24d3e4568..ee6e4ea91 100644
--- a/sphinx/util/console.py
+++ b/sphinx/util/console.py
@@ -22,6 +22,7 @@ except ImportError:
_ansi_re = re.compile('\x1b\\[(\\d\\d;){0,2}\\d\\dm')
codes = {}
+
def get_terminal_width():
"""Borrowed from the py lib."""
try:
@@ -41,6 +42,8 @@ def get_terminal_width():
_tw = get_terminal_width()
+
+
def term_width_line(text):
if not codes:
# if no coloring, don't output fancy backspaces
@@ -49,6 +52,7 @@ def term_width_line(text):
# codes are not displayed, this must be taken into account
return text.ljust(_tw + len(text) - len(_ansi_re.sub('', text))) + '\r'
+
def color_terminal():
if sys.platform == 'win32' and colorama is not None:
colorama.init()
@@ -70,15 +74,19 @@ def nocolor():
colorama.deinit()
codes.clear()
+
def coloron():
codes.update(_orig_codes)
+
def colorize(name, text):
return codes.get(name, '') + text + codes.get('reset', '')
+
def strip_colors(s):
return re.compile('\x1b.*?m').sub('', s)
+
def create_color_func(name):
def inner(text):
return colorize(name, text)
diff --git a/sphinx/util/docfields.py b/sphinx/util/docfields.py
index 514efad81..c654fed32 100644
--- a/sphinx/util/docfields.py
+++ b/sphinx/util/docfields.py
@@ -74,8 +74,8 @@ class Field(object):
fieldarg, nodes.Text)
if len(content) == 1 and (
isinstance(content[0], nodes.Text) or
- (isinstance(content[0], nodes.inline) and len(content[0]) == 1
- and isinstance(content[0][0], nodes.Text))):
+ (isinstance(content[0], nodes.inline) and len(content[0]) == 1 and
+ isinstance(content[0][0], nodes.Text))):
content = [self.make_xref(self.bodyrolename, domain,
content[0].astext(), contnode=content[0])]
fieldbody = nodes.field_body('', nodes.paragraph('', '', *content))
@@ -234,7 +234,7 @@ class DocFieldTransformer(object):
# match the spec; capitalize field name and be done with it
new_fieldname = fieldtype[0:1].upper() + fieldtype[1:]
if fieldarg:
- new_fieldname += ' ' + fieldarg
+ new_fieldname += ' ' + fieldarg
fieldname[0] = nodes.Text(new_fieldname)
entries.append(field)
continue
@@ -265,7 +265,7 @@ class DocFieldTransformer(object):
pass
else:
types.setdefault(typename, {})[argname] = \
- [nodes.Text(argtype)]
+ [nodes.Text(argtype)]
fieldarg = argname
translatable_content = nodes.inline(fieldbody.rawsource,
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py
index d2d5dd0a3..42b79ab75 100644
--- a/sphinx/util/inspect.py
+++ b/sphinx/util/inspect.py
@@ -11,20 +11,21 @@
import re
-# this imports the standard library inspect module without resorting to
-# relatively import this module
-inspect = __import__('inspect')
-
from six import PY3, binary_type
from six.moves import builtins
from sphinx.util import force_decode
+# this imports the standard library inspect module without resorting to
+# relatively import this module
+inspect = __import__('inspect')
+
memory_address_re = re.compile(r' at 0x[0-9a-f]{8,16}(?=>$)')
if PY3:
from functools import partial
+
def getargspec(func):
"""Like inspect.getargspec but supports functools.partial as well."""
if inspect.ismethod(func):
@@ -61,6 +62,7 @@ if PY3:
else: # 2.6, 2.7
from functools import partial
+
def getargspec(func):
"""Like inspect.getargspec but supports functools.partial as well."""
if inspect.ismethod(func):
diff --git a/sphinx/util/jsdump.py b/sphinx/util/jsdump.py
index 49813672d..362f67942 100644
--- a/sphinx/util/jsdump.py
+++ b/sphinx/util/jsdump.py
@@ -53,6 +53,7 @@ def encode_string(s):
return '\\u%04x\\u%04x' % (s1, s2)
return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
+
def decode_string(s):
return ESCAPED.sub(lambda m: eval(u + '"' + m.group() + '"'), s)
@@ -74,6 +75,7 @@ delete implements short while
do import static with
double in super""".split())
+
def dumps(obj, key=False):
if key:
if not isinstance(obj, string_types):
@@ -101,6 +103,7 @@ def dumps(obj, key=False):
return encode_string(obj)
raise TypeError(type(obj))
+
def dump(obj, f):
f.write(dumps(obj))
@@ -195,5 +198,6 @@ def loads(x):
raise ValueError("nothing loaded from string")
return obj
+
def load(f):
return loads(f.read())
diff --git a/sphinx/util/jsonimpl.py b/sphinx/util/jsonimpl.py
index 1d296b6b7..38e1b13cb 100644
--- a/sphinx/util/jsonimpl.py
+++ b/sphinx/util/jsonimpl.py
@@ -27,12 +27,15 @@ def dump(obj, fp, *args, **kwds):
kwds['cls'] = SphinxJSONEncoder
return json.dump(obj, fp, *args, **kwds)
+
def dumps(obj, *args, **kwds):
kwds['cls'] = SphinxJSONEncoder
return json.dumps(obj, *args, **kwds)
+
def load(*args, **kwds):
return json.load(*args, **kwds)
+
def loads(*args, **kwds):
return json.loads(*args, **kwds)
diff --git a/sphinx/util/matching.py b/sphinx/util/matching.py
index e7befcd2f..b3bbdcd14 100644
--- a/sphinx/util/matching.py
+++ b/sphinx/util/matching.py
@@ -57,18 +57,21 @@ def _translate_pattern(pat):
res += re.escape(c)
return res + '$'
+
def compile_matchers(patterns):
return [re.compile(_translate_pattern(pat)).match for pat in patterns]
_pat_cache = {}
+
def patmatch(name, pat):
"""Return if name matches pat. Adapted from fnmatch module."""
if pat not in _pat_cache:
_pat_cache[pat] = re.compile(_translate_pattern(pat))
return _pat_cache[pat].match(name)
+
def patfilter(names, pat):
"""Return the subset of the list NAMES that match PAT.
diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py
index e6ccc3733..107626206 100644
--- a/sphinx/util/nodes.py
+++ b/sphinx/util/nodes.py
@@ -71,14 +71,16 @@ IGNORED_NODES = (
nodes.Inline,
nodes.literal_block,
nodes.doctest_block,
- #XXX there are probably more
+ # XXX there are probably more
)
+
+
def is_translatable(node):
if isinstance(node, nodes.TextElement):
apply_source_workaround(node)
if not node.source:
- return False # built-in message
+ return False # built-in message
if isinstance(node, IGNORED_NODES) and 'translatable' not in node:
return False
# <field_name>orphan</field_name>
@@ -101,6 +103,8 @@ LITERAL_TYPE_NODES = (
IMAGE_TYPE_NODES = (
nodes.image,
)
+
+
def extract_messages(doctree):
"""Extract translatable messages from a document tree."""
for node in doctree.traverse(is_translatable):
@@ -184,6 +188,7 @@ indextypes = [
'single', 'pair', 'double', 'triple', 'see', 'seealso',
]
+
def process_index_entry(entry, targetid):
indexentries = []
entry = entry.strip()
@@ -233,7 +238,8 @@ def inline_all_toctrees(builder, docnameset, docname, tree, colorfunc):
try:
builder.info(colorfunc(includefile) + " ", nonl=1)
subtree = inline_all_toctrees(builder, docnameset, includefile,
- builder.env.get_doctree(includefile), colorfunc)
+ builder.env.get_doctree(includefile),
+ colorfunc)
docnameset.add(includefile)
except Exception:
builder.warn('toctree contains ref to nonexisting '
@@ -256,8 +262,8 @@ def make_refnode(builder, fromdocname, todocname, targetid, child, title=None):
if fromdocname == todocname:
node['refid'] = targetid
else:
- node['refuri'] = (builder.get_relative_uri(fromdocname, todocname)
- + '#' + targetid)
+ node['refuri'] = (builder.get_relative_uri(fromdocname, todocname) +
+ '#' + targetid)
if title:
node['reftitle'] = title
node.append(child)
@@ -268,9 +274,11 @@ def set_source_info(directive, node):
node.source, node.line = \
directive.state_machine.get_source_and_line(directive.lineno)
+
def set_role_source_info(inliner, lineno, node):
node.source, node.line = inliner.reporter.get_source_and_line(lineno)
+
# monkey-patch Element.copy to copy the rawsource
def _new_copy(self):
diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py
index 0645ee46f..46f908292 100644
--- a/sphinx/util/osutil.py
+++ b/sphinx/util/osutil.py
@@ -36,6 +36,7 @@ EINVAL = getattr(errno, 'EINVAL', 0)
# hangover from more *nix-oriented origins.
SEP = "/"
+
def os_path(canonicalpath):
return canonicalpath.replace(SEP, path.sep)
@@ -59,7 +60,7 @@ def relative_uri(base, to):
if len(b2) == 1 and t2 == ['']:
# Special case: relative_uri('f/index.html','f/') should
# return './', not ''
- return '.' + SEP
+ return '.' + SEP
return ('..' + SEP) * (len(b2)-1) + SEP.join(t2)
@@ -147,6 +148,7 @@ def copyfile(source, dest):
no_fn_re = re.compile(r'[^a-zA-Z0-9_-]')
+
def make_filename(string):
return no_fn_re.sub('', string) or 'sphinx'
@@ -167,6 +169,7 @@ def safe_relpath(path, start=None):
except ValueError:
return path
+
def find_catalog(docname, compaction):
if compaction:
ret = docname.split(SEP, 1)[0]
diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py
index a3ea36ba4..5a2fd173b 100644
--- a/sphinx/util/pycompat.py
+++ b/sphinx/util/pycompat.py
@@ -22,12 +22,14 @@ if PY3:
# prefix for Unicode strings
u = ''
from io import TextIOWrapper
+
# safely encode a string for printing to the terminal
def terminal_safe(s):
return s.encode('ascii', 'backslashreplace').decode('ascii')
# some kind of default system encoding; should be used with a lenient
# error handler
sys_encoding = sys.getdefaultencoding()
+
# support for running 2to3 over config files
def convert_with_2to3(filepath):
from lib2to3.refactor import RefactoringTool, get_fixers_from_package
@@ -46,11 +48,11 @@ if PY3:
from html import escape as htmlescape # >= Python 3.2
class UnicodeMixin:
- """Mixin class to handle defining the proper __str__/__unicode__
- methods in Python 2 or 3."""
+ """Mixin class to handle defining the proper __str__/__unicode__
+ methods in Python 2 or 3."""
- def __str__(self):
- return self.__unicode__()
+ def __str__(self):
+ return self.__unicode__()
from textwrap import indent
@@ -59,8 +61,10 @@ else:
u = 'u'
# no need to refactor on 2.x versions
convert_with_2to3 = None
+
def TextIOWrapper(stream, encoding):
return codecs.lookup(encoding or 'ascii')[2](stream)
+
# safely encode a string for printing to the terminal
def terminal_safe(s):
return s.encode('ascii', 'backslashreplace')
@@ -127,6 +131,7 @@ from six.moves import zip_longest
import io
from itertools import product
+
class _DeprecationWrapper(object):
def __init__(self, mod, deprecated):
self._mod = mod
diff --git a/sphinx/util/smartypants.py b/sphinx/util/smartypants.py
index a92327dcc..a0357e92f 100644
--- a/sphinx/util/smartypants.py
+++ b/sphinx/util/smartypants.py
@@ -153,6 +153,7 @@ closing_single_quotes_regex_2 = re.compile(r"""
(\s | s\b)
""" % (close_class,), re.VERBOSE)
+
def educate_quotes(s):
"""
Parameter: String.
@@ -232,7 +233,7 @@ def educate_quotes_latex(s, dquotes=("``", "''")):
# Finally, replace all helpers with quotes.
return s.replace("\x01", dquotes[0]).replace("\x02", dquotes[1]).\
- replace("\x03", "`").replace("\x04", "'")
+ replace("\x03", "`").replace("\x04", "'")
def educate_backticks(s):
diff --git a/sphinx/util/stemmer.py b/sphinx/util/stemmer.py
index 6d011b85c..47fc41e87 100644
--- a/sphinx/util/stemmer.py
+++ b/sphinx/util/stemmer.py
@@ -28,6 +28,7 @@
:license: Public Domain ("can be used free of charge for any purpose").
"""
+
class PorterStemmer(object):
def __init__(self):
@@ -49,7 +50,7 @@ class PorterStemmer(object):
def cons(self, i):
"""cons(i) is TRUE <=> b[i] is a consonant."""
if self.b[i] == 'a' or self.b[i] == 'e' or self.b[i] == 'i' \
- or self.b[i] == 'o' or self.b[i] == 'u':
+ or self.b[i] == 'o' or self.b[i] == 'u':
return 0
if self.b[i] == 'y':
if i == self.k0:
@@ -120,7 +121,7 @@ class PorterStemmer(object):
snow, box, tray.
"""
if i < (self.k0 + 2) or not self.cons(i) or self.cons(i-1) \
- or not self.cons(i-2):
+ or not self.cons(i-2):
return 0
ch = self.b[i]
if ch == 'w' or ch == 'x' or ch == 'y':
@@ -130,7 +131,7 @@ class PorterStemmer(object):
def ends(self, s):
"""ends(s) is TRUE <=> k0,...k ends with the string s."""
length = len(s)
- if s[length - 1] != self.b[self.k]: # tiny speed-up
+ if s[length - 1] != self.b[self.k]: # tiny speed-up
return 0
if length > (self.k - self.k0 + 1):
return 0
@@ -184,9 +185,12 @@ class PorterStemmer(object):
self.k = self.k - 1
elif (self.ends("ed") or self.ends("ing")) and self.vowelinstem():
self.k = self.j
- if self.ends("at"): self.setto("ate")
- elif self.ends("bl"): self.setto("ble")
- elif self.ends("iz"): self.setto("ize")
+ if self.ends("at"):
+ self.setto("ate")
+ elif self.ends("bl"):
+ self.setto("ble")
+ elif self.ends("iz"):
+ self.setto("ize")
elif self.doublec(self.k):
self.k = self.k - 1
ch = self.b[self.k]
@@ -207,100 +211,159 @@ class PorterStemmer(object):
string before the suffix must give m() > 0.
"""
if self.b[self.k - 1] == 'a':
- if self.ends("ational"): self.r("ate")
- elif self.ends("tional"): self.r("tion")
+ if self.ends("ational"):
+ self.r("ate")
+ elif self.ends("tional"):
+ self.r("tion")
elif self.b[self.k - 1] == 'c':
- if self.ends("enci"): self.r("ence")
- elif self.ends("anci"): self.r("ance")
+ if self.ends("enci"):
+ self.r("ence")
+ elif self.ends("anci"):
+ self.r("ance")
elif self.b[self.k - 1] == 'e':
- if self.ends("izer"): self.r("ize")
+ if self.ends("izer"):
+ self.r("ize")
elif self.b[self.k - 1] == 'l':
- if self.ends("bli"): self.r("ble") # --DEPARTURE--
+ if self.ends("bli"):
+ self.r("ble") # --DEPARTURE--
# To match the published algorithm, replace this phrase with
# if self.ends("abli"): self.r("able")
- elif self.ends("alli"): self.r("al")
- elif self.ends("entli"): self.r("ent")
- elif self.ends("eli"): self.r("e")
- elif self.ends("ousli"): self.r("ous")
+ elif self.ends("alli"):
+ self.r("al")
+ elif self.ends("entli"):
+ self.r("ent")
+ elif self.ends("eli"):
+ self.r("e")
+ elif self.ends("ousli"):
+ self.r("ous")
elif self.b[self.k - 1] == 'o':
- if self.ends("ization"): self.r("ize")
- elif self.ends("ation"): self.r("ate")
- elif self.ends("ator"): self.r("ate")
+ if self.ends("ization"):
+ self.r("ize")
+ elif self.ends("ation"):
+ self.r("ate")
+ elif self.ends("ator"):
+ self.r("ate")
elif self.b[self.k - 1] == 's':
- if self.ends("alism"): self.r("al")
- elif self.ends("iveness"): self.r("ive")
- elif self.ends("fulness"): self.r("ful")
- elif self.ends("ousness"): self.r("ous")
+ if self.ends("alism"):
+ self.r("al")
+ elif self.ends("iveness"):
+ self.r("ive")
+ elif self.ends("fulness"):
+ self.r("ful")
+ elif self.ends("ousness"):
+ self.r("ous")
elif self.b[self.k - 1] == 't':
- if self.ends("aliti"): self.r("al")
- elif self.ends("iviti"): self.r("ive")
- elif self.ends("biliti"): self.r("ble")
- elif self.b[self.k - 1] == 'g': # --DEPARTURE--
- if self.ends("logi"): self.r("log")
+ if self.ends("aliti"):
+ self.r("al")
+ elif self.ends("iviti"):
+ self.r("ive")
+ elif self.ends("biliti"):
+ self.r("ble")
+ elif self.b[self.k - 1] == 'g': # --DEPARTURE--
+ if self.ends("logi"):
+ self.r("log")
# To match the published algorithm, delete this phrase
def step3(self):
"""step3() dels with -ic-, -full, -ness etc. similar strategy
to step2."""
if self.b[self.k] == 'e':
- if self.ends("icate"): self.r("ic")
- elif self.ends("ative"): self.r("")
- elif self.ends("alize"): self.r("al")
+ if self.ends("icate"):
+ self.r("ic")
+ elif self.ends("ative"):
+ self.r("")
+ elif self.ends("alize"):
+ self.r("al")
elif self.b[self.k] == 'i':
- if self.ends("iciti"): self.r("ic")
+ if self.ends("iciti"):
+ self.r("ic")
elif self.b[self.k] == 'l':
- if self.ends("ical"): self.r("ic")
- elif self.ends("ful"): self.r("")
+ if self.ends("ical"):
+ self.r("ic")
+ elif self.ends("ful"):
+ self.r("")
elif self.b[self.k] == 's':
- if self.ends("ness"): self.r("")
+ if self.ends("ness"):
+ self.r("")
def step4(self):
"""step4() takes off -ant, -ence etc., in context <c>vcvc<v>."""
if self.b[self.k - 1] == 'a':
- if self.ends("al"): pass
- else: return
+ if self.ends("al"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'c':
- if self.ends("ance"): pass
- elif self.ends("ence"): pass
- else: return
+ if self.ends("ance"):
+ pass
+ elif self.ends("ence"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'e':
- if self.ends("er"): pass
- else: return
+ if self.ends("er"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'i':
- if self.ends("ic"): pass
- else: return
+ if self.ends("ic"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'l':
- if self.ends("able"): pass
- elif self.ends("ible"): pass
- else: return
+ if self.ends("able"):
+ pass
+ elif self.ends("ible"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'n':
- if self.ends("ant"): pass
- elif self.ends("ement"): pass
- elif self.ends("ment"): pass
- elif self.ends("ent"): pass
- else: return
+ if self.ends("ant"):
+ pass
+ elif self.ends("ement"):
+ pass
+ elif self.ends("ment"):
+ pass
+ elif self.ends("ent"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'o':
- if self.ends("ion") and (self.b[self.j] == 's'
- or self.b[self.j] == 't'): pass
- elif self.ends("ou"): pass
+ if self.ends("ion") and (self.b[self.j] == 's' or
+ self.b[self.j] == 't'):
+ pass
+ elif self.ends("ou"):
+ pass
# takes care of -ous
- else: return
+ else:
+ return
elif self.b[self.k - 1] == 's':
- if self.ends("ism"): pass
- else: return
+ if self.ends("ism"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 't':
- if self.ends("ate"): pass
- elif self.ends("iti"): pass
- else: return
+ if self.ends("ate"):
+ pass
+ elif self.ends("iti"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'u':
- if self.ends("ous"): pass
- else: return
+ if self.ends("ous"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'v':
- if self.ends("ive"): pass
- else: return
+ if self.ends("ive"):
+ pass
+ else:
+ return
elif self.b[self.k - 1] == 'z':
- if self.ends("ize"): pass
- else: return
+ if self.ends("ize"):
+ pass
+ else:
+ return
else:
return
if self.m() > 1:
@@ -316,7 +379,7 @@ class PorterStemmer(object):
if a > 1 or (a == 1 and not self.cvc(self.k-1)):
self.k = self.k - 1
if self.b[self.k] == 'l' and self.doublec(self.k) and self.m() > 1:
- self.k = self.k -1
+ self.k = self.k - 1
def stem(self, p, i, j):
"""In stem(p,i,j), p is a char pointer, and the string to be stemmed
@@ -332,7 +395,7 @@ class PorterStemmer(object):
self.k = j
self.k0 = i
if self.k <= self.k0 + 1:
- return self.b # --DEPARTURE--
+ return self.b # --DEPARTURE--
# With this line, strings of length 1 or 2 don't go through the
# stemming process, although no mention is made of this in the
diff --git a/sphinx/util/tags.py b/sphinx/util/tags.py
index e9a9a436d..a44c265d1 100644
--- a/sphinx/util/tags.py
+++ b/sphinx/util/tags.py
@@ -7,11 +7,6 @@
:license: BSD, see LICENSE for details.
"""
-import warnings
-# jinja2.sandbox imports the sets module on purpose
-warnings.filterwarnings('ignore', 'the sets module', DeprecationWarning,
- module='jinja2.sandbox')
-
# (ab)use the Jinja parser for parsing our boolean expressions
from jinja2 import nodes
from jinja2.parser import Parser
diff --git a/sphinx/util/texescape.py b/sphinx/util/texescape.py
index 41a0a6d95..f9ae3adfd 100644
--- a/sphinx/util/texescape.py
+++ b/sphinx/util/texescape.py
@@ -23,7 +23,7 @@ tex_replacements = [
('[', r'{[}'),
(']', r'{]}'),
('`', r'{}`'),
- ('\\',r'\textbackslash{}'),
+ ('\\', r'\textbackslash{}'),
('~', r'\textasciitilde{}'),
('<', r'\textless{}'),
('>', r'\textgreater{}'),
@@ -104,11 +104,13 @@ tex_escape_map = {}
tex_replace_map = {}
tex_hl_escape_map_new = {}
+
def init():
for a, b in tex_replacements:
tex_escape_map[ord(a)] = b
tex_replace_map[ord(a)] = '_'
for a, b in tex_replacements:
- if a in '[]{}\\': continue
+ if a in '[]{}\\':
+ continue
tex_hl_escape_map_new[ord(a)] = b
diff --git a/sphinx/util/websupport.py b/sphinx/util/websupport.py
index 2bb23fa81..6c9cfeb9a 100644
--- a/sphinx/util/websupport.py
+++ b/sphinx/util/websupport.py
@@ -9,5 +9,5 @@
def is_commentable(node):
- #return node.__class__.__name__ in ('paragraph', 'literal_block')
+ # return node.__class__.__name__ in ('paragraph', 'literal_block')
return node.__class__.__name__ == 'paragraph'