Mercurial > diff-colorize
comparison diff-colorize.py @ 1:44f86539d245
Refactored to allow me to more easily add new prefixes.
| author | Peter Hosey |
|---|---|
| date | Sun, 10 Aug 2008 23:25:24 -0700 |
| parents | 2df4ed64a388 |
| children | 9eda9139d627 |
comparison
equal
deleted
inserted
replaced
| 0:2df4ed64a388 | 1:44f86539d245 |
|---|---|
| 7 | 7 |
| 8 INDEX_COLOR = 32 | 8 INDEX_COLOR = 32 |
| 9 REMOVED_COLOR = 203 | 9 REMOVED_COLOR = 203 |
| 10 ADDED_COLOR = 2 | 10 ADDED_COLOR = 2 |
| 11 | 11 |
| 12 prefixes_to_invert = ['---', '+++', '-', '+'] | 12 class OrderedDict(dict): |
| 13 def __init__(self, input=None): | |
| 14 if input is None: | |
| 15 self.keys = [] | |
| 16 super(OrderedDict, self).__init__() | |
| 17 elif isinstance(input, dict): | |
| 18 self.keys = list(input) | |
| 19 super(OrderedDict, self).__init__(input) | |
| 20 else: | |
| 21 self.keys = [k for k, v in input] | |
| 22 super(OrderedDict, self).__init__(input) | |
| 23 def __iter__(self): | |
| 24 return iter(self.keys) | |
| 25 def __setitem__(self, k, v): | |
| 26 if k not in self: | |
| 27 self.keys.append(k) | |
| 28 super(OrderedDict, self).__setitem__(k, v) | |
| 29 def __delitem__(self, k): | |
| 30 super(OrderedDict, self).__delitem__(k) | |
| 31 self.keys.remove(k) | |
| 32 | |
| 33 prefixes = OrderedDict() | |
| 34 prefixes['---'] = ( | |
| 35 COLOR_FORMAT % (REMOVED_COLOR,) | |
| 36 + BEGIN_REVERSE_FORMAT | |
| 37 + '---' | |
| 38 + END_REVERSE_FORMAT | |
| 39 ) | |
| 40 prefixes['+++'] = ( | |
| 41 COLOR_FORMAT % (ADDED_COLOR,) | |
| 42 + BEGIN_REVERSE_FORMAT | |
| 43 + '+++' | |
| 44 + END_REVERSE_FORMAT | |
| 45 ) | |
| 46 prefixes['-'] = ( | |
| 47 COLOR_FORMAT % (REMOVED_COLOR,) | |
| 48 + BEGIN_REVERSE_FORMAT | |
| 49 + '-' | |
| 50 + END_REVERSE_FORMAT | |
| 51 ) | |
| 52 prefixes['+'] = ( | |
| 53 COLOR_FORMAT % (ADDED_COLOR,) | |
| 54 + BEGIN_REVERSE_FORMAT | |
| 55 + '+' | |
| 56 + END_REVERSE_FORMAT | |
| 57 ) | |
| 58 prefixes['Index: '] = COLOR_FORMAT % (INDEX_COLOR,) + 'Index: ' | |
| 59 prefixes['diff --git '] = COLOR_FORMAT % (INDEX_COLOR,) + 'diff --git ' | |
| 13 | 60 |
| 14 import sys | 61 import sys |
| 15 import fileinput | 62 import fileinput |
| 16 | 63 |
| 17 for line in fileinput.input(): | 64 for line in fileinput.input(): |
| 18 if line.startswith('Index: ') or line.startswith('diff --git '): | 65 for prefix_to_test in prefixes: |
| 19 color = INDEX_COLOR | 66 if line.startswith(prefix_to_test): |
| 20 elif line.startswith('-'): | 67 sys.stdout.write(prefixes[prefix_to_test]) |
| 21 color = REMOVED_COLOR | 68 line = line[len(prefix_to_test):] |
| 22 elif line.startswith('+'): | |
| 23 color = ADDED_COLOR | |
| 24 else: | |
| 25 color = None | |
| 26 | |
| 27 if color is not None: | |
| 28 sys.stdout.write(COLOR_FORMAT % (color,)) | |
| 29 for prefix in prefixes_to_invert: | |
| 30 if line.startswith(prefix): | |
| 31 sys.stdout.write(BEGIN_REVERSE_FORMAT) | |
| 32 sys.stdout.write(prefix) | |
| 33 sys.stdout.write(END_REVERSE_FORMAT) | |
| 34 line = line[len(prefix):] | |
| 35 break | |
| 36 else: | |
| 37 sys.stdout.write(RESET_FORMAT) | |
| 38 | 69 |
| 39 sys.stdout.write(line) | 70 sys.stdout.write(line) |
| 40 | 71 |
| 72 sys.stdout.write(RESET_FORMAT) | |
| 73 | |
| 41 print RESET_FORMAT | 74 print RESET_FORMAT |
