mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-18 08:50:57 +07:00
79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
#
|
|
# plaintext.py: plaintext docstring parsing
|
|
# Edward Loper
|
|
#
|
|
# Created [04/10/01 12:00 AM]
|
|
# $Id: plaintext.py 1574 2007-03-07 02:55:14Z dvarrazzo $
|
|
#
|
|
|
|
"""
|
|
Parser for plaintext docstrings. Plaintext docstrings are rendered as
|
|
verbatim output, preserving all whitespace.
|
|
"""
|
|
__docformat__ = 'epytext en'
|
|
|
|
from epydoc.markup import *
|
|
from epydoc.util import plaintext_to_html, plaintext_to_latex
|
|
|
|
def parse_docstring(docstring, errors, **options):
|
|
"""
|
|
@return: A pair C{(M{d}, M{e})}, where C{M{d}} is a
|
|
C{ParsedDocstring} that encodes the contents of the given
|
|
plaintext docstring; and C{M{e}} is a list of errors that were
|
|
generated while parsing the docstring.
|
|
@rtype: C{L{ParsedPlaintextDocstring}, C{list} of L{ParseError}}
|
|
"""
|
|
return ParsedPlaintextDocstring(docstring, **options)
|
|
|
|
class ParsedPlaintextDocstring(ParsedDocstring):
|
|
def __init__(self, text, **options):
|
|
self._verbatim = options.get('verbatim', 1)
|
|
if text is None: raise ValueError, 'Bad text value (expected a str)'
|
|
self._text = text
|
|
|
|
def to_html(self, docstring_linker, **options):
|
|
if options.get('verbatim', self._verbatim) == 0:
|
|
return plaintext_to_html(self.to_plaintext(docstring_linker))
|
|
else:
|
|
return ParsedDocstring.to_html(self, docstring_linker, **options)
|
|
|
|
def to_latex(self, docstring_linker, **options):
|
|
if options.get('verbatim', self._verbatim) == 0:
|
|
return plaintext_to_latex(self.to_plaintext(docstring_linker))
|
|
else:
|
|
return ParsedDocstring.to_latex(self, docstring_linker, **options)
|
|
|
|
def to_plaintext(self, docstring_linker, **options):
|
|
if 'indent' in options:
|
|
indent = options['indent']
|
|
lines = self._text.split('\n')
|
|
return '\n'.join([' '*indent+l for l in lines])+'\n'
|
|
return self._text+'\n'
|
|
|
|
_SUMMARY_RE = re.compile(r'(\s*[\w\W]*?(?:\.(\s|$)|[\n][\t ]*[\n]))')
|
|
|
|
def summary(self):
|
|
m = self._SUMMARY_RE.match(self._text)
|
|
if m:
|
|
other = self._text[m.end():]
|
|
return (ParsedPlaintextDocstring(m.group(1), verbatim=0),
|
|
other != '' and not other.isspace())
|
|
else:
|
|
parts = self._text.strip('\n').split('\n', 1)
|
|
if len(parts) == 1:
|
|
summary = parts[0]
|
|
other = False
|
|
else:
|
|
summary = parts[0] + '...'
|
|
other = True
|
|
|
|
return ParsedPlaintextDocstring(summary, verbatim=0), other
|
|
|
|
# def concatenate(self, other):
|
|
# if not isinstance(other, ParsedPlaintextDocstring):
|
|
# raise ValueError, 'Could not concatenate docstrings'
|
|
# text = self._text+other._text
|
|
# options = self._options.copy()
|
|
# options.update(other._options)
|
|
# return ParsedPlaintextDocstring(text, options)
|