Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: client/html/scripts/html-diff.dart

Issue 8769021: Get html-diff running again. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix the frog/world change. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * A script to assist in documenting the difference between the dart:html API 6 * A script to assist in documenting the difference between the dart:html API
7 * and the old DOM API. 7 * and the old DOM API.
8 */ 8 */
9 #library('renames'); 9 #library('renames');
10 10
11 #import('../../../frog/lang.dart'); 11 #import('../../../frog/lang.dart');
12 #import('../../../frog/file_system_node.dart'); 12 #import('../../../frog/file_system_node.dart');
13 #import('../../../frog/file_system.dart'); 13 #import('../../../frog/file_system.dart');
14 #import('../../../utils/dartdoc/dartdoc.dart'); 14 #import('../../../utils/dartdoc/dartdoc.dart');
15 15
16 void main() { 16 void main() {
17 HtmlDiff.initWorld('../../frog', new NodeFileSystem()); 17 HtmlDiff.initWorld('../../frog', new NodeFileSystem());
18 initializeDartDoc(); 18 initializeDartDoc();
19 var diff = new HtmlDiff(); 19 var diff = new HtmlDiff();
20 diff.run(); 20 diff.run();
21 21
22 diff.domToDart.forEach((domMember, htmlMember) { 22 diff.domToDart.forEach((domMember, htmlMember) {
23 if (domMember.name != htmlMember.name) { 23 var domTypeName = domMember.declaringType.name;
24 var domTypeName = domMember.declaringType.name; 24 if (domTypeName == 'DOMWindow') domTypeName = 'Window';
25 var htmlTypeName = htmlMember.declaringType.name. 25 var htmlTypeName = htmlMember.declaringType.name.
26 replaceFirst('WrappingImplementation', ''); 26 replaceFirst('WrappingImplementation', '');
27 if (domMember.name != htmlMember.name ||
28 domTypeName.replaceFirst(new RegExp('^(HTML|WebKit)'), '') !=
29 htmlTypeName) {
27 var htmlName = '$htmlTypeName.${htmlMember.name}'; 30 var htmlName = '$htmlTypeName.${htmlMember.name}';
28 if (htmlMember.isConstructor || htmlMember.isFactory) { 31 if (htmlMember.isConstructor || htmlMember.isFactory) {
29 final separator = htmlMember.name == '' ? '' : '.'; 32 final separator = htmlMember.name == '' ? '' : '.';
30 htmlName = 'new $htmlTypeName$separator${htmlMember.name}'; 33 htmlName = 'new $htmlTypeName$separator${htmlMember.name}';
31 } 34 }
32 print('$domTypeName.${domMember.name} -> ${htmlName}'); 35 print('$domTypeName.${domMember.name} -> ${htmlName}');
33 } 36 }
34 }); 37 });
35 38
36 for (var type in world.dom.types.getValues()) { 39 for (var type in world.dom.types.getValues()) {
37 if (type.name == null) continue; 40 if (type.name == null) continue;
38 if (type.definition is FunctionTypeDefinition) continue; 41 if (type.definition is FunctionTypeDefinition) continue;
39 for (var member in type.members.getValues()) { 42 for (var member in type.members.getValues()) {
40 if (!member.isPrivate && member.name != 'typeName' && 43 if (!member.isPrivate && member.name != 'typeName' &&
41 !diff.domToDart.containsKey(member) && 44 !diff.domToDart.containsKey(member) &&
42 (member is MethodMember || member is PropertyMember)) { 45 (member is MethodMember || member is PropertyMember)) {
43 print('No dart:html wrapper for ${type.name}.${member.name}'); 46 print('No dart:html wrapper for ${type.name}.${member.name}');
44 } 47 }
45 } 48 }
46 } 49 }
47 } 50 }
48 51
49 class HtmlDiff { 52 class HtmlDiff {
50 final Map<Member, Member> domToDart; 53 final Map<Member, Member> domToDart;
51 54
52 static void initWorld(String frogDir, FileSystem files) { 55 static void initWorld(String frogDir, FileSystem files) {
53 parseOptions(frogDir, [] /* args */, files); 56 parseOptions(frogDir, [] /* args */, files);
54 initializeWorld(files); 57 initializeWorld(files);
55 world.processScript('dart:html'); 58 world.processDartScript('dart:htmlimpl');
56 world.resolveAll(); 59 world.resolveAll();
57 } 60 }
58 61
59 HtmlDiff() : domToDart = <Member, Member>{}; 62 HtmlDiff() : domToDart = <Member, Member>{};
60 63
61 void run() { 64 void run() {
62 final htmlLib = world.libraries['dart:html']; 65 final htmlLib = world.libraries['dart:htmlimpl'];
63 for (var htmlType in htmlLib.types.getValues()) { 66 for (var htmlType in htmlLib.types.getValues()) {
64 final domType = htmlToDomType(htmlType); 67 final domType = htmlToDomType(htmlType);
65 final members = new List.from(htmlType.members.getValues()); 68 final members = new List.from(htmlType.members.getValues());
66 members.addAll(htmlType.constructors.getValues()); 69 members.addAll(htmlType.constructors.getValues());
67 htmlType.factories.forEach((f) => members.add(f)); 70 htmlType.factories.forEach((f) => members.add(f));
68 for (var member in members) { 71 for (var member in members) {
69 htmlToDomMembers(member, domType).forEach((m) => domToDart[m] = member); 72 var members = htmlToDomMembers(member, domType);
73 members.forEach((m) => domToDart[m] = member);
70 } 74 }
71 } 75 }
72 } 76 }
73 77
74 Type htmlToDomType(Type htmlType) { 78 Type htmlToDomType(Type htmlType) {
75 if (htmlType.name == null) return; 79 if (htmlType.name == null) return;
76 final tags = _getTags(findComment(htmlType.span)); 80 final tags = _getTags(findComment(htmlType.span));
77 81
78 if (tags.containsKey('domName')) { 82 if (tags.containsKey('domName')) {
79 final domName = tags['domName']; 83 var domName = tags['domName'];
80 if (domName == 'none') return; 84 if (domName == 'none') return;
81 // DOMWindow is Chrome-specific, so we don't use it in our annotations. 85 // DOMWindow is Chrome-specific, so we don't use it in our annotations.
82 if (domName == 'Window') domName = 'DOMWindow'; 86 if (domName == 'Window') domName = 'DOMWindow';
83 final domType = world.dom.types[domName]; 87 final domType = world.dom.types[domName];
84 if (domType == null) print('Warning: no dart:dom type named $domName'); 88 if (domType == null) print('Warning: no dart:dom type named $domName');
85 return domType; 89 return domType;
86 } else { 90 } else {
87 if (!htmlType.name.endsWith('WrappingImplementation')) return; 91 if (!htmlType.name.endsWith('WrappingImplementation')) return;
88 final domName = htmlType.name.replaceFirst('WrappingImplementation', ''); 92 final domName = htmlType.name.replaceFirst('WrappingImplementation', '');
89 var domType = world.dom.types[domName]; 93 var domType = world.dom.types[domName];
90 if (domType == null && domName.endsWith('Element')) { 94 if (domType == null && domName.endsWith('Element')) {
91 domType = world.dom.types['HTML$domName']; 95 domType = world.dom.types['HTML$domName'];
92 } 96 }
93 if (domType == null) domType = world.dom.types['WebKit$domName']; 97 if (domType == null) domType = world.dom.types['WebKit$domName'];
94 if (domType == null) { 98 if (domType == null) {
95 print('Warning: no dart:dom type matches dart:html ${htmlType.name}'); 99 print('Warning: no dart:dom type matches dart:htmlimpl ' +
100 htmlType.name);
96 } 101 }
97 return domType; 102 return domType;
98 } 103 }
99 } 104 }
100 105
101 Set<Member> htmlToDomMembers(Member htmlMember, Type domType) { 106 Set<Member> htmlToDomMembers(Member htmlMember, Type domType) {
102 if (htmlMember.isPrivate) return new Set(); 107 if (htmlMember.isPrivate) return new Set();
103 if (htmlMember is MethodMember) { 108 if (htmlMember is MethodMember) {
104 final tags = _getTags(findComment(htmlMember.span)); 109 final tags = _getTags(findComment(htmlMember.span));
105 if (tags.containsKey('domName')) { 110 if (tags.containsKey('domName')) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 print('Warning: no member ${defaultType.name}.${name}'); 150 print('Warning: no member ${defaultType.name}.${name}');
146 } 151 }
147 return _members(member); 152 return _members(member);
148 } 153 }
149 154
150 final splitName = name.split('.'); 155 final splitName = name.split('.');
151 if (splitName.length != 2) { 156 if (splitName.length != 2) {
152 print('Warning: invalid member name ${name}'); 157 print('Warning: invalid member name ${name}');
153 return new Set(); 158 return new Set();
154 } 159 }
155 final type = library.types[splitName[0]]; 160 var typeName = splitName[0];
161 if (typeName == 'Window') typeName = 'DOMWindow';
162 final type = library.types[typeName];
156 if (type == null) { 163 if (type == null) {
157 print('Warning: no ${library.name} type named ${splitName[0]}'); 164 print('Warning: no ${library.name} type named ${splitName[0]}');
158 return new Set(); 165 return new Set();
159 } 166 }
160 final member = type.members[splitName[1]]; 167 final member = type.members[splitName[1]];
161 if (member == null) { 168 if (member == null) {
162 print('Warning: no member named $name'); 169 print('Warning: no ${library.name} member named $name');
163 } 170 }
164 return _members(member); 171 return _members(member);
165 } 172 }
166 173
167 Set<Member> _members(Member m) => m == null ? new Set() : new Set.from([m]); 174 Set<Member> _members(Member m) => m == null ? new Set() : new Set.from([m]);
168 175
169 Member _getDomMember(Statement stmt, Type domType) { 176 Member _getDomMember(Statement stmt, Type domType) {
170 if (stmt is BlockStatement) { 177 if (stmt is BlockStatement) {
171 final body = stmt.body.filter((s) => !_ignorableStatement(s)); 178 final body = stmt.body.filter((s) => !_ignorableStatement(s));
172 if (body.length != 1) return; 179 if (body.length != 1) return;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 Map<String, String> _getTags(String comment) { 245 Map<String, String> _getTags(String comment) {
239 if (comment == null) return const <String, String>{}; 246 if (comment == null) return const <String, String>{};
240 final re = new RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)"); 247 final re = new RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)");
241 final tags = <String, String>{}; 248 final tags = <String, String>{};
242 for (var m in re.allMatches(comment.trim())) { 249 for (var m in re.allMatches(comment.trim())) {
243 tags[m[1]] = m[2]; 250 tags[m[1]] = m[2];
244 } 251 }
245 return tags; 252 return tags;
246 } 253 }
247 } 254 }
OLDNEW
« no previous file with comments | « client/html/release/htmlimpl.dart ('k') | client/html/src/XMLHttpRequestWrappingImplementation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698