## @file # This file is used to define class objects of INF file [UserExtension] section. # It will consumed by InfParser. # # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent ''' InfUserExtensionsObject ''' from Logger import StringTable as ST from Logger import ToolError import Logger.Log as Logger from Library import GlobalData from Library.Misc import Sdict class InfUserExtensionItem(): def __init__(self, Content = '', UserId = '', IdString = ''): self.Content = Content self.UserId = UserId self.IdString = IdString self.SupArchList = [] def SetContent(self, Content): self.Content = Content def GetContent(self): return self.Content def SetUserId(self, UserId): self.UserId = UserId def GetUserId(self): return self.UserId def SetIdString(self, IdString): self.IdString = IdString def GetIdString(self): return self.IdString def SetSupArchList(self, SupArchList): self.SupArchList = SupArchList def GetSupArchList(self): return self.SupArchList ## # # # class InfUserExtensionObject(): def __init__(self): self.UserExtension = Sdict() def SetUserExtension(self, UserExtensionCont, IdContent=None, LineNo=None): if not UserExtensionCont or UserExtensionCont == '': return True # # IdContent is a list contain UserId and IdString # For this call the general section header parser, if no definition of # IdString/UserId, it will return 'COMMON' # for IdContentItem in IdContent: InfUserExtensionItemObj = InfUserExtensionItem() if IdContentItem[0] == 'COMMON': UserId = '' else: UserId = IdContentItem[0] if IdContentItem[1] == 'COMMON': IdString = '' else: IdString = IdContentItem[1] # # Fill UserExtensionObj members. # InfUserExtensionItemObj.SetUserId(UserId) InfUserExtensionItemObj.SetIdString(IdString) InfUserExtensionItemObj.SetContent(UserExtensionCont) InfUserExtensionItemObj.SetSupArchList(IdContentItem[2]) # for CheckItem in self.UserExtension: # if IdContentItem[0] == CheckItem[0] and IdContentItem[1] == CheckItem[1]: # if IdContentItem[2].upper() == 'COMMON' or CheckItem[2].upper() == 'COMMON': # # # # For COMMON ARCH type, do special check. # # # Logger.Error('InfParser', # ToolError.FORMAT_INVALID, # ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\ # (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]), # File=GlobalData.gINF_MODULE_NAME, # Line=LineNo, # ExtraData=None) if IdContentItem in self.UserExtension: # # Each UserExtensions section header must have a unique set # of UserId, IdString and Arch values. # This means that the same UserId can be used in more than one # section header, provided the IdString or Arch values are # different. The same IdString values can be used in more than # one section header if the UserId or Arch values are # different. The same UserId and the same IdString can be used # in a section header if the Arch values are different in each # of the section headers. # Logger.Error('InfParser', ToolError.FORMAT_INVALID, ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\ (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]), File=GlobalData.gINF_MODULE_NAME, Line=LineNo, ExtraData=None) else: UserExtensionList = [] UserExtensionList.append(InfUserExtensionItemObj) self.UserExtension[IdContentItem] = UserExtensionList return True def GetUserExtension(self): return self.UserExtension