Mercurial > hg > soundsoftware-site
comparison vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base @ 0:513646585e45
* Import Redmine trunk SVN rev 3859
author | Chris Cannam |
---|---|
date | Fri, 23 Jul 2010 15:52:44 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:513646585e45 |
---|---|
1 module CodeRay | |
2 module Scanners | |
3 | |
4 class Diff < Scanner | |
5 | |
6 register_for :diff | |
7 title 'diff output' | |
8 | |
9 def scan_tokens tokens, options | |
10 | |
11 line_kind = nil | |
12 state = :initial | |
13 | |
14 until eos? | |
15 kind = match = nil | |
16 | |
17 if match = scan(/\n/) | |
18 if line_kind | |
19 tokens << [:end_line, line_kind] | |
20 line_kind = nil | |
21 end | |
22 tokens << [match, :space] | |
23 next | |
24 end | |
25 | |
26 case state | |
27 | |
28 when :initial | |
29 if match = scan(/--- |\+\+\+ |=+|_+/) | |
30 tokens << [:begin_line, line_kind = :head] | |
31 tokens << [match, :head] | |
32 next unless match = scan(/.+/) | |
33 kind = :plain | |
34 elsif match = scan(/Index: |Property changes on: /) | |
35 tokens << [:begin_line, line_kind = :head] | |
36 tokens << [match, :head] | |
37 next unless match = scan(/.+/) | |
38 kind = :plain | |
39 elsif match = scan(/Added: /) | |
40 tokens << [:begin_line, line_kind = :head] | |
41 tokens << [match, :head] | |
42 next unless match = scan(/.+/) | |
43 kind = :plain | |
44 state = :added | |
45 elsif match = scan(/\\ /) | |
46 tokens << [:begin_line, line_kind = :change] | |
47 tokens << [match, :change] | |
48 next unless match = scan(/.+/) | |
49 kind = :plain | |
50 elsif scan(/(@@)((?>[^@\n]*))(@@)/) | |
51 tokens << [:begin_line, line_kind = :change] | |
52 tokens << [self[1], :change] | |
53 tokens << [self[2], :plain] | |
54 tokens << [self[3], :change] | |
55 next unless match = scan(/.+/) | |
56 kind = :plain | |
57 elsif match = scan(/\+/) | |
58 tokens << [:begin_line, line_kind = :insert] | |
59 tokens << [match, :insert] | |
60 next unless match = scan(/.+/) | |
61 kind = :plain | |
62 elsif match = scan(/-/) | |
63 tokens << [:begin_line, line_kind = :delete] | |
64 tokens << [match, :delete] | |
65 next unless match = scan(/.+/) | |
66 kind = :plain | |
67 elsif scan(/ .*/) | |
68 kind = :comment | |
69 elsif scan(/.+/) | |
70 tokens << [:begin_line, line_kind = :head] | |
71 kind = :plain | |
72 else | |
73 raise_inspect 'else case rached' | |
74 end | |
75 | |
76 when :added | |
77 if match = scan(/ \+/) | |
78 tokens << [:begin_line, line_kind = :insert] | |
79 tokens << [match, :insert] | |
80 next unless match = scan(/.+/) | |
81 kind = :plain | |
82 else | |
83 state = :initial | |
84 next | |
85 end | |
86 end | |
87 | |
88 match ||= matched | |
89 if $CODERAY_DEBUG and not kind | |
90 raise_inspect 'Error token %p in line %d' % | |
91 [[match, kind], line], tokens | |
92 end | |
93 raise_inspect 'Empty token', tokens unless match | |
94 | |
95 tokens << [match, kind] | |
96 end | |
97 | |
98 tokens << [:end_line, line_kind] if line_kind | |
99 tokens | |
100 end | |
101 | |
102 end | |
103 | |
104 end | |
105 end |