Mercurial > hg > soundsoftware-site
comparison lib/redmine/unified_diff.rb @ 929:5f33065ddc4b redmine-1.3
Update to Redmine SVN rev 9414 on 1.3-stable branch
author | Chris Cannam |
---|---|
date | Wed, 27 Jun 2012 14:54:18 +0100 |
parents | cbb26bc654de |
children | 433d4f72a19b |
comparison
equal
deleted
inserted
replaced
909:cbb26bc654de | 929:5f33065ddc4b |
---|---|
110 end | 110 end |
111 end | 111 end |
112 | 112 |
113 private | 113 private |
114 | 114 |
115 # Escape the HTML for the diff | |
116 def escapeHTML(line) | |
117 CGI.escapeHTML(line) | |
118 end | |
119 | |
120 def diff_for_added_line | 115 def diff_for_added_line |
121 if @type == 'sbs' && @removed > 0 && @added < @removed | 116 if @type == 'sbs' && @removed > 0 && @added < @removed |
122 self[-(@removed - @added)] | 117 self[-(@removed - @added)] |
123 else | 118 else |
124 diff = Diff.new | 119 diff = Diff.new |
128 end | 123 end |
129 | 124 |
130 def parse_line(line, type="inline") | 125 def parse_line(line, type="inline") |
131 if line[0, 1] == "+" | 126 if line[0, 1] == "+" |
132 diff = diff_for_added_line | 127 diff = diff_for_added_line |
133 diff.line_right = escapeHTML line[1..-1] | 128 diff.line_right = line[1..-1] |
134 diff.nb_line_right = @line_num_r | 129 diff.nb_line_right = @line_num_r |
135 diff.type_diff_right = 'diff_in' | 130 diff.type_diff_right = 'diff_in' |
136 @line_num_r += 1 | 131 @line_num_r += 1 |
137 @added += 1 | 132 @added += 1 |
138 true | 133 true |
139 elsif line[0, 1] == "-" | 134 elsif line[0, 1] == "-" |
140 diff = Diff.new | 135 diff = Diff.new |
141 diff.line_left = escapeHTML line[1..-1] | 136 diff.line_left = line[1..-1] |
142 diff.nb_line_left = @line_num_l | 137 diff.nb_line_left = @line_num_l |
143 diff.type_diff_left = 'diff_out' | 138 diff.type_diff_left = 'diff_out' |
144 self << diff | 139 self << diff |
145 @line_num_l += 1 | 140 @line_num_l += 1 |
146 @removed += 1 | 141 @removed += 1 |
147 true | 142 true |
148 else | 143 else |
149 write_offsets | 144 write_offsets |
150 if line[0, 1] =~ /\s/ | 145 if line[0, 1] =~ /\s/ |
151 diff = Diff.new | 146 diff = Diff.new |
152 diff.line_right = escapeHTML line[1..-1] | 147 diff.line_right = line[1..-1] |
153 diff.nb_line_right = @line_num_r | 148 diff.nb_line_right = @line_num_r |
154 diff.line_left = escapeHTML line[1..-1] | 149 diff.line_left = line[1..-1] |
155 diff.nb_line_left = @line_num_l | 150 diff.nb_line_left = @line_num_l |
156 self << diff | 151 self << diff |
157 @line_num_l += 1 | 152 @line_num_l += 1 |
158 @line_num_r += 1 | 153 @line_num_r += 1 |
159 true | 154 true |
222 def line | 217 def line |
223 type_diff_right == 'diff_in' ? line_right : line_left | 218 type_diff_right == 'diff_in' ? line_right : line_left |
224 end | 219 end |
225 | 220 |
226 def html_line_left | 221 def html_line_left |
227 if offsets | 222 line_to_html(line_left, offsets) |
228 line_left.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>') | |
229 else | |
230 line_left | |
231 end | |
232 end | 223 end |
233 | 224 |
234 def html_line_right | 225 def html_line_right |
235 if offsets | 226 line_to_html(line_right, offsets) |
236 line_right.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>') | |
237 else | |
238 line_right | |
239 end | |
240 end | 227 end |
241 | 228 |
242 def html_line | 229 def html_line |
243 if offsets | 230 line_to_html(line, offsets) |
244 line.dup.insert(offsets.first, '<span>').insert(offsets.last, '</span>') | |
245 else | |
246 line | |
247 end | |
248 end | 231 end |
249 | 232 |
250 def inspect | 233 def inspect |
251 puts '### Start Line Diff ###' | 234 puts '### Start Line Diff ###' |
252 puts self.nb_line_left | 235 puts self.nb_line_left |
253 puts self.line_left | 236 puts self.line_left |
254 puts self.nb_line_right | 237 puts self.nb_line_right |
255 puts self.line_right | 238 puts self.line_right |
256 end | 239 end |
240 | |
241 private | |
242 | |
243 def line_to_html(line, offsets) | |
244 if offsets | |
245 s = '' | |
246 unless offsets.first == 0 | |
247 s << CGI.escapeHTML(line[0..offsets.first-1]) | |
248 end | |
249 s << '<span>' + CGI.escapeHTML(line[offsets.first..offsets.last]) + '</span>' | |
250 unless offsets.last == -1 | |
251 s << CGI.escapeHTML(line[offsets.last+1..-1]) | |
252 end | |
253 s | |
254 else | |
255 CGI.escapeHTML(line) | |
256 end | |
257 end | |
257 end | 258 end |
258 end | 259 end |