https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			556 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			556 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # This file is used to parse a PCD file of .PKG file
 | |
| #
 | |
| # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| '''
 | |
| PcdXml
 | |
| '''
 | |
| 
 | |
| ##
 | |
| # Import Modules
 | |
| #
 | |
| 
 | |
| from Library.Xml.XmlRoutines import XmlElement
 | |
| from Library.Xml.XmlRoutines import XmlAttribute
 | |
| from Library.Xml.XmlRoutines import XmlNode
 | |
| from Library.Xml.XmlRoutines import CreateXmlElement
 | |
| from Library.Xml.XmlRoutines import XmlList
 | |
| from Library.StringUtils import GetStringOfList
 | |
| from Library.StringUtils import ConvertNEToNOTEQ
 | |
| from Library.StringUtils import ConvertNOTEQToNE
 | |
| from Library import GlobalData
 | |
| from Object.POM.CommonObject import PcdObject
 | |
| from Object.POM.CommonObject import PcdErrorObject
 | |
| from Xml.CommonXml import HelpTextXml
 | |
| from Xml.CommonXml import PromptXml
 | |
| from Xml.CommonXml import CommonDefinesXml
 | |
| from Xml.XmlParserMisc import GetHelpTextList
 | |
| from Xml.XmlParserMisc import GetPromptList
 | |
| import re
 | |
| 
 | |
| ##
 | |
| # PcdErrorXml
 | |
| #
 | |
| class PcdErrorXml(object):
 | |
|     def __init__(self):
 | |
|         self.ValidValueList = ''
 | |
|         self.ValidValueListLang = ''
 | |
|         self.ValidValueRange = ''
 | |
|         self.Expression = ''
 | |
|         self.ErrorNumber = ''
 | |
|         self.ErrorMessage = []
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)
 | |
|         self.ValidValueListLang = \
 | |
|         XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')
 | |
|         self.ValidValueRange = self.TransferValidEpxr2ValidRange(XmlElement(Item, '%s/ValidValueRange' % Key))
 | |
|         self.Expression = XmlElement(Item, '%s/Expression' % Key)
 | |
|         self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)
 | |
|         for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):
 | |
|             ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')
 | |
|             ErrorMessageLang = \
 | |
|             XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')
 | |
|             self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))
 | |
| 
 | |
|         Error = PcdErrorObject()
 | |
|         Error.SetValidValue(self.ValidValueList)
 | |
|         Error.SetValidValueLang(self.ValidValueListLang)
 | |
|         Error.SetValidValueRange(self.ValidValueRange)
 | |
|         Error.SetExpression(self.Expression)
 | |
|         Error.SetErrorNumber(self.ErrorNumber)
 | |
|         Error.SetErrorMessageList(self.ErrorMessage)
 | |
| 
 | |
|         return Error
 | |
| 
 | |
|     def ToXml(self, PcdError, Key):
 | |
|         if self.Expression:
 | |
|             pass
 | |
|         AttributeList = []
 | |
|         NodeList = []
 | |
|         if PcdError.GetValidValue():
 | |
|             Element1 = \
 | |
|             CreateXmlElement('ValidValueList', PcdError.GetValidValue(), [], \
 | |
|                              [['Lang', PcdError.GetValidValueLang()]])
 | |
|             NodeList.append(Element1)
 | |
|         if PcdError.GetValidValueRange():
 | |
|             TansferedRangeStr = self.TransferValidRange2Expr(PcdError.GetTokenSpaceGuidCName(),
 | |
|                                                              PcdError.GetCName(),
 | |
|                                                              PcdError.GetValidValueRange())
 | |
|             Element1 = \
 | |
|             CreateXmlElement('ValidValueRange', \
 | |
|                              TansferedRangeStr, [], [])
 | |
|             NodeList.append(Element1)
 | |
|         if PcdError.GetExpression():
 | |
|             NodeList.append(['Expression', PcdError.GetExpression()])
 | |
|         if PcdError.GetErrorNumber():
 | |
|             NodeList.append(['ErrorNumber', PcdError.GetErrorNumber()])
 | |
|         for Item in PcdError.GetErrorMessageList():
 | |
|             Element = \
 | |
|             CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])
 | |
|             NodeList.append(Element)
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def TransferValidRange2Expr(self, TokenSpaceGuidCName, CName, ValidRange):
 | |
|         if self.Expression:
 | |
|             pass
 | |
|         INT_RANGE_PATTERN1 = '[\t\s]*[0-9]+[\t\s]*-[\t\s]*[0-9]+'
 | |
|         INT_RANGE_PATTERN2 = '[\t\s]*(LT|GT|LE|GE|XOR|EQ)[\t\s]+\d+[\t\s]*'
 | |
|         HEX_RANGE_PATTERN1 = \
 | |
|             '[\t\s]*0[xX][a-fA-F0-9]+[\t\s]*-[\t\s]*0[xX][a-fA-F0-9]+'
 | |
|         HEX_RANGE_PATTERN2 = '[\t\s]*(LT|GT|LE|GE|XOR|EQ)[\t\s]+0[xX][a-fA-F0-9]+[\t\s]*'
 | |
|         IntMatch1 = re.compile(INT_RANGE_PATTERN1)
 | |
|         IntMatch2 = re.compile(INT_RANGE_PATTERN2)
 | |
|         HexMatch1 = re.compile(HEX_RANGE_PATTERN1)
 | |
|         HexMatch2 = re.compile(HEX_RANGE_PATTERN2)
 | |
|         PcdName = '.'.join([TokenSpaceGuidCName, CName])
 | |
|         HexMatchedList = []
 | |
|         IntMatchedList = []
 | |
|         #
 | |
|         # Convert HEX2 format range
 | |
|         #
 | |
|         if HexMatch2:
 | |
|             for MatchObj in HexMatch2.finditer(ValidRange):
 | |
|                 MatchStr = MatchObj.group()
 | |
|                 TransferedRangeStr = ' '.join(['', PcdName, MatchStr.strip()])
 | |
|                 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)
 | |
|         #
 | |
|         # Convert INT2 format range
 | |
|         #
 | |
|         if IntMatch2:
 | |
|             for MatchObj in IntMatch2.finditer(ValidRange):
 | |
|                 MatchStr = MatchObj.group()
 | |
|                 TransferedRangeStr = ' '.join(['', PcdName, MatchStr.strip()])
 | |
|                 ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)
 | |
|         #
 | |
|         # Convert HEX1 format range
 | |
|         #
 | |
|         if HexMatch1:
 | |
|             HexMatchedList += HexMatch1.findall(ValidRange)
 | |
| 
 | |
|         for MatchStr in HexMatchedList:
 | |
|             RangeItemList = MatchStr.strip().split('-')
 | |
|             TransferedRangeStr = '(%s GE %s) AND (%s LE %s)' % \
 | |
|                 (PcdName, RangeItemList[0].strip(), PcdName, RangeItemList[1].strip())
 | |
|             ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)
 | |
|         #
 | |
|         # Convert INT1 format range
 | |
|         #
 | |
|         if IntMatch1:
 | |
|             IntMatchedList += IntMatch1.findall(ValidRange)
 | |
| 
 | |
|         for MatchStr in IntMatchedList:
 | |
|             RangeItemList = MatchStr.strip().split('-')
 | |
|             TransferedRangeStr = '(%s GE %s) AND (%s LE %s)' % \
 | |
|                 (PcdName, RangeItemList[0].strip(), PcdName, RangeItemList[1].strip())
 | |
|             ValidRange = ValidRange.replace(MatchStr, TransferedRangeStr)
 | |
| 
 | |
|         return ValidRange
 | |
| 
 | |
|     def TransferValidEpxr2ValidRange(self, ValidRangeExpr):
 | |
|         if self.Expression:
 | |
|             pass
 | |
| 
 | |
|         PCD_PATTERN = \
 | |
|         '[\t\s]*[_a-zA-Z][a-zA-Z0-9_]*[\t\s]*\.[\t\s]*[_a-zA-Z][a-zA-Z0-9_]*[\t\s]*'
 | |
|         IntPattern1 = \
 | |
|         '[\t\s]*\([\t\s]*'+PCD_PATTERN+'[\t\s]+GE[\t\s]+\d+[\t\s]*\)[\t\s]+AND[\t\s]+\([\t\s]*'+\
 | |
|         PCD_PATTERN+'[\t\s]+LE[\t\s]+\d+[\t\s]*\)'
 | |
|         IntPattern1 = IntPattern1.replace(' ', '')
 | |
|         IntPattern2 = '[\t\s]*'+PCD_PATTERN+'[\t\s]+(LT|GT|LE|GE|XOR|EQ)[\t\s]+\d+[\t\s]*'
 | |
| 
 | |
|         HexPattern1 = \
 | |
|         '[\t\s]*\([\t\s]*'+PCD_PATTERN+'[\t\s]+GE[\t\s]+0[xX][0-9a-fA-F]+[\t\s]*\)[\t\s]+AND[\t\s]+\([\t\s]*'+\
 | |
|         PCD_PATTERN+'[\t\s]+LE[\t\s]+0[xX][0-9a-fA-F]+[\t\s]*\)'
 | |
|         HexPattern1 = HexPattern1.replace(' ', '')
 | |
|         HexPattern2 = '[\t\s]*'+PCD_PATTERN+'[\t\s]+(LT|GT|LE|GE|XOR|EQ)[\t\s]+0[xX][0-9a-zA-Z]+[\t\s]*'
 | |
| 
 | |
|         #
 | |
|         # Do the Hex1 conversion
 | |
|         #
 | |
|         HexMatchedList = re.compile(HexPattern1).findall(ValidRangeExpr)
 | |
|         HexRangeDict = {}
 | |
|         for HexMatchedItem in HexMatchedList:
 | |
|             #
 | |
|             # To match items on both sides of '-'
 | |
|             #
 | |
|             RangeItemList = re.compile('[\t\s]*0[xX][0-9a-fA-F]+[\t\s]*').findall(HexMatchedItem)
 | |
|             if RangeItemList and len(RangeItemList) == 2:
 | |
|                 HexRangeDict[HexMatchedItem] = RangeItemList
 | |
| 
 | |
|         for Key in HexRangeDict.keys():
 | |
|             MaxItem = MixItem = ''
 | |
|             if int(HexRangeDict[Key][0], 16) > int(HexRangeDict[Key][1], 16):
 | |
|                 MaxItem = HexRangeDict[Key][0]
 | |
|                 MixItem = HexRangeDict[Key][1]
 | |
|             else:
 | |
|                 MaxItem = HexRangeDict[Key][1]
 | |
|                 MixItem = HexRangeDict[Key][0]
 | |
| 
 | |
|             Range = ' %s - %s' % (MixItem.strip(), MaxItem.strip())
 | |
|             ValidRangeExpr = ValidRangeExpr.replace(Key, Range)
 | |
|         #
 | |
|         # Do the INT1 conversion
 | |
|         #
 | |
|         IntRangeDict = {}
 | |
|         IntMatchList = re.compile(IntPattern1).findall(ValidRangeExpr)
 | |
|         for MatchedItem in IntMatchList:
 | |
|             #
 | |
|             # To match items on both sides of '-'
 | |
|             #
 | |
|             RangeItemList = re.compile('[\t\s]*\d+[\t\s]*').findall(MatchedItem)
 | |
|             if RangeItemList and len(RangeItemList) == 2:
 | |
|                 IntRangeDict[MatchedItem] = RangeItemList
 | |
| 
 | |
|         for Key in IntRangeDict.keys():
 | |
|             MaxItem = MixItem = ''
 | |
|             if int(IntRangeDict[Key][0]) > int(IntRangeDict[Key][1]):
 | |
|                 MaxItem = IntRangeDict[Key][0]
 | |
|                 MixItem = IntRangeDict[Key][1]
 | |
|             else:
 | |
|                 MaxItem = IntRangeDict[Key][1]
 | |
|                 MixItem = IntRangeDict[Key][0]
 | |
| 
 | |
|             Range = ' %s - %s' % (MixItem.strip(), MaxItem.strip())
 | |
|             ValidRangeExpr = ValidRangeExpr.replace(Key, Range)
 | |
|         #
 | |
|         # Do the HEX2 conversion
 | |
|         #
 | |
|         for MatchObj in re.compile(HexPattern2).finditer(ValidRangeExpr):
 | |
|             MatchStr = MatchObj.group()
 | |
|             Range = re.compile(PCD_PATTERN).sub(' ', MatchStr)
 | |
|             ValidRangeExpr = ValidRangeExpr.replace(MatchStr, Range)
 | |
|         #
 | |
|         # Do the INT2 conversion
 | |
|         #
 | |
|         for MatchObj in re.compile(IntPattern2).finditer(ValidRangeExpr):
 | |
|             MatchStr = MatchObj.group()
 | |
|             Range = re.compile(PCD_PATTERN).sub(' ', MatchStr)
 | |
|             ValidRangeExpr = ValidRangeExpr.replace(MatchStr, Range)
 | |
| 
 | |
|         return ValidRangeExpr
 | |
| 
 | |
| 
 | |
| 
 | |
|     def __str__(self):
 | |
|         return "ValidValueList = %s ValidValueListLang = %s ValidValueRange \
 | |
|         = %s Expression = %s ErrorNumber = %s %s" % \
 | |
|         (self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, \
 | |
|          self.Expression, self.ErrorNumber, self.ErrorMessage)
 | |
| 
 | |
| ##
 | |
| # PcdEntryXml
 | |
| #
 | |
| class PcdEntryXml(object):
 | |
|     def __init__(self):
 | |
|         self.PcdItemType = ''
 | |
|         self.PcdUsage = ''
 | |
|         self.TokenSpaceGuidCName = ''
 | |
|         self.TokenSpaceGuidValue = ''
 | |
|         self.Token = ''
 | |
|         self.CName = ''
 | |
|         self.PcdCName = ''
 | |
|         self.DatumType = ''
 | |
|         self.ValidUsage = ''
 | |
|         self.DefaultValue = ''
 | |
|         self.MaxDatumSize = ''
 | |
|         self.Value = ''
 | |
|         self.Offset = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.Prompt = []
 | |
|         self.HelpText = []
 | |
|         self.PcdError = []
 | |
| 
 | |
|     ##
 | |
|     # AsBuilt will use FromXml
 | |
|     #
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.PcdItemType = \
 | |
|         XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')
 | |
|         self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')
 | |
|         self.TokenSpaceGuidCName = \
 | |
|         XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)
 | |
|         self.TokenSpaceGuidValue = \
 | |
|         XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)
 | |
|         self.Token = XmlElement(Item, '%s/Token' % Key)
 | |
|         self.CName = XmlElement(Item, '%s/CName' % Key)
 | |
|         self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)
 | |
|         self.DatumType = XmlElement(Item, '%s/DatumType' % Key)
 | |
|         self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)
 | |
|         if not GlobalData.gIS_BINARY_INF:
 | |
|             self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
 | |
|         else:
 | |
|             self.DefaultValue = XmlElement(Item, '%s/Value' % Key)
 | |
|         self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)
 | |
|         self.Value = XmlElement(Item, '%s/Value' % Key)
 | |
|         self.Offset = XmlElement(Item, '%s/Offset' % Key)
 | |
|         self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
 | |
| 
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
|         for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
 | |
|             PcdErrorObjXml = PcdErrorXml()
 | |
|             PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')
 | |
|             self.PcdError.append(PcdErrorObj)
 | |
| 
 | |
|         self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
 | |
| 
 | |
|         PcdEntry = PcdObject()
 | |
|         PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
 | |
|         PcdEntry.SetTokenSpaceGuidValue(self.TokenSpaceGuidValue)
 | |
|         PcdEntry.SetToken(self.Token)
 | |
|         PcdEntry.SetOffset(self.Offset)
 | |
|         PcdEntry.SetCName(self.CName)
 | |
|         PcdEntry.SetPcdCName(self.PcdCName)
 | |
|         PcdEntry.SetDatumType(self.DatumType)
 | |
|         PcdEntry.SetValidUsage(self.ValidUsage)
 | |
|         PcdEntry.SetDefaultValue(self.DefaultValue)
 | |
|         PcdEntry.SetMaxDatumSize(self.MaxDatumSize)
 | |
|         PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|         PcdEntry.SetItemType(self.PcdItemType)
 | |
| 
 | |
|         PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
|         PcdEntry.SetPcdErrorsList(self.PcdError)
 | |
| 
 | |
|         return PcdEntry
 | |
|     ##
 | |
|     # Package will use FromXml2
 | |
|     #
 | |
|     def FromXml2(self, Item, Key):
 | |
|         self.TokenSpaceGuidCName = \
 | |
|         XmlElement(Item, '%s/TokenSpaceGuidCname' % Key)
 | |
|         self.Token = XmlElement(Item, '%s/Token' % Key)
 | |
|         self.CName = XmlElement(Item, '%s/CName' % Key)
 | |
|         self.DatumType = XmlElement(Item, '%s/DatumType' % Key)
 | |
|         self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)
 | |
|         self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
 | |
|         self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)
 | |
|         self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
 | |
|         for PromptItem in XmlList(Item, '%s/Prompt' % Key):
 | |
|             PromptObj = PromptXml()
 | |
|             PromptObj.FromXml(PromptItem, '%s/Prompt' % Key)
 | |
|             self.Prompt.append(PromptObj)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
|         for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
 | |
|             PcdErrorObjXml = PcdErrorXml()
 | |
|             PcdErrorObj = PcdErrorObjXml.FromXml(PcdErrorItem, 'PcdError')
 | |
|             self.PcdError.append(PcdErrorObj)
 | |
| 
 | |
|         self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
 | |
| 
 | |
|         PcdEntry = PcdObject()
 | |
|         PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         PcdEntry.SetSupModuleList(self.CommonDefines.SupModList)
 | |
|         PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
 | |
|         PcdEntry.SetToken(self.Token)
 | |
|         PcdEntry.SetCName(self.CName)
 | |
|         PcdEntry.SetDatumType(self.DatumType)
 | |
|         PcdEntry.SetValidUsage(self.ValidUsage)
 | |
|         PcdEntry.SetDefaultValue(self.DefaultValue)
 | |
|         PcdEntry.SetMaxDatumSize(self.MaxDatumSize)
 | |
|         PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
| 
 | |
|         PcdEntry.SetPromptList(GetPromptList(self.Prompt))
 | |
|         PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
|         PcdEntry.SetPcdErrorsList(self.PcdError)
 | |
| 
 | |
|         return PcdEntry
 | |
| 
 | |
|     ##
 | |
|     # Module will use FromXml3
 | |
|     #
 | |
|     def FromXml3(self, Item, Key):
 | |
|         self.PcdItemType = \
 | |
|         XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')
 | |
|         self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')
 | |
|         self.TokenSpaceGuidCName = \
 | |
|         XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)
 | |
|         self.CName = XmlElement(Item, '%s/CName' % Key)
 | |
|         self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)
 | |
|         self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
 | |
|         for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
 | |
|             HelpTextObj = HelpTextXml()
 | |
|             HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
 | |
|             self.HelpText.append(HelpTextObj)
 | |
|         for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):
 | |
|             PcdErrorObj = PcdErrorXml()
 | |
|             PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')
 | |
|             self.PcdError.append(PcdErrorObj)
 | |
| 
 | |
|         self.DefaultValue = ConvertNOTEQToNE(self.DefaultValue)
 | |
| 
 | |
|         PcdEntry = PcdObject()
 | |
|         PcdEntry.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|         PcdEntry.SetTokenSpaceGuidCName(self.TokenSpaceGuidCName)
 | |
|         PcdEntry.SetCName(self.CName)
 | |
|         PcdEntry.SetValidUsage(self.PcdUsage)
 | |
|         PcdEntry.SetDefaultValue(self.DefaultValue)
 | |
|         PcdEntry.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|         PcdEntry.SetItemType(self.PcdItemType)
 | |
| 
 | |
|         PcdEntry.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
|         PcdEntry.SetPcdErrorsList(self.PcdError)
 | |
| 
 | |
|         return PcdEntry
 | |
| 
 | |
|     def ToXml(self, PcdEntry, Key):
 | |
|         if self.PcdCName:
 | |
|             pass
 | |
| 
 | |
|         DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
 | |
| 
 | |
|         AttributeList = \
 | |
|         [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
 | |
|          ['PcdUsage', PcdEntry.GetValidUsage()], \
 | |
|          ['PcdItemType', PcdEntry.GetItemType()], \
 | |
|          ['FeatureFlag', PcdEntry.GetFeatureFlag()],
 | |
|         ]
 | |
|         NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],
 | |
|                     ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],
 | |
|                     ['Token', PcdEntry.GetToken()],
 | |
|                     ['CName', PcdEntry.GetCName()],
 | |
|                     ['DatumType', PcdEntry.GetDatumType()],
 | |
|                     ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],
 | |
|                     ['DefaultValue', DefaultValue],
 | |
|                     ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
 | |
|                     ['Offset', PcdEntry.GetOffset()],
 | |
|                    ]
 | |
| 
 | |
|         for Item in PcdEntry.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         for Item in PcdEntry.GetPcdErrorsList():
 | |
|             Tmp = PcdErrorXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'PcdError'))
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
|     ##
 | |
|     # Package will use ToXml2
 | |
|     #
 | |
|     def ToXml2(self, PcdEntry, Key):
 | |
|         if self.PcdCName:
 | |
|             pass
 | |
| 
 | |
|         DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
 | |
| 
 | |
|         AttributeList = \
 | |
|         [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
 | |
|          ['SupModList', GetStringOfList(PcdEntry.GetSupModuleList())]
 | |
|         ]
 | |
|         NodeList = [['TokenSpaceGuidCname', PcdEntry.GetTokenSpaceGuidCName()],
 | |
|                     ['Token', PcdEntry.GetToken()],
 | |
|                     ['CName', PcdEntry.GetCName()],
 | |
|                     ['DatumType', PcdEntry.GetDatumType()],
 | |
|                     ['ValidUsage', GetStringOfList(PcdEntry.GetValidUsage())],
 | |
|                     ['DefaultValue', DefaultValue],
 | |
|                     ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
 | |
|                    ]
 | |
|         for Item in PcdEntry.GetPromptList():
 | |
|             Tmp = PromptXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
| 
 | |
|         for Item in PcdEntry.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
| 
 | |
|         for Item in PcdEntry.GetPcdErrorsList():
 | |
|             Tmp = PcdErrorXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'PcdError'))
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
|     ##
 | |
|     # Module will use ToXml3
 | |
|     #
 | |
|     def ToXml3(self, PcdEntry, Key):
 | |
|         if self.PcdCName:
 | |
|             pass
 | |
| 
 | |
|         DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
 | |
| 
 | |
|         AttributeList = \
 | |
|         [['SupArchList', GetStringOfList(PcdEntry.GetSupArchList())], \
 | |
|          ['PcdUsage', PcdEntry.GetValidUsage()], \
 | |
|          ['PcdItemType', PcdEntry.GetItemType()], \
 | |
|          ['FeatureFlag', ConvertNEToNOTEQ(PcdEntry.GetFeatureFlag())],
 | |
|         ]
 | |
|         NodeList = [['CName', PcdEntry.GetCName()],
 | |
|                     ['TokenSpaceGuidCName', PcdEntry.GetTokenSpaceGuidCName()],
 | |
|                     ['DefaultValue', DefaultValue],
 | |
|                    ]
 | |
| 
 | |
|         for Item in PcdEntry.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         for Item in PcdEntry.GetPcdErrorsList():
 | |
|             Tmp = PcdErrorXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'PcdError'))
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     ##
 | |
|     # AsBuild Module will use ToXml4
 | |
|     #
 | |
|     def ToXml4(self, PcdEntry, Key):
 | |
|         if self.PcdCName:
 | |
|             pass
 | |
| 
 | |
|         DefaultValue = ConvertNEToNOTEQ(PcdEntry.GetDefaultValue())
 | |
| 
 | |
|         AttributeList = []
 | |
| 
 | |
|         NodeList = [
 | |
|                     ['TokenSpaceGuidValue', PcdEntry.GetTokenSpaceGuidValue()],
 | |
|                     ['PcdCName', PcdEntry.GetCName()],
 | |
|                     ['Token', PcdEntry.GetToken()],
 | |
|                     ['DatumType', PcdEntry.GetDatumType()],
 | |
|                     ['MaxDatumSize', PcdEntry.GetMaxDatumSize()],
 | |
|                     ['Value', DefaultValue],
 | |
|                     ['Offset', PcdEntry.GetOffset()]
 | |
|                    ]
 | |
| 
 | |
|         for Item in PcdEntry.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         for Item in PcdEntry.GetPcdErrorsList():
 | |
|             Tmp = PcdErrorXml()
 | |
|             NodeList.append(Tmp.ToXml(Item, 'PcdError'))
 | |
| 
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = \
 | |
|         ('PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s \
 | |
|         TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s \
 | |
|         DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s \
 | |
|         Value = %s Offset = %s %s') % \
 | |
|         (self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, \
 | |
|          self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, \
 | |
|          self.DatumType, self.ValidUsage, self.DefaultValue, \
 | |
|          self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + "\n\t" + str(Item)
 | |
|         for Item in self.PcdError:
 | |
|             Str = Str + "\n\tPcdError:" + str(Item)
 | |
|         return Str
 |