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

Side by Side Diff: sdk/lib/html/scripts/idlrenderer.dart

Issue 11691009: Moved most of html lib generating scripts into tools. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 12 months 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
« no previous file with comments | « sdk/lib/html/scripts/idlparser_test.py ('k') | sdk/lib/html/scripts/idlrenderer.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 List sorted(Iterable input, [compare, key]) {
6 comparator(compare, key) {
7 if (compare == null && key == null)
8 return (a, b) => a.compareTo(b);
9 if (compare == null)
10 return (a, b) => key(a).compareTo(key(b));
11 if (key == null)
12 return compare;
13 return (a, b) => compare(key(a), key(b));
14 }
15 List copy = new List.from(input);
16 copy.sort(comparator(compare, key));
17 return copy;
18 }
19
20 render(idl_node, [indent_str=' ']) {
21 var output = [''];
22 var indent_stack = [];
23
24 indented(action) { // TODO: revert to indented(action()) {
25 indent_stack.add(indent_str);
26 action();
27 indent_stack.removeLast();
28 }
29
30 sort(nodes) => sorted(nodes, key: (a) => a.id);
31
32 var w; // For some reason mutually recursive local functions don't work.
33
34 wln([node]) {
35 w(node);
36 output.add('\n');
37 }
38
39 w = (node, [list_separator]) {
40 /*
41 Writes the given node.
42
43 Args:
44 node -- a string, IDLNode instance or a list of such.
45 list_separator -- if provided, and node is a list,
46 list_separator will be written between the list items.
47 */
48 if (node == null) {
49 return;
50 } else if (node is String) {
51 if (output.last.endsWith('\n'))
52 output.addAll(indent_stack);
53 output.add(node);
54 } else if (node is List) {
55 var separator = null;
56 for (var element in node) {
57 w(separator);
58 separator = list_separator;
59 w(element);
60 }
61 } else if (node is IDLFile) {
62 w(node.modules);
63 w(node.interfaces);
64 } else if (node is IDLModule) {
65 w(node.annotations);
66 w(node.extAttrs);
67 wln('module ${node.id} {');
68 indented(() {
69 w(node.interfaces);
70 w(node.typedefs);
71 });
72 wln('};');
73 } else if (node is IDLInterface) {
74 w(node.annotations);
75 w(node.extAttrs);
76 w('interface ${node.id}');
77 indented(() {
78 if (!node.parents.isEmpty) {
79 wln(' :');
80 w(node.parents, ',\n');
81 }
82 wln(' {');
83 section(list, comment) {
84 if (list != null && !list.isEmpty) {
85 wln();
86 wln(comment);
87 w(sort(list));
88 }
89 }
90 section(node.constants, '/* Constants */');
91 section(node.attributes, '/* Attributes */');
92 section(node.operations, '/* Operations */');
93 section(node.snippets, '/* Snippets */');
94 });
95 wln('};');
96 } else if (node is IDLParentInterface) {
97 w(node.annotations);
98 w(node.type.id);
99 } else if (node is IDLAnnotations) {
100 for (var name in sorted(node.map.keys)) {
101 IDLAnnotation annotation = node.map[name];
102 var args = annotation.map;
103 if (args.isEmpty) {
104 w('@$name');
105 } else {
106 var formattedArgs = [];
107 for (var argName in sorted(args.keys)) {
108 var argValue = args[argName];
109 if (argValue == null)
110 formattedArgs.add(argName);
111 else
112 formattedArgs.add('$argName=$argValue');
113 }
114 w('@$name(${Strings.join(formattedArgs,',')})');
115 }
116 w(' ');
117 }
118 } else if (node is IDLExtAttrs) {
119 if(!node.map.isEmpty) {
120 w('[');
121 var sep = null;
122 for (var name in sorted(node.map.keys)) {
123 w(sep);
124 sep = ', ';
125 w(name);
126 var value = node.map[name];
127 if (value != null) {
128 w('=');
129 w(value);
130 }
131 }
132 w('] ');
133 }
134 } else if (node is IDLAttribute) {
135 w(node.annotations);
136 w(node.extAttrs);
137 //if (node.isFcGetter)
138 // w('getter ');
139 //if (node.isFcSetter)
140 // w('setter ');
141 wln('attribute ${node.type.id} ${node.id};');
142 } else if (node is IDLConstant) {
143 w(node.annotations);
144 w(node.extAttrs);
145 wln('const ${node.type.id} ${node.id} = ${node.value};');
146 } else if (node is IDLSnippet) {
147 w(node.annotations);
148 wln('snippet {${node.text}};');
149 } else if (node is IDLOperation) {
150 w(node.annotations);
151 w(node.extAttrs);
152 if (node.specials != null && !node.specials.isEmpty) {
153 w(node.specials, ' ');
154 w(' ');
155 }
156 w('${node.type.id} ${node.id}');
157 w('(');
158 w(node.arguments, ', ');
159 wln(');');
160 } else if (node is IDLArgument) {
161 w(node.extAttrs);
162 w('in ');
163 if (node.isOptional)
164 w('optional ');
165 w('${node.type.id} ${node.id}');
166 } else if (node is IDLExtAttrFunctionValue) {
167 w(node.name);
168 w('(');
169 w(node.arguments, ', ');
170 w(')');
171 } else if (node is IDLTypeDef) {
172 wln('typedef ${node.type.id} ${node.id};');
173 } else {
174 w('// $node\n');
175 }
176 };
177
178 w(idl_node);
179 return Strings.concatAll(output);
180 }
OLDNEW
« no previous file with comments | « sdk/lib/html/scripts/idlparser_test.py ('k') | sdk/lib/html/scripts/idlrenderer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698