| Index: third_party/twisted_8_1/twisted/python/text.py
|
| diff --git a/third_party/twisted_8_1/twisted/python/text.py b/third_party/twisted_8_1/twisted/python/text.py
|
| deleted file mode 100644
|
| index b50287050ca68c533e39a3f47c020d4efc61c547..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/python/text.py
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -# -*- test-case-name: twisted.test.test_text -*-
|
| -#
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""Miscellany of text-munging functions.
|
| -"""
|
| -
|
| -import string, types
|
| -
|
| -def stringyString(object, indentation=''):
|
| - """Expansive string formatting for sequence types.
|
| -
|
| - list.__str__ and dict.__str__ use repr() to display their
|
| - elements. This function also turns these sequence types
|
| - into strings, but uses str() on their elements instead.
|
| -
|
| - Sequence elements are also displayed on seperate lines,
|
| - and nested sequences have nested indentation.
|
| - """
|
| - braces = ''
|
| - sl = []
|
| -
|
| - if type(object) is types.DictType:
|
| - braces = '{}'
|
| - for key, value in object.items():
|
| - value = stringyString(value, indentation + ' ')
|
| - if isMultiline(value):
|
| - if endsInNewline(value):
|
| - value = value[:-len('\n')]
|
| - sl.append("%s %s:\n%s" % (indentation, key, value))
|
| - else:
|
| - # Oops. Will have to move that indentation.
|
| - sl.append("%s %s: %s" % (indentation, key,
|
| - value[len(indentation) + 3:]))
|
| -
|
| - elif type(object) in (types.TupleType, types.ListType):
|
| - if type(object) is types.TupleType:
|
| - braces = '()'
|
| - else:
|
| - braces = '[]'
|
| -
|
| - for element in object:
|
| - element = stringyString(element, indentation + ' ')
|
| - sl.append(string.rstrip(element) + ',')
|
| - else:
|
| - sl[:] = map(lambda s, i=indentation: i+s,
|
| - string.split(str(object),'\n'))
|
| -
|
| - if not sl:
|
| - sl.append(indentation)
|
| -
|
| - if braces:
|
| - sl[0] = indentation + braces[0] + sl[0][len(indentation) + 1:]
|
| - sl[-1] = sl[-1] + braces[-1]
|
| -
|
| - s = string.join(sl, "\n")
|
| -
|
| - if isMultiline(s) and not endsInNewline(s):
|
| - s = s + '\n'
|
| -
|
| - return s
|
| -
|
| -def isMultiline(s):
|
| - """Returns True if this string has a newline in it."""
|
| - return (string.find(s, '\n') != -1)
|
| -
|
| -def endsInNewline(s):
|
| - """Returns True if this string ends in a newline."""
|
| - return (s[-len('\n'):] == '\n')
|
| -
|
| -def docstringLStrip(docstring):
|
| - """Gets rid of unsightly lefthand docstring whitespace residue.
|
| -
|
| - You'd think someone would have done this already, but apparently
|
| - not in 1.5.2.
|
| -
|
| - BUT since we're all using Python 2.1 now, use L{inspect.getdoc}
|
| - instead. I{This function should go away soon.}
|
| - """
|
| -
|
| - if not docstring:
|
| - return docstring
|
| -
|
| - docstring = string.replace(docstring, '\t', ' ' * 8)
|
| - lines = string.split(docstring,'\n')
|
| -
|
| - leading = 0
|
| - for l in xrange(1,len(lines)):
|
| - line = lines[l]
|
| - if string.strip(line):
|
| - while 1:
|
| - if line[leading] == ' ':
|
| - leading = leading + 1
|
| - else:
|
| - break
|
| - if leading:
|
| - break
|
| -
|
| - outlines = lines[0:1]
|
| - for l in xrange(1,len(lines)):
|
| - outlines.append(lines[l][leading:])
|
| -
|
| - return string.join(outlines, '\n')
|
| -
|
| -def greedyWrap(inString, width=80):
|
| - """Given a string and a column width, return a list of lines.
|
| -
|
| - Caveat: I'm use a stupid greedy word-wrapping
|
| - algorythm. I won't put two spaces at the end
|
| - of a sentence. I don't do full justification.
|
| - And no, I've never even *heard* of hypenation.
|
| - """
|
| -
|
| - outLines = []
|
| -
|
| - #eww, evil hacks to allow paragraphs delimited by two \ns :(
|
| - if inString.find('\n\n') >= 0:
|
| - paragraphs = string.split(inString, '\n\n')
|
| - for para in paragraphs:
|
| - outLines.extend(greedyWrap(para) + [''])
|
| - return outLines
|
| - inWords = string.split(inString)
|
| -
|
| - column = 0
|
| - ptr_line = 0
|
| - while inWords:
|
| - column = column + len(inWords[ptr_line])
|
| - ptr_line = ptr_line + 1
|
| -
|
| - if (column > width):
|
| - if ptr_line == 1:
|
| - # This single word is too long, it will be the whole line.
|
| - pass
|
| - else:
|
| - # We've gone too far, stop the line one word back.
|
| - ptr_line = ptr_line - 1
|
| - (l, inWords) = (inWords[0:ptr_line], inWords[ptr_line:])
|
| - outLines.append(string.join(l,' '))
|
| -
|
| - ptr_line = 0
|
| - column = 0
|
| - elif not (len(inWords) > ptr_line):
|
| - # Clean up the last bit.
|
| - outLines.append(string.join(inWords, ' '))
|
| - del inWords[:]
|
| - else:
|
| - # Space
|
| - column = column + 1
|
| - # next word
|
| -
|
| - return outLines
|
| -
|
| -
|
| -wordWrap = greedyWrap
|
| -
|
| -def removeLeadingBlanks(lines):
|
| - ret = []
|
| - for line in lines:
|
| - if ret or line.strip():
|
| - ret.append(line)
|
| - return ret
|
| -
|
| -def removeLeadingTrailingBlanks(s):
|
| - lines = removeLeadingBlanks(s.split('\n'))
|
| - lines.reverse()
|
| - lines = removeLeadingBlanks(lines)
|
| - lines.reverse()
|
| - return '\n'.join(lines)+'\n'
|
| -
|
| -def splitQuoted(s):
|
| - """Like string.split, but don't break substrings inside quotes.
|
| -
|
| - >>> splitQuoted('the \"hairy monkey\" likes pie')
|
| - ['the', 'hairy monkey', 'likes', 'pie']
|
| -
|
| - Another one of those \"someone must have a better solution for
|
| - this\" things. This implementation is a VERY DUMB hack done too
|
| - quickly.
|
| - """
|
| - out = []
|
| - quot = None
|
| - phrase = None
|
| - for word in s.split():
|
| - if phrase is None:
|
| - if word and (word[0] in ("\"", "'")):
|
| - quot = word[0]
|
| - word = word[1:]
|
| - phrase = []
|
| -
|
| - if phrase is None:
|
| - out.append(word)
|
| - else:
|
| - if word and (word[-1] == quot):
|
| - word = word[:-1]
|
| - phrase.append(word)
|
| - out.append(" ".join(phrase))
|
| - phrase = None
|
| - else:
|
| - phrase.append(word)
|
| -
|
| - return out
|
| -
|
| -def strFile(p, f, caseSensitive=True):
|
| - """Find whether string p occurs in a read()able object f
|
| - @rtype: C{bool}
|
| - """
|
| - buf = ""
|
| - buf_len = max(len(p), 2**2**2**2)
|
| - if not caseSensitive:
|
| - p = p.lower()
|
| - while 1:
|
| - r = f.read(buf_len-len(p))
|
| - if not caseSensitive:
|
| - r = r.lower()
|
| - bytes_read = len(r)
|
| - if bytes_read == 0:
|
| - return False
|
| - l = len(buf)+bytes_read-buf_len
|
| - if l <= 0:
|
| - buf = buf + r
|
| - else:
|
| - buf = buf[l:] + r
|
| - if buf.find(p) != -1:
|
| - return True
|
| -
|
|
|