Home | History | Annotate | Download | only in Parser
      1 ## @file

      2 # This file is used to define class objects of INF file [UserExtension] section. 

      3 # It will consumed by InfParser. 

      4 #

      5 # Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>

      6 #

      7 # This program and the accompanying materials are licensed and made available 

      8 # under the terms and conditions of the BSD License which accompanies this 

      9 # distribution. The full text of the license may be found at 

     10 # http://opensource.org/licenses/bsd-license.php

     11 #

     12 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

     13 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

     14 
     15 '''
     16 InfUserExtensionsObject
     17 '''
     18 
     19 from Logger import StringTable as ST
     20 from Logger import ToolError
     21 import Logger.Log as Logger
     22 from Library import GlobalData 
     23 
     24 from Library.Misc import Sdict
     25 
     26 class InfUserExtensionItem():
     27     def __init__(self,
     28                  Content = '',
     29                  UserId = '',
     30                  IdString = ''):
     31         self.Content  = Content
     32         self.UserId   = UserId
     33         self.IdString = IdString
     34         self.SupArchList = []
     35     
     36     def SetContent(self, Content):
     37         self.Content = Content
     38     def GetContent(self):
     39         return self.Content
     40     
     41     def SetUserId(self, UserId):
     42         self.UserId = UserId
     43     def GetUserId(self):
     44         return self.UserId
     45     
     46     def SetIdString(self, IdString):
     47         self.IdString = IdString
     48     def GetIdString(self):
     49         return self.IdString
     50     
     51     def SetSupArchList(self, SupArchList):
     52         self.SupArchList = SupArchList
     53     def GetSupArchList(self):
     54         return self.SupArchList
     55     
     56 ##

     57 #

     58 #

     59 #

     60 class InfUserExtensionObject():
     61     def __init__(self):
     62         self.UserExtension = Sdict()
     63     
     64     def SetUserExtension(self, UserExtensionCont, IdContent=None, LineNo=None):
     65         if not UserExtensionCont or UserExtensionCont == '':
     66             return True
     67         #

     68         # IdContent is a list contain UserId and IdString 

     69         # For this call the general section header  parser, if no definition of

     70         # IdString/UserId, it will return 'COMMON'

     71         #

     72         for IdContentItem in IdContent:                              
     73             InfUserExtensionItemObj = InfUserExtensionItem()
     74             if IdContentItem[0] == 'COMMON':
     75                 UserId = ''
     76             else:
     77                 UserId = IdContentItem[0]
     78                 
     79             if IdContentItem[1] == 'COMMON':
     80                 IdString = ''
     81             else:
     82                 IdString = IdContentItem[1]   
     83             
     84             #

     85             # Fill UserExtensionObj members.

     86             #     

     87             InfUserExtensionItemObj.SetUserId(UserId)
     88             InfUserExtensionItemObj.SetIdString(IdString)
     89             InfUserExtensionItemObj.SetContent(UserExtensionCont)
     90             InfUserExtensionItemObj.SetSupArchList(IdContentItem[2]) 
     91             
     92 #            for CheckItem in self.UserExtension:

     93 #                if IdContentItem[0] == CheckItem[0] and IdContentItem[1] == CheckItem[1]:

     94 #                    if IdContentItem[2].upper() == 'COMMON' or CheckItem[2].upper() == 'COMMON':

     95 #                        #

     96 #                        # For COMMON ARCH type, do special check.

     97 #                        #

     98 #                        Logger.Error('InfParser', 

     99 #                            ToolError.FORMAT_INVALID,

    100 #                            ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\

    101 #                            (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]),

    102 #                            File=GlobalData.gINF_MODULE_NAME, 

    103 #                            Line=LineNo,

    104 #                            ExtraData=None)

    105             
    106             if self.UserExtension.has_key(IdContentItem):           
    107                 #

    108                 # Each UserExtensions section header must have a unique set 

    109                 # of UserId, IdString and Arch values.

    110                 # This means that the same UserId can be used in more than one 

    111                 # section header, provided the IdString or Arch values are 

    112                 # different. The same IdString values can be used in more than 

    113                 # one section header if the UserId or Arch values are 

    114                 # different. The same UserId and the same IdString can be used 

    115                 # in a section header if the Arch values are different in each 

    116                 # of the section headers.

    117                 #

    118                 Logger.Error('InfParser', 
    119                              ToolError.FORMAT_INVALID,
    120                              ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\
    121                              (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]),
    122                              File=GlobalData.gINF_MODULE_NAME, 
    123                              Line=LineNo,
    124                              ExtraData=None)
    125             else:
    126                 UserExtensionList = []
    127                 UserExtensionList.append(InfUserExtensionItemObj)
    128                 self.UserExtension[IdContentItem] = UserExtensionList
    129         
    130         return True
    131         
    132     def GetUserExtension(self):
    133         return self.UserExtension