You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
49 lines
1.1 KiB
13 years ago
|
# Copyright (c) 2002-2010 Zooko Wilcox-O'Hearn
|
||
|
# This file is part of pyutil; see README.rst for licensing terms.
|
||
|
|
||
|
def commonprefix(l):
|
||
|
cp = []
|
||
|
for i in range(min(map(len, l))):
|
||
|
c = l[0][i]
|
||
|
for s in l[1:]:
|
||
|
if s[i] != c:
|
||
|
return ''.join(cp)
|
||
|
cp.append(c)
|
||
|
return ''.join(cp)
|
||
|
|
||
|
def commonsuffix(l):
|
||
|
cp = []
|
||
|
for i in range(min(map(len, l))):
|
||
|
c = l[0][-i-1]
|
||
|
for s in l[1:]:
|
||
|
if s[-i-1] != c:
|
||
|
cp.reverse()
|
||
|
return ''.join(cp)
|
||
|
cp.append(c)
|
||
|
cp.reverse()
|
||
|
return ''.join(cp)
|
||
|
|
||
|
def split_on_newlines(s):
|
||
|
"""
|
||
|
Splits s on all of the three newline sequences: "\r\n", "\r", or "\n".
|
||
|
"""
|
||
|
res = []
|
||
|
for x in s.split('\r\n'):
|
||
|
for y in x.split('\r'):
|
||
|
res.extend(y.split('\n'))
|
||
|
return res
|
||
|
|
||
|
def pop_trailing_newlines(s):
|
||
|
"""
|
||
|
@return a copy of s minus any trailing "\n"'s or "\r"'s
|
||
|
"""
|
||
|
i = len(s)-1
|
||
|
if i < 0:
|
||
|
return ''
|
||
|
while s[i] in ('\n', '\r',):
|
||
|
i = i - 1
|
||
|
if i < 0:
|
||
|
return ''
|
||
|
return s[:i+1]
|
||
|
|