Browse Source

use render instead of view

Matthew Wang 11 years ago
parent
commit
a06a21094b
1 changed files with 30 additions and 41 deletions
  1. 30
    41
      src/cdiff.py

+ 30
- 41
src/cdiff.py View File

@@ -41,7 +41,7 @@ class Diff(object):
41 41
         self.__new_path = new_path
42 42
         self.__hunks = hunks
43 43
 
44
-    def view_traditional(self, show_color):
44
+    def render_traditional(self, show_color):
45 45
         out = []
46 46
         if show_color:
47 47
             color = None    # Use default
@@ -51,72 +51,72 @@ class Diff(object):
51 51
             end_color = 'none'
52 52
 
53 53
         for line in self.__headers:
54
-            out.append(self._view_header(line, color, end_color))
54
+            out.append(self._render_header(line, color, end_color))
55 55
 
56
-        out.append(self._view_old_path(self.__old_path, color, end_color))
57
-        out.append(self._view_new_path(self.__new_path, color, end_color))
56
+        out.append(self._render_old_path(self.__old_path, color, end_color))
57
+        out.append(self._render_new_path(self.__new_path, color, end_color))
58 58
 
59 59
         for hunk in self.__hunks:
60
-            out.append(self._view_hunk_header(hunk.get_header(), color,
60
+            out.append(self._render_hunk_header(hunk.get_header(), color,
61 61
                 end_color))
62 62
             for (attr, line) in hunk:
63 63
                 if attr == '-':
64
-                    out.append(self._view_old(attr+line, color, end_color))
64
+                    out.append(self._render_old(attr+line, color, end_color))
65 65
                 elif attr == '+':
66
-                    out.append(self._view_new(attr+line, color, end_color))
66
+                    out.append(self._render_new(attr+line, color, end_color))
67 67
                 else:
68
-                    out.append(self._view_common(attr+line, color, end_color))
68
+                    out.append(self._render_common(attr+line, color, end_color))
69 69
 
70 70
         return ''.join(out)
71 71
 
72
-    def view_side_by_side(self, show_color, show_number, width):
72
+    def render_side_by_side(self, show_color, show_number, width):
73 73
         """Do not really need to parse the hunks..."""
74 74
         return 'TODO: show_color=%s, show_number=%s, width=%d' % (show_color,
75 75
                 show_number, width)
76 76
 
77
-    def _view_header(self, line, color=None, end_color=None):
77
+    def _render_header(self, line, color=None, end_color=None):
78 78
         if color is None:
79 79
             color='cyan'
80 80
         if end_color is None:
81 81
             end_color = 'reset'
82 82
         return self.__mark_color(line, color, end_color)
83 83
 
84
-    def _view_old_path(self, line, color=None, end_color=None):
84
+    def _render_old_path(self, line, color=None, end_color=None):
85 85
         if color is None:
86 86
             color='yellow'
87 87
         if end_color is None:
88 88
             end_color = 'reset'
89 89
         return self.__mark_color(line, color, end_color)
90 90
 
91
-    def _view_new_path(self, line, color=None, end_color=None):
91
+    def _render_new_path(self, line, color=None, end_color=None):
92 92
         if color is None:
93 93
             color='yellow'
94 94
         if end_color is None:
95 95
             end_color = 'reset'
96 96
         return self.__mark_color(line, color, end_color)
97 97
 
98
-    def _view_hunk_header(self, line, color=None, end_color=None):
98
+    def _render_hunk_header(self, line, color=None, end_color=None):
99 99
         if color is None:
100 100
             color='lightblue'
101 101
         if end_color is None:
102 102
             end_color = 'reset'
103 103
         return self.__mark_color(line, color, end_color)
104 104
 
105
-    def _view_old(self, line, color=None, end_color=None):
105
+    def _render_old(self, line, color=None, end_color=None):
106 106
         if color is None:
107 107
             color='red'
108 108
         if end_color is None:
109 109
             end_color = 'reset'
110 110
         return self.__mark_color(line, color, end_color)
111 111
 
112
-    def _view_new(self, line, color=None, end_color=None):
112
+    def _render_new(self, line, color=None, end_color=None):
113 113
         if color is None:
114 114
             color='green'
115 115
         if end_color is None:
116 116
             end_color = 'reset'
117 117
         return self.__mark_color(line, color, end_color)
118 118
 
119
-    def _view_common(self, line, color=None, end_color=None):
119
+    def _render_common(self, line, color=None, end_color=None):
120 120
         if color is None:
121 121
             color='none'
122 122
         if end_color is None:
@@ -297,29 +297,29 @@ class DiffParser(object):
297 297
         return out_diffs
298 298
 
299 299
 
300
-class DiffViewer(object):
300
+class DiffRender(object):
301 301
 
302 302
     def __init__(self, stream):
303 303
         self.__diffs = DiffParser(stream).get_diffs()
304 304
 
305
-    def view(self, show_color=True, show_number=False, width=0,
305
+    def render(self, show_color=True, show_number=False, width=0,
306 306
             traditional=False):
307 307
         if traditional:
308
-            return self.__view_traditional(show_color)
308
+            return self.__render_traditional(show_color)
309 309
         else:
310
-            return self.__view_side_by_side(show_color, show_number, width)
310
+            return self.__render_side_by_side(show_color, show_number, width)
311 311
 
312
-    def __view_traditional(self, show_color):
312
+    def __render_traditional(self, show_color):
313 313
         out = []
314 314
         for diff in self.__diffs:
315
-            out.append(diff.view_traditional(show_color))
315
+            out.append(diff.render_traditional(show_color))
316 316
         return out
317 317
 
318
-    def __view_side_by_side(self, show_color, show_number, width):
318
+    def __render_side_by_side(self, show_color, show_number, width):
319 319
         """width of 0 or negative means auto detect terminal width"""
320 320
         out = []
321 321
         for diff in self.__diffs:
322
-            out.append(diff.view_side_by_side(show_color, show_number, width))
322
+            out.append(diff.render_side_by_side(show_color, show_number, width))
323 323
         return out
324 324
 
325 325
 
@@ -334,8 +334,6 @@ if __name__ == '__main__':
334 334
             {'prog': os.path.basename(sys.argv[0])}
335 335
 
336 336
     parser = optparse.OptionParser(usage)
337
-    parser.add_option('-c', '--color', metavar='on|off|auto', default='auto',
338
-            help='enforce color' 'on|off|auto, default is auto')
339 337
     parser.add_option('-n', '--number', action='store_true',
340 338
             help='show line number')
341 339
     parser.add_option('-w', '--width', type='int', default=0,
@@ -345,15 +343,7 @@ if __name__ == '__main__':
345 343
                   'mode (omit -n, -w)'))
346 344
     opts, args = parser.parse_args()
347 345
 
348
-    if opts.color == 'yes':
349
-        show_color = True
350
-    elif opts.color == 'no':
351
-        show_color = False
352
-    elif opts.color == 'auto':
353
-        show_color = sys.stdout.isatty()
354
-    else:
355
-        sys.stderr.write('Invalid color mode, try --help option for usage\n')
356
-        sys.exit(1)
346
+    show_color = sys.stdout.isatty()
357 347
 
358 348
     if opts.width < 0:
359 349
         opts.width = 0
@@ -370,20 +360,19 @@ if __name__ == '__main__':
370 360
     if diff_hdl is not sys.stdin:
371 361
         diff_hdl.close()
372 362
 
373
-    diffviewer = DiffViewer(stream)
374
-    view = diffviewer.view(show_color=show_color, show_number=opts.number,
363
+    render = DiffRender(stream)
364
+    color_diff = render.render(show_color=show_color, show_number=opts.number,
375 365
             width=opts.width, traditional=opts.traditional)
376 366
 
377 367
     if sys.stdout.isatty():
378
-        # args stolen fron git source, see less(1)
379
-        # https://github.com/git/git/blob/master/pager.c
368
+        # args stolen fron git source: github.com/git/git/blob/master/pager.c
380 369
         pager = subprocess.Popen(['less', '-FRSXK'],
381 370
                 stdin=subprocess.PIPE, stdout=sys.stdout)
382
-        pager.stdin.write(''.join(view))
371
+        pager.stdin.write(''.join(color_diff))
383 372
         pager.stdin.close()
384 373
         pager.wait()
385 374
     else:
386
-        sys.stdout.write(''.join(view))
375
+        sys.stdout.write(''.join(color_diff))
387 376
 
388 377
     sys.exit(0)
389 378