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

Side by Side Diff: lib/dom/scripts/systemhtml.py

Issue 10068019: Fix ApiDoc to work with new dart:html code. Tweak dart:html generator to generate clearer @domName … (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review fixes Created 8 years, 8 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 | « lib/dom/scripts/idlnode.py ('k') | lib/dom/templates/html/interface/interface.darttemplate » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « lib/dom/scripts/idlnode.py ('k') | lib/dom/templates/html/interface/interface.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698