Use imp.get_suffixes to determine a module name in modulename(file).
When possible, display strings containing backslashes using r'' notation.
This commit is contained in:
parent
7fc49a4441
commit
a2fe103c9b
32
Lib/pydoc.py
32
Lib/pydoc.py
|
@ -127,10 +127,13 @@ def stripid(text):
|
||||||
def modulename(path):
|
def modulename(path):
|
||||||
"""Return the Python module name for a given path, or None."""
|
"""Return the Python module name for a given path, or None."""
|
||||||
filename = os.path.basename(path)
|
filename = os.path.basename(path)
|
||||||
for ending in ['.py', '.pyc', '.pyd', '.pyo',
|
suffixes = map(lambda (suffix, mode, kind): (len(suffix), suffix),
|
||||||
'module.so', 'module.so.1', '.so']:
|
imp.get_suffixes())
|
||||||
if len(filename) > len(ending) and filename[-len(ending):] == ending:
|
suffixes.sort()
|
||||||
return filename[:-len(ending)]
|
suffixes.reverse() # try longest suffixes first, in case they overlap
|
||||||
|
for length, suffix in suffixes:
|
||||||
|
if len(filename) > length and filename[-length:] == suffix:
|
||||||
|
return filename[:-length]
|
||||||
|
|
||||||
class DocImportError(Exception):
|
class DocImportError(Exception):
|
||||||
"""Class for errors while trying to import something to document it."""
|
"""Class for errors while trying to import something to document it."""
|
||||||
|
@ -205,9 +208,15 @@ class HTMLRepr(Repr):
|
||||||
return self.escape(cram(stripid(repr(x)), self.maxother))
|
return self.escape(cram(stripid(repr(x)), self.maxother))
|
||||||
|
|
||||||
def repr_string(self, x, level):
|
def repr_string(self, x, level):
|
||||||
text = self.escape(cram(x, self.maxstring))
|
test = cram(x, self.maxstring)
|
||||||
return re.sub(r'((\\[\\abfnrtv]|\\x..|\\u....)+)',
|
testrepr = repr(test)
|
||||||
r'<font color="#c040c0">\1</font>', repr(text))
|
if '\\' in test and '\\' not in replace(testrepr, (r'\\', '')):
|
||||||
|
# Backslashes are only literal in the string and are never
|
||||||
|
# needed to make any special characters, so show a raw string.
|
||||||
|
return 'r' + testrepr[0] + self.escape(test) + testrepr[0]
|
||||||
|
return re.sub(r'((\\[\\abfnrtv\'"]|\\x..|\\u....)+)',
|
||||||
|
r'<font color="#c040c0">\1</font>',
|
||||||
|
self.escape(testrepr))
|
||||||
|
|
||||||
def repr_instance(self, x, level):
|
def repr_instance(self, x, level):
|
||||||
try:
|
try:
|
||||||
|
@ -596,6 +605,15 @@ class TextRepr(Repr):
|
||||||
else:
|
else:
|
||||||
return cram(stripid(repr(x)), self.maxother)
|
return cram(stripid(repr(x)), self.maxother)
|
||||||
|
|
||||||
|
def repr_string(self, x, level):
|
||||||
|
test = cram(x, self.maxstring)
|
||||||
|
testrepr = repr(test)
|
||||||
|
if '\\' in test and '\\' not in replace(testrepr, (r'\\', '')):
|
||||||
|
# Backslashes are only literal in the string and are never
|
||||||
|
# needed to make any special characters, so show a raw string.
|
||||||
|
return 'r' + testrepr[0] + test + testrepr[0]
|
||||||
|
return testrepr
|
||||||
|
|
||||||
def repr_instance(self, x, level):
|
def repr_instance(self, x, level):
|
||||||
try:
|
try:
|
||||||
return cram(stripid(repr(x)), self.maxstring)
|
return cram(stripid(repr(x)), self.maxstring)
|
||||||
|
|
Loading…
Reference in New Issue