parameters: (self, interface, featurename, api, profile)
docstring: Capture added interfaces for a `<version>` or `<extension>`.
  
          - interface - Element for `<version>` or `<extension>`, containing
            `<require>` and `<remove>` tags
          - featurename - name of the feature
          - api - string specifying API name being generated
          - profile - string specifying API profile being generated
docstring_summary: Capture added interfaces for a `<version>` or `<extension>`.
docstring_tokens: Capture added interfaces for a <version > or <extension > .
function: def fillFeatureDictionary(self, interface, featurename, api, profile):
          """Capture added interfaces for a `<version>` or `<extension>`.
  
          - interface - Element for `<version>` or `<extension>`, containing
            `<require>` and `<remove>` tags
          - featurename - name of the feature
          - api - string specifying API name being generated
          - profile - string specifying API profile being generated"""
  
          # Explicitly initialize known types - errors for unhandled categories
          self.gen.featureDictionary[featurename] = {
              "enumconstant": {},
              "command": {},
              "enum": {},
              "struct": {},
              "handle": {},
              "basetype": {},
              "include": {},
              "define": {},
              "bitmask": {},
              "union": {},
              "funcpointer": {},
          }
  
          # <require> marks things that are required by this version/profile
          for require in interface.findall('require'):
              if matchAPIProfile(api, profile, require):
  
                  # Determine the required extension or version needed for a require block
                  # Assumes that only one of these is specified
                  required_key = require.get('feature')
                  if required_key is None:
                      required_key = require.get('extension')
  
                  # Loop over types, enums, and commands in the tag
                  for typeElem in require.findall('type'):
                      typename = typeElem.get('name')
                      typeinfo = self.lookupElementInfo(typename, self.typedict)
  
                      if typeinfo:
                          # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
                          alias = self.getAlias(typeElem, self.typedict)
                          if not self.checkForCorrectionAliases(alias, require, 'type'):
                              # Resolve the type info to the actual type, so we get an accurate read for 'structextends'
                              while alias:
                                  typeinfo = self.lookupElementInfo(alias, self.typedict)
                                  alias = typeinfo.elem.get('alias')
  
                              typecat = typeinfo.elem.get('category')
                              typeextends = typeinfo.elem.get('structextends')
                              if not required_key in self.gen.featureDictionary[featurename][typecat]:
                                  self.gen.featureDictionary[featurename][typecat][required_key] = {}
                              if not typeextends in self.gen.featureDictionary[featurename][typecat][required_key]:
                                  self.gen.featureDictionary[featurename][typecat][required_key][typeextends] = []
                              self.gen.featureDictionary[featurename][typecat][required_key][typeextends].append(typename)
  
                  for enumElem in require.findall('enum'):
                      enumname = enumElem.get('name')
                      typeinfo = self.lookupElementInfo(enumname, self.enumdict)
  
                      # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
                      alias = self.getAlias(enumElem, self.enumdict)
                      if not self.checkForCorrectionAliases(alias, require, 'enum'):
                          enumextends = enumElem.get('extends')
                          if not required_key in self.gen.featureDictionary[featurename]['enumconstant']:
                              self.gen.featureDictionary[featurename]['enumconstant'][required_key] = {}
                          if not enumextends in self.gen.featureDictionary[featurename]['enumconstant'][required_key]:
                              self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends] = []
                          self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends].append(enumname)
  
                  for cmdElem in require.findall('command'):
  
                      # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible.
                      alias = self.getAlias(cmdElem, self.cmddict)
                      if not self.checkForCorrectionAliases(alias, require, 'command'):
                          if not required_key in self.gen.featureDictionary[featurename]['command']:
                              self.gen.featureDictionary[featurename]['command'][required_key] = []
                          self.gen.featureDictionary[featurename]['command'][required_key].append(cmdElem.get('name'))
function_tokens: def fillFeatureDictionary ( self , interface , featurename , api , profile ) : # Explicitly initialize known types - errors for unhandled categories self . gen . featureDictionary [ featurename ] = { "enumconstant" : { } , "command" : { } , "enum" : { } , "struct" : { } , "handle" : { } , "basetype" : { } , "include" : { } , "define" : { } , "bitmask" : { } , "union" : { } , "funcpointer" : { } , } # <require> marks things that are required by this version/profile for require in interface . findall ( 'require' ) : if matchAPIProfile ( api , profile , require ) : # Determine the required extension or version needed for a require block # Assumes that only one of these is specified required_key = require . get ( 'feature' ) if required_key is None : required_key = require . get ( 'extension' ) # Loop over types, enums, and commands in the tag for typeElem in require . findall ( 'type' ) : typename = typeElem . get ( 'name' ) typeinfo = self . lookupElementInfo ( typename , self . typedict ) if typeinfo : # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible. alias = self . getAlias ( typeElem , self . typedict ) if not self . checkForCorrectionAliases ( alias , require , 'type' ) : # Resolve the type info to the actual type, so we get an accurate read for 'structextends' while alias : typeinfo = self . lookupElementInfo ( alias , self . typedict ) alias = typeinfo . elem . get ( 'alias' ) typecat = typeinfo . elem . get ( 'category' ) typeextends = typeinfo . elem . get ( 'structextends' ) if not required_key in self . gen . featureDictionary [ featurename ] [ typecat ] : self . gen . featureDictionary [ featurename ] [ typecat ] [ required_key ] = { } if not typeextends in self . gen . featureDictionary [ featurename ] [ typecat ] [ required_key ] : self . gen . featureDictionary [ featurename ] [ typecat ] [ required_key ] [ typeextends ] = [ ] self . gen . featureDictionary [ featurename ] [ typecat ] [ required_key ] [ typeextends ] . append ( typename ) for enumElem in require . findall ( 'enum' ) : enumname = enumElem . get ( 'name' ) typeinfo = self . lookupElementInfo ( enumname , self . enumdict ) # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible. alias = self . getAlias ( enumElem , self . enumdict ) if not self . checkForCorrectionAliases ( alias , require , 'enum' ) : enumextends = enumElem . get ( 'extends' ) if not required_key in self . gen . featureDictionary [ featurename ] [ 'enumconstant' ] : self . gen . featureDictionary [ featurename ] [ 'enumconstant' ] [ required_key ] = { } if not enumextends in self . gen . featureDictionary [ featurename ] [ 'enumconstant' ] [ required_key ] : self . gen . featureDictionary [ featurename ] [ 'enumconstant' ] [ required_key ] [ enumextends ] = [ ] self . gen . featureDictionary [ featurename ] [ 'enumconstant' ] [ required_key ] [ enumextends ] . append ( enumname ) for cmdElem in require . findall ( 'command' ) : # Remove aliases in the same extension/feature; these are always added as a correction. Don't need the original to be visible. alias = self . getAlias ( cmdElem , self . cmddict ) if not self . checkForCorrectionAliases ( alias , require , 'command' ) : if not required_key in self . gen . featureDictionary [ featurename ] [ 'command' ] : self . gen . featureDictionary [ featurename ] [ 'command' ] [ required_key ] = [ ] self . gen . featureDictionary [ featurename ] [ 'command' ] [ required_key ] . append ( cmdElem . get ( 'name' ) )