Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Heshen Chen <chen.heshen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14591 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			133 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
## @file
 | 
						|
# This file is used to define class objects of INF file [UserExtension] section. 
 | 
						|
# It will consumed by InfParser. 
 | 
						|
#
 | 
						|
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
#
 | 
						|
# This program and the accompanying materials are licensed and made available 
 | 
						|
# under the terms and conditions of the BSD License which accompanies this 
 | 
						|
# distribution. The full text of the license may be found at 
 | 
						|
# http://opensource.org/licenses/bsd-license.php
 | 
						|
#
 | 
						|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
'''
 | 
						|
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 self.UserExtension.has_key(IdContentItem):           
 | 
						|
                #
 | 
						|
                # 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 |