epydoc.markup.plaintext

Package epydoc :: Package markup :: Module plaintext |
[hide private]
[frames] | no frames]

# Source Code for Module epydoc.markup.plaintext

     1  #
     2  # plaintext.py: plaintext docstring parsing
     3  # Edward Loper
     4  #
     5  # Created [04/10/01 12:00 AM]
     6  # $Id: plaintext.py 1574 2007-03-07 02:55:14Z dvarrazzo $
     7  #
     8
     9  """
    10  Parser for plaintext docstrings.  Plaintext docstrings are rendered as
    11  verbatim output, preserving all whitespace.
    12  """
    13  __docformat__ = 'epytext en'
    14
    15  from epydoc.markup import *
    16  from epydoc.util import plaintext_to_html, plaintext_to_latex
    17
    18 -def parse_docstring(docstring, errors, **options):
    19      """
    20      @return: A pair C{(M{d}, M{e})}, where C{M{d}} is a
    21          C{ParsedDocstring} that encodes the contents of the given
    22          plaintext docstring; and C{M{e}} is a list of errors that were
    23          generated while parsing the docstring.
    24      @rtype: C{L{ParsedPlaintextDocstring}, C{list} of L{ParseError}}
    25      """
    26      return ParsedPlaintextDocstring(docstring, **options)
    27
    28 -class ParsedPlaintextDocstring(ParsedDocstring):
    29 -    def __init__(self, text, **options):
    30          self._verbatim = options.get('verbatim', 1)
    31          if text is None: raise ValueError, 'Bad text value (expected a str)'
    32          self._text = text
    33
    34 -    def to_html(self, docstring_linker, **options):
    35          if options.get('verbatim', self._verbatim) == 0:
    36              return plaintext_to_html(self.to_plaintext(docstring_linker))
    37          else:
    38              return ParsedDocstring.to_html(self, docstring_linker, **options)
    39
    40 -    def to_latex(self, docstring_linker, **options):
    41          if options.get('verbatim', self._verbatim) == 0:
    42              return plaintext_to_latex(self.to_plaintext(docstring_linker))
    43          else:
    44              return ParsedDocstring.to_latex(self, docstring_linker, **options)
    45
    46 -    def to_plaintext(self, docstring_linker, **options):
    47          if 'indent' in options:
    48              indent = options['indent']
    49              lines = self._text.split('\n')
    50              return '\n'.join([' '*indent+l for l in lines])+'\n'
    51          return self._text+'\n'
    52
    53      _SUMMARY_RE = re.compile(r'(\s*[\w\W]*?(?:\.(\s|$)|[\n][\t ]*[\n]))')
    54
    55 -    def summary(self):
    56          m = self._SUMMARY_RE.match(self._text)
    57          if m:
    58              other = self._text[m.end():]
    59              return (ParsedPlaintextDocstring(m.group(1), verbatim=0),
    60                      other != '' and not other.isspace())
    61          else:
    62              parts = self._text.strip('\n').split('\n', 1)
    63              if len(parts) == 1:
    64                  summary = parts[0]
    65                  other = False
    66              else:
    67                  summary = parts[0] + '...'
    68                  other = True
    69
    70              return ParsedPlaintextDocstring(summary, verbatim=0), other
    71
    72  #     def concatenate(self, other):
    73  #         if not isinstance(other, ParsedPlaintextDocstring):
    74  #             raise ValueError, 'Could not concatenate docstrings'
    75  #         text = self._text+other._text
    76  #         options = self._options.copy()
    77  #         options.update(other._options)
    78  #         return ParsedPlaintextDocstring(text, options)
    79