forked from fdorg/flashdevelop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.rb
More file actions
281 lines (237 loc) · 6.48 KB
/
Copy pathdiff.rb
File metadata and controls
281 lines (237 loc) · 6.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
require 'output/html/html_framework'
class BasicDiffPage < BasicPage
def summary_table(rows, caption)
summary_table_tr(rows, caption) do |row|
html_td do
yield row
end
end
end
def summary_table_tr(rows, caption)
unless rows.nil? || rows.empty?
html_table("class"=>"summary_list", "summary"=>"") do
html_caption(caption)
rows.each do |row|
html_tr do
yield row
end
end
end
end
end
end
class DiffOverviewPage < BasicDiffPage
def initialize(conf, api_changes)
super(conf, "change-summary", "changes")
@title = "API Change Overview"
@api_changes = api_changes
end
def generate_body_content
html_h1("API Change Overview")
unless @api_changes
html_p("No changes")
return
end
summary_table(@api_changes.added_packages, "Added Packages") do |as_package|
name = package_display_name_for(as_package)
href = File.join("..", package_link_for(as_package, "package-summary.html"))
html_a(name, {"href"=>href})
end
summary_table(@api_changes.modified_packages, "Modified Packages") do |as_package|
name = package_display_name_for(as_package)
href = package_link_for(as_package, "change-summary.html")
html_a(name, {"href", href})
end
summary_table(@api_changes.removed_packages, "Removed Packages") do |as_package|
name = package_display_name_for(as_package)
pcdata(name)
end
end
def navigation
html_ul("class"=>"main_nav") do
# TODO
end
end
end
class PackageDiffIndexPage < BasicDiffPage
def initialize(conf, package_changes)
dir = File.join("changes", package_dir_for(package_changes))
super(conf, "change-summary", dir)
@title = "Package #{package_display_name_for(package_changes)} API Change Overview"
@package_changes = package_changes
end
def generate_body_content
html_h1(@title)
summary_table(@package_changes.added_types, "Added Types") do |as_type|
name = as_type.unqualified_name
pcdata(name)
end
summary_table(@package_changes.modified_types, "Modified Types") do |as_type|
name = as_type.new_type.unqualified_name
href = "#{name}.html"
html_a(name, {"href", href})
end
summary_table(@package_changes.removed_types, "Removed Types") do |as_type|
name = as_type.unqualified_name
pcdata(name)
end
end
def navigation
html_ul("class"=>"main_nav") do
# TODO
end
end
end
class TypeDiffPage < BasicDiffPage
def initialize(conf, type_changes)
dir = File.join("changes", type_changes.new_type.package_name.gsub(/\./, "/"))
super(conf, type_changes.new_type.unqualified_name, dir)
@title = "#{type_changes.new_type.unqualified_name} API Change Overview"
@type_changes = type_changes
end
def generate_body_content
html_h1(@title)
summary_table(@type_changes.added_fields, "Added Fields") do |as_field|
pcdata(as_field.name)
end
summary_table_tr(@type_changes.modified_fields, "Modified Fields") do |field_changes|
html_td do
pcdata(field_changes.name)
end
html_td do
generate_visibility_change(field_changes)
generate_static_change(field_changes)
generate_type_change("Field", field_changes)
generate_readwrite_change(field_changes)
end
end
summary_table(@type_changes.removed_fields, "Removed Fields") do |as_field|
pcdata(as_field.name)
end
summary_table(@type_changes.added_methods, "Added Methods") do |as_method|
pcdata(as_method.name)
end
summary_table_tr(@type_changes.modified_methods, "Modified Methods") do |method_changes|
html_td do
pcdata(method_changes.name)
end
html_td do
generate_visibility_change(method_changes)
generate_static_change(method_changes)
generate_type_change("Return", method_changes)
generate_args_change(method_changes)
end
end
summary_table(@type_changes.removed_methods, "Removed Methods") do |as_method|
pcdata(as_method.name)
end
end
def generate_visibility_change(field_changes)
if field_changes.visibility_change
pcdata("Visibility changed from ")
html_code(field_changes.visibility_change.old_vis)
pcdata(" to ")
html_code(field_changes.visibility_change.new_vis)
pcdata(". ")
end
end
def generate_static_change(field_changes)
if field_changes.static_change
if field_changes.static_change.new_flag
pcdata("Is now ")
else
pcdata("Is no longer ")
end
html_code("static")
pcdata(". ")
end
end
def generate_type_name(name)
if name
html_code(name)
else
pcdata("unspecified")
end
end
def generate_type_change(kind, field_changes)
if field_changes.type_change
pcdata(kind)
pcdata(" type changed from ")
generate_type_name(field_changes.type_change.old_type_name)
pcdata(" to ")
generate_type_name(field_changes.type_change.new_type_name)
pcdata(". ")
end
end
def generate_readwrite_change(field_changes)
change = field_changes.readwrite_change
if change
if change.old_read != change.new_read
if change.new_read
pcdata("Is now readable")
else
pcdata("Is no longer readable")
end
end
if change.old_write != change.new_write
if change.new_write
pcdata("Is now writeable")
else
pcdata("Is no longer writeable")
end
end
end
end
def generate_args_change(method_changes)
changes = method_changes.args_change
if changes
pcdata("Argument list changed from ")
list_args(changes.old_args)
pcdata(" to ")
list_args(changes.new_args)
pcdata(".")
end
end
def list_args(args)
html_code do
pcdata("(")
first = true
args.each do |arg|
if first
first = false
else
pcdata(", ")
end
pcdata(arg.name)
if arg.arg_type
pcdata(":")
pcdata(arg.arg_type.name)
end
end
pcdata(")")
end
end
def navigation
html_ul("class"=>"main_nav") do
# TODO
end
end
end
def make_diff_pages(conf, api_changes)
list = []
list << DiffOverviewPage.new(conf, api_changes)
if api_changes
api_changes.modified_packages.each do |package_changes|
list << PackageDiffIndexPage.new(conf, package_changes)
package_changes.modified_types.each do |type_changes|
list << TypeDiffPage.new(conf, type_changes)
end
end
end
list
end
def generate_diffs(conf, api_changes)
list = make_diff_pages(conf, api_changes)
create_all_pages(conf, list)
end
# vim:softtabstop=2:shiftwidth=2