mirror of https://github.com/acidanthera/audk.git
285 lines
11 KiB
Python
285 lines
11 KiB
Python
|
## @file
|
||
|
# This file is used to parse a xml file of .PKG file
|
||
|
#
|
||
|
# 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.
|
||
|
#
|
||
|
|
||
|
'''
|
||
|
GuidProtocolPpiXml
|
||
|
'''
|
||
|
from Library.String import ConvertNEToNOTEQ
|
||
|
from Library.String import ConvertNOTEQToNE
|
||
|
from Library.String 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
|