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>
		
			
				
	
	
		
			279 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # This file is used to parse a xml file of .PKG file
 | |
| #
 | |
| # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| '''
 | |
| GuidProtocolPpiXml
 | |
| '''
 | |
| from Library.StringUtils import ConvertNEToNOTEQ
 | |
| from Library.StringUtils import ConvertNOTEQToNE
 | |
| from Library.StringUtils import GetStringOfList
 | |
| from Library.Xml.XmlRoutines import XmlElement
 | |
| from Library.Xml.XmlRoutines import XmlAttribute
 | |
| from Library.Xml.XmlRoutines import XmlNode
 | |
| from Library.Xml.XmlRoutines import XmlList
 | |
| from Library.Xml.XmlRoutines import CreateXmlElement
 | |
| 
 | |
| from Object.POM.CommonObject import GuidObject
 | |
| from Object.POM.CommonObject import ProtocolObject
 | |
| from Object.POM.CommonObject import PpiObject
 | |
| 
 | |
| from Xml.CommonXml import CommonDefinesXml
 | |
| from Xml.CommonXml import HelpTextXml
 | |
| 
 | |
| from Xml.XmlParserMisc import GetHelpTextList
 | |
| 
 | |
| ##
 | |
| #GUID/Protocol/Ppi Common
 | |
| #
 | |
| class GuidProtocolPpiXml(object):
 | |
|     def __init__(self, Mode):
 | |
|         self.UiName = ''
 | |
|         self.GuidTypes = ''
 | |
|         self.Notify = ''
 | |
|         self.CName = ''
 | |
|         self.GuidValue = ''
 | |
|         self.CommonDefines = CommonDefinesXml()
 | |
|         self.HelpText = []
 | |
|         #
 | |
|         # Guid/Ppi/Library, internal used for indicate return object for
 | |
|         # FromXml
 | |
|         #
 | |
|         self.Type = ''
 | |
|         #
 | |
|         # there are slightly different field between package and module
 | |
|         #
 | |
|         self.Mode = Mode
 | |
|         self.GuidType = ''
 | |
|         self.VariableName = ''
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         self.UiName = XmlAttribute(XmlNode(Item, '%s' % Key), 'UiName')
 | |
|         self.GuidType = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidType')
 | |
|         self.Notify = XmlAttribute(XmlNode(Item, '%s' % Key), 'Notify')
 | |
|         self.CName = XmlElement(Item, '%s/CName' % Key)
 | |
|         self.GuidValue = XmlElement(Item, '%s/GuidValue' % Key)
 | |
|         self.VariableName = XmlElement(Item, '%s/VariableName' % 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)
 | |
| 
 | |
|         if self.Type == 'Guid':
 | |
|             GuidProtocolPpi = GuidObject()
 | |
|         elif self.Type == 'Protocol':
 | |
|             GuidProtocolPpi = ProtocolObject()
 | |
|         else:
 | |
|             GuidProtocolPpi = PpiObject()
 | |
|         GuidProtocolPpi.SetHelpTextList(GetHelpTextList(self.HelpText))
 | |
| 
 | |
|         return GuidProtocolPpi
 | |
| 
 | |
|     def ToXml(self, GuidProtocolPpi, Key):
 | |
|         if self.GuidValue:
 | |
|             pass
 | |
|         AttributeList = \
 | |
|         [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
 | |
|          ['UiName', GuidProtocolPpi.GetName()], \
 | |
|          ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \
 | |
|          ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
 | |
|          ['SupArchList', GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|          ['SupModList', GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \
 | |
|          ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
 | |
|         ]
 | |
|         NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                     ['GuidValue', GuidProtocolPpi.GetGuid()],
 | |
|                     ['VariableName', GuidProtocolPpi.VariableName]
 | |
|                    ]
 | |
|         for Item in GuidProtocolPpi.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| 
 | |
|     def __str__(self):
 | |
|         Str = \
 | |
|         "UiName = %s Notify = %s GuidTypes = %s CName = %s GuidValue = %s %s" \
 | |
|         % (self.UiName, self.Notify, self.GuidTypes, self.CName, \
 | |
|            self.GuidValue, self.CommonDefines)
 | |
|         for Item in self.HelpText:
 | |
|             Str = Str + "\n\t" + str(Item)
 | |
|         return Str
 | |
| ##
 | |
| #GUID Xml
 | |
| #
 | |
| class GuidXml(GuidProtocolPpiXml):
 | |
|     def __init__(self, Mode):
 | |
|         GuidProtocolPpiXml.__init__(self, Mode)
 | |
|         self.Type = 'Guid'
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
 | |
| 
 | |
|         if self.Mode == 'Package':
 | |
| 
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
|             GuidProtocolPpi.SetGuid(self.GuidValue)
 | |
|         else:
 | |
|             GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
 | |
|             if self.GuidType:
 | |
|                 GuidProtocolPpi.SetGuidTypeList([self.GuidType])
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
|             GuidProtocolPpi.SetVariableName(self.VariableName)
 | |
|         return GuidProtocolPpi
 | |
| 
 | |
|     def ToXml(self, GuidProtocolPpi, Key):
 | |
|         if self.Mode == 'Package':
 | |
|             AttributeList = \
 | |
|             [['GuidType', \
 | |
|               GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \
 | |
|               ['SupArchList', \
 | |
|                GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|                ['SupModList', \
 | |
|                 GetStringOfList(GuidProtocolPpi.GetSupModuleList())],
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                         ['GuidValue', GuidProtocolPpi.GetGuid()],
 | |
|                        ]
 | |
|         else:
 | |
|             AttributeList = \
 | |
|             [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
 | |
|              ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())],\
 | |
|               ['SupArchList', \
 | |
|                GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|                ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                         ['VariableName', GuidProtocolPpi.GetVariableName()]
 | |
|                        ]
 | |
| 
 | |
|         for Item in GuidProtocolPpi.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| ##
 | |
| #Protocol Xml
 | |
| #
 | |
| class ProtocolXml(GuidProtocolPpiXml):
 | |
|     def __init__(self, Mode):
 | |
|         GuidProtocolPpiXml.__init__(self, Mode)
 | |
|         self.Type = 'Protocol'
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
 | |
|         if self.Mode == 'Package':
 | |
|             GuidProtocolPpi.SetFeatureFlag(self.CommonDefines.FeatureFlag)
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
|             GuidProtocolPpi.SetGuid(self.GuidValue)
 | |
|         else:
 | |
|             GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
 | |
|             if self.Notify.upper() == "TRUE":
 | |
|                 GuidProtocolPpi.SetNotify(True)
 | |
|             elif self.Notify.upper() == "FALSE":
 | |
|                 GuidProtocolPpi.SetNotify(False)
 | |
|             else:
 | |
|                 GuidProtocolPpi.SetNotify('')
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
| 
 | |
|         return GuidProtocolPpi
 | |
| 
 | |
|     def ToXml(self, GuidProtocolPpi, Key):
 | |
|         if self.Mode == 'Package':
 | |
|             AttributeList = \
 | |
|             [['SupArchList', \
 | |
|               GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|               ['SupModList', \
 | |
|                GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \
 | |
|                ['FeatureFlag', GuidProtocolPpi.GetFeatureFlag()]
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                         ['GuidValue', GuidProtocolPpi.GetGuid()],
 | |
|                        ]
 | |
|         else:
 | |
|             AttributeList = \
 | |
|             [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
 | |
|              ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
 | |
|              ['SupArchList', \
 | |
|               GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|               ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                        ]
 | |
| 
 | |
|         for Item in GuidProtocolPpi.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
| 
 | |
|         return Root
 | |
| ##
 | |
| #Ppi Xml
 | |
| #
 | |
| class PpiXml(GuidProtocolPpiXml):
 | |
|     def __init__(self, Mode):
 | |
|         GuidProtocolPpiXml.__init__(self, Mode)
 | |
|         self.Type = 'Ppi'
 | |
| 
 | |
|     def FromXml(self, Item, Key):
 | |
|         GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
 | |
|         if self.Mode == 'Package':
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
|             GuidProtocolPpi.SetGuid(self.GuidValue)
 | |
|         else:
 | |
|             GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
 | |
|             if self.Notify.upper() == "TRUE":
 | |
|                 GuidProtocolPpi.SetNotify(True)
 | |
|             elif self.Notify.upper() == "FALSE":
 | |
|                 GuidProtocolPpi.SetNotify(False)
 | |
|             else:
 | |
|                 GuidProtocolPpi.SetNotify('')
 | |
|             GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
 | |
|             GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
 | |
|             GuidProtocolPpi.SetCName(self.CName)
 | |
| 
 | |
|         return GuidProtocolPpi
 | |
| 
 | |
|     def ToXml(self, GuidProtocolPpi, Key):
 | |
|         if self.Mode == 'Package':
 | |
|             AttributeList = \
 | |
|             [['SupArchList', \
 | |
|               GetStringOfList(GuidProtocolPpi.GetSupArchList())],
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                         ['GuidValue', GuidProtocolPpi.GetGuid()],
 | |
|                        ]
 | |
|         else:
 | |
|             AttributeList = \
 | |
|             [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
 | |
|              ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
 | |
|              ['SupArchList', \
 | |
|               GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
 | |
|               ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
 | |
|             ]
 | |
|             NodeList = [['CName', GuidProtocolPpi.GetCName()],
 | |
|                        ]
 | |
| 
 | |
|         for Item in GuidProtocolPpi.GetHelpTextList():
 | |
|             Tmp = HelpTextXml()
 | |
|             NodeList.append(Tmp.ToXml(Item))
 | |
|         Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
 | |
|         return Root
 |