Mercurial > hg > config
comparison python/stripirssi.py @ 438:364ddd44fd82
all the parts are there; now just to assemble it
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Thu, 08 Aug 2013 17:00:47 -0700 |
| parents | 0f679925616d |
| children | 5c62ebf2dd47 |
comparison
equal
deleted
inserted
replaced
| 437:2588ca4ae849 | 438:364ddd44fd82 |
|---|---|
| 3 import optparse | 3 import optparse |
| 4 import os | 4 import os |
| 5 import sys | 5 import sys |
| 6 | 6 |
| 7 """ | 7 """ |
| 8 strip irssi comments | 8 strip irssi comments and format |
| 9 """ | 9 """ |
| 10 | 10 |
| 11 # XXX stub | 11 # TODO : -> textshaper |
| 12 | 12 |
| 13 here = os.path.dirname(os.path.realpath(__file__)) | 13 ### generic functionality |
| 14 | |
| 15 string = (basestring,) | |
| 16 | |
| 17 class splitlines(object): | |
| 18 def __init__(self, function): | |
| 19 self.function = function | |
| 20 def __call__(self, lines, *args, **kwargs): | |
| 21 if isinstance(lines, string): | |
| 22 lines = lines.strip().splitlines() | |
| 23 self.function(lines, *args, **kwargs) | |
| 24 | |
| 25 @splitlines | |
| 26 def strip(lines): | |
| 27 return [line.strip() for line in lines] | |
| 28 | |
| 29 @splitlines | |
| 30 def strip_first_column(lines, separator=None): | |
| 31 """ | |
| 32 removes leading column (defined by separator) from lines of text | |
| 33 """ | |
| 34 # TODO: -> genericize | |
| 35 # - and handle whitespace more generically | |
| 36 | |
| 37 length = None # length of first column | |
| 38 stripped = [] | |
| 39 for line in lines: | |
| 40 if not line: | |
| 41 continue # XXX desirable? | |
| 42 prefix, rest = line.split(separator, 1) | |
| 43 if length is not None: | |
| 44 length = len(prefix) | |
| 45 else: | |
| 46 if len(prefix) != length: | |
| 47 if not line[:len(prefix)].isspace(): | |
| 48 raise AssertionError # XXX | |
| 49 stripped.append(line[length:]) | |
| 50 return stripped | |
| 51 | |
| 52 @splitlines | |
| 53 def remove_lines(lines, startswith): | |
| 54 return [line for line in lines | |
| 55 if line.startswith(startswith)] | |
| 56 # really, one could take most functions for str and map -> lines | |
| 57 | |
| 58 @splitlines | |
| 59 def remove_time(lines): | |
| 60 """removes leading 24 hour timestamp: HH:MM""" | |
| 61 # XXX :ss? | |
| 62 | |
| 63 @splitlines | |
| 64 def join(lines): | |
| 65 """DOCUMENT ME!""" | |
| 66 last = None | |
| 67 joined = [] | |
| 68 for line in lines: | |
| 69 if line: | |
| 70 if line[0].isspace(): | |
| 71 line = line.strip() | |
| 72 if not line: | |
| 73 if last: | |
| 74 joined.append(last) | |
| 75 continue | |
| 76 if last: | |
| 77 last = '%s %s' % (last, line.strip()) | |
| 78 else: | |
| 79 joined.append(line.strip() | |
| 80 else: | |
| 81 if last: | |
| 82 joined.append(last) | |
| 83 last = line.rstrip() | |
| 84 else: | |
| 85 if last: | |
| 86 joined.append(last) | |
| 87 return joined | |
| 88 | |
| 89 ### CLI | |
| 14 | 90 |
| 15 def main(args=sys.argv[1:]): | 91 def main(args=sys.argv[1:]): |
| 16 | 92 |
| 17 usage = '%prog [options]' | 93 usage = '%prog [options]' |
| 18 parser = optparse.OptionParser(usage=usage, description=__doc__) | 94 parser = optparse.OptionParser(usage=usage, description=__doc__) |
