| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module provides shared functionality for the system to generate | 6 """This module provides shared functionality for the system to generate |
| 7 Dart:html APIs from the IDL database.""" | 7 Dart:html APIs from the IDL database.""" |
| 8 | 8 |
| 9 from systemfrog import * | 9 from systemfrog import * |
| 10 from systeminterface import * | 10 from systeminterface import * |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 'Node.previousSibling': 'previousNode', | 94 'Node.previousSibling': 'previousNode', |
| 95 'Node.textContent': 'text', | 95 'Node.textContent': 'text', |
| 96 'SVGElement.className': '$dom_svgClassName', | 96 'SVGElement.className': '$dom_svgClassName', |
| 97 'SVGAnimatedString.className': '$dom_svgClassName', | 97 'SVGAnimatedString.className': '$dom_svgClassName', |
| 98 'SVGStylable.className': '$dom_svgClassName', | 98 'SVGStylable.className': '$dom_svgClassName', |
| 99 } | 99 } |
| 100 | 100 |
| 101 #TODO(jacobr): inject annotations into the interfaces based on this table and | 101 #TODO(jacobr): inject annotations into the interfaces based on this table and |
| 102 # on _html_library_renames. | 102 # on _html_library_renames. |
| 103 _injected_doc_fragments = { | 103 _injected_doc_fragments = { |
| 104 'Element.query': ' /** @domName querySelector, Document.getElementById */', | 104 'Element.query': ' /** @domName Element.querySelector, Document.getElementB
yId */', |
| 105 } | 105 } |
| 106 # Members and classes from the dom that should be removed completelly from | 106 # Members and classes from the dom that should be removed completelly from |
| 107 # dart:html. These could be expressed in the IDL instead but expressing this | 107 # dart:html. These could be expressed in the IDL instead but expressing this |
| 108 # as a simple table instead is more concise. | 108 # as a simple table instead is more concise. |
| 109 # Syntax is: ClassName.(get\.|set\.)?MemberName | 109 # Syntax is: ClassName.(get\.|set\.)?MemberName |
| 110 # Using get: and set: is optional and should only be used when a getter needs | 110 # Using get: and set: is optional and should only be used when a getter needs |
| 111 # to be suppressed but not the setter, etc. | 111 # to be suppressed but not the setter, etc. |
| 112 # TODO(jacobr): cleanup and augment this list. | 112 # TODO(jacobr): cleanup and augment this list. |
| 113 _html_library_remove = set([ | 113 _html_library_remove = set([ |
| 114 'Window.get:document', # Removed as we have a custom implementation. | 114 'Window.get:document', # Removed as we have a custom implementation. |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 if constructor_info: | 630 if constructor_info: |
| 631 factory_provider = '_' + typename + 'FactoryProvider'; | 631 factory_provider = '_' + typename + 'FactoryProvider'; |
| 632 | 632 |
| 633 if typename in interface_factories: | 633 if typename in interface_factories: |
| 634 factory_provider = interface_factories[typename] | 634 factory_provider = interface_factories[typename] |
| 635 | 635 |
| 636 if factory_provider: | 636 if factory_provider: |
| 637 extends_str += ' default ' + factory_provider | 637 extends_str += ' default ' + factory_provider |
| 638 | 638 |
| 639 # TODO(vsm): Add appropriate package / namespace syntax. | 639 # TODO(vsm): Add appropriate package / namespace syntax. |
| 640 (self._members_emitter, | 640 (self._type_comment_emitter, |
| 641 self._members_emitter, |
| 641 self._top_level_emitter) = self._emitter.Emit( | 642 self._top_level_emitter) = self._emitter.Emit( |
| 642 self._template + '$!TOP_LEVEL', | 643 self._template + '$!TOP_LEVEL', |
| 643 ID=typename, | 644 ID=typename, |
| 644 EXTENDS=extends_str) | 645 EXTENDS=extends_str) |
| 645 | 646 |
| 647 self._type_comment_emitter.Emit("/// @domName $DOMNAME", |
| 648 DOMNAME=self._interface.doc_js_name) |
| 649 |
| 646 if constructor_info: | 650 if constructor_info: |
| 647 self._members_emitter.Emit( | 651 self._members_emitter.Emit( |
| 648 '\n' | 652 '\n' |
| 649 ' $CTOR($PARAMS);\n', | 653 ' $CTOR($PARAMS);\n', |
| 650 CTOR=typename, | 654 CTOR=typename, |
| 651 PARAMS=constructor_info.ParametersInterfaceDeclaration()); | 655 PARAMS=constructor_info.ParametersInterfaceDeclaration()); |
| 652 | 656 |
| 653 element_type = MaybeTypedArrayElementType(self._interface) | 657 element_type = MaybeTypedArrayElementType(self._interface) |
| 654 if element_type: | 658 if element_type: |
| 655 self._members_emitter.Emit( | 659 self._members_emitter.Emit( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 681 if not html_getter_name or self._shared.IsPrivate(html_getter_name): | 685 if not html_getter_name or self._shared.IsPrivate(html_getter_name): |
| 682 getter = None | 686 getter = None |
| 683 if not html_setter_name or self._shared.IsPrivate(html_setter_name): | 687 if not html_setter_name or self._shared.IsPrivate(html_setter_name): |
| 684 setter = None | 688 setter = None |
| 685 if not getter and not setter: | 689 if not getter and not setter: |
| 686 return | 690 return |
| 687 | 691 |
| 688 # We don't yet handle inconsistent renames of the getter and setter yet. | 692 # We don't yet handle inconsistent renames of the getter and setter yet. |
| 689 if html_getter_name and html_setter_name: | 693 if html_getter_name and html_setter_name: |
| 690 assert html_getter_name == html_setter_name | 694 assert html_getter_name == html_setter_name |
| 691 if html_getter_name != dom_name: | 695 |
| 692 self._members_emitter.Emit('\n /** @domName $DOMNAME */', | 696 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', |
| 693 DOMNAME = dom_name) | 697 DOMINTERFACE=getter.doc_js_interface_name, |
| 698 DOMNAME=dom_name) |
| 694 if (getter and setter and | 699 if (getter and setter and |
| 695 DartType(getter.type.id) == DartType(setter.type.id)): | 700 DartType(getter.type.id) == DartType(setter.type.id)): |
| 696 self._members_emitter.Emit('\n $TYPE $NAME;\n', | 701 self._members_emitter.Emit('\n $TYPE $NAME;\n', |
| 697 NAME=html_getter_name, | 702 NAME=html_getter_name, |
| 698 TYPE=DartType(getter.type.id)); | 703 TYPE=DartType(getter.type.id)); |
| 699 return | 704 return |
| 700 if getter and not setter: | 705 if getter and not setter: |
| 701 self._members_emitter.Emit('\n final $TYPE $NAME;\n', | 706 self._members_emitter.Emit('\n final $TYPE $NAME;\n', |
| 702 NAME=html_getter_name, | 707 NAME=html_getter_name, |
| 703 TYPE=DartType(getter.type.id)); | 708 TYPE=DartType(getter.type.id)); |
| 704 return | 709 return |
| 705 raise Exception('Unexpected getter/setter combination %s %s' % | 710 raise Exception('Unexpected getter/setter combination %s %s' % |
| 706 (getter, setter)) | 711 (getter, setter)) |
| 707 | 712 |
| 708 def AddOperation(self, info): | 713 def AddOperation(self, info): |
| 709 """ | 714 """ |
| 710 Arguments: | 715 Arguments: |
| 711 operations - contains the overloads, one or more operations with the same | 716 operations - contains the overloads, one or more operations with the same |
| 712 name. | 717 name. |
| 713 """ | 718 """ |
| 714 html_name = self._shared.RenameInHtmlLibrary( | 719 html_name = self._shared.RenameInHtmlLibrary( |
| 715 self._interface, info.name) | 720 self._interface, info.name) |
| 716 if html_name and not self._shared.IsPrivate(html_name): | 721 if html_name and not self._shared.IsPrivate(html_name): |
| 717 if html_name != info.name: | 722 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', |
| 718 self._members_emitter.Emit('\n /** @domName $DOMNAME */', | 723 DOMINTERFACE=info.overloads[0].doc_js_interface_name, |
| 719 DOMNAME = info.name) | 724 DOMNAME=info.name) |
| 720 | 725 |
| 721 self._members_emitter.Emit('\n' | 726 self._members_emitter.Emit('\n' |
| 722 ' $TYPE $NAME($PARAMS);\n', | 727 ' $TYPE $NAME($PARAMS);\n', |
| 723 TYPE=info.type_name, | 728 TYPE=info.type_name, |
| 724 NAME=html_name, | 729 NAME=html_name, |
| 725 PARAMS=info.ParametersInterfaceDeclaration()) | 730 PARAMS=info.ParametersInterfaceDeclaration()) |
| 726 | 731 |
| 727 def FinishInterface(self): | 732 def FinishInterface(self): |
| 728 pass | 733 pass |
| 729 | 734 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 743 self._shared.GetParentsEventsClasses(self._interface))) | 748 self._shared.GetParentsEventsClasses(self._interface))) |
| 744 | 749 |
| 745 for event_name in event_attrs: | 750 for event_name in event_attrs: |
| 746 if event_name in _html_event_names: | 751 if event_name in _html_event_names: |
| 747 events_members.Emit('\n EventListenerList get $NAME();\n', | 752 events_members.Emit('\n EventListenerList get $NAME();\n', |
| 748 NAME=_html_event_names[event_name]) | 753 NAME=_html_event_names[event_name]) |
| 749 else: | 754 else: |
| 750 raise Exception('No known html even name for event: ' + event_name) | 755 raise Exception('No known html even name for event: ' + event_name) |
| 751 | 756 |
| 752 def _EmitEventGetter(self, events_interface): | 757 def _EmitEventGetter(self, events_interface): |
| 753 self._members_emitter.Emit('\n $TYPE get on();\n', | 758 self._members_emitter.Emit( |
| 754 TYPE=events_interface) | 759 '\n /**' |
| 760 '\n * @domName EventTarget.addEventListener, ' |
| 761 'EventTarget.removeEventListener, EventTarget.dispatchEvent' |
| 762 '\n */' |
| 763 '\n $TYPE get on();\n', |
| 764 TYPE=events_interface) |
| 755 | 765 |
| 756 # ------------------------------------------------------------------------------ | 766 # ------------------------------------------------------------------------------ |
| 757 | 767 |
| 758 # TODO(jmesserly): inheritance is probably not the right way to factor this long | 768 # TODO(jmesserly): inheritance is probably not the right way to factor this long |
| 759 # term, but it makes merging better for now. | 769 # term, but it makes merging better for now. |
| 760 class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 770 class HtmlFrogClassGenerator(FrogInterfaceGenerator): |
| 761 """Generates a Frog class for the dart:html library from a DOM IDL | 771 """Generates a Frog class for the dart:html library from a DOM IDL |
| 762 interface. | 772 interface. |
| 763 """ | 773 """ |
| 764 | 774 |
| (...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1646 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee | 1656 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee |
| 1647 # that Y = Z-X, so we need to check for Y. | 1657 # that Y = Z-X, so we need to check for Y. |
| 1648 true_code = emitter.Emit( | 1658 true_code = emitter.Emit( |
| 1649 '$(INDENT)if ($COND) {\n' | 1659 '$(INDENT)if ($COND) {\n' |
| 1650 '$!TRUE' | 1660 '$!TRUE' |
| 1651 '$(INDENT)}\n', | 1661 '$(INDENT)}\n', |
| 1652 COND=test, INDENT=indent) | 1662 COND=test, INDENT=indent) |
| 1653 self.GenerateDispatch( | 1663 self.GenerateDispatch( |
| 1654 true_code, info, indent + ' ', position + 1, positive) | 1664 true_code, info, indent + ' ', position + 1, positive) |
| 1655 return True | 1665 return True |
| OLD | NEW |