parameters: (one_param, members_list, hfile)
docstring: Check if param is struct or union definition, function, array, bitfield
      or there are multiple parameters.
  
      Structs, unions and functions need additional parsing.
docstring_summary: Check if param is struct or union definition, function, array, bitfield
      or there are multiple parameters.
docstring_tokens: Check if param is struct or union definition function array bitfield or there are multiple parameters .
function: def edit_structured_param_type(one_param, members_list, hfile):
      """Check if param is struct or union definition, function, array, bitfield
      or there are multiple parameters.
  
      Structs, unions and functions need additional parsing.
      """
      if '{' in one_param.type_text:
          name = re.search(r'\}([\w\s\*,]+)$', one_param.type_text)
          if name:
              one_param.name = name.group(1).strip()
          type_text = re.sub(r'\}[\w\s*,]*$', '};', one_param.type_text)
          if one_param.type_text.startswith('struct'):
              s = parse_struct(type_text, hfile)
          elif one_param.type_text.startswith('union'):
              s = parse_union(type_text, hfile)
          elif one_param.type_text.startswith('enum'):
              s = parse_enum(type_text, hfile)
          else:
              s = ''
          one_param.type = s
          return
      # Members that looks like: 'int __SOCKADDR(su_);' are usually macros
      # It's invalid member, we try to determine correct member's type and name.
      one_param.type = re.sub(
          r'^([\w\s\*]*?)\s*\w+\((\w+)[\w\s,\*]*\)', r'\1 \2 ', one_param.type_text).strip()
      if one_param.type_text.endswith(')'):
          parse_function_type(one_param)
          return
      elif one_param.type_text.endswith(']'):
          param = one_param.type_text
          p_type, p_name = split_param_to_type_and_name(param[:param.find('[')])
          one_param.name = p_name
          one_param.type = p_type + ' ' + param[param.find('['):]
          return
      elif':' in one_param.type_text:
          one_param.parse_param_size()
          if ',' in one_param.type_text:
              one_param.parse_multiple_variables(members_list)
              return
      elif ',' in one_param.type_text:
          one_param.parse_multiple_variables(members_list)
          return
      p_type, p_name = split_param_to_type_and_name(one_param.type_text)
      one_param.name = p_name
      one_param.type = p_type
function_tokens: def edit_structured_param_type ( one_param , members_list , hfile ) : if '{' in one_param . type_text : name = re . search ( r'\}([\w\s\*,]+)$' , one_param . type_text ) if name : one_param . name = name . group ( 1 ) . strip ( ) type_text = re . sub ( r'\}[\w\s*,]*$' , '};' , one_param . type_text ) if one_param . type_text . startswith ( 'struct' ) : s = parse_struct ( type_text , hfile ) elif one_param . type_text . startswith ( 'union' ) : s = parse_union ( type_text , hfile ) elif one_param . type_text . startswith ( 'enum' ) : s = parse_enum ( type_text , hfile ) else : s = '' one_param . type = s return # Members that looks like: 'int __SOCKADDR(su_);' are usually macros # It's invalid member, we try to determine correct member's type and name. one_param . type = re . sub ( r'^([\w\s\*]*?)\s*\w+\((\w+)[\w\s,\*]*\)' , r'\1 \2 ' , one_param . type_text ) . strip ( ) if one_param . type_text . endswith ( ')' ) : parse_function_type ( one_param ) return elif one_param . type_text . endswith ( ']' ) : param = one_param . type_text p_type , p_name = split_param_to_type_and_name ( param [ : param . find ( '[' ) ] ) one_param . name = p_name one_param . type = p_type + ' ' + param [ param . find ( '[' ) : ] return elif ':' in one_param . type_text : one_param . parse_param_size ( ) if ',' in one_param . type_text : one_param . parse_multiple_variables ( members_list ) return elif ',' in one_param . type_text : one_param . parse_multiple_variables ( members_list ) return p_type , p_name = split_param_to_type_and_name ( one_param . type_text ) one_param . name = p_name one_param . type = p_type