1. Do not use tab characters 2. No trailing white space in one line 3. All files must end with CRLF Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
		
			
				
	
	
		
			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 - 2018, 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.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
 |