| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 * Code for reading an HTML API description. | 6 * Code for reading an HTML API description. |
| 7 */ | 7 */ |
| 8 library from.html; | 8 library from.html; |
| 9 | 9 |
| 10 import 'dart:io'; | 10 import 'dart:io'; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 * <notification event="...">...</notification> <!-- zero or more --> | 133 * <notification event="...">...</notification> <!-- zero or more --> |
| 134 * </domain> | 134 * </domain> |
| 135 * | 135 * |
| 136 * Child elements can occur in any order. | 136 * Child elements can occur in any order. |
| 137 */ | 137 */ |
| 138 Domain domainFromHtml(dom.Element html) { | 138 Domain domainFromHtml(dom.Element html) { |
| 139 checkName(html, 'domain'); | 139 checkName(html, 'domain'); |
| 140 String name = html.attributes['name']; | 140 String name = html.attributes['name']; |
| 141 String context = name ?? 'domain'; | 141 String context = name ?? 'domain'; |
| 142 bool experimental = html.attributes['experimental'] == 'true'; | 142 bool experimental = html.attributes['experimental'] == 'true'; |
| 143 checkAttributes(html, ['name'], context, optionalAttributes: ['experimental'])
; | 143 checkAttributes(html, ['name'], context, |
| 144 optionalAttributes: ['experimental']); |
| 144 List<Request> requests = <Request>[]; | 145 List<Request> requests = <Request>[]; |
| 145 List<Notification> notifications = <Notification>[]; | 146 List<Notification> notifications = <Notification>[]; |
| 146 recurse(html, context, { | 147 recurse(html, context, { |
| 147 'request': (dom.Element child) { | 148 'request': (dom.Element child) { |
| 148 requests.add(requestFromHtml(child, context)); | 149 requests.add(requestFromHtml(child, context)); |
| 149 }, | 150 }, |
| 150 'notification': (dom.Element child) { | 151 'notification': (dom.Element child) { |
| 151 notifications.add(notificationFromHtml(child, context)); | 152 notifications.add(notificationFromHtml(child, context)); |
| 152 } | 153 } |
| 153 }); | 154 }); |
| 154 return new Domain(name, experimental, requests, notifications, html); | 155 return new Domain(name, requests, notifications, html, |
| 156 experimental: experimental); |
| 155 } | 157 } |
| 156 | 158 |
| 157 dom.Element getAncestor(dom.Element html, String name, String context) { | 159 dom.Element getAncestor(dom.Element html, String name, String context) { |
| 158 dom.Element ancestor = html.parent; | 160 dom.Element ancestor = html.parent; |
| 159 while (ancestor != null) { | 161 while (ancestor != null) { |
| 160 if (ancestor.localName == name) { | 162 if (ancestor.localName == name) { |
| 161 return ancestor; | 163 return ancestor; |
| 162 } | 164 } |
| 163 ancestor = ancestor.parent; | 165 ancestor = ancestor.parent; |
| 164 } | 166 } |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 * </type> | 416 * </type> |
| 415 * | 417 * |
| 416 * Where TYPE is any HTML that can be parsed by [typeDeclFromHtml]. | 418 * Where TYPE is any HTML that can be parsed by [typeDeclFromHtml]. |
| 417 * | 419 * |
| 418 * Child elements can occur in any order. | 420 * Child elements can occur in any order. |
| 419 */ | 421 */ |
| 420 TypeDefinition typeDefinitionFromHtml(dom.Element html) { | 422 TypeDefinition typeDefinitionFromHtml(dom.Element html) { |
| 421 checkName(html, 'type'); | 423 checkName(html, 'type'); |
| 422 String name = html.attributes['name']; | 424 String name = html.attributes['name']; |
| 423 String context = name != null ? name : 'type'; | 425 String context = name != null ? name : 'type'; |
| 424 checkAttributes(html, ['name'], context); | 426 checkAttributes(html, ['name'], context, optionalAttributes: ['experimental'])
; |
| 425 TypeDecl type = processContentsAsType(html, context); | 427 TypeDecl type = processContentsAsType(html, context); |
| 426 return new TypeDefinition(name, type, html); | 428 bool experimental = html.attributes['experimental'] == 'true'; |
| 429 return new TypeDefinition(name, type, html, experimental: experimental); |
| 427 } | 430 } |
| 428 | 431 |
| 429 /** | 432 /** |
| 430 * Create a [TypeEnum] from an HTML description. | 433 * Create a [TypeEnum] from an HTML description. |
| 431 */ | 434 */ |
| 432 TypeEnum typeEnumFromHtml(dom.Element html, String context) { | 435 TypeEnum typeEnumFromHtml(dom.Element html, String context) { |
| 433 checkName(html, 'enum', context); | 436 checkName(html, 'enum', context); |
| 434 checkAttributes(html, [], context); | 437 checkAttributes(html, [], context); |
| 435 List<TypeEnumValue> values = <TypeEnumValue>[]; | 438 List<TypeEnumValue> values = <TypeEnumValue>[]; |
| 436 recurse(html, context, { | 439 recurse(html, context, { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 String value = html.attributes['value']; | 510 String value = html.attributes['value']; |
| 508 TypeDecl type = processContentsAsType(html, context); | 511 TypeDecl type = processContentsAsType(html, context); |
| 509 return new TypeObjectField(name, type, html, | 512 return new TypeObjectField(name, type, html, |
| 510 optional: optional, value: value); | 513 optional: optional, value: value); |
| 511 } | 514 } |
| 512 | 515 |
| 513 /** | 516 /** |
| 514 * Create a [TypeObject] from an HTML description. | 517 * Create a [TypeObject] from an HTML description. |
| 515 */ | 518 */ |
| 516 TypeObject typeObjectFromHtml(dom.Element html, String context) { | 519 TypeObject typeObjectFromHtml(dom.Element html, String context) { |
| 517 checkAttributes(html, [], context); | 520 checkAttributes(html, [], context, optionalAttributes: ['experimental']); |
| 518 List<TypeObjectField> fields = <TypeObjectField>[]; | 521 List<TypeObjectField> fields = <TypeObjectField>[]; |
| 519 recurse(html, context, { | 522 recurse(html, context, { |
| 520 'field': (dom.Element child) { | 523 'field': (dom.Element child) { |
| 521 fields.add(typeObjectFieldFromHtml(child, context)); | 524 fields.add(typeObjectFieldFromHtml(child, context)); |
| 522 } | 525 } |
| 523 }); | 526 }); |
| 524 return new TypeObject(fields, html); | 527 bool experimental = html.attributes['experimental'] == 'true'; |
| 528 return new TypeObject(fields, html, experimental: experimental); |
| 525 } | 529 } |
| 526 | 530 |
| 527 /** | 531 /** |
| 528 * Create a [Types] object from an HTML representation such as: | 532 * Create a [Types] object from an HTML representation such as: |
| 529 * | 533 * |
| 530 * <types> | 534 * <types> |
| 531 * <type name="...">...</type> <!-- zero or more --> | 535 * <type name="...">...</type> <!-- zero or more --> |
| 532 * </types> | 536 * </types> |
| 533 */ | 537 */ |
| 534 Types typesFromHtml(dom.Element html) { | 538 Types typesFromHtml(dom.Element html) { |
| 535 checkName(html, 'types'); | 539 checkName(html, 'types'); |
| 536 String context = 'types'; | 540 String context = 'types'; |
| 537 checkAttributes(html, [], context); | 541 checkAttributes(html, [], context); |
| 538 Map<String, TypeDefinition> types = <String, TypeDefinition>{}; | 542 Map<String, TypeDefinition> types = <String, TypeDefinition>{}; |
| 539 recurse(html, context, { | 543 recurse(html, context, { |
| 540 'type': (dom.Element child) { | 544 'type': (dom.Element child) { |
| 541 TypeDefinition typeDefinition = typeDefinitionFromHtml(child); | 545 TypeDefinition typeDefinition = typeDefinitionFromHtml(child); |
| 542 types[typeDefinition.name] = typeDefinition; | 546 types[typeDefinition.name] = typeDefinition; |
| 543 } | 547 } |
| 544 }); | 548 }); |
| 545 return new Types(types, html); | 549 return new Types(types, html); |
| 546 } | 550 } |
| 547 | 551 |
| 548 typedef void ElementProcessor(dom.Element element); | 552 typedef void ElementProcessor(dom.Element element); |
| 549 | 553 |
| 550 typedef void TextProcessor(dom.Text text); | 554 typedef void TextProcessor(dom.Text text); |
| OLD | NEW |