(self, interface, emit)
| 731 | # |
| 732 | # Processing point at beginning of each extension definition |
| 733 | def beginFeature(self, interface, emit): |
| 734 | OutputGenerator.beginFeature(self, interface, emit) |
| 735 | platform = interface.get('platform') |
| 736 | self.featureExtraProtec = self.vk.platforms[platform] if platform in self.vk.platforms else None |
| 737 | protect = self.vk.platforms[platform] if platform in self.vk.platforms else None |
| 738 | name = interface.get('name') |
| 739 | |
| 740 | # TODO - This is just mimicking featurerequirementsgenerator.py and works because the logic is simple enough (for now) |
| 741 | featureRequirement = [] |
| 742 | requires = interface.findall('./require') |
| 743 | for require in requires: |
| 744 | requireDepends = require.get('depends') |
| 745 | for feature in require.findall('./feature'): |
| 746 | featureStruct = feature.get('struct') |
| 747 | featureName = feature.get('name') |
| 748 | featureRequirement.append(FeatureRequirement(featureStruct, featureName, requireDepends)) |
| 749 | |
| 750 | # Build mapping from (extension, item_name) to their require section depends |
| 751 | # AND track which exact item names are in each extension's require sections |
| 752 | # This is used for building extensionRequirement later |
| 753 | for cmd in require.findall('command'): |
| 754 | cmdName = cmd.get('name') |
| 755 | if cmdName: |
| 756 | if requireDepends: |
| 757 | self.itemRequireSectionDepends[(name, cmdName)] = requireDepends |
| 758 | # Track exact name -> defining extensions |
| 759 | if cmdName not in self.itemDefiningExtensions: |
| 760 | self.itemDefiningExtensions[cmdName] = [] |
| 761 | if name not in self.itemDefiningExtensions[cmdName]: |
| 762 | self.itemDefiningExtensions[cmdName].append(name) |
| 763 | for typeElem in require.findall('type'): |
| 764 | typeName = typeElem.get('name') |
| 765 | if typeName: |
| 766 | if requireDepends: |
| 767 | self.itemRequireSectionDepends[(name, typeName)] = requireDepends |
| 768 | # Track exact name -> defining extensions |
| 769 | if typeName not in self.itemDefiningExtensions: |
| 770 | self.itemDefiningExtensions[typeName] = [] |
| 771 | if name not in self.itemDefiningExtensions[typeName]: |
| 772 | self.itemDefiningExtensions[typeName].append(name) |
| 773 | for enum in require.findall('enum'): |
| 774 | enumName = enum.get('name') |
| 775 | if enumName: |
| 776 | if requireDepends: |
| 777 | self.itemRequireSectionDepends[(name, enumName)] = requireDepends |
| 778 | # Track exact name -> defining extensions |
| 779 | if enumName not in self.itemDefiningExtensions: |
| 780 | self.itemDefiningExtensions[enumName] = [] |
| 781 | if name not in self.itemDefiningExtensions[enumName]: |
| 782 | self.itemDefiningExtensions[enumName].append(name) |
| 783 | |
| 784 | if interface.tag == 'extension': |
| 785 | # Generator scripts built on BaseGenerator do not handle the `supported` attribute of extensions |
| 786 | # therefore historically the `generate_source.py` in individual ecosystem components hacked the |
| 787 | # registry by removing non-applicable or disabled extensions from the loaded XML already before |
| 788 | # reg.py parsed it. That broke the general behavior of reg.py for certain use cases so we now |
| 789 | # filter extensions here instead (after parsing) in order to no longer need the filtering hack |
| 790 | # in downstream `generate_source.py` scripts. |
no test coverage detected