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